xref: /llvm-project/llvm/lib/Target/M68k/M68kMCInstLower.h (revision b0df70403d20e8aad5eb1abe147441d8763f333b)
16bf22ae4SJim Lin //===-- M68kMCInstLower.h - Lower MachineInstr to MCInst --------*- C++ -*-===//
25ac19e0aSMin-Yih Hsu //
35ac19e0aSMin-Yih Hsu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45ac19e0aSMin-Yih Hsu // See https://llvm.org/LICENSE.txt for license information.
55ac19e0aSMin-Yih Hsu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ac19e0aSMin-Yih Hsu //
75ac19e0aSMin-Yih Hsu //===----------------------------------------------------------------------===//
85ac19e0aSMin-Yih Hsu ///
95ac19e0aSMin-Yih Hsu /// \file
105ac19e0aSMin-Yih Hsu /// This file contains code to lower M68k MachineInstrs to their
115ac19e0aSMin-Yih Hsu /// corresponding MCInst records.
125ac19e0aSMin-Yih Hsu ///
135ac19e0aSMin-Yih Hsu //===----------------------------------------------------------------------===//
145ac19e0aSMin-Yih Hsu 
155ac19e0aSMin-Yih Hsu #ifndef LLVM_LIB_TARGET_M68K_M68KMCINSTLOWER_H
165ac19e0aSMin-Yih Hsu #define LLVM_LIB_TARGET_M68K_M68KMCINSTLOWER_H
175ac19e0aSMin-Yih Hsu 
185ac19e0aSMin-Yih Hsu #include "llvm/CodeGen/MachineOperand.h"
195ac19e0aSMin-Yih Hsu #include "llvm/MC/MCAsmInfo.h"
205ac19e0aSMin-Yih Hsu #include "llvm/Target/TargetMachine.h"
215ac19e0aSMin-Yih Hsu 
225ac19e0aSMin-Yih Hsu namespace llvm {
235ac19e0aSMin-Yih Hsu class MCContext;
245ac19e0aSMin-Yih Hsu class MCInst;
255ac19e0aSMin-Yih Hsu class MCOperand;
265ac19e0aSMin-Yih Hsu class MachineInstr;
275ac19e0aSMin-Yih Hsu class MachineFunction;
285ac19e0aSMin-Yih Hsu class M68kAsmPrinter;
295ac19e0aSMin-Yih Hsu 
305ac19e0aSMin-Yih Hsu /// This class is used to lower an MachineInstr into an MCInst.
315ac19e0aSMin-Yih Hsu class M68kMCInstLower {
325ac19e0aSMin-Yih Hsu   typedef MachineOperand::MachineOperandType MachineOperandType;
335ac19e0aSMin-Yih Hsu   MCContext &Ctx;
345ac19e0aSMin-Yih Hsu   MachineFunction &MF;
355ac19e0aSMin-Yih Hsu   const TargetMachine &TM;
365ac19e0aSMin-Yih Hsu   const MCAsmInfo &MAI;
375ac19e0aSMin-Yih Hsu   M68kAsmPrinter &AsmPrinter;
385ac19e0aSMin-Yih Hsu 
395ac19e0aSMin-Yih Hsu public:
405ac19e0aSMin-Yih Hsu   M68kMCInstLower(MachineFunction &MF, M68kAsmPrinter &AP);
415ac19e0aSMin-Yih Hsu 
425ac19e0aSMin-Yih Hsu   /// Lower an MO_GlobalAddress or MO_ExternalSymbol operand to an MCSymbol.
435ac19e0aSMin-Yih Hsu   MCSymbol *GetSymbolFromOperand(const MachineOperand &MO) const;
445ac19e0aSMin-Yih Hsu 
455ac19e0aSMin-Yih Hsu   MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) const;
465ac19e0aSMin-Yih Hsu 
47*b0df7040SFangrui Song   std::optional<MCOperand> LowerOperand(const MachineInstr *MI,
485ac19e0aSMin-Yih Hsu                                         const MachineOperand &MO) const;
495ac19e0aSMin-Yih Hsu 
505ac19e0aSMin-Yih Hsu   void Lower(const MachineInstr *MI, MCInst &OutMI) const;
515ac19e0aSMin-Yih Hsu };
525ac19e0aSMin-Yih Hsu } // namespace llvm
535ac19e0aSMin-Yih Hsu 
544a7890c6SJim Lin #endif // LLVM_LIB_TARGET_M68K_M68KMCINSTLOWER_H
55