14#ifndef LLVM_TRANSFORMS_UTILS_CODEEXTRACTOR_H
15#define LLVM_TRANSFORMS_UTILS_CODEEXTRACTOR_H
58 void findSideEffectInfoForBlock(
BasicBlock &BB);
92 const bool AggregateArgs;
133 bool ArgsInZeroAddressSpace;
137 bool VoidReturnWithSingleOutput;
140 Value *FuncRetVal =
nullptr;
164 bool AllowAlloca =
false,
BasicBlock *AllocationBlock =
nullptr,
165 std::string Suffix =
"",
bool ArgsInZeroAddressSpace =
false,
166 bool VoidReturnWithSingleOutput =
true);
186 ValueSet &Inputs, ValueSet &Outputs);
213 const ValueSet &Allocas,
214 bool CollectGlobalInputs =
false);
232 ValueSet &HoistCands,
BasicBlock *&ExitBlock)
const;
248 struct LifetimeMarkerInfo {
249 bool SinkLifeStart =
false;
250 bool HoistLifeEnd =
false;
255 ValueSet ExcludeArgsFromAggregate;
263 void computeExtractedFuncRetVals();
267 Type *getSwitchType();
269 void severSplitPHINodesOfEntry(
BasicBlock *&Header);
270 void severSplitPHINodesOfExits();
271 void splitReturnBlocks();
273 void moveCodeToFunction(
Function *newFunction);
275 void calculateNewCallTerminatorWeights(
282 void normalizeCFGForExtraction(
BasicBlock *&header);
287 constructFunctionDeclaration(
const ValueSet &inputs,
const ValueSet &outputs,
289 ValueSet &StructValues,
StructType *&StructTy);
294 void emitFunctionBody(
const ValueSet &inputs,
const ValueSet &outputs,
295 const ValueSet &StructValues,
Function *newFunction,
297 const ValueSet &SinkingCands,
301 CallInst *emitReplacerCall(
const ValueSet &inputs,
const ValueSet &outputs,
302 const ValueSet &StructValues,
307 std::vector<Value *> &Reloads);
313 CallInst *ReplacerCall,
const ValueSet &outputs,
This file defines the DenseMap class.
This file implements a set that has insertion order iteration characteristics.
an instruction to allocate memory on the stack
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
A cache of @llvm.assume calls within a function.
LLVM Basic Block Representation.
BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequen...
Analysis providing branch probability information.
This class represents a function call, abstracting a target machine's calling convention.
Implements a dense probed hash-table based set.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
A Module instance is used to store all the information related to an LLVM module.
A vector that has set insertion semantics.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Class to represent struct types.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
This is an optimization pass for GlobalISel generic memory operations.