Skip to content

Commit 6dc386e

Browse files
committed
Don't truncate the shift amount
It isn't actually necessary
1 parent f7cfb9d commit 6dc386e

File tree

1 file changed

+5
-7
lines changed

1 file changed

+5
-7
lines changed

src/num.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -293,22 +293,20 @@ pub(crate) fn codegen_checked_int_binop<'tcx>(
293293
}
294294
BinOp::Shl => {
295295
let lhs_ty = fx.bcx.func.dfg.value_type(lhs);
296-
let actual_shift = fx.bcx.ins().band_imm(rhs, i64::from(lhs_ty.bits() - 1));
297-
let actual_shift = clif_intcast(fx, actual_shift, types::I8, false);
298-
let val = fx.bcx.ins().ishl(lhs, actual_shift);
296+
let masked_shift = fx.bcx.ins().band_imm(rhs, i64::from(lhs_ty.bits() - 1));
297+
let val = fx.bcx.ins().ishl(lhs, masked_shift);
299298
let ty = fx.bcx.func.dfg.value_type(val);
300299
let max_shift = i64::from(ty.bits()) - 1;
301300
let has_overflow = fx.bcx.ins().icmp_imm(IntCC::UnsignedGreaterThan, rhs, max_shift);
302301
(val, has_overflow)
303302
}
304303
BinOp::Shr => {
305304
let lhs_ty = fx.bcx.func.dfg.value_type(lhs);
306-
let actual_shift = fx.bcx.ins().band_imm(rhs, i64::from(lhs_ty.bits() - 1));
307-
let actual_shift = clif_intcast(fx, actual_shift, types::I8, false);
305+
let masked_shift = fx.bcx.ins().band_imm(rhs, i64::from(lhs_ty.bits() - 1));
308306
let val = if !signed {
309-
fx.bcx.ins().ushr(lhs, actual_shift)
307+
fx.bcx.ins().ushr(lhs, masked_shift)
310308
} else {
311-
fx.bcx.ins().sshr(lhs, actual_shift)
309+
fx.bcx.ins().sshr(lhs, masked_shift)
312310
};
313311
let ty = fx.bcx.func.dfg.value_type(val);
314312
let max_shift = i64::from(ty.bits()) - 1;

0 commit comments

Comments
 (0)