[PATCH] D52112: Fix debug info for SelectionDAG legalization of DAG nodes with two results.

Adrian Prantl via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 14 11:47:11 PDT 2018


aprantl created this revision.
aprantl added a reviewer: vsk.
aprantl added a project: debug-info.
Herald added a subscriber: JDevlieghere.

This patch fixes the debug info handling for SelectionDAG legalization of DAG nodes with two results. When an replaced SDNode has more than one result, transferDbgValues was always copying the SDDbgValue from the first result and attaching them to all members. In reality SelectionDAG::ReplaceAllUsesWith() is given an array of SDNodes (though the type signature doesn't make this obvious (cf. the call site code in ReplaceNode()).


https://reviews.llvm.org/D52112

Files:
  lib/CodeGen/SelectionDAG/SelectionDAG.cpp
  test/DebugInfo/X86/sdag-legalize-multires.ll


Index: test/DebugInfo/X86/sdag-legalize-multires.ll
===================================================================
--- /dev/null
+++ test/DebugInfo/X86/sdag-legalize-multires.ll
@@ -0,0 +1,48 @@
+; RUN: llc -O0 %s -stop-after=livedebugvars -o - | FileCheck %s
+; This is a hand-crafted example modified after some Swift compiler output.
+; Test that SelectionDAG legalization of DAG nodes with two results
+; transfers debug info correctly.
+
+source_filename = "/tmp/sincos.ll"
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.13.0"
+
+declare float @llvm.cos.f32(float)
+declare float @llvm.sin.f32(float)
+declare void @llvm.dbg.value(metadata, metadata, metadata)
+declare swiftcc void @g(float, float)
+
+; CHECK: ![[RCOS:.*]] = !DILocalVariable(name: "rcos"
+; CHECK: ![[RSIN:.*]] = !DILocalVariable(name: "rsin"
+
+define hidden swiftcc void @f() #0 !dbg !8 {
+entry:
+  ; CHECK: CALL64pcrel32 &__sincosf_stret
+  %0 = call float @llvm.cos.f32(float 1.500000e+00), !dbg !13
+  ; CHECK: $xmm1 = MOVAPSrr $xmm0
+  call void @llvm.dbg.value(metadata float %0, metadata !15, metadata !DIExpression()), !dbg !13
+  ; CHECK: DBG_VALUE debug-use {{.*}}$xmm1, {{.*}}, ![[RSIN]], !DIExpression(),
+  %1 = call float @llvm.sin.f32(float 1.500000e+00), !dbg !13
+  call void @llvm.dbg.value(metadata float %1, metadata !11, metadata !DIExpression()), !dbg !13
+  ; CHECK: DBG_VALUE debug-use {{.*}}$xmm0, {{.*}}, ![[RCOS]], !DIExpression(),
+  call void @g(float %0, float %1), !dbg !13
+  ret void, !dbg !13
+}
+
+attributes #0 = { noinline nounwind optnone ssp uwtable "target-features"="+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" }
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3, !4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 8.0.0 (trunk 340541) (llvm/trunk 340540)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
+!1 = !DIFile(filename: "sincos.ll", directory: "/")
+!2 = !{}
+!3 = !{i32 2, !"Dwarf Version", i32 4}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !0, retainedNodes: !2)
+!9 = !DISubroutineType(types: !10)
+!10 = !{null}
+!11 = !DILocalVariable(name: "rsin", scope: !8, file: !1, line: 3, type: !12)
+!12 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
+!13 = !DILocation(line: 3, scope: !8)
+!15 = !DILocalVariable(name: "rcos", scope: !8, file: !1, line: 4, type: !12)
Index: lib/CodeGen/SelectionDAG/SelectionDAG.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -7797,7 +7797,7 @@
 
   // Preserve Debug Info.
   for (unsigned i = 0, e = From->getNumValues(); i != e; ++i)
-    transferDbgValues(SDValue(From, i), *To);
+    transferDbgValues(SDValue(From, i), To[i]);
 
   // Iterate over just the existing users of From. See the comments in
   // the ReplaceAllUsesWith above.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52112.165556.patch
Type: text/x-patch
Size: 3141 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180914/24e787ce/attachment.bin>


More information about the llvm-commits mailing list