summaryrefslogtreecommitdiff
path: root/include/llvm/Transforms/Utils
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-04-18 03:49:22 +0000
committerChris Lattner <sabre@nondot.org>2003-04-18 03:49:22 +0000
commita107e5f11cf7aa362d2fdd5cebc7e64bb09ed22d (patch)
treeb6a6d17b15545abc0a751f768f8d59615a5d6459 /include/llvm/Transforms/Utils
parent681cfb9ab457e0a9b3ed5405a60809cd9a0e517f (diff)
downloadllvm-a107e5f11cf7aa362d2fdd5cebc7e64bb09ed22d.tar.gz
llvm-a107e5f11cf7aa362d2fdd5cebc7e64bb09ed22d.tar.bz2
llvm-a107e5f11cf7aa362d2fdd5cebc7e64bb09ed22d.tar.xz
Add prototype for new CloneBasicBlock function
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5804 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Transforms/Utils')
-rw-r--r--include/llvm/Transforms/Utils/Cloning.h30
1 files changed, 28 insertions, 2 deletions
diff --git a/include/llvm/Transforms/Utils/Cloning.h b/include/llvm/Transforms/Utils/Cloning.h
index e32b106f1f..a2959bb336 100644
--- a/include/llvm/Transforms/Utils/Cloning.h
+++ b/include/llvm/Transforms/Utils/Cloning.h
@@ -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