[Mlir-commits] [mlir] [MLIR][XeVM] Update XeVM target (PR #179557)
Sang Ik Lee
llvmlistbot at llvm.org
Wed Feb 18 10:25:33 PST 2026
================
@@ -265,27 +276,102 @@ void SPIRVSerializer::init() {
});
}
-FailureOr<SmallVector<char, 0>>
-SPIRVSerializer::moduleToObject(llvm::Module &llvmModule) {
+static const std::vector<std::string> getDefaultSPIRVExtensions() {
+ return {
+ "SPV_EXT_relaxed_printf_string_address_space",
+ "SPV_INTEL_cache_controls",
+ "SPV_INTEL_variable_length_array",
+ };
+}
+
+std::optional<SmallVector<char, 0>> SPIRVSerializer::run() {
+ // Translate the module to LLVM IR.
+ llvm::LLVMContext llvmContext;
+ std::unique_ptr<llvm::Module> llvmModule = translateToLLVMIR(llvmContext);
+ if (!llvmModule) {
+ getOperation().emitError() << "Failed creating the llvm::Module.";
+ return std::nullopt;
+ }
+
#define DEBUG_TYPE "serialize-to-llvm"
LLVM_DEBUG({
llvm::dbgs() << "LLVM IR for module: " << getGPUModuleOp().getNameAttr()
<< "\n";
- llvm::dbgs() << llvmModule << "\n";
+ llvm::dbgs() << *llvmModule << "\n";
llvm::dbgs().flush();
});
#undef DEBUG_TYPE
// Return LLVM IR if the compilation target is `offload`.
if (targetOptions.getCompilationTarget() == gpu::CompilationTarget::Offload)
- return SerializeGPUModuleBase::moduleToObject(llvmModule);
+ return SerializeGPUModuleBase::moduleToObject(*llvmModule);
-#if !LLVM_HAS_SPIRV_TARGET
- return getGPUModuleOp()->emitError(
- "The `SPIRV` target was not built. Please enable "
- "it when building LLVM.");
+#if LLVM_HAS_SPIRV_TARGET
+ setDataLayoutAndTriple(*llvmModule);
+
+ // Create the target machine.
+ FailureOr<llvm::TargetMachine *> targetMachine = getOrCreateTargetMachine();
+ if (failed(targetMachine)) {
+ getOperation().emitError()
+ << "Target Machine unavailable for triple " << triple
+ << ", can't output compilation target.\n";
+ return std::nullopt;
+ }
+ // Setup allowed SPIR-V extensions.
+ std::set<llvm::SPIRV::Extension::Extension> AllowedExtIds;
+ llvm::StringRef UnknownExt = llvm::SPIRVExtensionsParser::checkExtensions(
+ getDefaultSPIRVExtensions(), AllowedExtIds);
+ if (!UnknownExt.empty()) {
+ std::string ErrMsg{"Unknown SPIR-V extension: "};
+ ErrMsg.append(UnknownExt.str());
+ getOperation().emitError() << ErrMsg;
+ return std::nullopt;
+ }
+
+ llvm::SPIRVTargetMachine *STM =
+ static_cast<llvm::SPIRVTargetMachine *>(*targetMachine);
+ const_cast<llvm::SPIRVSubtarget *>(STM->getSubtargetImpl())
+ ->initAvailableExtensions(AllowedExtIds);
+
+ // Disable optimizations
+ (*targetMachine)->setOptLevel(llvm::CodeGenOptLevel::None);
----------------
silee2 wrote:
Forgot to remove those lines. Thanks for pointing out.
https://github.com/llvm/llvm-project/pull/179557
More information about the Mlir-commits
mailing list