https://github.com/jhuber6 updated https://github.com/llvm/llvm-project/pull/201585
>From 4e66103db452e263ffa2df77e8e98a910bb3114b Mon Sep 17 00:00:00 2001 From: Joseph Huber <[email protected]> Date: Thu, 4 Jun 2026 08:20:30 -0500 Subject: [PATCH 1/2] [lld][LTO] Respect `-fno-slp-vectorize` for the LTO pipeline Summary: This is related to reported regressions in the GROMACS suite when offloading to AMDGCN devices through the RDC / LTO interface. The application intentionally passes `-fno-slp-vectorize` to disable that pass, but there's currently no way to do this through the LTO pipline. This PR adds a few option to `lld` that suppresses SLP from being added to the pipeline. --- clang/lib/Driver/ToolChains/Clang.cpp | 4 +++- clang/lib/Driver/ToolChains/CommonArgs.cpp | 9 +++++++++ clang/test/Driver/lto.c | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index fdd76680bed4b..2c56a1ef99673 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -9605,7 +9605,9 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, OPT_fsanitize_minimal_runtime, OPT_fno_sanitize_minimal_runtime, OPT_fsanitize_trap_EQ, - OPT_fno_sanitize_trap_EQ}; + OPT_fno_sanitize_trap_EQ, + OPT_fslp_vectorize, + OPT_fno_slp_vectorize}; const llvm::DenseSet<unsigned> LinkerOptions{OPT_mllvm, OPT_Zlinker_input}; auto ToolChainHasRT = [&](const ToolChain &TC, StringRef Name) { return TC.getVFS().exists( diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 48724746d9330..547405eaf7663 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -1157,6 +1157,15 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args, CmdArgs.push_back(Args.MakeArgString(Twine(PluginOptPrefix) + ParallelismOpt + Parallelism)); + // Forward the SLP vectorization preference to the LTO backend by toggling + // the existing -vectorize-slp cl::opt, which the pass honors directly. This + // avoids minting dedicated linker options for what is only pipeline tuning. + if (Arg *A = Args.getLastArg(options::OPT_fslp_vectorize, + options::OPT_fno_slp_vectorize)) + CmdArgs.push_back(Args.MakeArgString( + Twine(PluginOptPrefix) + "-vectorize-slp=" + + (A->getOption().matches(options::OPT_fslp_vectorize) ? "1" : "0"))); + // Pass down GlobalISel options. if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel, options::OPT_fno_global_isel)) { diff --git a/clang/test/Driver/lto.c b/clang/test/Driver/lto.c index 81165d3b9e8a3..de2b0639082c0 100644 --- a/clang/test/Driver/lto.c +++ b/clang/test/Driver/lto.c @@ -117,6 +117,14 @@ // CHECK-GISEL: "-plugin-opt=-global-isel=1" // CHECK-DISABLE-GISEL: "-plugin-opt=-global-isel=0" +// RUN: %clang --target=x86_64-unknown-linux-gnu -### %s -flto -fno-slp-vectorize 2> %t +// RUN: FileCheck --check-prefix=CHECK-NO-SLP < %t %s +// RUN: %clang --target=x86_64-unknown-linux-gnu -### %s -flto -fslp-vectorize 2> %t +// RUN: FileCheck --check-prefix=CHECK-SLP < %t %s +// +// CHECK-NO-SLP: "-plugin-opt=-vectorize-slp=0" +// CHECK-SLP: "-plugin-opt=-vectorize-slp=1" + // -flto passes -time-passes when -ftime-report is passed // RUN: %clang --target=x86_64-unknown-linux-gnu -### %s -flto -ftime-report 2> %t // RUN: FileCheck --check-prefix=CHECK-TIME-REPORT < %t %s >From 96bbdbf7f687929f0fb43300e1da448324c4bafb Mon Sep 17 00:00:00 2001 From: Joseph Huber <[email protected]> Date: Fri, 19 Jun 2026 07:24:37 -0500 Subject: [PATCH 2/2] COmment --- clang/test/Driver/lto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Driver/lto.c b/clang/test/Driver/lto.c index de2b0639082c0..c9ee2f9c26223 100644 --- a/clang/test/Driver/lto.c +++ b/clang/test/Driver/lto.c @@ -121,7 +121,7 @@ // RUN: FileCheck --check-prefix=CHECK-NO-SLP < %t %s // RUN: %clang --target=x86_64-unknown-linux-gnu -### %s -flto -fslp-vectorize 2> %t // RUN: FileCheck --check-prefix=CHECK-SLP < %t %s -// + // CHECK-NO-SLP: "-plugin-opt=-vectorize-slp=0" // CHECK-SLP: "-plugin-opt=-vectorize-slp=1" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
