18f5e8c1cd69fa77bea20140a7132ee2dea166c6dJia Liu//===-- MipsMCInstLower.h - Lower MachineInstr to MCInst -------*- C++ -*--===//
217a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka//
317a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka//                     The LLVM Compiler Infrastructure
417a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka//
517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// This file is distributed under the University of Illinois Open Source
617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka// License. See LICENSE.TXT for details.
717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka//
817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka//===----------------------------------------------------------------------===//
917a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka
1017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#ifndef MIPSMCINSTLOWER_H
1117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#define MIPSMCINSTLOWER_H
12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "MCTargetDesc/MipsMCExpr.h"
13ce1a538ab5b7ae7e0ed48d18c02571280fe105aaBruno Cardoso Lopes#include "llvm/ADT/SmallVector.h"
1417a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#include "llvm/CodeGen/MachineOperand.h"
1517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#include "llvm/Support/Compiler.h"
1617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka
1717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakanamespace llvm {
1817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MCContext;
1917a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MCInst;
2017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MCOperand;
2117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MachineInstr;
2217a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MachineFunction;
2317a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  class MipsAsmPrinter;
24bb481f882093fb738d2bb15610c79364bada5496Jia Liu
2517a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka/// MipsMCInstLower - This class is used to lower an MachineInstr into an
2617a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka//                    MCInst.
2717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakaclass LLVM_LIBRARY_VISIBILITY MipsMCInstLower {
2817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  typedef MachineOperand::MachineOperandType MachineOperandType;
29f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka  MCContext *Ctx;
3017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  MipsAsmPrinter &AsmPrinter;
3117a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakapublic:
32f93b86306683f8e860c8824efb717995cb072a70Akira Hatanaka  MipsMCInstLower(MipsAsmPrinter &asmprinter);
33a300b1cc29020b7dfaf7bfe443d38af8fbec7433Rafael Espindola  void Initialize(MCContext *C);
3417a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  void Lower(const MachineInstr *MI, MCInst &OutMI) const;
35cc46fe591af10c193c17323547a3dd7cc00c925dAkira Hatanaka  MCOperand LowerOperand(const MachineOperand& MO, unsigned offset = 0) const;
36e035f65b16956cdb7ba29e741b7e3c04a8ce4d24Jack Carter
3717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanakaprivate:
3817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka  MCOperand LowerSymbolOperand(const MachineOperand &MO,
3978d1b11aa57e5a2683e4be3baaaa9576ac04eea2Akira Hatanaka                               MachineOperandType MOTy, unsigned Offset) const;
40dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MCOperand createSub(MachineBasicBlock *BB1, MachineBasicBlock *BB2,
41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                      MCSymbolRefExpr::VariantKind Kind) const;
42dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void lowerLongBranchLUi(const MachineInstr *MI, MCInst &OutMI) const;
43dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void lowerLongBranchADDiu(const MachineInstr *MI, MCInst &OutMI,
44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                            int Opcode,
45dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                            MCSymbolRefExpr::VariantKind Kind) const;
46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool lowerLongBranch(const MachineInstr *MI, MCInst &OutMI) const;
4717a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka};
4817a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka}
4917a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka
5017a2f8e551dd4a772d389d1a193235ae56f8a399Akira Hatanaka#endif
51