diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 51d153413a582..8bf72cd263931 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1093,8 +1093,9 @@ void EmitAssemblyHelper::RunOptimizationPipeline( ThinOrFullLTOPhase) { MPM.addPass(createModuleToFunctionPassAdaptor( InferAddressSpacesPass(clang::targets::SPIR_GENERIC_AS))); - MPM.addPass( - createModuleToFunctionPassAdaptor(SYCLOptimizeBarriersPass())); + if (Level != OptimizationLevel::O0) + MPM.addPass(createModuleToFunctionPassAdaptor( + SYCLOptimizeBarriersPass())); }); } diff --git a/clang/test/CodeGenSYCL/kernel-early-optimization-pipeline.cpp b/clang/test/CodeGenSYCL/kernel-early-optimization-pipeline.cpp index c75e48b9727a9..d352f1bcca39a 100644 --- a/clang/test/CodeGenSYCL/kernel-early-optimization-pipeline.cpp +++ b/clang/test/CodeGenSYCL/kernel-early-optimization-pipeline.cpp @@ -12,6 +12,7 @@ // CHECK: InferFunctionAttrsPass // CHECK: AlwaysInlinerPass // CHECK: ModuleInlinerWrapperPass +// CHECK: SYCLOptimizeBarriersPass // CHECK: ConstantMergePass // CHECK: SYCLMutatePrintfAddrspacePass // CHECK: SYCLPropagateAspectsUsagePass @@ -22,4 +23,13 @@ // // RUN: %clang_cc1 -O2 -fsycl-is-device -triple spir64-unknown-unknown %s -mdebug-pass Structure -emit-llvm -fno-sycl-early-optimizations -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-NOEARLYOPT // CHECK-NOEARLYOPT-NOT: ConstantMergePass1 +// CHECK-NOEARLYOPT-NOT: SYCLOptimizeBarriersPass // CHECK-NOEARLYOPT: SYCLMutatePrintfAddrspacePass + +// RUN: %clang_cc1 -O0 -fsycl-is-device -triple spir64-unknown-unknown %s -mdebug-pass Structure -emit-llvm -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK-O0 +// CHECK-O0-NOT: SYCLOptimizeBarriersPass + +// Passes registered via registerOptimizerLastEPCallback don't run on empty +// code +__attribute__((sycl_device)) void bar() { +}