class MemCpyOptPass

Declaration

class MemCpyOptPass : public PassInfoMixin { /* full declaration omitted */ };

Description

A CRTP mix-in to automatically provide informational APIs needed for passes. This provides some boilerplate for types that are passes.

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:39

Inherits from: PassInfoMixin

Member Variables

private llvm::TargetLibraryInfo* TLI = nullptr
private llvm::AAResults* AA = nullptr
private llvm::AssumptionCache* AC = nullptr
private llvm::DominatorTree* DT = nullptr
private llvm::MemorySSA* MSSA = nullptr
private llvm::MemorySSAUpdater* MSSAU = nullptr

Method Overview

  • public MemCpyOptPass()
  • private void eraseInstruction(llvm::Instruction * I)
  • private bool iterateOnFunction(llvm::Function & F)
  • private bool moveUp(llvm::StoreInst * SI, llvm::Instruction * P, const llvm::LoadInst * LI)
  • private bool performCallSlotOptzn(llvm::Instruction * cpyLoad, llvm::Instruction * cpyStore, llvm::Value * cpyDst, llvm::Value * cpySrc, llvm::TypeSize cpyLen, llvm::Align cpyAlign, std::function<CallInst *()> GetC)
  • private bool performMemCpyToMemSetOptzn(llvm::MemCpyInst * MemCpy, llvm::MemSetInst * MemSet)
  • private bool processByValArgument(llvm::CallBase & CB, unsigned int ArgNo)
  • private bool processMemCpy(llvm::MemCpyInst * M, BasicBlock::iterator & BBI)
  • private bool processMemCpyMemCpyDependence(llvm::MemCpyInst * M, llvm::MemCpyInst * MDep)
  • private bool processMemMove(llvm::MemMoveInst * M)
  • private bool processMemSet(llvm::MemSetInst * SI, BasicBlock::iterator & BBI)
  • private bool processMemSetMemCpyDependence(llvm::MemCpyInst * MemCpy, llvm::MemSetInst * MemSet)
  • private bool processStore(llvm::StoreInst * SI, BasicBlock::iterator & BBI)
  • public llvm::PreservedAnalyses run(llvm::Function & F, llvm::FunctionAnalysisManager & AM)
  • public bool runImpl(llvm::Function & F, llvm::TargetLibraryInfo * TLI, llvm::AAResults * AA, llvm::AssumptionCache * AC, llvm::DominatorTree * DT, llvm::MemorySSA * MSSA)
  • private llvm::Instruction * tryMergingIntoMemset(llvm::Instruction * I, llvm::Value * StartPtr, llvm::Value * ByteVal)

Methods

MemCpyOptPass()

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:48

void eraseInstruction(llvm::Instruction* I)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:73

Parameters

llvm::Instruction* I

bool iterateOnFunction(llvm::Function& F)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:74

Parameters

llvm::Function& F

bool moveUp(llvm::StoreInst* SI,
            llvm::Instruction* P,
            const llvm::LoadInst* LI)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:71

Parameters

llvm::StoreInst* SI
llvm::Instruction* P
const llvm::LoadInst* LI

bool performCallSlotOptzn(
    llvm::Instruction* cpyLoad,
    llvm::Instruction* cpyStore,
    llvm::Value* cpyDst,
    llvm::Value* cpySrc,
    llvm::TypeSize cpyLen,
    llvm::Align cpyAlign,
    std::function<CallInst*()> GetC)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:62

Parameters

llvm::Instruction* cpyLoad
llvm::Instruction* cpyStore
llvm::Value* cpyDst
llvm::Value* cpySrc
llvm::TypeSize cpyLen
llvm::Align cpyAlign
std::function<CallInst*()> GetC

bool performMemCpyToMemSetOptzn(
    llvm::MemCpyInst* MemCpy,
    llvm::MemSetInst* MemSet)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:67

Parameters

llvm::MemCpyInst* MemCpy
llvm::MemSetInst* MemSet

bool processByValArgument(llvm::CallBase& CB,
                          unsigned int ArgNo)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:68

Parameters

llvm::CallBase& CB
unsigned int ArgNo

bool processMemCpy(llvm::MemCpyInst* M,
                   BasicBlock::iterator& BBI)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:60

Parameters

llvm::MemCpyInst* M
BasicBlock::iterator& BBI

bool processMemCpyMemCpyDependence(
    llvm::MemCpyInst* M,
    llvm::MemCpyInst* MDep)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:65

Parameters

llvm::MemCpyInst* M
llvm::MemCpyInst* MDep

bool processMemMove(llvm::MemMoveInst* M)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:61

Parameters

llvm::MemMoveInst* M

bool processMemSet(llvm::MemSetInst* SI,
                   BasicBlock::iterator& BBI)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:59

Parameters

llvm::MemSetInst* SI
BasicBlock::iterator& BBI

bool processMemSetMemCpyDependence(
    llvm::MemCpyInst* MemCpy,
    llvm::MemSetInst* MemSet)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:66

Parameters

llvm::MemCpyInst* MemCpy
llvm::MemSetInst* MemSet

bool processStore(llvm::StoreInst* SI,
                  BasicBlock::iterator& BBI)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:58

Parameters

llvm::StoreInst* SI
BasicBlock::iterator& BBI

llvm::PreservedAnalyses run(
    llvm::Function& F,
    llvm::FunctionAnalysisManager& AM)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:50

Parameters

llvm::Function& F
llvm::FunctionAnalysisManager& AM

bool runImpl(llvm::Function& F,
             llvm::TargetLibraryInfo* TLI,
             llvm::AAResults* AA,
             llvm::AssumptionCache* AC,
             llvm::DominatorTree* DT,
             llvm::MemorySSA* MSSA)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:53

Parameters

llvm::Function& F
llvm::TargetLibraryInfo* TLI
llvm::AAResults* AA
llvm::AssumptionCache* AC
llvm::DominatorTree* DT
llvm::MemorySSA* MSSA

llvm::Instruction* tryMergingIntoMemset(
    llvm::Instruction* I,
    llvm::Value* StartPtr,
    llvm::Value* ByteVal)

Declared at: llvm/include/llvm/Transforms/Scalar/MemCpyOptimizer.h:69

Parameters

llvm::Instruction* I
llvm::Value* StartPtr
llvm::Value* ByteVal