diff --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td index 8998fc6271e7b..bb1e7fba10e55 100644 --- a/clang/include/clang/Driver/CC1Options.td +++ b/clang/include/clang/Driver/CC1Options.td @@ -919,6 +919,8 @@ def fsycl_std_layout_kernel_params: Flag<["-"], "fsycl-std-layout-kernel-params" def fsycl_allow_func_ptr : Flag<["-"], "fsycl-allow-func-ptr">, HelpText<"Allow function pointers in SYCL device.">; def fno_sycl_allow_func_ptr : Flag<["-"], "fno-sycl-allow-func-ptr">; +def fsycl_enable_optimizations: Flag<["-"], "fsycl-enable-optimizations">, + HelpText<"Experimental flag enabling standard optimization in the front-end.">; } // let Flags = [CC1Option] diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 444bdcb7d0921..1b47681b94441 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4109,10 +4109,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } } - if (Triple.isSPIR()) { - CmdArgs.push_back("-disable-llvm-passes"); - } - if (Args.hasFlag(options::OPT_fsycl_allow_func_ptr, options::OPT_fno_sycl_allow_func_ptr, false)) { CmdArgs.push_back("-fsycl-allow-func-ptr"); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 3b5ef975bd891..1e41ebbf17e44 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -780,7 +780,10 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, Args.getLastArg(OPT_emit_llvm_uselists, OPT_no_emit_llvm_uselists)) Opts.EmitLLVMUseLists = A->getOption().getID() == OPT_emit_llvm_uselists; - Opts.DisableLLVMPasses = Args.hasArg(OPT_disable_llvm_passes); + Opts.DisableLLVMPasses = + Args.hasArg(OPT_disable_llvm_passes) || + (Args.hasArg(OPT_fsycl_is_device) && Triple.isSPIR() && + !Args.hasArg(OPT_fsycl_enable_optimizations)); Opts.DisableLifetimeMarkers = Args.hasArg(OPT_disable_lifetimemarkers); const llvm::Triple::ArchType DebugEntryValueArchs[] = { diff --git a/clang/test/CodeGenSYCL/inline_asm.cpp b/clang/test/CodeGenSYCL/inline_asm.cpp index db1956673a15a..60015f8ca6a82 100644 --- a/clang/test/CodeGenSYCL/inline_asm.cpp +++ b/clang/test/CodeGenSYCL/inline_asm.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsycl -fsycl-is-device -triple spir64-unknown-unknown-sycldevice -emit-llvm -x c++ %s -o - | FileCheck %s +// RUN: %clang_cc1 -fsycl -fsycl-is-device -fsycl-enable-optimizations -triple spir64-unknown-unknown-sycldevice -emit-llvm -x c++ %s -o - | FileCheck %s class kernel;