Author: Jan Svoboda Date: 2020-12-21T11:32:47+01:00 New Revision: 5a85526728c9e57efe26f322e4718fffd2634d23
URL: https://github.com/llvm/llvm-project/commit/5a85526728c9e57efe26f322e4718fffd2634d23 DIFF: https://github.com/llvm/llvm-project/commit/5a85526728c9e57efe26f322e4718fffd2634d23.diff LOG: [clang] Use enum for LangOptions::SYCLVersion instead of unsigned `LangOptions::SYCLVersion` can only have two values. This patch introduces an enum that allows us to reduce the member size from 32 bits to 1 bit. Consequently, this also makes marshalling of this option fit into our model for enums: D84674. Reviewed By: bader Differential Revision: https://reviews.llvm.org/D93540 Added: Modified: clang/include/clang/Basic/LangOptions.def clang/include/clang/Basic/LangOptions.h clang/lib/Frontend/CompilerInvocation.cpp clang/lib/Frontend/InitPreprocessor.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 251fd68f4df8..cc5eb939dbd2 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -246,7 +246,7 @@ LANGOPT(GPUExcludeWrongSideOverloads, 1, 0, "always exclude wrong side overloads LANGOPT(SYCL , 1, 0, "SYCL") LANGOPT(SYCLIsDevice , 1, 0, "Generate code for SYCL device") -LANGOPT(SYCLVersion , 32, 0, "Version of the SYCL standard used") +ENUM_LANGOPT(SYCLVersion , SYCLMajorVersion, 1, SYCL_None, "Version of the SYCL standard used") LANGOPT(HIPUseNewLaunchAPI, 1, 0, "Use new kernel launching API for HIP") diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index ed9f729417af..8b3fb562561f 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -125,6 +125,11 @@ class LangOptions : public LangOptionsBase { MSVC2019 = 1920, }; + enum SYCLMajorVersion { + SYCL_None, + SYCL_2017, + }; + /// Clang versions with diff erent platform ABI conformance. enum class ClangABI { /// Attempt to be ABI-compatible with code generated by Clang 3.8.x diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index f71b14eabc49..fc5fd1547599 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -2277,11 +2277,13 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, // -sycl-std applies to any SYCL source, not only those containing kernels, // but also those using the SYCL API if (const Arg *A = Args.getLastArg(OPT_sycl_std_EQ)) { - Opts.SYCLVersion = llvm::StringSwitch<unsigned>(A->getValue()) - .Cases("2017", "1.2.1", "121", "sycl-1.2.1", 2017) - .Default(0U); + Opts.setSYCLVersion( + llvm::StringSwitch<LangOptions::SYCLMajorVersion>(A->getValue()) + .Cases("2017", "1.2.1", "121", "sycl-1.2.1", + LangOptions::SYCL_2017) + .Default(LangOptions::SYCL_None)); - if (Opts.SYCLVersion == 0U) { + if (Opts.getSYCLVersion() == LangOptions::SYCL_None) { // User has passed an invalid value to the flag, this is an error Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue(); diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index d4b77a65aa63..87af9247b91c 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -476,7 +476,7 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI, if (LangOpts.SYCL) { // SYCL Version is set to a value when building SYCL applications - if (LangOpts.SYCLVersion == 2017) + if (LangOpts.getSYCLVersion() == LangOptions::SYCL_2017) Builder.defineMacro("CL_SYCL_LANGUAGE_VERSION", "121"); } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits