Implement a new method: CloneAndPruneFunctionInto, as documented.
authorChris Lattner <sabre@nondot.org>
Sat, 27 May 2006 01:21:50 +0000 (01:21 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 27 May 2006 01:21:50 +0000 (01:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28518 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/Utils/Cloning.h

index 4560c7286273e82b6c2b56740ec57e8720a3ce58..38fc5ba740df209b273122ce1436749c172043d3 100644 (file)
@@ -130,6 +130,19 @@ void CloneFunctionInto(Function *NewFunc, const Function *OldFunc,
                        const char *NameSuffix = "", 
                        ClonedCodeInfo *CodeInfo = 0);
 
+/// CloneAndPruneFunctionInto - This works exactly like CloneFunctionInto,
+/// except that it does some simple constant prop and DCE on the fly.  The
+/// effect of this is to copy significantly less code in cases where (for
+/// example) a function call with constant arguments is inlined, and those
+/// constant arguments cause a significant amount of code in the callee to be
+/// dead.  Since this doesn't produce an exactly copy of the input, it can't be
+/// used for things like CloneFunction or CloneModule.
+void CloneAndPruneFunctionInto(Function *NewFunc, const Function *OldFunc,
+                               std::map<const Value*, Value*> &ValueMap,
+                               std::vector<ReturnInst*> &Returns,
+                               const char *NameSuffix = "", 
+                               ClonedCodeInfo *CodeInfo = 0);
+
 
 /// CloneTraceInto - Clone T into NewFunc. Original<->clone mapping is
 /// saved in ValueMap.