CloneBasicBlock and Unnamed Temporaries


I was trying to use CloneBasicBlock() (in Cloning.h) to clone basic
blocks in one of my transform passes. For example, when I have a basic
block like:

bb1: ; preds = %bb
  load i32* %i, align 4 ; <i32>:11 [#uses=2]
  load i32* %n_addr, align 4 ; <i32>:12 [#uses=2]
  icmp slt i32 %11, %12 ; <i1>:13 [#uses=2]

cloning it gives something like:

bb1_clone: ; preds = %entry
  load i32* %i, align 4 ; <i32>:28 [#uses=0]
  load i32* %n_addr, align 4 ; <i32>:29 [#uses=0]
  icmp slt i32 %11, %12 ; <i1>:30 [#uses=0]

Since the temporaries referred to in the cloned icmp instruction are
still those created in bb1, I get the "Instruction does not dominate
all uses" error thrown by Verifier. A couple of questions (assuming
that the code is not in SSA form, courtesy -reg2ssa pass):

(1) Is it always true in the general case (it was true in the example
I tested with) that the unnamed temporaries referenced/created are
local to a basic block ?

(2) If the answer to (1) is no:

If I add the cloned basic block (bb1_clone) into the same function at
a place such that all paths to bb1_clone from the entry are the same
as the earlier paths to bb1 (except that I am now removing an earlier
path to bb1 from one of its predecessor), would repatching the unnamed
temporaries in bb_clone1 to the new ones (local to the cloned block ?)
in the client transform pass be good enough to result in a well formed
LLVM IR representation ?

Thanks much for your time.

- Prakash