File tree Expand file tree Collapse file tree 4 files changed +22
-8
lines changed Expand file tree Collapse file tree 4 files changed +22
-8
lines changed Original file line number Diff line number Diff line change @@ -99,8 +99,11 @@ void WebAssemblyTargetAsmStreamer::emitIndirectFunctionType(
99
99
OS << ' \n ' ;
100
100
}
101
101
102
- void WebAssemblyTargetAsmStreamer::emitGlobalImport (StringRef name) {
103
- OS << " \t .import_global\t " << name << ' \n ' ;
102
+ void WebAssemblyTargetAsmStreamer::emitGlobalType (MCSymbolWasm *Sym) {
103
+ OS << " \t .globaltype\t " << Sym->getName () << " , " <<
104
+ WebAssembly::TypeToString (
105
+ static_cast <wasm::ValType>(Sym->getGlobalType ().Type )) <<
106
+ ' \n ' ;
104
107
}
105
108
106
109
void WebAssemblyTargetAsmStreamer::emitImportModule (MCSymbolWasm *Sym,
@@ -152,8 +155,8 @@ void WebAssemblyTargetWasmStreamer::emitIndirectFunctionType(
152
155
Symbol->setType (wasm::WASM_SYMBOL_TYPE_FUNCTION);
153
156
}
154
157
155
- void WebAssemblyTargetWasmStreamer::emitGlobalImport (StringRef name ) {
156
- llvm_unreachable ( " .global_import is not needed for direct wasm output " );
158
+ void WebAssemblyTargetWasmStreamer::emitGlobalType (MCSymbolWasm *Sym ) {
159
+ // Not needed.
157
160
}
158
161
159
162
void WebAssemblyTargetWasmStreamer::emitImportModule (MCSymbolWasm *Sym,
Original file line number Diff line number Diff line change @@ -43,8 +43,8 @@ class WebAssemblyTargetStreamer : public MCTargetStreamer {
43
43
virtual void emitIndirectFunctionType (MCSymbolWasm *Symbol) = 0;
44
44
// / .indidx
45
45
virtual void emitIndIdx (const MCExpr *Value) = 0;
46
- // / .import_global
47
- virtual void emitGlobalImport (StringRef name ) = 0;
46
+ // / .globaltype
47
+ virtual void emitGlobalType (MCSymbolWasm *Sym ) = 0;
48
48
// / .import_module
49
49
virtual void emitImportModule (MCSymbolWasm *Sym, StringRef ModuleName) = 0;
50
50
@@ -65,7 +65,7 @@ class WebAssemblyTargetAsmStreamer final : public WebAssemblyTargetStreamer {
65
65
void emitEndFunc () override ;
66
66
void emitIndirectFunctionType (MCSymbolWasm *Symbol) override ;
67
67
void emitIndIdx (const MCExpr *Value) override ;
68
- void emitGlobalImport (StringRef name ) override ;
68
+ void emitGlobalType (MCSymbolWasm *Sym ) override ;
69
69
void emitImportModule (MCSymbolWasm *Sym, StringRef ModuleName) override ;
70
70
};
71
71
@@ -80,7 +80,7 @@ class WebAssemblyTargetWasmStreamer final : public WebAssemblyTargetStreamer {
80
80
void emitEndFunc () override ;
81
81
void emitIndirectFunctionType (MCSymbolWasm *Symbol) override ;
82
82
void emitIndIdx (const MCExpr *Value) override ;
83
- void emitGlobalImport (StringRef name ) override ;
83
+ void emitGlobalType (MCSymbolWasm *Sym ) override ;
84
84
void emitImportModule (MCSymbolWasm *Sym, StringRef ModuleName) override ;
85
85
};
86
86
Original file line number Diff line number Diff line change @@ -78,6 +78,14 @@ WebAssemblyTargetStreamer *WebAssemblyAsmPrinter::getTargetStreamer() {
78
78
// ===----------------------------------------------------------------------===//
79
79
80
80
void WebAssemblyAsmPrinter::EmitEndOfAsmFile (Module &M) {
81
+ for (auto &It : OutContext.getSymbols ()) {
82
+ // Emit a .globaltype declaration.
83
+ auto Sym = cast<MCSymbolWasm>(It.getValue ());
84
+ if (Sym->getType () == wasm::WASM_SYMBOL_TYPE_GLOBAL) {
85
+ getTargetStreamer ()->emitGlobalType (Sym);
86
+ }
87
+ }
88
+
81
89
for (const auto &F : M) {
82
90
// Emit function type info for all undefined functions
83
91
if (F.isDeclarationForLinker () && !F.isIntrinsic ()) {
@@ -105,6 +113,7 @@ void WebAssemblyAsmPrinter::EmitEndOfAsmFile(Module &M) {
105
113
}
106
114
}
107
115
}
116
+
108
117
for (const auto &G : M.globals ()) {
109
118
if (!G.hasInitializer () && G.hasExternalLinkage ()) {
110
119
if (G.getValueType ()->isSized ()) {
Original file line number Diff line number Diff line change @@ -330,4 +330,6 @@ define void @inline_asm() {
330
330
ret void
331
331
}
332
332
333
+ ; CHECK: .globaltype __stack_pointer, i32{{$}}
334
+
333
335
; TODO: test over-aligned alloca
You can’t perform that action at this time.
0 commit comments