zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit ddcf6fcdf3452a4a7d55a27e7112e794447120b6 (tree)
parent 991560fb499afcbd7717f86edd475338c7d8d2b8
Author: Alex Rønne Petersen <alex@alexrp.com>
Date:   Sun,  6 Apr 2025 17:36:24 +0200

compiler: Allow using LLVM's SPIR-V backend.

Diffstat:
Msrc/codegen/llvm.zig | 9++++++---
Msrc/codegen/llvm/bindings.zig | 4++++
Msrc/target.zig | 11++++-------
3 files changed, 14 insertions(+), 10 deletions(-)

diff --git 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 @@ -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 @@ -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; }