1 //===-- WebAssemblyMCInstLower.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 /// \file 11 /// \brief This file declares the class to lower WebAssembly MachineInstrs to 12 /// their corresponding MCInst records. 13 /// 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYMCINSTLOWER_H 17 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYMCINSTLOWER_H 18 19 #include "llvm/MC/MCInst.h" 20 #include "llvm/Support/Compiler.h" 21 22 namespace llvm { 23 class AsmPrinter; 24 class MCContext; 25 class MCSymbol; 26 class MachineInstr; 27 class MachineOperand; 28 29 /// This class is used to lower an MachineInstr into an MCInst. 30 class LLVM_LIBRARY_VISIBILITY WebAssemblyMCInstLower { 31 MCContext &Ctx; 32 AsmPrinter &Printer; 33 34 MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO) const; 35 MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO) const; 36 MCOperand LowerSymbolOperand(MCSymbol *Sym, int64_t Offset, 37 bool IsFunc) const; 38 39 public: WebAssemblyMCInstLower(MCContext & ctx,AsmPrinter & printer)40 WebAssemblyMCInstLower(MCContext &ctx, AsmPrinter &printer) 41 : Ctx(ctx), Printer(printer) {} 42 void Lower(const MachineInstr *MI, MCInst &OutMI) const; 43 }; 44 } // end namespace llvm 45 46 #endif 47