https://github.com/dschuff updated https://github.com/llvm/llvm-project/pull/184901
>From b1f6c79811e535664152227d6a02687af15123f0 Mon Sep 17 00:00:00 2001 From: Derek Schuff <[email protected]> Date: Thu, 5 Mar 2026 22:11:28 +0000 Subject: [PATCH 1/2] [WebAssembly] Clang support for acquire-release atomics Add the feature to the clang target, including driver flags and preprocessor defines. --- clang/include/clang/Options/Options.td | 2 ++ clang/lib/Basic/Targets/WebAssembly.cpp | 11 +++++++++++ clang/lib/Basic/Targets/WebAssembly.h | 1 + clang/test/Driver/wasm-features.c | 6 ++++++ clang/test/Preprocessor/wasm-target-features.c | 11 +++++++++++ 5 files changed, 31 insertions(+) diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index fe7169423b6bf..9d3ec8a173472 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -5688,6 +5688,8 @@ def mnontrapping_fptoint : Flag<["-"], "mnontrapping-fptoint">, Group<m_wasm_Fea def mno_nontrapping_fptoint : Flag<["-"], "mno-nontrapping-fptoint">, Group<m_wasm_Features_Group>; def mreference_types : Flag<["-"], "mreference-types">, Group<m_wasm_Features_Group>; def mno_reference_types : Flag<["-"], "mno-reference-types">, Group<m_wasm_Features_Group>; +def mrelaxed_atomics : Flag<["-"], "mrelaxed-atomics">, Group<m_wasm_Features_Group>; +def mno_relaxed_atomics : Flag<["-"], "mno-relaxed-atomics">, Group<m_wasm_Features_Group>; def mrelaxed_simd : Flag<["-"], "mrelaxed-simd">, Group<m_wasm_Features_Group>; def mno_relaxed_simd : Flag<["-"], "mno-relaxed-simd">, Group<m_wasm_Features_Group>; def msign_ext : Flag<["-"], "msign-ext">, Group<m_wasm_Features_Group>; diff --git a/clang/lib/Basic/Targets/WebAssembly.cpp b/clang/lib/Basic/Targets/WebAssembly.cpp index daaefd9a1267c..4bb3d521cd9fd 100644 --- a/clang/lib/Basic/Targets/WebAssembly.cpp +++ b/clang/lib/Basic/Targets/WebAssembly.cpp @@ -66,6 +66,7 @@ bool WebAssemblyTargetInfo::hasFeature(StringRef Feature) const { .Case("mutable-globals", HasMutableGlobals) .Case("nontrapping-fptoint", HasNontrappingFPToInt) .Case("reference-types", HasReferenceTypes) + .Case("relaxed-atomics", HasRelaxedAtomics) .Case("relaxed-simd", SIMDLevel >= RelaxedSIMD) .Case("sign-ext", HasSignExt) .Case("simd128", SIMDLevel >= SIMD128) @@ -110,6 +111,8 @@ void WebAssemblyTargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__wasm_nontrapping_fptoint__"); if (HasReferenceTypes) Builder.defineMacro("__wasm_reference_types__"); + if (HasRelaxedAtomics) + Builder.defineMacro("__wasm_relaxed_atomics__"); if (SIMDLevel >= RelaxedSIMD) Builder.defineMacro("__wasm_relaxed_simd__"); if (HasSignExt) @@ -332,6 +335,14 @@ bool WebAssemblyTargetInfo::handleTargetFeatures( HasReferenceTypes = false; continue; } + if (Feature == "+relaxed-atomics") { + HasRelaxedAtomics = true; + continue; + } + if (Feature == "-relaxed-atomics") { + HasRelaxedAtomics = false; + continue; + } if (Feature == "+relaxed-simd") { SIMDLevel = std::max(SIMDLevel, RelaxedSIMD); continue; diff --git a/clang/lib/Basic/Targets/WebAssembly.h b/clang/lib/Basic/Targets/WebAssembly.h index 3a0823bd717d9..8128dd96068a0 100644 --- a/clang/lib/Basic/Targets/WebAssembly.h +++ b/clang/lib/Basic/Targets/WebAssembly.h @@ -72,6 +72,7 @@ class LLVM_LIBRARY_VISIBILITY WebAssemblyTargetInfo : public TargetInfo { bool HasMutableGlobals = false; bool HasNontrappingFPToInt = false; bool HasReferenceTypes = false; + bool HasRelaxedAtomics = false; bool HasSignExt = false; bool HasTailCall = false; bool HasWideArithmetic = false; diff --git a/clang/test/Driver/wasm-features.c b/clang/test/Driver/wasm-features.c index 89ced36eeffab..9e523aa5b53b6 100644 --- a/clang/test/Driver/wasm-features.c +++ b/clang/test/Driver/wasm-features.c @@ -77,6 +77,12 @@ // REFERENCE-TYPES: "-target-feature" "+reference-types" // NO-REFERENCE-TYPES: "-target-feature" "-reference-types" +// RUN: %clang --target=wasm32-unknown-unknown -### %s -mrelaxed-atomics 2>&1 | FileCheck %s -check-prefix=RELAXED-ATOMICS +// RUN: %clang --target=wasm32-unknown-unknown -### %s -mno-relaxed-atomics 2>&1 | FileCheck %s -check-prefix=NO-RELAXED-ATOMICS + +// RELAXED-ATOMICS: "-target-feature" "+relaxed-atomics" +// NO-RELAXED-ATOMICS: "-target-feature" "-relaxed-atomics" + // RUN: %clang --target=wasm32-unknown-unknown -### %s -mrelaxed-simd 2>&1 | FileCheck %s -check-prefix=RELAXED-SIMD // RUN: %clang --target=wasm32-unknown-unknown -### %s -mno-relaxed-simd 2>&1 | FileCheck %s -check-prefix=NO-RELAXED-SIMD diff --git a/clang/test/Preprocessor/wasm-target-features.c b/clang/test/Preprocessor/wasm-target-features.c index 3edaf9e7cd594..aff7442773531 100644 --- a/clang/test/Preprocessor/wasm-target-features.c +++ b/clang/test/Preprocessor/wasm-target-features.c @@ -106,6 +106,15 @@ // // REFERENCE-TYPES: #define __wasm_reference_types__ 1{{$}} +// RUN: %clang -E -dM %s -o - 2>&1 \ +// RUN: -target wasm32-unknown-unknown -mrelaxed-atomics \ +// RUN: | FileCheck %s -check-prefix=RELAXED-ATOMICS +// RUN: %clang -E -dM %s -o - 2>&1 \ +// RUN: -target wasm64-unknown-unknown -mrelaxed-atomics \ +// RUN: | FileCheck %s -check-prefix=RELAXED-ATOMICS +// +// RELAXED-ATOMICS: #define __wasm_relaxed_atomics__ 1{{$}} + // RUN: %clang -E -dM %s -o - 2>&1 \ // RUN: -target wasm32-unknown-unknown -mrelaxed-simd \ // RUN: | FileCheck %s -check-prefix=RELAXED-SIMD @@ -160,6 +169,7 @@ // MVP-NOT: #define __wasm_mutable_globals__ 1{{$}} // MVP-NOT: #define __wasm_nontrapping_fptoint__ 1{{$}} // MVP-NOT: #define __wasm_reference_types__ 1{{$}} +// MVP-NOT: #define __wasm_relaxed_atomics__ 1{{$}} // MVP-NOT: #define __wasm_relaxed_simd__ 1{{$}} // MVP-NOT: #define __wasm_sign_ext__ 1{{$}} // MVP-NOT: #define __wasm_simd128__ 1{{$}} @@ -193,6 +203,7 @@ // GENERIC-NOT: #define __wasm__fp16__ 1{{$}} // GENERIC-NOT: #define __wasm_gc__ 1{{$}} // GENERIC-NOT: #define __wasm_multimemory__ 1{{$}} +// GENERIC-NOT: #define __wasm_relaxed_atomics__ 1{{$}} // GENERIC-NOT: #define __wasm_relaxed_simd__ 1{{$}} // GENERIC-NOT: #define __wasm_simd128__ 1{{$}} // GENERIC-NOT: #define __wasm_tail_call__ 1{{$}} >From 006ba47e332062b1870f63600ed5d17468477100 Mon Sep 17 00:00:00 2001 From: Derek Schuff <[email protected]> Date: Mon, 9 Mar 2026 18:50:28 +0000 Subject: [PATCH 2/2] review comment --- clang/lib/Basic/Targets/WebAssembly.cpp | 1 + clang/test/Preprocessor/wasm-target-features.c | 1 + 2 files changed, 2 insertions(+) diff --git a/clang/lib/Basic/Targets/WebAssembly.cpp b/clang/lib/Basic/Targets/WebAssembly.cpp index 4bb3d521cd9fd..ba3ff11ad4ea9 100644 --- a/clang/lib/Basic/Targets/WebAssembly.cpp +++ b/clang/lib/Basic/Targets/WebAssembly.cpp @@ -203,6 +203,7 @@ bool WebAssemblyTargetInfo::initFeatureMap( Features["fp16"] = true; Features["gc"] = true; Features["multimemory"] = true; + Features["relaxed-atomics"] = true; Features["tail-call"] = true; Features["wide-arithmetic"] = true; setSIMDLevel(Features, RelaxedSIMD, true); diff --git a/clang/test/Preprocessor/wasm-target-features.c b/clang/test/Preprocessor/wasm-target-features.c index aff7442773531..f95ba21e066ba 100644 --- a/clang/test/Preprocessor/wasm-target-features.c +++ b/clang/test/Preprocessor/wasm-target-features.c @@ -227,6 +227,7 @@ // BLEEDING-EDGE-INCLUDE-DAG: #define __wasm_mutable_globals__ 1{{$}} // BLEEDING-EDGE-INCLUDE-DAG: #define __wasm_nontrapping_fptoint__ 1{{$}} // BLEEDING-EDGE-INCLUDE-DAG: #define __wasm_reference_types__ 1{{$}} +// BLEEDING-EDGE-INCLUDE-DAG: #define __wasm_relaxed_atomics__ 1{{$}} // BLEEDING-EDGE-INCLUDE-DAG: #define __wasm_relaxed_simd__ 1{{$}} // BLEEDING-EDGE-INCLUDE-DAG: #define __wasm_sign_ext__ 1{{$}} // BLEEDING-EDGE-INCLUDE-DAG: #define __wasm_simd128__ 1{{$}} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
