@@ -6,17 +6,17 @@ define i2 @bitreverse_i2(i2 %x) {
6
6
; RV32-LABEL: bitreverse_i2:
7
7
; RV32: # %bb.0:
8
8
; RV32-NEXT: slli a1, a0, 1
9
- ; RV32-NEXT: andi a1, a1, 2
10
9
; RV32-NEXT: andi a0, a0, 3
10
+ ; RV32-NEXT: andi a1, a1, 2
11
11
; RV32-NEXT: srli a0, a0, 1
12
12
; RV32-NEXT: or a0, a1, a0
13
13
; RV32-NEXT: ret
14
14
;
15
15
; RV64-LABEL: bitreverse_i2:
16
16
; RV64: # %bb.0:
17
17
; RV64-NEXT: slli a1, a0, 1
18
- ; RV64-NEXT: andi a1, a1, 2
19
18
; RV64-NEXT: andi a0, a0, 3
19
+ ; RV64-NEXT: andi a1, a1, 2
20
20
; RV64-NEXT: srli a0, a0, 1
21
21
; RV64-NEXT: or a0, a1, a0
22
22
; RV64-NEXT: ret
@@ -28,8 +28,8 @@ define i3 @bitreverse_i3(i3 %x) {
28
28
; RV32-LABEL: bitreverse_i3:
29
29
; RV32: # %bb.0:
30
30
; RV32-NEXT: slli a1, a0, 2
31
- ; RV32-NEXT: andi a1, a1, 4
32
31
; RV32-NEXT: andi a0, a0, 7
32
+ ; RV32-NEXT: andi a1, a1, 4
33
33
; RV32-NEXT: andi a2, a0, 2
34
34
; RV32-NEXT: or a1, a1, a2
35
35
; RV32-NEXT: srli a0, a0, 2
@@ -39,8 +39,8 @@ define i3 @bitreverse_i3(i3 %x) {
39
39
; RV64-LABEL: bitreverse_i3:
40
40
; RV64: # %bb.0:
41
41
; RV64-NEXT: slli a1, a0, 2
42
- ; RV64-NEXT: andi a1, a1, 4
43
42
; RV64-NEXT: andi a0, a0, 7
43
+ ; RV64-NEXT: andi a1, a1, 4
44
44
; RV64-NEXT: andi a2, a0, 2
45
45
; RV64-NEXT: or a1, a1, a2
46
46
; RV64-NEXT: srli a0, a0, 2
@@ -54,11 +54,11 @@ define i4 @bitreverse_i4(i4 %x) {
54
54
; RV32-LABEL: bitreverse_i4:
55
55
; RV32: # %bb.0:
56
56
; RV32-NEXT: slli a1, a0, 3
57
- ; RV32-NEXT: andi a1, a1, 8
58
57
; RV32-NEXT: slli a2, a0, 1
58
+ ; RV32-NEXT: andi a0, a0, 15
59
+ ; RV32-NEXT: andi a1, a1, 8
59
60
; RV32-NEXT: andi a2, a2, 4
60
61
; RV32-NEXT: or a1, a1, a2
61
- ; RV32-NEXT: andi a0, a0, 15
62
62
; RV32-NEXT: srli a2, a0, 1
63
63
; RV32-NEXT: andi a2, a2, 2
64
64
; RV32-NEXT: or a1, a1, a2
@@ -69,11 +69,11 @@ define i4 @bitreverse_i4(i4 %x) {
69
69
; RV64-LABEL: bitreverse_i4:
70
70
; RV64: # %bb.0:
71
71
; RV64-NEXT: slli a1, a0, 3
72
- ; RV64-NEXT: andi a1, a1, 8
73
72
; RV64-NEXT: slli a2, a0, 1
73
+ ; RV64-NEXT: andi a0, a0, 15
74
+ ; RV64-NEXT: andi a1, a1, 8
74
75
; RV64-NEXT: andi a2, a2, 4
75
76
; RV64-NEXT: or a1, a1, a2
76
- ; RV64-NEXT: andi a0, a0, 15
77
77
; RV64-NEXT: srli a2, a0, 1
78
78
; RV64-NEXT: andi a2, a2, 2
79
79
; RV64-NEXT: or a1, a1, a2
@@ -88,21 +88,21 @@ define i7 @bitreverse_i7(i7 %x) {
88
88
; RV32-LABEL: bitreverse_i7:
89
89
; RV32: # %bb.0:
90
90
; RV32-NEXT: slli a1, a0, 6
91
- ; RV32-NEXT: andi a1, a1, 64
92
91
; RV32-NEXT: slli a2, a0, 4
92
+ ; RV32-NEXT: slli a3, a0, 2
93
+ ; RV32-NEXT: andi a0, a0, 127
94
+ ; RV32-NEXT: andi a1, a1, 64
93
95
; RV32-NEXT: andi a2, a2, 32
96
+ ; RV32-NEXT: andi a3, a3, 16
94
97
; RV32-NEXT: or a1, a1, a2
95
- ; RV32-NEXT: slli a2, a0, 2
96
- ; RV32-NEXT: andi a2, a2, 16
97
- ; RV32-NEXT: andi a0, a0, 127
98
- ; RV32-NEXT: andi a3, a0, 8
99
- ; RV32-NEXT: or a2, a2, a3
98
+ ; RV32-NEXT: andi a2, a0, 8
99
+ ; RV32-NEXT: or a2, a3, a2
100
+ ; RV32-NEXT: srli a3, a0, 2
100
101
; RV32-NEXT: or a1, a1, a2
101
- ; RV32-NEXT: srli a2, a0, 2
102
- ; RV32-NEXT: andi a2, a2, 4
103
- ; RV32-NEXT: srli a3, a0, 4
104
- ; RV32-NEXT: andi a3, a3, 2
105
- ; RV32-NEXT: or a2, a2, a3
102
+ ; RV32-NEXT: srli a2, a0, 4
103
+ ; RV32-NEXT: andi a3, a3, 4
104
+ ; RV32-NEXT: andi a2, a2, 2
105
+ ; RV32-NEXT: or a2, a3, a2
106
106
; RV32-NEXT: or a1, a1, a2
107
107
; RV32-NEXT: srli a0, a0, 6
108
108
; RV32-NEXT: or a0, a1, a0
@@ -111,21 +111,21 @@ define i7 @bitreverse_i7(i7 %x) {
111
111
; RV64-LABEL: bitreverse_i7:
112
112
; RV64: # %bb.0:
113
113
; RV64-NEXT: slli a1, a0, 6
114
- ; RV64-NEXT: andi a1, a1, 64
115
114
; RV64-NEXT: slli a2, a0, 4
115
+ ; RV64-NEXT: slli a3, a0, 2
116
+ ; RV64-NEXT: andi a0, a0, 127
117
+ ; RV64-NEXT: andi a1, a1, 64
116
118
; RV64-NEXT: andi a2, a2, 32
119
+ ; RV64-NEXT: andi a3, a3, 16
117
120
; RV64-NEXT: or a1, a1, a2
118
- ; RV64-NEXT: slli a2, a0, 2
119
- ; RV64-NEXT: andi a2, a2, 16
120
- ; RV64-NEXT: andi a0, a0, 127
121
- ; RV64-NEXT: andi a3, a0, 8
122
- ; RV64-NEXT: or a2, a2, a3
121
+ ; RV64-NEXT: andi a2, a0, 8
122
+ ; RV64-NEXT: or a2, a3, a2
123
+ ; RV64-NEXT: srli a3, a0, 2
123
124
; RV64-NEXT: or a1, a1, a2
124
- ; RV64-NEXT: srli a2, a0, 2
125
- ; RV64-NEXT: andi a2, a2, 4
126
- ; RV64-NEXT: srli a3, a0, 4
127
- ; RV64-NEXT: andi a3, a3, 2
128
- ; RV64-NEXT: or a2, a2, a3
125
+ ; RV64-NEXT: srli a2, a0, 4
126
+ ; RV64-NEXT: andi a3, a3, 4
127
+ ; RV64-NEXT: andi a2, a2, 2
128
+ ; RV64-NEXT: or a2, a3, a2
129
129
; RV64-NEXT: or a1, a1, a2
130
130
; RV64-NEXT: srli a0, a0, 6
131
131
; RV64-NEXT: or a0, a1, a0
@@ -139,67 +139,67 @@ define i24 @bitreverse_i24(i24 %x) {
139
139
; RV32: # %bb.0:
140
140
; RV32-NEXT: slli a1, a0, 16
141
141
; RV32-NEXT: lui a2, 4096
142
+ ; RV32-NEXT: lui a3, 1048335
142
143
; RV32-NEXT: addi a2, a2, -1
144
+ ; RV32-NEXT: addi a3, a3, 240
143
145
; RV32-NEXT: and a0, a0, a2
144
146
; RV32-NEXT: srli a0, a0, 16
145
147
; RV32-NEXT: or a0, a0, a1
146
- ; RV32-NEXT: lui a1, 1048335
147
- ; RV32-NEXT: addi a1, a1, 240
148
- ; RV32-NEXT: and a3, a1, a2
149
- ; RV32-NEXT: and a3, a0, a3
150
- ; RV32-NEXT: srli a3, a3, 4
148
+ ; RV32-NEXT: and a1, a3, a2
149
+ ; RV32-NEXT: and a1, a0, a1
151
150
; RV32-NEXT: slli a0, a0, 4
152
- ; RV32-NEXT: and a0, a0, a1
153
- ; RV32-NEXT: or a0, a3, a0
154
- ; RV32-NEXT: lui a1, 1047757
155
- ; RV32-NEXT: addi a1, a1, -820
156
- ; RV32-NEXT: and a3 , a1, a2
157
- ; RV32-NEXT: and a3, a0, a3
158
- ; RV32-NEXT: srli a3, a3, 2
151
+ ; RV32-NEXT: and a0, a0, a3
152
+ ; RV32-NEXT: lui a3, 1047757
153
+ ; RV32-NEXT: addi a3, a3, -820
154
+ ; RV32-NEXT: srli a1, a1, 4
155
+ ; RV32-NEXT: or a0 , a1, a0
156
+ ; RV32-NEXT: and a1, a3, a2
157
+ ; RV32-NEXT: and a1, a0, a1
159
158
; RV32-NEXT: slli a0, a0, 2
160
- ; RV32-NEXT: and a0, a0, a1
161
- ; RV32-NEXT: or a0, a3, a0
162
- ; RV32-NEXT: lui a1, 1047211
163
- ; RV32-NEXT: addi a1, a1, -1366
164
- ; RV32-NEXT: and a2, a1, a2
159
+ ; RV32-NEXT: and a0, a0, a3
160
+ ; RV32-NEXT: lui a3, 1047211
161
+ ; RV32-NEXT: addi a3, a3, -1366
162
+ ; RV32-NEXT: and a2, a3, a2
163
+ ; RV32-NEXT: srli a1, a1, 2
164
+ ; RV32-NEXT: or a0, a1, a0
165
165
; RV32-NEXT: and a2, a0, a2
166
- ; RV32-NEXT: srli a2, a2, 1
167
166
; RV32-NEXT: slli a0, a0, 1
168
- ; RV32-NEXT: and a0, a0, a1
167
+ ; RV32-NEXT: srli a2, a2, 1
168
+ ; RV32-NEXT: and a0, a0, a3
169
169
; RV32-NEXT: or a0, a2, a0
170
170
; RV32-NEXT: ret
171
171
;
172
172
; RV64-LABEL: bitreverse_i24:
173
173
; RV64: # %bb.0:
174
174
; RV64-NEXT: slli a1, a0, 16
175
175
; RV64-NEXT: lui a2, 4096
176
+ ; RV64-NEXT: lui a3, 1048335
176
177
; RV64-NEXT: addiw a2, a2, -1
178
+ ; RV64-NEXT: addiw a3, a3, 240
177
179
; RV64-NEXT: and a0, a0, a2
178
180
; RV64-NEXT: srli a0, a0, 16
179
181
; RV64-NEXT: or a0, a0, a1
180
- ; RV64-NEXT: lui a1, 1048335
181
- ; RV64-NEXT: addiw a1, a1, 240
182
- ; RV64-NEXT: and a3, a1, a2
183
- ; RV64-NEXT: and a3, a0, a3
184
- ; RV64-NEXT: srli a3, a3, 4
182
+ ; RV64-NEXT: and a1, a3, a2
183
+ ; RV64-NEXT: and a1, a0, a1
185
184
; RV64-NEXT: slli a0, a0, 4
186
- ; RV64-NEXT: and a0, a0, a1
187
- ; RV64-NEXT: or a0, a3, a0
188
- ; RV64-NEXT: lui a1, 1047757
189
- ; RV64-NEXT: addiw a1, a1, -820
190
- ; RV64-NEXT: and a3 , a1, a2
191
- ; RV64-NEXT: and a3, a0, a3
192
- ; RV64-NEXT: srli a3, a3, 2
185
+ ; RV64-NEXT: and a0, a0, a3
186
+ ; RV64-NEXT: lui a3, 1047757
187
+ ; RV64-NEXT: addiw a3, a3, -820
188
+ ; RV64-NEXT: srli a1, a1, 4
189
+ ; RV64-NEXT: or a0 , a1, a0
190
+ ; RV64-NEXT: and a1, a3, a2
191
+ ; RV64-NEXT: and a1, a0, a1
193
192
; RV64-NEXT: slli a0, a0, 2
194
- ; RV64-NEXT: and a0, a0, a1
195
- ; RV64-NEXT: or a0, a3, a0
196
- ; RV64-NEXT: lui a1, 1047211
197
- ; RV64-NEXT: addiw a1, a1, -1366
198
- ; RV64-NEXT: and a2, a1, a2
193
+ ; RV64-NEXT: and a0, a0, a3
194
+ ; RV64-NEXT: lui a3, 1047211
195
+ ; RV64-NEXT: addiw a3, a3, -1366
196
+ ; RV64-NEXT: and a2, a3, a2
197
+ ; RV64-NEXT: srli a1, a1, 2
198
+ ; RV64-NEXT: or a0, a1, a0
199
199
; RV64-NEXT: and a2, a0, a2
200
- ; RV64-NEXT: srli a2, a2, 1
201
200
; RV64-NEXT: slli a0, a0, 1
202
- ; RV64-NEXT: and a0, a0, a1
201
+ ; RV64-NEXT: srli a2, a2, 1
202
+ ; RV64-NEXT: and a0, a0, a3
203
203
; RV64-NEXT: or a0, a2, a0
204
204
; RV64-NEXT: ret
205
205
%rev = call i24 @llvm.bitreverse.i24 (i24 %x )
0 commit comments