[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / BPF / sanity.ll
blobc1171df259fba717bf879af8aee4f3dc2a5d8e25
1 ; RUN: llc < %s -march=bpfel | FileCheck %s
3 @foo_printf.fmt = private unnamed_addr constant [9 x i8] c"hello  \0A\00", align 1
5 ; Function Attrs: nounwind readnone uwtable
6 define i32 @foo_int(i32 %a, i32 %b) #0 {
7   %1 = add nsw i32 %b, %a
8   ret i32 %1
9 ; CHECK-LABEL: foo_int:
10 ; CHECK: r0 += r1
13 ; Function Attrs: nounwind readnone uwtable
14 define signext i8 @foo_char(i8 signext %a, i8 signext %b) #0 {
15   %1 = add i8 %b, %a
16   ret i8 %1
17 ; CHECK-LABEL: foo_char:
18 ; CHECK: r0 += r1
19 ; CHECK: r0 <<= 56
20 ; CHECK: r0 s>>= 56
23 ; Function Attrs: nounwind readnone uwtable
24 define i64 @foo_ll(i64 %a, i64 %b, i64 %c) #0 {
25   %1 = add nsw i64 %b, %a
26   %2 = sub i64 %1, %c
27   ret i64 %2
28 ; CHECK-LABEL: foo_ll:
29 ; CHECK: r0 = r2
30 ; CHECK: r0 += r1
31 ; CHECK: r0 -= r3
34 ; Function Attrs: nounwind uwtable
35 define void @foo_call2(i32 %a, i32 %b) #1 {
36   %1 = trunc i32 %b to i8
37   tail call void @foo_2arg(i8 signext %1, i32 %a) #3
38   ret void
39 ; CHECK-LABEL: foo_call2:
40 ; CHECK: r2 <<= 56
41 ; CHECK: r2 s>>= 56
42 ; CHECK: r1 = r2
45 declare void @foo_2arg(i8 signext, i32) #2
47 ; Function Attrs: nounwind uwtable
48 define i32 @foo_call5(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #1 {
49   %1 = tail call i32 @bar(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #3
50   ret i32 0
51 ; CHECK-LABEL: foo_call5:
52 ; CHECK: call bar
55 declare i32 @bar(i8 signext, i16 signext, i32, i64) #2
57 ; Function Attrs: nounwind readnone uwtable
58 define signext i8 @foo_cmp(i8 signext %a, i8 signext %b) #0 {
59   %1 = icmp slt i8 %a, %b
60   %a.b = select i1 %1, i8 %a, i8 %b
61   ret i8 %a.b
62 ; CHECK-LABEL: foo_cmp:
63 ; CHECK: if r2 s> r0
66 ; Function Attrs: nounwind readnone uwtable
67 define i32 @foo_muldiv(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #0 {
68   %1 = icmp eq i8 %a, 0
69   br i1 %1, label %5, label %2
71 ; <label>:2                                       ; preds = %0
72   %3 = sext i16 %b to i32
73   %4 = mul nsw i32 %3, %c
74   br label %8
76 ; <label>:5                                       ; preds = %0
77   %6 = trunc i64 %d to i32
78   %7 = udiv i32 %6, %c
79   br label %8
81 ; <label>:8                                       ; preds = %5, %2
82   %.0 = phi i32 [ %4, %2 ], [ %7, %5 ]
83   ret i32 %.0
84 ; CHECK-LABEL: foo_muldiv:
85 ; CHECK: r0 *= r3
88 ; Function Attrs: nounwind uwtable
89 define i32 @foo_optimized() #1 {
90   %1 = tail call i32 @manyarg(i32 1, i32 2, i32 3, i32 4, i32 5) #3
91   ret i32 %1
92 ; CHECK-LABEL: foo_optimized:
93 ; CHECK: r1 = 1
94 ; CHECK: r2 = 2
95 ; CHECK: r3 = 3
96 ; CHECK: r4 = 4
97 ; CHECK: r5 = 5
100 declare i32 @manyarg(i32, i32, i32, i32, i32) #2
102 ; Function Attrs: nounwind uwtable
103 define void @foo_printf() #1 {
104   %fmt = alloca [9 x i8], align 1
105   %1 = getelementptr inbounds [9 x i8], [9 x i8]* %fmt, i64 0, i64 0
106   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @foo_printf.fmt, i64 0, i64 0), i64 9, i1 false)
107 ; CHECK-LABEL: foo_printf:
108 ; CHECK: r1 = 729618802566522216 ll
109   %2 = call i32 (i8*, ...) @printf(i8* %1) #3
110   ret void
113 ; Function Attrs: nounwind
114 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) #3
116 ; Function Attrs: nounwind
117 declare i32 @printf(i8* nocapture, ...) #4