[llvm] r327442 - [MIR] Allow frame-setup and frame-destroy on the same instruction
Francis Visoiu Mistrih via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 13 12:53:16 PDT 2018
Author: thegameg
Date: Tue Mar 13 12:53:16 2018
New Revision: 327442
URL: http://llvm.org/viewvc/llvm-project?rev=327442&view=rev
Log:
[MIR] Allow frame-setup and frame-destroy on the same instruction
Nothing prevents us from having both frame-setup and frame-destroy on
the same instruction.
When merging:
* frame-setup OPCODE1
* frame-destroy OPCODE2
into
* frame-setup frame-destroy OPCODE3
we want to be able to print and parse both flags.
Modified:
llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp
llvm/trunk/lib/CodeGen/MIRPrinter.cpp
llvm/trunk/lib/CodeGen/MachineInstr.cpp
llvm/trunk/test/CodeGen/MIR/X86/frame-setup-instruction-flag.mir
Modified: llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp?rev=327442&r1=327441&r2=327442&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp (original)
+++ llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp Tue Mar 13 12:53:16 2018
@@ -923,11 +923,13 @@ bool MIParser::verifyImplicitOperands(Ar
}
bool MIParser::parseInstruction(unsigned &OpCode, unsigned &Flags) {
- if (Token.is(MIToken::kw_frame_setup)) {
- Flags |= MachineInstr::FrameSetup;
- lex();
- } else if (Token.is(MIToken::kw_frame_destroy)) {
- Flags |= MachineInstr::FrameDestroy;
+ // Allow both:
+ // * frame-setup frame-destroy OPCODE
+ // * frame-destroy frame-setup OPCODE
+ while (Token.is(MIToken::kw_frame_setup) ||
+ Token.is(MIToken::kw_frame_destroy)) {
+ Flags |= Token.is(MIToken::kw_frame_setup) ? MachineInstr::FrameSetup
+ : MachineInstr::FrameDestroy;
lex();
}
if (Token.isNot(MIToken::Identifier))
Modified: llvm/trunk/lib/CodeGen/MIRPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRPrinter.cpp?rev=327442&r1=327441&r2=327442&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MIRPrinter.cpp (original)
+++ llvm/trunk/lib/CodeGen/MIRPrinter.cpp Tue Mar 13 12:53:16 2018
@@ -672,7 +672,7 @@ void MIPrinter::print(const MachineInstr
OS << " = ";
if (MI.getFlag(MachineInstr::FrameSetup))
OS << "frame-setup ";
- else if (MI.getFlag(MachineInstr::FrameDestroy))
+ if (MI.getFlag(MachineInstr::FrameDestroy))
OS << "frame-destroy ";
OS << TII->getName(MI.getOpcode());
Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=327442&r1=327441&r2=327442&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Tue Mar 13 12:53:16 2018
@@ -1292,7 +1292,7 @@ void MachineInstr::print(raw_ostream &OS
if (getFlag(MachineInstr::FrameSetup))
OS << "frame-setup ";
- else if (getFlag(MachineInstr::FrameDestroy))
+ if (getFlag(MachineInstr::FrameDestroy))
OS << "frame-destroy ";
// Print the opcode name.
Modified: llvm/trunk/test/CodeGen/MIR/X86/frame-setup-instruction-flag.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/X86/frame-setup-instruction-flag.mir?rev=327442&r1=327441&r2=327442&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/X86/frame-setup-instruction-flag.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/X86/frame-setup-instruction-flag.mir Tue Mar 13 12:53:16 2018
@@ -32,5 +32,9 @@ body: |
CALL64pcrel32 @compute, csr_64, implicit $rsp, implicit $edi, implicit-def $rsp, implicit-def $eax
; CHECK: $rdx = frame-destroy POP64r
$rdx = frame-destroy POP64r implicit-def $rsp, implicit $rsp
+ ; CHECK: $rdx = frame-setup frame-destroy POP64r
+ $rdx = frame-setup frame-destroy POP64r implicit-def $rsp, implicit $rsp
+ ; CHECK: $rdx = frame-setup frame-destroy POP64r
+ $rdx = frame-destroy frame-setup POP64r implicit-def $rsp, implicit $rsp
RETQ $eax
...
More information about the llvm-commits
mailing list