From 6381664580080f015bc0c2ec647853f697cf744a Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Tue, 18 May 2021 10:32:22 -0400 Subject: 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. --- .../unittests/Frontend/CompilerInvocationTest.cpp | 90 +++++++++++++++++++++- 1 file changed, 87 insertions(+), 3 deletions(-) (limited to 'clang/unittests/Frontend/CompilerInvocationTest.cpp') 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) { -- cgit v1.1