return act.takeModule();
}
+
+#ifdef HAVE_CLOVER_SPIRV
+ SPIRV::TranslatorOpts
+ get_spirv_translator_options(const device &dev) {
+ const auto supported_versions = spirv::supported_versions();
+ const auto maximum_spirv_version =
+ std::min(static_cast<SPIRV::VersionNumber>(supported_versions.back()),
+ SPIRV::VersionNumber::MaximumVersion);
+
+ return SPIRV::TranslatorOpts(maximum_spirv_version);
+ }
+#endif
}
module
if (has_flag(debug::llvm))
debug::log(".ll", print_module_bitcode(*mod));
+ const auto spirv_options = get_spirv_translator_options(dev);
+
std::string error_msg;
if (!::llvm::regularizeLlvmForSpirv(mod.get(), error_msg)) {
r_log += "Failed to regularize LLVM IR for SPIR-V: " + error_msg + ".\n";
}
std::ostringstream os;
- if (!::llvm::writeSpirv(mod.get(), os, error_msg)) {
+ if (!::llvm::writeSpirv(mod.get(), spirv_options, os, error_msg)) {
r_log += "Translation from LLVM IR to SPIR-V failed: " + error_msg + ".\n";
throw error(CL_INVALID_VALUE);
}