Skip to content

Commit b0ccfd1

Browse files
authored
Merge pull request #215 from sadlerap/extract-element
simd: impl extract_element for vector types
2 parents 2ecd620 + d7d820f commit b0ccfd1

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

failing-ui-tests.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,10 @@ src/test/ui/sepcomp/sepcomp-extern.rs
3030
src/test/ui/sepcomp/sepcomp-fns-backwards.rs
3131
src/test/ui/sepcomp/sepcomp-fns.rs
3232
src/test/ui/sepcomp/sepcomp-statics.rs
33-
src/test/ui/simd/generics.rs
3433
src/test/ui/simd/intrinsic/float-math-pass.rs
3534
src/test/ui/simd/intrinsic/generic-arithmetic-pass.rs
3635
src/test/ui/simd/intrinsic/generic-as.rs
3736
src/test/ui/simd/intrinsic/generic-bitmask-pass.rs
38-
src/test/ui/simd/intrinsic/generic-comparison-pass.rs
3937
src/test/ui/simd/intrinsic/generic-gather-pass.rs
4038
src/test/ui/simd/intrinsic/generic-select-pass.rs
4139
src/test/ui/simd/issue-17170.rs

failing-ui-tests12.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ src/test/ui/simd/intrinsic/float-minmax-pass.rs
1212
src/test/ui/simd/intrinsic/generic-arithmetic-saturating-pass.rs
1313
src/test/ui/simd/intrinsic/generic-cast-pass.rs
1414
src/test/ui/simd/intrinsic/generic-cast-pointer-width.rs
15+
src/test/ui/simd/intrinsic/generic-comparison-pass.rs
1516
src/test/ui/simd/intrinsic/generic-elements-pass.rs
1617
src/test/ui/simd/intrinsic/generic-reduction-pass.rs
1718
src/test/ui/simd/intrinsic/inlining-issue67557-ice.rs

src/builder.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,8 +1059,19 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
10591059
unimplemented!();
10601060
}
10611061

1062-
fn extract_element(&mut self, _vec: RValue<'gcc>, _idx: RValue<'gcc>) -> RValue<'gcc> {
1063-
unimplemented!();
1062+
#[cfg(feature="master")]
1063+
fn extract_element(&mut self, vec: RValue<'gcc>, idx: RValue<'gcc>) -> RValue<'gcc> {
1064+
self.context.new_vector_access(None, vec, idx).to_rvalue()
1065+
}
1066+
1067+
#[cfg(not(feature="master"))]
1068+
fn extract_element(&mut self, vec: RValue<'gcc>, idx: RValue<'gcc>) -> RValue<'gcc> {
1069+
let vector_type = vec.get_type().unqualified().dyncast_vector().expect("Called extract_element on a non-vector type");
1070+
let element_type = vector_type.get_element_type();
1071+
let vec_num_units = vector_type.get_num_units();
1072+
let array_type = self.context.new_array_type(None, element_type, vec_num_units as i32);
1073+
let array = self.context.new_bitcast(None, vec, array_type).to_rvalue();
1074+
self.context.new_array_access(None, array, idx).to_rvalue()
10641075
}
10651076

10661077
fn vector_splat(&mut self, _num_elts: usize, _elt: RValue<'gcc>) -> RValue<'gcc> {

0 commit comments

Comments
 (0)