r355112 - [WebAssembly] Remove uses of ThreadModel
Thomas Lively via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 28 10:39:08 PST 2019
Author: tlively
Date: Thu Feb 28 10:39:08 2019
New Revision: 355112
URL: http://llvm.org/viewvc/llvm-project?rev=355112&view=rev
Log:
[WebAssembly] Remove uses of ThreadModel
Summary:
In the clang UI, replaces -mthread-model posix with -matomics as the
source of truth on threading. In the backend, replaces
-thread-model=posix with the atomics target feature, which is now
collected on the WebAssemblyTargetMachine along with all other used
features. These collected features will also be used to emit the
target features section in the future.
The default configuration for the backend is thread-model=posix and no
atomics, which was previously an invalid configuration. This change
makes the default valid because the thread model is ignored.
A side effect of this change is that objects are never emitted with
passive segments. It will instead be up to the linker to decide
whether sections should be active or passive based on whether atomics
are used in the final link.
Reviewers: aheejin, sbc100, dschuff
Subscribers: mehdi_amini, jgravelle-google, hiraditya, sunfish, steven_wu, dexonsmith, rupprecht, jfb, jdoerfert, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision: https://reviews.llvm.org/D58742
Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/include/clang/Driver/ToolChain.h
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/ToolChains/Clang.cpp
cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
cfe/trunk/lib/Driver/ToolChains/WebAssembly.h
cfe/trunk/test/Driver/wasm-toolchain.c
cfe/trunk/test/Preprocessor/wasm-target-features.c
Modified: cfe/trunk/include/clang/Driver/Options.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Thu Feb 28 10:39:08 2019
@@ -2160,6 +2160,8 @@ def msign_ext : Flag<["-"], "msign-ext">
def mno_sign_ext : Flag<["-"], "mno-sign-ext">, Group<m_wasm_Features_Group>;
def mexception_handing : Flag<["-"], "mexception-handling">, Group<m_wasm_Features_Group>;
def mno_exception_handing : Flag<["-"], "mno-exception-handling">, Group<m_wasm_Features_Group>;
+def matomics : Flag<["-"], "matomics">, Group<m_wasm_Features_Group>;
+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>;
Modified: cfe/trunk/include/clang/Driver/ToolChain.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/ToolChain.h (original)
+++ cfe/trunk/include/clang/Driver/ToolChain.h Thu Feb 28 10:39:08 2019
@@ -453,9 +453,7 @@ public:
virtual bool SupportsEmbeddedBitcode() const { return false; }
/// getThreadModel() - Which thread model does this target use?
- virtual std::string getThreadModel(const llvm::opt::ArgList &) const {
- return "posix";
- }
+ virtual std::string getThreadModel() const { return "posix"; }
/// isThreadModelSupported() - Does this target support a thread model?
virtual bool isThreadModelSupported(const StringRef Model) const;
Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Thu Feb 28 10:39:08 2019
@@ -1528,7 +1528,7 @@ void Driver::PrintVersion(const Compilat
if (TC.isThreadModelSupported(A->getValue()))
OS << "Thread model: " << A->getValue();
} else
- OS << "Thread model: " << TC.getThreadModel(C.getArgs());
+ OS << "Thread model: " << TC.getThreadModel();
OS << '\n';
// Print out the install directory.
Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Thu Feb 28 10:39:08 2019
@@ -3830,7 +3830,7 @@ void Clang::ConstructJob(Compilation &C,
CmdArgs.push_back(A->getValue());
}
else
- CmdArgs.push_back(Args.MakeArgString(TC.getThreadModel(Args)));
+ CmdArgs.push_back(Args.MakeArgString(TC.getThreadModel()));
Args.AddLastArg(CmdArgs, options::OPT_fveclib);
Modified: cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/WebAssembly.cpp Thu Feb 28 10:39:08 2019
@@ -20,27 +20,6 @@ using namespace clang::driver::toolchain
using namespace clang;
using namespace llvm::opt;
-void parseThreadArgs(const Driver &Driver, const ArgList &DriverArgs,
- bool &Pthread, StringRef &ThreadModel,
- bool CheckForErrors = true) {
- // Default value for -pthread / -mthread-model options, each being false /
- // "single".
- Pthread =
- DriverArgs.hasFlag(options::OPT_pthread, options::OPT_no_pthread, false);
- ThreadModel =
- DriverArgs.getLastArgValue(options::OPT_mthread_model, "single");
- if (!CheckForErrors)
- return;
-
- // Did user explicitly specify -mthread-model / -pthread?
- bool HasThreadModel = DriverArgs.hasArg(options::OPT_mthread_model);
- bool HasPthread = Pthread && DriverArgs.hasArg(options::OPT_pthread);
- // '-pthread' cannot be used with '-mthread-model single'
- if (HasPthread && HasThreadModel && ThreadModel == "single")
- Driver.Diag(diag::err_drv_argument_not_allowed_with)
- << "-pthread" << "-mthread-model single";
-}
-
wasm::Linker::Linker(const ToolChain &TC)
: GnuTool("wasm::Linker", "lld", TC) {}
@@ -145,15 +124,36 @@ void WebAssembly::addClangTargetOptions(
options::OPT_fno_use_init_array, true))
CC1Args.push_back("-fuse-init-array");
- // Either '-mthread-model posix' or '-pthread' sets '-target-feature
- // +atomics'. We intentionally didn't create '-matomics' and set the atomics
- // target feature here depending on the other two options.
- bool Pthread = false;
- StringRef ThreadModel = "";
- parseThreadArgs(getDriver(), DriverArgs, Pthread, ThreadModel);
- if (Pthread || ThreadModel != "single") {
+ // '-pthread' implies '-target-feature +atomics' and
+ // '-target-feature +bulk-memory'
+ if (DriverArgs.hasFlag(options::OPT_pthread, options::OPT_no_pthread,
+ false)) {
+ if (DriverArgs.hasFlag(options::OPT_mno_atomics, options::OPT_matomics,
+ false))
+ getDriver().Diag(diag::err_drv_argument_not_allowed_with)
+ << "-pthread"
+ << "-mno-atomics";
+ if (DriverArgs.hasFlag(options::OPT_mno_bulk_memory,
+ options::OPT_mbulk_memory, false))
+ getDriver().Diag(diag::err_drv_argument_not_allowed_with)
+ << "-pthread"
+ << "-mno-bulk-memory";
CC1Args.push_back("-target-feature");
CC1Args.push_back("+atomics");
+ CC1Args.push_back("-target-feature");
+ CC1Args.push_back("+bulk-memory");
+ }
+
+ // '-matomics' implies '-mbulk-memory'
+ if (DriverArgs.hasFlag(options::OPT_matomics, options::OPT_mno_atomics,
+ false)) {
+ if (DriverArgs.hasFlag(options::OPT_mno_bulk_memory,
+ options::OPT_mbulk_memory, false))
+ getDriver().Diag(diag::err_drv_argument_not_allowed_with)
+ << "-matomics"
+ << "-mno-bulk-memory";
+ CC1Args.push_back("-target-feature");
+ CC1Args.push_back("+bulk-memory");
}
}
@@ -212,17 +212,6 @@ void WebAssembly::AddCXXStdlibLibArgs(co
}
}
-std::string WebAssembly::getThreadModel(const ArgList &DriverArgs) const {
- // The WebAssembly MVP does not yet support threads. We set this to "posix"
- // when '-pthread' is set.
- bool Pthread = false;
- StringRef ThreadModel = "";
- parseThreadArgs(getDriver(), DriverArgs, Pthread, ThreadModel, false);
- if (Pthread)
- return "posix";
- return ThreadModel;
-}
-
Tool *WebAssembly::buildLinker() const {
return new tools::wasm::Linker(*this);
}
Modified: cfe/trunk/lib/Driver/ToolChains/WebAssembly.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/WebAssembly.h?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChains/WebAssembly.h (original)
+++ cfe/trunk/lib/Driver/ToolChains/WebAssembly.h Thu Feb 28 10:39:08 2019
@@ -64,7 +64,6 @@ private:
llvm::opt::ArgStringList &CC1Args) const override;
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const override;
- std::string getThreadModel(const llvm::opt::ArgList &) const override;
const char *getDefaultLinker() const override { return "wasm-ld"; }
Modified: cfe/trunk/test/Driver/wasm-toolchain.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/wasm-toolchain.c?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/test/Driver/wasm-toolchain.c (original)
+++ cfe/trunk/test/Driver/wasm-toolchain.c Thu Feb 28 10:39:08 2019
@@ -40,14 +40,19 @@
// COMPILE: clang{{.*}}" "-cc1" {{.*}} "-internal-isystem" "/foo/include/wasm32-wasi-musl" "-internal-isystem" "/foo/include"
// Thread-related command line tests.
-// - '-mthread-model' sets '-target-feature +matomics'
-// - '-phread' sets both '-target-featuer +atomics' and '-mthread-model posix'
-
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s -mthread-model posix 2>&1 | FileCheck -check-prefix=POSIX %s
-// POSIX: clang{{.*}}" "-cc1" {{.*}} "-target-feature" "+atomics"
+// '-pthread' sets '-target-feature +atomics' and '-target-feature +bulk-memory'
// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s -pthread 2>&1 | FileCheck -check-prefix=PTHREAD %s
-// PTHREAD: clang{{.*}}" "-cc1" {{.*}} "-mthread-model" "posix" {{.*}} "-target-feature" "+atomics"
+// PTHREAD: clang{{.*}}" "-cc1" {{.*}} "-target-feature" "+atomics" "-target-feature" "+bulk-memory"
+
+// '-pthread' not allowed with '-mno-atomics'
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s -pthread -mno-atomics 2>&1 | FileCheck -check-prefix=PTHREAD_NO_ATOMICS %s
+// PTHREAD_NO_ATOMICS: invalid argument '-pthread' not allowed with '-mno-atomics'
+
+// '-pthread' not allowed with '-mno-bulk-memory'
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s -pthread -mno-bulk-memory 2>&1 | FileCheck -check-prefix=PTHREAD_NO_BULKMEM %s
+// PTHREAD_NO_BULKMEM: invalid argument '-pthread' not allowed with '-mno-bulk-memory'
-// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s -pthread -mthread-model single 2>&1 | FileCheck -check-prefix=THREAD_OPT_ERROR %s
-// THREAD_OPT_ERROR: invalid argument '-pthread' not allowed with '-mthread-model single'
+// '-matomics' not allowed with '-mno-bulk-memory'
+// RUN: %clang -### -no-canonical-prefixes -target wasm32-unknown-unknown --sysroot=/foo %s -matomics -mno-bulk-memory 2>&1 | FileCheck -check-prefix=ATOMICS_NO_BULKMEM %s
+// ATOMICS_NO_BULKMEM: invalid argument '-matomics' not allowed with '-mno-bulk-memory'
Modified: cfe/trunk/test/Preprocessor/wasm-target-features.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/wasm-target-features.c?rev=355112&r1=355111&r2=355112&view=diff
==============================================================================
--- cfe/trunk/test/Preprocessor/wasm-target-features.c (original)
+++ cfe/trunk/test/Preprocessor/wasm-target-features.c Thu Feb 28 10:39:08 2019
@@ -6,7 +6,7 @@
// RUN: | FileCheck %s -check-prefix=SIMD128
//
// SIMD128:#define __wasm_simd128__ 1{{$}}
-//
+
// RUN: %clang -E -dM %s -o - 2>&1 \
// RUN: -target wasm32-unknown-unknown -munimplemented-simd128 \
// RUN: | FileCheck %s -check-prefix=SIMD128-UNIMPLEMENTED
@@ -15,7 +15,7 @@
// RUN: | FileCheck %s -check-prefix=SIMD128-UNIMPLEMENTED
//
// 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
@@ -24,7 +24,7 @@
// RUN: | FileCheck %s -check-prefix=NONTRAPPING-FPTOINT
//
// NONTRAPPING-FPTOINT:#define __wasm_nontrapping_fptoint__ 1{{$}}
-//
+
// RUN: %clang -E -dM %s -o - 2>&1 \
// RUN: -target wasm32-unknown-unknown -msign-ext \
// RUN: | FileCheck %s -check-prefix=SIGN-EXT
@@ -33,7 +33,7 @@
// RUN: | FileCheck %s -check-prefix=SIGN-EXT
//
// SIGN-EXT:#define __wasm_sign_ext__ 1{{$}}
-//
+
// RUN: %clang -E -dM %s -o - 2>&1 \
// RUN: -target wasm32-unknown-unknown -mexception-handling \
// RUN: | FileCheck %s -check-prefix=EXCEPTION-HANDLING
@@ -42,7 +42,7 @@
// RUN: | FileCheck %s -check-prefix=EXCEPTION-HANDLING
//
// EXCEPTION-HANDLING:#define __wasm_exception_handling__ 1{{$}}
-//
+
// RUN: %clang -E -dM %s -o - 2>&1 \
// RUN: -target wasm32-unknown-unknown -mbulk-memory \
// RUN: | FileCheck %s -check-prefix=BULK-MEMORY
@@ -51,18 +51,27 @@
// RUN: | FileCheck %s -check-prefix=BULK-MEMORY
//
// BULK-MEMORY:#define __wasm_bulk_memory__ 1{{$}}
-//
-// We don't use -matomics directly and '-mthread-model posix' sets the atomics
-// target feature.
+
// RUN: %clang -E -dM %s -o - 2>&1 \
-// RUN: -target wasm32-unknown-unknown -mthread-model posix \
+// RUN: -target wasm32-unknown-unknown -matomics \
// RUN: | FileCheck %s -check-prefix=ATOMICS
// RUN: %clang -E -dM %s -o - 2>&1 \
-// RUN: -target wasm64-unknown-unknown -mthread-model posix \
+// RUN: -target wasm64-unknown-unknown -matomics \
// RUN: | FileCheck %s -check-prefix=ATOMICS
//
-// ATOMICS:#define __wasm_atomics__ 1{{$}}
-//
+// ATOMICS-DAG:#define __wasm_atomics__ 1{{$}}
+// ATOMICS-DAG:#define __wasm_bulk_memory__ 1{{$}}
+
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm32-unknown-unknown -pthread \
+// RUN: | FileCheck %s -check-prefix=PTHREAD
+// RUN: %clang -E -dM %s -o - 2>&1 \
+// RUN: -target wasm64-unknown-unknown -pthread \
+// RUN: | FileCheck %s -check-prefix=PTHREAD
+//
+// PTHREAD-DAG:#define __wasm_atomics__ 1{{$}}
+// PTHREAD-DAG:#define __wasm_bulk_memory__ 1{{$}}
+
// RUN: %clang -E -dM %s -o - 2>&1 \
// RUN: -target wasm32-unknown-unknown -mcpu=mvp \
// RUN: | FileCheck %s -check-prefix=MVP
@@ -77,7 +86,7 @@
// MVP-NOT:#define __wasm_exception_handling__
// MVP-NOT:#define __wasm_bulk_memory__
// MVP-NOT:#define __wasm_atomics__
-//
+
// RUN: %clang -E -dM %s -o - 2>&1 \
// RUN: -target wasm32-unknown-unknown -mcpu=bleeding-edge \
// RUN: | FileCheck %s -check-prefix=BLEEDING-EDGE
@@ -90,7 +99,7 @@
// BLEEDING-EDGE-DAG:#define __wasm_simd128__ 1{{$}}
// BLEEDING-EDGE-DAG:#define __wasm_atomics__ 1{{$}}
// BLEEDING-EDGE-NOT:#define __wasm_unimplemented_simd128__ 1{{$}}
-//
+
// RUN: %clang -E -dM %s -o - 2>&1 \
// RUN: -target wasm32-unknown-unknown -mcpu=bleeding-edge -mno-simd128 \
// RUN: | FileCheck %s -check-prefix=BLEEDING-EDGE-NO-SIMD128
More information about the cfe-commits
mailing list