tlively created this revision. tlively added reviewers: aheejin, dschuff. Herald added subscribers: llvm-commits, cfe-commits, jdoerfert, sunfish, hiraditya, jgravelle-google, sbc100. Herald added projects: clang, LLVM.
This feature is not actually used for anything in the WebAssembly backend, but adding it allows users to get it into the target features sections of their objects, which makes these objects future-compatible. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D60013 Files: clang/include/clang/Driver/Options.td clang/lib/Basic/Targets/WebAssembly.cpp clang/lib/Basic/Targets/WebAssembly.h clang/test/Preprocessor/wasm-target-features.c llvm/lib/Target/WebAssembly/WebAssembly.td llvm/lib/Target/WebAssembly/WebAssemblySubtarget.h llvm/test/CodeGen/WebAssembly/mutable-globals.ll
Index: llvm/test/CodeGen/WebAssembly/mutable-globals.ll =================================================================== --- /dev/null +++ llvm/test/CodeGen/WebAssembly/mutable-globals.ll @@ -0,0 +1,16 @@ +; RUN: llc < %s -mattr=+mutable-globals | FileCheck %s + +; Test that mutable globals is properly emitted into the target features section + +target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +define void @foo() { + ret void +} + +; CHECK-LABEL: .custom_section.target_features +; CHECK-NEXT: .int8 1 +; CHECK-NEXT: .int8 43 +; CHECK-NEXT: .int8 15 +; CHECK-NEXT: .ascii "mutable-globals" Index: llvm/lib/Target/WebAssembly/WebAssemblySubtarget.h =================================================================== --- llvm/lib/Target/WebAssembly/WebAssemblySubtarget.h +++ llvm/lib/Target/WebAssembly/WebAssemblySubtarget.h @@ -44,6 +44,7 @@ bool HasSignExt = false; bool HasExceptionHandling = false; bool HasBulkMemory = false; + bool HasMutableGlobals = false; /// String name of used CPU. std::string CPUString; @@ -97,6 +98,7 @@ bool hasSignExt() const { return HasSignExt; } bool hasExceptionHandling() const { return HasExceptionHandling; } bool hasBulkMemory() const { return HasBulkMemory; } + bool hasMutableGlobals() const { return HasMutableGlobals; } /// Parses features string setting specified subtarget options. Definition of /// function is auto generated by tblgen. Index: llvm/lib/Target/WebAssembly/WebAssembly.td =================================================================== --- llvm/lib/Target/WebAssembly/WebAssembly.td +++ llvm/lib/Target/WebAssembly/WebAssembly.td @@ -51,6 +51,10 @@ SubtargetFeature<"bulk-memory", "HasBulkMemory", "true", "Enable bulk memory operations">; +def FeatureMutableGlobals : + SubtargetFeature<"mutable-globals", "HasMutableGlobals", "true", + "Enable mutable globals">; + //===----------------------------------------------------------------------===// // Architectures. //===----------------------------------------------------------------------===// Index: clang/test/Preprocessor/wasm-target-features.c =================================================================== --- clang/test/Preprocessor/wasm-target-features.c +++ clang/test/Preprocessor/wasm-target-features.c @@ -70,6 +70,15 @@ // // PTHREAD:#define __wasm_atomics__ 1{{$}} +// RUN: %clang -E -dM %s -o - 2>&1 \ +// RUN: -target wasm32-unknown-unknown -mmutable-globals \ +// RUN: | FileCheck %s -check-prefix=MUTABLE-GLOBALS +// RUN: %clang -E -dM %s -o - 2>&1 \ +// RUN: -target wasm64-unknown-unknown -mmutable-globals \ +// RUN: | FileCheck %s -check-prefix=MUTABLE-GLOBALS +// +// MUTABLE-GLOBALS:#define __wasm_mutable_globals__ 1{{$}} + // RUN: %clang -E -dM %s -o - 2>&1 \ // RUN: -target wasm32-unknown-unknown -mcpu=mvp \ // RUN: | FileCheck %s -check-prefix=MVP @@ -84,6 +93,7 @@ // MVP-NOT:#define __wasm_exception_handling__ // MVP-NOT:#define __wasm_bulk_memory__ // MVP-NOT:#define __wasm_atomics__ +// MVP-NOT:#define __wasm_mutable_globals__ // RUN: %clang -E -dM %s -o - 2>&1 \ // RUN: -target wasm32-unknown-unknown -mcpu=bleeding-edge \ @@ -96,6 +106,7 @@ // BLEEDING-EDGE-DAG:#define __wasm_sign_ext__ 1{{$}} // BLEEDING-EDGE-DAG:#define __wasm_simd128__ 1{{$}} // BLEEDING-EDGE-DAG:#define __wasm_atomics__ 1{{$}} +// BLEEDING-EDGE-DAG:#define __wasm_mutable_globals__ 1{{$}} // BLEEDING-EDGE-NOT:#define __wasm_unimplemented_simd128__ 1{{$}} // RUN: %clang -E -dM %s -o - 2>&1 \ Index: clang/lib/Basic/Targets/WebAssembly.h =================================================================== --- clang/lib/Basic/Targets/WebAssembly.h +++ clang/lib/Basic/Targets/WebAssembly.h @@ -35,6 +35,7 @@ bool HasExceptionHandling = false; bool HasBulkMemory = false; bool HasAtomics = false; + bool HasMutableGlobals = false; public: explicit WebAssemblyTargetInfo(const llvm::Triple &T, const TargetOptions &) Index: clang/lib/Basic/Targets/WebAssembly.cpp =================================================================== --- clang/lib/Basic/Targets/WebAssembly.cpp +++ clang/lib/Basic/Targets/WebAssembly.cpp @@ -42,6 +42,7 @@ .Case("exception-handling", HasExceptionHandling) .Case("bulk-memory", HasBulkMemory) .Case("atomics", HasAtomics) + .Case("mutable-globals", HasMutableGlobals) .Default(false); } @@ -71,6 +72,8 @@ Builder.defineMacro("__wasm_bulk_memory__"); if (HasAtomics) Builder.defineMacro("__wasm_atomics__"); + if (HasMutableGlobals) + Builder.defineMacro("__wasm_mutable_globals__"); } void WebAssemblyTargetInfo::setSIMDLevel(llvm::StringMap<bool> &Features, @@ -94,6 +97,7 @@ Features["nontrapping-fptoint"] = true; Features["sign-ext"] = true; Features["atomics"] = true; + Features["mutable-globals"] = true; setSIMDLevel(Features, SIMD128); } // Other targets do not consider user-configured features here, but while we @@ -110,6 +114,8 @@ Features["bulk-memory"] = true; if (HasAtomics) Features["atomics"] = true; + if (HasMutableGlobals) + Features["mutable-globals"] = true; return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); } @@ -173,6 +179,14 @@ HasAtomics = false; continue; } + if (Feature == "+mutable-globals") { + HasMutableGlobals = true; + continue; + } + if (Feature == "-mutable-globals") { + HasMutableGlobals = false; + continue; + } Diags.Report(diag::err_opt_not_valid_with_opt) << Feature << "-target-feature"; Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2177,6 +2177,8 @@ def mno_atomics : Flag<["-"], "mno-atomics">, Group<m_wasm_Features_Group>; def mbulk_memory : Flag<["-"], "mbulk-memory">, Group<m_wasm_Features_Group>; def mno_bulk_memory : Flag<["-"], "mno-bulk-memory">, Group<m_wasm_Features_Group>; +def mmutable_globals : Flag<["-"], "mmutable-globals">, Group<m_wasm_Features_Group>; +def mno_mutable_globals : Flag<["-"], "mno-mutable-globals">, Group<m_wasm_Features_Group>; def mamdgpu_debugger_abi : Joined<["-"], "mamdgpu-debugger-abi=">, Flags<[HelpHidden]>,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits