[WebAssembly] support Memory64 in target_features section

Differential Revision: https://reviews.llvm.org/D112266
This commit is contained in:
Wouter van Oortmerssen 2021-10-21 13:44:54 -07:00
parent 97ddf49e43
commit 5694dbccc3
3 changed files with 30 additions and 0 deletions

View File

@ -503,6 +503,15 @@ void WebAssemblyAsmPrinter::EmitTargetFeatures(Module &M) {
// This pseudo-feature tells the linker whether shared memory would be safe
EmitFeature("shared-mem");
// This is an "architecture", not a "feature", but we emit it as such for
// the benefit of tools like Binaryen and consistency with other producers.
// FIXME: Subtarget is null here, so can't Subtarget->hasAddr64() ?
if (M.getDataLayout().getMaxPointerSize() == 8) {
// Can't use EmitFeature since "wasm-feature-memory64" is not a module
// flag.
EmittedFeatures.push_back({wasm::WASM_FEATURE_PREFIX_USED, "memory64"});
}
if (EmittedFeatures.size() == 0)
return;

View File

@ -0,0 +1,15 @@
; RUN: llc < %s | FileCheck %s
; Test that wasm64 is properly emitted into the target features section
target triple = "wasm64-unknown-unknown"
define void @foo() {
ret void
}
; CHECK-LABEL: .custom_section.target_features
; CHECK-NEXT: .int8 1
; CHECK-NEXT: .int8 43
; CHECK-NEXT: .int8 8
; CHECK-NEXT: .ascii "memory64"

View File

@ -129,6 +129,12 @@
; CHECK-NEXT: Offset: 1073
; CHECK-NEXT: Name: producers
; CHECK-NEXT: }
; CHECK-NEXT: Section {
; CHECK-NEXT: Type: CUSTOM (0x0)
; CHECK-NEXT: Size: 11
; CHECK-NEXT: Offset: 1166
; CHECK-NEXT: Name: target_features
; CHECK-NEXT: }
; CHECK-NEXT: ]
; CHECK-NEXT: Relocations [
; CHECK-NEXT: Section (7) DATA {