authorgravatar for alichraghi@proton.meAli Chraghi <alichraghi@proton.me> 2023-05-11 09:25:59+03:30
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-05-11 20:31:52+02:00
logd61dc3a5a2320d1adda759cf5f90aaf817cb9ca2
treeddc75ca44b332252814b2df377ee9d11bf33f44e
parentccc490ef6876291ed3df5e945e7df913018c32af
signaturelock-open Commit is signed but in an unrecognized format.

spirv: lower store_safe, trunc and trap


1 files changed, 26 insertions(+), 19 deletions(-)

src/codegen/spirv.zig+26-19
......@@ -1688,9 +1688,9 @@ pub const DeclGen = struct {
16881688
16891689 .shl => try self.airShift(inst, .OpShiftLeftLogical),
16901690
1691 .bitcast => try self.airBitcast(inst),
1692 .intcast => try self.airIntcast(inst),
1693 .not => try self.airNot(inst),
1691 .bitcast => try self.airBitcast(inst),
1692 .intcast, .trunc => try self.airIntcast(inst),
1693 .not => try self.airNot(inst),
16941694
16951695 .slice_ptr => try self.airSliceField(inst, 0),
16961696 .slice_len => try self.airSliceField(inst, 1),
......@@ -1718,21 +1718,21 @@ pub const DeclGen = struct {
17181718 .ret_ptr => try self.airAlloc(inst),
17191719 .block => try self.airBlock(inst),
17201720
1721 .load => try self.airLoad(inst),
1722 .store => return self.airStore(inst),
1723
1724 .br => return self.airBr(inst),
1725 .breakpoint => return,
1726 .cond_br => return self.airCondBr(inst),
1727 .constant => unreachable,
1728 .const_ty => unreachable,
1729 .dbg_stmt => return self.airDbgStmt(inst),
1730 .loop => return self.airLoop(inst),
1731 .ret => return self.airRet(inst),
1732 .ret_load => return self.airRetLoad(inst),
1733 .@"try" => try self.airTry(inst),
1734 .switch_br => return self.airSwitchBr(inst),
1735 .unreach => return self.airUnreach(),
1721 .load => try self.airLoad(inst),
1722 .store, .store_safe => return self.airStore(inst),
1723
1724 .br => return self.airBr(inst),
1725 .breakpoint => return,
1726 .cond_br => return self.airCondBr(inst),
1727 .constant => unreachable,
1728 .const_ty => unreachable,
1729 .dbg_stmt => return self.airDbgStmt(inst),
1730 .loop => return self.airLoop(inst),
1731 .ret => return self.airRet(inst),
1732 .ret_load => return self.airRetLoad(inst),
1733 .@"try" => try self.airTry(inst),
1734 .switch_br => return self.airSwitchBr(inst),
1735 .unreach, .trap => return self.airUnreach(),
17361736
17371737 .unwrap_errunion_err => try self.airErrUnionErr(inst),
17381738 .wrap_errunion_err => try self.airWrapErrUnionErr(inst),
......@@ -2490,8 +2490,15 @@ pub const DeclGen = struct {
24902490 const ptr_ty = self.air.typeOf(bin_op.lhs);
24912491 const ptr = try self.resolve(bin_op.lhs);
24922492 const value = try self.resolve(bin_op.rhs);
2493 const ptr_ty_ref = try self.resolveType(ptr_ty, .direct);
24932494
2494 try self.store(ptr_ty, ptr, value);
2495 const val_is_undef = if (self.air.value(bin_op.rhs)) |val| val.isUndefDeep() else false;
2496 if (val_is_undef) {
2497 const undef = try self.constUndef(ptr_ty_ref);
2498 try self.store(ptr_ty, ptr, undef);
2499 } else {
2500 try self.store(ptr_ty, ptr, value);
2501 }
24952502 }
24962503
24972504 fn airLoop(self: *DeclGen, inst: Air.Inst.Index) !void {