LLVM 22.0.0git
MergeICmps.cpp File Reference

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "mergeicmps"

Functions

static BCEAtom visitICmpLoadOperand (Value *const Val, BaseIdentifier &BaseId)
static std::optional< BCECmp > visitICmp (const ICmpInst *const CmpI, const ICmpInst::Predicate ExpectedPredicate, BaseIdentifier &BaseId)
static std::optional< BCECmpBlock > visitCmpBlock (Value *const Val, BasicBlock *const Block, const BasicBlock *const PhiBlock, BaseIdentifier &BaseId)
static void enqueueBlock (std::vector< BCECmpBlock > &Comparisons, BCECmpBlock &&Comparison)
static bool areContiguous (const BCECmpBlock &First, const BCECmpBlock &Second)
static unsigned getMinOrigOrder (const BCECmpChain::ContiguousBlocks &Blocks)
static std::vector< BCECmpChain::ContiguousBlocks > mergeBlocks (std::vector< BCECmpBlock > &&Blocks)
 Given a chain of comparison blocks, groups the blocks into contiguous ranges that can be merged together into a single comparison.
static BasicBlockmergeComparisons (ArrayRef< BCECmpBlock > Comparisons, BasicBlock *const InsertBefore, BasicBlock *const NextCmpBlock, PHINode &Phi, const TargetLibraryInfo &TLI, AliasAnalysis &AA, DomTreeUpdater &DTU)
static std::vector< BasicBlock * > getOrderedBlocks (PHINode &Phi, BasicBlock *const LastBlock, int NumBlocks)
static bool processPhi (PHINode &Phi, const TargetLibraryInfo &TLI, AliasAnalysis &AA, DomTreeUpdater &DTU)
static bool runImpl (Function &F, const TargetLibraryInfo &TLI, const TargetTransformInfo &TTI, AliasAnalysis &AA, DominatorTree *DT)
 INITIALIZE_PASS_BEGIN (MergeICmpsLegacyPass, "mergeicmps", "Merge contiguous icmps into a memcmp", false, false) INITIALIZE_PASS_END(MergeICmpsLegacyPass

Variables

 mergeicmps
Merge contiguous icmps into a memcmp
Merge contiguous icmps into a false

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "mergeicmps"

Definition at line 67 of file MergeICmps.cpp.

Function Documentation

◆ areContiguous()

bool areContiguous ( const BCECmpBlock & First,
const BCECmpBlock & Second )
static

Definition at line 428 of file MergeICmps.cpp.

References llvm::First.

Referenced by mergeBlocks().

◆ enqueueBlock()

void enqueueBlock ( std::vector< BCECmpBlock > & Comparisons,
BCECmpBlock && Comparison )
inlinestatic

Definition at line 389 of file MergeICmps.cpp.

References llvm::dbgs(), and LLVM_DEBUG.

◆ getMinOrigOrder()

unsigned getMinOrigOrder ( const BCECmpChain::ContiguousBlocks & Blocks)
static

Definition at line 435 of file MergeICmps.cpp.

References llvm::Block.

Referenced by mergeBlocks().

◆ getOrderedBlocks()

std::vector< BasicBlock * > getOrderedBlocks ( PHINode & Phi,
BasicBlock *const LastBlock,
int NumBlocks )
static

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( MergeICmpsLegacyPass ,
"mergeicmps" ,
"Merge contiguous icmps into a memcmp" ,
false ,
false  )

◆ mergeBlocks()

std::vector< BCECmpChain::ContiguousBlocks > mergeBlocks ( std::vector< BCECmpBlock > && Blocks)
static

Given a chain of comparison blocks, groups the blocks into contiguous ranges that can be merged together into a single comparison.

Definition at line 445 of file MergeICmps.cpp.

References areContiguous(), llvm::Block, llvm::dbgs(), getMinOrigOrder(), LLVM_DEBUG, and llvm::sort().

◆ mergeComparisons()

◆ processPhi()

bool processPhi ( PHINode & Phi,
const TargetLibraryInfo & TLI,
AliasAnalysis & AA,
DomTreeUpdater & DTU )
static

◆ runImpl()

◆ visitCmpBlock()

std::optional< BCECmpBlock > visitCmpBlock ( Value *const Val,
BasicBlock *const Block,
const BasicBlock *const PhiBlock,
BaseIdentifier & BaseId )
static

◆ visitICmp()

std::optional< BCECmp > visitICmp ( const ICmpInst *const CmpI,
const ICmpInst::Predicate ExpectedPredicate,
BaseIdentifier & BaseId )
static

◆ visitICmpLoadOperand()

BCEAtom visitICmpLoadOperand ( Value *const Val,
BaseIdentifier & BaseId )
static

Variable Documentation

◆ false

Merge contiguous icmps into a false

Definition at line 919 of file MergeICmps.cpp.

◆ memcmp

◆ mergeicmps

mergeicmps

Definition at line 918 of file MergeICmps.cpp.