Home | History | Annotate | Download | only in WebAssembly
      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:
     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