aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-03-31 16:23:01 -0400
committerVeikka Tuominen <git@vexu.eu>2023-04-02 18:05:44 +0300
commitf4b411314ccf8e852d3febddc8b31ce1f533938b (patch)
tree41ff16cd4d9bec89e5f57be34e790017be93a4d0 /src/codegen
parent878163e58813aef968900aa7495dacc5220eb941 (diff)
downloadzig-f4b411314ccf8e852d3febddc8b31ce1f533938b.tar.gz
zig-f4b411314ccf8e852d3febddc8b31ce1f533938b.zip
Sema: defer stores to inferred allocs
This lets us generate the store with knowledge of the type to be stored. Therefore, we can avoid generating garbage Air with stores through pointers to comptime-only types which backends cannot lower. Closes #13410 Closes #15122
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/c.zig8
-rw-r--r--src/codegen/llvm.zig1
2 files changed, 1 insertions, 8 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 704a1e31c5..a3758bac69 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -3597,10 +3597,6 @@ fn airStore(f: *Function, inst: Air.Inst.Index) !CValue {
const ptr_ty = f.air.typeOf(bin_op.lhs);
const ptr_scalar_ty = ptr_ty.scalarType();
const ptr_info = ptr_scalar_ty.ptrInfo().data;
- if (!ptr_info.pointee_type.hasRuntimeBitsIgnoreComptime()) {
- try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
- return .none;
- }
const ptr_val = try f.resolveInst(bin_op.lhs);
const src_ty = f.air.typeOf(bin_op.rhs);
@@ -4461,9 +4457,7 @@ fn airBr(f: *Function, inst: Air.Inst.Index) !CValue {
fn airBitcast(f: *Function, inst: Air.Inst.Index) !CValue {
const ty_op = f.air.instructions.items(.data)[inst].ty_op;
const dest_ty = f.air.typeOfIndex(inst);
- // No IgnoreComptime until Sema stops giving us garbage Air.
- // https://github.com/ziglang/zig/issues/13410
- if (f.liveness.isUnused(inst) or !dest_ty.hasRuntimeBits()) {
+ if (f.liveness.isUnused(inst)) {
try reap(f, inst, &.{ty_op.operand});
return .none;
}
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index ce49fcde78..f32047fe64 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -8216,7 +8216,6 @@ pub const FuncGen = struct {
const dest_ptr = try self.resolveInst(bin_op.lhs);
const ptr_ty = self.air.typeOf(bin_op.lhs);
const operand_ty = ptr_ty.childType();
- if (!operand_ty.isFnOrHasRuntimeBitsIgnoreComptime()) return null;
// TODO Sema should emit a different instruction when the store should
// possibly do the safety 0xaa bytes for undefined.