1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
1
2
; RUN: llc -mtriple=hexagon -hexagon-bit=0 < %s | FileCheck %s
2
3
; Optimized bitwise operations.
3
4
4
5
define i32 @my_clrbit (i32 %x ) nounwind {
6
+ ; CHECK-LABEL: my_clrbit:
7
+ ; CHECK: // %bb.0: // %entry
8
+ ; CHECK-NEXT: {
9
+ ; CHECK-NEXT: r0 = clrbit(r0,#31)
10
+ ; CHECK-NEXT: r1 = r0
11
+ ; CHECK-NEXT: r29 = add(r29,#-8)
12
+ ; CHECK-NEXT: }
13
+ ; CHECK-NEXT: {
14
+ ; CHECK-NEXT: r29 = add(r29,#8)
15
+ ; CHECK-NEXT: jumpr r31
16
+ ; CHECK-NEXT: memw(r29+#4) = r1
17
+ ; CHECK-NEXT: }
5
18
entry:
6
- ; CHECK-LABEL: my_clrbit
7
- ; CHECK: r{{[0-9]+}} = clrbit(r{{[0-9]+}},#31)
8
19
%x.addr = alloca i32 , align 4
9
20
store i32 %x , ptr %x.addr , align 4
10
21
%0 = load i32 , ptr %x.addr , align 4
@@ -13,9 +24,18 @@ entry:
13
24
}
14
25
15
26
define i64 @my_clrbit2 (i64 %x ) nounwind {
27
+ ; CHECK-LABEL: my_clrbit2:
28
+ ; CHECK: // %bb.0: // %entry
29
+ ; CHECK-NEXT: {
30
+ ; CHECK-NEXT: r29 = add(r29,#-8)
31
+ ; CHECK-NEXT: }
32
+ ; CHECK-NEXT: {
33
+ ; CHECK-NEXT: r0 = clrbit(r0,#31)
34
+ ; CHECK-NEXT: jumpr r31
35
+ ; CHECK-NEXT: r29 = add(r29,#8)
36
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
37
+ ; CHECK-NEXT: }
16
38
entry:
17
- ; CHECK-LABEL: my_clrbit2
18
- ; CHECK: r{{[0-9]+}} = clrbit(r{{[0-9]+}},#31)
19
39
%x.addr = alloca i64 , align 8
20
40
store i64 %x , ptr %x.addr , align 8
21
41
%0 = load i64 , ptr %x.addr , align 8
@@ -24,9 +44,18 @@ entry:
24
44
}
25
45
26
46
define i64 @my_clrbit3 (i64 %x ) nounwind {
47
+ ; CHECK-LABEL: my_clrbit3:
48
+ ; CHECK: // %bb.0: // %entry
49
+ ; CHECK-NEXT: {
50
+ ; CHECK-NEXT: r29 = add(r29,#-8)
51
+ ; CHECK-NEXT: }
52
+ ; CHECK-NEXT: {
53
+ ; CHECK-NEXT: r1 = clrbit(r1,#31)
54
+ ; CHECK-NEXT: jumpr r31
55
+ ; CHECK-NEXT: r29 = add(r29,#8)
56
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
57
+ ; CHECK-NEXT: }
27
58
entry:
28
- ; CHECK-LABEL: my_clrbit3
29
- ; CHECK: r{{[0-9]+}} = clrbit(r{{[0-9]+}},#31)
30
59
%x.addr = alloca i64 , align 8
31
60
store i64 %x , ptr %x.addr , align 8
32
61
%0 = load i64 , ptr %x.addr , align 8
@@ -35,9 +64,19 @@ entry:
35
64
}
36
65
37
66
define i32 @my_clrbit4 (i32 %x ) nounwind {
67
+ ; CHECK-LABEL: my_clrbit4:
68
+ ; CHECK: // %bb.0: // %entry
69
+ ; CHECK-NEXT: {
70
+ ; CHECK-NEXT: r0 = clrbit(r0,#13)
71
+ ; CHECK-NEXT: r1 = r0
72
+ ; CHECK-NEXT: r29 = add(r29,#-8)
73
+ ; CHECK-NEXT: }
74
+ ; CHECK-NEXT: {
75
+ ; CHECK-NEXT: r29 = add(r29,#8)
76
+ ; CHECK-NEXT: jumpr r31
77
+ ; CHECK-NEXT: memw(r29+#4) = r1
78
+ ; CHECK-NEXT: }
38
79
entry:
39
- ; CHECK-LABEL: my_clrbit4
40
- ; CHECK: r{{[0-9]+}} = clrbit(r{{[0-9]+}},#13)
41
80
%x.addr = alloca i32 , align 4
42
81
store i32 %x , ptr %x.addr , align 4
43
82
%0 = load i32 , ptr %x.addr , align 4
@@ -46,9 +85,18 @@ entry:
46
85
}
47
86
48
87
define i64 @my_clrbit5 (i64 %x ) nounwind {
88
+ ; CHECK-LABEL: my_clrbit5:
89
+ ; CHECK: // %bb.0: // %entry
90
+ ; CHECK-NEXT: {
91
+ ; CHECK-NEXT: r29 = add(r29,#-8)
92
+ ; CHECK-NEXT: }
93
+ ; CHECK-NEXT: {
94
+ ; CHECK-NEXT: r0 = clrbit(r0,#13)
95
+ ; CHECK-NEXT: jumpr r31
96
+ ; CHECK-NEXT: r29 = add(r29,#8)
97
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
98
+ ; CHECK-NEXT: }
49
99
entry:
50
- ; CHECK-LABEL: my_clrbit5
51
- ; CHECK: r{{[0-9]+}} = clrbit(r{{[0-9]+}},#13)
52
100
%x.addr = alloca i64 , align 8
53
101
store i64 %x , ptr %x.addr , align 8
54
102
%0 = load i64 , ptr %x.addr , align 8
@@ -57,9 +105,18 @@ entry:
57
105
}
58
106
59
107
define i64 @my_clrbit6 (i64 %x ) nounwind {
108
+ ; CHECK-LABEL: my_clrbit6:
109
+ ; CHECK: // %bb.0: // %entry
110
+ ; CHECK-NEXT: {
111
+ ; CHECK-NEXT: r29 = add(r29,#-8)
112
+ ; CHECK-NEXT: }
113
+ ; CHECK-NEXT: {
114
+ ; CHECK-NEXT: r1 = clrbit(r1,#27)
115
+ ; CHECK-NEXT: jumpr r31
116
+ ; CHECK-NEXT: r29 = add(r29,#8)
117
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
118
+ ; CHECK-NEXT: }
60
119
entry:
61
- ; CHECK-LABEL: my_clrbit6
62
- ; CHECK: r{{[0-9]+}} = clrbit(r{{[0-9]+}},#27)
63
120
%x.addr = alloca i64 , align 8
64
121
store i64 %x , ptr %x.addr , align 8
65
122
%0 = load i64 , ptr %x.addr , align 8
@@ -68,9 +125,18 @@ entry:
68
125
}
69
126
70
127
define zeroext i16 @my_setbit (i16 zeroext %crc ) nounwind {
128
+ ; CHECK-LABEL: my_setbit:
129
+ ; CHECK: // %bb.0: // %entry
130
+ ; CHECK-NEXT: {
131
+ ; CHECK-NEXT: r0 = setbit(r0,#15)
132
+ ; CHECK-NEXT: r29 = add(r29,#-8)
133
+ ; CHECK-NEXT: }
134
+ ; CHECK-NEXT: {
135
+ ; CHECK-NEXT: r29 = add(r29,#8)
136
+ ; CHECK-NEXT: jumpr r31
137
+ ; CHECK-NEXT: memh(r29+#6) = r0
138
+ ; CHECK-NEXT: }
71
139
entry:
72
- ; CHECK-LABEL: my_setbit
73
- ; CHECK: r{{[0-9]+}} = setbit(r{{[0-9]+}},#15)
74
140
%crc.addr = alloca i16 , align 2
75
141
store i16 %crc , ptr %crc.addr , align 2
76
142
%0 = load i16 , ptr %crc.addr , align 2
@@ -83,9 +149,19 @@ entry:
83
149
}
84
150
85
151
define i32 @my_setbit2 (i32 %x ) nounwind {
152
+ ; CHECK-LABEL: my_setbit2:
153
+ ; CHECK: // %bb.0: // %entry
154
+ ; CHECK-NEXT: {
155
+ ; CHECK-NEXT: r0 = setbit(r0,#15)
156
+ ; CHECK-NEXT: r1 = r0
157
+ ; CHECK-NEXT: r29 = add(r29,#-8)
158
+ ; CHECK-NEXT: }
159
+ ; CHECK-NEXT: {
160
+ ; CHECK-NEXT: r29 = add(r29,#8)
161
+ ; CHECK-NEXT: jumpr r31
162
+ ; CHECK-NEXT: memw(r29+#4) = r1
163
+ ; CHECK-NEXT: }
86
164
entry:
87
- ; CHECK-LABEL: my_setbit2
88
- ; CHECK: r{{[0-9]+}} = setbit(r{{[0-9]+}},#15)
89
165
%x.addr = alloca i32 , align 4
90
166
store i32 %x , ptr %x.addr , align 4
91
167
%0 = load i32 , ptr %x.addr , align 4
@@ -94,9 +170,18 @@ entry:
94
170
}
95
171
96
172
define i64 @my_setbit3 (i64 %x ) nounwind {
173
+ ; CHECK-LABEL: my_setbit3:
174
+ ; CHECK: // %bb.0: // %entry
175
+ ; CHECK-NEXT: {
176
+ ; CHECK-NEXT: r29 = add(r29,#-8)
177
+ ; CHECK-NEXT: }
178
+ ; CHECK-NEXT: {
179
+ ; CHECK-NEXT: r0 = setbit(r0,#15)
180
+ ; CHECK-NEXT: jumpr r31
181
+ ; CHECK-NEXT: r29 = add(r29,#8)
182
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
183
+ ; CHECK-NEXT: }
97
184
entry:
98
- ; CHECK-LABEL: my_setbit3
99
- ; CHECK: r{{[0-9]+}} = setbit(r{{[0-9]+}},#15)
100
185
%x.addr = alloca i64 , align 8
101
186
store i64 %x , ptr %x.addr , align 8
102
187
%0 = load i64 , ptr %x.addr , align 8
@@ -105,9 +190,19 @@ entry:
105
190
}
106
191
107
192
define i32 @my_setbit4 (i32 %x ) nounwind {
193
+ ; CHECK-LABEL: my_setbit4:
194
+ ; CHECK: // %bb.0: // %entry
195
+ ; CHECK-NEXT: {
196
+ ; CHECK-NEXT: r0 = setbit(r0,#31)
197
+ ; CHECK-NEXT: r1 = r0
198
+ ; CHECK-NEXT: r29 = add(r29,#-8)
199
+ ; CHECK-NEXT: }
200
+ ; CHECK-NEXT: {
201
+ ; CHECK-NEXT: r29 = add(r29,#8)
202
+ ; CHECK-NEXT: jumpr r31
203
+ ; CHECK-NEXT: memw(r29+#4) = r1
204
+ ; CHECK-NEXT: }
108
205
entry:
109
- ; CHECK-LABEL: my_setbit4
110
- ; CHECK: r{{[0-9]+}} = setbit(r{{[0-9]+}},#31)
111
206
%x.addr = alloca i32 , align 4
112
207
store i32 %x , ptr %x.addr , align 4
113
208
%0 = load i32 , ptr %x.addr , align 4
@@ -116,9 +211,18 @@ entry:
116
211
}
117
212
118
213
define i64 @my_setbit5 (i64 %x ) nounwind {
214
+ ; CHECK-LABEL: my_setbit5:
215
+ ; CHECK: // %bb.0: // %entry
216
+ ; CHECK-NEXT: {
217
+ ; CHECK-NEXT: r29 = add(r29,#-8)
218
+ ; CHECK-NEXT: }
219
+ ; CHECK-NEXT: {
220
+ ; CHECK-NEXT: r1 = setbit(r1,#13)
221
+ ; CHECK-NEXT: jumpr r31
222
+ ; CHECK-NEXT: r29 = add(r29,#8)
223
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
224
+ ; CHECK-NEXT: }
119
225
entry:
120
- ; CHECK-LABEL: my_setbit5
121
- ; CHECK: r{{[0-9]+}} = setbit(r{{[0-9]+}},#13)
122
226
%x.addr = alloca i64 , align 8
123
227
store i64 %x , ptr %x.addr , align 8
124
228
%0 = load i64 , ptr %x.addr , align 8
@@ -127,9 +231,18 @@ entry:
127
231
}
128
232
129
233
define zeroext i16 @my_togglebit (i16 zeroext %crc ) nounwind {
234
+ ; CHECK-LABEL: my_togglebit:
235
+ ; CHECK: // %bb.0: // %entry
236
+ ; CHECK-NEXT: {
237
+ ; CHECK-NEXT: r0 = togglebit(r0,#15)
238
+ ; CHECK-NEXT: r29 = add(r29,#-8)
239
+ ; CHECK-NEXT: }
240
+ ; CHECK-NEXT: {
241
+ ; CHECK-NEXT: r29 = add(r29,#8)
242
+ ; CHECK-NEXT: jumpr r31
243
+ ; CHECK-NEXT: memh(r29+#6) = r0
244
+ ; CHECK-NEXT: }
130
245
entry:
131
- ; CHECK-LABEL: my_togglebit
132
- ; CHECK: r{{[0-9]+}} = togglebit(r{{[0-9]+}},#15)
133
246
%crc.addr = alloca i16 , align 2
134
247
store i16 %crc , ptr %crc.addr , align 2
135
248
%0 = load i16 , ptr %crc.addr , align 2
@@ -142,9 +255,19 @@ entry:
142
255
}
143
256
144
257
define i32 @my_togglebit2 (i32 %x ) nounwind {
258
+ ; CHECK-LABEL: my_togglebit2:
259
+ ; CHECK: // %bb.0: // %entry
260
+ ; CHECK-NEXT: {
261
+ ; CHECK-NEXT: r0 = togglebit(r0,#15)
262
+ ; CHECK-NEXT: r1 = r0
263
+ ; CHECK-NEXT: r29 = add(r29,#-8)
264
+ ; CHECK-NEXT: }
265
+ ; CHECK-NEXT: {
266
+ ; CHECK-NEXT: r29 = add(r29,#8)
267
+ ; CHECK-NEXT: jumpr r31
268
+ ; CHECK-NEXT: memw(r29+#4) = r1
269
+ ; CHECK-NEXT: }
145
270
entry:
146
- ; CHECK-LABEL: my_togglebit2
147
- ; CHECK: r{{[0-9]+}} = togglebit(r{{[0-9]+}},#15)
148
271
%x.addr = alloca i32 , align 4
149
272
store i32 %x , ptr %x.addr , align 4
150
273
%0 = load i32 , ptr %x.addr , align 4
@@ -153,9 +276,18 @@ entry:
153
276
}
154
277
155
278
define i64 @my_togglebit3 (i64 %x ) nounwind {
279
+ ; CHECK-LABEL: my_togglebit3:
280
+ ; CHECK: // %bb.0: // %entry
281
+ ; CHECK-NEXT: {
282
+ ; CHECK-NEXT: r29 = add(r29,#-8)
283
+ ; CHECK-NEXT: }
284
+ ; CHECK-NEXT: {
285
+ ; CHECK-NEXT: r0 = togglebit(r0,#15)
286
+ ; CHECK-NEXT: jumpr r31
287
+ ; CHECK-NEXT: r29 = add(r29,#8)
288
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
289
+ ; CHECK-NEXT: }
156
290
entry:
157
- ; CHECK-LABEL: my_togglebit3
158
- ; CHECK: r{{[0-9]+}} = togglebit(r{{[0-9]+}},#15)
159
291
%x.addr = alloca i64 , align 8
160
292
store i64 %x , ptr %x.addr , align 8
161
293
%0 = load i64 , ptr %x.addr , align 8
@@ -164,9 +296,18 @@ entry:
164
296
}
165
297
166
298
define i64 @my_togglebit4 (i64 %x ) nounwind {
299
+ ; CHECK-LABEL: my_togglebit4:
300
+ ; CHECK: // %bb.0: // %entry
301
+ ; CHECK-NEXT: {
302
+ ; CHECK-NEXT: r29 = add(r29,#-8)
303
+ ; CHECK-NEXT: }
304
+ ; CHECK-NEXT: {
305
+ ; CHECK-NEXT: r1 = togglebit(r1,#20)
306
+ ; CHECK-NEXT: jumpr r31
307
+ ; CHECK-NEXT: r29 = add(r29,#8)
308
+ ; CHECK-NEXT: memd(r29+#0) = r1:0
309
+ ; CHECK-NEXT: }
167
310
entry:
168
- ; CHECK-LABEL: my_togglebit4
169
- ; CHECK: r{{[0-9]+}} = togglebit(r{{[0-9]+}},#20)
170
311
%x.addr = alloca i64 , align 8
171
312
store i64 %x , ptr %x.addr , align 8
172
313
%0 = load i64 , ptr %x.addr , align 8
0 commit comments