diff options
| author | Ali Chraghi <alichraghi@proton.me> | 2023-05-15 22:04:42 +0330 |
|---|---|---|
| committer | Ali Chraghi <alichraghi@proton.me> | 2023-05-15 22:04:42 +0330 |
| commit | 6fca3f8b72397d62dd7b2d2e07db843c88428ac3 (patch) | |
| tree | b7d5163be18eb039ddd9f008ab2256748af63cbe /src/codegen/spirv.zig | |
| parent | f8de4db8731e20995d16ec29bc0fb553e7d6f5bf (diff) | |
| download | zig-6fca3f8b72397d62dd7b2d2e07db843c88428ac3.tar.gz zig-6fca3f8b72397d62dd7b2d2e07db843c88428ac3.zip | |
spirv: lower ptrtoint & ignore dbg_inline instructions
Diffstat (limited to 'src/codegen/spirv.zig')
| -rw-r--r-- | src/codegen/spirv.zig | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index 6e95db9a68..d1def8a02e 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -1724,6 +1724,7 @@ pub const DeclGen = struct { .bitcast => try self.airBitcast(inst), .intcast, .trunc => try self.airIntcast(inst), + .ptrtoint => try self.airPtrToInt(inst), .int_to_float => try self.airIntToFloat(inst), .float_to_int => try self.airFloatToInt(inst), .not => try self.airNot(inst), @@ -1786,10 +1787,12 @@ pub const DeclGen = struct { .call_never_tail => try self.airCall(inst, .never_tail), .call_never_inline => try self.airCall(inst, .never_inline), - .dbg_var_ptr => return, - .dbg_var_val => return, - .dbg_block_begin => return, - .dbg_block_end => return, + .dbg_inline_begin => return, + .dbg_inline_end => return, + .dbg_var_ptr => return, + .dbg_var_val => return, + .dbg_block_begin => return, + .dbg_block_end => return, // zig fmt: on else => |tag| return self.todo("implement AIR tag {s}", .{@tagName(tag)}), @@ -2131,6 +2134,22 @@ pub const DeclGen = struct { return result_id; } + fn airPtrToInt(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { + if (self.liveness.isUnused(inst)) return null; + + const un_op = self.air.instructions.items(.data)[inst].un_op; + const operand_id = try self.resolve(un_op); + const result_type_id = try self.resolveTypeId(Type.usize); + + const result_id = self.spv.allocId(); + try self.func.body.emit(self.spv.gpa, .OpConvertPtrToU, .{ + .id_result_type = result_type_id, + .id_result = result_id, + .pointer = operand_id, + }); + return result_id; + } + fn airIntToFloat(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { if (self.liveness.isUnused(inst)) return null; |
