@@ -293,22 +293,20 @@ pub(crate) fn codegen_checked_int_binop<'tcx>(
293
293
}
294
294
BinOp :: Shl => {
295
295
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) ;
299
298
let ty = fx. bcx . func . dfg . value_type ( val) ;
300
299
let max_shift = i64:: from ( ty. bits ( ) ) - 1 ;
301
300
let has_overflow = fx. bcx . ins ( ) . icmp_imm ( IntCC :: UnsignedGreaterThan , rhs, max_shift) ;
302
301
( val, has_overflow)
303
302
}
304
303
BinOp :: Shr => {
305
304
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 ) ) ;
308
306
let val = if !signed {
309
- fx. bcx . ins ( ) . ushr ( lhs, actual_shift )
307
+ fx. bcx . ins ( ) . ushr ( lhs, masked_shift )
310
308
} else {
311
- fx. bcx . ins ( ) . sshr ( lhs, actual_shift )
309
+ fx. bcx . ins ( ) . sshr ( lhs, masked_shift )
312
310
} ;
313
311
let ty = fx. bcx . func . dfg . value_type ( val) ;
314
312
let max_shift = i64:: from ( ty. bits ( ) ) - 1 ;
0 commit comments