]> granicus.if.org Git - llvm/commitdiff
Add prototype for new CloneBasicBlock function
authorChris Lattner <sabre@nondot.org>
Fri, 18 Apr 2003 03:49:22 +0000 (03:49 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 18 Apr 2003 03:49:22 +0000 (03:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5804 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/Utils/Cloning.h

index e32b106f1f6636cf3427c5787c6ca4d01fb024b3..a2959bb336d5452d4b0c994f34f12e2d6b12a339 100644 (file)
@@ -8,8 +8,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_TRANSFORMS_UTIlS_CLONING_H
-#define LLVM_TRANSFORMS_UTIlS_CLONING_H
+#ifndef LLVM_TRANSFORMS_UTILS_CLONING_H
+#define LLVM_TRANSFORMS_UTILS_CLONING_H
 
 #include <vector>
 #include <map>
@@ -24,6 +24,32 @@ class ReturnInst;
 ///
 Module *CloneModule(const Module *M);
 
+/// CloneBasicBlock - Return a copy of the specified basic block, but without
+/// embedding the block into a particular function.  The block returned is an
+/// exact copy of the specified basic block, without any remapping having been
+/// performed.  Because of this, this is only suitable for applications where
+/// the basic block will be inserted into the same function that it was cloned
+/// from (loop unrolling would use this, for example).
+///
+/// Also, note that this function makes a direct copy of the basic block, and
+/// can thus produce illegal LLVM code.  In particular, it will copy any PHI
+/// nodes from the original block, even though there are no predecessors for the
+/// newly cloned block (thus, phi nodes will have to be updated).  Also, this
+/// block will branch to the old successors of the original block: these
+/// successors will have to have any PHI nodes updated to account for the new
+/// incoming edges.
+///
+/// The correlation between instructions in the source and result basic blocks
+/// is recorded in the ValueMap map.
+///
+/// If you have a particular suffix you'd like to use to add to any cloned
+/// names, specify it as the optional second parameter.
+///
+BasicBlock *CloneBasicBlock(const BasicBlock *BB,
+                            std::map<const Value*, Value*> &ValueMap,
+                            const char *NameSuffix = "");
+
+
 /// CloneFunction - Return a copy of the specified function, but without
 /// embedding the function into another module.  Also, any references specified
 /// in the ValueMap are changed to refer to their mapped value instead of the