authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-10-08 11:04:48+02:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-10-15 14:00:06+02:00
logd0e7a3596ba480fdbc59644fd13859efe3024ea8
tree21712527555edc3a102ae9013b81e2f12ed1e5c0
parent2d52fc762da7e7288c4caa381fb02933c205e9be
signaturebadge-check Signed by SSH key SHA256:CQ99aPxq+RueiL9u7z0FEki5Fm7V6T8q4PrEGmINrA4

spirv: allow generation of *i0


2 files changed, 8 insertions(+), 3 deletions(-)

src/codegen/spirv.zig+8-1
...@@ -1219,7 +1219,14 @@ const DeclGen = struct {...@@ -1219,7 +1219,14 @@ const DeclGen = struct {
1219 },1219 },
1220 .Int => {1220 .Int => {
1221 const int_info = ty.intInfo(mod);1221 const int_info = ty.intInfo(mod);
1222 // TODO: Integers in OpenCL kernels are always unsigned.1222 if (int_info.bits == 0) {
1223 // Some times, the backend will be asked to generate a pointer to i0. OpTypeInt
1224 // with 0 bits is invalid, so return an opaque type in this case.
1225 assert(repr == .indirect);
1226 return try self.spv.resolve(.{ .opaque_type = .{
1227 .name = try self.spv.resolveString("u0"),
1228 } });
1229 }
1223 return try self.intType(int_info.signedness, int_info.bits);1230 return try self.intType(int_info.signedness, int_info.bits);
1224 },1231 },
1225 .Enum => {1232 .Enum => {
test/behavior/array.zig-2
...@@ -261,7 +261,6 @@ fn doSomeMangling(array: *[4]u8) void {...@@ -261,7 +261,6 @@ fn doSomeMangling(array: *[4]u8) void {
261261
262test "implicit cast zero sized array ptr to slice" {262test "implicit cast zero sized array ptr to slice" {
263 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO263 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
264 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
265264
266 {265 {
267 var b = "".*;266 var b = "".*;
...@@ -732,7 +731,6 @@ test "slicing array of zero-sized values" {...@@ -732,7 +731,6 @@ test "slicing array of zero-sized values" {
732 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;731 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
733 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;732 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
734 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;733 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
735 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
736734
737 var arr: [32]u0 = undefined;735 var arr: [32]u0 = undefined;
738 for (arr[0..]) |*zero|736 for (arr[0..]) |*zero|