[qfcc] Use OpBitcast for alias exprs in spirv

Really, just implementing it properly.
This commit is contained in:
Bill Currie 2025-01-20 12:31:22 +09:00
parent 54231b21ed
commit 133156fdc7

View file

@ -1398,11 +1398,16 @@ spirv_alias (const expr_t *e, spirvctx_t *ctx)
if (e->alias.offset) { if (e->alias.offset) {
internal_error (e, "offset alias in spir-v"); internal_error (e, "offset alias in spir-v");
} }
if (!is_integral (e->alias.type) auto type = e->alias.type;
|| !is_integral (get_type (e->alias.expr))) { auto expr = e->alias.expr;
internal_error (e, "non-integral alias in spir-v"); unsigned eid = spirv_emit_expr (expr, ctx);
} int tid = type_id (type, ctx);
return spirv_emit_expr (e->alias.expr, ctx); int id = spirv_id (ctx);
auto insn = spirv_new_insn (SpvOpBitcast, 4, ctx->code_space);
INSN (insn, 1) = tid;
INSN (insn, 2) = id;
INSN (insn, 3) = eid;
return id;
} }
static unsigned static unsigned