<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 16, 2017 at 3:40 PM Adrian Prantl via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: adrian<br>
Date: Fri Jun 16 17:40:04 2017<br>
New Revision: 305599<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=305599&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=305599&view=rev</a><br>
Log:<br>
Improve the accuracy of variable ranges .debug_loc location lists.<br>
<br>
For the following motivating example<br>
  bool c();<br>
  void f();<br>
  bool start() {<br>
    bool result = c();<br>
    if (!c()) {<br>
      result = false;<br>
      goto exit;<br>
    }<br>
    f();<br>
    result = true;<br>
  exit:<br>
    return result;<br>
  }<br>
<br>
we would previously generate a single DW_AT_const_value(1) because<br>
only the DBG_VALUE in the second-to-last basic block survived<br>
codegen. This patch improves the heuristic used to determine when a<br>
DBG_VALUE is available at the beginning of its variable's enclosing<br>
lexical scope:<br>
<br>
- Stop giving singular constants blanket permission to take over the<br>
  entire scope. There is still a special case for constants in the<br>
  function prologue that we also miight want to retire later.<br>
<br>
- Use the lexical scope information to determine available-at-entry<br>
  instead of proximity to the function prologue.<br>
<br>
After this patch we generate a location list with a more accurate<br>
narrower availability for the constant true value. As a pleasant side<br>
effect, we also generate inline locations instead of location lists<br>
where a loacation covers the entire range of the enclosing lexical<br>
scope.<br>
<br>
Measured on compiling llc with four targets this doesn't have an<br>
effect on compile time and reduces the size of the debug info for llc<br>
by ~600K.<br>
<br>
rdar://problem/30286912<br>
<br>
Added:<br>
    llvm/trunk/test/DebugInfo/Generic/partial-constant.ll<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>
    llvm/trunk/test/DebugInfo/Generic/sugared-constants.ll<br>
    llvm/trunk/test/DebugInfo/MIR/X86/bit-piece-dh.mir<br>
    llvm/trunk/test/DebugInfo/X86/dbg-merge-loc-entry.ll<br>
    llvm/trunk/test/DebugInfo/X86/inlined-formal-parameter.ll<br>
    llvm/trunk/test/DebugInfo/X86/parameters.ll<br>
    llvm/trunk/test/DebugInfo/X86/pieces-3.ll<br>
    llvm/trunk/test/DebugInfo/X86/reference-argument.ll<br>
    llvm/trunk/test/DebugInfo/X86/this-stack_value.ll<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Fri Jun 16 17:40:04 2017<br>
@@ -972,16 +972,60 @@ DbgVariable *DwarfDebug::createConcreteV<br>
   return ConcreteVariables.back().get();<br>
 }<br>
<br>
-// Determine whether this DBG_VALUE is valid at the beginning of the function.<br>
-static bool validAtEntry(const MachineInstr *MInsn) {<br>
-  auto MBB = MInsn->getParent();<br>
-  // Is it in the entry basic block?<br>
-  if (!MBB->pred_empty())<br>
+/// Determine whether a *singular* DBG_VALUE is valid for the entirety of its<br>
+/// enclosing lexical scope. The check ensures there are no other instructions<br>
+/// in the same lexical scope preceding the DBG_VALUE and that its range is<br>
+/// either open or otherwise rolls off the end of the scope.<br>
+static bool validThroughout(LexicalScopes &LScopes,<br>
+                            const MachineInstr *DbgValue,<br>
+                            const MachineInstr *RangeEnd) {<br>
+  assert(DbgValue->getDebugLoc() && "DBG_VALUE without a debug location");<br>
+  auto MBB = DbgValue->getParent();<br>
+  auto DL = DbgValue->getDebugLoc();<br>
+  auto *LScope = LScopes.findLexicalScope(DL);<br>
+  // Scope doesn't exist; this is a dead DBG_VALUE.<br>
+  if (!LScope)<br>
     return false;<br>
-  for (MachineBasicBlock::const_reverse_iterator I(MInsn); I != MBB->rend(); ++I)<br>
-    if (!(I->isDebugValue() || I->getFlag(MachineInstr::FrameSetup)))<br>
+  auto &LSRange = LScope->getRanges();<br>
+  if (LSRange.size() == 0)<br>
+    return false;<br>
+<br>
+  // Determine if the DBG_VALUE is valid at the beginning of its lexical block.<br>
+  const MachineInstr *LScopeBegin = LSRange.front().first;<br>
+  // Early exit if the lexical scope begins outside of the current block.<br>
+  if (LScopeBegin->getParent() != MBB)<br>
+    return false;<br>
+  MachineBasicBlock::const_reverse_iterator Pred(DbgValue);<br>
+  for (++Pred; Pred != MBB->rend(); ++Pred) {<br>
+    if (Pred->getFlag(MachineInstr::FrameSetup))<br>
+      break;<br>
+    auto PredDL = Pred->getDebugLoc();<br>
+    if (!PredDL || Pred->isDebugValue())<br>
+      continue;<br>
+    // Check whether the instruction preceding the DBG_VALUE is in the same<br>
+    // (sub)scope as the DBG_VALUE.<br>
+    if (DL->getScope() == PredDL->getScope() ||<br>
+        LScope->dominates(LScopes.findLexicalScope(PredDL)))<br></blockquote><div><br>Just a heads up, Google internal test infrastructure is seeing failures here ^ (well, inside 'dominates' actually) when findLexicalScope returns null on this line.<br><br>The repro clang cc1 command is: 





<p class="inbox-inbox-p1"><span class="inbox-inbox-s1">clang-tot -cc1 -triple aarch64-linux-gnu -emit-obj<span class="inbox-inbox-Apple-converted-space">  </span>-relaxed-aliasing<span class="inbox-inbox-Apple-converted-space">  </span>-debug-info-kind=limited<span class="inbox-inbox-Apple-converted-space">    </span>-O2 -w -std=gnu++11 -o /tmp/x.o -x c++ crash.ii<br><br>Though I don't have a public reduced test case yet - creduce uis working on it (~75% reduced overnight... but chugging along pretty slow now). I'll provide it when I've got something.<br><br>I mention it now in case you're seeing similar things or want to pre-emptively revert to avoid the possibility.</span></p> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
       return false;<br>
-  return true;<br>
+  }<br>
+<br>
+  // If the range of the DBG_VALUE is open-ended, report success.<br>
+  if (!RangeEnd)<br>
+    return true;<br>
+<br>
+  // Fail if there are instructions belonging to our scope in another block.<br>
+  const MachineInstr *LScopeEnd = LSRange.back().second;<br>
+  if (LScopeEnd->getParent() != MBB)<br>
+    return false;<br>
+<br>
+  // Single, constant DBG_VALUEs in the prologue are promoted to be live<br>
+  // throughout the function. This is a hack, presumably for DWARF v2 and not<br>
+  // necessarily correct. It would be much better to use a dbg.declare instead<br>
+  // if we know the constant is live throughout the scope.<br>
+  if (DbgValue->getOperand(0).isImm() && MBB->pred_empty())<br>
+    return true;<br>
+<br>
+  return false;<br>
 }<br>
<br>
 // Find variables for each lexical scope.<br>
@@ -1016,11 +1060,9 @@ void DwarfDebug::collectVariableInfo(Dwa<br>
     const MachineInstr *MInsn = Ranges.front().first;<br>
     assert(MInsn->isDebugValue() && "History must begin with debug value");<br>
<br>
-    // Check if there is a single DBG_VALUE, valid throughout the function.<br>
-    // A single constant is also considered valid for the entire function.<br>
+    // Check if there is a single DBG_VALUE, valid throughout the var's scope.<br>
     if (Ranges.size() == 1 &&<br>
-        (MInsn->getOperand(0).isImm() ||<br>
-         (validAtEntry(MInsn) && Ranges.front().second == nullptr))) {<br>
+        validThroughout(LScopes, MInsn, Ranges.front().second)) {<br>
       RegVar->initializeDbgValue(MInsn);<br>
       continue;<br>
     }<br>
<br>
Added: llvm/trunk/test/DebugInfo/Generic/partial-constant.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/partial-constant.ll?rev=305599&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/partial-constant.ll?rev=305599&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/Generic/partial-constant.ll (added)<br>
+++ llvm/trunk/test/DebugInfo/Generic/partial-constant.ll Fri Jun 16 17:40:04 2017<br>
@@ -0,0 +1,82 @@<br>
+; RUN: %llc_dwarf -filetype=obj < %s | llvm-dwarfdump - | FileCheck %s<br>
+; Generated at -O2 from:<br>
+; bool c();<br>
+; void f();<br>
+; bool start() {<br>
+;   bool result = c();<br>
+;   if (!c()) {<br>
+;     result = false;<br>
+;     goto exit;<br>
+;   }<br>
+;   f();<br>
+;   result = true;<br>
+; exit:<br>
+;   return result;<br>
+; }<br>
+;<br>
+; The constant should NOT be available for the entire function.<br>
+; CHECK-NOT: DW_AT_const_value<br>
+; CHECK: .debug_loc<br>
+; CHECK: Location description: 10 01 9f<br>
+;                              constu 0x00000001, stack-value<br>
+source_filename = "test.ii"<br>
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"<br>
+target triple = "x86_64-apple-macosx10.12.0"<br>
+<br>
+; Function Attrs: noimplicitfloat noredzone nounwind optsize<br>
+define zeroext i1 @_Z5startv() local_unnamed_addr #0 !dbg !7 {<br>
+entry:<br>
+  %call = tail call zeroext i1 @_Z1cv() #3, !dbg !13<br>
+  %call1 = tail call zeroext i1 @_Z1cv() #3, !dbg !14<br>
+  br i1 %call1, label %if.end, label %exit, !dbg !16<br>
+<br>
+if.end:                                           ; preds = %entry<br>
+  tail call void @_Z1fv() #3, !dbg !17<br>
+  tail call void @llvm.dbg.value(metadata i8 1, i64 0, metadata !12, metadata !18), !dbg !19<br>
+  br label %exit, !dbg !20<br>
+<br>
+exit:                                             ; preds = %entry, %if.end<br>
+  %result.0 = phi i1 [ true, %if.end ], [ false, %entry ]<br>
+  ret i1 %result.0, !dbg !21<br>
+}<br>
+<br>
+; Function Attrs: noimplicitfloat noredzone optsize<br>
+declare zeroext i1 @_Z1cv() local_unnamed_addr #1<br>
+<br>
+; Function Attrs: noimplicitfloat noredzone optsize<br>
+declare void @_Z1fv() local_unnamed_addr #1<br>
+<br>
+; Function Attrs: nounwind readnone speculatable<br>
+declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2<br>
+<br>
+attributes #0 = { noimplicitfloat noredzone nounwind optsize }<br>
+attributes #1 = { noimplicitfloat noredzone optsize }<br>
+attributes #2 = { nounwind readnone speculatable }<br>
+attributes #3 = { nobuiltin noimplicitfloat noredzone nounwind optsize }<br>
+<br>
+!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
+!llvm.module.flags = !{!3, !4, !5}<br>
+!llvm.ident = !{!6}<br>
+<br>
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 5.0.0 (trunk 303873) (llvm/trunk 303897)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
+!1 = !DIFile(filename: "test.ii", directory: "/")<br>
+!2 = !{}<br>
+!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
+!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
+!5 = !{i32 1, !"wchar_size", i32 4}<br>
+!6 = !{!"clang version 5.0.0 (trunk 303873) (llvm/trunk 303897)"}<br>
+!7 = distinct !DISubprogram(name: "start", linkageName: "_Z5startv", scope: !1, file: !1, line: 3, type: !8, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !11)<br>
+!8 = !DISubroutineType(types: !9)<br>
+!9 = !{!10}<br>
+!10 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)<br>
+!11 = !{!12}<br>
+!12 = !DILocalVariable(name: "result", scope: !7, file: !1, line: 4, type: !10)<br>
+!13 = !DILocation(line: 4, column: 17, scope: !7)<br>
+!14 = !DILocation(line: 5, column: 8, scope: !15)<br>
+!15 = distinct !DILexicalBlock(scope: !7, file: !1, line: 5, column: 7)<br>
+!16 = !DILocation(line: 5, column: 7, scope: !7)<br>
+!17 = !DILocation(line: 9, column: 3, scope: !7)<br>
+!18 = !DIExpression()<br>
+!19 = !DILocation(line: 4, column: 8, scope: !7)<br>
+!20 = !DILocation(line: 10, column: 3, scope: !7)<br>
+!21 = !DILocation(line: 12, column: 3, scope: !7)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/Generic/sugared-constants.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/sugared-constants.ll?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/sugared-constants.ll?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/Generic/sugared-constants.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/Generic/sugared-constants.ll Fri Jun 16 17:40:04 2017<br>
@@ -3,47 +3,23 @@<br>
 ; RUN: %llc_dwarf -O0 -filetype=obj %s -o - | llvm-dwarfdump -debug-dump=info - | FileCheck %s<br>
 ; Use correct signedness when emitting constants of derived (sugared) types.<br>
<br>
-; Test compiled to IR from clang with -O1 and the following source:<br>
-<br>
-; void func(int);<br>
-; void func(unsigned);<br>
-; void func(char16_t);<br>
-; int main() {<br>
-;   const int i = 42;<br>
-;   func(i);<br>
-;   const unsigned j = 117;<br>
-;   func(j);<br>
-;   char16_t c = 7;<br>
-;   func(c);<br>
-; }<br>
-<br>
 ; CHECK: DW_AT_const_value [DW_FORM_sdata] (42)<br>
 ; CHECK: DW_AT_const_value [DW_FORM_udata] (117)<br>
 ; CHECK: DW_AT_const_value [DW_FORM_udata] (7)<br>
<br>
 ; Function Attrs: uwtable<br>
-define i32 @main() #0 !dbg !4 {<br>
+define void @main() #0 !dbg !4 {<br>
 entry:<br>
   tail call void @llvm.dbg.value(metadata i32 42, i64 0, metadata !10, metadata !DIExpression()), !dbg !21<br>
-  tail call void @_Z4funci(i32 42), !dbg !22<br>
   tail call void @llvm.dbg.value(metadata i32 117, i64 0, metadata !12, metadata !DIExpression()), !dbg !24<br>
-  tail call void @_Z4funcj(i32 117), !dbg !25<br>
   tail call void @llvm.dbg.value(metadata i16 7, i64 0, metadata !15, metadata !DIExpression()), !dbg !27<br>
-  tail call void @_Z4funcDs(i16 zeroext 7), !dbg !28<br>
-  ret i32 0, !dbg !29<br>
+  ret void, !dbg !29<br>
 }<br>
<br>
-declare void @_Z4funci(i32) #1<br>
-<br>
-declare void @_Z4funcj(i32) #1<br>
-<br>
-declare void @_Z4funcDs(i16 zeroext) #1<br>
-<br>
 ; Function Attrs: nounwind readnone<br>
 declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2<br>
<br>
-attributes #0 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
-attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
+attributes #0 = { uwtable }<br>
 attributes #2 = { nounwind readnone }<br>
<br>
 !<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
<br>
Modified: llvm/trunk/test/DebugInfo/MIR/X86/bit-piece-dh.mir<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/MIR/X86/bit-piece-dh.mir?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/MIR/X86/bit-piece-dh.mir?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/MIR/X86/bit-piece-dh.mir (original)<br>
+++ llvm/trunk/test/DebugInfo/MIR/X86/bit-piece-dh.mir Fri Jun 16 17:40:04 2017<br>
@@ -1,13 +1,9 @@<br>
-# RUN: llc -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s<br>
+# RUN: llc -filetype=obj -o - %s | llvm-dwarfdump --debug-dump=info - | FileCheck %s<br>
 # CHECK: .debug_info contents:<br>
 # CHECK: DW_TAG_variable<br>
-# CHECK-NEXT: DW_AT_location [DW_FORM_sec_offset]      ([[OFS:.*]])<br>
-# CHECK-NEXT: DW_AT_name {{.*}}"dh"<br>
-# CHECK: .debug_loc contents:<br>
-# CHECK: [[OFS]]: Beginning address offset: 0x0000000000000002<br>
-# CHECK:             Ending address offset: 0x000000000000000c<br>
-# CHECK:              Location description: 51 9d 08 08<br>
 #                                           rdx, bit-piece 8 8<br>
+# CHECK-NEXT: DW_AT_location {{.*}}         51 9d 08 08<br>
+# CHECK-NEXT: DW_AT_name {{.*}}"dh"<br>
 --- |<br>
   ; Manually created after:<br>
   ; char f(int i) {<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/dbg-merge-loc-entry.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-merge-loc-entry.ll?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-merge-loc-entry.ll?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/dbg-merge-loc-entry.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/dbg-merge-loc-entry.ll Fri Jun 16 17:40:04 2017<br>
@@ -6,6 +6,7 @@<br>
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"<br>
 target triple = "x86_64-apple-darwin8"<br>
<br>
+; Test that consecutive, identical DBG_VALUEs are merged.<br>
 ;CHECK: DW_AT_location{{.*}}(<0x1> 55 )<br>
<br>
 %0 = type { i64, i1 }<br>
@@ -19,6 +20,7 @@ entry:<br>
   br i1 undef, label %bb2, label %bb4, !dbg !22<br>
<br>
 bb2:                                              ; preds = %entry<br>
+  tail call void @llvm.dbg.value(metadata i128 %u, i64 0, metadata !14, metadata !DIExpression()), !dbg !15<br>
   br label %bb4, !dbg !23<br>
<br>
 bb4:                                              ; preds = %bb2, %entry<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/inlined-formal-parameter.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/inlined-formal-parameter.ll?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/inlined-formal-parameter.ll?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/inlined-formal-parameter.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/inlined-formal-parameter.ll Fri Jun 16 17:40:04 2017<br>
@@ -1,5 +1,5 @@<br>
 ; RUN: llc -filetype=obj -o %t.o %s<br>
-; RUN: llvm-dwarfdump -debug-dump=info %t.o | FileCheck %s<br>
+; RUN: llvm-dwarfdump %t.o | FileCheck %s<br>
<br>
 ; Testcase generated using 'clang -g -O2 -S -emit-llvm' from the following:<br>
 ;; void sink(void);<br>
@@ -10,6 +10,7 @@<br>
 ;; }<br>
<br>
 ; Check that we have formal parameters for 'a' in both inlined subroutines.<br>
+; CHECK: .debug_info<br>
 ; CHECK:       DW_TAG_inlined_subroutine<br>
 ; CHECK-NEXT:    DW_AT_abstract_origin {{.*}} "bar"<br>
 ; CHECK:         DW_TAG_formal_parameter<br>
@@ -18,9 +19,11 @@<br>
 ; CHECK:       DW_TAG_inlined_subroutine<br>
 ; CHECK-NEXT:    DW_AT_abstract_origin {{.*}} "bar"<br>
 ; CHECK:         DW_TAG_formal_parameter<br>
-; CHECK-NEXT:      DW_AT_const_value<br>
+; CHECK-NEXT:      DW_AT_location [DW_FORM_data4]      (0x00000000)<br>
 ; CHECK-NEXT:      DW_AT_abstract_origin {{.*}} "a"<br>
-<br>
+;<br>
+; CHECK: .debug_loc<br>
+; CHECK: Location description: 11 00<br>
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"<br>
 target triple = "x86_64-apple-darwin"<br>
<br>
@@ -34,13 +37,12 @@ entry:<br>
   ret void, !dbg !24<br>
 }<br>
<br>
-declare void @sink() #1<br>
+declare void @sink()<br>
<br>
 ; Function Attrs: nounwind readnone<br>
 declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2<br>
<br>
-attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
-attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
+attributes #0 = { nounwind ssp uwtable  }<br>
 attributes #2 = { nounwind readnone }<br>
 attributes #3 = { nounwind }<br>
<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/parameters.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/parameters.ll?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/parameters.ll?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/parameters.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/parameters.ll Fri Jun 16 17:40:04 2017<br>
@@ -24,8 +24,9 @@<br>
<br>
 ; CHECK: debug_info contents<br>
 ; 0x74 is DW_OP_breg4, showing that the parameter is accessed indirectly<br>
-; (with a zero offset) from the register parameter<br>
-; CHECK: DW_AT_location [DW_FORM_data4]        ([[F_LOC:0x[0-9]*]])<br>
+; (with a zero offset) from the register parameter.<br>
+; CHECK: DW_AT_location {{.*}} 74 00 06<br>
+<br>
 ; CHECK-NOT: DW_TAG<br>
 ; CHECK: DW_AT_name{{.*}} = "f"<br>
 ;<br>
@@ -34,9 +35,6 @@<br>
 ; CHECK: DW_AT_name{{.*}} = "g"<br>
 ;<br>
 ; CHECK: debug_loc contents<br>
-; CHECK:         [[F_LOC]]: Beginning<br>
-; CHECK-NEXT:               Ending<br>
-; CHECK-NEXT: Location description: 74 00<br>
 ; CHECK:         [[G_LOC]]: Beginning<br>
 ; CHECK-NEXT:               Ending<br>
 ; CHECK-NEXT: Location description: 74 00<br>
@@ -77,11 +75,10 @@ if.end:<br>
   ret void, !dbg !32<br>
 }<br>
<br>
-declare void @_ZN7pr147634sinkEPv(i8*) #2<br>
+declare void @_ZN7pr147634sinkEPv(i8*)<br>
<br>
-attributes #0 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
+attributes #0 = { uwtable }<br>
 attributes #1 = { nounwind readnone }<br>
-attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }<br>
<br>
 !<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
 !llvm.module.flags = !{!21, !33}<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/pieces-3.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/pieces-3.ll?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/pieces-3.ll?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/pieces-3.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/pieces-3.ll Fri Jun 16 17:40:04 2017<br>
@@ -19,7 +19,9 @@<br>
 ; CHECK-NEXT:   DW_AT_location [DW_FORM_data4]        ([[LOC1:.*]])<br>
 ; CHECK-NEXT:   DW_AT_name {{.*}}"outer"<br>
 ; CHECK: DW_TAG_variable<br>
-; CHECK-NEXT:   DW_AT_location [DW_FORM_data4]        ([[LOC2:.*]])<br>
+; CHECK-NEXT:   DW_AT_location<br>
+;                                     rsi, piece 0x00000004<br>
+; CHECK-SAME:                         54 93 04<br>
 ; CHECK-NEXT:   "i1"<br>
 ;<br>
 ; CHECK: .debug_loc<br>
@@ -32,10 +34,6 @@<br>
 ; CHECK:           Beginning address offset: 0x0000000000000004<br>
 ; CHECK-NEXT:         Ending address offset: 0x0000000000000008<br>
 ; CHECK-NEXT: Location description: 55 93 08 93 04 54 93 04<br>
-; CHECK: [[LOC2]]: Beginning address offset: 0x0000000000000004<br>
-; CHECK-NEXT:         Ending address offset: 0x0000000000000008<br>
-;                                     rsi, piece 0x00000004<br>
-; CHECK-NEXT:   Location description: 54 93 04<br>
<br>
 ;<br>
 ; ModuleID = '/Volumes/Data/llvm/test/DebugInfo/X86/sroasplit-2.ll'<br>
@@ -48,6 +46,7 @@ define i32 @foo(i64 %outer.coerce0, i64<br>
   call void @llvm.dbg.declare(metadata !{null}, metadata !27, metadata !28), !dbg !26<br>
   call void @llvm.dbg.value(metadata i64 %outer.coerce1, i64 0, metadata !29, metadata !30), !dbg !26<br>
   call void @llvm.dbg.declare(metadata !{null}, metadata !31, metadata !32), !dbg !26<br>
+  ; The 'trunc' generates no extra code, thus i1 is visible throughout its scope.<br>
   %outer.sroa.1.8.extract.trunc = trunc i64 %outer.coerce1 to i32, !dbg !33<br>
   call void @llvm.dbg.value(metadata i32 %outer.sroa.1.8.extract.trunc, i64 0, metadata !34, metadata !35), !dbg !33<br>
   %outer.sroa.1.12.extract.shift = lshr i64 %outer.coerce1, 32, !dbg !33<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/reference-argument.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/reference-argument.ll?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/reference-argument.ll?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/reference-argument.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/reference-argument.ll Fri Jun 16 17:40:04 2017<br>
@@ -1,4 +1,5 @@<br>
-; RUN: llc -mtriple=x86_64-apple-macosx10.9.0 -filetype=obj -O0 < %s | llvm-dwarfdump -debug-dump=all - | FileCheck %s<br>
+; RUN: llc -mtriple=x86_64-apple-macosx10.9.0 -filetype=obj -O0 < %s \<br>
+; RUN:   | llvm-dwarfdump -debug-dump=info - | FileCheck %s<br>
 ; ModuleID = 'aggregate-indirect-arg.cpp'<br>
 ; extracted from debuginfo-tests/aggregate-indirect-arg.cpp<br>
<br>
@@ -11,11 +12,10 @@<br>
 ; CHECK:       DW_AT_name {{.*}} "this"<br>
 ; CHECK-NOT:   DW_TAG_subprogram<br>
 ; CHECK:     DW_TAG_formal_parameter<br>
-; CHECK-NEXT:  DW_AT_location [DW_FORM_data4]  (0x00000000)<br>
-; CHECK-NEXT:  DW_AT_name {{.*}} "v"<br>
-; CHECK: .debug_loc contents:<br>
+; CHECK-NEXT:  DW_AT_location<br>
 ;                                rsi+0<br>
-; CHECK:   Location description: 74 00<br>
+; CHECK-SAME:                    74 00<br>
+; CHECK-NEXT:  DW_AT_name {{.*}} "v"<br>
<br>
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"<br>
 target triple = "x86_64-apple-macosx10.9.0"<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/this-stack_value.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/this-stack_value.ll?rev=305599&r1=305598&r2=305599&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/this-stack_value.ll?rev=305599&r1=305598&r2=305599&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/this-stack_value.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/this-stack_value.ll Fri Jun 16 17:40:04 2017<br>
@@ -1,5 +1,5 @@<br>
 ; RUN: llc -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM<br>
-; RUN: llc -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s<br>
+; RUN: llc -filetype=obj -o - %s | llvm-dwarfdump --debug-dump=info - | FileCheck %s<br>
 ;<br>
 ; Generated at -O2 from:<br>
 ;   struct B;<br>
@@ -18,7 +18,7 @@<br>
 ; modified by the debugger.<br>
 ;<br>
 ; ASM: [DW_OP_stack_value]<br>
-; CHECK:  Location description: 70 00 9f<br>
+; CHECK:  DW_AT_location {{.*}} 70 00 9f<br>
 ;                               rax+0, stack-value<br>
 source_filename = "ab.cpp"<br>
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>