================ @@ -152,48 +152,38 @@ void tools::PS4cpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(Output.getFilename()); } - const bool UseLTO = D.isUsingLTO(); const bool UseJMC = Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false); + const bool UnifiedLTO = Args.hasFlag(options::OPT_funified_lto, + options::OPT_fno_unified_lto, true); + const char *LTOArgs = ""; - auto AddCodeGenFlag = [&](Twine Flag) { + auto AddLTOFlag = [&](Twine Flag) { LTOArgs = Args.MakeArgString(Twine(LTOArgs) + " " + Flag); }; - if (UseLTO) { - // This tells LTO to perform JustMyCode instrumentation. - if (UseJMC) - AddCodeGenFlag("-enable-jmc-instrument"); - - if (Arg *A = Args.getLastArg(options::OPT_fcrash_diagnostics_dir)) - AddCodeGenFlag(Twine("-crash-diagnostics-dir=") + A->getValue()); + // If the linker sees bitcode objects it will perform LTO. We can't tell + // whether or not that will be the case at this point. So, unconditionally + // pass LTO options to ensure proper codegen, metadata production, etc if + // LTO indeed occurs. + if (UnifiedLTO) + CmdArgs.push_back(D.getLTOMode() == LTOK_Thin ? "--lto=thin" + : "--lto=full"); + if (UseJMC) + AddLTOFlag("-enable-jmc-instrument"); - StringRef Parallelism = getLTOParallelism(Args, D); - if (!Parallelism.empty()) - AddCodeGenFlag(Twine("-threads=") + Parallelism); + if (Arg *A = Args.getLastArg(options::OPT_fcrash_diagnostics_dir)) + AddLTOFlag(Twine("-crash-diagnostics-dir=") + A->getValue()); - const char *Prefix = nullptr; - if (D.getLTOMode() == LTOK_Thin) - Prefix = "-lto-thin-debug-options="; - else if (D.getLTOMode() == LTOK_Full) - Prefix = "-lto-debug-options="; - else - llvm_unreachable("new LTO mode?"); + if (StringRef Threads = getLTOParallelism(Args, D); !Threads.empty()) + AddLTOFlag(Twine("-threads=") + Threads); - CmdArgs.push_back(Args.MakeArgString(Twine(Prefix) + LTOArgs)); - } + CmdArgs.push_back(Args.MakeArgString(Twine("-lto-debug-options=") + LTOArgs)); ---------------- ormris wrote:
I notice that `-lto-thin-debug-options` will no longer be generated when in Thin mode. Are the two switches equivalent? https://github.com/llvm/llvm-project/pull/100423 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits