1
//===- CodeMetrics.h - Measures the weight of a function---------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file implements various weight measurements for a function, helping
11
// the Inliner and PartialSpecialization decide whether to duplicate its
14
//===----------------------------------------------------------------------===//
16
#ifndef LLVM_ANALYSIS_CODEMETRICS_H
17
#define LLVM_ANALYSIS_CODEMETRICS_H
20
// CodeMetrics - Calculate size and a few similar metrics for a set of
23
/// NeverInline - True if this callee should never be inlined into a
27
// True if this function contains a call to setjmp or _setjmp
30
// True if this function calls itself
33
// True if this function contains one or more indirect branches
34
bool containsIndirectBr;
36
/// usesDynamicAlloca - True if this function calls alloca (in the C sense).
37
bool usesDynamicAlloca;
39
/// NumInsts, NumBlocks - Keep track of how large each function is, which
40
/// is used to estimate the code size cost of inlining it.
41
unsigned NumInsts, NumBlocks;
43
/// NumBBInsts - Keeps track of basic block code size estimates.
44
DenseMap<const BasicBlock *, unsigned> NumBBInsts;
46
/// NumCalls - Keep track of the number of calls to 'big' functions.
49
/// NumVectorInsts - Keep track of how many instructions produce vector
50
/// values. The inliner is being more aggressive with inlining vector
52
unsigned NumVectorInsts;
54
/// NumRets - Keep track of how many Ret instructions the block contains.
57
CodeMetrics() : callsSetJmp(false), isRecursive(false),
58
containsIndirectBr(false), usesDynamicAlloca(false),
59
NumInsts(0), NumBlocks(0), NumCalls(0), NumVectorInsts(0),
62
/// analyzeBasicBlock - Add information about the specified basic block
63
/// to the current structure.
64
void analyzeBasicBlock(const BasicBlock *BB);
66
/// analyzeFunction - Add information about the specified function
67
/// to the current structure.
68
void analyzeFunction(Function *F);