36#ifndef LLVM_TRANSFORMS_SCALAR_CONSTANTHOISTING_H
37#define LLVM_TRANSFORMS_SCALAR_CONSTANTHOISTING_H
53class BlockFrequencyInfo;
61class ProfileSummaryInfo;
62class TargetTransformInfo;
63class TargetTransformInfo;
136 ClonedCastMap.clear();
137 ConstIntCandVec.clear();
138 for (
auto MapEntry : ConstGEPCandMap)
139 MapEntry.second.clear();
140 ConstGEPCandMap.clear();
141 ConstIntInfoVec.
clear();
142 for (
auto MapEntry : ConstGEPInfoMap)
143 MapEntry.second.clear();
144 ConstGEPInfoMap.clear();
161 using ConstCandVecType = std::vector<consthoist::ConstantCandidate>;
163 ConstCandVecType ConstIntCandVec;
164 GVCandVecMapType ConstGEPCandMap;
169 ConstInfoVecType ConstIntInfoVec;
170 GVInfoVecMapType ConstGEPInfoMap;
175 void collectMatInsertPts(
179 unsigned Idx = ~0U)
const;
183 void collectConstantCandidates(ConstCandMapType &ConstCandMap,
186 void collectConstantCandidates(ConstCandMapType &ConstCandMap,
189 void collectConstantCandidates(ConstCandMapType &ConstCandMap,
191 void collectConstantCandidates(ConstCandMapType &ConstCandMap,
193 void collectConstantCandidates(
Function &Fn);
194 void findAndMakeBaseConstant(ConstCandVecType::iterator S,
195 ConstCandVecType::iterator
E,
197 unsigned maximizeConstantsInRange(ConstCandVecType::iterator S,
198 ConstCandVecType::iterator
E,
199 ConstCandVecType::iterator &MaxCostItr);
206 struct UserAdjustment {
213 : Offset(O), Ty(
T), MatInsertPt(
I),
User(U) {}
215 void emitBaseConstants(Instruction *
Base, UserAdjustment *Adj);
218 bool emitBaseConstants(GlobalVariable *BaseGV);
219 void deleteDeadCastInst()
const;
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
This file defines the DenseMap class.
This header defines various interfaces for pass management in LLVM.
This file implements a map that provides insertion order iteration.
This file defines the PointerUnion class, which is a discriminated union of pointer types.
This file implements a set that has insertion order iteration characteristics.
This file defines the SmallVector class.
A container for analyses that lazily runs them and caches their results.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
LLVM Basic Block Representation.
InstListType::iterator iterator
Instruction iterators...
BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequen...
A constant value that is initialized with an expression using other constant values.
bool runImpl(Function &F, TargetTransformInfo &TTI, DominatorTree &DT, BlockFrequencyInfo *BFI, BasicBlock &Entry, ProfileSummaryInfo *PSI)
Optimize expensive integer constants in the given function.
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
This is the shared class of boolean and integer constants.
This is an important base class in LLVM.
A parsed version of the target data layout string in and methods for querying it.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
This is an important class for using LLVM in a threaded context.
This class implements a map that also provides access to all stored values in a deterministic order.
A discriminated union of two or more pointer types, with the discriminator in the low bit of the poin...
A set of analyses that are preserved following a run of a transformation pass.
Analysis providing profile information.
A vector that has set insertion semantics.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void push_back(const T &Elt)
The instances of the Type class are immutable: once they are created, they are never changed.
@ BasicBlock
Various leaf nodes.
This is an optimization pass for GlobalISel generic memory operations.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Implement std::hash so that hash_code can be used in STL containers.
A CRTP mix-in to automatically provide informational APIs needed for passes.
Keeps track of a constant candidate and its uses.
void addUser(Instruction *Inst, unsigned Idx, unsigned Cost)
Add the user to the use list and update the cost.
ConstantCandidate(ConstantInt *ConstInt, ConstantExpr *ConstExpr=nullptr)
A base constant and all its rebased constants.
RebasedConstantListType RebasedConstants
Keeps track of the user of a constant and the operand index where the constant is used.
ConstantUser(Instruction *Inst, unsigned Idx)
This represents a constant that has been rebased with respect to a base constant.
RebasedConstantInfo(ConstantUseListType &&Uses, Constant *Offset, Type *Ty=nullptr)