[llvm] r333439 - AMDGPU: Split R600 MCInst lowering into its own class

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Tue May 29 10:41:59 PDT 2018


Author: tstellar
Date: Tue May 29 10:41:59 2018
New Revision: 333439

URL: http://llvm.org/viewvc/llvm-project?rev=333439&view=rev
Log:
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

Modified:
    llvm/trunk/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp

Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp?rev=333439&r1=333438&r2=333439&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUMCInstLower.cpp Tue May 29 10:41:59 2018
@@ -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(con
 
 void AMDGPUMCInstLower::lower(const MachineInstr *MI, MCInst &OutMI) const {
   unsigned Opcode = MI->getOpcode();
-  const auto *TII = ST.getInstrInfo();
+  const auto *TII = static_cast<const SIInstrInfo*>(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(c
   }
 }
 
+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<R600Subtarget>();
-  AMDGPUMCInstLower MCInstLowering(OutContext, STI, *this);
+  R600MCInstLower MCInstLowering(OutContext, STI, *this);
 
   StringRef Err;
   if (!STI.getInstrInfo()->verifyInstruction(*MI, Err)) {




More information about the llvm-commits mailing list