[TableGen] Fix validateOperandClass for non Phyical Reg (#118146)
[llvm-project.git] / llvm / test / CodeGen / BPF / 32-bit-subreg-alu.ll
blobabec34990044a3c4849bae04340207e64c4e2b25
1 ; RUN: llc -O2 -march=bpfel -mattr=+alu32 < %s | FileCheck %s
2 ; RUN: llc -O2 -march=bpfel -mcpu=v3 < %s | FileCheck %s
4 ; int mov(int a)
5 ; {
6 ;   return a;
7 ; }
9 ; int mov_ri(void)
10 ; {
11 ;   return 0xff;
12 ; }
14 ; int add(int a, int b)
15 ; {
16 ;   return a + b;
17 ; }
19 ; int add_i(int a)
20 ; {
21 ;   return a + 0x7fffffff;
22 ; }
24 ; int sub(int a, int b)
25 ; {
26 ;   return a - b;
27 ; }
29 ; int sub_i(int a)
30 ; {
31 ;   return a - 0xffffffff;
32 ; }
34 ; int mul(int a, int b)
35 ; {
36 ;   return a * b;
37 ; }
39 ; int mul_i(int a)
40 ; {
41 ;   return a * 0xf;
42 ; }
44 ; unsigned div(unsigned a, unsigned b)
45 ; {
46 ;   return a / b;
47 ; }
49 ; unsigned div_i(unsigned a)
50 ; {
51 ;   return a / 0xf;
52 ; }
54 ; unsigned rem(unsigned a, unsigned b)
55 ; {
56 ;   return a % b;
57 ; }
59 ; unsigned rem_i(unsigned a)
60 ; {
61 ;   return a % 0xf;
62 ; }
64 ; int or(int a, int b)
65 ; {
66 ;   return a | b;
67 ; }
69 ; int or_i(int a)
70 ; {
71 ;   return a | 0xff;
72 ; }
74 ; int xor(int a, int b)
75 ; {
76 ;   return a ^ b;
77 ; }
79 ; int xor_i(int a)
80 ; {
81 ;   return a ^ 0xfff;
82 ; }
84 ; int and(int a, int b)
85 ; {
86 ;   return a & b;
87 ; }
89 ; int and_i(int a)
90 ; {
91 ;   return a & 0xffff;
92 ; }
94 ; int sll(int a, int b)
95 ; {
96 ;   return a << b;
97 ; }
99 ; int sll_i(int a)
100 ; {
101 ;   return a << 17;
102 ; }
104 ; unsigned srl(unsigned a, unsigned b)
105 ; {
106 ;   return a >> b;
107 ; }
109 ; unsigned srl_i(unsigned a, unsigned b)
110 ; {
111 ;   return a >> 31;
112 ; }
114 ; int sra(int a, int b)
115 ; {
116 ;   return a >> b;
117 ; }
119 ; int sra_i(int a, int b)
120 ; {
121 ;   return a >> 7;
122 ; }
124 ; int neg(int a)
125 ; {
126 ;   return -a;
127 ; }
129 ; Function Attrs: norecurse nounwind readnone
130 define dso_local i32 @mov(i32 returned %a) local_unnamed_addr #0 {
131 entry:
132   ret i32 %a
133 ; CHECK: w{{[0-9]+}} = w{{[0-9]+}}
136 ; Function Attrs: norecurse nounwind readnone
137 define dso_local i32 @mov_ri() local_unnamed_addr #0 {
138 entry:
139   ret i32 255
140 ; CHECK: w{{[0-9]+}} = 255
143 ; Function Attrs: norecurse nounwind readnone
144 define dso_local i32 @add(i32 %a, i32 %b) local_unnamed_addr #0 {
145 entry:
146   %add = add nsw i32 %b, %a
147 ; CHECK: w{{[0-9]+}} += w{{[0-9]+}}
148   ret i32 %add
151 ; Function Attrs: norecurse nounwind readnone
152 define dso_local i32 @add_i(i32 %a) local_unnamed_addr #0 {
153 entry:
154   %add = add nsw i32 %a, 2147483647
155 ; CHECK: w{{[0-9]+}} += 2147483647
156   ret i32 %add
159 ; Function Attrs: norecurse nounwind readnone
160 define dso_local i32 @sub(i32 %a, i32 %b) local_unnamed_addr #0 {
161 entry:
162   %sub = sub nsw i32 %a, %b
163 ; CHECK: w{{[0-9]+}} -= w{{[0-9]+}}
164   ret i32 %sub
167 ; Function Attrs: norecurse nounwind readnone
168 define dso_local i32 @sub_i(i32 %a) local_unnamed_addr #0 {
169 entry:
170   %sub = add i32 %a, 1
171 ; CHECK: w{{[0-9]+}} += 1
172   ret i32 %sub
175 ; Function Attrs: norecurse nounwind readnone
176 define dso_local i32 @mul(i32 %a, i32 %b) local_unnamed_addr #0 {
177 entry:
178   %mul = mul nsw i32 %b, %a
179 ; CHECK: w{{[0-9]+}} *= w{{[0-9]+}}
180   ret i32 %mul
183 ; Function Attrs: norecurse nounwind readnone
184 define dso_local i32 @mul_i(i32 %a) local_unnamed_addr #0 {
185 entry:
186   %mul = mul nsw i32 %a, 15
187 ; CHECK: w{{[0-9]+}} *= 15
188   ret i32 %mul
191 ; Function Attrs: norecurse nounwind readnone
192 define dso_local i32 @div(i32 %a, i32 %b) local_unnamed_addr #0 {
193 entry:
194   %div = udiv i32 %a, %b
195 ; CHECK: w{{[0-9]+}} /= w{{[0-9]+}}
196   ret i32 %div
199 ; Function Attrs: norecurse nounwind readnone
200 define dso_local i32 @div_i(i32 %a) local_unnamed_addr #0 {
201 entry:
202   %div = udiv i32 %a, 15
203 ; CHECK-NOT: w{{[0-9]+}} /= 15
204   ret i32 %div
207 ; Function Attrs: norecurse nounwind readnone
208 define dso_local i32 @rem(i32 %a, i32 %b) local_unnamed_addr #0 {
209 entry:
210   %rem = urem i32 %a, %b
211 ; CHECK: w{{[0-9]+}} %= w{{[0-9]+}}
212   ret i32 %rem
215 ; Function Attrs: norecurse nounwind readnone
216 define dso_local i32 @rem_i(i32 %a) local_unnamed_addr #0 {
217 entry:
218   %rem = urem i32 %a, 15
219 ; CHECK-NOT: w{{[0-9]+}} %= 15
220   ret i32 %rem
223 ; Function Attrs: norecurse nounwind readnone
224 define dso_local i32 @or(i32 %a, i32 %b) local_unnamed_addr #0 {
225 entry:
226   %or = or i32 %b, %a
227 ; CHECK: w{{[0-9]+}} |= w{{[0-9]+}}
228   ret i32 %or
231 ; Function Attrs: norecurse nounwind readnone
232 define dso_local i32 @or_i(i32 %a) local_unnamed_addr #0 {
233 entry:
234   %or = or i32 %a, 255
235 ; CHECK: w{{[0-9]+}} |= 255
236   ret i32 %or
239 ; Function Attrs: norecurse nounwind readnone
240 define dso_local i32 @xor(i32 %a, i32 %b) local_unnamed_addr #0 {
241 entry:
242   %xor = xor i32 %b, %a
243 ; CHECK: w{{[0-9]+}} ^= w{{[0-9]+}}
244   ret i32 %xor
247 ; Function Attrs: norecurse nounwind readnone
248 define dso_local i32 @xor_i(i32 %a) local_unnamed_addr #0 {
249 entry:
250   %xor = xor i32 %a, 4095
251 ; CHECK: w{{[0-9]+}} ^= 4095
252   ret i32 %xor
255 ; Function Attrs: norecurse nounwind readnone
256 define dso_local i32 @and(i32 %a, i32 %b) local_unnamed_addr #0 {
257 entry:
258   %and = and i32 %b, %a
259 ; CHECK: w{{[0-9]+}} &= w{{[0-9]+}}
260   ret i32 %and
263 ; Function Attrs: norecurse nounwind readnone
264 define dso_local i32 @and_i(i32 %a) local_unnamed_addr #0 {
265 entry:
266   %and = and i32 %a, 65535
267 ; CHECK: w{{[0-9]+}} &= 65535
268   ret i32 %and
271 ; Function Attrs: norecurse nounwind readnone
272 define dso_local i32 @sll(i32 %a, i32 %b) local_unnamed_addr #0 {
273 entry:
274   %shl = shl i32 %a, %b
275 ; CHECK: w{{[0-9]+}} <<= w{{[0-9]+}}
276   ret i32 %shl
279 ; Function Attrs: norecurse nounwind readnone
280 define dso_local i32 @sll_i(i32 %a) local_unnamed_addr #0 {
281 entry:
282   %shl = shl i32 %a, 17
283 ; CHECK: w{{[0-9]+}} <<= 17
284   ret i32 %shl
287 ; Function Attrs: norecurse nounwind readnone
288 define dso_local i32 @srl(i32 %a, i32 %b) local_unnamed_addr #0 {
289 entry:
290   %shr = lshr i32 %a, %b
291 ; CHECK: w{{[0-9]+}} >>= w{{[0-9]+}}
292   ret i32 %shr
295 ; Function Attrs: norecurse nounwind readnone
296 define dso_local i32 @srl_i(i32 %a, i32 %b) local_unnamed_addr #0 {
297 entry:
298   %shr = lshr i32 %a, 31
299 ; CHECK: w{{[0-9]+}} >>= 31
300   ret i32 %shr
303 ; Function Attrs: norecurse nounwind readnone
304 define dso_local i32 @sra(i32 %a, i32 %b) local_unnamed_addr #0 {
305 entry:
306   %shr = ashr i32 %a, %b
307 ; CHECK: w{{[0-9]+}} s>>= w{{[0-9]+}}
308   ret i32 %shr
311 ; Function Attrs: norecurse nounwind readnone
312 define dso_local i32 @sra_i(i32 %a, i32 %b) local_unnamed_addr #0 {
313 entry:
314   %shr = ashr i32 %a, 7
315 ; CHECK: w{{[0-9]+}} s>>= 7
316   ret i32 %shr
319 ; Function Attrs: norecurse nounwind readnone
320 define dso_local i32 @neg(i32 %a) local_unnamed_addr #0 {
321 entry:
322   %sub = sub nsw i32 0, %a
323 ; CHECK: w{{[0-9]+}} = -w{{[0-9]+}}
324   ret i32 %sub