LLVM  16.0.0git
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
llvm::CodeMetrics Struct Reference

Utility to calculate the size and a few similar metrics for a set of basic blocks. More...

#include "llvm/Analysis/CodeMetrics.h"

Collaboration diagram for llvm::CodeMetrics:
Collaboration graph
[legend]

Public Member Functions

void analyzeBasicBlock (const BasicBlock *BB, const TargetTransformInfo &TTI, const SmallPtrSetImpl< const Value * > &EphValues, bool PrepareForLTO=false)
 Add information about a block to the current state. More...
 

Static Public Member Functions

static void collectEphemeralValues (const Loop *L, AssumptionCache *AC, SmallPtrSetImpl< const Value * > &EphValues)
 Collect a loop's ephemeral values (those used only by an assume or similar intrinsics in the loop). More...
 
static void collectEphemeralValues (const Function *L, AssumptionCache *AC, SmallPtrSetImpl< const Value * > &EphValues)
 Collect a functions's ephemeral values (those used only by an assume or similar intrinsics in the function). More...
 

Public Attributes

bool exposesReturnsTwice = false
 True if this function contains a call to setjmp or other functions with attribute "returns twice" without having the attribute itself. More...
 
bool isRecursive = false
 True if this function calls itself. More...
 
bool notDuplicatable = false
 True if this function cannot be duplicated. More...
 
bool convergent = false
 True if this function contains a call to a convergent function. More...
 
bool usesDynamicAlloca = false
 True if this function calls alloca (in the C sense). More...
 
InstructionCost NumInsts = 0
 Code size cost of the analyzed blocks. More...
 
unsigned NumBlocks = false
 Number of analyzed blocks. More...
 
DenseMap< const BasicBlock *, InstructionCostNumBBInsts
 Keeps track of basic block code size estimates. More...
 
unsigned NumCalls = false
 Keep track of the number of calls to 'big' functions. More...
 
unsigned NumInlineCandidates = 0
 The number of calls to internal functions with a single caller. More...
 
unsigned NumVectorInsts = 0
 How many instructions produce vector values. More...
 
unsigned NumRets = 0
 How many 'ret' instructions the blocks contain. More...
 

Detailed Description

Utility to calculate the size and a few similar metrics for a set of basic blocks.

Definition at line 31 of file CodeMetrics.h.

Member Function Documentation

◆ analyzeBasicBlock()

void CodeMetrics::analyzeBasicBlock ( const BasicBlock BB,
const TargetTransformInfo TTI,
const SmallPtrSetImpl< const Value * > &  EphValues,
bool  PrepareForLTO = false 
)

Add information about a block to the current state.

Fill in the current structure with information gleaned from the specified block.

Definition at line 116 of file CodeMetrics.cpp.

References BB, convergent, llvm::SmallPtrSetImpl< PtrType >::count(), F, llvm::TargetTransformInfo::getInstructionCost(), I, llvm::TargetTransformInfo::isLoweredToCall(), isRecursive, notDuplicatable, NumBBInsts, NumBlocks, NumCalls, NumInlineCandidates, NumInsts, NumRets, NumVectorInsts, llvm::TargetTransformInfo::TCK_CodeSize, and usesDynamicAlloca.

◆ collectEphemeralValues() [1/2]

void CodeMetrics::collectEphemeralValues ( const Function L,
AssumptionCache AC,
SmallPtrSetImpl< const Value * > &  EphValues 
)
static

Collect a functions's ephemeral values (those used only by an assume or similar intrinsics in the function).

Definition at line 94 of file CodeMetrics.cpp.

References appendSpeculatableOperands(), assert(), llvm::AssumptionCache::assumptions(), completeEphemeralValues(), F, I, and llvm::SmallPtrSetImpl< PtrType >::insert().

◆ collectEphemeralValues() [2/2]

void CodeMetrics::collectEphemeralValues ( const Loop L,
AssumptionCache AC,
SmallPtrSetImpl< const Value * > &  EphValues 
)
static

Member Data Documentation

◆ convergent

bool llvm::CodeMetrics::convergent = false

True if this function contains a call to a convergent function.

Definition at line 46 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ exposesReturnsTwice

bool llvm::CodeMetrics::exposesReturnsTwice = false

True if this function contains a call to setjmp or other functions with attribute "returns twice" without having the attribute itself.

Definition at line 34 of file CodeMetrics.h.

◆ isRecursive

bool llvm::CodeMetrics::isRecursive = false

True if this function calls itself.

Definition at line 37 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ notDuplicatable

bool llvm::CodeMetrics::notDuplicatable = false

True if this function cannot be duplicated.

True if this function contains one or more indirect branches, or it contains one or more 'noduplicate' instructions.

Definition at line 43 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ NumBBInsts

DenseMap<const BasicBlock *, InstructionCost> llvm::CodeMetrics::NumBBInsts

Keeps track of basic block code size estimates.

Definition at line 58 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ NumBlocks

unsigned llvm::CodeMetrics::NumBlocks = false

Number of analyzed blocks.

Definition at line 55 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ NumCalls

unsigned llvm::CodeMetrics::NumCalls = false

Keep track of the number of calls to 'big' functions.

Definition at line 61 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ NumInlineCandidates

unsigned llvm::CodeMetrics::NumInlineCandidates = 0

The number of calls to internal functions with a single caller.

These are likely targets for future inlining, likely exposed by interleaved devirtualization.

Definition at line 67 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ NumInsts

InstructionCost llvm::CodeMetrics::NumInsts = 0

Code size cost of the analyzed blocks.

Definition at line 52 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ NumRets

unsigned llvm::CodeMetrics::NumRets = 0

How many 'ret' instructions the blocks contain.

Definition at line 75 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ NumVectorInsts

unsigned llvm::CodeMetrics::NumVectorInsts = 0

How many instructions produce vector values.

The inliner is more aggressive with inlining vector kernels.

Definition at line 72 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().

◆ usesDynamicAlloca

bool llvm::CodeMetrics::usesDynamicAlloca = false

True if this function calls alloca (in the C sense).

Definition at line 49 of file CodeMetrics.h.

Referenced by analyzeBasicBlock().


The documentation for this struct was generated from the following files: