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 22namespace llvm { 23class AsmPrinter; 24class MCContext; 25class MCSymbol; 26class MachineInstr; 27class MachineOperand; 28 29/// This class is used to lower an MachineInstr into an MCInst. 30class 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 39public: 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