[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / BPF / 32-bit-subreg-alu.ll
blob2a498494589aa522f3e74b018c0fc7594e314670
1 ; RUN: llc -O2 -march=bpfel -mattr=+alu32 < %s | FileCheck %s
3 ; int mov(int a)
4 ; {
5 ;   return a;
6 ; }
8 ; int mov_ri(void)
9 ; {
10 ;   return 0xff;
11 ; }
13 ; int add(int a, int b)
14 ; {
15 ;   return a + b;
16 ; }
18 ; int add_i(int a)
19 ; {
20 ;   return a + 0x7fffffff;
21 ; }
23 ; int sub(int a, int b)
24 ; {
25 ;   return a - b;
26 ; }
28 ; int sub_i(int a)
29 ; {
30 ;   return a - 0xffffffff;
31 ; }
33 ; int mul(int a, int b)
34 ; {
35 ;   return a * b;
36 ; }
38 ; int mul_i(int a)
39 ; {
40 ;   return a * 0xf;
41 ; }
43 ; unsigned div(unsigned a, unsigned b)
44 ; {
45 ;   return a / b;
46 ; }
48 ; unsigned div_i(unsigned a)
49 ; {
50 ;   return a / 0xf;
51 ; }
53 ; int or(int a, int b)
54 ; {
55 ;   return a | b;
56 ; }
58 ; int or_i(int a)
59 ; {
60 ;   return a | 0xff;
61 ; }
63 ; int xor(int a, int b)
64 ; {
65 ;   return a ^ b;
66 ; }
68 ; int xor_i(int a)
69 ; {
70 ;   return a ^ 0xfff;
71 ; }
73 ; int and(int a, int b)
74 ; {
75 ;   return a & b;
76 ; }
78 ; int and_i(int a)
79 ; {
80 ;   return a & 0xffff;
81 ; }
83 ; int sll(int a, int b)
84 ; {
85 ;   return a << b;
86 ; }
88 ; int sll_i(int a)
89 ; {
90 ;   return a << 17;
91 ; }
93 ; unsigned srl(unsigned a, unsigned b)
94 ; {
95 ;   return a >> b;
96 ; }
98 ; unsigned srl_i(unsigned a, unsigned b)
99 ; {
100 ;   return a >> 31;
101 ; }
103 ; int sra(int a, int b)
104 ; {
105 ;   return a >> b;
106 ; }
108 ; int sra_i(int a, int b)
109 ; {
110 ;   return a >> 7;
111 ; }
113 ; int neg(int a)
114 ; {
115 ;   return -a;
116 ; }
118 ; Function Attrs: norecurse nounwind readnone
119 define dso_local i32 @mov(i32 returned %a) local_unnamed_addr #0 {
120 entry:
121   ret i32 %a
122 ; CHECK: w{{[0-9]+}} = w{{[0-9]+}}
125 ; Function Attrs: norecurse nounwind readnone
126 define dso_local i32 @mov_ri() local_unnamed_addr #0 {
127 entry:
128   ret i32 255
129 ; CHECK: w{{[0-9]+}} = 255
132 ; Function Attrs: norecurse nounwind readnone
133 define dso_local i32 @add(i32 %a, i32 %b) local_unnamed_addr #0 {
134 entry:
135   %add = add nsw i32 %b, %a
136 ; CHECK: w{{[0-9]+}} += w{{[0-9]+}}
137   ret i32 %add
140 ; Function Attrs: norecurse nounwind readnone
141 define dso_local i32 @add_i(i32 %a) local_unnamed_addr #0 {
142 entry:
143   %add = add nsw i32 %a, 2147483647
144 ; CHECK: w{{[0-9]+}} += 2147483647
145   ret i32 %add
148 ; Function Attrs: norecurse nounwind readnone
149 define dso_local i32 @sub(i32 %a, i32 %b) local_unnamed_addr #0 {
150 entry:
151   %sub = sub nsw i32 %a, %b
152 ; CHECK: w{{[0-9]+}} -= w{{[0-9]+}}
153   ret i32 %sub
156 ; Function Attrs: norecurse nounwind readnone
157 define dso_local i32 @sub_i(i32 %a) local_unnamed_addr #0 {
158 entry:
159   %sub = add i32 %a, 1
160 ; CHECK: w{{[0-9]+}} += 1
161   ret i32 %sub
164 ; Function Attrs: norecurse nounwind readnone
165 define dso_local i32 @mul(i32 %a, i32 %b) local_unnamed_addr #0 {
166 entry:
167   %mul = mul nsw i32 %b, %a
168 ; CHECK: w{{[0-9]+}} *= w{{[0-9]+}}
169   ret i32 %mul
172 ; Function Attrs: norecurse nounwind readnone
173 define dso_local i32 @mul_i(i32 %a) local_unnamed_addr #0 {
174 entry:
175   %mul = mul nsw i32 %a, 15
176 ; CHECK: w{{[0-9]+}} *= 15
177   ret i32 %mul
180 ; Function Attrs: norecurse nounwind readnone
181 define dso_local i32 @div(i32 %a, i32 %b) local_unnamed_addr #0 {
182 entry:
183   %div = udiv i32 %a, %b
184 ; CHECK: w{{[0-9]+}} /= w{{[0-9]+}}
185   ret i32 %div
188 ; Function Attrs: norecurse nounwind readnone
189 define dso_local i32 @div_i(i32 %a) local_unnamed_addr #0 {
190 entry:
191   %div = udiv i32 %a, 15
192 ; CHECK: w{{[0-9]+}} /= 15
193   ret i32 %div
196 ; Function Attrs: norecurse nounwind readnone
197 define dso_local i32 @or(i32 %a, i32 %b) local_unnamed_addr #0 {
198 entry:
199   %or = or i32 %b, %a
200 ; CHECK: w{{[0-9]+}} |= w{{[0-9]+}}
201   ret i32 %or
204 ; Function Attrs: norecurse nounwind readnone
205 define dso_local i32 @or_i(i32 %a) local_unnamed_addr #0 {
206 entry:
207   %or = or i32 %a, 255
208 ; CHECK: w{{[0-9]+}} |= 255
209   ret i32 %or
212 ; Function Attrs: norecurse nounwind readnone
213 define dso_local i32 @xor(i32 %a, i32 %b) local_unnamed_addr #0 {
214 entry:
215   %xor = xor i32 %b, %a
216 ; CHECK: w{{[0-9]+}} ^= w{{[0-9]+}}
217   ret i32 %xor
220 ; Function Attrs: norecurse nounwind readnone
221 define dso_local i32 @xor_i(i32 %a) local_unnamed_addr #0 {
222 entry:
223   %xor = xor i32 %a, 4095
224 ; CHECK: w{{[0-9]+}} ^= 4095
225   ret i32 %xor
228 ; Function Attrs: norecurse nounwind readnone
229 define dso_local i32 @and(i32 %a, i32 %b) local_unnamed_addr #0 {
230 entry:
231   %and = and i32 %b, %a
232 ; CHECK: w{{[0-9]+}} &= w{{[0-9]+}}
233   ret i32 %and
236 ; Function Attrs: norecurse nounwind readnone
237 define dso_local i32 @and_i(i32 %a) local_unnamed_addr #0 {
238 entry:
239   %and = and i32 %a, 65535
240 ; CHECK: w{{[0-9]+}} &= 65535
241   ret i32 %and
244 ; Function Attrs: norecurse nounwind readnone
245 define dso_local i32 @sll(i32 %a, i32 %b) local_unnamed_addr #0 {
246 entry:
247   %shl = shl i32 %a, %b
248 ; CHECK: w{{[0-9]+}} <<= w{{[0-9]+}}
249   ret i32 %shl
252 ; Function Attrs: norecurse nounwind readnone
253 define dso_local i32 @sll_i(i32 %a) local_unnamed_addr #0 {
254 entry:
255   %shl = shl i32 %a, 17
256 ; CHECK: w{{[0-9]+}} <<= 17
257   ret i32 %shl
260 ; Function Attrs: norecurse nounwind readnone
261 define dso_local i32 @srl(i32 %a, i32 %b) local_unnamed_addr #0 {
262 entry:
263   %shr = lshr i32 %a, %b
264 ; CHECK: w{{[0-9]+}} >>= w{{[0-9]+}}
265   ret i32 %shr
268 ; Function Attrs: norecurse nounwind readnone
269 define dso_local i32 @srl_i(i32 %a, i32 %b) local_unnamed_addr #0 {
270 entry:
271   %shr = lshr i32 %a, 31
272 ; CHECK: w{{[0-9]+}} >>= 31
273   ret i32 %shr
276 ; Function Attrs: norecurse nounwind readnone
277 define dso_local i32 @sra(i32 %a, i32 %b) local_unnamed_addr #0 {
278 entry:
279   %shr = ashr i32 %a, %b
280 ; CHECK: w{{[0-9]+}} s>>= w{{[0-9]+}}
281   ret i32 %shr
284 ; Function Attrs: norecurse nounwind readnone
285 define dso_local i32 @sra_i(i32 %a, i32 %b) local_unnamed_addr #0 {
286 entry:
287   %shr = ashr i32 %a, 7
288 ; CHECK: w{{[0-9]+}} s>>= 7
289   ret i32 %shr
292 ; Function Attrs: norecurse nounwind readnone
293 define dso_local i32 @neg(i32 %a) local_unnamed_addr #0 {
294 entry:
295   %sub = sub nsw i32 0, %a
296 ; CHECK: w{{[0-9]+}} = -w{{[0-9]+}}
297   ret i32 %sub