LLVM 17.0.0git
|
#include "llvm/Transforms/Scalar/InferAddressSpaces.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/ValueHandle.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <cassert>
#include <iterator>
#include <limits>
#include <utility>
#include <vector>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "infer-address-spaces" |
Functions | |
INITIALIZE_PASS_BEGIN (InferAddressSpaces, DEBUG_TYPE, "Infer address spaces", false, false) INITIALIZE_PASS_END(InferAddressSpaces | |
Infer address static false bool | isNoopPtrIntCastPair (const Operator *I2P, const DataLayout &DL, const TargetTransformInfo *TTI) |
static bool | isAddressExpression (const Value &V, const DataLayout &DL, const TargetTransformInfo *TTI) |
static SmallVector< Value *, 2 > | getPointerOperands (const Value &V, const DataLayout &DL, const TargetTransformInfo *TTI) |
static Value * | operandWithNewAddressSpaceOrCreateUndef (const Use &OperandUse, unsigned NewAddrSpace, const ValueToValueMapTy &ValueWithNewAddrSpace, const PredicatedAddrSpaceMapTy &PredicatedAS, SmallVectorImpl< const Use * > *UndefUsesToFix) |
static Value * | cloneConstantExprWithNewAddressSpace (ConstantExpr *CE, unsigned NewAddrSpace, const ValueToValueMapTy &ValueWithNewAddrSpace, const DataLayout *DL, const TargetTransformInfo *TTI) |
static bool | isSimplePointerUseValidToReplace (const TargetTransformInfo &TTI, Use &U, unsigned AddrSpace) |
returns true if U is the pointer operand of a memory instruction with a single pointer operand that can have its address space changed by simply mutating the use to a new value. | |
static bool | handleMemIntrinsicPtrUse (MemIntrinsic *MI, Value *OldV, Value *NewV) |
Update memory intrinsic uses that require more complex processing than simple memory instructions. | |
static Value::use_iterator | skipToNextUser (Value::use_iterator I, Value::use_iterator End) |
Variables | |
static cl::opt< bool > | AssumeDefaultIsFlatAddressSpace ("assume-default-is-flat-addrspace", cl::init(false), cl::ReallyHidden, cl::desc("The default address space is assumed as the flat address space. " "This is mainly for test purpose.")) |
static const unsigned | UninitializedAddressSpace |
DEBUG_TYPE | |
Infer address | spaces |
Infer address | false |
#define DEBUG_TYPE "infer-address-spaces" |
Definition at line 136 of file InferAddressSpaces.cpp.
|
static |
Definition at line 673 of file InferAddressSpaces.cpp.
References assert(), cloneConstantExprWithNewAddressSpace(), DL, llvm::ConstantExpr::getAddrSpaceCast(), llvm::ConstantExpr::getBitCast(), isNoopPtrIntCastPair(), llvm::ValueMap< KeyT, ValueT, Config >::lookup(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by cloneConstantExprWithNewAddressSpace().
|
static |
Definition at line 328 of file InferAddressSpaces.cpp.
References assert(), DL, llvm::CallBase::getArgOperand(), llvm::IntrinsicInst::getIntrinsicID(), isNoopPtrIntCastPair(), and llvm_unreachable.
|
static |
Update memory intrinsic uses that require more complex processing than simple memory instructions.
These require re-mangling and may have multiple pointer operands.
Definition at line 1006 of file InferAddressSpaces.cpp.
References assert(), B, llvm_unreachable, and MI.
INITIALIZE_PASS_BEGIN | ( | InferAddressSpaces | , |
DEBUG_TYPE | , | ||
"Infer address spaces" | , | ||
false | , | ||
false | |||
) |
|
static |
Definition at line 296 of file InferAddressSpaces.cpp.
References assert(), DL, llvm::TargetTransformInfo::getAssumedAddrSpace(), llvm::IntrinsicInst::getIntrinsicID(), isNoopPtrIntCastPair(), and UninitializedAddressSpace.
|
static |
Definition at line 262 of file InferAddressSpaces.cpp.
References assert(), DL, llvm::TargetTransformInfo::isNoopAddrSpaceCast(), and llvm::CastInst::isNoopCast().
Referenced by cloneConstantExprWithNewAddressSpace(), getPointerOperands(), and isAddressExpression().
|
static |
returns
true if U
is the pointer operand of a memory instruction with a single pointer operand that can have its address space changed by simply mutating the use to a new value.
If the memory instruction is volatile, return true only if the target allows the memory instruction to be volatile in the new address space.
Definition at line 976 of file InferAddressSpaces.cpp.
References llvm::LoadInst::getPointerOperandIndex(), llvm::StoreInst::getPointerOperandIndex(), llvm::AtomicCmpXchgInst::getPointerOperandIndex(), llvm::AtomicRMWInst::getPointerOperandIndex(), llvm::TargetTransformInfo::hasVolatileVariant(), I, and SI.
|
static |
Definition at line 525 of file InferAddressSpaces.cpp.
References llvm::CallingConv::C, llvm::Use::get(), llvm::UndefValue::get(), llvm::ConstantExpr::getAddrSpaceCast(), llvm::Instruction::getDebugLoc(), llvm::Value::getType(), llvm::Use::getUser(), I, llvm::ValueMap< KeyT, ValueT, Config >::lookup(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
static |
Definition at line 1085 of file InferAddressSpaces.cpp.
References I.
|
static |
DEBUG_TYPE |
Definition at line 256 of file InferAddressSpaces.cpp.
Infer address false |
Definition at line 257 of file InferAddressSpaces.cpp.
Infer address spaces |
Definition at line 256 of file InferAddressSpaces.cpp.
Definition at line 145 of file InferAddressSpaces.cpp.
Referenced by isAddressExpression().