class AllocaSlices::SliceBuilder
Declaration
class AllocaSlices::SliceBuilder : public PtrUseVisitor { /* full declaration omitted */ };
Description
Builder for the alloca slices. This class builds a set of alloca slices by recursively visiting the uses of an alloca and making a slice for each load and store at each offset.
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:638
Inherits from: PtrUseVisitor
Member Variables
- private const uint64_t AllocSize
- private llvm::sroa::AllocaSlices& AS
- private SmallDenseMap<llvm::Instruction*, unsigned int> MemTransferSliceMap
- private SmallDenseMap<llvm::Instruction*, uint64_t> PHIOrSelectSizes
- private SmallPtrSet<llvm::Instruction*, 4> VisitedDeadInsts
- Set to de-duplicate dead instructions found in the use walk.
Method Overview
- public SliceBuilder(const llvm::DataLayout & DL, llvm::AllocaInst & AI, llvm::sroa::AllocaSlices & AS)
- private void handleLoadOrStore(llvm::Type * Ty, llvm::Instruction & I, const llvm::APInt & Offset, uint64_t Size, bool IsVolatile)
- private llvm::Instruction * hasUnsafePHIOrSelectUse(llvm::Instruction * Root, uint64_t & Size)
- private void insertUse(llvm::Instruction & I, const llvm::APInt & Offset, uint64_t Size, bool IsSplittable = false)
- private void markAsDead(llvm::Instruction & I)
- private void visitAddrSpaceCastInst(llvm::AddrSpaceCastInst & ASC)
- private void visitBitCastInst(llvm::BitCastInst & BC)
- private void visitGetElementPtrInst(llvm::GetElementPtrInst & GEPI)
- private void visitInstruction(llvm::Instruction & I)
- private void visitIntrinsicInst(llvm::IntrinsicInst & II)
- private void visitLoadInst(llvm::LoadInst & LI)
- private void visitMemSetInst(llvm::MemSetInst & II)
- private void visitMemTransferInst(llvm::MemTransferInst & II)
- private void visitPHINode(llvm::PHINode & PN)
- private void visitPHINodeOrSelectInst(llvm::Instruction & I)
- private void visitSelectInst(llvm::SelectInst & SI)
- private void visitStoreInst(llvm::StoreInst & SI)
Methods
¶SliceBuilder(const llvm::DataLayout& DL,
llvm::AllocaInst& AI,
llvm::sroa::AllocaSlices& AS)
SliceBuilder(const llvm::DataLayout& DL,
llvm::AllocaInst& AI,
llvm::sroa::AllocaSlices& AS)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:654
Parameters
- const llvm::DataLayout& DL
- llvm::AllocaInst& AI
- llvm::sroa::AllocaSlices& AS
¶void handleLoadOrStore(llvm::Type* Ty,
llvm::Instruction& I,
const llvm::APInt& Offset,
uint64_t Size,
bool IsVolatile)
void handleLoadOrStore(llvm::Type* Ty,
llvm::Instruction& I,
const llvm::APInt& Offset,
uint64_t Size,
bool IsVolatile)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:763
Parameters
- llvm::Type* Ty
- llvm::Instruction& I
- const llvm::APInt& Offset
- uint64_t Size
- bool IsVolatile
¶llvm::Instruction* hasUnsafePHIOrSelectUse(
llvm::Instruction* Root,
uint64_t& Size)
llvm::Instruction* hasUnsafePHIOrSelectUse(
llvm::Instruction* Root,
uint64_t& Size)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:956
Parameters
- llvm::Instruction* Root
- uint64_t& Size
¶void insertUse(llvm::Instruction& I,
const llvm::APInt& Offset,
uint64_t Size,
bool IsSplittable = false)
void insertUse(llvm::Instruction& I,
const llvm::APInt& Offset,
uint64_t Size,
bool IsSplittable = false)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:665
Parameters
- llvm::Instruction& I
- const llvm::APInt& Offset
- uint64_t Size
- bool IsSplittable = false
¶void markAsDead(llvm::Instruction& I)
void markAsDead(llvm::Instruction& I)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:660
Parameters
¶void visitAddrSpaceCastInst(
llvm::AddrSpaceCastInst& ASC)
void visitAddrSpaceCastInst(
llvm::AddrSpaceCastInst& ASC)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:708
Parameters
¶void visitBitCastInst(llvm::BitCastInst& BC)
void visitBitCastInst(llvm::BitCastInst& BC)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:701
Parameters
¶void visitGetElementPtrInst(
llvm::GetElementPtrInst& GEPI)
void visitGetElementPtrInst(
llvm::GetElementPtrInst& GEPI)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:715
Parameters
- llvm::GetElementPtrInst& GEPI
¶void visitInstruction(llvm::Instruction& I)
void visitInstruction(llvm::Instruction& I)
Description
Disable SROA entirely if there are unhandled users of the alloca.
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:1066
Parameters
¶void visitIntrinsicInst(llvm::IntrinsicInst& II)
void visitIntrinsicInst(llvm::IntrinsicInst& II)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:931
Parameters
¶void visitLoadInst(llvm::LoadInst& LI)
void visitLoadInst(llvm::LoadInst& LI)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:774
Parameters
- llvm::LoadInst& LI
¶void visitMemSetInst(llvm::MemSetInst& II)
void visitMemSetInst(llvm::MemSetInst& II)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:829
Parameters
- llvm::MemSetInst& II
¶void visitMemTransferInst(
llvm::MemTransferInst& II)
void visitMemTransferInst(
llvm::MemTransferInst& II)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:850
Parameters
¶void visitPHINode(llvm::PHINode& PN)
void visitPHINode(llvm::PHINode& PN)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:1061
Parameters
- llvm::PHINode& PN
¶void visitPHINodeOrSelectInst(
llvm::Instruction& I)
void visitPHINodeOrSelectInst(
llvm::Instruction& I)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:1003
Parameters
¶void visitSelectInst(llvm::SelectInst& SI)
void visitSelectInst(llvm::SelectInst& SI)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:1063
Parameters
- llvm::SelectInst& SI
¶void visitStoreInst(llvm::StoreInst& SI)
void visitStoreInst(llvm::StoreInst& SI)
Declared at: llvm/lib/Transforms/Scalar/SROA.cpp:792
Parameters
- llvm::StoreInst& SI