aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/spirv.zig
diff options
context:
space:
mode:
authorAli Chraghi <alichraghi@proton.me>2023-05-15 22:04:42 +0330
committerAli Chraghi <alichraghi@proton.me>2023-05-15 22:04:42 +0330
commit6fca3f8b72397d62dd7b2d2e07db843c88428ac3 (patch)
treeb7d5163be18eb039ddd9f008ab2256748af63cbe /src/codegen/spirv.zig
parentf8de4db8731e20995d16ec29bc0fb553e7d6f5bf (diff)
downloadzig-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.zig27
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;