@@ -7,17 +7,17 @@ define i2 @bitreverse_i2(i2 %x) {
77; RV32: # %bb.0:
88; RV32-NEXT: slli a1, a0, 1
99; RV32-NEXT: andi a0, a0, 3
10- ; RV32-NEXT: andi a1, a1, 2
1110; RV32-NEXT: srli a0, a0, 1
11+ ; RV32-NEXT: andi a1, a1, 2
1212; RV32-NEXT: or a0, a1, a0
1313; RV32-NEXT: ret
1414;
1515; RV64-LABEL: bitreverse_i2:
1616; RV64: # %bb.0:
1717; RV64-NEXT: slli a1, a0, 1
1818; RV64-NEXT: andi a0, a0, 3
19- ; RV64-NEXT: andi a1, a1, 2
2019; RV64-NEXT: srli a0, a0, 1
20+ ; RV64-NEXT: andi a1, a1, 2
2121; RV64-NEXT: or a0, a1, a0
2222; RV64-NEXT: ret
2323 %rev = call i2 @llvm.bitreverse.i2 (i2 %x )
@@ -28,22 +28,22 @@ define i3 @bitreverse_i3(i3 %x) {
2828; RV32-LABEL: bitreverse_i3:
2929; RV32: # %bb.0:
3030; RV32-NEXT: slli a1, a0, 2
31- ; RV32-NEXT: andi a0, a0, 7
3231; RV32-NEXT: andi a1, a1, 4
32+ ; RV32-NEXT: andi a0, a0, 7
3333; RV32-NEXT: andi a2, a0, 2
34- ; RV32-NEXT: or a1, a1, a2
3534; RV32-NEXT: srli a0, a0, 2
35+ ; RV32-NEXT: or a1, a1, a2
3636; RV32-NEXT: or a0, a1, a0
3737; RV32-NEXT: ret
3838;
3939; RV64-LABEL: bitreverse_i3:
4040; RV64: # %bb.0:
4141; RV64-NEXT: slli a1, a0, 2
42- ; RV64-NEXT: andi a0, a0, 7
4342; RV64-NEXT: andi a1, a1, 4
43+ ; RV64-NEXT: andi a0, a0, 7
4444; RV64-NEXT: andi a2, a0, 2
45- ; RV64-NEXT: or a1, a1, a2
4645; RV64-NEXT: srli a0, a0, 2
46+ ; RV64-NEXT: or a1, a1, a2
4747; RV64-NEXT: or a0, a1, a0
4848; RV64-NEXT: ret
4949 %rev = call i3 @llvm.bitreverse.i3 (i3 %x )
@@ -54,30 +54,30 @@ define i4 @bitreverse_i4(i4 %x) {
5454; RV32-LABEL: bitreverse_i4:
5555; RV32: # %bb.0:
5656; RV32-NEXT: slli a1, a0, 3
57- ; RV32-NEXT: slli a2, a0, 1
5857; RV32-NEXT: andi a1, a1, 8
58+ ; RV32-NEXT: slli a2, a0, 1
5959; RV32-NEXT: andi a2, a2, 4
60- ; RV32-NEXT: andi a0, a0, 15
6160; RV32-NEXT: or a1, a1, a2
61+ ; RV32-NEXT: andi a0, a0, 15
6262; RV32-NEXT: srli a2, a0, 1
6363; RV32-NEXT: andi a2, a2, 2
64- ; RV32-NEXT: or a1, a1, a2
6564; RV32-NEXT: srli a0, a0, 3
65+ ; RV32-NEXT: or a1, a1, a2
6666; RV32-NEXT: or a0, a1, a0
6767; RV32-NEXT: ret
6868;
6969; RV64-LABEL: bitreverse_i4:
7070; RV64: # %bb.0:
7171; RV64-NEXT: slli a1, a0, 3
72- ; RV64-NEXT: slli a2, a0, 1
7372; RV64-NEXT: andi a1, a1, 8
73+ ; RV64-NEXT: slli a2, a0, 1
7474; RV64-NEXT: andi a2, a2, 4
75- ; RV64-NEXT: andi a0, a0, 15
7675; RV64-NEXT: or a1, a1, a2
76+ ; RV64-NEXT: andi a0, a0, 15
7777; RV64-NEXT: srli a2, a0, 1
7878; RV64-NEXT: andi a2, a2, 2
79- ; RV64-NEXT: or a1, a1, a2
8079; RV64-NEXT: srli a0, a0, 3
80+ ; RV64-NEXT: or a1, a1, a2
8181; RV64-NEXT: or a0, a1, a0
8282; RV64-NEXT: ret
8383 %rev = call i4 @llvm.bitreverse.i4 (i4 %x )
@@ -88,46 +88,46 @@ define i7 @bitreverse_i7(i7 %x) {
8888; RV32-LABEL: bitreverse_i7:
8989; RV32: # %bb.0:
9090; RV32-NEXT: slli a1, a0, 6
91- ; RV32-NEXT: slli a2, a0, 4
9291; RV32-NEXT: andi a1, a1, 64
92+ ; RV32-NEXT: slli a2, a0, 4
9393; RV32-NEXT: andi a2, a2, 32
9494; RV32-NEXT: or a1, a1, a2
9595; RV32-NEXT: slli a2, a0, 2
96- ; RV32-NEXT: andi a0, a0, 127
9796; RV32-NEXT: andi a2, a2, 16
97+ ; RV32-NEXT: andi a0, a0, 127
9898; RV32-NEXT: andi a3, a0, 8
9999; RV32-NEXT: or a2, a2, a3
100100; RV32-NEXT: or a1, a1, a2
101101; RV32-NEXT: srli a2, a0, 2
102- ; RV32-NEXT: srli a3, a0, 4
103102; RV32-NEXT: andi a2, a2, 4
103+ ; RV32-NEXT: srli a3, a0, 4
104104; RV32-NEXT: andi a3, a3, 2
105105; RV32-NEXT: or a2, a2, a3
106- ; RV32-NEXT: or a1, a1, a2
107106; RV32-NEXT: srli a0, a0, 6
107+ ; RV32-NEXT: or a1, a1, a2
108108; RV32-NEXT: or a0, a1, a0
109109; RV32-NEXT: ret
110110;
111111; RV64-LABEL: bitreverse_i7:
112112; RV64: # %bb.0:
113113; RV64-NEXT: slli a1, a0, 6
114- ; RV64-NEXT: slli a2, a0, 4
115114; RV64-NEXT: andi a1, a1, 64
115+ ; RV64-NEXT: slli a2, a0, 4
116116; RV64-NEXT: andi a2, a2, 32
117117; RV64-NEXT: or a1, a1, a2
118118; RV64-NEXT: slli a2, a0, 2
119- ; RV64-NEXT: andi a0, a0, 127
120119; RV64-NEXT: andi a2, a2, 16
120+ ; RV64-NEXT: andi a0, a0, 127
121121; RV64-NEXT: andi a3, a0, 8
122122; RV64-NEXT: or a2, a2, a3
123123; RV64-NEXT: or a1, a1, a2
124124; RV64-NEXT: srli a2, a0, 2
125- ; RV64-NEXT: srli a3, a0, 4
126125; RV64-NEXT: andi a2, a2, 4
126+ ; RV64-NEXT: srli a3, a0, 4
127127; RV64-NEXT: andi a3, a3, 2
128128; RV64-NEXT: or a2, a2, a3
129- ; RV64-NEXT: or a1, a1, a2
130129; RV64-NEXT: srli a0, a0, 6
130+ ; RV64-NEXT: or a1, a1, a2
131131; RV64-NEXT: or a0, a1, a0
132132; RV64-NEXT: ret
133133 %rev = call i7 @llvm.bitreverse.i7 (i7 %x )
@@ -137,69 +137,69 @@ define i7 @bitreverse_i7(i7 %x) {
137137define i24 @bitreverse_i24 (i24 %x ) {
138138; RV32-LABEL: bitreverse_i24:
139139; RV32: # %bb.0:
140+ ; RV32-NEXT: slli a1, a0, 16
140141; RV32-NEXT: lui a2, 4096
141142; RV32-NEXT: addi a2, a2, -1
142- ; RV32-NEXT: slli a1, a0, 16
143143; RV32-NEXT: and a0, a0, a2
144144; RV32-NEXT: srli a0, a0, 16
145145; RV32-NEXT: or a0, a0, a1
146146; RV32-NEXT: lui a1, 1048335
147147; RV32-NEXT: addi a1, a1, 240
148148; RV32-NEXT: and a3, a1, a2
149149; RV32-NEXT: and a3, a0, a3
150+ ; RV32-NEXT: srli a3, a3, 4
150151; RV32-NEXT: slli a0, a0, 4
151152; RV32-NEXT: and a0, a0, a1
153+ ; RV32-NEXT: or a0, a3, a0
152154; RV32-NEXT: lui a1, 1047757
153- ; RV32-NEXT: srli a3, a3, 4
154155; RV32-NEXT: addi a1, a1, -820
155- ; RV32-NEXT: or a0, a3, a0
156156; RV32-NEXT: and a3, a1, a2
157157; RV32-NEXT: and a3, a0, a3
158+ ; RV32-NEXT: srli a3, a3, 2
158159; RV32-NEXT: slli a0, a0, 2
159160; RV32-NEXT: and a0, a0, a1
161+ ; RV32-NEXT: or a0, a3, a0
160162; RV32-NEXT: lui a1, 1047211
161- ; RV32-NEXT: srli a3, a3, 2
162163; RV32-NEXT: addi a1, a1, -1366
163- ; RV32-NEXT: or a0, a3, a0
164164; RV32-NEXT: and a2, a1, a2
165165; RV32-NEXT: and a2, a0, a2
166166; RV32-NEXT: slli a0, a0, 1
167- ; RV32-NEXT: srli a2, a2, 1
168167; RV32-NEXT: and a0, a0, a1
168+ ; RV32-NEXT: srli a2, a2, 1
169169; RV32-NEXT: or a0, a2, a0
170170; RV32-NEXT: ret
171171;
172172; RV64-LABEL: bitreverse_i24:
173173; RV64: # %bb.0:
174+ ; RV64-NEXT: slli a1, a0, 16
174175; RV64-NEXT: lui a2, 4096
175176; RV64-NEXT: addiw a2, a2, -1
176- ; RV64-NEXT: slli a1, a0, 16
177177; RV64-NEXT: and a0, a0, a2
178178; RV64-NEXT: srli a0, a0, 16
179179; RV64-NEXT: or a0, a0, a1
180180; RV64-NEXT: lui a1, 1048335
181181; RV64-NEXT: addiw a1, a1, 240
182182; RV64-NEXT: and a3, a1, a2
183183; RV64-NEXT: and a3, a0, a3
184+ ; RV64-NEXT: srli a3, a3, 4
184185; RV64-NEXT: slli a0, a0, 4
185186; RV64-NEXT: and a0, a0, a1
187+ ; RV64-NEXT: or a0, a3, a0
186188; RV64-NEXT: lui a1, 1047757
187- ; RV64-NEXT: srli a3, a3, 4
188189; RV64-NEXT: addiw a1, a1, -820
189- ; RV64-NEXT: or a0, a3, a0
190190; RV64-NEXT: and a3, a1, a2
191191; RV64-NEXT: and a3, a0, a3
192+ ; RV64-NEXT: srli a3, a3, 2
192193; RV64-NEXT: slli a0, a0, 2
193194; RV64-NEXT: and a0, a0, a1
195+ ; RV64-NEXT: or a0, a3, a0
194196; RV64-NEXT: lui a1, 1047211
195- ; RV64-NEXT: srli a3, a3, 2
196197; RV64-NEXT: addiw a1, a1, -1366
197- ; RV64-NEXT: or a0, a3, a0
198198; RV64-NEXT: and a2, a1, a2
199199; RV64-NEXT: and a2, a0, a2
200200; RV64-NEXT: slli a0, a0, 1
201- ; RV64-NEXT: srli a2, a2, 1
202201; RV64-NEXT: and a0, a0, a1
202+ ; RV64-NEXT: srli a2, a2, 1
203203; RV64-NEXT: or a0, a2, a0
204204; RV64-NEXT: ret
205205 %rev = call i24 @llvm.bitreverse.i24 (i24 %x )
0 commit comments