authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-10-07 22:11:10+02:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-10-15 14:00:01+02:00
log0a3e566f57063c42146aa2d64481a7eb1361f96f
tree5d673f65f500bb26e0cc664b2d9ad7afb07ee4cd
parentc6c5fb40deaa104226581d79b3b9332315e11309
signaturebadge-check Signed by SSH key SHA256:CQ99aPxq+RueiL9u7z0FEki5Fm7V6T8q4PrEGmINrA4

spirv: make bitcasts between the same spirv type a no-op


2 files changed, 7 insertions(+), 5 deletions(-)

src/codegen/spirv.zig+7-1
......@@ -2527,7 +2527,12 @@ const DeclGen = struct {
25272527 src_id: IdRef,
25282528 ) !IdRef {
25292529 const mod = self.module;
2530 const src_ty_ref = try self.resolveType(src_ty, .direct);
25302531 const dst_ty_ref = try self.resolveType(dst_ty, .direct);
2532 if (src_ty_ref == dst_ty_ref) {
2533 return src_id;
2534 }
2535
25312536 const result_id = self.spv.allocId();
25322537
25332538 // TODO: Some more cases are missing here
......@@ -2811,7 +2816,8 @@ const DeclGen = struct {
28112816
28122817 fn airSliceElemPtr(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
28132818 const mod = self.module;
2814 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
2819 const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;
2820 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
28152821 const slice_ty = self.typeOf(bin_op.lhs);
28162822 if (!slice_ty.isVolatilePtr(mod) and self.liveness.isUnused(inst)) return null;
28172823
test/behavior/for.zig-4
......@@ -70,7 +70,6 @@ test "basic for loop" {
7070 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7171 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
7272 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
73 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
7473
7574 const expected_result = [_]u8{ 9, 8, 7, 6, 0, 1, 2, 3 } ** 3;
7675
......@@ -157,7 +156,6 @@ test "for loop with pointer elem var" {
157156 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
158157 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
159158 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
160 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
161159
162160 const source = "abcdefg";
163161 var target: [source.len]u8 = undefined;
......@@ -204,7 +202,6 @@ test "for on slice with allowzero ptr" {
204202 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
205203 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
206204 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
207 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
208205
209206 const S = struct {
210207 fn doTheTest(slice: []const u8) !void {
......@@ -344,7 +341,6 @@ test "two slices, one captured by-ref" {
344341 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
345342 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
346343 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
347 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
348344
349345 var buf: [10]u8 = undefined;
350346 const slice1: []const u8 = "blah";