Skip to content

Commit ddcf6fc

Browse files
committed
compiler: Allow using LLVM's SPIR-V backend.
1 parent 991560f commit ddcf6fc

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

src/codegen/llvm.zig

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ pub extern fn LLVMInitializeCSKYTargetInfo() void;
211211
pub extern fn LLVMInitializeVETargetInfo() void;
212212
pub extern fn LLVMInitializeARCTargetInfo() void;
213213
pub extern fn LLVMInitializeLoongArchTargetInfo() void;
214+
pub extern fn LLVMInitializeSPIRVTargetInfo() void;
214215

215216
pub extern fn LLVMInitializeAArch64Target() void;
216217
pub extern fn LLVMInitializeAMDGPUTarget() void;
@@ -235,6 +236,7 @@ pub extern fn LLVMInitializeVETarget() void;
235236
pub extern fn LLVMInitializeCSKYTarget() void;
236237
pub extern fn LLVMInitializeARCTarget() void;
237238
pub extern fn LLVMInitializeLoongArchTarget() void;
239+
pub extern fn LLVMInitializeSPIRVTarget() void;
238240

239241
pub extern fn LLVMInitializeAArch64TargetMC() void;
240242
pub extern fn LLVMInitializeAMDGPUTargetMC() void;
@@ -259,6 +261,7 @@ pub extern fn LLVMInitializeCSKYTargetMC() void;
259261
pub extern fn LLVMInitializeVETargetMC() void;
260262
pub extern fn LLVMInitializeARCTargetMC() void;
261263
pub extern fn LLVMInitializeLoongArchTargetMC() void;
264+
pub extern fn LLVMInitializeSPIRVTargetMC() void;
262265

263266
pub extern fn LLVMInitializeAArch64AsmPrinter() void;
264267
pub extern fn LLVMInitializeAMDGPUAsmPrinter() void;
@@ -281,6 +284,7 @@ pub extern fn LLVMInitializeM68kAsmPrinter() void;
281284
pub extern fn LLVMInitializeVEAsmPrinter() void;
282285
pub extern fn LLVMInitializeARCAsmPrinter() void;
283286
pub extern fn LLVMInitializeLoongArchAsmPrinter() void;
287+
pub extern fn LLVMInitializeSPIRVAsmPrinter() void;
284288

285289
pub extern fn LLVMInitializeAArch64AsmParser() void;
286290
pub extern fn LLVMInitializeAMDGPUAsmParser() void;

src/target.zig

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
215212
pub fn selfHostedBackendIsAsRobustAsLlvm(target: std.Target) bool {
216-
_ = target;
213+
if (target.cpu.arch.isSpirV()) return true;
217214
return false;
218215
}
219216

0 commit comments

Comments
 (0)