From: Chris Lattner Date: Fri, 18 Apr 2003 03:49:22 +0000 (+0000) Subject: Add prototype for new CloneBasicBlock function X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=a107e5f11cf7aa362d2fdd5cebc7e64bb09ed22d;p=oota-llvm.git Add prototype for new CloneBasicBlock function git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5804 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Transforms/Utils/Cloning.h b/include/llvm/Transforms/Utils/Cloning.h index e32b106f1f6..a2959bb336d 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 #include @@ -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 &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