diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 93711d3732ed1..bb966b4629acf 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -639,6 +639,10 @@ SYCLToolChain::TranslateArgs(const llvm::opt::DerivedArgList &Args, } } } + // Strip out -O0 for FPGA Hardware device compilation. + if (!getDriver().isFPGAEmulationMode() && + getTriple().getSubArch() == llvm::Triple::SPIRSubArch_fpga) + DAL->eraseArg(options::OPT_O0); const OptTable &Opts = getDriver().getOpts(); if (!BoundArch.empty()) { diff --git a/clang/test/Driver/sycl-offload-intelfpga-emu.cpp b/clang/test/Driver/sycl-offload-intelfpga-emu.cpp index 37872c80cedca..c86c35a2c8954 100644 --- a/clang/test/Driver/sycl-offload-intelfpga-emu.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga-emu.cpp @@ -214,3 +214,12 @@ // RUN: | FileCheck %s --check-prefix=CHK-FPGA-LINK-WARN-AOCX // CHK-FPGA-LINK-WARN-AOCX: warning: FPGA archive '{{.*}}_aocx.a' does not contain matching emulation/hardware expectancy +/// Check for implied options with emulation (-g -O0) +// RUN: %clang -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -g -O0 -Xs "-DFOO1 -DFOO2" %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s +// RUN: %clang_cl -### -fsycl -fintelfpga -Zi -Od -Xs "-DFOO1 -DFOO2" %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s +// CHK-TOOLS-IMPLIED-OPTS: clang{{.*}} "-fsycl-is-device"{{.*}} "-O0" +// CHK-TOOLS-IMPLIED-OPTS: sycl-post-link{{.*}} "-O0" +// CHK-TOOLS-IMPLIED-OPTS: opencl-aot{{.*}} "--bo=-g -cl-opt-disable" "-DFOO1" "-DFOO2" + diff --git a/clang/test/Driver/sycl-offload-intelfpga.cpp b/clang/test/Driver/sycl-offload-intelfpga.cpp index 09d8802d0aa93..232639b93bd56 100644 --- a/clang/test/Driver/sycl-offload-intelfpga.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga.cpp @@ -403,12 +403,15 @@ // RUN: | FileCheck -check-prefix=CHK-FPGA-REPORT-NAME %s // CHK-FPGA-REPORT-NAME: aoc{{.*}} "-sycl"{{.*}} "-output-report-folder={{.*}}dummy2.prj" -/// Check for implied options (-g -O0) +/// Check for implied options with -Xshardware (-g -O0) +/// Expectation is for -O0 to not be used with -Xshardware // RUN: %clang -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -g -O0 -Xs "-DFOO1 -DFOO2" -Xshardware %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s // RUN: %clang_cl -### -fsycl -fintelfpga -Zi -Od -Xs "-DFOO1 -DFOO2" -Xshardware %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s -// CHK-TOOLS-IMPLIED-OPTS: aoc{{.*}} "-g" "-cl-opt-disable" "-DFOO1" "-DFOO2" +// CHK-TOOLS-IMPLIED-OPTS-NOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-O0" +// CHK-TOOLS-IMPLIED-OPTS: sycl-post-link{{.*}} "-O2" +// CHK-TOOLS-IMPLIED-OPTS: aoc{{.*}} "-g" "-DFOO1" "-DFOO2" /// Check the warning's emission for conflicting emulation/hardware (AOCX) // RUN: touch %t_aocx.a