Skip to content

Commit 3e02db2

Browse files
authored
Merge pull request rust-lang#446 from sadlerap/fix-simd-gather
fix tests/ui/simd/issue-89193.rs and mark as passing
2 parents 7600140 + 4ec4209 commit 3e02db2

File tree

3 files changed

+8
-17
lines changed

3 files changed

+8
-17
lines changed

src/intrinsic/simd.rs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

tests/failing-ui-tests.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ tests/ui/rfcs/rfc-1857-stabilize-drop-order/drop-order.rs
4848
tests/ui/rfcs/rfc-2091-track-caller/std-panic-locations.rs
4949
tests/ui/simd/issue-17170.rs
5050
tests/ui/simd/issue-39720.rs
51-
tests/ui/simd/issue-89193.rs
5251
tests/ui/statics/issue-91050-1.rs
5352
tests/ui/statics/issue-91050-2.rs
5453
tests/ui/alloc-error/default-alloc-error-hook.rs

tests/failing-ui-tests12.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ tests/ui/coroutine/size-moved-locals.rs
3333
tests/ui/macros/rfc-2011-nicer-assert-messages/all-not-available-cases.rs
3434
tests/ui/simd/intrinsic/generic-gather-pass.rs
3535
tests/ui/simd/issue-85915-simd-ptrs.rs
36+
tests/ui/simd/issue-89193.rs
3637
tests/ui/issues/issue-68010-large-zst-consts.rs
3738
tests/ui/rust-2018/proc-macro-crate-in-paths.rs
3839
tests/ui/target-feature/missing-plusminus.rs

0 commit comments

Comments
 (0)