[llvm] a363cca - [KeyInstr][debugify] Add --debugify-atoms to add key instructions metadata (#133483)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 6 08:15:30 PDT 2025
Author: Orlando Cazalet-Hyams
Date: 2025-05-06T16:15:26+01:00
New Revision: a363ccaf18da166a51206070f074360ca35462ca
URL: https://github.com/llvm/llvm-project/commit/a363ccaf18da166a51206070f074360ca35462ca
DIFF: https://github.com/llvm/llvm-project/commit/a363ccaf18da166a51206070f074360ca35462ca.diff
LOG: [KeyInstr][debugify] Add --debugify-atoms to add key instructions metadata (#133483)
RFC:
https://discourse.llvm.org/t/rfc-improving-is-stmt-placement-for-better-interactive-debugging/82668
Added:
llvm/test/DebugInfo/KeyInstructions/debugify.ll
Modified:
llvm/lib/Transforms/Utils/Debugify.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Utils/Debugify.cpp b/llvm/lib/Transforms/Utils/Debugify.cpp
index d67a563f531f6..3e323ccffcd99 100644
--- a/llvm/lib/Transforms/Utils/Debugify.cpp
+++ b/llvm/lib/Transforms/Utils/Debugify.cpp
@@ -35,6 +35,8 @@ using namespace llvm;
namespace {
+cl::opt<bool> ApplyAtomGroups("debugify-atoms", cl::init(false));
+
cl::opt<bool> Quiet("debugify-quiet",
cl::desc("Suppress verbose debugify output"));
@@ -142,8 +144,13 @@ bool llvm::applyDebugifyMetadata(
for (BasicBlock &BB : F) {
// Attach debug locations.
- for (Instruction &I : BB)
- I.setDebugLoc(DILocation::get(Ctx, NextLine++, 1, SP));
+ for (Instruction &I : BB) {
+ uint64_t AtomGroup = ApplyAtomGroups ? NextLine : 0;
+ uint8_t AtomRank = ApplyAtomGroups ? 1 : 0;
+ uint64_t Line = NextLine++;
+ I.setDebugLoc(DILocation::get(Ctx, Line, 1, SP, nullptr, false,
+ AtomGroup, AtomRank));
+ }
if (DebugifyLevel < Level::LocationsAndVariables)
continue;
diff --git a/llvm/test/DebugInfo/KeyInstructions/debugify.ll b/llvm/test/DebugInfo/KeyInstructions/debugify.ll
new file mode 100644
index 0000000000000..881375873f324
--- /dev/null
+++ b/llvm/test/DebugInfo/KeyInstructions/debugify.ll
@@ -0,0 +1,46 @@
+; RUN: opt -passes=debugify --debugify-atoms -S -o - < %s \
+; RUN: | FileCheck %s
+
+;; Mirrors llvm/test/DebugInfo/debugify.ll. Split out here because the
+;; test is only supported if LLVM_EXPERIMENTAL_KEY_INSTRUCTIONS is enabled
+;; (which is a condition for running this test directory). Once the conditional
+;; compilation of the feature is removed this can be merged into the original.
+
+; CHECK-LABEL: define void @foo
+define void @foo() {
+; CHECK: ret void, !dbg ![[RET1:.*]]
+ ret void
+}
+
+; CHECK-LABEL: define i32 @bar
+define i32 @bar() {
+; CHECK: call void @foo(), !dbg ![[CALL1:.*]]
+ call void @foo()
+
+; CHECK: add i32 0, 1, !dbg ![[ADD1:.*]]
+ %sum = add i32 0, 1
+
+; CHECK: ret i32 0, !dbg ![[RET2:.*]]
+ ret i32 0
+}
+
+; CHECK-LABEL: define weak_odr zeroext i1 @baz
+define weak_odr zeroext i1 @baz() {
+; CHECK-NOT: !dbg
+ ret i1 false
+}
+
+; CHECK-LABEL: define i32 @boom
+define i32 @boom() {
+; CHECK: [[result:%.*]] = musttail call i32 @bar(), !dbg ![[musttail:.*]]
+ %retval = musttail call i32 @bar()
+; CHECK-NEXT: ret i32 [[result]], !dbg ![[musttailRes:.*]]
+ ret i32 %retval
+}
+
+; CHECK-DAG: ![[RET1]] = !DILocation(line: 1, {{.*}}, atomGroup: 1, atomRank: 1
+; CHECK-DAG: ![[CALL1]] = !DILocation(line: 2, {{.*}}, atomGroup: 2, atomRank: 1
+; CHECK-DAG: ![[ADD1]] = !DILocation(line: 3, {{.*}}, atomGroup: 3, atomRank: 1
+; CHECK-DAG: ![[RET2]] = !DILocation(line: 4, {{.*}}, atomGroup: 4, atomRank: 1
+; CHECK-DAG: ![[musttail]] = !DILocation(line: 5, {{.*}}, atomGroup: 5, atomRank: 1
+; CHECK-DAG: ![[musttailRes]] = !DILocation(line: 6, {{.*}}, atomGroup: 6, atomRank: 1
More information about the llvm-commits
mailing list