[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / BPF / 32-bit-subreg-alu.ll
blob2e4e92e0126eb7da0b3eea76f3e5d77a0035e75e
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 ; int or(int a, int b)
55 ; {
56 ;   return a | b;
57 ; }
59 ; int or_i(int a)
60 ; {
61 ;   return a | 0xff;
62 ; }
64 ; int xor(int a, int b)
65 ; {
66 ;   return a ^ b;
67 ; }
69 ; int xor_i(int a)
70 ; {
71 ;   return a ^ 0xfff;
72 ; }
74 ; int and(int a, int b)
75 ; {
76 ;   return a & b;
77 ; }
79 ; int and_i(int a)
80 ; {
81 ;   return a & 0xffff;
82 ; }
84 ; int sll(int a, int b)
85 ; {
86 ;   return a << b;
87 ; }
89 ; int sll_i(int a)
90 ; {
91 ;   return a << 17;
92 ; }
94 ; unsigned srl(unsigned a, unsigned b)
95 ; {
96 ;   return a >> b;
97 ; }
99 ; unsigned srl_i(unsigned a, unsigned b)
100 ; {
101 ;   return a >> 31;
102 ; }
104 ; int sra(int a, int b)
105 ; {
106 ;   return a >> b;
107 ; }
109 ; int sra_i(int a, int b)
110 ; {
111 ;   return a >> 7;
112 ; }
114 ; int neg(int a)
115 ; {
116 ;   return -a;
117 ; }
119 ; Function Attrs: norecurse nounwind readnone
120 define dso_local i32 @mov(i32 returned %a) local_unnamed_addr #0 {
121 entry:
122   ret i32 %a
123 ; CHECK: w{{[0-9]+}} = w{{[0-9]+}}
126 ; Function Attrs: norecurse nounwind readnone
127 define dso_local i32 @mov_ri() local_unnamed_addr #0 {
128 entry:
129   ret i32 255
130 ; CHECK: w{{[0-9]+}} = 255
133 ; Function Attrs: norecurse nounwind readnone
134 define dso_local i32 @add(i32 %a, i32 %b) local_unnamed_addr #0 {
135 entry:
136   %add = add nsw i32 %b, %a
137 ; CHECK: w{{[0-9]+}} += w{{[0-9]+}}
138   ret i32 %add
141 ; Function Attrs: norecurse nounwind readnone
142 define dso_local i32 @add_i(i32 %a) local_unnamed_addr #0 {
143 entry:
144   %add = add nsw i32 %a, 2147483647
145 ; CHECK: w{{[0-9]+}} += 2147483647
146   ret i32 %add
149 ; Function Attrs: norecurse nounwind readnone
150 define dso_local i32 @sub(i32 %a, i32 %b) local_unnamed_addr #0 {
151 entry:
152   %sub = sub nsw i32 %a, %b
153 ; CHECK: w{{[0-9]+}} -= w{{[0-9]+}}
154   ret i32 %sub
157 ; Function Attrs: norecurse nounwind readnone
158 define dso_local i32 @sub_i(i32 %a) local_unnamed_addr #0 {
159 entry:
160   %sub = add i32 %a, 1
161 ; CHECK: w{{[0-9]+}} += 1
162   ret i32 %sub
165 ; Function Attrs: norecurse nounwind readnone
166 define dso_local i32 @mul(i32 %a, i32 %b) local_unnamed_addr #0 {
167 entry:
168   %mul = mul nsw i32 %b, %a
169 ; CHECK: w{{[0-9]+}} *= w{{[0-9]+}}
170   ret i32 %mul
173 ; Function Attrs: norecurse nounwind readnone
174 define dso_local i32 @mul_i(i32 %a) local_unnamed_addr #0 {
175 entry:
176   %mul = mul nsw i32 %a, 15
177 ; CHECK: w{{[0-9]+}} *= 15
178   ret i32 %mul
181 ; Function Attrs: norecurse nounwind readnone
182 define dso_local i32 @div(i32 %a, i32 %b) local_unnamed_addr #0 {
183 entry:
184   %div = udiv i32 %a, %b
185 ; CHECK: w{{[0-9]+}} /= w{{[0-9]+}}
186   ret i32 %div
189 ; Function Attrs: norecurse nounwind readnone
190 define dso_local i32 @div_i(i32 %a) local_unnamed_addr #0 {
191 entry:
192   %div = udiv i32 %a, 15
193 ; CHECK: w{{[0-9]+}} /= 15
194   ret i32 %div
197 ; Function Attrs: norecurse nounwind readnone
198 define dso_local i32 @or(i32 %a, i32 %b) local_unnamed_addr #0 {
199 entry:
200   %or = or i32 %b, %a
201 ; CHECK: w{{[0-9]+}} |= w{{[0-9]+}}
202   ret i32 %or
205 ; Function Attrs: norecurse nounwind readnone
206 define dso_local i32 @or_i(i32 %a) local_unnamed_addr #0 {
207 entry:
208   %or = or i32 %a, 255
209 ; CHECK: w{{[0-9]+}} |= 255
210   ret i32 %or
213 ; Function Attrs: norecurse nounwind readnone
214 define dso_local i32 @xor(i32 %a, i32 %b) local_unnamed_addr #0 {
215 entry:
216   %xor = xor i32 %b, %a
217 ; CHECK: w{{[0-9]+}} ^= w{{[0-9]+}}
218   ret i32 %xor
221 ; Function Attrs: norecurse nounwind readnone
222 define dso_local i32 @xor_i(i32 %a) local_unnamed_addr #0 {
223 entry:
224   %xor = xor i32 %a, 4095
225 ; CHECK: w{{[0-9]+}} ^= 4095
226   ret i32 %xor
229 ; Function Attrs: norecurse nounwind readnone
230 define dso_local i32 @and(i32 %a, i32 %b) local_unnamed_addr #0 {
231 entry:
232   %and = and i32 %b, %a
233 ; CHECK: w{{[0-9]+}} &= w{{[0-9]+}}
234   ret i32 %and
237 ; Function Attrs: norecurse nounwind readnone
238 define dso_local i32 @and_i(i32 %a) local_unnamed_addr #0 {
239 entry:
240   %and = and i32 %a, 65535
241 ; CHECK: w{{[0-9]+}} &= 65535
242   ret i32 %and
245 ; Function Attrs: norecurse nounwind readnone
246 define dso_local i32 @sll(i32 %a, i32 %b) local_unnamed_addr #0 {
247 entry:
248   %shl = shl i32 %a, %b
249 ; CHECK: w{{[0-9]+}} <<= w{{[0-9]+}}
250   ret i32 %shl
253 ; Function Attrs: norecurse nounwind readnone
254 define dso_local i32 @sll_i(i32 %a) local_unnamed_addr #0 {
255 entry:
256   %shl = shl i32 %a, 17
257 ; CHECK: w{{[0-9]+}} <<= 17
258   ret i32 %shl
261 ; Function Attrs: norecurse nounwind readnone
262 define dso_local i32 @srl(i32 %a, i32 %b) local_unnamed_addr #0 {
263 entry:
264   %shr = lshr i32 %a, %b
265 ; CHECK: w{{[0-9]+}} >>= w{{[0-9]+}}
266   ret i32 %shr
269 ; Function Attrs: norecurse nounwind readnone
270 define dso_local i32 @srl_i(i32 %a, i32 %b) local_unnamed_addr #0 {
271 entry:
272   %shr = lshr i32 %a, 31
273 ; CHECK: w{{[0-9]+}} >>= 31
274   ret i32 %shr
277 ; Function Attrs: norecurse nounwind readnone
278 define dso_local i32 @sra(i32 %a, i32 %b) local_unnamed_addr #0 {
279 entry:
280   %shr = ashr i32 %a, %b
281 ; CHECK: w{{[0-9]+}} s>>= w{{[0-9]+}}
282   ret i32 %shr
285 ; Function Attrs: norecurse nounwind readnone
286 define dso_local i32 @sra_i(i32 %a, i32 %b) local_unnamed_addr #0 {
287 entry:
288   %shr = ashr i32 %a, 7
289 ; CHECK: w{{[0-9]+}} s>>= 7
290   ret i32 %shr
293 ; Function Attrs: norecurse nounwind readnone
294 define dso_local i32 @neg(i32 %a) local_unnamed_addr #0 {
295 entry:
296   %sub = sub nsw i32 0, %a
297 ; CHECK: w{{[0-9]+}} = -w{{[0-9]+}}
298   ret i32 %sub