[llvm-dev] No remapping of clone instruction in CloneBasicBlock
James Molloy via llvm-dev
llvm-dev at lists.llvm.org
Thu May 5 03:36:00 PDT 2016
Hi Ashuntosh,
Indeed, this is deliberate. When performing cloning operations, often the
user requires quite a lot of flexibility. Perhaps by editing the remapping
map before remapping is performed (clone with remapping, but change so that
%A -> %B).
The RemapInstructionsInBlocks function does what you want:
ValueToValueMapTy VM;
CloneBasicBlock(BB, VM, ...);
RemapInstructionsInBlocks({BB}, VM);
Cheers,
James
On Thu, 5 May 2016 at 09:48 Nema, Ashutosh via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hi,
>
> Found CloneBasicBlock utility only does the cloning without any remapping.
>
> Consider below example:
>
> *Input block:*
> sw.epilog: ; preds = %sw.bb20,
> %sw.bb15, %sw.bb10, %sw.bb6, %sw.bb2, %sw.bb, %while.body, %if.end29
> %no_final.1 = phi i32 [ %no_final.055, %while.body ], [ 1, %if.end29 ],
> [ %no_final.055, %sw.bb20 ], [ %no_final.055, %sw.bb15 ], [ %no_final.055,
> %sw.bb10 ], [ %no_final.055, %sw.bb6 ], [ %no_final.055, %sw.bb2 ], [
> %no_final.055, %sw.bb ]
> %locinput.1 = phi i8* [ %locinput.057, %while.body ], [ %incdec.ptr,
> %if.end29 ], [ %locinput.057, %sw.bb20 ], [ %locinput.057, %sw.bb15 ], [
> %locinput.057, %sw.bb10 ], [ %locinput.057, %sw.bb6 ], [ %locinput.057,
> %sw.bb2 ], [ %locinput.057, %sw.bb ]
> %next30 = getelementptr inbounds %struct.Node, %struct.Node* %scan.056,
> i64 0, i32 0, !dbg !91
> %8 = load %struct.Node*, %struct.Node** %next30, align 8, !dbg !91,
> !tbaa !92
> tail call void @llvm.dbg.value(metadata %struct.Node* %8, i64 0,
> metadata !28, metadata !34), !dbg !41
> %cmp = icmp eq %struct.Node* %8, null, !dbg !52
> br i1 %cmp, label %no_silent.loopexit, label %while.body, !dbg !54
>
> *Clone Block:*
> sw.epilog.jl: ; No predecessors!
> %no_final.1.jl = phi i32 [ %no_final.055, %while.body ], [ 1, %if.end29
> ], [ %no_final.055, %sw.bb20 ], [ %no_final.055, %sw.bb15 ], [
> %no_final.055, %sw.bb10 ], [ %no_final.055, %sw.bb6 ], [ %no_final.055,
> %sw.bb2 ], [ %no_final.055, %sw.bb ]
> %locinput.1.jl = phi i8* [ %locinput.057, %while.body ], [ %incdec.ptr,
> %if.end29 ], [ %locinput.057, %sw.bb20 ], [ %locinput.057, %sw.bb15 ], [
> %locinput.057, %sw.bb10 ], [ %locinput.057, %sw.bb6 ], [ %locinput.057,
> %sw.bb2 ], [ %locinput.057, %sw.bb ]
> %next30.jl = getelementptr inbounds %struct.Node, %struct.Node*
> %scan.056, i64 0, i32 0, !dbg !91
> %9 = load %struct.Node*, %struct.Node** %next30, align 8, !dbg !91,
> !tbaa !92
> tail call void @llvm.dbg.value(metadata %struct.Node* %8, i64 0,
> metadata !28, metadata !34), !dbg !41
> %cmp.jl = icmp eq %struct.Node* %8, null, !dbg !52
> br i1 %cmp, label %no_silent.loopexit, label %while.body, !dbg !54
>
> *Highlighted instruction should be:*
> %9 = load %struct.Node*, %struct.Node** %next30.jl, align 8, !dbg !91,
> !tbaa !92
> %cmp.jl = icmp eq %struct.Node* %9, null, !dbg !52
> br i1 %cmp.jl, label %no_silent.loopexit, label %while.body, !dbg !54
>
> I can see in the comments of this function it clearly mentioned it doesn’t
> remap the clone instructions.
> Wondering why its kept like this, is there any specific reason, cloning
> without remapping may not be correct always.
>
> Is there any other utility which does both cloning and remapping ?
>
> Thanks,
> Ashutosh
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160505/583c5650/attachment.html>
More information about the llvm-dev
mailing list