@@ -697,20 +697,14 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
697
697
default : RValue < ' gcc > ,
698
698
pointers : RValue < ' gcc > ,
699
699
mask : RValue < ' gcc > ,
700
- pointer_count : usize ,
701
700
bx : & mut Builder < ' a , ' gcc , ' tcx > ,
702
701
in_len : u64 ,
703
- underlying_ty : Ty < ' tcx > ,
704
702
invert : bool ,
705
703
) -> 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 ( ) ;
712
706
713
- let mut values = vec ! [ ] ;
707
+ let mut values = Vec :: with_capacity ( in_len as usize ) ;
714
708
for i in 0 ..in_len {
715
709
let index = bx. context . new_rvalue_from_long ( bx. i32_type , i as i64 ) ;
716
710
let int = bx. context . new_vector_access ( None , pointers, index) . to_rvalue ( ) ;
@@ -723,13 +717,14 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
723
717
724
718
let vector = bx. context . new_rvalue_from_vector ( None , vector_type, & values) ;
725
719
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 ) ;
728
722
for i in 0 ..in_len {
729
723
let index = bx. context . new_rvalue_from_long ( bx. i32_type , i as i64 ) ;
730
724
mask_types. push ( bx. context . new_field ( None , bx. i32_type , "m" ) ) ;
731
725
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;
733
728
let value = index + masked;
734
729
mask_values. push ( value) ;
735
730
}
@@ -858,10 +853,8 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
858
853
args[ 0 ] . immediate ( ) ,
859
854
args[ 1 ] . immediate ( ) ,
860
855
args[ 2 ] . immediate ( ) ,
861
- pointer_count,
862
856
bx,
863
857
in_len,
864
- underlying_ty,
865
858
false ,
866
859
) ) ;
867
860
}
@@ -976,10 +969,8 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
976
969
args[ 0 ] . immediate ( ) ,
977
970
args[ 1 ] . immediate ( ) ,
978
971
args[ 2 ] . immediate ( ) ,
979
- pointer_count,
980
972
bx,
981
973
in_len,
982
- underlying_ty,
983
974
true ,
984
975
) ;
985
976
0 commit comments