[llvm] 1c6fd98 - [SelectionDAG] Do not salvage with vector node

Phoebe Wang via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 8 23:55:23 PDT 2023


Author: Phoebe Wang
Date: 2023-06-09T14:55:16+08:00
New Revision: 1c6fd98ffbb951e9acc1b534a41fe7dc01004ee8

URL: https://github.com/llvm/llvm-project/commit/1c6fd98ffbb951e9acc1b534a41fe7dc01004ee8
DIFF: https://github.com/llvm/llvm-project/commit/1c6fd98ffbb951e9acc1b534a41fe7dc01004ee8.diff

LOG: [SelectionDAG] Do not salvage with vector node

rG2eb7cbf987f21 added this code, which results in crash for vector
nodes. This patch solves it by skipping for the vector nodes.

Thanks Steve for helping reducing the test case.

Co-authored-by: Steve Merritt <steve.merritt at intel.com>

Reviewed By: goldstein.w.n

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

Added: 
    llvm/test/DebugInfo/X86/dbg-value-no-crash.ll

Modified: 
    llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 7a162e2b30c05..d83aaf31950d5 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -10473,8 +10473,7 @@ void SelectionDAG::salvageDebugInfo(SDNode &N) {
     case ISD::ADD:
       SDValue N0 = N.getOperand(0);
       SDValue N1 = N.getOperand(1);
-      if (!isConstantIntBuildVectorOrConstantInt(N0) &&
-          isConstantIntBuildVectorOrConstantInt(N1)) {
+      if (!isa<ConstantSDNode>(N0) && isa<ConstantSDNode>(N1)) {
         uint64_t Offset = N.getConstantOperandVal(1);
 
         // Rewrite an ADD constant node into a DIExpression. Since we are

diff  --git a/llvm/test/DebugInfo/X86/dbg-value-no-crash.ll b/llvm/test/DebugInfo/X86/dbg-value-no-crash.ll
new file mode 100644
index 0000000000000..8ff055f13ad15
--- /dev/null
+++ b/llvm/test/DebugInfo/X86/dbg-value-no-crash.ll
@@ -0,0 +1,39 @@
+; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=avx512bw,avx512vl -o - %s
+
+;; Check this won't result in crash.
+define <8 x i32> @foo(ptr %0, <8 x i32> %1, i8 %2, i8 %3) {
+  %5 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %1, <8 x i32> zeroinitializer)
+  %6 = add nsw <8 x i32> %1, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
+  call void @llvm.dbg.value(metadata <8 x i32> %6, metadata !4, metadata !DIExpression()), !dbg !15
+  %7 = bitcast i8 %2 to <8 x i1>
+  %8 = select <8 x i1> %7, <8 x i32> %6, <8 x i32> %5
+  %9 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %8, <8 x i32> zeroinitializer)
+  %10 = bitcast i8 %3 to <8 x i1>
+  %11 = select <8 x i1> %10, <8 x i32> %9, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
+  ret <8 x i32> %11
+}
+
+declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>)
+declare void @llvm.dbg.value(metadata, metadata, metadata)
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 16.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2)
+!1 = !DIFile(filename: "a.cpp", directory: "/")
+!2 = !{}
+!3 = !{i32 2, !"Debug Info Version", i32 3}
+!4 = !DILocalVariable(name: "a", arg: 2, scope: !5, file: !1, line: 12, type: !11)
+!5 = distinct !DISubprogram(name: "foo", scope: !6, file: !1, line: 12, type: !7, scopeLine: 12, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !9, retainedNodes: !10)
+!6 = !DINamespace(name: "ns1", scope: null)
+!7 = !DISubroutineType(types: !8)
+!8 = !{null}
+!9 = !DISubprogram(name: "foo", scope: !6, file: !1, line: 132, type: !7, scopeLine: 12, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized)
+!10 = !{!4}
+!11 = !DICompositeType(tag: DW_TAG_array_type, baseType: !12, size: 256, flags: DIFlagVector, elements: !13)
+!12 = !DIBasicType(name: "long long", size: 64, encoding: DW_ATE_signed)
+!13 = !{!14}
+!14 = !DISubrange(count: 4)
+!15 = !DILocation(line: 0, scope: !5, inlinedAt: !16)
+!16 = !DILocation(line: 18, scope: !17)
+!17 = distinct !DISubprogram(name: "foo", scope: null, file: !1, type: !7, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)


        


More information about the llvm-commits mailing list