diff options
Diffstat (limited to 'include/llvm/Transforms')
-rw-r--r-- | include/llvm/Transforms/IPO.h | 18 | ||||
-rw-r--r-- | include/llvm/Transforms/Utils/Cloning.h | 36 | ||||
-rw-r--r-- | include/llvm/Transforms/Utils/Local.h | 3 |
3 files changed, 18 insertions, 39 deletions
diff --git a/include/llvm/Transforms/IPO.h b/include/llvm/Transforms/IPO.h index 0c374a0..78d2fad 100644 --- a/include/llvm/Transforms/IPO.h +++ b/include/llvm/Transforms/IPO.h @@ -183,12 +183,20 @@ ModulePass *createBlockExtractorPass(); ModulePass *createStripDeadPrototypesPass(); //===----------------------------------------------------------------------===// -/// createFunctionAttrsPass - This pass discovers functions that do not access -/// memory, or only read memory, and gives them the readnone/readonly attribute. -/// It also discovers function arguments that are not captured by the function -/// and marks them with the nocapture attribute. +/// createPostOrderFunctionAttrsPass - This pass walks SCCs of the call graph +/// in post-order to deduce and propagate function attributes. It can discover +/// functions that do not access memory, or only read memory, and give them the +/// readnone/readonly attribute. It also discovers function arguments that are +/// not captured by the function and marks them with the nocapture attribute. /// -Pass *createFunctionAttrsPass(); +Pass *createPostOrderFunctionAttrsPass(); + +//===----------------------------------------------------------------------===// +/// createReversePostOrderFunctionAttrsPass - This pass walks SCCs of the call +/// graph in RPO to deduce and propagate function attributes. Currently it +/// only handles synthesizing norecurse attributes. +/// +Pass *createReversePostOrderFunctionAttrsPass(); //===----------------------------------------------------------------------===// /// createMergeFunctionsPass - This pass discovers identical functions and diff --git a/include/llvm/Transforms/Utils/Cloning.h b/include/llvm/Transforms/Utils/Cloning.h index 92a1d52..4f006f2 100644 --- a/include/llvm/Transforms/Utils/Cloning.h +++ b/include/llvm/Transforms/Utils/Cloning.h @@ -147,42 +147,12 @@ void CloneFunctionInto(Function *NewFunc, const Function *OldFunc, ValueMapTypeRemapper *TypeMapper = nullptr, ValueMaterializer *Materializer = nullptr); -/// A helper class used with CloneAndPruneIntoFromInst to change the default -/// behavior while instructions are being cloned. -class CloningDirector { -public: - /// This enumeration describes the way CloneAndPruneIntoFromInst should - /// proceed after the CloningDirector has examined an instruction. - enum CloningAction { - ///< Continue cloning the instruction (default behavior). - CloneInstruction, - ///< Skip this instruction but continue cloning the current basic block. - SkipInstruction, - ///< Skip this instruction and stop cloning the current basic block. - StopCloningBB, - ///< Don't clone the terminator but clone the current block's successors. - CloneSuccessors - }; - - virtual ~CloningDirector() {} - - /// Subclasses must override this function to customize cloning behavior. - virtual CloningAction handleInstruction(ValueToValueMapTy &VMap, - const Instruction *Inst, - BasicBlock *NewBB) = 0; - - virtual ValueMapTypeRemapper *getTypeRemapper() { return nullptr; } - virtual ValueMaterializer *getValueMaterializer() { return nullptr; } -}; - void CloneAndPruneIntoFromInst(Function *NewFunc, const Function *OldFunc, const Instruction *StartingInst, ValueToValueMapTy &VMap, bool ModuleLevelChanges, - SmallVectorImpl<ReturnInst*> &Returns, - const char *NameSuffix = "", - ClonedCodeInfo *CodeInfo = nullptr, - CloningDirector *Director = nullptr); - + SmallVectorImpl<ReturnInst *> &Returns, + const char *NameSuffix = "", + ClonedCodeInfo *CodeInfo = nullptr); /// CloneAndPruneFunctionInto - This works exactly like CloneFunctionInto, /// except that it does some simple constant prop and DCE on the fly. The diff --git a/include/llvm/Transforms/Utils/Local.h b/include/llvm/Transforms/Utils/Local.h index 81b376f..911c6f1 100644 --- a/include/llvm/Transforms/Utils/Local.h +++ b/include/llvm/Transforms/Utils/Local.h @@ -42,6 +42,7 @@ class TargetLibraryInfo; class TargetTransformInfo; class DIBuilder; class DominatorTree; +class LazyValueInfo; template<typename T> class SmallVectorImpl; @@ -303,7 +304,7 @@ void removeUnwindEdge(BasicBlock *BB); /// \brief Remove all blocks that can not be reached from the function's entry. /// /// Returns true if any basic block was removed. -bool removeUnreachableBlocks(Function &F); +bool removeUnreachableBlocks(Function &F, LazyValueInfo *LVI = nullptr); /// \brief Combine the metadata of two instructions so that K can replace J /// |