|
LLVM
4.0.0
|
#include "llvm/Transforms/Scalar/MemCpyOptimizer.h"#include "llvm/Transforms/Scalar.h"#include "llvm/ADT/DenseSet.h"#include "llvm/ADT/SmallVector.h"#include "llvm/ADT/Statistic.h"#include "llvm/Analysis/ValueTracking.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/GetElementPtrTypeIterator.h"#include "llvm/IR/GlobalVariable.h"#include "llvm/IR/IRBuilder.h"#include "llvm/Support/Debug.h"#include "llvm/Support/raw_ostream.h"#include "llvm/Transforms/Utils/Local.h"#include <algorithm>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "memcpyopt" |
Functions | |
| STATISTIC (NumMemCpyInstr,"Number of memcpy instructions deleted") | |
| STATISTIC (NumMemSetInfer,"Number of memsets inferred") | |
| STATISTIC (NumMoveToCpy,"Number of memmoves converted to memcpy") | |
| STATISTIC (NumCpyToSet,"Number of memcpys converted to memset") | |
| static int64_t | GetOffsetFromIndex (const GEPOperator *GEP, unsigned Idx, bool &VariableIdxFound, const DataLayout &DL) |
| static bool | IsPointerOffset (Value *Ptr1, Value *Ptr2, int64_t &Offset, const DataLayout &DL) |
| Return true if Ptr1 is provably equal to Ptr2 plus a constant offset, and return that constant offset. More... | |
| INITIALIZE_PASS_BEGIN (MemCpyOptLegacyPass,"memcpyopt","MemCpy Optimization", false, false) INITIALIZE_PASS_END(MemCpyOptLegacyPass | |
| static unsigned | findCommonAlignment (const DataLayout &DL, const StoreInst *SI, const LoadInst *LI) |
| static bool | moveUp (AliasAnalysis &AA, StoreInst *SI, Instruction *P, const LoadInst *LI) |
Variables | |
| memcpyopt | |
| MemCpy | Optimization |
| MemCpy | false |
| #define DEBUG_TYPE "memcpyopt" |
Definition at line 31 of file MemCpyOptimizer.cpp.
|
static |
Definition at line 476 of file MemCpyOptimizer.cpp.
References llvm::DataLayout::getABITypeAlignment(), llvm::LoadInst::getAlignment(), llvm::StoreInst::getAlignment(), llvm::User::getOperand(), llvm::Value::getType(), and fuzzer::min().
|
static |
Definition at line 38 of file MemCpyOptimizer.cpp.
References llvm::dyn_cast(), llvm::gep_type_begin(), llvm::StructLayout::getElementOffset(), llvm::generic_gep_type_iterator< ItTy >::getIndexedType(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::ConstantInt::getSExtValue(), llvm::DataLayout::getStructLayout(), llvm::generic_gep_type_iterator< ItTy >::getStructTypeOrNull(), llvm::DataLayout::getTypeAllocSize(), llvm::ConstantInt::getZExtValue(), i, llvm::ConstantInt::isZero(), and Offset.
Referenced by IsPointerOffset().
| INITIALIZE_PASS_BEGIN | ( | MemCpyOptLegacyPass | , |
| "memcpyopt" | , | ||
| "MemCpy Optimization" | , | ||
| false | , | ||
| false | |||
| ) |
|
static |
Return true if Ptr1 is provably equal to Ptr2 plus a constant offset, and return that constant offset.
For example, Ptr1 might be &A[42], and Ptr2 might be &A[40]. In this case offset would be -8.
Definition at line 72 of file MemCpyOptimizer.cpp.
References llvm::dyn_cast(), llvm::User::getNumOperands(), GetOffsetFromIndex(), llvm::User::getOperand(), and llvm::Value::stripPointerCasts().
|
static |
Definition at line 492 of file MemCpyOptimizer.cpp.
References A, llvm::any_of(), AMDGPU::RuntimeMD::KeyName::Args, C, llvm::dbgs(), DEBUG, E, llvm::detail::DenseSetImpl< ValueT, DenseMap< ValueT, detail::DenseSetEmpty, ValueInfoT, detail::DenseSetPair< ValueT > >, ValueInfoT >::erase(), llvm::MemoryLocation::get(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::AAResults::getModRefInfo(), llvm::Instruction::getParent(), llvm::StoreInst::getPointerOperand(), I, llvm::detail::DenseSetImpl< ValueT, DenseMap< ValueT, detail::DenseSetEmpty, ValueInfoT, detail::DenseSetPair< ValueT > >, ValueInfoT >::insert(), llvm::MayAlias, llvm::MRI_Mod, llvm::MRI_NoModRef, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and llvm::reverse().
| STATISTIC | ( | NumMemCpyInstr | , |
| "Number of memcpy instructions deleted" | |||
| ) |
| STATISTIC | ( | NumMemSetInfer | , |
| "Number of memsets inferred" | |||
| ) |
| STATISTIC | ( | NumMoveToCpy | , |
| "Number of memmoves converted to memcpy" | |||
| ) |
| STATISTIC | ( | NumCpyToSet | , |
| "Number of memcpys converted to memset" | |||
| ) |
| MemCpy false |
Definition at line 356 of file MemCpyOptimizer.cpp.
| memcpyopt |
Definition at line 356 of file MemCpyOptimizer.cpp.
| MemCpy Optimization |
Definition at line 356 of file MemCpyOptimizer.cpp.
1.8.6