@@ -798,20 +798,41 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
798
798
bx. add ( lhs, rhs)
799
799
}
800
800
}
801
+ mir:: BinOp :: AddUnchecked => {
802
+ if is_signed {
803
+ bx. unchecked_sadd ( lhs, rhs)
804
+ } else {
805
+ bx. unchecked_uadd ( lhs, rhs)
806
+ }
807
+ }
801
808
mir:: BinOp :: Sub => {
802
809
if is_float {
803
810
bx. fsub ( lhs, rhs)
804
811
} else {
805
812
bx. sub ( lhs, rhs)
806
813
}
807
814
}
815
+ mir:: BinOp :: SubUnchecked => {
816
+ if is_signed {
817
+ bx. unchecked_ssub ( lhs, rhs)
818
+ } else {
819
+ bx. unchecked_usub ( lhs, rhs)
820
+ }
821
+ }
808
822
mir:: BinOp :: Mul => {
809
823
if is_float {
810
824
bx. fmul ( lhs, rhs)
811
825
} else {
812
826
bx. mul ( lhs, rhs)
813
827
}
814
828
}
829
+ mir:: BinOp :: MulUnchecked => {
830
+ if is_signed {
831
+ bx. unchecked_smul ( lhs, rhs)
832
+ } else {
833
+ bx. unchecked_umul ( lhs, rhs)
834
+ }
835
+ }
815
836
mir:: BinOp :: Div => {
816
837
if is_float {
817
838
bx. fdiv ( lhs, rhs)
@@ -848,8 +869,16 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
848
869
bx. inbounds_gep ( llty, lhs, & [ rhs] )
849
870
}
850
871
}
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
+ }
853
882
mir:: BinOp :: Ne
854
883
| mir:: BinOp :: Lt
855
884
| mir:: BinOp :: Gt
0 commit comments