[llvm-branch-commits] [llvm] [KeyInstr] Add MIR parser support (PR #133494)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Mar 28 11:01:09 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-debuginfo
Author: Orlando Cazalet-Hyams (OCHyams)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/133494.diff
2 Files Affected:
- (modified) llvm/lib/CodeGen/MIRParser/MIParser.cpp (+25-1)
- (added) llvm/test/DebugInfo/KeyInstructions/X86/parse.mir (+39)
``````````diff
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index 5c8e32d11cfb0..3a46654c59df1 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2329,6 +2329,8 @@ bool MIParser::parseDILocation(MDNode *&Loc) {
MDNode *Scope = nullptr;
MDNode *InlinedAt = nullptr;
bool ImplicitCode = false;
+ uint64_t AtomGroup = 0;
+ uint64_t AtomRank = 0;
if (expectAndConsume(MIToken::lparen))
return true;
@@ -2403,6 +2405,28 @@ bool MIParser::parseDILocation(MDNode *&Loc) {
lex();
continue;
}
+ if (Token.stringValue() == "atomGroup") {
+ lex();
+ if (expectAndConsume(MIToken::colon))
+ return true;
+ if (Token.isNot(MIToken::IntegerLiteral) ||
+ Token.integerValue().isSigned())
+ return error("expected unsigned integer");
+ AtomGroup = Token.integerValue().getZExtValue();
+ lex();
+ continue;
+ }
+ if (Token.stringValue() == "atomRank") {
+ lex();
+ if (expectAndConsume(MIToken::colon))
+ return true;
+ if (Token.isNot(MIToken::IntegerLiteral) ||
+ Token.integerValue().isSigned())
+ return error("expected unsigned integer");
+ AtomRank = Token.integerValue().getZExtValue();
+ lex();
+ continue;
+ }
}
return error(Twine("invalid DILocation argument '") +
Token.stringValue() + "'");
@@ -2418,7 +2442,7 @@ bool MIParser::parseDILocation(MDNode *&Loc) {
return error("DILocation requires a scope");
Loc = DILocation::get(MF.getFunction().getContext(), Line, Column, Scope,
- InlinedAt, ImplicitCode);
+ InlinedAt, ImplicitCode, AtomGroup, AtomRank);
return false;
}
diff --git a/llvm/test/DebugInfo/KeyInstructions/X86/parse.mir b/llvm/test/DebugInfo/KeyInstructions/X86/parse.mir
new file mode 100644
index 0000000000000..45cc23831412c
--- /dev/null
+++ b/llvm/test/DebugInfo/KeyInstructions/X86/parse.mir
@@ -0,0 +1,39 @@
+# RUN: llc %s --run-pass=none -o - | FileCheck %s
+
+## Check the MIR parser understands atomGroup and atomRank.
+
+# CHECK: RET64 $eax, debug-location !DILocation(line: 2, scope: ![[#]], atomGroup: 1, atomRank: 2)
+
+--- |
+ target triple = "x86_64-unknown-linux-gnu"
+ define hidden noundef i32 @p() local_unnamed_addr !dbg !5 {
+ entry:
+ ret i32 0
+ }
+
+ declare void @_Z12prologue_endv() local_unnamed_addr
+
+ !llvm.dbg.cu = !{!0}
+ !llvm.module.flags = !{!2, !3}
+ !llvm.ident = !{!4}
+
+ !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_17, file: !1, producer: "clang version 19.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, splitDebugInlining: false, nameTableKind: None)
+ !1 = !DIFile(filename: "test.cpp", directory: "/")
+ !2 = !{i32 7, !"Dwarf Version", i32 5}
+ !3 = !{i32 2, !"Debug Info Version", i32 3}
+ !4 = !{!"clang version 19.0.0"}
+ !5 = distinct !DISubprogram(name: "p", scope: !1, file: !1, line: 1, type: !6, scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
+ !6 = !DISubroutineType(types: !7)
+ !7 = !{}
+
+...
+---
+name: p
+alignment: 16
+body: |
+ bb.0.entry:
+ liveins: $edx, $esi, $rbp, $rbx
+ renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags
+ RET64 $eax, debug-location !DILocation(line: 2, scope: !5, atomGroup: 1, atomRank: 2)
+
+...
``````````
</details>
https://github.com/llvm/llvm-project/pull/133494
More information about the llvm-branch-commits
mailing list