LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions | Variables
CodeExtractor.cpp File Reference
#include "llvm/Transforms/Utils/CodeExtractor.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/Dominators.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/RegionInfo.h"
#include "llvm/Analysis/RegionIterator.h"
#include "llvm/Analysis/Verifier.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include <algorithm>
#include <set>
Include dependency graph for CodeExtractor.cpp:

Go to the source code of this file.

Functions

static bool isBlockValidForExtraction (const BasicBlock &BB)
 Test whether a block is valid for extraction. More...
 
template<typename IteratorT >
static SetVector< BasicBlock * > buildExtractionBlockSet (IteratorT BBBegin, IteratorT BBEnd)
 Build a set of blocks to extract if the input blocks are viable. More...
 
static SetVector< BasicBlock * > buildExtractionBlockSet (ArrayRef< BasicBlock * > BBs)
 Helper to call buildExtractionBlockSet with an ArrayRef. More...
 
static SetVector< BasicBlock * > buildExtractionBlockSet (const RegionNode &RN)
 Helper to call buildExtractionBlockSet with a RegionNode. More...
 
static bool definedInRegion (const SetVector< BasicBlock * > &Blocks, Value *V)
 
static bool definedInCaller (const SetVector< BasicBlock * > &Blocks, Value *V)
 
static BasicBlockFindPhiPredForUseInBlock (Value *Used, BasicBlock *BB)
 

Variables

static cl::opt< boolAggregateArgsOpt ("aggregate-extracted-args", cl::Hidden, cl::desc("Aggregate arguments to code-extracted functions"))
 

Function Documentation

template<typename IteratorT >
static SetVector<BasicBlock *> buildExtractionBlockSet ( IteratorT  BBBegin,
IteratorT  BBEnd 
)
static
static SetVector<BasicBlock *> buildExtractionBlockSet ( ArrayRef< BasicBlock * >  BBs)
static

Helper to call buildExtractionBlockSet with an ArrayRef.

Definition at line 104 of file CodeExtractor.cpp.

References llvm::ArrayRef< T >::begin(), buildExtractionBlockSet(), and llvm::ArrayRef< T >::end().

static SetVector<BasicBlock *> buildExtractionBlockSet ( const RegionNode RN)
static

Helper to call buildExtractionBlockSet with a RegionNode.

Definition at line 110 of file CodeExtractor.cpp.

References llvm::Region::block_begin(), llvm::Region::block_end(), buildExtractionBlockSet(), llvm::RegionNode::getNodeAs(), and llvm::RegionNode::isSubRegion().

static bool definedInCaller ( const SetVector< BasicBlock * > &  Blocks,
Value V 
)
static

definedInCaller - Return true if the specified value is defined in the function being code extracted, but not in the region being extracted. These values must be passed in as live-ins to the function.

Definition at line 150 of file CodeExtractor.cpp.

References llvm::SetVector< T, Vector, Set >::count(), and I.

Referenced by llvm::CodeExtractor::findInputsOutputs().

static bool definedInRegion ( const SetVector< BasicBlock * > &  Blocks,
Value V 
)
static

definedInRegion - Return true if the specified value is defined in the extracted region.

Definition at line 140 of file CodeExtractor.cpp.

References llvm::SetVector< T, Vector, Set >::count(), and I.

Referenced by llvm::CodeExtractor::findInputsOutputs().

static BasicBlock* FindPhiPredForUseInBlock ( Value Used,
BasicBlock BB 
)
static

FindPhiPredForUseInBlock - Given a value and a basic block, find a PHI that uses the value within the basic block, and return the predecessor block associated with that use, or return 0 if none is found.

Definition at line 407 of file CodeExtractor.cpp.

References llvm::dyn_cast(), llvm::PHINode::getIncomingBlock(), llvm::Instruction::getParent(), P, llvm::Value::use_begin(), and llvm::Value::use_end().

static bool isBlockValidForExtraction ( const BasicBlock BB)
static

Test whether a block is valid for extraction.

Definition at line 50 of file CodeExtractor.cpp.

References llvm::BasicBlock::begin(), llvm::BasicBlock::end(), F(), I, llvm::BasicBlock::isLandingPad(), and llvm::Intrinsic::vastart.

Referenced by buildExtractionBlockSet().

Variable Documentation

cl::opt<bool> AggregateArgsOpt("aggregate-extracted-args", cl::Hidden, cl::desc("Aggregate arguments to code-extracted functions"))
static