[PATCH] D88603: [WebAssembly] Add support for DWARF type units

2020-10-01 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
aardappel added inline comments.



Comment at: llvm/test/DebugInfo/WebAssembly/dwarf-headers.ll:47
+;
+; SINGLE-4: .debug_types contents:
+; SINGLE-4: 0x: Type Unit: {{.*}} version = 0x0004, abbr_offset

I guess this doesn't actually test that only one copy of these remain after 
linking? That's already tested in LLD?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88603/new/

https://reviews.llvm.org/D88603

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D85685: Support dwarf fission for wasm object files

2020-09-17 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
aardappel added inline comments.



Comment at: llvm/lib/MC/WasmObjectWriter.cpp:1313
+  }
+  return writeOneObject(Asm, Layout, DwoMode::AllSections);
+}

Nit picking on this because I can't find anything else to complain about:
This line would be more readable inside an `else`.
I know LLVM prefers "early out" (and so do I), but here IsSplitDwarf is really 
not an early out case since it is the most complex case, and !IsSplitDwarf is 
not great for early out either because it is the common case.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85685/new/

https://reviews.llvm.org/D85685

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D85685: [WIP] Support dwarf fission for wasm object files

2020-08-10 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
aardappel accepted this revision.
aardappel added a comment.
This revision is now accepted and ready to land.

Nice, fairly unintrusive actually. If you desperately wanted to fix the need 
for changing `W` dynamically, you could instead make it allocate a second 
`WasmObjectWriter` to write the `dwo` version? :)




Comment at: llvm/lib/MC/MCAsmBackend.cpp:66
+  default:
 report_fatal_error("dwo only supported with ELF");
+  }

change error message


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85685/new/

https://reviews.llvm.org/D85685

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D83713: [WebAssembly] Triple::wasm64 related cleanup

2020-07-16 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG29f8c9f6c25d: [WebAssembly] Triple::wasm64 related cleanup 
(authored by aardappel).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83713/new/

https://reviews.llvm.org/D83713

Files:
  clang/lib/Driver/ToolChain.cpp
  lld/wasm/Config.h
  lld/wasm/Driver.cpp
  lld/wasm/InputChunks.cpp
  lld/wasm/InputFiles.cpp
  lld/wasm/SyntheticSections.cpp
  lld/wasm/Writer.cpp
  llvm/include/llvm/Object/Wasm.h
  llvm/lib/Object/WasmObjectFile.cpp

Index: llvm/lib/Object/WasmObjectFile.cpp
===
--- llvm/lib/Object/WasmObjectFile.cpp
+++ llvm/lib/Object/WasmObjectFile.cpp
@@ -957,6 +957,8 @@
   break;
 case wasm::WASM_EXTERNAL_MEMORY:
   Im.Memory = readLimits(Ctx);
+  if (Im.Memory.Flags & wasm::WASM_LIMITS_FLAG_IS_64)
+HasMemory64 = true;
   break;
 case wasm::WASM_EXTERNAL_TABLE:
   Im.Table = readTable(Ctx);
@@ -1019,7 +1021,10 @@
   uint32_t Count = readVaruint32(Ctx);
   Memories.reserve(Count);
   while (Count--) {
-Memories.push_back(readLimits(Ctx));
+auto Limits = readLimits(Ctx);
+if (Limits.Flags & wasm::WASM_LIMITS_FLAG_IS_64)
+  HasMemory64 = true;
+Memories.push_back(Limits);
   }
   if (Ctx.Ptr != Ctx.End)
 return make_error("Memory section ended prematurely",
@@ -1576,11 +1581,15 @@
   return section_iterator(SectionRef(Ref, this));
 }
 
-uint8_t WasmObjectFile::getBytesInAddress() const { return 4; }
+uint8_t WasmObjectFile::getBytesInAddress() const {
+  return HasMemory64 ? 8 : 4;
+}
 
 StringRef WasmObjectFile::getFileFormatName() const { return "WASM"; }
 
-Triple::ArchType WasmObjectFile::getArch() const { return Triple::wasm32; }
+Triple::ArchType WasmObjectFile::getArch() const {
+  return HasMemory64 ? Triple::wasm64 : Triple::wasm32;
+}
 
 SubtargetFeatures WasmObjectFile::getFeatures() const {
   return SubtargetFeatures();
Index: llvm/include/llvm/Object/Wasm.h
===
--- llvm/include/llvm/Object/Wasm.h
+++ llvm/include/llvm/Object/Wasm.h
@@ -282,6 +282,7 @@
   bool HasLinkingSection = false;
   bool HasDylinkSection = false;
   bool SeenCodeSection = false;
+  bool HasMemory64 = false;
   wasm::WasmLinkingData LinkingData;
   uint32_t NumImportedGlobals = 0;
   uint32_t NumImportedFunctions = 0;
Index: lld/wasm/Writer.cpp
===
--- lld/wasm/Writer.cpp
+++ lld/wasm/Writer.cpp
@@ -304,7 +304,8 @@
   if (WasmSym::heapBase)
 WasmSym::heapBase->setVirtualAddress(memoryPtr);
 
-  uint64_t maxMemorySetting = 1ULL << (config->is64 ? 48 : 32);
+  uint64_t maxMemorySetting = 1ULL
+  << (config->is64.getValueOr(false) ? 48 : 32);
 
   if (config->initialMemory != 0) {
 if (config->initialMemory != alignTo(config->initialMemory, WasmPageSize))
Index: lld/wasm/SyntheticSections.cpp
===
--- lld/wasm/SyntheticSections.cpp
+++ lld/wasm/SyntheticSections.cpp
@@ -139,7 +139,7 @@
 }
 if (config->sharedMemory)
   import.Memory.Flags |= WASM_LIMITS_FLAG_IS_SHARED;
-if (config->is64)
+if (config->is64.getValueOr(false))
   import.Memory.Flags |= WASM_LIMITS_FLAG_IS_64;
 writeImport(os, import);
   }
@@ -236,7 +236,7 @@
 flags |= WASM_LIMITS_FLAG_HAS_MAX;
   if (config->sharedMemory)
 flags |= WASM_LIMITS_FLAG_IS_SHARED;
-  if (config->is64)
+  if (config->is64.getValueOr(false))
 flags |= WASM_LIMITS_FLAG_IS_64;
   writeUleb128(os, flags, "memory limits flags");
   writeUleb128(os, numMemoryPages, "initial pages");
Index: lld/wasm/InputFiles.cpp
===
--- lld/wasm/InputFiles.cpp
+++ lld/wasm/InputFiles.cpp
@@ -576,10 +576,16 @@
   obj = check(lto::InputFile::create(MemoryBufferRef(
   mb.getBuffer(), saver.save(archiveName + mb.getBufferIdentifier();
   Triple t(obj->getTargetTriple());
-  if (t.getArch() != Triple::wasm32) {
-error(toString(this) + ": machine type must be wasm32");
+  if (!t.isWasm()) {
+error(toString(this) + ": machine type must be wasm32 or wasm64");
 return;
   }
+  bool is64 = t.getArch() == Triple::wasm64;
+  if (config->is64.hasValue() && *config->is64 != is64) {
+error(toString(this) + ": machine type for all bitcode files must match");
+return;
+  }
+  config->is64 = is64;
   std::vector keptComdats;
   for (StringRef s : obj->getComdatTable())
 keptComdats.push_back(symtab->addComdat(s));
Index: lld/wasm/InputChunks.cpp
===
--- lld/wasm/InputChunks.cpp
+++ lld/wasm/InputChunks.cpp
@@ -335,10 +335,12 @@
   LLVM_DEBUG(dbgs() << "generating runtime relocations: " << getName()
 << " count=" << reloc

[PATCH] D83713: [WebAssembly] Triple::wasm64 related cleanup

2020-07-13 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
aardappel updated this revision to Diff 277627.
aardappel added a comment.

Made LLD `is64` optional, so we can know if is set consistently.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83713/new/

https://reviews.llvm.org/D83713

Files:
  clang/lib/Driver/ToolChain.cpp
  lld/wasm/Config.h
  lld/wasm/Driver.cpp
  lld/wasm/InputChunks.cpp
  lld/wasm/InputFiles.cpp
  lld/wasm/SyntheticSections.cpp
  lld/wasm/Writer.cpp
  llvm/include/llvm/Object/Wasm.h
  llvm/lib/Object/WasmObjectFile.cpp

Index: llvm/lib/Object/WasmObjectFile.cpp
===
--- llvm/lib/Object/WasmObjectFile.cpp
+++ llvm/lib/Object/WasmObjectFile.cpp
@@ -957,6 +957,8 @@
   break;
 case wasm::WASM_EXTERNAL_MEMORY:
   Im.Memory = readLimits(Ctx);
+  if (Im.Memory.Flags & wasm::WASM_LIMITS_FLAG_IS_64)
+HasMemory64 = true;
   break;
 case wasm::WASM_EXTERNAL_TABLE:
   Im.Table = readTable(Ctx);
@@ -1019,7 +1021,10 @@
   uint32_t Count = readVaruint32(Ctx);
   Memories.reserve(Count);
   while (Count--) {
-Memories.push_back(readLimits(Ctx));
+auto Limits = readLimits(Ctx);
+if (Limits.Flags & wasm::WASM_LIMITS_FLAG_IS_64)
+  HasMemory64 = true;
+Memories.push_back(Limits);
   }
   if (Ctx.Ptr != Ctx.End)
 return make_error("Memory section ended prematurely",
@@ -1576,11 +1581,15 @@
   return section_iterator(SectionRef(Ref, this));
 }
 
-uint8_t WasmObjectFile::getBytesInAddress() const { return 4; }
+uint8_t WasmObjectFile::getBytesInAddress() const {
+  return HasMemory64 ? 8 : 4;
+}
 
 StringRef WasmObjectFile::getFileFormatName() const { return "WASM"; }
 
-Triple::ArchType WasmObjectFile::getArch() const { return Triple::wasm32; }
+Triple::ArchType WasmObjectFile::getArch() const {
+  return HasMemory64 ? Triple::wasm64 : Triple::wasm32;
+}
 
 SubtargetFeatures WasmObjectFile::getFeatures() const {
   return SubtargetFeatures();
Index: llvm/include/llvm/Object/Wasm.h
===
--- llvm/include/llvm/Object/Wasm.h
+++ llvm/include/llvm/Object/Wasm.h
@@ -282,6 +282,7 @@
   bool HasLinkingSection = false;
   bool HasDylinkSection = false;
   bool SeenCodeSection = false;
+  bool HasMemory64 = false;
   wasm::WasmLinkingData LinkingData;
   uint32_t NumImportedGlobals = 0;
   uint32_t NumImportedFunctions = 0;
Index: lld/wasm/Writer.cpp
===
--- lld/wasm/Writer.cpp
+++ lld/wasm/Writer.cpp
@@ -304,7 +304,8 @@
   if (WasmSym::heapBase)
 WasmSym::heapBase->setVirtualAddress(memoryPtr);
 
-  uint64_t maxMemorySetting = 1ULL << (config->is64 ? 48 : 32);
+  uint64_t maxMemorySetting = 1ULL
+  << (config->is64.getValueOr(false) ? 48 : 32);
 
   if (config->initialMemory != 0) {
 if (config->initialMemory != alignTo(config->initialMemory, WasmPageSize))
Index: lld/wasm/SyntheticSections.cpp
===
--- lld/wasm/SyntheticSections.cpp
+++ lld/wasm/SyntheticSections.cpp
@@ -139,7 +139,7 @@
 }
 if (config->sharedMemory)
   import.Memory.Flags |= WASM_LIMITS_FLAG_IS_SHARED;
-if (config->is64)
+if (config->is64.getValueOr(false))
   import.Memory.Flags |= WASM_LIMITS_FLAG_IS_64;
 writeImport(os, import);
   }
@@ -236,7 +236,7 @@
 flags |= WASM_LIMITS_FLAG_HAS_MAX;
   if (config->sharedMemory)
 flags |= WASM_LIMITS_FLAG_IS_SHARED;
-  if (config->is64)
+  if (config->is64.getValueOr(false))
 flags |= WASM_LIMITS_FLAG_IS_64;
   writeUleb128(os, flags, "memory limits flags");
   writeUleb128(os, numMemoryPages, "initial pages");
Index: lld/wasm/InputFiles.cpp
===
--- lld/wasm/InputFiles.cpp
+++ lld/wasm/InputFiles.cpp
@@ -576,10 +576,16 @@
   obj = check(lto::InputFile::create(MemoryBufferRef(
   mb.getBuffer(), saver.save(archiveName + mb.getBufferIdentifier();
   Triple t(obj->getTargetTriple());
-  if (t.getArch() != Triple::wasm32) {
-error(toString(this) + ": machine type must be wasm32");
+  if (!t.isWasm()) {
+error(toString(this) + ": machine type must be wasm32 or wasm64");
 return;
   }
+  bool is64 = t.getArch() == Triple::wasm64;
+  if (config->is64.hasValue() && *config->is64 != is64) {
+error(toString(this) + ": machine type for all bitcode files must match");
+return;
+  }
+  config->is64 = is64;
   std::vector keptComdats;
   for (StringRef s : obj->getComdatTable())
 keptComdats.push_back(symtab->addComdat(s));
Index: lld/wasm/InputChunks.cpp
===
--- lld/wasm/InputChunks.cpp
+++ lld/wasm/InputChunks.cpp
@@ -335,10 +335,12 @@
   LLVM_DEBUG(dbgs() << "generating runtime relocations: " << getName()
 << " count=" << relocations.size() << "\n");
 
-  unsigned opcode_ptr_const =
-  config->is6

[PATCH] D83713: [WebAssembly] Triple::wasm64 related cleanup

2020-07-13 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
aardappel created this revision.
aardappel added reviewers: dschuff, sbc100.
Herald added subscribers: llvm-commits, cfe-commits, sunfish, aheejin, 
hiraditya, jgravelle-google.
Herald added projects: clang, LLVM.

A few cases that didn't cover Triple::wasm64 correctly.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D83713

Files:
  clang/lib/Driver/ToolChain.cpp
  lld/wasm/InputFiles.cpp
  llvm/include/llvm/Object/Wasm.h
  llvm/lib/Object/WasmObjectFile.cpp


Index: llvm/lib/Object/WasmObjectFile.cpp
===
--- llvm/lib/Object/WasmObjectFile.cpp
+++ llvm/lib/Object/WasmObjectFile.cpp
@@ -957,6 +957,7 @@
   break;
 case wasm::WASM_EXTERNAL_MEMORY:
   Im.Memory = readLimits(Ctx);
+  if (Im.Memory.Flags & wasm::WASM_LIMITS_FLAG_IS_64) HasMemory64 = true;
   break;
 case wasm::WASM_EXTERNAL_TABLE:
   Im.Table = readTable(Ctx);
@@ -1019,7 +1020,9 @@
   uint32_t Count = readVaruint32(Ctx);
   Memories.reserve(Count);
   while (Count--) {
-Memories.push_back(readLimits(Ctx));
+auto Limits = readLimits(Ctx);
+if (Limits.Flags & wasm::WASM_LIMITS_FLAG_IS_64) HasMemory64 = true;
+Memories.push_back(Limits);
   }
   if (Ctx.Ptr != Ctx.End)
 return make_error("Memory section ended prematurely",
@@ -1576,11 +1579,15 @@
   return section_iterator(SectionRef(Ref, this));
 }
 
-uint8_t WasmObjectFile::getBytesInAddress() const { return 4; }
+uint8_t WasmObjectFile::getBytesInAddress() const {
+  return HasMemory64 ? 8 : 4;
+}
 
 StringRef WasmObjectFile::getFileFormatName() const { return "WASM"; }
 
-Triple::ArchType WasmObjectFile::getArch() const { return Triple::wasm32; }
+Triple::ArchType WasmObjectFile::getArch() const {
+  return HasMemory64 ? Triple::wasm64 : Triple::wasm32;
+}
 
 SubtargetFeatures WasmObjectFile::getFeatures() const {
   return SubtargetFeatures();
Index: llvm/include/llvm/Object/Wasm.h
===
--- llvm/include/llvm/Object/Wasm.h
+++ llvm/include/llvm/Object/Wasm.h
@@ -282,6 +282,7 @@
   bool HasLinkingSection = false;
   bool HasDylinkSection = false;
   bool SeenCodeSection = false;
+  bool HasMemory64 = false;
   wasm::WasmLinkingData LinkingData;
   uint32_t NumImportedGlobals = 0;
   uint32_t NumImportedFunctions = 0;
Index: lld/wasm/InputFiles.cpp
===
--- lld/wasm/InputFiles.cpp
+++ lld/wasm/InputFiles.cpp
@@ -576,10 +576,11 @@
   obj = check(lto::InputFile::create(MemoryBufferRef(
   mb.getBuffer(), saver.save(archiveName + mb.getBufferIdentifier();
   Triple t(obj->getTargetTriple());
-  if (t.getArch() != Triple::wasm32) {
-error(toString(this) + ": machine type must be wasm32");
+  if (!t.isWasm()) {
+error(toString(this) + ": machine type must be wasm32 or wasm64");
 return;
   }
+  config->is64 = t.getArch() == Triple::wasm64;
   std::vector keptComdats;
   for (StringRef s : obj->getComdatTable())
 keptComdats.push_back(symtab->addComdat(s));
Index: clang/lib/Driver/ToolChain.cpp
===
--- clang/lib/Driver/ToolChain.cpp
+++ clang/lib/Driver/ToolChain.cpp
@@ -632,8 +632,7 @@
Triple.getArch() == llvm::Triple::armeb ||
Triple.getArch() == llvm::Triple::thumb ||
Triple.getArch() == llvm::Triple::thumbeb ||
-   Triple.getArch() == llvm::Triple::wasm32 ||
-   Triple.getArch() == llvm::Triple::wasm64;
+   Triple.isWasm();
   } else if (Model == "posix")
 return true;
 
@@ -1000,8 +999,7 @@
   if (getTriple().getArch() == llvm::Triple::x86 ||
   getTriple().getArch() == llvm::Triple::x86_64 ||
   getTriple().getArch() == llvm::Triple::arm ||
-  getTriple().getArch() == llvm::Triple::wasm32 ||
-  getTriple().getArch() == llvm::Triple::wasm64 || getTriple().isAArch64())
+  getTriple().isWasm() || getTriple().isAArch64())
 Res |= SanitizerKind::CFIICall;
   if (getTriple().getArch() == llvm::Triple::x86_64 || getTriple().isAArch64())
 Res |= SanitizerKind::ShadowCallStack;


Index: llvm/lib/Object/WasmObjectFile.cpp
===
--- llvm/lib/Object/WasmObjectFile.cpp
+++ llvm/lib/Object/WasmObjectFile.cpp
@@ -957,6 +957,7 @@
   break;
 case wasm::WASM_EXTERNAL_MEMORY:
   Im.Memory = readLimits(Ctx);
+  if (Im.Memory.Flags & wasm::WASM_LIMITS_FLAG_IS_64) HasMemory64 = true;
   break;
 case wasm::WASM_EXTERNAL_TABLE:
   Im.Table = readTable(Ctx);
@@ -1019,7 +1020,9 @@
   uint32_t Count = readVaruint32(Ctx);
   Memories.reserve(Count);
   while (Count--) {
-Memories.push_back(readLimits(Ctx));
+auto Limits = readLimits(Ctx);
+if (Limits.Flags & wasm::WASM_LIMITS_FLAG_IS_64) HasMemory64 = true;
+Memories.push_back(Limits);
   }
   if (Ctx.Ptr != Ctx.End)
 return make_error("

[PATCH] D82821: [WebAssembly] Added 64-bit memory.grow/size/init/copy/fill

2020-07-07 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
This revision was not accepted when it landed; it landed in state "Needs 
Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG16d83c395a1f: [WebAssembly] Added 64-bit 
memory.grow/size/copy/fill (authored by aardappel).
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Changed prior to commit:
  https://reviews.llvm.org/D82821?vs=275258&id=275627#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D82821/new/

https://reviews.llvm.org/D82821

Files:
  clang/include/clang/Basic/BuiltinsWebAssembly.def
  clang/lib/CodeGen/CGBuiltin.cpp
  clang/test/CodeGen/builtins-wasm.c
  llvm/include/llvm/IR/IntrinsicsWebAssembly.td
  llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td
  llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td
  llvm/lib/Target/WebAssembly/WebAssemblySelectionDAGInfo.cpp
  llvm/test/CodeGen/WebAssembly/bulk-memory-intrinsics.ll
  llvm/test/CodeGen/WebAssembly/bulk-memory64.ll
  llvm/test/CodeGen/WebAssembly/memory-addr64.ll
  llvm/test/MC/WebAssembly/bulk-memory-encodings.s

Index: llvm/test/MC/WebAssembly/bulk-memory-encodings.s
===
--- llvm/test/MC/WebAssembly/bulk-memory-encodings.s
+++ llvm/test/MC/WebAssembly/bulk-memory-encodings.s
@@ -1,4 +1,5 @@
 # RUN: llvm-mc -show-encoding -triple=wasm32-unknown-unknown -mattr=+bulk-memory < %s | FileCheck %s
+# RUN: llvm-mc -show-encoding -triple=wasm64-unknown-unknown -mattr=+bulk-memory < %s | FileCheck %s
 
 main:
 .functype main () -> ()
Index: llvm/test/CodeGen/WebAssembly/memory-addr64.ll
===
--- /dev/null
+++ llvm/test/CodeGen/WebAssembly/memory-addr64.ll
@@ -0,0 +1,27 @@
+; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s
+
+; Test that basic memory operations assemble as expected with 64-bit addresses.
+
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+target triple = "wasm64-unknown-unknown"
+
+declare i64 @llvm.wasm.memory.size.i64(i32) nounwind readonly
+declare i64 @llvm.wasm.memory.grow.i64(i32, i64) nounwind
+
+; CHECK-LABEL: memory_size:
+; CHECK-NEXT: .functype memory_size () -> (i64){{$}}
+; CHECK-NEXT: memory.size $push0=, 0{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i64 @memory_size() {
+  %a = call i64 @llvm.wasm.memory.size.i64(i32 0)
+  ret i64 %a
+}
+
+; CHECK-LABEL: memory_grow:
+; CHECK-NEXT: .functype memory_grow (i64) -> (i64){{$}}
+; CHECK: memory.grow $push0=, 0, $0{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i64 @memory_grow(i64 %n) {
+  %a = call i64 @llvm.wasm.memory.grow.i64(i32 0, i64 %n)
+  ret i64 %a
+}
Index: llvm/test/CodeGen/WebAssembly/bulk-memory64.ll
===
--- /dev/null
+++ llvm/test/CodeGen/WebAssembly/bulk-memory64.ll
@@ -0,0 +1,210 @@
+; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+bulk-memory | FileCheck %s --check-prefixes CHECK,BULK-MEM
+; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=-bulk-memory | FileCheck %s --check-prefixes CHECK,NO-BULK-MEM
+
+; Test that basic bulk memory codegen works correctly
+
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+target triple = "wasm64-unknown-unknown"
+
+declare void @llvm.memcpy.p0i8.p0i8.i8(i8*, i8*, i8, i1)
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i1)
+declare void @llvm.memcpy.p0i32.p0i32.i64(i32*, i32*, i64, i1)
+
+declare void @llvm.memmove.p0i8.p0i8.i8(i8*, i8*, i8, i1)
+declare void @llvm.memmove.p0i8.p0i8.i64(i8*, i8*, i64, i1)
+declare void @llvm.memmove.p0i32.p0i32.i64(i32*, i32*, i64, i1)
+
+declare void @llvm.memset.p0i8.i8(i8*, i8, i8, i1)
+declare void @llvm.memset.p0i8.i64(i8*, i8, i64, i1)
+declare void @llvm.memset.p0i32.i64(i32*, i8, i64, i1)
+
+; CHECK-LABEL: memcpy_i8:
+; NO-BULK-MEM-NOT: memory.copy
+; BULK-MEM-NEXT: .functype memcpy_i8 (i64, i64, i32) -> ()
+; BULK-MEM-NEXT: i64.extend_i32_u $push0=, $2
+; BULK-MEM-NEXT: memory.copy 0, 0, $0, $1, $pop0
+; BULK-MEM-NEXT: return
+define void @memcpy_i8(i8* %dest, i8* %src, i8 zeroext %len) {
+  call void @llvm.memcpy.p0i8.p0i8.i8(i8* %dest, i8* %src, i8 %len, i1 0)
+  ret void
+}
+
+; CHECK-LABEL: memmove_i8:
+; NO-BULK-MEM-NOT: memory.copy
+; BULK-MEM-NEXT: .functype memmove_i8 (i64, i64, i32) -> ()
+; BULK-MEM-NEXT: i64.extend_i32_u $push0=, $2
+; BULK-MEM-NEXT: memory.copy 0, 0, $0, $1, $pop0
+; BULK-MEM-NEXT: return
+define void @memmove_i8(i8* %dest, i8* %src, i8 zeroext %len) {
+  call void @llvm.memmove.p0i8.p0i8.i8(i8* %dest, i8* %src, i8 %len, i1 0)
+  ret void
+}
+
+; CHECK-LABEL: memset_i8:
+; NO-BULK-MEM-NOT: memory.fill
+; BULK-MEM-NEXT

[PATCH] D82821: [WebAssembly] Added 64-bit memory.grow/size/init/copy/fill

2020-07-06 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG16d83c395a1f: [WebAssembly] Added 64-bit 
memory.grow/size/copy/fill (authored by aardappel).
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Changed prior to commit:
  https://reviews.llvm.org/D82821?vs=275785&id=275804#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D82821/new/

https://reviews.llvm.org/D82821

Files:
  clang/include/clang/Basic/BuiltinsWebAssembly.def
  clang/lib/CodeGen/CGBuiltin.cpp
  clang/test/CodeGen/builtins-wasm.c
  llvm/include/llvm/IR/IntrinsicsWebAssembly.td
  llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td
  llvm/lib/Target/WebAssembly/WebAssemblyInstrMemory.td
  llvm/lib/Target/WebAssembly/WebAssemblySelectionDAGInfo.cpp
  llvm/test/CodeGen/WebAssembly/bulk-memory-intrinsics.ll
  llvm/test/CodeGen/WebAssembly/bulk-memory64.ll
  llvm/test/CodeGen/WebAssembly/memory-addr64.ll
  llvm/test/MC/WebAssembly/bulk-memory-encodings.s

Index: llvm/test/MC/WebAssembly/bulk-memory-encodings.s
===
--- llvm/test/MC/WebAssembly/bulk-memory-encodings.s
+++ llvm/test/MC/WebAssembly/bulk-memory-encodings.s
@@ -1,4 +1,5 @@
 # RUN: llvm-mc -show-encoding -triple=wasm32-unknown-unknown -mattr=+bulk-memory < %s | FileCheck %s
+# RUN: llvm-mc -show-encoding -triple=wasm64-unknown-unknown -mattr=+bulk-memory < %s | FileCheck %s
 
 main:
 .functype main () -> ()
Index: llvm/test/CodeGen/WebAssembly/memory-addr64.ll
===
--- /dev/null
+++ llvm/test/CodeGen/WebAssembly/memory-addr64.ll
@@ -0,0 +1,27 @@
+; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s
+
+; Test that basic memory operations assemble as expected with 64-bit addresses.
+
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+target triple = "wasm64-unknown-unknown"
+
+declare i64 @llvm.wasm.memory.size.i64(i32) nounwind readonly
+declare i64 @llvm.wasm.memory.grow.i64(i32, i64) nounwind
+
+; CHECK-LABEL: memory_size:
+; CHECK-NEXT: .functype memory_size () -> (i64){{$}}
+; CHECK-NEXT: memory.size $push0=, 0{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i64 @memory_size() {
+  %a = call i64 @llvm.wasm.memory.size.i64(i32 0)
+  ret i64 %a
+}
+
+; CHECK-LABEL: memory_grow:
+; CHECK-NEXT: .functype memory_grow (i64) -> (i64){{$}}
+; CHECK: memory.grow $push0=, 0, $0{{$}}
+; CHECK-NEXT: return $pop0{{$}}
+define i64 @memory_grow(i64 %n) {
+  %a = call i64 @llvm.wasm.memory.grow.i64(i32 0, i64 %n)
+  ret i64 %a
+}
Index: llvm/test/CodeGen/WebAssembly/bulk-memory64.ll
===
--- /dev/null
+++ llvm/test/CodeGen/WebAssembly/bulk-memory64.ll
@@ -0,0 +1,210 @@
+; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+bulk-memory | FileCheck %s --check-prefixes CHECK,BULK-MEM
+; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=-bulk-memory | FileCheck %s --check-prefixes CHECK,NO-BULK-MEM
+
+; Test that basic bulk memory codegen works correctly
+
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+target triple = "wasm64-unknown-unknown"
+
+declare void @llvm.memcpy.p0i8.p0i8.i8(i8*, i8*, i8, i1)
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i1)
+declare void @llvm.memcpy.p0i32.p0i32.i64(i32*, i32*, i64, i1)
+
+declare void @llvm.memmove.p0i8.p0i8.i8(i8*, i8*, i8, i1)
+declare void @llvm.memmove.p0i8.p0i8.i64(i8*, i8*, i64, i1)
+declare void @llvm.memmove.p0i32.p0i32.i64(i32*, i32*, i64, i1)
+
+declare void @llvm.memset.p0i8.i8(i8*, i8, i8, i1)
+declare void @llvm.memset.p0i8.i64(i8*, i8, i64, i1)
+declare void @llvm.memset.p0i32.i64(i32*, i8, i64, i1)
+
+; CHECK-LABEL: memcpy_i8:
+; NO-BULK-MEM-NOT: memory.copy
+; BULK-MEM-NEXT: .functype memcpy_i8 (i64, i64, i32) -> ()
+; BULK-MEM-NEXT: i64.extend_i32_u $push0=, $2
+; BULK-MEM-NEXT: memory.copy 0, 0, $0, $1, $pop0
+; BULK-MEM-NEXT: return
+define void @memcpy_i8(i8* %dest, i8* %src, i8 zeroext %len) {
+  call void @llvm.memcpy.p0i8.p0i8.i8(i8* %dest, i8* %src, i8 %len, i1 0)
+  ret void
+}
+
+; CHECK-LABEL: memmove_i8:
+; NO-BULK-MEM-NOT: memory.copy
+; BULK-MEM-NEXT: .functype memmove_i8 (i64, i64, i32) -> ()
+; BULK-MEM-NEXT: i64.extend_i32_u $push0=, $2
+; BULK-MEM-NEXT: memory.copy 0, 0, $0, $1, $pop0
+; BULK-MEM-NEXT: return
+define void @memmove_i8(i8* %dest, i8* %src, i8 zeroext %len) {
+  call void @llvm.memmove.p0i8.p0i8.i8(i8* %dest, i8* %src, i8 %len, i1 0)
+  ret void
+}
+
+; CHECK-LABEL: memset_i8:
+; NO-BULK-MEM-NOT: memory.fill
+; BULK-MEM-NEXT: .functype memset_i8 (i64, i32, i32) -> ()
+; BULK-MEM-NEXT: i64.extend_i32_u $pus

[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&id=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: llvm/test/CodeGen/WebAssembly/userstac

[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: GlobalTyp

[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 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 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:  I32

[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 global

[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


[PATCH] D53482: Add clang-format stability check with FormatTests

2019-11-07 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
aardappel added a comment.

@MyDeveloperDay thanks for your thoughts.. while `-stable` would be helpful 
once you know you have the issue (or to permanently turn on in a git 
pre-submit), it does not help developers that don't even know this is a thing, 
and waste a bunch of time figuring out what is going on. In fact, it took me 
longer to figure out simply because I assumed it is unlikely that 
`clang-format` has such a bug :)

It might almost make sense in reverse: `-stable` by default, and have a 
`-un-stable` for those users where `clang-format` becomes a performance 
bottleneck :) But once you admit that, might as well fix the core problem 
instead.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53482/new/

https://reviews.llvm.org/D53482



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53482: Add clang-format stability check with FormatTests

2019-11-04 Thread Wouter van Oortmerssen via Phabricator via cfe-commits
aardappel added a comment.

@krasimir first you say that fixing it is hard, then when someone wants to 
attempt, that it is not necessary?

Plenty of people run `clang-format` in automated fashion as part of some 
pipeline, seems to me results ping-ponging between two formattings and 
cluttering commits would be pretty bad.

I just ran into this bug (https://bugs.llvm.org/show_bug.cgi?id=39280) and now 
instructions to my contributors are going to have to be: please run 
`clang-format` twice :)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53482/new/

https://reviews.llvm.org/D53482



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits