authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-04-06 17:36:24+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-04-09 19:32:57+02:00
logddcf6fcdf3452a4a7d55a27e7112e794447120b6
tree068232350f7f6f45150feba61092e8b4990a26af
parent991560fb499afcbd7717f86edd475338c7d8d2b8

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


3 files changed, 14 insertions(+), 10 deletions(-)

src/codegen/llvm.zig+6-3
...@@ -12723,12 +12723,15 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {...@@ -12723,12 +12723,15 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
12723 llvm.LLVMInitializeLoongArchAsmPrinter();12723 llvm.LLVMInitializeLoongArchAsmPrinter();
12724 llvm.LLVMInitializeLoongArchAsmParser();12724 llvm.LLVMInitializeLoongArchAsmParser();
12725 },12725 },
12726
12727 // We don't currently support using these backends.
12728 .spirv,12726 .spirv,
12729 .spirv32,12727 .spirv32,
12730 .spirv64,12728 .spirv64,
12731 => {},12729 => {
12730 llvm.LLVMInitializeSPIRVTarget();
12731 llvm.LLVMInitializeSPIRVTargetInfo();
12732 llvm.LLVMInitializeSPIRVTargetMC();
12733 llvm.LLVMInitializeSPIRVAsmPrinter();
12734 },
1273212735
12733 // LLVM does does not have a backend for these.12736 // LLVM does does not have a backend for these.
12734 .kalimba,12737 .kalimba,
src/codegen/llvm/bindings.zig+4
...@@ -211,6 +211,7 @@ pub extern fn LLVMInitializeCSKYTargetInfo() void;...@@ -211,6 +211,7 @@ pub extern fn LLVMInitializeCSKYTargetInfo() void;
211pub extern fn LLVMInitializeVETargetInfo() void;211pub extern fn LLVMInitializeVETargetInfo() void;
212pub extern fn LLVMInitializeARCTargetInfo() void;212pub extern fn LLVMInitializeARCTargetInfo() void;
213pub extern fn LLVMInitializeLoongArchTargetInfo() void;213pub extern fn LLVMInitializeLoongArchTargetInfo() void;
214pub extern fn LLVMInitializeSPIRVTargetInfo() void;
214215
215pub extern fn LLVMInitializeAArch64Target() void;216pub extern fn LLVMInitializeAArch64Target() void;
216pub extern fn LLVMInitializeAMDGPUTarget() void;217pub extern fn LLVMInitializeAMDGPUTarget() void;
...@@ -235,6 +236,7 @@ pub extern fn LLVMInitializeVETarget() void;...@@ -235,6 +236,7 @@ pub extern fn LLVMInitializeVETarget() void;
235pub extern fn LLVMInitializeCSKYTarget() void;236pub extern fn LLVMInitializeCSKYTarget() void;
236pub extern fn LLVMInitializeARCTarget() void;237pub extern fn LLVMInitializeARCTarget() void;
237pub extern fn LLVMInitializeLoongArchTarget() void;238pub extern fn LLVMInitializeLoongArchTarget() void;
239pub extern fn LLVMInitializeSPIRVTarget() void;
238240
239pub extern fn LLVMInitializeAArch64TargetMC() void;241pub extern fn LLVMInitializeAArch64TargetMC() void;
240pub extern fn LLVMInitializeAMDGPUTargetMC() void;242pub extern fn LLVMInitializeAMDGPUTargetMC() void;
...@@ -259,6 +261,7 @@ pub extern fn LLVMInitializeCSKYTargetMC() void;...@@ -259,6 +261,7 @@ pub extern fn LLVMInitializeCSKYTargetMC() void;
259pub extern fn LLVMInitializeVETargetMC() void;261pub extern fn LLVMInitializeVETargetMC() void;
260pub extern fn LLVMInitializeARCTargetMC() void;262pub extern fn LLVMInitializeARCTargetMC() void;
261pub extern fn LLVMInitializeLoongArchTargetMC() void;263pub extern fn LLVMInitializeLoongArchTargetMC() void;
264pub extern fn LLVMInitializeSPIRVTargetMC() void;
262265
263pub extern fn LLVMInitializeAArch64AsmPrinter() void;266pub extern fn LLVMInitializeAArch64AsmPrinter() void;
264pub extern fn LLVMInitializeAMDGPUAsmPrinter() void;267pub extern fn LLVMInitializeAMDGPUAsmPrinter() void;
...@@ -281,6 +284,7 @@ pub extern fn LLVMInitializeM68kAsmPrinter() void;...@@ -281,6 +284,7 @@ pub extern fn LLVMInitializeM68kAsmPrinter() void;
281pub extern fn LLVMInitializeVEAsmPrinter() void;284pub extern fn LLVMInitializeVEAsmPrinter() void;
282pub extern fn LLVMInitializeARCAsmPrinter() void;285pub extern fn LLVMInitializeARCAsmPrinter() void;
283pub extern fn LLVMInitializeLoongArchAsmPrinter() void;286pub extern fn LLVMInitializeLoongArchAsmPrinter() void;
287pub extern fn LLVMInitializeSPIRVAsmPrinter() void;
284288
285pub extern fn LLVMInitializeAArch64AsmParser() void;289pub extern fn LLVMInitializeAArch64AsmParser() void;
286pub extern fn LLVMInitializeAMDGPUAsmParser() void;290pub extern fn LLVMInitializeAMDGPUAsmParser() void;
src/target.zig+4-7
...@@ -172,6 +172,9 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {...@@ -172,6 +172,9 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {
172 .riscv64,172 .riscv64,
173 .sparc,173 .sparc,
174 .sparc64,174 .sparc64,
175 .spirv,
176 .spirv32,
177 .spirv64,
175 .s390x,178 .s390x,
176 .thumb,179 .thumb,
177 .thumbeb,180 .thumbeb,
...@@ -187,12 +190,6 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {...@@ -187,12 +190,6 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {
187 .ve,190 .ve,
188 => true,191 => true,
189192
190 // An LLVM backend exists but we don't currently support using it.
191 .spirv,
192 .spirv32,
193 .spirv64,
194 => false,
195
196 // No LLVM backend exists.193 // No LLVM backend exists.
197 .kalimba,194 .kalimba,
198 .propeller,195 .propeller,
...@@ -213,7 +210,7 @@ pub fn hasLldSupport(ofmt: std.Target.ObjectFormat) bool {...@@ -213,7 +210,7 @@ pub fn hasLldSupport(ofmt: std.Target.ObjectFormat) bool {
213/// debug mode. A given target should only return true here if it is passing greater210/// debug mode. A given target should only return true here if it is passing greater
214/// than or equal to the number of behavior tests as the respective LLVM backend.211/// than or equal to the number of behavior tests as the respective LLVM backend.
215pub fn selfHostedBackendIsAsRobustAsLlvm(target: std.Target) bool {212pub fn selfHostedBackendIsAsRobustAsLlvm(target: std.Target) bool {
216 _ = target;213 if (target.cpu.arch.isSpirV()) return true;
217 return false;214 return false;
218}215}
219216