From 168be7a8d2a07b1079e54afdc7c602f8eca1f5ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Arrufat?= Date: Fri, 20 Mar 2026 17:02:48 +0900 Subject: [PATCH] Sema: simplify zirRoundCast logic --- src/Sema.zig | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index b10d1dbe70..a3513e2491 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -20927,7 +20927,7 @@ fn zirRoundCast( if (sema.resolveValue(operand)) |operand_val| { const result_val = try sema.intFromFloat(block, operand_src, operand_val, operand_ty, dest_ty, mode); - return Air.internedToRef(result_val.toIntern()); + return .fromValue(result_val); } else if (dest_scalar_ty.zigTypeTag(zcu) == .comptime_int) { return sema.failWithNeededComptime(block, operand_src, .{ .simple = .casted_to_comptime_int }); } @@ -20948,32 +20948,23 @@ fn zirRoundCast( } const safe = block.wantSafety(); - const optimized = block.float_mode == .optimized; if (safe) { try sema.preparePanicId(src, .integer_part_out_of_bounds); } - if (mode == .truncate) { - const air_tag: Air.Inst.Tag = if (safe) - if (optimized) .int_from_float_optimized_safe else .int_from_float_safe - else if (optimized) .int_from_float_optimized else .int_from_float; - return block.addTyOp(air_tag, dest_ty, operand); - } else { - const op_tag: Air.Inst.Tag = switch (mode) { - .round => .round, - .floor => .floor, - .ceil => .ceil, - .truncate, .exact => unreachable, - }; - const rounded_op = try block.addUnOp(op_tag, operand); - - const air_tag: Air.Inst.Tag = if (safe) - if (optimized) .int_from_float_optimized_safe else .int_from_float_safe - else if (optimized) .int_from_float_optimized else .int_from_float; - - return block.addTyOp(air_tag, dest_ty, rounded_op); - } + const uncasted_result: Air.Inst.Ref = switch (mode) { + .truncate => operand, + .round => try block.addUnOp(.round, operand), + .floor => try block.addUnOp(.floor, operand), + .ceil => try block.addUnOp(.ceil, operand), + .exact => unreachable, + }; + const air_cast_tag: Air.Inst.Tag = switch (block.float_mode) { + .optimized => if (safe) .int_from_float_optimized_safe else .int_from_float_safe, + .strict => if (safe) .int_from_float_safe else .int_from_float, + }; + return block.addTyOp(air_cast_tag, dest_ty, uncasted_result); } fn zirFloatFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {