Skip to content

Commit 4ec4209

Browse files
committed
use default as output type source in simd_gather
Signed-off-by: Andy Sadler <[email protected]>
1 parent 087456f commit 4ec4209

File tree

1 file changed

+2
-18
lines changed

1 file changed

+2
-18
lines changed

src/intrinsic/simd.rs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -697,18 +697,12 @@ 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

713707
let mut values = Vec::with_capacity(in_len as usize);
714708
for i in 0..in_len {
@@ -737,12 +731,6 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
737731
let mask_type = bx.context.new_struct_type(None, "mask_type", &mask_types);
738732
let mask = bx.context.new_struct_constructor(None, mask_type.as_type(), None, &mask_values);
739733

740-
// FIXME(antoyo): We sometimes need to bitcast here, since usize/isize sometimes (but not
741-
// always) get canonicalized to their corresponding integer type (i.e. uint64_t/int64_t on
742-
// 64-bit platforms). This causes the shuffle_vector call below to panic, since the types
743-
// of the two vectors aren't the same. This is a workaround for now.
744-
let vector = bx.bitcast_if_needed(vector, default.get_type());
745-
746734
if invert {
747735
bx.shuffle_vector(vector, default, mask)
748736
} else {
@@ -865,10 +853,8 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
865853
args[0].immediate(),
866854
args[1].immediate(),
867855
args[2].immediate(),
868-
pointer_count,
869856
bx,
870857
in_len,
871-
underlying_ty,
872858
false,
873859
));
874860
}
@@ -983,10 +969,8 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
983969
args[0].immediate(),
984970
args[1].immediate(),
985971
args[2].immediate(),
986-
pointer_count,
987972
bx,
988973
in_len,
989-
underlying_ty,
990974
true,
991975
);
992976

0 commit comments

Comments
 (0)