From fa6ae5dd4ba728a56411953cdadccd39c29a0438 Mon Sep 17 00:00:00 2001 From: Premanand M Rao Date: Wed, 11 Sep 2024 11:38:14 -0700 Subject: [PATCH] Merge conflicts; address CR comments --- clang/include/clang/Driver/Driver.h | 8 ++++++++ clang/include/clang/Driver/Options.td | 4 ++-- clang/lib/Driver/Driver.cpp | 21 +++++++++++++-------- clang/lib/Driver/ToolChains/Clang.cpp | 9 ++++++--- clang/test/Driver/sycl-preprocess.cpp | 2 +- 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 68c3ae5591e28..af0219b62fceb 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -979,6 +979,14 @@ class Driver { llvm::opt::ArgStringList getDeviceTraitsMacrosArgs() const { return SYCLDeviceTraitsMacrosArgs; } + /// getSYCLDefaultUseBuiltins - Return false, when the default mechanism + /// for communication between the device and host compilations + /// is integration headers. Return true, when it is via builtins. + bool getSYCLDefaultUseBuiltins() const { + // Currently, unless -fsycl-use-builtins is explicitly specified, + // integration headers are used for device-host communucations. + return false; + } }; /// \return True if the last defined optimization level is -Ofast. diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 6ec10338c5583..479dc4a32f335 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -7002,8 +7002,8 @@ defm sycl_use_integration_headers : BoolFOption<"sycl-use-integration-headers", PosFlag, NegFlag, BothFlags<[HelpHidden], [ClangOption, CLOption, CC1Option], - " that integration headers be used for " - "communication between the host and the device compilations. SYCL Only">>; + " that integration headers be used for communication" + " between the host and the device compilations. SYCL Only">>; } // let Group = sycl_Group // FIXME: -fsycl-explicit-simd is deprecated. remove it when support is dropped. diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index efc71fc17cb01..b6ccc8f705db9 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1086,7 +1086,11 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, bool HasSYCL = C.getInputArgs().hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false); bool HasValidSYCLRuntime = - HasSYCL || C.getInputArgs().hasArg(options::OPT_fsycl_device_only); + HasSYCL || hasSYCLDeviceOnly(C.getInputArgs()); + bool UseSYCLIntegrationHeaders = + C.getInputArgs().hasFlag(options::OPT_fsycl_use_integration_headers, + options::OPT_fno_sycl_use_integration_headers, + !getSYCLDefaultUseBuiltins()); Arg *SYCLfpga = C.getInputArgs().getLastArg(options::OPT_fintelfpga); @@ -1135,13 +1139,14 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, if (!HasSYCL && !SYCLfpga) Diag(clang::diag::err_drv_sycl_opt_requires_opt) << "-f[no-]sycl-use-integration-headers"; - // -fno-sycl-use-integration-headers cannot be used with - // -fsycl-host-compiler. - if (SYCLHostCompiler && SYCLUIHArg->getOption().matches( - options::OPT_fno_sycl_use_integration_headers)) - Diag(clang::diag::err_drv_option_conflict) - << SYCLHostCompiler->getSpelling().split('=').first - << "-fno-sycl-use-integration-headers"; + } + + // -fno-sycl-use-integration-headers cannot be used with + // -fsycl-host-compiler. + if (SYCLHostCompiler && !UseSYCLIntegrationHeaders) { + Diag(clang::diag::err_drv_option_conflict) + << SYCLHostCompiler->getSpelling().split('=').first + << "-fno-sycl-use-integration-headers"; } auto argSYCLIncompatible = [&](OptSpecifier OptId) { diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index b497c16716925..295c934c07820 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5039,7 +5039,8 @@ void Clang::ConstructHostCompilerJob(Compilation &C, const JobAction &JA, assert(HostCompilerDefArg && "Expected host compiler designation."); bool UIH = TCArgs.hasFlag(options::OPT_fsycl_use_integration_headers, - options::OPT_fno_sycl_use_integration_headers, true); + options::OPT_fno_sycl_use_integration_headers, + !TC.getDriver().getSYCLDefaultUseBuiltins()); bool OutputAdded = false; StringRef CompilerName = llvm::sys::path::stem(HostCompilerDefArg->getValue()); @@ -5486,7 +5487,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Arg *SYCLStdArg = Args.getLastArg(options::OPT_sycl_std_EQ); bool UIH = Args.hasFlag(options::OPT_fsycl_use_integration_headers, - options::OPT_fno_sycl_use_integration_headers, true); + options::OPT_fno_sycl_use_integration_headers, + !D.getSYCLDefaultUseBuiltins()); if (IsSYCLDevice) { if (Triple.isNVPTX()) { @@ -5784,7 +5786,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } if (Args.hasFlag(options::OPT_fsycl_use_integration_headers, - options::OPT_fno_sycl_use_integration_headers, true)) { + options::OPT_fno_sycl_use_integration_headers, + !D.getSYCLDefaultUseBuiltins())) { CmdArgs.push_back("-fsycl-use-integration-headers"); CmdArgs.push_back("-D__INTEL_SYCL_USE_INTEGRATION_HEADERS"); } diff --git a/clang/test/Driver/sycl-preprocess.cpp b/clang/test/Driver/sycl-preprocess.cpp index 827a512753ee5..970ffcc604c5e 100644 --- a/clang/test/Driver/sycl-preprocess.cpp +++ b/clang/test/Driver/sycl-preprocess.cpp @@ -14,7 +14,7 @@ // RUN: | FileCheck -check-prefix PREPROC_ONLY2 %s // RUN: %clang_cl -fsycl --offload-new-driver -fno-sycl-use-integration-headers -P -Fi%t_output.ii %s -### 2>&1 \ // RUN: | FileCheck -check-prefix PREPROC_ONLY2 %s -// PREPROC_ONLY2-NOT: "-fsycl-int-header=" +// PREPROC_ONLY2-NOT: "-fsycl-int-header=" // PREPROC_ONLY2-NOT: "-fsycl-int-footer=" // PREPROC_ONLY2-NOT: "-include-footer"