Skip to content

Commit 20d4742

Browse files
authored
[LoongArch] Pre-commit tests for vector type llvm.bitreverse. NFC (#118053)
A later commit will optimize this.
1 parent 00b50c9 commit 20d4742

File tree

2 files changed

+208
-0
lines changed

2 files changed

+208
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=loongarch64 -mattr=+lasx --verify-machineinstrs < %s \
3+
; RUN: | FileCheck %s
4+
5+
declare <32 x i8> @llvm.bitreverse.v32i8(<32 x i8>)
6+
7+
define <32 x i8> @test_bitreverse_v32i8(<32 x i8> %a) nounwind {
8+
; CHECK-LABEL: test_bitreverse_v32i8:
9+
; CHECK: # %bb.0:
10+
; CHECK-NEXT: xvslli.b $xr1, $xr0, 4
11+
; CHECK-NEXT: xvsrli.b $xr0, $xr0, 4
12+
; CHECK-NEXT: xvor.v $xr0, $xr0, $xr1
13+
; CHECK-NEXT: xvandi.b $xr1, $xr0, 51
14+
; CHECK-NEXT: xvslli.b $xr1, $xr1, 2
15+
; CHECK-NEXT: xvsrli.b $xr0, $xr0, 2
16+
; CHECK-NEXT: xvandi.b $xr0, $xr0, 51
17+
; CHECK-NEXT: xvor.v $xr0, $xr0, $xr1
18+
; CHECK-NEXT: xvandi.b $xr1, $xr0, 85
19+
; CHECK-NEXT: xvslli.b $xr1, $xr1, 1
20+
; CHECK-NEXT: xvsrli.b $xr0, $xr0, 1
21+
; CHECK-NEXT: xvandi.b $xr0, $xr0, 85
22+
; CHECK-NEXT: xvor.v $xr0, $xr0, $xr1
23+
; CHECK-NEXT: ret
24+
%b = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a)
25+
ret <32 x i8> %b
26+
}
27+
28+
declare <16 x i16> @llvm.bitreverse.v16i16(<16 x i16>)
29+
30+
define <16 x i16> @test_bitreverse_v16i16(<16 x i16> %a) nounwind {
31+
; CHECK-LABEL: test_bitreverse_v16i16:
32+
; CHECK: # %bb.0:
33+
; CHECK-NEXT: xvshuf4i.b $xr0, $xr0, 177
34+
; CHECK-NEXT: xvsrli.h $xr1, $xr0, 4
35+
; CHECK-NEXT: xvrepli.b $xr2, 15
36+
; CHECK-NEXT: xvand.v $xr1, $xr1, $xr2
37+
; CHECK-NEXT: xvand.v $xr0, $xr0, $xr2
38+
; CHECK-NEXT: xvslli.h $xr0, $xr0, 4
39+
; CHECK-NEXT: xvor.v $xr0, $xr1, $xr0
40+
; CHECK-NEXT: xvsrli.h $xr1, $xr0, 2
41+
; CHECK-NEXT: xvrepli.b $xr2, 51
42+
; CHECK-NEXT: xvand.v $xr1, $xr1, $xr2
43+
; CHECK-NEXT: xvand.v $xr0, $xr0, $xr2
44+
; CHECK-NEXT: xvslli.h $xr0, $xr0, 2
45+
; CHECK-NEXT: xvor.v $xr0, $xr1, $xr0
46+
; CHECK-NEXT: xvsrli.h $xr1, $xr0, 1
47+
; CHECK-NEXT: xvrepli.b $xr2, 85
48+
; CHECK-NEXT: xvand.v $xr1, $xr1, $xr2
49+
; CHECK-NEXT: xvand.v $xr0, $xr0, $xr2
50+
; CHECK-NEXT: xvslli.h $xr0, $xr0, 1
51+
; CHECK-NEXT: xvor.v $xr0, $xr1, $xr0
52+
; CHECK-NEXT: ret
53+
%b = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a)
54+
ret <16 x i16> %b
55+
}
56+
57+
declare <8 x i32> @llvm.bitreverse.v8i32(<8 x i32>)
58+
59+
define <8 x i32> @test_bitreverse_v8i32(<8 x i32> %a) nounwind {
60+
; CHECK-LABEL: test_bitreverse_v8i32:
61+
; CHECK: # %bb.0:
62+
; CHECK-NEXT: xvshuf4i.b $xr0, $xr0, 27
63+
; CHECK-NEXT: xvsrli.w $xr1, $xr0, 4
64+
; CHECK-NEXT: xvrepli.b $xr2, 15
65+
; CHECK-NEXT: xvand.v $xr1, $xr1, $xr2
66+
; CHECK-NEXT: xvand.v $xr0, $xr0, $xr2
67+
; CHECK-NEXT: xvslli.w $xr0, $xr0, 4
68+
; CHECK-NEXT: xvor.v $xr0, $xr1, $xr0
69+
; CHECK-NEXT: xvsrli.w $xr1, $xr0, 2
70+
; CHECK-NEXT: xvrepli.b $xr2, 51
71+
; CHECK-NEXT: xvand.v $xr1, $xr1, $xr2
72+
; CHECK-NEXT: xvand.v $xr0, $xr0, $xr2
73+
; CHECK-NEXT: xvslli.w $xr0, $xr0, 2
74+
; CHECK-NEXT: xvor.v $xr0, $xr1, $xr0
75+
; CHECK-NEXT: xvsrli.w $xr1, $xr0, 1
76+
; CHECK-NEXT: xvrepli.b $xr2, 85
77+
; CHECK-NEXT: xvand.v $xr1, $xr1, $xr2
78+
; CHECK-NEXT: xvand.v $xr0, $xr0, $xr2
79+
; CHECK-NEXT: xvslli.w $xr0, $xr0, 1
80+
; CHECK-NEXT: xvor.v $xr0, $xr1, $xr0
81+
; CHECK-NEXT: ret
82+
%b = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a)
83+
ret <8 x i32> %b
84+
}
85+
86+
declare <4 x i64> @llvm.bitreverse.v4i64(<4 x i64>)
87+
88+
define <4 x i64> @test_bitreverse_v4i64(<4 x i64> %a) nounwind {
89+
; CHECK-LABEL: test_bitreverse_v4i64:
90+
; CHECK: # %bb.0:
91+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0
92+
; CHECK-NEXT: bitrev.d $a0, $a0
93+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 0
94+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 1
95+
; CHECK-NEXT: bitrev.d $a0, $a0
96+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 1
97+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 2
98+
; CHECK-NEXT: bitrev.d $a0, $a0
99+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 2
100+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
101+
; CHECK-NEXT: bitrev.d $a0, $a0
102+
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 3
103+
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
104+
; CHECK-NEXT: ret
105+
%b = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a)
106+
ret <4 x i64> %b
107+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=loongarch64 -mattr=+lsx --verify-machineinstrs < %s \
3+
; RUN: | FileCheck %s
4+
5+
declare <16 x i8> @llvm.bitreverse.v16i8(<16 x i8>)
6+
7+
define <16 x i8> @test_bitreverse_v16i8(<16 x i8> %a) nounwind {
8+
; CHECK-LABEL: test_bitreverse_v16i8:
9+
; CHECK: # %bb.0:
10+
; CHECK-NEXT: vslli.b $vr1, $vr0, 4
11+
; CHECK-NEXT: vsrli.b $vr0, $vr0, 4
12+
; CHECK-NEXT: vor.v $vr0, $vr0, $vr1
13+
; CHECK-NEXT: vandi.b $vr1, $vr0, 51
14+
; CHECK-NEXT: vslli.b $vr1, $vr1, 2
15+
; CHECK-NEXT: vsrli.b $vr0, $vr0, 2
16+
; CHECK-NEXT: vandi.b $vr0, $vr0, 51
17+
; CHECK-NEXT: vor.v $vr0, $vr0, $vr1
18+
; CHECK-NEXT: vandi.b $vr1, $vr0, 85
19+
; CHECK-NEXT: vslli.b $vr1, $vr1, 1
20+
; CHECK-NEXT: vsrli.b $vr0, $vr0, 1
21+
; CHECK-NEXT: vandi.b $vr0, $vr0, 85
22+
; CHECK-NEXT: vor.v $vr0, $vr0, $vr1
23+
; CHECK-NEXT: ret
24+
%b = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a)
25+
ret <16 x i8> %b
26+
}
27+
28+
declare <8 x i16> @llvm.bitreverse.v8i16(<8 x i16>)
29+
30+
define <8 x i16> @test_bitreverse_v8i16(<8 x i16> %a) nounwind {
31+
; CHECK-LABEL: test_bitreverse_v8i16:
32+
; CHECK: # %bb.0:
33+
; CHECK-NEXT: vshuf4i.b $vr0, $vr0, 177
34+
; CHECK-NEXT: vsrli.h $vr1, $vr0, 4
35+
; CHECK-NEXT: vrepli.b $vr2, 15
36+
; CHECK-NEXT: vand.v $vr1, $vr1, $vr2
37+
; CHECK-NEXT: vand.v $vr0, $vr0, $vr2
38+
; CHECK-NEXT: vslli.h $vr0, $vr0, 4
39+
; CHECK-NEXT: vor.v $vr0, $vr1, $vr0
40+
; CHECK-NEXT: vsrli.h $vr1, $vr0, 2
41+
; CHECK-NEXT: vrepli.b $vr2, 51
42+
; CHECK-NEXT: vand.v $vr1, $vr1, $vr2
43+
; CHECK-NEXT: vand.v $vr0, $vr0, $vr2
44+
; CHECK-NEXT: vslli.h $vr0, $vr0, 2
45+
; CHECK-NEXT: vor.v $vr0, $vr1, $vr0
46+
; CHECK-NEXT: vsrli.h $vr1, $vr0, 1
47+
; CHECK-NEXT: vrepli.b $vr2, 85
48+
; CHECK-NEXT: vand.v $vr1, $vr1, $vr2
49+
; CHECK-NEXT: vand.v $vr0, $vr0, $vr2
50+
; CHECK-NEXT: vslli.h $vr0, $vr0, 1
51+
; CHECK-NEXT: vor.v $vr0, $vr1, $vr0
52+
; CHECK-NEXT: ret
53+
%b = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a)
54+
ret <8 x i16> %b
55+
}
56+
57+
declare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32>)
58+
59+
define <4 x i32> @test_bitreverse_v4i32(<4 x i32> %a) nounwind {
60+
; CHECK-LABEL: test_bitreverse_v4i32:
61+
; CHECK: # %bb.0:
62+
; CHECK-NEXT: vshuf4i.b $vr0, $vr0, 27
63+
; CHECK-NEXT: vsrli.w $vr1, $vr0, 4
64+
; CHECK-NEXT: vrepli.b $vr2, 15
65+
; CHECK-NEXT: vand.v $vr1, $vr1, $vr2
66+
; CHECK-NEXT: vand.v $vr0, $vr0, $vr2
67+
; CHECK-NEXT: vslli.w $vr0, $vr0, 4
68+
; CHECK-NEXT: vor.v $vr0, $vr1, $vr0
69+
; CHECK-NEXT: vsrli.w $vr1, $vr0, 2
70+
; CHECK-NEXT: vrepli.b $vr2, 51
71+
; CHECK-NEXT: vand.v $vr1, $vr1, $vr2
72+
; CHECK-NEXT: vand.v $vr0, $vr0, $vr2
73+
; CHECK-NEXT: vslli.w $vr0, $vr0, 2
74+
; CHECK-NEXT: vor.v $vr0, $vr1, $vr0
75+
; CHECK-NEXT: vsrli.w $vr1, $vr0, 1
76+
; CHECK-NEXT: vrepli.b $vr2, 85
77+
; CHECK-NEXT: vand.v $vr1, $vr1, $vr2
78+
; CHECK-NEXT: vand.v $vr0, $vr0, $vr2
79+
; CHECK-NEXT: vslli.w $vr0, $vr0, 1
80+
; CHECK-NEXT: vor.v $vr0, $vr1, $vr0
81+
; CHECK-NEXT: ret
82+
%b = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a)
83+
ret <4 x i32> %b
84+
}
85+
86+
declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>)
87+
88+
define <2 x i64> @test_bitreverse_v2i64(<2 x i64> %a) nounwind {
89+
; CHECK-LABEL: test_bitreverse_v2i64:
90+
; CHECK: # %bb.0:
91+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
92+
; CHECK-NEXT: bitrev.d $a0, $a0
93+
; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 0
94+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
95+
; CHECK-NEXT: bitrev.d $a0, $a0
96+
; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 1
97+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
98+
; CHECK-NEXT: ret
99+
%b = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a)
100+
ret <2 x i64> %b
101+
}

0 commit comments

Comments
 (0)