diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 6ad4ccc242..3e389ed9c5 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -12723,12 +12723,15 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { llvm.LLVMInitializeLoongArchAsmPrinter(); llvm.LLVMInitializeLoongArchAsmParser(); }, - - // We don't currently support using these backends. .spirv, .spirv32, .spirv64, - => {}, + => { + llvm.LLVMInitializeSPIRVTarget(); + llvm.LLVMInitializeSPIRVTargetInfo(); + llvm.LLVMInitializeSPIRVTargetMC(); + llvm.LLVMInitializeSPIRVAsmPrinter(); + }, // LLVM does does not have a backend for these. .kalimba, diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig index 3c0782397e..44ca599fdc 100644 --- a/src/codegen/llvm/bindings.zig +++ b/src/codegen/llvm/bindings.zig @@ -211,6 +211,7 @@ pub extern fn LLVMInitializeCSKYTargetInfo() void; pub extern fn LLVMInitializeVETargetInfo() void; pub extern fn LLVMInitializeARCTargetInfo() void; pub extern fn LLVMInitializeLoongArchTargetInfo() void; +pub extern fn LLVMInitializeSPIRVTargetInfo() void; pub extern fn LLVMInitializeAArch64Target() void; pub extern fn LLVMInitializeAMDGPUTarget() void; @@ -235,6 +236,7 @@ pub extern fn LLVMInitializeVETarget() void; pub extern fn LLVMInitializeCSKYTarget() void; pub extern fn LLVMInitializeARCTarget() void; pub extern fn LLVMInitializeLoongArchTarget() void; +pub extern fn LLVMInitializeSPIRVTarget() void; pub extern fn LLVMInitializeAArch64TargetMC() void; pub extern fn LLVMInitializeAMDGPUTargetMC() void; @@ -259,6 +261,7 @@ pub extern fn LLVMInitializeCSKYTargetMC() void; pub extern fn LLVMInitializeVETargetMC() void; pub extern fn LLVMInitializeARCTargetMC() void; pub extern fn LLVMInitializeLoongArchTargetMC() void; +pub extern fn LLVMInitializeSPIRVTargetMC() void; pub extern fn LLVMInitializeAArch64AsmPrinter() void; pub extern fn LLVMInitializeAMDGPUAsmPrinter() void; @@ -281,6 +284,7 @@ pub extern fn LLVMInitializeM68kAsmPrinter() void; pub extern fn LLVMInitializeVEAsmPrinter() void; pub extern fn LLVMInitializeARCAsmPrinter() void; pub extern fn LLVMInitializeLoongArchAsmPrinter() void; +pub extern fn LLVMInitializeSPIRVAsmPrinter() void; pub extern fn LLVMInitializeAArch64AsmParser() void; pub extern fn LLVMInitializeAMDGPUAsmParser() void; diff --git a/src/target.zig b/src/target.zig index 1d8ecab3a6..9ee29eb9f6 100644 --- a/src/target.zig +++ b/src/target.zig @@ -172,6 +172,9 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool { .riscv64, .sparc, .sparc64, + .spirv, + .spirv32, + .spirv64, .s390x, .thumb, .thumbeb, @@ -187,12 +190,6 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool { .ve, => true, - // An LLVM backend exists but we don't currently support using it. - .spirv, - .spirv32, - .spirv64, - => false, - // No LLVM backend exists. .kalimba, .propeller, @@ -213,7 +210,7 @@ pub fn hasLldSupport(ofmt: std.Target.ObjectFormat) bool { /// debug mode. A given target should only return true here if it is passing greater /// than or equal to the number of behavior tests as the respective LLVM backend. pub fn selfHostedBackendIsAsRobustAsLlvm(target: std.Target) bool { - _ = target; + if (target.cpu.arch.isSpirV()) return true; return false; }