1//===-- AArch64MCInstLower.h - Lower MachineInstr to MCInst ---------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64MCINSTLOWER_H 10#define LLVM_LIB_TARGET_AARCH64_AARCH64MCINSTLOWER_H 11 12#include "llvm/ADT/Triple.h" 13#include "llvm/Support/Compiler.h" 14 15namespace llvm { 16class AsmPrinter; 17class MCAsmInfo; 18class MCContext; 19class MCInst; 20class MCOperand; 21class MCSymbol; 22class MachineInstr; 23class MachineModuleInfoMachO; 24class MachineOperand; 25class Mangler; 26 27/// AArch64MCInstLower - This class is used to lower an MachineInstr 28/// into an MCInst. 29class LLVM_LIBRARY_VISIBILITY AArch64MCInstLower { 30 MCContext &Ctx; 31 AsmPrinter &Printer; 32 Triple TargetTriple; 33 34public: 35 AArch64MCInstLower(MCContext &ctx, AsmPrinter &printer); 36 37 bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp) const; 38 void Lower(const MachineInstr *MI, MCInst &OutMI) const; 39 40 MCOperand lowerSymbolOperandDarwin(const MachineOperand &MO, 41 MCSymbol *Sym) const; 42 MCOperand lowerSymbolOperandELF(const MachineOperand &MO, 43 MCSymbol *Sym) const; 44 MCOperand lowerSymbolOperandCOFF(const MachineOperand &MO, 45 MCSymbol *Sym) const; 46 MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) const; 47 48 MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO) const; 49 MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO) const; 50}; 51} 52 53#endif 54