• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -O2 -march=bpfel -mattr=+alu32 < %s | FileCheck %s
2; RUN: llc -O2 -march=bpfel -mcpu=v3 < %s | FileCheck %s
3;
4; int mov(int a)
5; {
6;   return a;
7; }
8;
9; int mov_ri(void)
10; {
11;   return 0xff;
12; }
13;
14; int add(int a, int b)
15; {
16;   return a + b;
17; }
18;
19; int add_i(int a)
20; {
21;   return a + 0x7fffffff;
22; }
23;
24; int sub(int a, int b)
25; {
26;   return a - b;
27; }
28;
29; int sub_i(int a)
30; {
31;   return a - 0xffffffff;
32; }
33;
34; int mul(int a, int b)
35; {
36;   return a * b;
37; }
38;
39; int mul_i(int a)
40; {
41;   return a * 0xf;
42; }
43;
44; unsigned div(unsigned a, unsigned b)
45; {
46;   return a / b;
47; }
48;
49; unsigned div_i(unsigned a)
50; {
51;   return a / 0xf;
52; }
53;
54; int or(int a, int b)
55; {
56;   return a | b;
57; }
58;
59; int or_i(int a)
60; {
61;   return a | 0xff;
62; }
63;
64; int xor(int a, int b)
65; {
66;   return a ^ b;
67; }
68;
69; int xor_i(int a)
70; {
71;   return a ^ 0xfff;
72; }
73;
74; int and(int a, int b)
75; {
76;   return a & b;
77; }
78;
79; int and_i(int a)
80; {
81;   return a & 0xffff;
82; }
83;
84; int sll(int a, int b)
85; {
86;   return a << b;
87; }
88;
89; int sll_i(int a)
90; {
91;   return a << 17;
92; }
93;
94; unsigned srl(unsigned a, unsigned b)
95; {
96;   return a >> b;
97; }
98;
99; unsigned srl_i(unsigned a, unsigned b)
100; {
101;   return a >> 31;
102; }
103;
104; int sra(int a, int b)
105; {
106;   return a >> b;
107; }
108;
109; int sra_i(int a, int b)
110; {
111;   return a >> 7;
112; }
113;
114; int neg(int a)
115; {
116;   return -a;
117; }
118
119; Function Attrs: norecurse nounwind readnone
120define dso_local i32 @mov(i32 returned %a) local_unnamed_addr #0 {
121entry:
122  ret i32 %a
123; CHECK: w{{[0-9]+}} = w{{[0-9]+}}
124}
125
126; Function Attrs: norecurse nounwind readnone
127define dso_local i32 @mov_ri() local_unnamed_addr #0 {
128entry:
129  ret i32 255
130; CHECK: w{{[0-9]+}} = 255
131}
132
133; Function Attrs: norecurse nounwind readnone
134define dso_local i32 @add(i32 %a, i32 %b) local_unnamed_addr #0 {
135entry:
136  %add = add nsw i32 %b, %a
137; CHECK: w{{[0-9]+}} += w{{[0-9]+}}
138  ret i32 %add
139}
140
141; Function Attrs: norecurse nounwind readnone
142define dso_local i32 @add_i(i32 %a) local_unnamed_addr #0 {
143entry:
144  %add = add nsw i32 %a, 2147483647
145; CHECK: w{{[0-9]+}} += 2147483647
146  ret i32 %add
147}
148
149; Function Attrs: norecurse nounwind readnone
150define dso_local i32 @sub(i32 %a, i32 %b) local_unnamed_addr #0 {
151entry:
152  %sub = sub nsw i32 %a, %b
153; CHECK: w{{[0-9]+}} -= w{{[0-9]+}}
154  ret i32 %sub
155}
156
157; Function Attrs: norecurse nounwind readnone
158define dso_local i32 @sub_i(i32 %a) local_unnamed_addr #0 {
159entry:
160  %sub = add i32 %a, 1
161; CHECK: w{{[0-9]+}} += 1
162  ret i32 %sub
163}
164
165; Function Attrs: norecurse nounwind readnone
166define dso_local i32 @mul(i32 %a, i32 %b) local_unnamed_addr #0 {
167entry:
168  %mul = mul nsw i32 %b, %a
169; CHECK: w{{[0-9]+}} *= w{{[0-9]+}}
170  ret i32 %mul
171}
172
173; Function Attrs: norecurse nounwind readnone
174define dso_local i32 @mul_i(i32 %a) local_unnamed_addr #0 {
175entry:
176  %mul = mul nsw i32 %a, 15
177; CHECK: w{{[0-9]+}} *= 15
178  ret i32 %mul
179}
180
181; Function Attrs: norecurse nounwind readnone
182define dso_local i32 @div(i32 %a, i32 %b) local_unnamed_addr #0 {
183entry:
184  %div = udiv i32 %a, %b
185; CHECK: w{{[0-9]+}} /= w{{[0-9]+}}
186  ret i32 %div
187}
188
189; Function Attrs: norecurse nounwind readnone
190define dso_local i32 @div_i(i32 %a) local_unnamed_addr #0 {
191entry:
192  %div = udiv i32 %a, 15
193; CHECK: w{{[0-9]+}} /= 15
194  ret i32 %div
195}
196
197; Function Attrs: norecurse nounwind readnone
198define dso_local i32 @or(i32 %a, i32 %b) local_unnamed_addr #0 {
199entry:
200  %or = or i32 %b, %a
201; CHECK: w{{[0-9]+}} |= w{{[0-9]+}}
202  ret i32 %or
203}
204
205; Function Attrs: norecurse nounwind readnone
206define dso_local i32 @or_i(i32 %a) local_unnamed_addr #0 {
207entry:
208  %or = or i32 %a, 255
209; CHECK: w{{[0-9]+}} |= 255
210  ret i32 %or
211}
212
213; Function Attrs: norecurse nounwind readnone
214define dso_local i32 @xor(i32 %a, i32 %b) local_unnamed_addr #0 {
215entry:
216  %xor = xor i32 %b, %a
217; CHECK: w{{[0-9]+}} ^= w{{[0-9]+}}
218  ret i32 %xor
219}
220
221; Function Attrs: norecurse nounwind readnone
222define dso_local i32 @xor_i(i32 %a) local_unnamed_addr #0 {
223entry:
224  %xor = xor i32 %a, 4095
225; CHECK: w{{[0-9]+}} ^= 4095
226  ret i32 %xor
227}
228
229; Function Attrs: norecurse nounwind readnone
230define dso_local i32 @and(i32 %a, i32 %b) local_unnamed_addr #0 {
231entry:
232  %and = and i32 %b, %a
233; CHECK: w{{[0-9]+}} &= w{{[0-9]+}}
234  ret i32 %and
235}
236
237; Function Attrs: norecurse nounwind readnone
238define dso_local i32 @and_i(i32 %a) local_unnamed_addr #0 {
239entry:
240  %and = and i32 %a, 65535
241; CHECK: w{{[0-9]+}} &= 65535
242  ret i32 %and
243}
244
245; Function Attrs: norecurse nounwind readnone
246define dso_local i32 @sll(i32 %a, i32 %b) local_unnamed_addr #0 {
247entry:
248  %shl = shl i32 %a, %b
249; CHECK: w{{[0-9]+}} <<= w{{[0-9]+}}
250  ret i32 %shl
251}
252
253; Function Attrs: norecurse nounwind readnone
254define dso_local i32 @sll_i(i32 %a) local_unnamed_addr #0 {
255entry:
256  %shl = shl i32 %a, 17
257; CHECK: w{{[0-9]+}} <<= 17
258  ret i32 %shl
259}
260
261; Function Attrs: norecurse nounwind readnone
262define dso_local i32 @srl(i32 %a, i32 %b) local_unnamed_addr #0 {
263entry:
264  %shr = lshr i32 %a, %b
265; CHECK: w{{[0-9]+}} >>= w{{[0-9]+}}
266  ret i32 %shr
267}
268
269; Function Attrs: norecurse nounwind readnone
270define dso_local i32 @srl_i(i32 %a, i32 %b) local_unnamed_addr #0 {
271entry:
272  %shr = lshr i32 %a, 31
273; CHECK: w{{[0-9]+}} >>= 31
274  ret i32 %shr
275}
276
277; Function Attrs: norecurse nounwind readnone
278define dso_local i32 @sra(i32 %a, i32 %b) local_unnamed_addr #0 {
279entry:
280  %shr = ashr i32 %a, %b
281; CHECK: w{{[0-9]+}} s>>= w{{[0-9]+}}
282  ret i32 %shr
283}
284
285; Function Attrs: norecurse nounwind readnone
286define dso_local i32 @sra_i(i32 %a, i32 %b) local_unnamed_addr #0 {
287entry:
288  %shr = ashr i32 %a, 7
289; CHECK: w{{[0-9]+}} s>>= 7
290  ret i32 %shr
291}
292
293; Function Attrs: norecurse nounwind readnone
294define dso_local i32 @neg(i32 %a) local_unnamed_addr #0 {
295entry:
296  %sub = sub nsw i32 0, %a
297; CHECK: w{{[0-9]+}} = -w{{[0-9]+}}
298  ret i32 %sub
299}
300