================
@@ -73,10 +78,96 @@ void HIPSPV::Linker::constructLinkAndEmitSpirvCommand(
tools::constructLLVMLinkCommand(C, *this, JA, Inputs, LinkArgs, Output, Args,
TempFile);
- // Post-link HIP lowering.
+ auto T = getToolChain().getTriple();
+
+ if (T.getOS() == llvm::Triple::ChipStar) {
+ // chipStar: run HipSpvPasses via opt, then emit SPIR-V either via the
+ // external llvm-spirv translator (if available) or the in-tree SPIR-V
+ // backend (mirrors the fallback in clang-linker-wrapper).
+
+ // Run HipSpvPasses plugin via opt (must run on LLVM IR before
+ // the SPIR-V backend lowers to MIR).
+ auto PassPluginPath = findPassPlugin(C.getDriver(), Args);
+ if (!PassPluginPath.empty()) {
+ const char *PassPathCStr = C.getArgs().MakeArgString(PassPluginPath);
+ const char *OptOutput = HIP::getTempFile(C, Name + "-lower", "bc");
+ ArgStringList OptArgs{TempFile, "-load-pass-plugin",
+ PassPathCStr, "-passes=hip-post-link-passes",
+ "-o", OptOutput};
+ const char *Opt =
+ Args.MakeArgString(getToolChain().GetProgramPath("opt"));
+ C.addCommand(std::make_unique<Command>(JA, *this,
+ ResponseFileSupport::None(), Opt,
+ OptArgs, Inputs, Output));
+ TempFile = OptOutput;
+ }
+
+ // Prefer the external llvm-spirv translator when it is available next to
+ // the toolchain — required when LLVM is built without the in-tree SPIR-V
+ // target. Use findProgramByName (not GetProgramPath) so a missing binary
+ // is reported as not-found rather than being silently substituted.
+ std::string LLVMSpirvPath;
+ {
+ llvm::ErrorOr<std::string> P = llvm::sys::findProgramByName(
+ "llvm-spirv", {llvm::sys::path::parent_path(C.getDriver().Dir)});
+ if (!P)
+ P = llvm::sys::findProgramByName("llvm-spirv",
+ {llvm::StringRef(C.getDriver().Dir)});
+ if (!P)
+ P = llvm::sys::findProgramByName("llvm-spirv");
----------------
linehill wrote:
Note that this will look for llvm-spirv in PATH.
https://github.com/llvm/llvm-project/pull/186972
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits