[clang] [HIP][SPIRV] Enable the SPIRV backend instead of the translator through an experimental flag. (PR #162282)

Matt Arsenault via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 8 04:05:33 PDT 2025


Juan Manuel Martinez =?utf-8?q?CaamaƱo?= <juamarti at amd.com>,Manuel
 Carrasco <Manuel.Carrasco at amd.com>,Manuel Carrasco <Manuel.Carrasco at amd.com>,Manuel
 Carrasco <Manuel.Carrasco at amd.com>,Manuel Carrasco <Manuel.Carrasco at amd.com>,Manuel
 Carrasco <Manuel.Carrasco at amd.com>,Manuel Carrasco <Manuel.Carrasco at amd.com>,Manuel
 Carrasco <Manuel.Carrasco at amd.com>,Manuel Carrasco <Manuel.Carrasco at amd.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/162282 at github.com>


================
@@ -168,19 +168,39 @@ void AMDGCN::Linker::constructLinkAndEmitSpirvCommand(
     const InputInfo &Output, const llvm::opt::ArgList &Args) const {
   assert(!Inputs.empty() && "Must have at least one input.");
 
-  constructLlvmLinkCommand(C, JA, Inputs, Output, Args);
-
-  // Linked BC is now in Output
-
-  // Emit SPIR-V binary.
-  llvm::opt::ArgStringList TrArgs{
-      "--spirv-max-version=1.6",
-      "--spirv-ext=+all",
-      "--spirv-allow-unknown-intrinsics",
-      "--spirv-lower-const-expr",
-      "--spirv-preserve-auxdata",
-      "--spirv-debug-info-version=nonsemantic-shader-200"};
-  SPIRV::constructTranslateCommand(C, *this, JA, Output, Output, TrArgs);
+  std::string LinkedBCFilePrefix(
+      Twine(llvm::sys::path::stem(Output.getFilename()), "-linked").str());
+  const char *LinkedBCFilePath = HIP::getTempFile(C, LinkedBCFilePrefix, "bc");
+  InputInfo LinkedBCFile(&JA, LinkedBCFilePath, Output.getBaseInput());
+
+  constructLlvmLinkCommand(C, JA, Inputs, LinkedBCFile, Args);
+
+  bool UseSPIRVBackend = Args.hasFlag(
+      options::OPT_amdgpu_use_experimental_spirv_backend,
+      options::OPT_no_amdgpu_use_experimental_spirv_backend, false);
+
+  if (UseSPIRVBackend) {
+    llvm::opt::ArgStringList CmdArgs;
+    CmdArgs.push_back(LinkedBCFile.getFilename());
+    CmdArgs.append({"-o", Output.getFilename()});
+    const char *Exec =
+        C.getArgs().MakeArgString(getToolChain().GetProgramPath("llc"));
+    CmdArgs.push_back("-mtriple=spirv64v1.6-amd-amdhsa");
----------------
arsenm wrote:

Why does this need a specific version? 

https://github.com/llvm/llvm-project/pull/162282


More information about the cfe-commits mailing list