@@ -697,20 +697,14 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
697697 default : RValue < ' gcc > ,
698698 pointers : RValue < ' gcc > ,
699699 mask : RValue < ' gcc > ,
700- pointer_count : usize ,
701700 bx : & mut Builder < ' a , ' gcc , ' tcx > ,
702701 in_len : u64 ,
703- underlying_ty : Ty < ' tcx > ,
704702 invert : bool ,
705703 ) -> RValue < ' gcc > {
706- let vector_type = if pointer_count > 1 {
707- bx. context . new_vector_type ( bx. usize_type , in_len)
708- } else {
709- vector_ty ( bx, underlying_ty, in_len)
710- } ;
711- let elem_type = vector_type. dyncast_vector ( ) . expect ( "vector type" ) . get_element_type ( ) ;
704+ let vector_type = default. get_type ( ) ;
705+ let elem_type = vector_type. unqualified ( ) . dyncast_vector ( ) . expect ( "vector type" ) . get_element_type ( ) ;
712706
713- let mut values = vec ! [ ] ;
707+ let mut values = Vec :: with_capacity ( in_len as usize ) ;
714708 for i in 0 ..in_len {
715709 let index = bx. context . new_rvalue_from_long ( bx. i32_type , i as i64 ) ;
716710 let int = bx. context . new_vector_access ( None , pointers, index) . to_rvalue ( ) ;
@@ -723,13 +717,14 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
723717
724718 let vector = bx. context . new_rvalue_from_vector ( None , vector_type, & values) ;
725719
726- let mut mask_types = vec ! [ ] ;
727- let mut mask_values = vec ! [ ] ;
720+ let mut mask_types = Vec :: with_capacity ( in_len as usize ) ;
721+ let mut mask_values = Vec :: with_capacity ( in_len as usize ) ;
728722 for i in 0 ..in_len {
729723 let index = bx. context . new_rvalue_from_long ( bx. i32_type , i as i64 ) ;
730724 mask_types. push ( bx. context . new_field ( None , bx. i32_type , "m" ) ) ;
731725 let mask_value = bx. context . new_vector_access ( None , mask, index) . to_rvalue ( ) ;
732- let masked = bx. context . new_rvalue_from_int ( bx. i32_type , in_len as i32 ) & mask_value;
726+ let mask_value_cast = bx. context . new_cast ( None , mask_value, bx. i32_type ) ;
727+ let masked = bx. context . new_rvalue_from_int ( bx. i32_type , in_len as i32 ) & mask_value_cast;
733728 let value = index + masked;
734729 mask_values. push ( value) ;
735730 }
@@ -858,10 +853,8 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
858853 args[ 0 ] . immediate ( ) ,
859854 args[ 1 ] . immediate ( ) ,
860855 args[ 2 ] . immediate ( ) ,
861- pointer_count,
862856 bx,
863857 in_len,
864- underlying_ty,
865858 false ,
866859 ) ) ;
867860 }
@@ -976,10 +969,8 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
976969 args[ 0 ] . immediate ( ) ,
977970 args[ 1 ] . immediate ( ) ,
978971 args[ 2 ] . immediate ( ) ,
979- pointer_count,
980972 bx,
981973 in_len,
982- underlying_ty,
983974 true ,
984975 ) ;
985976
0 commit comments