LLVM  6.0.0svn
Namespaces | Macros | Functions | Variables
InferAddressSpaces.cpp File Reference
#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/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/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>
Include dependency graph for InferAddressSpaces.cpp:

Go to the source code of this file.

Namespaces

 llvm
 Compute iterated dominance frontiers using a linear time algorithm.
 

Macros

#define DEBUG_TYPE   "infer-address-spaces"
 

Functions

void llvm::initializeInferAddressSpacesPass (PassRegistry &)
 
 INITIALIZE_PASS (InferAddressSpaces, DEBUG_TYPE, "Infer address spaces", false, false) static bool isAddressExpression(const Value &V)
 
static SmallVector< Value *, 2 > getPointerOperands (const Value &V)
 
static ValueoperandWithNewAddressSpaceOrCreateUndef (const Use &OperandUse, unsigned NewAddrSpace, const ValueToValueMapTy &ValueWithNewAddrSpace, SmallVectorImpl< const Use *> *UndefUsesToFix)
 
static ValuecloneInstructionWithNewAddressSpace (Instruction *I, unsigned NewAddrSpace, const ValueToValueMapTy &ValueWithNewAddrSpace, SmallVectorImpl< const Use *> *UndefUsesToFix)
 
static ValuecloneConstantExprWithNewAddressSpace (ConstantExpr *CE, unsigned NewAddrSpace, const ValueToValueMapTy &ValueWithNewAddrSpace)
 
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 const unsigned UninitializedAddressSpace
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "infer-address-spaces"

Definition at line 132 of file InferAddressSpaces.cpp.

Function Documentation

◆ cloneConstantExprWithNewAddressSpace()

static Value* cloneConstantExprWithNewAddressSpace ( ConstantExpr CE,
unsigned  NewAddrSpace,
const ValueToValueMapTy ValueWithNewAddrSpace 
)
static

◆ cloneInstructionWithNewAddressSpace()

static Value* cloneInstructionWithNewAddressSpace ( Instruction I,
unsigned  NewAddrSpace,
const ValueToValueMapTy ValueWithNewAddrSpace,
SmallVectorImpl< const Use *> *  UndefUsesToFix 
)
static

◆ getPointerOperands()

static SmallVector<Value *, 2> getPointerOperands ( const Value V)
static

◆ handleMemIntrinsicPtrUse()

static bool handleMemIntrinsicPtrUse ( MemIntrinsic MI,
Value OldV,
Value NewV 
)
static

◆ INITIALIZE_PASS()

INITIALIZE_PASS ( InferAddressSpaces  ,
DEBUG_TYPE  ,
"Infer address spaces"  ,
false  ,
false   
) const &

Definition at line 211 of file InferAddressSpaces.cpp.

References llvm::MCID::Select.

◆ 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 743 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.

Referenced by skipToNextUser().

◆ operandWithNewAddressSpaceOrCreateUndef()

static Value* operandWithNewAddressSpaceOrCreateUndef ( const Use OperandUse,
unsigned  NewAddrSpace,
const ValueToValueMapTy ValueWithNewAddrSpace,
SmallVectorImpl< const Use *> *  UndefUsesToFix 
)
static

◆ skipToNextUser()

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

Variable Documentation

◆ UninitializedAddressSpace

const unsigned UninitializedAddressSpace
static
Initial value:
=
GCNRegPressure max(const GCNRegPressure &P1, const GCNRegPressure &P2)

Definition at line 136 of file InferAddressSpaces.cpp.

Referenced by cloneConstantExprWithNewAddressSpace().