Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.h
Line
Count
Source (jump to first uncovered line)
1
//==-- WebAssemblyTargetStreamer.h - WebAssembly Target Streamer -*- C++ -*-==//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
///
9
/// \file
10
/// This file declares WebAssembly-specific target streamer classes.
11
/// These are for implementing support for target-specific assembly directives.
12
///
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
16
#define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYTARGETSTREAMER_H
17
18
#include "llvm/BinaryFormat/Wasm.h"
19
#include "llvm/MC/MCStreamer.h"
20
#include "llvm/Support/MachineValueType.h"
21
22
namespace llvm {
23
24
class MCWasmStreamer;
25
class MCSymbolWasm;
26
27
/// WebAssembly-specific streamer interface, to implement support
28
/// WebAssembly-specific assembly directives.
29
class WebAssemblyTargetStreamer : public MCTargetStreamer {
30
public:
31
  explicit WebAssemblyTargetStreamer(MCStreamer &S);
32
33
  /// .local
34
  virtual void emitLocal(ArrayRef<wasm::ValType> Types) = 0;
35
  /// .endfunc
36
  virtual void emitEndFunc() = 0;
37
  /// .functype
38
  virtual void emitFunctionType(const MCSymbolWasm *Sym) = 0;
39
  /// .indidx
40
  virtual void emitIndIdx(const MCExpr *Value) = 0;
41
  /// .globaltype
42
  virtual void emitGlobalType(const MCSymbolWasm *Sym) = 0;
43
  /// .eventtype
44
  virtual void emitEventType(const MCSymbolWasm *Sym) = 0;
45
  /// .import_module
46
  virtual void emitImportModule(const MCSymbolWasm *Sym,
47
                                StringRef ImportModule) = 0;
48
  /// .import_name
49
  virtual void emitImportName(const MCSymbolWasm *Sym,
50
                              StringRef ImportName) = 0;
51
52
protected:
53
  void emitValueType(wasm::ValType Type);
54
};
55
56
/// This part is for ascii assembly output
57
class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {
58
  formatted_raw_ostream &OS;
59
  void emitSignature(const wasm::WasmSignature *Sig);
60
  void emitParamList(const wasm::WasmSignature *Sig);
61
  void emitReturnList(const wasm::WasmSignature *Sig);
62
63
public:
64
  WebAssemblyTargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
65
66
  void emitLocal(ArrayRef<wasm::ValType> Types) override;
67
  void emitEndFunc() override;
68
  void emitFunctionType(const MCSymbolWasm *Sym) override;
69
  void emitIndIdx(const MCExpr *Value) override;
70
  void emitGlobalType(const MCSymbolWasm *Sym) override;
71
  void emitEventType(const MCSymbolWasm *Sym) override;
72
  void emitImportModule(const MCSymbolWasm *Sym, StringRef ImportModule) override;
73
  void emitImportName(const MCSymbolWasm *Sym, StringRef ImportName) override;
74
};
75
76
/// This part is for Wasm object output
77
class WebAssemblyTargetWasmStreamer final : public WebAssemblyTargetStreamer {
78
public:
79
  explicit WebAssemblyTargetWasmStreamer(MCStreamer &S);
80
81
  void emitLocal(ArrayRef<wasm::ValType> Types) override;
82
  void emitEndFunc() override;
83
521
  void emitFunctionType(const MCSymbolWasm *Sym) override {}
84
  void emitIndIdx(const MCExpr *Value) override;
85
16
  void emitGlobalType(const MCSymbolWasm *Sym) override {}
86
5
  void emitEventType(const MCSymbolWasm *Sym) override {}
87
  void emitImportModule(const MCSymbolWasm *Sym,
88
4
                        StringRef ImportModule) override {}
89
  void emitImportName(const MCSymbolWasm *Sym,
90
3
                      StringRef ImportName) override {}
91
};
92
93
/// This part is for null output
94
class WebAssemblyTargetNullStreamer final : public WebAssemblyTargetStreamer {
95
public:
96
  explicit WebAssemblyTargetNullStreamer(MCStreamer &S)
97
1
      : WebAssemblyTargetStreamer(S) {}
98
99
1
  void emitLocal(ArrayRef<wasm::ValType>) override {}
100
0
  void emitEndFunc() override {}
101
2
  void emitFunctionType(const MCSymbolWasm *) override {}
102
0
  void emitIndIdx(const MCExpr *) override {}
103
1
  void emitGlobalType(const MCSymbolWasm *) override {}
104
1
  void emitEventType(const MCSymbolWasm *) override {}
105
0
  void emitImportModule(const MCSymbolWasm *, StringRef) override {}
106
0
  void emitImportName(const MCSymbolWasm *, StringRef) override {}
107
};
108
109
} // end namespace llvm
110
111
#endif