zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit c3aa32e98408c8e6e1578e573b8e2eef47fd4c54 (tree)
parent efe06c5f31fe1e9ff02da1082367302b0a188a63
Author: Antonio Gomes <antoniospg100@gmail.com>
Date:   Wed,  1 May 2024 08:04:39 -0300

Sema: Don't generate runtime instructions on zirSplat if dest_ty doesn't have runtime bits

Diffstat:
Msrc/Sema.zig | 8++++++++
1 file changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -24295,6 +24295,14 @@ fn zirSplat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I if (!dest_ty.isVector(mod)) return sema.fail(block, src, "expected vector type, found '{}'", .{dest_ty.fmt(mod)}); + if (!dest_ty.hasRuntimeBits(mod)) { + const empty_aggregate = try mod.intern(.{ .aggregate = .{ + .ty = dest_ty.toIntern(), + .storage = .{ .elems = &[_]InternPool.Index{} }, + } }); + return Air.internedToRef(empty_aggregate); + } + const operand = try sema.resolveInst(extra.rhs); const scalar_ty = dest_ty.childType(mod); const scalar = try sema.coerce(block, scalar_ty, operand, scalar_src);