diff --git a/clang/lib/Basic/Targets/WebAssembly.cpp b/clang/lib/Basic/Targets/WebAssembly.cpp --- a/clang/lib/Basic/Targets/WebAssembly.cpp +++ b/clang/lib/Basic/Targets/WebAssembly.cpp @@ -112,6 +112,10 @@ bool WebAssemblyTargetInfo::initFeatureMap( llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector &FeaturesVec) const { + if (CPU == "generic") { + Features["nontrapping-fptoint"] = true; + } + if (CPU == "bleeding-edge") { Features["nontrapping-fptoint"] = true; Features["sign-ext"] = true; @@ -121,6 +125,7 @@ Features["tail-call"] = true; setSIMDLevel(Features, SIMD128); } + // Other targets do not consider user-configured features here, but while we // are actively developing new features it is useful to let user-configured // features control availability of builtins diff --git a/clang/test/CodeGen/builtins-wasm.c b/clang/test/CodeGen/builtins-wasm.c --- a/clang/test/CodeGen/builtins-wasm.c +++ b/clang/test/CodeGen/builtins-wasm.c @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -triple wasm32-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY32 -// RUN: %clang_cc1 -triple wasm64-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY64 -// RUN: not %clang_cc1 -triple wasm64-unknown-unknown -target-feature +nontrapping-fptoint -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s 2>&1 | FileCheck %s -check-prefixes MISSING-SIMD +// RUN: %clang_cc1 -triple wasm32-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY32 +// RUN: %clang_cc1 -triple wasm64-unknown-unknown -target-feature +unimplemented-simd128 -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY64 +// RUN: not %clang_cc1 -triple wasm64-unknown-unknown -target-feature +exception-handling -target-feature +bulk-memory -flax-vector-conversions=none -O3 -emit-llvm -o - %s 2>&1 | FileCheck %s -check-prefixes MISSING-SIMD // SIMD convenience types typedef char i8x16 __attribute((vector_size(16))); diff --git a/clang/test/Preprocessor/wasm-target-features.c b/clang/test/Preprocessor/wasm-target-features.c --- a/clang/test/Preprocessor/wasm-target-features.c +++ b/clang/test/Preprocessor/wasm-target-features.c @@ -1,3 +1,12 @@ +// RUN: %clang -E -dM %s -o - 2>&1 \ +// RUN: -target wasm32-unknown-unknown \ +// RUN: | FileCheck %s -check-prefix=DEFAULT +// RUN: %clang -E -dM %s -o - 2>&1 \ +// RUN: -target wasm64-unknown-unknown \ +// RUN: | FileCheck %s -check-prefix=DEFAULT + +// DEFAULT:#define __wasm_nontrapping_fptoint__ 1{{$}} + // RUN: %clang -E -dM %s -o - 2>&1 \ // RUN: -target wasm32-unknown-unknown -msimd128 \ // RUN: | FileCheck %s -check-prefix=SIMD128 @@ -17,13 +26,13 @@ // SIMD128-UNIMPLEMENTED:#define __wasm_unimplemented_simd128__ 1{{$}} // RUN: %clang -E -dM %s -o - 2>&1 \ -// RUN: -target wasm32-unknown-unknown -mnontrapping-fptoint \ -// RUN: | FileCheck %s -check-prefix=NONTRAPPING-FPTOINT +// RUN: -target wasm32-unknown-unknown -mno-nontrapping-fptoint \ +// RUN: | FileCheck %s -check-prefix=NO-NONTRAPPING-FPTOINT // RUN: %clang -E -dM %s -o - 2>&1 \ -// RUN: -target wasm64-unknown-unknown -mnontrapping-fptoint \ -// RUN: | FileCheck %s -check-prefix=NONTRAPPING-FPTOINT +// RUN: -target wasm64-unknown-unknown -mno-nontrapping-fptoint \ +// RUN: | FileCheck %s -check-prefix=NO-NONTRAPPING-FPTOINT // -// NONTRAPPING-FPTOINT:#define __wasm_nontrapping_fptoint__ 1{{$}} +// NO-NONTRAPPING-FPTOINT-NOT:#define __wasm_nontrapping_fptoint__ 1{{$}} // RUN: %clang -E -dM %s -o - 2>&1 \ // RUN: -target wasm32-unknown-unknown -msign-ext \ diff --git a/lld/test/wasm/alias.ll b/lld/test/wasm/alias.ll --- a/lld/test/wasm/alias.ll +++ b/lld/test/wasm/alias.ll @@ -62,4 +62,5 @@ ; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Name: _start -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/call-indirect.ll b/lld/test/wasm/call-indirect.ll --- a/lld/test/wasm/call-indirect.ll +++ b/lld/test/wasm/call-indirect.ll @@ -154,4 +154,5 @@ ; CHECK-NEXT: Name: _start ; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: Name: call_ptr -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/cxx-mangling.ll b/lld/test/wasm/cxx-mangling.ll --- a/lld/test/wasm/cxx-mangling.ll +++ b/lld/test/wasm/cxx-mangling.ll @@ -54,4 +54,5 @@ ; MANGLE-NEXT: Name: _Z3fooi ; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: Name: _start -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/data-layout.ll b/lld/test/wasm/data-layout.ll --- a/lld/test/wasm/data-layout.ll +++ b/lld/test/wasm/data-layout.ll @@ -1,5 +1,5 @@ -; RUN: llc -filetype=obj %p/Inputs/hello.ll -o %t.hello.o -; RUN: llc -filetype=obj %s -o %t.o +; RUN: llc -mcpu=mvp -filetype=obj %p/Inputs/hello.ll -o %t.hello.o +; RUN: llc -mcpu=mvp -filetype=obj %s -o %t.o target triple = "wasm32-unknown-unknown" diff --git a/lld/test/wasm/function-imports-first.ll b/lld/test/wasm/function-imports-first.ll --- a/lld/test/wasm/function-imports-first.ll +++ b/lld/test/wasm/function-imports-first.ll @@ -41,4 +41,5 @@ ; CHECK-NEXT: Name: _start ; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: Name: ret32 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/function-imports.ll b/lld/test/wasm/function-imports.ll --- a/lld/test/wasm/function-imports.ll +++ b/lld/test/wasm/function-imports.ll @@ -37,4 +37,5 @@ ; CHECK-NEXT: Name: ret32 ; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: Name: _start -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/gc-imports.ll b/lld/test/wasm/gc-imports.ll --- a/lld/test/wasm/gc-imports.ll +++ b/lld/test/wasm/gc-imports.ll @@ -46,7 +46,8 @@ ; CHECK-NEXT: Name: _start ; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: Name: use_undef_global -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features ; RUN: wasm-ld --no-gc-sections --allow-undefined \ ; RUN: -o %t1.no-gc.wasm %t.o %t_globals.o @@ -88,4 +89,5 @@ ; NO-GC-NEXT: Name: _start ; NO-GC-NEXT: - Index: 5 ; NO-GC-NEXT: Name: use_undef_global -; NO-GC-NEXT: ... +; NO-GC-NEXT: - Type: CUSTOM +; NO-GC-NEXT: Name: target_features diff --git a/lld/test/wasm/gc-sections.ll b/lld/test/wasm/gc-sections.ll --- a/lld/test/wasm/gc-sections.ll +++ b/lld/test/wasm/gc-sections.ll @@ -82,7 +82,8 @@ ; CHECK-NEXT: Name: _start ; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: Name: use_global -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features ; RUN: wasm-ld -print-gc-sections --no-gc-sections -o %t1.no-gc.wasm \ ; RUN: %t.o %t_globals.o @@ -150,7 +151,8 @@ ; NO-GC-NEXT: Name: _start ; NO-GC-NEXT: - Index: 4 ; NO-GC-NEXT: Name: use_global -; NO-GC-NEXT: ... +; NO-GC-NEXT: - Type: CUSTOM +; NO-GC-NEXT: Name: target_features ; RUN: not wasm-ld --gc-sections --relocatable -o %t1.no-gc.wasm %t.o 2>&1 | FileCheck %s -check-prefix=CHECK-ERROR ; CHECK-ERROR: error: -r and --gc-sections may not be used together diff --git a/lld/test/wasm/import-memory.test b/lld/test/wasm/import-memory.test --- a/lld/test/wasm/import-memory.test +++ b/lld/test/wasm/import-memory.test @@ -1,4 +1,4 @@ -# RUN: llc -filetype=obj %p/Inputs/start.ll -o %t.start.o +# RUN: llc -mcpu=mvp -filetype=obj %p/Inputs/start.ll -o %t.start.o # RUN: wasm-ld --import-memory -o %t.wasm %t.start.o # RUN: obj2yaml %t.wasm | FileCheck %s diff --git a/lld/test/wasm/init-fini.ll b/lld/test/wasm/init-fini.ll --- a/lld/test/wasm/init-fini.ll +++ b/lld/test/wasm/init-fini.ll @@ -127,7 +127,8 @@ ; CHECK-NEXT: Name: .Lcall_dtors.2002 ; CHECK-NEXT: - Index: 22 ; CHECK-NEXT: Name: .Lregister_call_dtors.2002 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features ; RUN: wasm-ld -r %t.o %t.global-ctor-dtor.o -o %t.reloc.wasm ; RUN: llvm-readobj --symbols --sections %t.reloc.wasm | FileCheck -check-prefix=RELOC %s diff --git a/lld/test/wasm/load-undefined.test b/lld/test/wasm/load-undefined.test --- a/lld/test/wasm/load-undefined.test +++ b/lld/test/wasm/load-undefined.test @@ -21,7 +21,8 @@ ; CHECK-NEXT: Name: ret64 ; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: Name: ret32 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features ; NO-LOAD: Name: name ; NO-LOAD-NEXT: FunctionNames: @@ -31,7 +32,8 @@ ; NO-LOAD-NEXT: Name: _start ; NO-LOAD-NEXT: - Index: 2 ; NO-LOAD-NEXT: Name: ret64 -; NO-LOAD-NEXT: ... +; NO-LOAD-NEXT: - Type: CUSTOM +; NO-LOAD-NEXT: Name: target_features ; Verify that referencing a symbol that is not found doesn't result in a link ; failure. This matches the behaviour of the ELF linker. diff --git a/lld/test/wasm/local-symbols.ll b/lld/test/wasm/local-symbols.ll --- a/lld/test/wasm/local-symbols.ll +++ b/lld/test/wasm/local-symbols.ll @@ -93,4 +93,5 @@ ; CHECK-NEXT: Name: baz ; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: Name: _start -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/locals-duplicate.test b/lld/test/wasm/locals-duplicate.test --- a/lld/test/wasm/locals-duplicate.test +++ b/lld/test/wasm/locals-duplicate.test @@ -208,7 +208,8 @@ ; CHECK-NEXT: Name: get_func2B ; CHECK-NEXT: - Index: 17 ; CHECK-NEXT: Name: get_func3B -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features ; RUN: wasm-ld -r --no-entry -o %t.reloc.wasm %t1.o %t2.o @@ -541,4 +542,5 @@ ; RELOC-NEXT: Name: get_func2B ; RELOC-NEXT: - Index: 17 ; RELOC-NEXT: Name: get_func3B -; RELOC-NEXT: ... +; RELOC-NEXT: - Type: CUSTOM +; RELOC-NEXT: Name: target_features diff --git a/lld/test/wasm/relocatable.ll b/lld/test/wasm/relocatable.ll --- a/lld/test/wasm/relocatable.ll +++ b/lld/test/wasm/relocatable.ll @@ -290,4 +290,5 @@ ; NORMAL-NEXT: Name: my_func ; NORMAL-NEXT: - Index: 5 ; NORMAL-NEXT: Name: func_comdat -; NORMAL-NEXT:... +; NORMAL-NEXT: - Type: CUSTOM +; NORMAL-NEXT: Name: target_features diff --git a/lld/test/wasm/signature-mismatch-export.ll b/lld/test/wasm/signature-mismatch-export.ll --- a/lld/test/wasm/signature-mismatch-export.ll +++ b/lld/test/wasm/signature-mismatch-export.ll @@ -27,4 +27,5 @@ ; CHECK-NEXT: Name: _start ; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: Name: ret32 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/signature-mismatch.ll b/lld/test/wasm/signature-mismatch.ll --- a/lld/test/wasm/signature-mismatch.ll +++ b/lld/test/wasm/signature-mismatch.ll @@ -47,5 +47,5 @@ ; YAML-NEXT: Name: ret32 ; YAML-NEXT: - Index: 3 ; YAML-NEXT: Name: call_ret32 -; YAML-NEXT: ... - +; YAML-NEXT: - Type: CUSTOM +; YAML-NEXT: Name: target_features diff --git a/lld/test/wasm/stack-pointer.ll b/lld/test/wasm/stack-pointer.ll --- a/lld/test/wasm/stack-pointer.ll +++ b/lld/test/wasm/stack-pointer.ll @@ -68,4 +68,5 @@ ; CHECK-NEXT: FunctionNames: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Name: _start -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/undefined-weak-call.ll b/lld/test/wasm/undefined-weak-call.ll --- a/lld/test/wasm/undefined-weak-call.ll +++ b/lld/test/wasm/undefined-weak-call.ll @@ -95,4 +95,5 @@ ; CHECK-NEXT: Name: 'undefined:weakFunc3' ; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: Name: callWeakFuncs -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/weak-alias-overide.ll b/lld/test/wasm/weak-alias-overide.ll --- a/lld/test/wasm/weak-alias-overide.ll +++ b/lld/test/wasm/weak-alias-overide.ll @@ -128,4 +128,5 @@ ; CHECK-NEXT: Name: call_alias_ptr ; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: Name: call_direct_ptr -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/weak-alias.ll b/lld/test/wasm/weak-alias.ll --- a/lld/test/wasm/weak-alias.ll +++ b/lld/test/wasm/weak-alias.ll @@ -120,7 +120,8 @@ ; CHECK-NEXT: Name: call_alias_ptr ; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: Name: call_direct_ptr -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features ; RUN: wasm-ld --relocatable %t.o %t2.o -o %t.reloc.o ; RUN: obj2yaml %t.reloc.o | FileCheck %s -check-prefix=RELOC @@ -286,4 +287,5 @@ ; RELOC-NEXT: Name: call_alias_ptr ; RELOC-NEXT: - Index: 5 ; RELOC-NEXT: Name: call_direct_ptr -; RELOC-NEXT: ... +; RELOC-NEXT: - Type: CUSTOM +; RELOC-NEXT: Name: target_features diff --git a/lld/test/wasm/weak-symbols.ll b/lld/test/wasm/weak-symbols.ll --- a/lld/test/wasm/weak-symbols.ll +++ b/lld/test/wasm/weak-symbols.ll @@ -114,4 +114,5 @@ ; CHECK-NEXT: Name: exportWeak1 ; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: Name: exportWeak2 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/lld/test/wasm/weak-undefined.ll b/lld/test/wasm/weak-undefined.ll --- a/lld/test/wasm/weak-undefined.ll +++ b/lld/test/wasm/weak-undefined.ll @@ -79,4 +79,5 @@ ; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: Locals: ; CHECK-NEXT: Body: 1081808080001A1080808080001A0B -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/llvm/lib/Target/WebAssembly/WebAssembly.td b/llvm/lib/Target/WebAssembly/WebAssembly.td --- a/llvm/lib/Target/WebAssembly/WebAssembly.td +++ b/llvm/lib/Target/WebAssembly/WebAssembly.td @@ -96,7 +96,7 @@ def : ProcessorModel<"mvp", NoSchedModel, []>; // Generic processor: latest stable version. -def : ProcessorModel<"generic", NoSchedModel, []>; +def : ProcessorModel<"generic", NoSchedModel, [FeatureNontrappingFPToInt]>; // Latest and greatest experimental version of WebAssembly. Bugs included! def : ProcessorModel<"bleeding-edge", NoSchedModel, diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -219,9 +219,14 @@ std::string getFeatureString(const FeatureBitset &Features) { std::string Ret; + FeatureBitset Defaults = + WasmTM->getSubtargetImpl(std::string(WasmTM->getTargetCPU()), "") + ->getFeatureBits(); for (const SubtargetFeatureKV &KV : WebAssemblyFeatureKV) { - if (Features[KV.Value]) + if (Features[KV.Value] && !Defaults[KV.Value]) Ret += (StringRef("+") + KV.Key + ",").str(); + if (!Features[KV.Value] && Defaults[KV.Value]) + Ret += (StringRef("-") + KV.Key + ",").str(); } return Ret; } diff --git a/llvm/test/CodeGen/WebAssembly/conv.ll b/llvm/test/CodeGen/WebAssembly/conv.ll --- a/llvm/test/CodeGen/WebAssembly/conv.ll +++ b/llvm/test/CodeGen/WebAssembly/conv.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+nontrapping-fptoint | FileCheck %s +; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s ; Test that basic conversion operations assemble as expected. diff --git a/llvm/test/CodeGen/WebAssembly/multivalue.ll b/llvm/test/CodeGen/WebAssembly/multivalue.ll --- a/llvm/test/CodeGen/WebAssembly/multivalue.ll +++ b/llvm/test/CodeGen/WebAssembly/multivalue.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -mattr=+multivalue,+tail-call | FileCheck %s -; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+multivalue,+tail-call | FileCheck %s --check-prefix REGS +; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -mcpu=mvp -mattr=+multivalue,+tail-call | FileCheck %s +; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -mcpu=mvp -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+multivalue,+tail-call | FileCheck %s --check-prefix REGS ; RUN: llc < %s --filetype=obj -mattr=+multivalue,+tail-call | obj2yaml | FileCheck %s --check-prefix OBJ ; Test that the multivalue calls, returns, function types, and block diff --git a/llvm/test/CodeGen/WebAssembly/mutable-globals.ll b/llvm/test/CodeGen/WebAssembly/mutable-globals.ll --- a/llvm/test/CodeGen/WebAssembly/mutable-globals.ll +++ b/llvm/test/CodeGen/WebAssembly/mutable-globals.ll @@ -10,7 +10,7 @@ } ; CHECK-LABEL: .custom_section.target_features -; CHECK-NEXT: .int8 1 +; CHECK-NEXT: .int8 2 ; CHECK-NEXT: .int8 43 ; CHECK-NEXT: .int8 15 ; CHECK-NEXT: .ascii "mutable-globals" diff --git a/llvm/test/CodeGen/WebAssembly/reference-types.ll b/llvm/test/CodeGen/WebAssembly/reference-types.ll --- a/llvm/test/CodeGen/WebAssembly/reference-types.ll +++ b/llvm/test/CodeGen/WebAssembly/reference-types.ll @@ -8,7 +8,10 @@ ret void } -; CHECK: .int8 1 +; CHECK: .int8 2 +; CHECK-NEXT: .int8 43 +; CHECK-NEXT: .int8 19 +; CHECK-NEXT: .ascii "nontrapping-fptoint" ; CHECK-NEXT: .int8 43 ; CHECK-NEXT: .int8 15 ; CHECK-NEXT: .ascii "reference-types" diff --git a/llvm/test/CodeGen/WebAssembly/tailcall.ll b/llvm/test/CodeGen/WebAssembly/tailcall.ll --- a/llvm/test/CodeGen/WebAssembly/tailcall.ll +++ b/llvm/test/CodeGen/WebAssembly/tailcall.ll @@ -259,7 +259,10 @@ } ; CHECK-LABEL: .section .custom_section.target_features -; CHECK-NEXT: .int8 1 +; CHECK-NEXT: .int8 2 +; CHECK-NEXT: .int8 43 +; CHECK-NEXT: .int8 19 +; CHECK-NEXT: .ascii "nontrapping-fptoint" ; CHECK-NEXT: .int8 43 ; CHECK-NEXT: .int8 9 ; CHECK-NEXT: .ascii "tail-call" diff --git a/llvm/test/CodeGen/WebAssembly/target-features-tls.ll b/llvm/test/CodeGen/WebAssembly/target-features-tls.ll --- a/llvm/test/CodeGen/WebAssembly/target-features-tls.ll +++ b/llvm/test/CodeGen/WebAssembly/target-features-tls.ll @@ -11,16 +11,22 @@ ; -bulk-memory ; NO-BULK-MEM-LABEL: .custom_section.target_features,"",@ -; NO-BULK-MEM-NEXT: .int8 1 +; NO-BULK-MEM-NEXT: .int8 2 ; NO-BULK-MEM-NEXT: .int8 45 ; NO-BULK-MEM-NEXT: .int8 7 ; NO-BULK-MEM-NEXT: .ascii "atomics" +; NO-BULK-MEM-NEXT: .int8 43 +; NO-BULK-MEM-NEXT: .int8 19 +; NO-BULK-MEM-NEXT: .ascii "nontrapping-fptoint" ; NO-BULK-MEM-NEXT: .bss.foo,"",@ ; +bulk-memory ; BULK-MEM-LABEL: .custom_section.target_features,"",@ -; BULK-MEM-NEXT: .int8 1 +; BULK-MEM-NEXT: .int8 2 ; BULK-MEM-NEXT: .int8 43 ; BULK-MEM-NEXT: .int8 11 ; BULK-MEM-NEXT: .ascii "bulk-memory" +; BULK-MEM-NEXT: .int8 43 +; BULK-MEM-NEXT: .int8 19 +; BULK-MEM-NEXT: .ascii "nontrapping-fptoint" ; BULK-MEM-NEXT: .tbss.foo,"",@ diff --git a/llvm/test/MC/WebAssembly/array-fill.ll b/llvm/test/MC/WebAssembly/array-fill.ll --- a/llvm/test/MC/WebAssembly/array-fill.ll +++ b/llvm/test/MC/WebAssembly/array-fill.ll @@ -24,4 +24,3 @@ ; CHECK-NEXT: Name: .data ; CHECK-NEXT: Alignment: 0 ; CHECK-NEXT: Flags: [ ] -; CHECK-NEXT: ... diff --git a/llvm/test/MC/WebAssembly/assembler-binary.ll b/llvm/test/MC/WebAssembly/assembler-binary.ll --- a/llvm/test/MC/WebAssembly/assembler-binary.ll +++ b/llvm/test/MC/WebAssembly/assembler-binary.ll @@ -87,4 +87,5 @@ ; CHECK-NEXT: Name: bar ; CHECK-NEXT: Flags: [ UNDEFINED ] ; CHECK-NEXT: Function: 0 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/llvm/test/MC/WebAssembly/basic-assembly-errors.s b/llvm/test/MC/WebAssembly/basic-assembly-errors.s --- a/llvm/test/MC/WebAssembly/basic-assembly-errors.s +++ b/llvm/test/MC/WebAssembly/basic-assembly-errors.s @@ -1,4 +1,4 @@ -# RUN: not llvm-mc -triple=wasm32-unknown-unknown -mattr=+simd128,+nontrapping-fptoint,+exception-handling < %s 2>&1 | FileCheck %s +# RUN: not llvm-mc -triple=wasm32-unknown-unknown -mattr=+simd128,+exception-handling < %s 2>&1 | FileCheck %s # CHECK: invalid operand for instruction # (must be 0.0 or similar) diff --git a/llvm/test/MC/WebAssembly/basic-assembly.s b/llvm/test/MC/WebAssembly/basic-assembly.s --- a/llvm/test/MC/WebAssembly/basic-assembly.s +++ b/llvm/test/MC/WebAssembly/basic-assembly.s @@ -1,6 +1,6 @@ -# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+atomics,+unimplemented-simd128,+nontrapping-fptoint,+exception-handling < %s | FileCheck %s +# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+atomics,+unimplemented-simd128,+exception-handling < %s | FileCheck %s # Check that it converts to .o without errors, but don't check any output: -# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+atomics,+unimplemented-simd128,+nontrapping-fptoint,+exception-handling -o %t.o < %s +# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+atomics,+unimplemented-simd128,+exception-handling -o %t.o < %s empty_func: diff --git a/llvm/test/MC/WebAssembly/bss.ll b/llvm/test/MC/WebAssembly/bss.ll --- a/llvm/test/MC/WebAssembly/bss.ll +++ b/llvm/test/MC/WebAssembly/bss.ll @@ -78,4 +78,5 @@ ; CHECK-NEXT: Name: .bss.bar ; CHECK-NEXT: Alignment: 0 ; CHECK-NEXT: Flags: [ ] -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/llvm/test/MC/WebAssembly/comdat.ll b/llvm/test/MC/WebAssembly/comdat.ll --- a/llvm/test/MC/WebAssembly/comdat.ll +++ b/llvm/test/MC/WebAssembly/comdat.ll @@ -122,4 +122,5 @@ ; CHECK-NEXT: Index: 3 ; CHECK-NEXT: - Kind: DATA ; CHECK-NEXT: Index: 0 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/llvm/test/MC/WebAssembly/data-section.s b/llvm/test/MC/WebAssembly/data-section.s --- a/llvm/test/MC/WebAssembly/data-section.s +++ b/llvm/test/MC/WebAssembly/data-section.s @@ -1,6 +1,6 @@ -# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+unimplemented-simd128,+nontrapping-fptoint,+exception-handling < %s | FileCheck %s +# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+unimplemented-simd128,+exception-handling < %s | FileCheck %s # Check that it converts to .o without errors: -# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+unimplemented-simd128,+nontrapping-fptoint,+exception-handling < %s | obj2yaml | FileCheck -check-prefix=BIN %s +# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+unimplemented-simd128,+exception-handling < %s | obj2yaml | FileCheck -check-prefix=BIN %s # Minimal test for data sections. diff --git a/llvm/test/MC/WebAssembly/debug-info.ll b/llvm/test/MC/WebAssembly/debug-info.ll --- a/llvm/test/MC/WebAssembly/debug-info.ll +++ b/llvm/test/MC/WebAssembly/debug-info.ll @@ -129,6 +129,12 @@ ; CHECK-NEXT: Offset: 1013 ; CHECK-NEXT: Name: producers ; CHECK-NEXT: } +; CHECK-NEXT: Section { +; CHECK-NEXT: Type: CUSTOM (0x0) +; CHECK-NEXT: Size: 22 +; CHECK-NEXT: Offset: 1106 +; CHECK-NEXT: Name: target_features +; CHECK-NEXT: } ; CHECK-NEXT:] ; CHECK-NEXT:Relocations [ ; CHECK-NEXT: Section (7) DATA { diff --git a/llvm/test/MC/WebAssembly/explicit-sections.ll b/llvm/test/MC/WebAssembly/explicit-sections.ll --- a/llvm/test/MC/WebAssembly/explicit-sections.ll +++ b/llvm/test/MC/WebAssembly/explicit-sections.ll @@ -70,4 +70,5 @@ ; CHECK-NEXT: Name: .sec2 ; CHECK-NEXT: Alignment: 3 ; CHECK-NEXT: Flags: [ ] -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll --- a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll +++ b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll @@ -183,4 +183,5 @@ ; CHECK-NEXT: Symbol: 10 ; CHECK-NEXT: - Priority: 65535 ; CHECK-NEXT: Symbol: 7 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features diff --git a/llvm/test/MC/WebAssembly/objdump.s b/llvm/test/MC/WebAssembly/objdump.s --- a/llvm/test/MC/WebAssembly/objdump.s +++ b/llvm/test/MC/WebAssembly/objdump.s @@ -1,4 +1,4 @@ -# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -o %t.o -mattr=+simd128,+nontrapping-fptoint,+exception-handling < %s +# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -o %t.o -mattr=+simd128,+exception-handling < %s # RUN: llvm-objdump --triple=wasm32-unknown-unknown -d %t.o | FileCheck %s test0: diff --git a/llvm/test/MC/WebAssembly/type-index.s b/llvm/test/MC/WebAssembly/type-index.s --- a/llvm/test/MC/WebAssembly/type-index.s +++ b/llvm/test/MC/WebAssembly/type-index.s @@ -1,6 +1,6 @@ -# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+unimplemented-simd128,+nontrapping-fptoint,+exception-handling < %s | FileCheck %s +# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+unimplemented-simd128,+exception-handling < %s | FileCheck %s # Check that it converts to .o without errors: -# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+unimplemented-simd128,+nontrapping-fptoint,+exception-handling < %s | obj2yaml | FileCheck -check-prefix=BIN %s +# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -mattr=+unimplemented-simd128,+exception-handling < %s | obj2yaml | FileCheck -check-prefix=BIN %s # Minimal test for type indices in call_indirect. diff --git a/llvm/test/MC/WebAssembly/visibility.ll b/llvm/test/MC/WebAssembly/visibility.ll --- a/llvm/test/MC/WebAssembly/visibility.ll +++ b/llvm/test/MC/WebAssembly/visibility.ll @@ -25,4 +25,5 @@ ; CHECK-NEXT: Name: hiddenVis ; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ] ; CHECK-NEXT: Function: 1 -; CHECK-NEXT: ... +; CHECK-NEXT: - Type: CUSTOM +; CHECK-NEXT: Name: target_features