@@ -798,20 +798,41 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
798798 bx. add ( lhs, rhs)
799799 }
800800 }
801+ mir:: BinOp :: AddUnchecked => {
802+ if is_signed {
803+ bx. unchecked_sadd ( lhs, rhs)
804+ } else {
805+ bx. unchecked_uadd ( lhs, rhs)
806+ }
807+ }
801808 mir:: BinOp :: Sub => {
802809 if is_float {
803810 bx. fsub ( lhs, rhs)
804811 } else {
805812 bx. sub ( lhs, rhs)
806813 }
807814 }
815+ mir:: BinOp :: SubUnchecked => {
816+ if is_signed {
817+ bx. unchecked_ssub ( lhs, rhs)
818+ } else {
819+ bx. unchecked_usub ( lhs, rhs)
820+ }
821+ }
808822 mir:: BinOp :: Mul => {
809823 if is_float {
810824 bx. fmul ( lhs, rhs)
811825 } else {
812826 bx. mul ( lhs, rhs)
813827 }
814828 }
829+ mir:: BinOp :: MulUnchecked => {
830+ if is_signed {
831+ bx. unchecked_smul ( lhs, rhs)
832+ } else {
833+ bx. unchecked_umul ( lhs, rhs)
834+ }
835+ }
815836 mir:: BinOp :: Div => {
816837 if is_float {
817838 bx. fdiv ( lhs, rhs)
@@ -848,8 +869,16 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
848869 bx. inbounds_gep ( llty, lhs, & [ rhs] )
849870 }
850871 }
851- mir:: BinOp :: Shl => common:: build_unchecked_lshift ( bx, lhs, rhs) ,
852- mir:: BinOp :: Shr => common:: build_unchecked_rshift ( bx, input_ty, lhs, rhs) ,
872+ mir:: BinOp :: Shl => common:: build_masked_lshift ( bx, lhs, rhs) ,
873+ mir:: BinOp :: ShlUnchecked => {
874+ let rhs = base:: cast_shift_expr_rhs ( bx, lhs, rhs) ;
875+ bx. shl ( lhs, rhs)
876+ }
877+ mir:: BinOp :: Shr => common:: build_masked_rshift ( bx, input_ty, lhs, rhs) ,
878+ mir:: BinOp :: ShrUnchecked => {
879+ let rhs = base:: cast_shift_expr_rhs ( bx, lhs, rhs) ;
880+ if is_signed { bx. ashr ( lhs, rhs) } else { bx. lshr ( lhs, rhs) }
881+ }
853882 mir:: BinOp :: Ne
854883 | mir:: BinOp :: Lt
855884 | mir:: BinOp :: Gt
0 commit comments