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 {
12191219 },
12201220 .Int => {
12211221 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 }
12231230 return try self.intType(int_info.signedness, int_info.bits);
12241231 },
12251232 .Enum => {
test/behavior/array.zig-2
......@@ -261,7 +261,6 @@ fn doSomeMangling(array: *[4]u8) void {
261261
262262test "implicit cast zero sized array ptr to slice" {
263263 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
264 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
265264
266265 {
267266 var b = "".*;
......@@ -732,7 +731,6 @@ test "slicing array of zero-sized values" {
732731 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
733732 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
734733 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
735 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
736734
737735 var arr: [32]u0 = undefined;
738736 for (arr[0..]) |*zero|