LLVM: lib/Transforms/Scalar/ScalarizeMaskedMemIntrin.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "scalarize-masked-mem-intrin"
Functions
static bool optimizeBlock (BasicBlock &BB, bool &ModifiedDT, const TargetTransformInfo &TTI, const DataLayout &DL, bool HasBranchDivergence, DomTreeUpdater *DTU)
static bool optimizeCallInst (CallInst *CI, bool &ModifiedDT, const TargetTransformInfo &TTI, const DataLayout &DL, bool HasBranchDivergence, DomTreeUpdater *DTU)
INITIALIZE_PASS_BEGIN (ScalarizeMaskedMemIntrinLegacyPass, DEBUG_TYPE, "Scalarize unsupported masked memory intrinsics", false, false) INITIALIZE_PASS_END(ScalarizeMaskedMemIntrinLegacyPass
static bool isConstantIntVector (Value *Mask)
static unsigned adjustForEndian (const DataLayout &DL, unsigned VectorWidth, unsigned Idx)
static void scalarizeMaskedLoad (const DataLayout &DL, bool HasBranchDivergence, CallInst *CI, DomTreeUpdater *DTU, bool &ModifiedDT)
static void scalarizeMaskedStore (const DataLayout &DL, bool HasBranchDivergence, CallInst *CI, DomTreeUpdater *DTU, bool &ModifiedDT)
static void scalarizeMaskedGather (const DataLayout &DL, bool HasBranchDivergence, CallInst *CI, DomTreeUpdater *DTU, bool &ModifiedDT)
static void scalarizeMaskedScatter (const DataLayout &DL, bool HasBranchDivergence, CallInst *CI, DomTreeUpdater *DTU, bool &ModifiedDT)
static void scalarizeMaskedExpandLoad (const DataLayout &DL, bool HasBranchDivergence, CallInst *CI, DomTreeUpdater *DTU, bool &ModifiedDT)
static void scalarizeMaskedCompressStore (const DataLayout &DL, bool HasBranchDivergence, CallInst *CI, DomTreeUpdater *DTU, bool &ModifiedDT)
static void scalarizeMaskedVectorHistogram (const DataLayout &DL, CallInst *CI, DomTreeUpdater *DTU, bool &ModifiedDT)
static bool runImpl (Function &F, const TargetTransformInfo &TTI, DominatorTree *DT)

DEBUG_TYPE

#define DEBUG_TYPE "scalarize-masked-mem-intrin"

adjustForEndian()

INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( ScalarizeMaskedMemIntrinLegacyPass ,
DEBUG_TYPE ,
"Scalarize unsupported masked memory intrinsics" ,
false ,
false )

isConstantIntVector()

bool isConstantIntVector ( Value * Mask) static

Definition at line 93 of file ScalarizeMaskedMemIntrin.cpp.

References llvm::CallingConv::C, llvm::cast(), llvm::dyn_cast(), and llvm::isa().

Referenced by optimizeCallInst(), scalarizeMaskedCompressStore(), scalarizeMaskedExpandLoad(), scalarizeMaskedGather(), scalarizeMaskedLoad(), scalarizeMaskedScatter(), scalarizeMaskedStore(), and scalarizeMaskedVectorHistogram().

optimizeBlock()

optimizeCallInst()

Definition at line 1098 of file ScalarizeMaskedMemIntrin.cpp.

References llvm::any_of(), llvm::cast(), llvm::TargetTransformInfo::ConstantMask, DL, llvm::dyn_cast(), llvm::CallBase::getArgOperand(), llvm::CallBase::getAttributes(), llvm::CallBase::getParamAlign(), llvm::Value::getType(), II, llvm::isa(), isConstantIntVector(), scalarizeMaskedCompressStore(), scalarizeMaskedExpandLoad(), scalarizeMaskedGather(), scalarizeMaskedLoad(), scalarizeMaskedScatter(), scalarizeMaskedStore(), scalarizeMaskedVectorHistogram(), llvm::MaybeAlign::valueOrOne(), and llvm::TargetTransformInfo::VariableOrConstantMask.

Referenced by optimizeBlock().

runImpl()

scalarizeMaskedCompressStore()

Definition at line 833 of file ScalarizeMaskedMemIntrin.cpp.

References llvm::PHINode::addIncoming(), adjustForEndian(), llvm::BasicBlock::begin(), llvm::cast(), llvm::commonAlignment(), DL, llvm::Instruction::eraseFromParent(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::Type::getIntNTy(), llvm::APInt::getOneBitSet(), llvm::CallBase::getParamAlign(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Instruction::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), isConstantIntVector(), llvm::Value::setName(), llvm::SplitBlockAndInsertIfThen(), and llvm::MaybeAlign::valueOrOne().

Referenced by optimizeCallInst().

scalarizeMaskedExpandLoad()

Definition at line 696 of file ScalarizeMaskedMemIntrin.cpp.

References llvm::PHINode::addIncoming(), adjustForEndian(), llvm::BasicBlock::begin(), llvm::cast(), llvm::commonAlignment(), DL, llvm::Instruction::eraseFromParent(), llvm::PoisonValue::get(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::Type::getIntNTy(), llvm::APInt::getOneBitSet(), llvm::CallBase::getParamAlign(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Instruction::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), isConstantIntVector(), llvm::PoisonMaskElem, llvm::Value::replaceAllUsesWith(), llvm::Value::setName(), llvm::SplitBlockAndInsertIfThen(), and llvm::MaybeAlign::valueOrOne().

Referenced by optimizeCallInst().

scalarizeMaskedGather()

Definition at line 469 of file ScalarizeMaskedMemIntrin.cpp.

References adjustForEndian(), llvm::BasicBlock::begin(), llvm::cast(), DL, llvm::Instruction::eraseFromParent(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::Type::getIntNTy(), llvm::APInt::getOneBitSet(), llvm::CallBase::getParamAlign(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Instruction::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), isConstantIntVector(), llvm::Value::replaceAllUsesWith(), llvm::Value::setName(), llvm::SplitBlockAndInsertIfThen(), and llvm::MaybeAlign::valueOrOne().

Referenced by optimizeCallInst().

scalarizeMaskedLoad()

Definition at line 145 of file ScalarizeMaskedMemIntrin.cpp.

References adjustForEndian(), llvm::BasicBlock::begin(), llvm::cast(), llvm::commonAlignment(), llvm::Instruction::copyMetadata(), DL, llvm::Instruction::eraseFromParent(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::Type::getIntNTy(), llvm::Value::getName(), llvm::APInt::getOneBitSet(), llvm::CallBase::getParamAlign(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Instruction::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), llvm::isa(), isConstantIntVector(), llvm::isSplatValue(), llvm::Value::replaceAllUsesWith(), llvm::Value::setName(), llvm::SplitBlockAndInsertIfThen(), llvm::Value::takeName(), and llvm::MaybeAlign::valueOrOne().

Referenced by optimizeCallInst().

scalarizeMaskedScatter()

Definition at line 603 of file ScalarizeMaskedMemIntrin.cpp.

References adjustForEndian(), assert(), llvm::BasicBlock::begin(), llvm::cast(), DL, llvm::Instruction::eraseFromParent(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::Type::getIntNTy(), llvm::APInt::getOneBitSet(), llvm::CallBase::getParamAlign(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Instruction::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), llvm::isa(), isConstantIntVector(), llvm::Value::setName(), llvm::SplitBlockAndInsertIfThen(), and llvm::MaybeAlign::valueOrOne().

Referenced by optimizeCallInst().

scalarizeMaskedStore()

Definition at line 317 of file ScalarizeMaskedMemIntrin.cpp.

References adjustForEndian(), llvm::BasicBlock::begin(), llvm::cast(), llvm::commonAlignment(), DL, llvm::Instruction::eraseFromParent(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::Type::getIntNTy(), llvm::APInt::getOneBitSet(), llvm::CallBase::getParamAlign(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Instruction::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::isa(), isConstantIntVector(), llvm::isSplatValue(), llvm::Value::setName(), llvm::SplitBlockAndInsertIfThen(), and llvm::MaybeAlign::valueOrOne().

Referenced by optimizeCallInst().

scalarizeMaskedVectorHistogram()

Definition at line 946 of file ScalarizeMaskedMemIntrin.cpp.

References assert(), llvm::BasicBlock::begin(), llvm::cast(), DL, llvm::Instruction::eraseFromParent(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::Instruction::getDebugLoc(), llvm::CallBase::getIntrinsicID(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Instruction::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), isConstantIntVector(), llvm::Type::isVoidTy(), llvm_unreachable, llvm::Value::setName(), and llvm::SplitBlockAndInsertIfThen().

Referenced by optimizeCallInst().

DEBUG_TYPE

false

intrinsics