From 57b9342c8009e541f31cf45dca5c5a32385e1ccc Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 29 May 2018 17:41:59 +0000 Subject: [PATCH] AMDGPU: Split R600 MCInst lowering into its own class Reviewers: arsenm, nhaehnle Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, llvm-commits, t-tye Differential Revision: https://reviews.llvm.org/D47307 llvm-svn: 333439 --- llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp | 34 +++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp b/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp index 26a0726cfe91..6aaa46e06034 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp @@ -41,14 +41,14 @@ namespace { class AMDGPUMCInstLower { MCContext &Ctx; - const AMDGPUSubtarget &ST; + const TargetSubtargetInfo &ST; const AsmPrinter ≈ const MCExpr *getLongBranchBlockExpr(const MachineBasicBlock &SrcBB, const MachineOperand &MO) const; public: - AMDGPUMCInstLower(MCContext &ctx, const AMDGPUSubtarget &ST, + AMDGPUMCInstLower(MCContext &ctx, const TargetSubtargetInfo &ST, const AsmPrinter &AP); bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp) const; @@ -58,11 +58,22 @@ public: }; +class R600MCInstLower : public AMDGPUMCInstLower { +public: + R600MCInstLower(MCContext &ctx, const R600Subtarget &ST, + const AsmPrinter &AP); + + /// Lower a MachineInstr to an MCInst + void lower(const MachineInstr *MI, MCInst &OutMI) const; +}; + + } // End anonymous namespace #include "AMDGPUGenMCPseudoLowering.inc" -AMDGPUMCInstLower::AMDGPUMCInstLower(MCContext &ctx, const AMDGPUSubtarget &st, +AMDGPUMCInstLower::AMDGPUMCInstLower(MCContext &ctx, + const TargetSubtargetInfo &st, const AsmPrinter &ap): Ctx(ctx), ST(st), AP(ap) { } @@ -153,7 +164,7 @@ bool AMDGPUMCInstLower::lowerOperand(const MachineOperand &MO, void AMDGPUMCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const { unsigned Opcode = MI->getOpcode(); - const auto *TII = ST.getInstrInfo(); + const auto *TII = static_cast(ST.getInstrInfo()); // FIXME: Should be able to handle this with emitPseudoExpansionLowering. We // need to select it to the subtarget specific version, and there's no way to @@ -325,9 +336,22 @@ void AMDGPUAsmPrinter::EmitInstruction(const MachineInstr *MI) { } } +R600MCInstLower::R600MCInstLower(MCContext &Ctx, const R600Subtarget &ST, + const AsmPrinter &AP) : + AMDGPUMCInstLower(Ctx, ST, AP) { } + +void R600MCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const { + OutMI.setOpcode(MI->getOpcode()); + for (const MachineOperand &MO : MI->explicit_operands()) { + MCOperand MCOp; + lowerOperand(MO, MCOp); + OutMI.addOperand(MCOp); + } +} + void R600AsmPrinter::EmitInstruction(const MachineInstr *MI) { const R600Subtarget &STI = MF->getSubtarget(); - AMDGPUMCInstLower MCInstLowering(OutContext, STI, *this); + R600MCInstLower MCInstLowering(OutContext, STI, *this); StringRef Err; if (!STI.getInstrInfo()->verifyInstruction(*MI, Err)) {