[PATCH] D82130: [WebAssembly] Adding 64-bit versions of __stack_pointer and other globals

2020-06-25 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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

2020-06-25 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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

2020-06-25 Thread Derek Schuff via Phabricator via cfe-commits
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

2020-06-25 Thread Sam Clegg via Phabricator via cfe-commits
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

2020-06-25 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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

2020-06-22 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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

2020-06-22 Thread Derek Schuff via Phabricator via cfe-commits
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

2020-06-22 Thread Sam Clegg via Phabricator via cfe-commits
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

2020-06-22 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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

2020-06-18 Thread Derek Schuff via Phabricator via cfe-commits
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

2020-06-18 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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

2020-06-18 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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

2020-06-18 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
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