xref: /aosp_15_r20/external/llvm/test/CodeGen/BPF/sanity.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=bpfel | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@foo_printf.fmt = private unnamed_addr constant [9 x i8] c"hello  \0A\00", align 1
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone uwtable
6*9880d681SAndroid Build Coastguard Workerdefine i32 @foo_int(i32 %a, i32 %b) #0 {
7*9880d681SAndroid Build Coastguard Worker  %1 = add nsw i32 %b, %a
8*9880d681SAndroid Build Coastguard Worker  ret i32 %1
9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_int:
10*9880d681SAndroid Build Coastguard Worker; CHECK: add  r2, r1
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone uwtable
14*9880d681SAndroid Build Coastguard Workerdefine signext i8 @foo_char(i8 signext %a, i8 signext %b) #0 {
15*9880d681SAndroid Build Coastguard Worker  %1 = add i8 %b, %a
16*9880d681SAndroid Build Coastguard Worker  ret i8 %1
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_char:
18*9880d681SAndroid Build Coastguard Worker; CHECK: add  r2, r1
19*9880d681SAndroid Build Coastguard Worker; CHECK: slli  r2, 56
20*9880d681SAndroid Build Coastguard Worker; CHECK: srai  r2, 56
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone uwtable
24*9880d681SAndroid Build Coastguard Workerdefine i64 @foo_ll(i64 %a, i64 %b, i64 %c) #0 {
25*9880d681SAndroid Build Coastguard Worker  %1 = add nsw i64 %b, %a
26*9880d681SAndroid Build Coastguard Worker  %2 = sub i64 %1, %c
27*9880d681SAndroid Build Coastguard Worker  ret i64 %2
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_ll:
29*9880d681SAndroid Build Coastguard Worker; CHECK: add  r2, r1
30*9880d681SAndroid Build Coastguard Worker; CHECK: sub  r2, r3
31*9880d681SAndroid Build Coastguard Worker; CHECK: mov  r0, r2
32*9880d681SAndroid Build Coastguard Worker}
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind uwtable
35*9880d681SAndroid Build Coastguard Workerdefine void @foo_call2(i32 %a, i32 %b) #1 {
36*9880d681SAndroid Build Coastguard Worker  %1 = trunc i32 %b to i8
37*9880d681SAndroid Build Coastguard Worker  tail call void @foo_2arg(i8 signext %1, i32 %a) #3
38*9880d681SAndroid Build Coastguard Worker  ret void
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_call2:
40*9880d681SAndroid Build Coastguard Worker; CHECK: slli  r2, 56
41*9880d681SAndroid Build Coastguard Worker; CHECK: srai  r2, 56
42*9880d681SAndroid Build Coastguard Worker; CHECK: mov  r1, r2
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdeclare void @foo_2arg(i8 signext, i32) #2
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind uwtable
48*9880d681SAndroid Build Coastguard Workerdefine i32 @foo_call5(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #1 {
49*9880d681SAndroid Build Coastguard Worker  %1 = tail call i32 @bar(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #3
50*9880d681SAndroid Build Coastguard Worker  ret i32 0
51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_call5:
52*9880d681SAndroid Build Coastguard Worker; CHECK: call bar
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdeclare i32 @bar(i8 signext, i16 signext, i32, i64) #2
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone uwtable
58*9880d681SAndroid Build Coastguard Workerdefine signext i8 @foo_cmp(i8 signext %a, i8 signext %b) #0 {
59*9880d681SAndroid Build Coastguard Worker  %1 = icmp slt i8 %a, %b
60*9880d681SAndroid Build Coastguard Worker  %a.b = select i1 %1, i8 %a, i8 %b
61*9880d681SAndroid Build Coastguard Worker  ret i8 %a.b
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_cmp:
63*9880d681SAndroid Build Coastguard Worker; CHECK: jsgt  r2, r1
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone uwtable
67*9880d681SAndroid Build Coastguard Workerdefine i32 @foo_muldiv(i8 signext %a, i16 signext %b, i32 %c, i64 %d) #0 {
68*9880d681SAndroid Build Coastguard Worker  %1 = icmp eq i8 %a, 0
69*9880d681SAndroid Build Coastguard Worker  br i1 %1, label %5, label %2
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; <label>:2                                       ; preds = %0
72*9880d681SAndroid Build Coastguard Worker  %3 = sext i16 %b to i32
73*9880d681SAndroid Build Coastguard Worker  %4 = mul nsw i32 %3, %c
74*9880d681SAndroid Build Coastguard Worker  br label %8
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; <label>:5                                       ; preds = %0
77*9880d681SAndroid Build Coastguard Worker  %6 = trunc i64 %d to i32
78*9880d681SAndroid Build Coastguard Worker  %7 = udiv i32 %6, %c
79*9880d681SAndroid Build Coastguard Worker  br label %8
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; <label>:8                                       ; preds = %5, %2
82*9880d681SAndroid Build Coastguard Worker  %.0 = phi i32 [ %4, %2 ], [ %7, %5 ]
83*9880d681SAndroid Build Coastguard Worker  ret i32 %.0
84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_muldiv:
85*9880d681SAndroid Build Coastguard Worker; CHECK: mul r2, r3
86*9880d681SAndroid Build Coastguard Worker}
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind uwtable
89*9880d681SAndroid Build Coastguard Workerdefine i32 @foo_optimized() #1 {
90*9880d681SAndroid Build Coastguard Worker  %1 = tail call i32 @manyarg(i32 1, i32 2, i32 3, i32 4, i32 5) #3
91*9880d681SAndroid Build Coastguard Worker  ret i32 %1
92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_optimized:
93*9880d681SAndroid Build Coastguard Worker; CHECK: mov r1, 1
94*9880d681SAndroid Build Coastguard Worker; CHECK: mov r2, 2
95*9880d681SAndroid Build Coastguard Worker; CHECK: mov r3, 3
96*9880d681SAndroid Build Coastguard Worker; CHECK: mov r4, 4
97*9880d681SAndroid Build Coastguard Worker; CHECK: mov r5, 5
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdeclare i32 @manyarg(i32, i32, i32, i32, i32) #2
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind uwtable
103*9880d681SAndroid Build Coastguard Workerdefine void @foo_printf() #1 {
104*9880d681SAndroid Build Coastguard Worker  %fmt = alloca [9 x i8], align 1
105*9880d681SAndroid Build Coastguard Worker  %1 = getelementptr inbounds [9 x i8], [9 x i8]* %fmt, i64 0, i64 0
106*9880d681SAndroid Build Coastguard Worker  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, i32 1, i1 false)
107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo_printf:
108*9880d681SAndroid Build Coastguard Worker; CHECK: ld_64 r1, 729618802566522216
109*9880d681SAndroid Build Coastguard Worker  %2 = call i32 (i8*, ...) @printf(i8* %1) #3
110*9880d681SAndroid Build Coastguard Worker  ret void
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
114*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) #3
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
117*9880d681SAndroid Build Coastguard Workerdeclare i32 @printf(i8* nocapture, ...) #4
118