LLVM  14.0.0git
Classes | Namespaces | Enumerations | Functions
Cloning.h File Reference
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/InlineCost.h"
#include "llvm/IR/ValueHandle.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <functional>
#include <memory>
#include <vector>
Include dependency graph for Cloning.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  llvm::ClonedCodeInfo
 This struct can be used to capture information about code being cloned, while it is being cloned. More...
 
class  llvm::InlineFunctionInfo
 This class captures the data input to the InlineFunction call, and records the auxiliary results produced by it. More...
 

Namespaces

 llvm
 ---------------------— PointerInfo ------------------------------------—
 

Enumerations

enum  llvm::CloneFunctionChangeType { llvm::CloneFunctionChangeType::LocalChangesOnly, llvm::CloneFunctionChangeType::GlobalChanges, llvm::CloneFunctionChangeType::DifferentModule, llvm::CloneFunctionChangeType::ClonedModule }
 

Functions

std::unique_ptr< Modulellvm::CloneModule (const Module &M)
 Return an exact copy of the specified module. More...
 
std::unique_ptr< Modulellvm::CloneModule (const Module &M, ValueToValueMapTy &VMap)
 
std::unique_ptr< Modulellvm::CloneModule (const Module &M, ValueToValueMapTy &VMap, function_ref< bool(const GlobalValue *)> ShouldCloneDefinition)
 Return a copy of the specified module. More...
 
BasicBlockllvm::CloneBasicBlock (const BasicBlock *BB, ValueToValueMapTy &VMap, const Twine &NameSuffix="", Function *F=nullptr, ClonedCodeInfo *CodeInfo=nullptr, DebugInfoFinder *DIFinder=nullptr)
 Return a copy of the specified basic block, but without embedding the block into a particular function. More...
 
Functionllvm::CloneFunction (Function *F, ValueToValueMapTy &VMap, ClonedCodeInfo *CodeInfo=nullptr)
 Return a copy of the specified function and add it to that function's module. More...
 
void llvm::CloneFunctionInto (Function *NewFunc, const Function *OldFunc, ValueToValueMapTy &VMap, CloneFunctionChangeType Changes, SmallVectorImpl< ReturnInst * > &Returns, const char *NameSuffix="", ClonedCodeInfo *CodeInfo=nullptr, ValueMapTypeRemapper *TypeMapper=nullptr, ValueMaterializer *Materializer=nullptr)
 Clone OldFunc into NewFunc, transforming the old arguments into references to VMap values. More...
 
void llvm::CloneAndPruneIntoFromInst (Function *NewFunc, const Function *OldFunc, const Instruction *StartingInst, ValueToValueMapTy &VMap, bool ModuleLevelChanges, SmallVectorImpl< ReturnInst * > &Returns, const char *NameSuffix="", ClonedCodeInfo *CodeInfo=nullptr)
 This works like CloneAndPruneFunctionInto, except that it does not clone the entire function. More...
 
void llvm::CloneAndPruneFunctionInto (Function *NewFunc, const Function *OldFunc, ValueToValueMapTy &VMap, bool ModuleLevelChanges, SmallVectorImpl< ReturnInst * > &Returns, const char *NameSuffix="", ClonedCodeInfo *CodeInfo=nullptr)
 This works exactly like CloneFunctionInto, except that it does some simple constant prop and DCE on the fly. More...
 
InlineResult llvm::InlineFunction (CallBase &CB, InlineFunctionInfo &IFI, AAResults *CalleeAAR=nullptr, bool InsertLifetime=true, Function *ForwardVarArgsTo=nullptr)
 This function inlines the called function into the basic block of the caller. More...
 
Loopllvm::cloneLoopWithPreheader (BasicBlock *Before, BasicBlock *LoopDomBB, Loop *OrigLoop, ValueToValueMapTy &VMap, const Twine &NameSuffix, LoopInfo *LI, DominatorTree *DT, SmallVectorImpl< BasicBlock * > &Blocks)
 Clones a loop OrigLoop. More...
 
void llvm::remapInstructionsInBlocks (const SmallVectorImpl< BasicBlock * > &Blocks, ValueToValueMapTy &VMap)
 Remaps instructions in Blocks using the mapping in VMap. More...
 
BasicBlockllvm::DuplicateInstructionsInSplitBetween (BasicBlock *BB, BasicBlock *PredBB, Instruction *StopAt, ValueToValueMapTy &ValueMapping, DomTreeUpdater &DTU)
 Split edge between BB and PredBB and duplicate all non-Phi instructions from BB between its beginning and the StopAt instruction into the split block. More...
 
void llvm::updateProfileCallee (Function *Callee, int64_t entryDelta, const ValueMap< const Value *, WeakTrackingVH > *VMap=nullptr)
 Updates profile information by adjusting the entry count by adding entryDelta then scaling callsite information by the new count divided by the old count. More...
 
void llvm::identifyNoAliasScopesToClone (ArrayRef< BasicBlock * > BBs, SmallVectorImpl< MDNode * > &NoAliasDeclScopes)
 Find the 'llvm.experimental.noalias.scope.decl' intrinsics in the specified basic blocks and extract their scope. More...
 
void llvm::identifyNoAliasScopesToClone (BasicBlock::iterator Start, BasicBlock::iterator End, SmallVectorImpl< MDNode * > &NoAliasDeclScopes)
 Find the 'llvm.experimental.noalias.scope.decl' intrinsics in the specified instruction range and extract their scope. More...
 
void llvm::cloneNoAliasScopes (ArrayRef< MDNode * > NoAliasDeclScopes, DenseMap< MDNode *, MDNode * > &ClonedScopes, StringRef Ext, LLVMContext &Context)
 Duplicate the specified list of noalias decl scopes. More...
 
void llvm::adaptNoAliasScopes (llvm::Instruction *I, const DenseMap< MDNode *, MDNode * > &ClonedScopes, LLVMContext &Context)
 Adapt the metadata for the specified instruction according to the provided mapping. More...
 
void llvm::cloneAndAdaptNoAliasScopes (ArrayRef< MDNode * > NoAliasDeclScopes, ArrayRef< BasicBlock * > NewBlocks, LLVMContext &Context, StringRef Ext)
 Clone the specified noalias decl scopes. More...
 
void llvm::cloneAndAdaptNoAliasScopes (ArrayRef< MDNode * > NoAliasDeclScopes, Instruction *IStart, Instruction *IEnd, LLVMContext &Context, StringRef Ext)
 Clone the specified noalias decl scopes. More...