https://github.com/OCHyams created https://github.com/llvm/llvm-project/pull/133494
None >From b49eb510a934913c691d8c05fc9af5918de0e5a8 Mon Sep 17 00:00:00 2001 From: Orlando Cazalet-Hyams <orlando.hy...@sony.com> Date: Thu, 27 Mar 2025 15:47:52 +0000 Subject: [PATCH] [KeyInstr] Add MIR parser support --- llvm/lib/CodeGen/MIRParser/MIParser.cpp | 26 ++++++++++++- .../DebugInfo/KeyInstructions/X86/parse.mir | 39 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 llvm/test/DebugInfo/KeyInstructions/X86/parse.mir 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) + +... _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits