[llvm] fc2ec06 - [KeyInstr] Add MIR parser support (#133494)

via llvm-commits llvm-commits at lists.llvm.org
Thu May 8 02:40:24 PDT 2025


Author: Orlando Cazalet-Hyams
Date: 2025-05-08T10:40:21+01:00
New Revision: fc2ec06ccab498447914c076f1e7b4326dc321c2

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

LOG: [KeyInstr] Add MIR parser support (#133494)

RFC: https://discourse.llvm.org/t/rfc-improving-is-stmt-placement-for-better-interactive-debugging/82668

Added: 
    llvm/test/DebugInfo/KeyInstructions/X86/parse.mir

Modified: 
    llvm/lib/CodeGen/MIRParser/MIParser.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index 858cdb6599c62..cbdeacda3eb87 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2332,6 +2332,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;
@@ -2406,6 +2408,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() + "'");
@@ -2421,7 +2445,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)
+
+...


        


More information about the llvm-commits mailing list