authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-09-17 14:01:11+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-09-23 12:36:56-07:00
log5141b4e05c08f394c4c0e76ea73f0547c9854288
tree1bea56ac716e6b973b0948fc0b5605a72708fbf0
parenta86c939857f494a1d8f5749db1a10f008cd40ef3

spirv: fix store of undef


1 files changed, 2 insertions(+), 9 deletions(-)

src/codegen/spirv.zig+2-9
......@@ -2753,20 +2753,12 @@ pub const DeclGen = struct {
27532753 }
27542754
27552755 fn airStore(self: *DeclGen, inst: Air.Inst.Index) !void {
2756 const mod = self.module;
27572756 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
27582757 const ptr_ty = self.typeOf(bin_op.lhs);
27592758 const ptr = try self.resolve(bin_op.lhs);
27602759 const value = try self.resolve(bin_op.rhs);
2761 const ptr_ty_ref = try self.resolveType(ptr_ty, .direct);
27622760
2763 const val_is_undef = if (try self.air.value(bin_op.rhs, mod)) |val| val.isUndefDeep(mod) else false;
2764 if (val_is_undef) {
2765 const undef = try self.spv.constUndef(ptr_ty_ref);
2766 try self.store(ptr_ty, ptr, undef);
2767 } else {
2768 try self.store(ptr_ty, ptr, value);
2769 }
2761 try self.store(ptr_ty, ptr, value);
27702762 }
27712763
27722764 fn airLoop(self: *DeclGen, inst: Air.Inst.Index) !void {
......@@ -2790,6 +2782,7 @@ pub const DeclGen = struct {
27902782 const operand_ty = self.typeOf(operand);
27912783 const mod = self.module;
27922784 if (operand_ty.hasRuntimeBits(mod)) {
2785 // TODO: If we return an empty struct, this branch is also hit incorrectly.
27932786 const operand_id = try self.resolve(operand);
27942787 try self.func.body.emit(self.spv.gpa, .OpReturnValue, .{ .value = operand_id });
27952788 } else {