[llvm] r296371 - [TailDuplicator] Maintain DebugLoc for branch instructions

Taewook Oh via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 27 11:30:01 PST 2017


Author: twoh
Date: Mon Feb 27 13:30:01 2017
New Revision: 296371

URL: http://llvm.org/viewvc/llvm-project?rev=296371&view=rev
Log:
[TailDuplicator] Maintain DebugLoc for branch instructions

Summary: Existing implementation of duplicateSimpleBB function drops DebugLoc metadata of branch instructions during the transformation. This patch addresses this issue by making newly created branch instructions to keep the metadata of replaced branch instructions.

Reviewers: qcolombet, craig.topper, aprantl, MatzeB, sanjoy, dblaikie

Reviewed By: dblaikie

Subscribers: dblaikie, llvm-commits

Differential Revision: https://reviews.llvm.org/D30026

Added:
    llvm/trunk/test/CodeGen/X86/tail-dup-debugloc.ll
Modified:
    llvm/trunk/lib/CodeGen/TailDuplicator.cpp

Modified: llvm/trunk/lib/CodeGen/TailDuplicator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TailDuplicator.cpp?rev=296371&r1=296370&r2=296371&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/TailDuplicator.cpp (original)
+++ llvm/trunk/lib/CodeGen/TailDuplicator.cpp Mon Feb 27 13:30:01 2017
@@ -725,6 +725,7 @@ bool TailDuplicator::duplicateSimpleBB(
     if (PredTBB == NextBB && PredFBB == nullptr)
       PredTBB = nullptr;
 
+    auto DL = PredBB->findBranchDebugLoc();
     TII->removeBranch(*PredBB);
 
     if (!PredBB->isSuccessor(NewTarget))
@@ -735,7 +736,7 @@ bool TailDuplicator::duplicateSimpleBB(
     }
 
     if (PredTBB)
-      TII->insertBranch(*PredBB, PredTBB, PredFBB, PredCond, DebugLoc());
+      TII->insertBranch(*PredBB, PredTBB, PredFBB, PredCond, DL);
 
     TDBBs.push_back(PredBB);
   }

Added: llvm/trunk/test/CodeGen/X86/tail-dup-debugloc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tail-dup-debugloc.ll?rev=296371&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/tail-dup-debugloc.ll (added)
+++ llvm/trunk/test/CodeGen/X86/tail-dup-debugloc.ll Mon Feb 27 13:30:01 2017
@@ -0,0 +1,56 @@
+; RUN: llc -stop-after=tailduplication -march=x86-64 < %s | FileCheck %s
+;
+; Check that DebugLoc attached to the branch instruction of 
+; 'while.cond1.preheader.lr.ph' survives after tailduplication pass.
+;
+; CHECK: [[DLOC:![0-9]+]] = !DILocation(line: 9, column: 5, scope: !{{[0-9]+}})
+; CHECK: [[VREG:%[^ ]+]] = COPY %rdi
+; CHECK: TEST64rr [[VREG]], [[VREG]]
+; CHECK-NEXT: JE_1 {{.+}}, debug-location [[DLOC]]
+; CHECK-NEXT: JMP_1 {{.+}}, debug-location [[DLOC]]
+
+target triple = "x86_64-unknown-linux-gnu"
+
+%struct.Node = type { %struct.Node* }
+
+define i32 @foo(%struct.Node* readonly %node, %struct.Node* readnone %root) !dbg !6 {
+entry:
+  %cmp = icmp eq %struct.Node* %node, %root, !dbg !8
+  br i1 %cmp, label %while.end4, label %while.cond1.preheader.lr.ph, !dbg !10
+
+while.cond1.preheader.lr.ph:                      ; preds = %entry
+  %tobool = icmp eq %struct.Node* %node, null
+  br i1 %tobool, label %while.cond1.preheader.us.preheader, label %while.body2.preheader, !dbg !11
+
+while.body2.preheader:                            ; preds = %while.cond1.preheader.lr.ph
+  br label %while.body2, !dbg !11
+
+while.cond1.preheader.us.preheader:               ; preds = %while.cond1.preheader.lr.ph
+  br label %while.cond1.preheader.us, !dbg !10
+
+while.cond1.preheader.us:                         ; preds = %while.cond1.preheader.us.preheader, %while.cond1.preheader.us
+  br label %while.cond1.preheader.us, !dbg !10
+
+while.body2:                                      ; preds = %while.body2.preheader, %while.body2
+  br label %while.body2, !dbg !11
+
+while.end4:                                       ; preds = %entry
+  ret i32 0, !dbg !12
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3, !4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: true, emissionKind: LineTablesOnly)
+!1 = !DIFile(filename: "foo.c", directory: "b/")
+!2 = !{}
+!3 = !{i32 2, !"Dwarf Version", i32 4}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = !{}
+!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 5, type: !7, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2)
+!7 = !DISubroutineType(types: !2)
+!8 = !DILocation(line: 7, column: 15, scope: !9)
+!9 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 2)
+!10 = !DILocation(line: 7, column: 3, scope: !9)
+!11 = !DILocation(line: 9, column: 5, scope: !9)
+!12 = !DILocation(line: 14, column: 3, scope: !6)




More information about the llvm-commits mailing list