DebugInfo: print DBG_VALUE MachineInstrs with [] for deref and drop the offset when...
authorDavid Blaikie <dblaikie@gmail.com>
Sat, 15 Jun 2013 15:52:58 +0000 (15:52 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Sat, 15 Jun 2013 15:52:58 +0000 (15:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184045 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinter.cpp
test/CodeGen/ARM/debug-info-arg.ll
test/CodeGen/ARM/debug-info-branch-folding.ll
test/CodeGen/X86/2010-05-28-Crash.ll
test/CodeGen/X86/2010-06-01-DeadArg-DbgInfo.ll
test/CodeGen/X86/dbg-value-dag-combine.ll

index 7f4ba7a0d939956cc97e360895ad17ed74656618..9b392649283fe71371206ce65fd001afff9f5e9a 100644 (file)
@@ -569,6 +569,8 @@ static bool emitDebugValueComment(const MachineInstr *MI, AsmPrinter &AP) {
   }
   OS << V.getName() << " <- ";
 
+  int64_t Offset = MI->getOperand(1).getImm();
+  bool Deref = false;
   // Register or immediate value. Register 0 means undef.
   if (MI->getOperand(0).isFPImm()) {
     APFloat APF = APFloat(MI->getOperand(0).getFPImm()->getValueAPF());
@@ -590,17 +592,25 @@ static bool emitDebugValueComment(const MachineInstr *MI, AsmPrinter &AP) {
     MI->getOperand(0).getCImm()->getValue().print(OS, false /*isSigned*/);
   } else {
     assert(MI->getOperand(0).isReg() && "Unknown operand type");
-    if (MI->getOperand(0).getReg() == 0) {
+    unsigned Reg = MI->getOperand(0).getReg();
+    if (Reg == 0) {
       // Suppress offset, it is not meaningful here.
       OS << "undef";
       // NOTE: Want this comment at start of line, don't emit with AddComment.
       AP.OutStreamer.EmitRawText(OS.str());
       return true;
     }
-    OS << AP.TM.getRegisterInfo()->getName(MI->getOperand(0).getReg());
+    Deref = Offset != 0; // FIXME: use a better sentinel value so that deref of
+                         // a reg with a zero offset is valid
+    if (Deref)
+      OS << '[';
+    OS << AP.TM.getRegisterInfo()->getName(Reg);
   }
 
-  OS << '+' << MI->getOperand(1).getImm();
+  if (Offset)
+    OS << '+' << Offset;
+  if (Deref)
+    OS << ']';
   // NOTE: Want this comment at start of line, don't emit with AddComment.
   AP.OutStreamer.EmitRawText(OS.str());
   return true;
index c162260dcd0cbcf76be5ff0910491cc5fa302588..bb33eb69507167af233aa17eebee02c38f73ac73 100644 (file)
@@ -11,7 +11,7 @@ define void @foo(%struct.tag_s* nocapture %this, %struct.tag_s* %c, i64 %x, i64
   tail call void @llvm.dbg.value(metadata !{%struct.tag_s* %c}, i64 0, metadata !13), !dbg !21
   tail call void @llvm.dbg.value(metadata !{i64 %x}, i64 0, metadata !14), !dbg !22
   tail call void @llvm.dbg.value(metadata !{i64 %y}, i64 0, metadata !17), !dbg !23
-;CHECK:        @DEBUG_VALUE: foo:y <- R7+4294967295
+;CHECK:        @DEBUG_VALUE: foo:y <- [R7+4294967295]
   tail call void @llvm.dbg.value(metadata !{%struct.tag_s* %ptr1}, i64 0, metadata !18), !dbg !24
   tail call void @llvm.dbg.value(metadata !{%struct.tag_s* %ptr2}, i64 0, metadata !19), !dbg !25
   %1 = icmp eq %struct.tag_s* %c, null, !dbg !26
index 38945ac2ea7b31ec8dd99c0876d34797c224d4ee..364519fb19b935a4605df50160a3828a3506313e 100644 (file)
@@ -5,8 +5,8 @@ target triple = "thumbv7-apple-macosx10.6.7"
 ;CHECK:        vadd.f32        q4, q8, q8
 ;CHECK-NEXT: LBB0_1
 
-;CHECK:@DEBUG_VALUE: x <- Q4+0
-;CHECK-NEXT:@DEBUG_VALUE: y <- Q4+0
+;CHECK:@DEBUG_VALUE: x <- Q4
+;CHECK-NEXT:@DEBUG_VALUE: y <- Q4
 
 
 @.str = external constant [13 x i8]
index ee00dbacbf60271474efd387924440b790da640f..b084c57452dac7d19ebd614d921ec5ca6b60a742 100644 (file)
@@ -46,4 +46,4 @@ entry:
 
 ;CHECK: DEBUG_VALUE: bar:x <- E
 ;CHECK: Ltmp
-;CHECK:        DEBUG_VALUE: foo:y <- 1+0
+;CHECK:        DEBUG_VALUE: foo:y <- 1
index b764b0b345977c81747aae5ff60654b26c3444ea..b07a1929f850bcc95e3d043e13035aa9923e6869 100644 (file)
@@ -8,7 +8,7 @@ target triple = "x86_64-apple-darwin10.2"
 @llvm.used = appending global [1 x i8*] [i8* bitcast (i32 (%struct.foo*, i32)* @_ZN3foo3bazEi to i8*)], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0]
 
 define i32 @_ZN3foo3bazEi(%struct.foo* nocapture %this, i32 %x) nounwind readnone optsize noinline ssp align 2 {
-;CHECK: DEBUG_VALUE: baz:this <- RDI+0
+;CHECK: DEBUG_VALUE: baz:this <- RDI
 entry:
   tail call void @llvm.dbg.value(metadata !{%struct.foo* %this}, i64 0, metadata !15)
   tail call void @llvm.dbg.value(metadata !{i32 %x}, i64 0, metadata !16)
index c63235e7ad65d2ba274140321b3b0d45e850f587..36c6fac7e6a9c87cad2307cd62055b1b4f7bc1f5 100644 (file)
@@ -16,7 +16,7 @@ entry:
   call void @llvm.dbg.value(metadata !12, i64 0, metadata !13), !dbg !14
   %tmp2 = load i32 addrspace(1)* %ip, align 4, !dbg !15
   %tmp3 = add i32 0, %tmp2, !dbg !15
-; CHECK:  ##DEBUG_VALUE: idx <- EAX+0
+; CHECK:  ##DEBUG_VALUE: idx <- EAX
   call void @llvm.dbg.value(metadata !{i32 %tmp3}, i64 0, metadata !13), !dbg
 !15
   %arrayidx = getelementptr i32 addrspace(1)* %ip, i32 %1, !dbg !16