LLVM 19.0.0git
Macros | Functions | Variables
InferAddressSpaces.cpp File Reference
#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 TypegetPtrOrVecOfPtrsWithNewAS (Type *Ty, unsigned NewAddrSpace)
 
static 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 ValueoperandWithNewAddressSpaceOrCreatePoison (const Use &OperandUse, unsigned NewAddrSpace, const ValueToValueMapTy &ValueWithNewAddrSpace, const PredicatedAddrSpaceMapTy &PredicatedAS, SmallVectorImpl< const Use * > *PoisonUsesToFix)
 
static ValuecloneConstantExprWithNewAddressSpace (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< boolAssumeDefaultIsFlatAddressSpace ("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
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "infer-address-spaces"

Definition at line 136 of file InferAddressSpaces.cpp.

Function Documentation

◆ cloneConstantExprWithNewAddressSpace()

static Value * cloneConstantExprWithNewAddressSpace ( ConstantExpr CE,
unsigned  NewAddrSpace,
const ValueToValueMapTy ValueWithNewAddrSpace,
const DataLayout DL,
const TargetTransformInfo TTI 
)
static

◆ getPointerOperands()

static SmallVector< Value *, 2 > getPointerOperands ( const Value V,
const DataLayout DL,
const TargetTransformInfo TTI 
)
static

◆ getPtrOrVecOfPtrsWithNewAS()

Infer address static false Type * getPtrOrVecOfPtrsWithNewAS ( Type Ty,
unsigned  NewAddrSpace 
)
static

◆ handleMemIntrinsicPtrUse()

static bool handleMemIntrinsicPtrUse ( MemIntrinsic MI,
Value OldV,
Value NewV 
)
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 1039 of file InferAddressSpaces.cpp.

References assert(), B, llvm_unreachable, and MI.

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( InferAddressSpaces  ,
DEBUG_TYPE  ,
"Infer address spaces"  ,
false  ,
false   
)

◆ isAddressExpression()

static bool isAddressExpression ( const Value V,
const DataLayout DL,
const TargetTransformInfo TTI 
)
static

◆ isNoopPtrIntCastPair()

static bool isNoopPtrIntCastPair ( const Operator I2P,
const DataLayout DL,
const TargetTransformInfo TTI 
)
static

◆ isSimplePointerUseValidToReplace()

static bool isSimplePointerUseValidToReplace ( const TargetTransformInfo TTI,
Use U,
unsigned  AddrSpace 
)
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 1009 of file InferAddressSpaces.cpp.

References llvm::LoadInst::getPointerOperandIndex(), llvm::StoreInst::getPointerOperandIndex(), llvm::AtomicCmpXchgInst::getPointerOperandIndex(), llvm::AtomicRMWInst::getPointerOperandIndex(), llvm::TargetTransformInfo::hasVolatileVariant(), and I.

◆ operandWithNewAddressSpaceOrCreatePoison()

static Value * operandWithNewAddressSpaceOrCreatePoison ( const Use OperandUse,
unsigned  NewAddrSpace,
const ValueToValueMapTy ValueWithNewAddrSpace,
const PredicatedAddrSpaceMapTy &  PredicatedAS,
SmallVectorImpl< const Use * > *  PoisonUsesToFix 
)
static

◆ skipToNextUser()

static Value::use_iterator skipToNextUser ( Value::use_iterator  I,
Value::use_iterator  End 
)
static

Definition at line 1119 of file InferAddressSpaces.cpp.

References End, and I.

Variable Documentation

◆ AssumeDefaultIsFlatAddressSpace

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.")) ( "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

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 260 of file InferAddressSpaces.cpp.

◆ false

Infer address false

Definition at line 261 of file InferAddressSpaces.cpp.

◆ spaces

Infer address spaces

Definition at line 260 of file InferAddressSpaces.cpp.

◆ UninitializedAddressSpace

const unsigned UninitializedAddressSpace
static
Initial value:
=
std::numeric_limits<unsigned>::max()

Definition at line 145 of file InferAddressSpaces.cpp.

Referenced by isAddressExpression().