[llvm] 86405ed - [DebugInfo][Reassociate] Preserve DebugLocs when reassociating subs (#114226)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 8 10:35:06 PST 2024
Author: Stephen Tozer
Date: 2024-11-08T18:35:03Z
New Revision: 86405ed1012c97b063cbde12350fdea141e1ab78
URL: https://github.com/llvm/llvm-project/commit/86405ed1012c97b063cbde12350fdea141e1ab78
DIFF: https://github.com/llvm/llvm-project/commit/86405ed1012c97b063cbde12350fdea141e1ab78.diff
LOG: [DebugInfo][Reassociate] Preserve DebugLocs when reassociating subs (#114226)
In NegateValue in Reassociate, we return the negation of an existing
value in order to break a subtract into an negate + add, potentially
creating a new instruction to perform the negation, but we neglect to
propagate the DebugLoc of the sub being replaced to the negate
instruction if one is created. This patch adds that propagation.
Found using https://github.com/llvm/llvm-project/pull/107279.
Added:
llvm/test/Transforms/Reassociate/preserve-debugloc.ll
Modified:
llvm/lib/Transforms/Scalar/Reassociate.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/Reassociate.cpp b/llvm/lib/Transforms/Scalar/Reassociate.cpp
index e742d2ed12af1a..bc50f23d8eb27b 100644
--- a/llvm/lib/Transforms/Scalar/Reassociate.cpp
+++ b/llvm/lib/Transforms/Scalar/Reassociate.cpp
@@ -874,6 +874,8 @@ static Value *NegateValue(Value *V, Instruction *BI,
// negation.
Instruction *NewNeg =
CreateNeg(V, V->getName() + ".neg", BI->getIterator(), BI);
+ // NewNeg is generated to potentially replace BI, so use its DebugLoc.
+ NewNeg->setDebugLoc(BI->getDebugLoc());
ToRedo.insert(NewNeg);
return NewNeg;
}
diff --git a/llvm/test/Transforms/Reassociate/preserve-debugloc.ll b/llvm/test/Transforms/Reassociate/preserve-debugloc.ll
new file mode 100644
index 00000000000000..ff1f8ac73410a4
--- /dev/null
+++ b/llvm/test/Transforms/Reassociate/preserve-debugloc.ll
@@ -0,0 +1,38 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+;; Tests that we preserve DebugLocs through reassociation of sub instructions.
+; RUN: opt < %s -passes=reassociate -S | FileCheck %s
+
+define void @foo(i64 %0) {
+; CHECK-LABEL: define void @foo(
+; CHECK-SAME: i64 [[TMP0:%.*]]) {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[DOTNEG:%.*]] = sub i64 0, [[TMP0]], !dbg [[DBG3:![0-9]+]]
+; CHECK-NEXT: [[ADD_I_I:%.*]] = add i64 [[DOTNEG]], 1
+; CHECK-NEXT: store i64 [[ADD_I_I]], ptr null, align 8
+; CHECK-NEXT: ret void
+;
+entry:
+ %sub5.i.i = sub i64 1, %0, !dbg !4
+ %add.i.i = add i64 %sub5.i.i, 0
+ store i64 %add.i.i, ptr null, align 8
+ ret void
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 20.0.0git", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
+!1 = !DIFile(filename: "test.cpp", directory: "/tmp")
+!2 = !{}
+!3 = !{i32 2, !"Debug Info Version", i32 3}
+!4 = !DILocation(line: 212, column: 25, scope: !5)
+!5 = distinct !DISubprogram(name: "foo", scope: !0, file: !1, line: 161, type: !6, scopeLine: 162, unit: !0, retainedNodes: !2)
+!6 = distinct !DISubroutineType(types: !2)
+;.
+; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
+; CHECK: [[META1]] = !DIFile(filename: "test.cpp", directory: {{.*}})
+; CHECK: [[DBG3]] = !DILocation(line: 212, column: 25, scope: [[META4:![0-9]+]])
+; CHECK: [[META4]] = distinct !DISubprogram(name: "foo", scope: [[META0]], file: [[META1]], line: 161, type: [[META5:![0-9]+]], scopeLine: 162, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META6:![0-9]+]])
+; CHECK: [[META5]] = distinct !DISubroutineType(types: [[META6]])
+; CHECK: [[META6]] = !{}
+;.
More information about the llvm-commits
mailing list