[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
This revision was automatically updated to reflect the committed changes. Closed by commit rGb9a539c01084: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals (authored by aardappel). Changed prior to commit: https://reviews.llvm.org/D82130?vs=273539=273548#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 Files: clang/lib/Driver/ToolChains/WebAssembly.cpp lld/wasm/Config.h lld/wasm/Driver.cpp lld/wasm/InputChunks.cpp lld/wasm/Options.td llvm/include/llvm/BinaryFormat/Wasm.h llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp llvm/test/CodeGen/WebAssembly/stack-alignment.ll llvm/test/CodeGen/WebAssembly/userstack.ll llvm/test/MC/WebAssembly/stack-ptr.ll llvm/test/MC/WebAssembly/wasm64.s Index: llvm/test/MC/WebAssembly/wasm64.s === --- llvm/test/MC/WebAssembly/wasm64.s +++ llvm/test/MC/WebAssembly/wasm64.s @@ -51,6 +51,11 @@ i64.const 0 f32.store .L.str# relocatable offset! +### 64-bit SP + +global.get __stack_pointer +drop + end_function .section.rodata..L.str,"",@ @@ -62,7 +67,7 @@ .size .L.str, 24 .globaltype myglob64, i64 - +.globaltype __stack_pointer, i64 # CHECK: .functype test (i64) -> () @@ -155,6 +160,11 @@ # BIN-NEXT: Kind:GLOBAL # BIN-NEXT: GlobalType: I64 # BIN-NEXT: GlobalMutable: true +# BIN-NEXT: - Module: env +# BIN-NEXT: Field: __stack_pointer +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: GlobalType: I64 +# BIN-NEXT: GlobalMutable: true # BIN-NEXT: - Type:FUNCTION # BIN-NEXT: FunctionTypes: [ 0 ] # BIN-NEXT: - Type:DATACOUNT @@ -179,12 +189,15 @@ # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_LEB64 # BIN-NEXT: Index: 1 # BIN-NEXT: Offset: 0x0078 +# BIN-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB +# BIN-NEXT: Index: 3 +# BIN-NEXT: Offset: 0x0083 # BIN-NEXT: Functions: # BIN-NEXT: - Index: 0 # BIN-NEXT: Locals: # BIN-NEXT: - Type:I64 # BIN-NEXT: Count: 1 -# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A43420038020043200038020043428080808080808080800038020043238080808000380200434200380280808080808080808B +# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A434200380200432000380200434280808080808080808000380200432380808080003802004342003802808080808080808080002381808080001A0B # BIN-NEXT: - Type:DATA # BIN-NEXT: Relocations: # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_I64 @@ -217,6 +230,11 @@ # BIN-NEXT: Name:myglob64 # BIN-NEXT: Flags: [ UNDEFINED ] # BIN-NEXT: Global: 0 +# BIN-NEXT: - Index: 3 +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: Name:__stack_pointer +# BIN-NEXT: Flags: [ UNDEFINED ] +# BIN-NEXT: Global: 1 # BIN-NEXT: SegmentInfo: # BIN-NEXT: - Index: 0 # BIN-NEXT: Name:.rodata..L.str Index: llvm/test/MC/WebAssembly/stack-ptr.ll === --- llvm/test/MC/WebAssembly/stack-ptr.ll +++ llvm/test/MC/WebAssembly/stack-ptr.ll @@ -1,6 +1,5 @@ -; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s - -target triple = "wasm32-unknown-unknown" +; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK32 %s +; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK64 %s ; Function that uses explict stack, and should generate a reference to ; __stack_pointer, along with the corresponding reloction entry. @@ -15,7 +14,8 @@ ; CHECK: - Module: env ; CHECK: Field: __stack_pointer ; CHECK: Kind:GLOBAL -; CHECK: GlobalType: I32 +; CHK32:
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
aardappel updated this revision to Diff 273539. aardappel added a comment. types & variables in InputChunks.cpp CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 Files: clang/lib/Driver/ToolChains/WebAssembly.cpp lld/wasm/Config.h lld/wasm/Driver.cpp lld/wasm/InputChunks.cpp lld/wasm/Options.td llvm/include/llvm/BinaryFormat/Wasm.h llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp llvm/test/CodeGen/WebAssembly/stack-alignment.ll llvm/test/CodeGen/WebAssembly/userstack.ll llvm/test/MC/WebAssembly/stack-ptr.ll llvm/test/MC/WebAssembly/wasm64.s Index: llvm/test/MC/WebAssembly/wasm64.s === --- llvm/test/MC/WebAssembly/wasm64.s +++ llvm/test/MC/WebAssembly/wasm64.s @@ -51,6 +51,11 @@ i64.const 0 f32.store .L.str# relocatable offset! +### 64-bit SP + +global.get __stack_pointer +drop + end_function .section.rodata..L.str,"",@ @@ -62,7 +67,7 @@ .size .L.str, 24 .globaltype myglob64, i64 - +.globaltype __stack_pointer, i64 # CHECK: .functype test (i64) -> () @@ -155,6 +160,11 @@ # BIN-NEXT: Kind:GLOBAL # BIN-NEXT: GlobalType: I64 # BIN-NEXT: GlobalMutable: true +# BIN-NEXT: - Module: env +# BIN-NEXT: Field: __stack_pointer +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: GlobalType: I64 +# BIN-NEXT: GlobalMutable: true # BIN-NEXT: - Type:FUNCTION # BIN-NEXT: FunctionTypes: [ 0 ] # BIN-NEXT: - Type:DATACOUNT @@ -179,12 +189,15 @@ # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_LEB64 # BIN-NEXT: Index: 1 # BIN-NEXT: Offset: 0x0078 +# BIN-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB +# BIN-NEXT: Index: 3 +# BIN-NEXT: Offset: 0x0083 # BIN-NEXT: Functions: # BIN-NEXT: - Index: 0 # BIN-NEXT: Locals: # BIN-NEXT: - Type:I64 # BIN-NEXT: Count: 1 -# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A43420038020043200038020043428080808080808080800038020043238080808000380200434200380280808080808080808B +# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A434200380200432000380200434280808080808080808000380200432380808080003802004342003802808080808080808080002381808080001A0B # BIN-NEXT: - Type:DATA # BIN-NEXT: Relocations: # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_I64 @@ -217,6 +230,11 @@ # BIN-NEXT: Name:myglob64 # BIN-NEXT: Flags: [ UNDEFINED ] # BIN-NEXT: Global: 0 +# BIN-NEXT: - Index: 3 +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: Name:__stack_pointer +# BIN-NEXT: Flags: [ UNDEFINED ] +# BIN-NEXT: Global: 1 # BIN-NEXT: SegmentInfo: # BIN-NEXT: - Index: 0 # BIN-NEXT: Name:.rodata..L.str Index: llvm/test/MC/WebAssembly/stack-ptr.ll === --- llvm/test/MC/WebAssembly/stack-ptr.ll +++ llvm/test/MC/WebAssembly/stack-ptr.ll @@ -1,6 +1,5 @@ -; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s - -target triple = "wasm32-unknown-unknown" +; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK32 %s +; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK64 %s ; Function that uses explict stack, and should generate a reference to ; __stack_pointer, along with the corresponding reloction entry. @@ -15,7 +14,8 @@ ; CHECK: - Module: env ; CHECK: Field: __stack_pointer ; CHECK: Kind:GLOBAL -; CHECK: GlobalType: I32 +; CHK32: GlobalType: I32 +; CHK64: GlobalType: I64 ; CHECK: GlobalMutable: true ; CHECK: - Type:CODE ; CHECK: Relocations: Index:
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
dschuff accepted this revision. dschuff added a comment. Compiler changes LGTM Comment at: llvm/test/CodeGen/WebAssembly/stack-alignment.ll:1 -; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers | FileCheck %s - -target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" -target triple = "wasm32-unknown-unknown" +; RUN: llc < %s --mtriple=wasm32-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers | FileCheck -DPTR=32 %s +; RUN: llc < %s --mtriple=wasm64-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-keep-registers | FileCheck -DPTR=64 %s that -D flag is really nice. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
sbc100 accepted this revision. sbc100 added a comment. Linker changes still lgtm % comments Comment at: lld/wasm/InputChunks.cpp:338 + auto WASM_OPCODE_PTR_CONST = + config->is64 ? WASM_OPCODE_I64_CONST : WASM_OPCODE_I32_CONST; sbc100 wrote: > Just use normal variable names here? `opcode_const` and `opcode_add`? Normal variable names? Comment at: lld/wasm/InputChunks.cpp:363 + +auto is64 = relocIs64(rel.Type); +auto opcode_const = Again I think you appetite for the use of auto is exceeding that of the llvm coding style... I tend to stick to cases where the type is spelled out later in the same line. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
aardappel updated this revision to Diff 273503. aardappel added a comment. - Fixed ISEL for FrameIndex - Fixed 64-bit conditions in branches (thanks @aheejin!) - Made the FrameIndex generation code in WebAssemblyRegisterInfo work. - Made userstack.ll and stack-alignment.ll pass in wasm64. - Code review fixes. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 Files: clang/lib/Driver/ToolChains/WebAssembly.cpp lld/wasm/Config.h lld/wasm/Driver.cpp lld/wasm/InputChunks.cpp lld/wasm/Options.td llvm/include/llvm/BinaryFormat/Wasm.h llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp llvm/test/CodeGen/WebAssembly/stack-alignment.ll llvm/test/CodeGen/WebAssembly/userstack.ll llvm/test/MC/WebAssembly/stack-ptr.ll llvm/test/MC/WebAssembly/wasm64.s Index: llvm/test/MC/WebAssembly/wasm64.s === --- llvm/test/MC/WebAssembly/wasm64.s +++ llvm/test/MC/WebAssembly/wasm64.s @@ -51,6 +51,11 @@ i64.const 0 f32.store .L.str# relocatable offset! +### 64-bit SP + +global.get __stack_pointer +drop + end_function .section.rodata..L.str,"",@ @@ -62,7 +67,7 @@ .size .L.str, 24 .globaltype myglob64, i64 - +.globaltype __stack_pointer, i64 # CHECK: .functype test (i64) -> () @@ -155,6 +160,11 @@ # BIN-NEXT: Kind:GLOBAL # BIN-NEXT: GlobalType: I64 # BIN-NEXT: GlobalMutable: true +# BIN-NEXT: - Module: env +# BIN-NEXT: Field: __stack_pointer +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: GlobalType: I64 +# BIN-NEXT: GlobalMutable: true # BIN-NEXT: - Type:FUNCTION # BIN-NEXT: FunctionTypes: [ 0 ] # BIN-NEXT: - Type:DATACOUNT @@ -179,12 +189,15 @@ # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_LEB64 # BIN-NEXT: Index: 1 # BIN-NEXT: Offset: 0x0078 +# BIN-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB +# BIN-NEXT: Index: 3 +# BIN-NEXT: Offset: 0x0083 # BIN-NEXT: Functions: # BIN-NEXT: - Index: 0 # BIN-NEXT: Locals: # BIN-NEXT: - Type:I64 # BIN-NEXT: Count: 1 -# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A43420038020043200038020043428080808080808080800038020043238080808000380200434200380280808080808080808B +# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A434200380200432000380200434280808080808080808000380200432380808080003802004342003802808080808080808080002381808080001A0B # BIN-NEXT: - Type:DATA # BIN-NEXT: Relocations: # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_I64 @@ -217,6 +230,11 @@ # BIN-NEXT: Name:myglob64 # BIN-NEXT: Flags: [ UNDEFINED ] # BIN-NEXT: Global: 0 +# BIN-NEXT: - Index: 3 +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: Name:__stack_pointer +# BIN-NEXT: Flags: [ UNDEFINED ] +# BIN-NEXT: Global: 1 # BIN-NEXT: SegmentInfo: # BIN-NEXT: - Index: 0 # BIN-NEXT: Name:.rodata..L.str Index: llvm/test/MC/WebAssembly/stack-ptr.ll === --- llvm/test/MC/WebAssembly/stack-ptr.ll +++ llvm/test/MC/WebAssembly/stack-ptr.ll @@ -1,6 +1,5 @@ -; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s - -target triple = "wasm32-unknown-unknown" +; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK32 %s +; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK64 %s ; Function that uses explict stack, and should generate a reference to ; __stack_pointer, along with the corresponding reloction entry. @@ -15,7 +14,8 @@ ; CHECK: - Module: env ; CHECK: Field: __stack_pointer ; CHECK: Kind:GLOBAL -; CHECK: GlobalType: I32 +; CHK32:
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
aardappel added a comment. @dschuff still working on it, it uncovered some issues (as it should :) CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
dschuff added a comment. So the code LGTM, were you going to add to usertest.ll in this CL? Comment at: llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp:84 WasmSym->setGlobalType(wasm::WasmGlobalType{ -uint8_t(Subtarget.hasAddr64() ? wasm::WASM_TYPE_I64 - : wasm::WASM_TYPE_I32), +uint8_t(Subtarget.hasAddr64() && strcmp(Name, "__table_base") != 0 +? wasm::WASM_TYPE_I64 aardappel wrote: > dschuff wrote: > > should __table_base stay as i32? > I'd think so, right? since it refers to table indices, not memory Oh, right; I'd misread this as setting it just for table_base but I had it backwards; it's exempting table_base. So yeah this is right. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
sbc100 accepted this revision. sbc100 added a comment. This revision is now accepted and ready to land. Great! Comment at: clang/lib/Driver/ToolChains/WebAssembly.cpp:68 + else +CmdArgs.push_back("-m wasm32"); + All the other drivers seem to do `CmdArgs.push_back("-m");` .. CmdArgs.push_back("xxx"); I would expect these to be two distinct argument.. in fact I'm not sure how it works with once arg that contains a space like this. Comment at: lld/wasm/Driver.cpp:385 +StringRef s = arg->getValue(); +if (s == "wasm32") + config->is64 = false; aardappel wrote: > dschuff wrote: > > any particular reason this shouldn't use the more conventional `-m32`/`m64`? > > edit: nevermind, this is lld not clang. I'll defer to Sam's opinion on lld > > flags. > Yup, @sbc100 suggested this. Yeah it looks like gnu ld and lld elf always accept `-m ` from clang. Comment at: lld/wasm/Driver.cpp:390 +else + error("'" + s + "' not a valid target"); + } It looks like lld ELF inherits the GNU ld terminology and calls this argument "emulation". ``` -m emulation Emulate the emulation linker. You can list the available emulations with the --verbose or -V options. If the -m option is not used, the emulation is taken from the "LDEMULATION" environment variable, if that is defined. Otherwise, the default emulation depends upon how the linker was configured. Pretty odd choice of name I think and we probably are ok no to copy that here. But how about I think I prefer the term "architecture" to target. Seems a little more specific. How about: `error("invalid target architecture: " + s);` Comment at: lld/wasm/InputChunks.cpp:338 + auto WASM_OPCODE_PTR_CONST = + config->is64 ? WASM_OPCODE_I64_CONST : WASM_OPCODE_I32_CONST; Just use normal variable names here? `opcode_const` and `opcode_add`? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
aardappel marked 2 inline comments as done. aardappel added a comment. I'll likely fork `userstack.ll` since the majority of lines need changes. Comment at: lld/wasm/Driver.cpp:385 +StringRef s = arg->getValue(); +if (s == "wasm32") + config->is64 = false; dschuff wrote: > any particular reason this shouldn't use the more conventional `-m32`/`m64`? > edit: nevermind, this is lld not clang. I'll defer to Sam's opinion on lld > flags. Yup, @sbc100 suggested this. Comment at: llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp:84 WasmSym->setGlobalType(wasm::WasmGlobalType{ -uint8_t(Subtarget.hasAddr64() ? wasm::WASM_TYPE_I64 - : wasm::WASM_TYPE_I32), +uint8_t(Subtarget.hasAddr64() && strcmp(Name, "__table_base") != 0 +? wasm::WASM_TYPE_I64 dschuff wrote: > should __table_base stay as i32? I'd think so, right? since it refers to table indices, not memory CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
dschuff added a comment. Yeah I think a 64-bit version of userstack.ll makes sense. (a fork or a second set of CHECKs, whatever you think would be cleaner). There's also `stack-alignment.ll` which covers dynamic stack adjustment. Comment at: lld/wasm/Driver.cpp:385 +StringRef s = arg->getValue(); +if (s == "wasm32") + config->is64 = false; any particular reason this shouldn't use the more conventional `-m32`/`m64`? edit: nevermind, this is lld not clang. I'll defer to Sam's opinion on lld flags. Comment at: llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp:84 WasmSym->setGlobalType(wasm::WasmGlobalType{ -uint8_t(Subtarget.hasAddr64() ? wasm::WASM_TYPE_I64 - : wasm::WASM_TYPE_I32), +uint8_t(Subtarget.hasAddr64() && strcmp(Name, "__table_base") != 0 +? wasm::WASM_TYPE_I64 should __table_base stay as i32? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
aardappel created this revision. aardappel added reviewers: sbc100, dschuff. Herald added subscribers: llvm-commits, cfe-commits, sunfish, aheejin, hiraditya, jgravelle-google. Herald added projects: clang, LLVM. aardappel updated this revision to Diff 271859. aardappel added a comment. This is a first iteration, probably needs more tests :) I was thinking of forking `userstack.ll` since it has most `__stack_pointer` tests, but I am not sure if it's that useful. Needs a test that uses the new wasm-ld flag. Opinions welcome. We have 6 globals, all of which except for __table_base are 64-bit under wasm64. https://reviews.llvm.org/D82130 Files: clang/lib/Driver/ToolChains/WebAssembly.cpp lld/wasm/Config.h lld/wasm/Driver.cpp lld/wasm/InputChunks.cpp lld/wasm/Options.td llvm/include/llvm/BinaryFormat/Wasm.h llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp llvm/test/MC/WebAssembly/stack-ptr.ll llvm/test/MC/WebAssembly/wasm64.s Index: llvm/test/MC/WebAssembly/wasm64.s === --- llvm/test/MC/WebAssembly/wasm64.s +++ llvm/test/MC/WebAssembly/wasm64.s @@ -51,6 +51,11 @@ i64.const 0 f32.store .L.str# relocatable offset! +### 64-bit SP + +global.get __stack_pointer +drop + end_function .section.rodata..L.str,"",@ @@ -62,7 +67,7 @@ .size .L.str, 24 .globaltype myglob64, i64 - +.globaltype __stack_pointer, i64 # CHECK: .functype test (i64) -> () @@ -155,6 +160,11 @@ # BIN-NEXT: Kind:GLOBAL # BIN-NEXT: GlobalType: I64 # BIN-NEXT: GlobalMutable: true +# BIN-NEXT: - Module: env +# BIN-NEXT: Field: __stack_pointer +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: GlobalType: I64 +# BIN-NEXT: GlobalMutable: true # BIN-NEXT: - Type:FUNCTION # BIN-NEXT: FunctionTypes: [ 0 ] # BIN-NEXT: - Type:DATACOUNT @@ -179,12 +189,15 @@ # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_LEB64 # BIN-NEXT: Index: 1 # BIN-NEXT: Offset: 0x0078 +# BIN-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB +# BIN-NEXT: Index: 3 +# BIN-NEXT: Offset: 0x0083 # BIN-NEXT: Functions: # BIN-NEXT: - Index: 0 # BIN-NEXT: Locals: # BIN-NEXT: - Type:I64 # BIN-NEXT: Count: 1 -# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A43420038020043200038020043428080808080808080800038020043238080808000380200434200380280808080808080808B +# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A434200380200432000380200434280808080808080808000380200432380808080003802004342003802808080808080808080002381808080001A0B # BIN-NEXT: - Type:DATA # BIN-NEXT: Relocations: # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_I64 @@ -217,6 +230,11 @@ # BIN-NEXT: Name:myglob64 # BIN-NEXT: Flags: [ UNDEFINED ] # BIN-NEXT: Global: 0 +# BIN-NEXT: - Index: 3 +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: Name:__stack_pointer +# BIN-NEXT: Flags: [ UNDEFINED ] +# BIN-NEXT: Global: 1 # BIN-NEXT: SegmentInfo: # BIN-NEXT: - Index: 0 # BIN-NEXT: Name:.rodata..L.str Index: llvm/test/MC/WebAssembly/stack-ptr.ll === --- llvm/test/MC/WebAssembly/stack-ptr.ll +++ llvm/test/MC/WebAssembly/stack-ptr.ll @@ -1,6 +1,5 @@ -; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s - -target triple = "wasm32-unknown-unknown" +; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK32 %s +; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK64 %s ; Function that uses explict stack, and should generate a reference to ; __stack_pointer, along with the corresponding reloction entry. @@ -15,7 +14,8 @@ ; CHECK: - Module: env ; CHECK: Field: __stack_pointer ; CHECK: Kind:GLOBAL -; CHECK: GlobalType:
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
aardappel updated this revision to Diff 271859. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 Files: clang/lib/Driver/ToolChains/WebAssembly.cpp lld/wasm/Config.h lld/wasm/Driver.cpp lld/wasm/InputChunks.cpp lld/wasm/Options.td llvm/include/llvm/BinaryFormat/Wasm.h llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyFrameLowering.h llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp llvm/test/MC/WebAssembly/stack-ptr.ll llvm/test/MC/WebAssembly/wasm64.s Index: llvm/test/MC/WebAssembly/wasm64.s === --- llvm/test/MC/WebAssembly/wasm64.s +++ llvm/test/MC/WebAssembly/wasm64.s @@ -51,6 +51,11 @@ i64.const 0 f32.store .L.str# relocatable offset! +### 64-bit SP + +global.get __stack_pointer +drop + end_function .section.rodata..L.str,"",@ @@ -62,7 +67,7 @@ .size .L.str, 24 .globaltype myglob64, i64 - +.globaltype __stack_pointer, i64 # CHECK: .functype test (i64) -> () @@ -155,6 +160,11 @@ # BIN-NEXT: Kind:GLOBAL # BIN-NEXT: GlobalType: I64 # BIN-NEXT: GlobalMutable: true +# BIN-NEXT: - Module: env +# BIN-NEXT: Field: __stack_pointer +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: GlobalType: I64 +# BIN-NEXT: GlobalMutable: true # BIN-NEXT: - Type:FUNCTION # BIN-NEXT: FunctionTypes: [ 0 ] # BIN-NEXT: - Type:DATACOUNT @@ -179,12 +189,15 @@ # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_LEB64 # BIN-NEXT: Index: 1 # BIN-NEXT: Offset: 0x0078 +# BIN-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB +# BIN-NEXT: Index: 3 +# BIN-NEXT: Offset: 0x0083 # BIN-NEXT: Functions: # BIN-NEXT: - Index: 0 # BIN-NEXT: Locals: # BIN-NEXT: - Type:I64 # BIN-NEXT: Count: 1 -# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A43420038020043200038020043428080808080808080800038020043238080808000380200434200380280808080808080808B +# BIN-NEXT: Body:42002A02001A20002A02001A42808080808080808080002A02001A2380808080002A02001A42002A02808080808080808080001A434200380200432000380200434280808080808080808000380200432380808080003802004342003802808080808080808080002381808080001A0B # BIN-NEXT: - Type:DATA # BIN-NEXT: Relocations: # BIN-NEXT: - Type:R_WASM_MEMORY_ADDR_I64 @@ -217,6 +230,11 @@ # BIN-NEXT: Name:myglob64 # BIN-NEXT: Flags: [ UNDEFINED ] # BIN-NEXT: Global: 0 +# BIN-NEXT: - Index: 3 +# BIN-NEXT: Kind:GLOBAL +# BIN-NEXT: Name:__stack_pointer +# BIN-NEXT: Flags: [ UNDEFINED ] +# BIN-NEXT: Global: 1 # BIN-NEXT: SegmentInfo: # BIN-NEXT: - Index: 0 # BIN-NEXT: Name:.rodata..L.str Index: llvm/test/MC/WebAssembly/stack-ptr.ll === --- llvm/test/MC/WebAssembly/stack-ptr.ll +++ llvm/test/MC/WebAssembly/stack-ptr.ll @@ -1,6 +1,5 @@ -; RUN: llc -filetype=obj %s -o - | obj2yaml | FileCheck %s - -target triple = "wasm32-unknown-unknown" +; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK32 %s +; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o - | obj2yaml | FileCheck --check-prefixes CHECK,CHK64 %s ; Function that uses explict stack, and should generate a reference to ; __stack_pointer, along with the corresponding reloction entry. @@ -15,7 +14,8 @@ ; CHECK: - Module: env ; CHECK: Field: __stack_pointer ; CHECK: Kind:GLOBAL -; CHECK: GlobalType: I32 +; CHK32: GlobalType: I32 +; CHK64: GlobalType: I64 ; CHECK: GlobalMutable: true ; CHECK: - Type:CODE ; CHECK: Relocations: Index: llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp === --- llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp +++ llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp @@ -248,7 +248,8 @@ } // Check for writes to __stack_pointer
[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals
aardappel added a comment. This is a first iteration, probably needs more tests :) I was thinking of forking `userstack.ll` since it has most `__stack_pointer` tests, but I am not sure if it's that useful. Needs a test that uses the new wasm-ld flag. Opinions welcome. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82130/new/ https://reviews.llvm.org/D82130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits