Skip to content

Commit 173db39

Browse files
committed
Fix simd_select
1 parent e5ce7a9 commit 173db39

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

failing-ui-tests.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ src/test/ui/sepcomp/sepcomp-statics.rs
3333
src/test/ui/simd/intrinsic/generic-arithmetic-pass.rs
3434
src/test/ui/simd/intrinsic/generic-bitmask-pass.rs
3535
src/test/ui/simd/intrinsic/generic-gather-pass.rs
36-
src/test/ui/simd/intrinsic/generic-select-pass.rs
3736
src/test/ui/simd/issue-17170.rs
3837
src/test/ui/simd/issue-39720.rs
3938
src/test/ui/simd/issue-85915-simd-ptrs.rs

failing-ui-tests12.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ src/test/ui/simd/intrinsic/generic-cast-pointer-width.rs
1616
src/test/ui/simd/intrinsic/generic-comparison-pass.rs
1717
src/test/ui/simd/intrinsic/generic-elements-pass.rs
1818
src/test/ui/simd/intrinsic/generic-reduction-pass.rs
19+
src/test/ui/simd/intrinsic/generic-select-pass.rs
1920
src/test/ui/simd/intrinsic/inlining-issue67557-ice.rs
2021
src/test/ui/simd/intrinsic/inlining-issue67557.rs
2122
src/test/ui/simd/monomorphize-shuffle-index.rs

src/builder.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1599,10 +1599,31 @@ impl<'a, 'gcc, 'tcx> Builder<'a, 'gcc, 'tcx> {
15991599

16001600
pub fn vector_select(&mut self, cond: RValue<'gcc>, then_val: RValue<'gcc>, else_val: RValue<'gcc>) -> RValue<'gcc> {
16011601
// cond is a vector of integers, not of bools.
1602-
let cond_type = cond.get_type();
1603-
let vector_type = cond_type.unqualified().dyncast_vector().expect("vector type");
1602+
let vector_type = cond.get_type().unqualified().dyncast_vector().expect("vector type");
16041603
let num_units = vector_type.get_num_units();
16051604
let element_type = vector_type.get_element_type();
1605+
1606+
#[cfg(feature="master")]
1607+
let (cond, element_type) = {
1608+
let then_val_vector_type = then_val.get_type().dyncast_vector().expect("vector type");
1609+
let then_val_element_type = then_val_vector_type.get_element_type();
1610+
let then_val_element_size = then_val_element_type.get_size();
1611+
1612+
// NOTE: the mask needs to be of the same size as the other arguments in order for the &
1613+
// operation to work.
1614+
if then_val_element_size != element_type.get_size() {
1615+
let new_element_type = self.type_ix(then_val_element_size as u64 * 8);
1616+
let new_vector_type = self.context.new_vector_type(new_element_type, num_units as u64);
1617+
let cond = self.context.convert_vector(None, cond, new_vector_type);
1618+
(cond, new_element_type)
1619+
}
1620+
else {
1621+
(cond, element_type)
1622+
}
1623+
};
1624+
1625+
let cond_type = cond.get_type();
1626+
16061627
let zeros = vec![self.context.new_rvalue_zero(element_type); num_units];
16071628
let zeros = self.context.new_rvalue_from_vector(None, cond_type, &zeros);
16081629

0 commit comments

Comments
 (0)