Home | History | Annotate | Download | only in Mips
      1 //===- MipsMCInstLower.h - Lower MachineInstr to MCInst --------*- C++ -*--===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef LLVM_LIB_TARGET_MIPS_MIPSMCINSTLOWER_H
     11 #define LLVM_LIB_TARGET_MIPS_MIPSMCINSTLOWER_H
     12 
     13 #include "MCTargetDesc/MipsMCExpr.h"
     14 #include "llvm/CodeGen/MachineOperand.h"
     15 #include "llvm/Support/Compiler.h"
     16 
     17 namespace llvm {
     18 
     19 class MachineBasicBlock;
     20 class MachineInstr;
     21 class MCContext;
     22 class MCInst;
     23 class MCOperand;
     24 class MipsAsmPrinter;
     25 
     26 /// MipsMCInstLower - This class is used to lower an MachineInstr into an
     27 ///                   MCInst.
     28 class LLVM_LIBRARY_VISIBILITY MipsMCInstLower {
     29   using MachineOperandType = MachineOperand::MachineOperandType;
     30 
     31   MCContext *Ctx;
     32   MipsAsmPrinter &AsmPrinter;
     33 
     34 public:
     35   MipsMCInstLower(MipsAsmPrinter &asmprinter);
     36 
     37   void Initialize(MCContext *C);
     38   void Lower(const MachineInstr *MI, MCInst &OutMI) const;
     39   MCOperand LowerOperand(const MachineOperand& MO, unsigned offset = 0) const;
     40 
     41 private:
     42   MCOperand LowerSymbolOperand(const MachineOperand &MO,
     43                                MachineOperandType MOTy, unsigned Offset) const;
     44   MCOperand createSub(MachineBasicBlock *BB1, MachineBasicBlock *BB2,
     45                       MipsMCExpr::MipsExprKind Kind) const;
     46   void lowerLongBranchLUi(const MachineInstr *MI, MCInst &OutMI) const;
     47   void lowerLongBranchADDiu(const MachineInstr *MI, MCInst &OutMI,
     48                             int Opcode) const;
     49   bool lowerLongBranch(const MachineInstr *MI, MCInst &OutMI) const;
     50 };
     51 
     52 } // end namespace llvm
     53 
     54 #endif // LLVM_LIB_TARGET_MIPS_MIPSMCINSTLOWER_H
     55