diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2021-05-18 10:32:22 -0400 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2021-05-18 10:34:14 -0400 |
commit | 6381664580080f015bc0c2ec647853f697cf744a (patch) | |
tree | 728e71199d1514e90d9317d33bacc92ad04cfd99 /clang/unittests/Frontend/CompilerInvocationTest.cpp | |
parent | ba1509da7b89c850c89f0f98afbab375794cd3c8 (diff) | |
download | llvm-6381664580080f015bc0c2ec647853f697cf744a.zip llvm-6381664580080f015bc0c2ec647853f697cf744a.tar.gz llvm-6381664580080f015bc0c2ec647853f697cf744a.tar.bz2 |
Introduce SYCL 2020 mode
Currently, we have support for SYCL 1.2.1 (also known as SYCL 2017).
This patch introduces the start of support for SYCL 2020 mode, which is
the latest SYCL standard available at (https://www.khronos.org/registry/SYCL/specs/sycl-2020/html/sycl-2020.html).
This sets the default SYCL to be 2020 in the driver, and introduces the
notion of a "default" version (set to 2020) when cc1 is in SYCL mode
but there was no explicit -sycl-std= specified on the command line.
Diffstat (limited to 'clang/unittests/Frontend/CompilerInvocationTest.cpp')
-rw-r--r-- | clang/unittests/Frontend/CompilerInvocationTest.cpp | 90 |
1 files changed, 87 insertions, 3 deletions
diff --git a/clang/unittests/Frontend/CompilerInvocationTest.cpp b/clang/unittests/Frontend/CompilerInvocationTest.cpp index 0baf17f..9bcbf1f 100644 --- a/clang/unittests/Frontend/CompilerInvocationTest.cpp +++ b/clang/unittests/Frontend/CompilerInvocationTest.cpp @@ -566,18 +566,102 @@ TEST_F(CommandLineTest, ConditionalParsingIfFalseFlagPresent) { ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std=")))); } -TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagNotPresent) { +TEST_F(CommandLineTest, ConditionalParsingIfNonsenseSyclStdArg) { + const char *Args[] = {"-fsycl-is-device", "-sycl-std=garbage"}; + + CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags); + + ASSERT_TRUE(Diags->hasErrorOccurred()); + ASSERT_TRUE(Invocation.getLangOpts()->SYCLIsDevice); + ASSERT_FALSE(Invocation.getLangOpts()->SYCLIsHost); + ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None); + + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl-is-device"))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl-is-host")))); + ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std=")))); +} + +TEST_F(CommandLineTest, ConditionalParsingIfOddSyclStdArg1) { + const char *Args[] = {"-fsycl-is-device", "-sycl-std=121"}; + + CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags); + + ASSERT_FALSE(Diags->hasErrorOccurred()); + ASSERT_TRUE(Invocation.getLangOpts()->SYCLIsDevice); + ASSERT_FALSE(Invocation.getLangOpts()->SYCLIsHost); + ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_2017); + + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl-is-device"))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl-is-host")))); + ASSERT_THAT(GeneratedArgs, Contains(HasSubstr("-sycl-std=2017"))); +} + +TEST_F(CommandLineTest, ConditionalParsingIfOddSyclStdArg2) { + const char *Args[] = {"-fsycl-is-device", "-sycl-std=1.2.1"}; + + CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags); + + ASSERT_FALSE(Diags->hasErrorOccurred()); + ASSERT_TRUE(Invocation.getLangOpts()->SYCLIsDevice); + ASSERT_FALSE(Invocation.getLangOpts()->SYCLIsHost); + ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_2017); + + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl-is-device"))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl-is-host")))); + ASSERT_THAT(GeneratedArgs, Contains(HasSubstr("-sycl-std=2017"))); +} + +TEST_F(CommandLineTest, ConditionalParsingIfOddSyclStdArg3) { + const char *Args[] = {"-fsycl-is-device", "-sycl-std=sycl-1.2.1"}; + + CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags); + + ASSERT_FALSE(Diags->hasErrorOccurred()); + ASSERT_TRUE(Invocation.getLangOpts()->SYCLIsDevice); + ASSERT_FALSE(Invocation.getLangOpts()->SYCLIsHost); + ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_2017); + + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl-is-device"))); + ASSERT_THAT(GeneratedArgs, Not(Contains(StrEq("-fsycl-is-host")))); + ASSERT_THAT(GeneratedArgs, Contains(HasSubstr("-sycl-std=2017"))); +} + +TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagNotPresentHost) { const char *Args[] = {"-fsycl-is-host"}; CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags); ASSERT_FALSE(Diags->hasErrorOccurred()); - ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), LangOptions::SYCL_None); + ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), + LangOptions::SYCL_Default); Invocation.generateCC1CommandLine(GeneratedArgs, *this); ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl-is-host"))); - ASSERT_THAT(GeneratedArgs, Not(Contains(HasSubstr("-sycl-std=")))); + ASSERT_THAT(GeneratedArgs, Contains(HasSubstr("-sycl-std="))); +} + +TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagNotPresentDevice) { + const char *Args[] = {"-fsycl-is-device"}; + + CompilerInvocation::CreateFromArgs(Invocation, Args, *Diags); + + ASSERT_FALSE(Diags->hasErrorOccurred()); + ASSERT_EQ(Invocation.getLangOpts()->getSYCLVersion(), + LangOptions::SYCL_Default); + + Invocation.generateCC1CommandLine(GeneratedArgs, *this); + + ASSERT_THAT(GeneratedArgs, Contains(StrEq("-fsycl-is-device"))); + ASSERT_THAT(GeneratedArgs, Contains(HasSubstr("-sycl-std="))); } TEST_F(CommandLineTest, ConditionalParsingIfTrueFlagPresent) { |