[llvm-commits] CVS: llvm/include/llvm/Transforms/Utils/Cloning.h
Chris Lattner
lattner at cs.uiuc.edu
Thu Apr 17 22:50:01 PDT 2003
Changes in directory llvm/include/llvm/Transforms/Utils:
Cloning.h updated: 1.4 -> 1.5
---
Log message:
Add prototype for new CloneBasicBlock function
---
Diffs of the changes:
Index: llvm/include/llvm/Transforms/Utils/Cloning.h
diff -u llvm/include/llvm/Transforms/Utils/Cloning.h:1.4 llvm/include/llvm/Transforms/Utils/Cloning.h:1.5
--- llvm/include/llvm/Transforms/Utils/Cloning.h:1.4 Wed Nov 20 14:22:58 2002
+++ llvm/include/llvm/Transforms/Utils/Cloning.h Thu Apr 17 22:49:22 2003
@@ -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>
@@ -23,6 +23,32 @@
/// CloneModule - Return an exact copy of the specified module
///
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
More information about the llvm-commits
mailing list