[llvm] r239551 - Set proper debug location for branch added in BasicBlock::splitBasicBlock().

Eric Christopher echristo at gmail.com
Thu Jun 11 11:50:11 PDT 2015


Ah, nice catch.

Thanks Alexey!

-eric

On Thu, Jun 11, 2015 at 11:43 AM Alexey Samsonov <vonosmas at gmail.com> wrote:

> Author: samsonov
> Date: Thu Jun 11 13:25:54 2015
> New Revision: 239551
>
> URL: http://llvm.org/viewvc/llvm-project?rev=239551&view=rev
> Log:
> Set proper debug location for branch added in
> BasicBlock::splitBasicBlock().
>
> This improves debug locations in passes that do a lot of basic block
> transformations. Important case is LoopUnroll pass, the test for correct
> debug locations accompanies this change.
>
> Test Plan: regression test suite
>
> Reviewers: dblaikie, sanjoy
>
> Subscribers: llvm-commits
>
> Differential Revision: http://reviews.llvm.org/D10367
>
> Modified:
>     llvm/trunk/lib/IR/BasicBlock.cpp
>     llvm/trunk/test/Transforms/LoopUnroll/runtime-loop1.ll
>
> Modified: llvm/trunk/lib/IR/BasicBlock.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/BasicBlock.cpp?rev=239551&r1=239550&r2=239551&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/BasicBlock.cpp (original)
> +++ llvm/trunk/lib/IR/BasicBlock.cpp Thu Jun 11 13:25:54 2015
> @@ -362,12 +362,15 @@ BasicBlock *BasicBlock::splitBasicBlock(
>    BasicBlock *New = BasicBlock::Create(getContext(), BBName,
>                                         getParent(), InsertBefore);
>
> +  // Save DebugLoc of split point before invalidating iterator.
> +  DebugLoc Loc = I->getDebugLoc();
>    // Move all of the specified instructions from the original basic block
> into
>    // the new basic block.
>    New->getInstList().splice(New->end(), this->getInstList(), I, end());
>
>    // Add a branch instruction to the newly formed basic block.
> -  BranchInst::Create(New, this);
> +  BranchInst *BI = BranchInst::Create(New, this);
> +  BI->setDebugLoc(Loc);
>
>    // Now we must loop through all of the successors of the New block
> (which
>    // _were_ the successors of the 'this' block), and update any PHI nodes
> in
>
> Modified: llvm/trunk/test/Transforms/LoopUnroll/runtime-loop1.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopUnroll/runtime-loop1.ll?rev=239551&r1=239550&r2=239551&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/LoopUnroll/runtime-loop1.ll (original)
> +++ llvm/trunk/test/Transforms/LoopUnroll/runtime-loop1.ll Thu Jun 11
> 13:25:54 2015
> @@ -2,29 +2,50 @@
>
>  ; This tests that setting the unroll count works
>
> +; CHECK: for.body.preheader:
> +; CHECK:   br {{.*}} label %for.body.prol, label
> %for.body.preheader.split, !dbg [[PH_LOC:![0-9]+]]
>  ; CHECK: for.body.prol:
> -; CHECK: br label %for.body.preheader.split
> +; CHECK:   br label %for.body.preheader.split, !dbg [[BODY_LOC:![0-9]+]]
> +; CHECK: for.body.preheader.split:
> +; CHECK:   br {{.*}} label %for.end.loopexit, label
> %for.body.preheader.split.split, !dbg [[PH_LOC]]
>  ; CHECK: for.body:
> -; CHECK: br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label
> %for.body
> +; CHECK:   br i1 %exitcond.1, label %for.end.loopexit.unr-lcssa, label
> %for.body, !dbg [[BODY_LOC]]
>  ; CHECK-NOT: br i1 %exitcond.4, label %for.end.loopexit{{.*}}, label
> %for.body
>
> +; CHECK-DAG: [[PH_LOC]] = !DILocation(line: 101, column: 1, scope:
> !{{.*}})
> +; CHECK-DAG: [[BODY_LOC]] = !DILocation(line: 102, column: 1, scope:
> !{{.*}})
> +
>  define i32 @test(i32* nocapture %a, i32 %n) nounwind uwtable readonly {
>  entry:
> -  %cmp1 = icmp eq i32 %n, 0
> -  br i1 %cmp1, label %for.end, label %for.body
> +  %cmp1 = icmp eq i32 %n, 0, !dbg !7
> +  br i1 %cmp1, label %for.end, label %for.body, !dbg !7
>
>  for.body:                                         ; preds = %for.body,
> %entry
>    %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
>    %sum.02 = phi i32 [ %add, %for.body ], [ 0, %entry ]
> -  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
> -  %0 = load i32, i32* %arrayidx, align 4
> -  %add = add nsw i32 %0, %sum.02
> -  %indvars.iv.next = add i64 %indvars.iv, 1
> -  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
> -  %exitcond = icmp eq i32 %lftr.wideiv, %n
> -  br i1 %exitcond, label %for.end, label %for.body
> +  %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv, !dbg
> !8
> +  %0 = load i32, i32* %arrayidx, align 4, !dbg !8
> +  %add = add nsw i32 %0, %sum.02, !dbg !8
> +  %indvars.iv.next = add i64 %indvars.iv, 1, !dbg !9
> +  %lftr.wideiv = trunc i64 %indvars.iv.next to i32, !dbg !9
> +  %exitcond = icmp eq i32 %lftr.wideiv, %n, !dbg !9
> +  br i1 %exitcond, label %for.end, label %for.body, !dbg !9
>
>  for.end:                                          ; preds = %for.body,
> %entry
>    %sum.0.lcssa = phi i32 [ 0, %entry ], [ %add, %for.body ]
> -  ret i32 %sum.0.lcssa
> +  ret i32 %sum.0.lcssa, !dbg !10
>  }
> +
> +!llvm.module.flags = !{!0, !1, !2}
> +!0 = !{i32 2, !"Dwarf Version", i32 4}
> +!1 = !{i32 2, !"Debug Info Version", i32 3}
> +!2 = !{i32 1, !"PIC Level", i32 2}
> +
> +!3 = !{}
> +!4 = !DISubroutineType(types: !3)
> +!5 = !DIFile(filename: "test.cpp", directory: "/tmp")
> +!6 = !DISubprogram(name: "test", scope: !5, file: !5, line: 99, type: !4,
> isLocal: false, isDefinition: true, scopeLine: 100, flags:
> DIFlagPrototyped, isOptimized: false, function: i32 (i32*, i32)* @test,
> variables: !3)
> +!7 = !DILocation(line: 100, column: 1, scope: !6)
> +!8 = !DILocation(line: 101, column: 1, scope: !6)
> +!9 = !DILocation(line: 102, column: 1, scope: !6)
> +!10 = !DILocation(line: 103, column: 1, scope: !6)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150611/7aafa5db/attachment.html>


More information about the llvm-commits mailing list