Skip to content

Commit 983bc9d

Browse files
Use arrays over tuples in SIMD tests
Simd([u8; 64]) is now valid for repr(simd), so simplify tests with huge tuples instead. This also found some completely untested code, so let's just ditch that.
1 parent 175b8db commit 983bc9d

5 files changed

+69
-222
lines changed

src/test/ui/simd-intrinsic/simd-intrinsic-generic-bitmask.rs

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,62 +8,39 @@
88

99
#[repr(simd)]
1010
#[derive(Copy, Clone)]
11-
pub struct u32x2(pub u32, pub u32);
11+
pub struct u32x2([u32; 2]);
1212

1313
#[repr(simd)]
1414
#[derive(Copy, Clone)]
15-
pub struct u32x4(pub u32, pub u32, pub u32, pub u32);
15+
pub struct u32x4([u32; 4]);
1616

1717
#[repr(simd)]
1818
#[derive(Copy, Clone)]
19-
struct u8x8(
20-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
21-
);
19+
struct u8x8([u8; 8]);
2220

2321
#[repr(simd)]
2422
#[derive(Copy, Clone)]
25-
struct u8x16(
26-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
27-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
28-
);
23+
struct u8x16([u8; 16]);
2924

3025
#[repr(simd)]
3126
#[derive(Copy, Clone)]
32-
struct u8x32(
33-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
34-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
35-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
36-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
37-
);
27+
struct u8x32([u8; 32]);
3828

3929
#[repr(simd)]
4030
#[derive(Copy, Clone)]
41-
struct u8x64(
42-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
43-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
44-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
45-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
46-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
47-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
48-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
49-
pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8, pub u8,
50-
);
31+
struct u8x64([u8; 64]);
5132

5233
extern "platform-intrinsic" {
5334
fn simd_bitmask<T, U>(x: T) -> U;
5435
}
5536

5637
fn main() {
57-
let m2 = u32x2(0, 0);
58-
let m4 = u32x4(0, 0, 0, 0);
59-
let m8 = u8x8(0, 0, 0, 0, 0, 0, 0, 0);
60-
let m16 = u8x16(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
61-
let m32 = u8x32(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
63-
let m64 = u8x64(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
64-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
65-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
38+
let m2 = u32x2([0; 2]);
39+
let m4 = u32x4([0; 4]);
40+
let m8 = u8x8([0; 8]);
41+
let m16 = u8x16([0; 16]);
42+
let m32 = u8x32([0; 32]);
43+
let m64 = u8x64([0; 64]);
6744

6845
unsafe {
6946
let _: u8 = simd_bitmask(m2);

src/test/ui/simd-intrinsic/simd-intrinsic-generic-bitmask.stderr

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
error[E0511]: invalid monomorphization of `simd_bitmask` intrinsic: bitmask `u16`, expected `u8`
2-
--> $DIR/simd-intrinsic-generic-bitmask.rs:76:22
2+
--> $DIR/simd-intrinsic-generic-bitmask.rs:53:22
33
|
44
LL | let _: u16 = simd_bitmask(m2);
55
| ^^^^^^^^^^^^^^^^
66

77
error[E0511]: invalid monomorphization of `simd_bitmask` intrinsic: bitmask `u16`, expected `u8`
8-
--> $DIR/simd-intrinsic-generic-bitmask.rs:79:22
8+
--> $DIR/simd-intrinsic-generic-bitmask.rs:56:22
99
|
1010
LL | let _: u16 = simd_bitmask(m8);
1111
| ^^^^^^^^^^^^^^^^
1212

1313
error[E0511]: invalid monomorphization of `simd_bitmask` intrinsic: bitmask `u32`, expected `u16`
14-
--> $DIR/simd-intrinsic-generic-bitmask.rs:82:22
14+
--> $DIR/simd-intrinsic-generic-bitmask.rs:59:22
1515
|
1616
LL | let _: u32 = simd_bitmask(m16);
1717
| ^^^^^^^^^^^^^^^^^
1818

1919
error[E0511]: invalid monomorphization of `simd_bitmask` intrinsic: bitmask `u64`, expected `u32`
20-
--> $DIR/simd-intrinsic-generic-bitmask.rs:85:22
20+
--> $DIR/simd-intrinsic-generic-bitmask.rs:62:22
2121
|
2222
LL | let _: u64 = simd_bitmask(m32);
2323
| ^^^^^^^^^^^^^^^^^
2424

2525
error[E0511]: invalid monomorphization of `simd_bitmask` intrinsic: bitmask `u128`, expected `u64`
26-
--> $DIR/simd-intrinsic-generic-bitmask.rs:88:23
26+
--> $DIR/simd-intrinsic-generic-bitmask.rs:65:23
2727
|
2828
LL | let _: u128 = simd_bitmask(m64);
2929
| ^^^^^^^^^^^^^^^^^

src/test/ui/simd/shuffle-not-out-of-bounds.rs

Lines changed: 27 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -6,160 +6,53 @@
66

77
#[repr(simd)]
88
#[derive(Copy, Clone)]
9-
struct u8x2(u8, u8);
9+
struct u8x2([u8; 2]);
1010

1111
#[repr(simd)]
1212
#[derive(Copy, Clone)]
13-
struct u8x4(u8, u8, u8, u8);
13+
struct u8x4([u8; 4]);
1414

1515
#[repr(simd)]
1616
#[derive(Copy, Clone)]
17-
struct u8x8(u8, u8, u8, u8, u8, u8, u8, u8);
17+
struct u8x8([u8; 8]);
1818

1919
#[repr(simd)]
2020
#[derive(Copy, Clone)]
21-
struct u8x16(
22-
u8,
23-
u8,
24-
u8,
25-
u8,
26-
u8,
27-
u8,
28-
u8,
29-
u8,
30-
u8,
31-
u8,
32-
u8,
33-
u8,
34-
u8,
35-
u8,
36-
u8,
37-
u8,
38-
);
21+
struct u8x16([u8; 16]);
3922

4023
#[repr(simd)]
4124
#[derive(Copy, Clone)]
42-
struct u8x32(
43-
u8,
44-
u8,
45-
u8,
46-
u8,
47-
u8,
48-
u8,
49-
u8,
50-
u8,
51-
u8,
52-
u8,
53-
u8,
54-
u8,
55-
u8,
56-
u8,
57-
u8,
58-
u8,
59-
u8,
60-
u8,
61-
u8,
62-
u8,
63-
u8,
64-
u8,
65-
u8,
66-
u8,
67-
u8,
68-
u8,
69-
u8,
70-
u8,
71-
u8,
72-
u8,
73-
u8,
74-
u8,
75-
);
25+
struct u8x32([u8; 32]);
7626

7727
#[repr(simd)]
7828
#[derive(Copy, Clone)]
79-
struct u8x64(
80-
u8,
81-
u8,
82-
u8,
83-
u8,
84-
u8,
85-
u8,
86-
u8,
87-
u8,
88-
u8,
89-
u8,
90-
u8,
91-
u8,
92-
u8,
93-
u8,
94-
u8,
95-
u8,
96-
u8,
97-
u8,
98-
u8,
99-
u8,
100-
u8,
101-
u8,
102-
u8,
103-
u8,
104-
u8,
105-
u8,
106-
u8,
107-
u8,
108-
u8,
109-
u8,
110-
u8,
111-
u8,
112-
u8,
113-
u8,
114-
u8,
115-
u8,
116-
u8,
117-
u8,
118-
u8,
119-
u8,
120-
u8,
121-
u8,
122-
u8,
123-
u8,
124-
u8,
125-
u8,
126-
u8,
127-
u8,
128-
u8,
129-
u8,
130-
u8,
131-
u8,
132-
u8,
133-
u8,
134-
u8,
135-
u8,
136-
u8,
137-
u8,
138-
u8,
139-
u8,
140-
u8,
141-
u8,
142-
u8,
143-
u8,
144-
);
29+
struct u8x64([u8; 64]);
30+
31+
extern "platform-intrinsic" {
32+
pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U;
33+
pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U;
34+
pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U;
35+
pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U;
36+
pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U;
37+
pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U;
38+
}
14539

14640
// Test vectors by lane size. Since LLVM does not distinguish between a shuffle
14741
// over two f32s and a shuffle over two u64s, or any other such combination,
14842
// it is not necessary to test every possible vector, only lane counts.
14943
macro_rules! test_shuffle_lanes {
150-
($n:literal, $x:ident, $y:ident, $t:tt) => {
44+
($n:literal, $x:ident, $y:ident) => {
15145
unsafe {
15246
let shuffle: $x = {
15347
const ARR: [u32; $n] = {
15448
let mut arr = [0; $n];
15549
arr[0] = $n * 2;
15650
arr
15751
};
158-
extern "platform-intrinsic" {
159-
pub fn $y<T, U>(x: T, y: T, idx: [u32; $n]) -> U;
160-
}
161-
let vec1 = $x$t;
162-
let vec2 = $x$t;
52+
let mut n: u8 = $n;
53+
let vals = [0; $n].map(|_| { n = n - 1; n });
54+
let vec1 = $x(vals);
55+
let vec2 = $x(vals);
16356
$y(vec1, vec2, ARR)
16457
};
16558
}
@@ -175,24 +68,17 @@ macro_rules! test_shuffle_lanes {
17568
// And unfortunately, standard comments, as in the UI test harness, disappear in macros!
17669

17770
fn main() {
178-
test_shuffle_lanes!(2, u8x2, simd_shuffle2, (2, 1));
179-
test_shuffle_lanes!(4, u8x4, simd_shuffle4, (4, 3, 2, 1));
180-
test_shuffle_lanes!(8, u8x8, simd_shuffle8, (8, 7, 6, 5, 4, 3, 2, 1));
181-
test_shuffle_lanes!(16, u8x16, simd_shuffle16,
182-
(16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1));
183-
test_shuffle_lanes!(32, u8x32, simd_shuffle32,
184-
(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16,
185-
15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1));
186-
test_shuffle_lanes!(64, u8x64, simd_shuffle64,
187-
(64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49,
188-
48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
189-
32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
190-
16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1));
71+
test_shuffle_lanes!(2, u8x2, simd_shuffle2);
72+
test_shuffle_lanes!(4, u8x4, simd_shuffle4);
73+
test_shuffle_lanes!(8, u8x8, simd_shuffle8);
74+
test_shuffle_lanes!(16, u8x16, simd_shuffle16);
75+
test_shuffle_lanes!(32, u8x32, simd_shuffle32);
76+
test_shuffle_lanes!(64, u8x64, simd_shuffle64);
19177

19278
extern "platform-intrinsic" {
19379
fn simd_shuffle<T, I, U>(a: T, b: T, i: I) -> U;
19480
}
195-
let v = u8x2(0, 0);
81+
let v = u8x2([0, 0]);
19682
const I: [u32; 2] = [4, 4];
19783
unsafe {
19884
let _: u8x2 = simd_shuffle(v, v, I);

0 commit comments

Comments
 (0)