|
1 | | -//@ revisions: OPT2 OPT3WINX64 OPT3LINX64 |
2 | | -//@ [OPT2] compile-flags: -O |
3 | | -//@ [OPT3LINX64] compile-flags: -C opt-level=3 |
4 | | -//@ [OPT3WINX64] compile-flags: -C opt-level=3 |
5 | | -//@ [OPT3LINX64] only-linux |
6 | | -//@ [OPT3WINX64] only-windows |
7 | | -//@ [OPT3LINX64] only-x86_64 |
8 | | -//@ [OPT3WINX64] only-x86_64 |
| 1 | +//@ revisions: OPT2 OPT3 |
| 2 | +//@[OPT2] compile-flags: -Copt-level=2 |
| 3 | +//@[OPT3] compile-flags: -C opt-level=3 |
| 4 | +// some targets don't do the opt we are looking for |
| 5 | +//@[OPT3] only-64bit |
9 | 6 | //@ min-llvm-version: 18.1.3 |
10 | 7 |
|
11 | 8 | #![crate_type = "lib"] |
|
16 | 13 | // to avoid complicating the code. |
17 | 14 | // CHECK-LABEL: define{{.*}}void @convert( |
18 | 15 | // CHECK-NOT: shufflevector |
19 | | -// OPT2: store i16 |
20 | | -// OPT2-NEXT: getelementptr inbounds{{( nuw)?}} i8, {{.+}} 2 |
21 | | -// OPT2-NEXT: store i16 |
22 | | -// OPT2-NEXT: getelementptr inbounds{{( nuw)?}} i8, {{.+}} 4 |
23 | | -// OPT2-NEXT: store i16 |
24 | | -// OPT2-NEXT: getelementptr inbounds{{( nuw)?}} i8, {{.+}} 6 |
25 | | -// OPT2-NEXT: store i16 |
26 | | -// OPT2-NEXT: getelementptr inbounds{{( nuw)?}} i8, {{.+}} 8 |
27 | | -// OPT2-NEXT: store i16 |
28 | | -// OPT2-NEXT: getelementptr inbounds{{( nuw)?}} i8, {{.+}} 10 |
29 | | -// OPT2-NEXT: store i16 |
30 | | -// OPT2-NEXT: getelementptr inbounds{{( nuw)?}} i8, {{.+}} 12 |
31 | | -// OPT2-NEXT: store i16 |
32 | | -// OPT2-NEXT: getelementptr inbounds{{( nuw)?}} i8, {{.+}} 14 |
33 | | -// OPT2-NEXT: store i16 |
34 | | -// OPT3LINX64: load <8 x i16> |
35 | | -// OPT3LINX64-NEXT: call <8 x i16> @llvm.bswap |
36 | | -// OPT3LINX64-NEXT: store <8 x i16> |
37 | | -// OPT3WINX64: load <8 x i16> |
38 | | -// OPT3WINX64-NEXT: call <8 x i16> @llvm.bswap |
39 | | -// OPT3WINX64-NEXT: store <8 x i16> |
40 | | -// CHECK-NEXT: ret void |
| 16 | +// On higher opt levels, this should just be a bswap: |
| 17 | +// OPT3: load <8 x i16> |
| 18 | +// OPT3-NEXT: call <8 x i16> @llvm.bswap |
| 19 | +// OPT3-NEXT: store <8 x i16> |
| 20 | +// OPT3-NEXT: ret void |
41 | 21 | #[no_mangle] |
42 | 22 | pub fn convert(value: [u16; 8]) -> [u8; 16] { |
43 | 23 | #[cfg(target_endian = "little")] |
|
0 commit comments