|  | // WebAssemblyAsmPrinter.h - WebAssembly implementation of AsmPrinter-*- C++ -*- | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYASMPRINTER_H | 
|  | #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYASMPRINTER_H | 
|  |  | 
|  | #include "WebAssemblyMachineFunctionInfo.h" | 
|  | #include "WebAssemblySubtarget.h" | 
|  | #include "llvm/CodeGen/AsmPrinter.h" | 
|  | #include "llvm/MC/MCStreamer.h" | 
|  | #include "llvm/Target/TargetMachine.h" | 
|  |  | 
|  | namespace llvm { | 
|  | class MCSymbol; | 
|  | class WebAssemblyTargetStreamer; | 
|  | class WebAssemblyMCInstLower; | 
|  |  | 
|  | class LLVM_LIBRARY_VISIBILITY WebAssemblyAsmPrinter final : public AsmPrinter { | 
|  | const WebAssemblySubtarget *Subtarget; | 
|  | const MachineRegisterInfo *MRI; | 
|  | WebAssemblyFunctionInfo *MFI; | 
|  |  | 
|  | public: | 
|  | explicit WebAssemblyAsmPrinter(TargetMachine &TM, | 
|  | std::unique_ptr<MCStreamer> Streamer) | 
|  | : AsmPrinter(TM, std::move(Streamer)), | 
|  | Subtarget(nullptr), MRI(nullptr), MFI(nullptr) {} | 
|  |  | 
|  | StringRef getPassName() const override { | 
|  | return "WebAssembly Assembly Printer"; | 
|  | } | 
|  |  | 
|  | const WebAssemblySubtarget &getSubtarget() const { return *Subtarget; } | 
|  |  | 
|  | //===------------------------------------------------------------------===// | 
|  | // MachineFunctionPass Implementation. | 
|  | //===------------------------------------------------------------------===// | 
|  |  | 
|  | bool runOnMachineFunction(MachineFunction &MF) override { | 
|  | Subtarget = &MF.getSubtarget<WebAssemblySubtarget>(); | 
|  | MRI = &MF.getRegInfo(); | 
|  | MFI = MF.getInfo<WebAssemblyFunctionInfo>(); | 
|  | return AsmPrinter::runOnMachineFunction(MF); | 
|  | } | 
|  |  | 
|  | //===------------------------------------------------------------------===// | 
|  | // AsmPrinter Implementation. | 
|  | //===------------------------------------------------------------------===// | 
|  |  | 
|  | void EmitEndOfAsmFile(Module &M) override; | 
|  | void EmitJumpTableInfo() override; | 
|  | void EmitConstantPool() override; | 
|  | void EmitFunctionBodyStart() override; | 
|  | void EmitFunctionBodyEnd() override; | 
|  | void EmitInstruction(const MachineInstr *MI) override; | 
|  | const MCExpr *lowerConstant(const Constant *CV) override; | 
|  | bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, | 
|  | unsigned AsmVariant, const char *ExtraCode, | 
|  | raw_ostream &OS) override; | 
|  | bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, | 
|  | unsigned AsmVariant, const char *ExtraCode, | 
|  | raw_ostream &OS) override; | 
|  |  | 
|  | MVT getRegType(unsigned RegNo) const; | 
|  | std::string regToString(const MachineOperand &MO); | 
|  | WebAssemblyTargetStreamer *getTargetStreamer(); | 
|  | }; | 
|  |  | 
|  | } // end namespace llvm | 
|  |  | 
|  | #endif |