mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 07:06:38 +00:00
[KeyInstr] Add MIR parser support
This commit is contained in:
parent
7926adb4d3
commit
b49eb510a9
@ -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;
|
||||
}
|
||||
|
||||
|
39
llvm/test/DebugInfo/KeyInstructions/X86/parse.mir
Normal file
39
llvm/test/DebugInfo/KeyInstructions/X86/parse.mir
Normal file
@ -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)
|
||||
|
||||
...
|
Loading…
x
Reference in New Issue
Block a user