LLVM
13.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/None.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.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/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.
Namespaces | |
llvm | |
Macros | |
#define | DEBUG_TYPE "infer-address-spaces" |
Functions | |
void | llvm::initializeInferAddressSpacesPass (PassRegistry &) |
INITIALIZE_PASS (InferAddressSpaces, DEBUG_TYPE, "Infer address spaces", false, false) static bool isNoopPtrIntCastPair(const Operator *I2P | |
if (!P2I||P2I->getOpcode() !=Instruction::PtrToInt) return false | |
return static CastInst::isNoopCast(Instruction::CastOps(I2P->getOpcode()), I2P->getOperand(0) ->getType(), I2P->getType(), DL) &&CastInst 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, 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. More... | |
static bool | handleMemIntrinsicPtrUse (MemIntrinsic *MI, Value *OldV, Value *NewV) |
Update memory intrinsic uses that require more complex processing than simple memory instructions. More... | |
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 |
const DataLayout & | DL |
const DataLayout const TargetTransformInfo * | TTI |
auto * | P2I = dyn_cast<Operator>(I2P->getOperand(0)) |
#define DEBUG_TYPE "infer-address-spaces" |
Definition at line 134 of file InferAddressSpaces.cpp.
|
static |
Definition at line 633 of file InferAddressSpaces.cpp.
References assert(), DL, llvm::ConstantExpr::getAddrSpaceCast(), llvm::ConstantExpr::getBitCast(), llvm::Type::getPointerAddressSpace(), llvm::ConstantExpr::getSelect(), llvm::Intrinsic::getType(), llvm::Value::getType(), Index, llvm::ValueMap< KeyT, ValueT, Config >::lookup(), and llvm::MCID::Select.
|
static |
Definition at line 307 of file InferAddressSpaces.cpp.
References assert(), llvm::MCID::Call, DL, llvm::CallBase::getArgOperand(), llvm::IntrinsicInst::getIntrinsicID(), llvm_unreachable, P2I, and llvm::MCID::Select.
|
static |
Update memory intrinsic uses that require more complex processing than simple memory instructions.
Thse require re-mangling and may have multiple pointer operands.
Definition at line 933 of file InferAddressSpaces.cpp.
References assert(), B, llvm_unreachable, and MI.
INITIALIZE_PASS | ( | InferAddressSpaces | , |
DEBUG_TYPE | , | ||
"Infer address spaces" | , | ||
false | , | ||
false | |||
) | const |
|
static |
Definition at line 275 of file InferAddressSpaces.cpp.
References assert(), llvm::MCID::Call, DL, llvm::TargetTransformInfo::getAssumedAddrSpace(), llvm::IntrinsicInst::getIntrinsicID(), llvm::MCID::Select, and UninitializedAddressSpace.
|
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 903 of file InferAddressSpaces.cpp.
References llvm::Use::getOperandNo(), llvm::LoadInst::getPointerOperandIndex(), llvm::StoreInst::getPointerOperandIndex(), llvm::AtomicCmpXchgInst::getPointerOperandIndex(), llvm::AtomicRMWInst::getPointerOperandIndex(), llvm::Use::getUser(), llvm::TargetTransformInfo::hasVolatileVariant(), I, and SI.
|
static |
|
static |
Definition at line 1007 of file InferAddressSpaces.cpp.
|
static |
const DataLayout& DL |
Definition at line 241 of file InferAddressSpaces.cpp.
Referenced by cloneConstantExprWithNewAddressSpace(), getPointerOperands(), and isAddressExpression().
auto* P2I = dyn_cast<Operator>(I2P->getOperand(0)) |
Definition at line 244 of file InferAddressSpaces.cpp.
Referenced by BuildConstantFromSCEV(), getPointerOperands(), and isKnownNonZero().
Definition at line 242 of file InferAddressSpaces.cpp.
|
static |
Definition at line 143 of file InferAddressSpaces.cpp.
Referenced by isAddressExpression().