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 {
1272312723 llvm.LLVMInitializeLoongArchAsmPrinter();
1272412724 llvm.LLVMInitializeLoongArchAsmParser();
1272512725 },
12726
12727 // We don't currently support using these backends.
1272812726 .spirv,
1272912727 .spirv32,
1273012728 .spirv64,
12731 => {},
12729 => {
12730 llvm.LLVMInitializeSPIRVTarget();
12731 llvm.LLVMInitializeSPIRVTargetInfo();
12732 llvm.LLVMInitializeSPIRVTargetMC();
12733 llvm.LLVMInitializeSPIRVAsmPrinter();
12734 },
1273212735
1273312736 // LLVM does does not have a backend for these.
1273412737 .kalimba,
src/codegen/llvm/bindings.zig+4
......@@ -211,6 +211,7 @@ pub extern fn LLVMInitializeCSKYTargetInfo() void;
211211pub extern fn LLVMInitializeVETargetInfo() void;
212212pub extern fn LLVMInitializeARCTargetInfo() void;
213213pub extern fn LLVMInitializeLoongArchTargetInfo() void;
214pub extern fn LLVMInitializeSPIRVTargetInfo() void;
214215
215216pub extern fn LLVMInitializeAArch64Target() void;
216217pub extern fn LLVMInitializeAMDGPUTarget() void;
......@@ -235,6 +236,7 @@ pub extern fn LLVMInitializeVETarget() void;
235236pub extern fn LLVMInitializeCSKYTarget() void;
236237pub extern fn LLVMInitializeARCTarget() void;
237238pub extern fn LLVMInitializeLoongArchTarget() void;
239pub extern fn LLVMInitializeSPIRVTarget() void;
238240
239241pub extern fn LLVMInitializeAArch64TargetMC() void;
240242pub extern fn LLVMInitializeAMDGPUTargetMC() void;
......@@ -259,6 +261,7 @@ pub extern fn LLVMInitializeCSKYTargetMC() void;
259261pub extern fn LLVMInitializeVETargetMC() void;
260262pub extern fn LLVMInitializeARCTargetMC() void;
261263pub extern fn LLVMInitializeLoongArchTargetMC() void;
264pub extern fn LLVMInitializeSPIRVTargetMC() void;
262265
263266pub extern fn LLVMInitializeAArch64AsmPrinter() void;
264267pub extern fn LLVMInitializeAMDGPUAsmPrinter() void;
......@@ -281,6 +284,7 @@ pub extern fn LLVMInitializeM68kAsmPrinter() void;
281284pub extern fn LLVMInitializeVEAsmPrinter() void;
282285pub extern fn LLVMInitializeARCAsmPrinter() void;
283286pub extern fn LLVMInitializeLoongArchAsmPrinter() void;
287pub extern fn LLVMInitializeSPIRVAsmPrinter() void;
284288
285289pub extern fn LLVMInitializeAArch64AsmParser() void;
286290pub extern fn LLVMInitializeAMDGPUAsmParser() void;
src/target.zig+4-7
......@@ -172,6 +172,9 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {
172172 .riscv64,
173173 .sparc,
174174 .sparc64,
175 .spirv,
176 .spirv32,
177 .spirv64,
175178 .s390x,
176179 .thumb,
177180 .thumbeb,
......@@ -187,12 +190,6 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {
187190 .ve,
188191 => true,
189192
190 // An LLVM backend exists but we don't currently support using it.
191 .spirv,
192 .spirv32,
193 .spirv64,
194 => false,
195
196193 // No LLVM backend exists.
197194 .kalimba,
198195 .propeller,
......@@ -213,7 +210,7 @@ pub fn hasLldSupport(ofmt: std.Target.ObjectFormat) bool {
213210/// debug mode. A given target should only return true here if it is passing greater
214211/// than or equal to the number of behavior tests as the respective LLVM backend.
215212pub fn selfHostedBackendIsAsRobustAsLlvm(target: std.Target) bool {
216 _ = target;
213 if (target.cpu.arch.isSpirV()) return true;
217214 return false;
218215}
219216