LCOV - code coverage report
Current view: top level - lib/Target/WebAssembly - WebAssemblyAsmPrinter.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 9 12 75.0 %
Date: 2018-10-20 13:21:21 Functions: 2 4 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // WebAssemblyAsmPrinter.h - WebAssembly implementation of AsmPrinter-*- 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             : #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYASMPRINTER_H
      11             : #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYASMPRINTER_H
      12             : 
      13             : #include "WebAssemblyMachineFunctionInfo.h"
      14             : #include "WebAssemblySubtarget.h"
      15             : #include "llvm/CodeGen/AsmPrinter.h"
      16             : #include "llvm/MC/MCStreamer.h"
      17             : #include "llvm/Target/TargetMachine.h"
      18             : 
      19             : namespace llvm {
      20             : class MCSymbol;
      21             : class WebAssemblyTargetStreamer;
      22             : class WebAssemblyMCInstLower;
      23             : 
      24             : class LLVM_LIBRARY_VISIBILITY WebAssemblyAsmPrinter final : public AsmPrinter {
      25             :   const WebAssemblySubtarget *Subtarget;
      26             :   const MachineRegisterInfo *MRI;
      27             :   WebAssemblyFunctionInfo *MFI;
      28             :   // TODO: Do the uniquing of Signatures here instead of ObjectFileWriter?
      29             :   std::vector<std::unique_ptr<wasm::WasmSignature>> Signatures;
      30             : 
      31             : public:
      32         304 :   explicit WebAssemblyAsmPrinter(TargetMachine &TM,
      33             :                                  std::unique_ptr<MCStreamer> Streamer)
      34         304 :       : AsmPrinter(TM, std::move(Streamer)), Subtarget(nullptr), MRI(nullptr),
      35         608 :         MFI(nullptr) {}
      36             : 
      37           0 :   StringRef getPassName() const override {
      38           0 :     return "WebAssembly Assembly Printer";
      39             :   }
      40             : 
      41           0 :   const WebAssemblySubtarget &getSubtarget() const { return *Subtarget; }
      42             :   void addSignature(std::unique_ptr<wasm::WasmSignature> &&Sig) {
      43        3637 :     Signatures.push_back(std::move(Sig));
      44             :   }
      45             : 
      46             :   //===------------------------------------------------------------------===//
      47             :   // MachineFunctionPass Implementation.
      48             :   //===------------------------------------------------------------------===//
      49             : 
      50        2982 :   bool runOnMachineFunction(MachineFunction &MF) override {
      51        2982 :     Subtarget = &MF.getSubtarget<WebAssemblySubtarget>();
      52        2982 :     MRI = &MF.getRegInfo();
      53        2982 :     MFI = MF.getInfo<WebAssemblyFunctionInfo>();
      54        2982 :     return AsmPrinter::runOnMachineFunction(MF);
      55             :   }
      56             : 
      57             :   //===------------------------------------------------------------------===//
      58             :   // AsmPrinter Implementation.
      59             :   //===------------------------------------------------------------------===//
      60             : 
      61             :   void EmitEndOfAsmFile(Module &M) override;
      62             :   void EmitJumpTableInfo() override;
      63             :   void EmitConstantPool() override;
      64             :   void EmitFunctionBodyStart() override;
      65             :   void EmitInstruction(const MachineInstr *MI) override;
      66             :   const MCExpr *lowerConstant(const Constant *CV) override;
      67             :   bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
      68             :                        unsigned AsmVariant, const char *ExtraCode,
      69             :                        raw_ostream &OS) override;
      70             :   bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
      71             :                              unsigned AsmVariant, const char *ExtraCode,
      72             :                              raw_ostream &OS) override;
      73             : 
      74             :   MVT getRegType(unsigned RegNo) const;
      75             :   std::string regToString(const MachineOperand &MO);
      76             :   WebAssemblyTargetStreamer *getTargetStreamer();
      77             : };
      78             : 
      79             : } // end namespace llvm
      80             : 
      81             : #endif

Generated by: LCOV version 1.13