xref: /aosp_15_r20/external/llvm/test/CodeGen/BPF/sockex2.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=bpfel -show-mc-encoding | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker%struct.bpf_map_def = type { i32, i32, i32, i32 }
4*9880d681SAndroid Build Coastguard Worker%struct.sk_buff = type opaque
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker@hash_map = global %struct.bpf_map_def { i32 1, i32 4, i32 8, i32 1024 }, section "maps", align 4
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind uwtable
9*9880d681SAndroid Build Coastguard Workerdefine i32 @bpf_prog2(%struct.sk_buff* %skb) #0 section "socket2" {
10*9880d681SAndroid Build Coastguard Worker  %key = alloca i32, align 4
11*9880d681SAndroid Build Coastguard Worker  %val = alloca i64, align 8
12*9880d681SAndroid Build Coastguard Worker  %1 = bitcast %struct.sk_buff* %skb to i8*
13*9880d681SAndroid Build Coastguard Worker  %2 = call i64 @llvm.bpf.load.half(i8* %1, i64 12) #2
14*9880d681SAndroid Build Coastguard Worker  %3 = icmp eq i64 %2, 34984
15*9880d681SAndroid Build Coastguard Worker  br i1 %3, label %4, label %6
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; <label>:4                                       ; preds = %0
18*9880d681SAndroid Build Coastguard Worker  %5 = call i64 @llvm.bpf.load.half(i8* %1, i64 16) #2
19*9880d681SAndroid Build Coastguard Worker  br label %6
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; <label>:6                                       ; preds = %4, %0
22*9880d681SAndroid Build Coastguard Worker  %proto.0.i = phi i64 [ %5, %4 ], [ %2, %0 ]
23*9880d681SAndroid Build Coastguard Worker  %nhoff.0.i = phi i64 [ 18, %4 ], [ 14, %0 ]
24*9880d681SAndroid Build Coastguard Worker  %7 = icmp eq i64 %proto.0.i, 33024
25*9880d681SAndroid Build Coastguard Worker  br i1 %7, label %8, label %12
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; <label>:8                                       ; preds = %6
28*9880d681SAndroid Build Coastguard Worker  %9 = add i64 %nhoff.0.i, 2
29*9880d681SAndroid Build Coastguard Worker  %10 = call i64 @llvm.bpf.load.half(i8* %1, i64 %9) #2
30*9880d681SAndroid Build Coastguard Worker  %11 = add i64 %nhoff.0.i, 4
31*9880d681SAndroid Build Coastguard Worker  br label %12
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; <label>:12                                      ; preds = %8, %6
34*9880d681SAndroid Build Coastguard Worker  %proto.1.i = phi i64 [ %10, %8 ], [ %proto.0.i, %6 ]
35*9880d681SAndroid Build Coastguard Worker  %nhoff.1.i = phi i64 [ %11, %8 ], [ %nhoff.0.i, %6 ]
36*9880d681SAndroid Build Coastguard Worker  switch i64 %proto.1.i, label %flow_dissector.exit.thread [
37*9880d681SAndroid Build Coastguard Worker    i64 2048, label %13
38*9880d681SAndroid Build Coastguard Worker    i64 34525, label %39
39*9880d681SAndroid Build Coastguard Worker  ]
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; <label>:13                                      ; preds = %12
42*9880d681SAndroid Build Coastguard Worker  %14 = add i64 %nhoff.1.i, 6
43*9880d681SAndroid Build Coastguard Worker  %15 = call i64 @llvm.bpf.load.half(i8* %1, i64 %14) #2
44*9880d681SAndroid Build Coastguard Worker  %16 = and i64 %15, 16383
45*9880d681SAndroid Build Coastguard Worker  %17 = icmp eq i64 %16, 0
46*9880d681SAndroid Build Coastguard Worker  br i1 %17, label %18, label %.thread.i.i
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; <label>:18                                      ; preds = %13
49*9880d681SAndroid Build Coastguard Worker  %19 = add i64 %nhoff.1.i, 9
50*9880d681SAndroid Build Coastguard Worker  %20 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %19) #2
51*9880d681SAndroid Build Coastguard Worker  %21 = icmp eq i64 %20, 47
52*9880d681SAndroid Build Coastguard Worker  br i1 %21, label %28, label %.thread.i.i
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker.thread.i.i:                                      ; preds = %18, %13
55*9880d681SAndroid Build Coastguard Worker  %22 = phi i64 [ %20, %18 ], [ 0, %13 ]
56*9880d681SAndroid Build Coastguard Worker  %23 = add i64 %nhoff.1.i, 12
57*9880d681SAndroid Build Coastguard Worker  %24 = call i64 @llvm.bpf.load.word(i8* %1, i64 %23) #2
58*9880d681SAndroid Build Coastguard Worker  %25 = add i64 %nhoff.1.i, 16
59*9880d681SAndroid Build Coastguard Worker  %26 = call i64 @llvm.bpf.load.word(i8* %1, i64 %25) #2
60*9880d681SAndroid Build Coastguard Worker  %27 = trunc i64 %26 to i32
61*9880d681SAndroid Build Coastguard Worker  br label %28
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker; <label>:28                                      ; preds = %.thread.i.i, %18
64*9880d681SAndroid Build Coastguard Worker  %29 = phi i32 [ %27, %.thread.i.i ], [ undef, %18 ]
65*9880d681SAndroid Build Coastguard Worker  %30 = phi i64 [ %22, %.thread.i.i ], [ 47, %18 ]
66*9880d681SAndroid Build Coastguard Worker  %31 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %nhoff.1.i) #2
67*9880d681SAndroid Build Coastguard Worker  %32 = icmp eq i64 %31, 69
68*9880d681SAndroid Build Coastguard Worker  br i1 %32, label %33, label %35
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; <label>:33                                      ; preds = %28
71*9880d681SAndroid Build Coastguard Worker  %34 = add i64 %nhoff.1.i, 20
72*9880d681SAndroid Build Coastguard Worker  br label %parse_ip.exit.i
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker; <label>:35                                      ; preds = %28
75*9880d681SAndroid Build Coastguard Worker  %36 = shl i64 %31, 2
76*9880d681SAndroid Build Coastguard Worker  %37 = and i64 %36, 60
77*9880d681SAndroid Build Coastguard Worker  %38 = add i64 %37, %nhoff.1.i
78*9880d681SAndroid Build Coastguard Worker  br label %parse_ip.exit.i
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker; <label>:39                                      ; preds = %12
81*9880d681SAndroid Build Coastguard Worker  %40 = add i64 %nhoff.1.i, 6
82*9880d681SAndroid Build Coastguard Worker  %41 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %40) #2
83*9880d681SAndroid Build Coastguard Worker  %42 = add i64 %nhoff.1.i, 8
84*9880d681SAndroid Build Coastguard Worker  %43 = call i64 @llvm.bpf.load.word(i8* %1, i64 %42) #2
85*9880d681SAndroid Build Coastguard Worker  %44 = add i64 %nhoff.1.i, 12
86*9880d681SAndroid Build Coastguard Worker  %45 = call i64 @llvm.bpf.load.word(i8* %1, i64 %44) #2
87*9880d681SAndroid Build Coastguard Worker  %46 = add i64 %nhoff.1.i, 16
88*9880d681SAndroid Build Coastguard Worker  %47 = call i64 @llvm.bpf.load.word(i8* %1, i64 %46) #2
89*9880d681SAndroid Build Coastguard Worker  %48 = add i64 %nhoff.1.i, 20
90*9880d681SAndroid Build Coastguard Worker  %49 = call i64 @llvm.bpf.load.word(i8* %1, i64 %48) #2
91*9880d681SAndroid Build Coastguard Worker  %50 = add i64 %nhoff.1.i, 24
92*9880d681SAndroid Build Coastguard Worker  %51 = call i64 @llvm.bpf.load.word(i8* %1, i64 %50) #2
93*9880d681SAndroid Build Coastguard Worker  %52 = add i64 %nhoff.1.i, 28
94*9880d681SAndroid Build Coastguard Worker  %53 = call i64 @llvm.bpf.load.word(i8* %1, i64 %52) #2
95*9880d681SAndroid Build Coastguard Worker  %54 = add i64 %nhoff.1.i, 32
96*9880d681SAndroid Build Coastguard Worker  %55 = call i64 @llvm.bpf.load.word(i8* %1, i64 %54) #2
97*9880d681SAndroid Build Coastguard Worker  %56 = add i64 %nhoff.1.i, 36
98*9880d681SAndroid Build Coastguard Worker  %57 = call i64 @llvm.bpf.load.word(i8* %1, i64 %56) #2
99*9880d681SAndroid Build Coastguard Worker  %58 = xor i64 %53, %51
100*9880d681SAndroid Build Coastguard Worker  %59 = xor i64 %58, %55
101*9880d681SAndroid Build Coastguard Worker  %60 = xor i64 %59, %57
102*9880d681SAndroid Build Coastguard Worker  %61 = trunc i64 %60 to i32
103*9880d681SAndroid Build Coastguard Worker  %62 = add i64 %nhoff.1.i, 40
104*9880d681SAndroid Build Coastguard Worker  br label %parse_ip.exit.i
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Workerparse_ip.exit.i:                                  ; preds = %39, %35, %33
107*9880d681SAndroid Build Coastguard Worker  %63 = phi i32 [ %61, %39 ], [ %29, %33 ], [ %29, %35 ]
108*9880d681SAndroid Build Coastguard Worker  %64 = phi i64 [ %41, %39 ], [ %30, %33 ], [ %30, %35 ]
109*9880d681SAndroid Build Coastguard Worker  %nhoff.2.i = phi i64 [ %62, %39 ], [ %34, %33 ], [ %38, %35 ]
110*9880d681SAndroid Build Coastguard Worker  switch i64 %64, label %187 [
111*9880d681SAndroid Build Coastguard Worker    i64 47, label %65
112*9880d681SAndroid Build Coastguard Worker    i64 4, label %137
113*9880d681SAndroid Build Coastguard Worker    i64 41, label %163
114*9880d681SAndroid Build Coastguard Worker  ]
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker; <label>:65                                      ; preds = %parse_ip.exit.i
117*9880d681SAndroid Build Coastguard Worker  %66 = call i64 @llvm.bpf.load.half(i8* %1, i64 %nhoff.2.i) #2
118*9880d681SAndroid Build Coastguard Worker  %67 = add i64 %nhoff.2.i, 2
119*9880d681SAndroid Build Coastguard Worker  %68 = call i64 @llvm.bpf.load.half(i8* %1, i64 %67) #2
120*9880d681SAndroid Build Coastguard Worker  %69 = and i64 %66, 1856
121*9880d681SAndroid Build Coastguard Worker  %70 = icmp eq i64 %69, 0
122*9880d681SAndroid Build Coastguard Worker  br i1 %70, label %71, label %187
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; <label>:71                                      ; preds = %65
125*9880d681SAndroid Build Coastguard Worker  %72 = lshr i64 %66, 5
126*9880d681SAndroid Build Coastguard Worker  %73 = and i64 %72, 4
127*9880d681SAndroid Build Coastguard Worker  %74 = add i64 %nhoff.2.i, 4
128*9880d681SAndroid Build Coastguard Worker  %..i = add i64 %74, %73
129*9880d681SAndroid Build Coastguard Worker  %75 = and i64 %66, 32
130*9880d681SAndroid Build Coastguard Worker  %76 = icmp eq i64 %75, 0
131*9880d681SAndroid Build Coastguard Worker  %77 = add i64 %..i, 4
132*9880d681SAndroid Build Coastguard Worker  %nhoff.4.i = select i1 %76, i64 %..i, i64 %77
133*9880d681SAndroid Build Coastguard Worker  %78 = and i64 %66, 16
134*9880d681SAndroid Build Coastguard Worker  %79 = icmp eq i64 %78, 0
135*9880d681SAndroid Build Coastguard Worker  %80 = add i64 %nhoff.4.i, 4
136*9880d681SAndroid Build Coastguard Worker  %nhoff.4..i = select i1 %79, i64 %nhoff.4.i, i64 %80
137*9880d681SAndroid Build Coastguard Worker  %81 = icmp eq i64 %68, 33024
138*9880d681SAndroid Build Coastguard Worker  br i1 %81, label %82, label %86
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker; <label>:82                                      ; preds = %71
141*9880d681SAndroid Build Coastguard Worker  %83 = add i64 %nhoff.4..i, 2
142*9880d681SAndroid Build Coastguard Worker  %84 = call i64 @llvm.bpf.load.half(i8* %1, i64 %83) #2
143*9880d681SAndroid Build Coastguard Worker  %85 = add i64 %nhoff.4..i, 4
144*9880d681SAndroid Build Coastguard Worker  br label %86
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker; <label>:86                                      ; preds = %82, %71
147*9880d681SAndroid Build Coastguard Worker  %proto.2.i = phi i64 [ %84, %82 ], [ %68, %71 ]
148*9880d681SAndroid Build Coastguard Worker  %nhoff.6.i = phi i64 [ %85, %82 ], [ %nhoff.4..i, %71 ]
149*9880d681SAndroid Build Coastguard Worker  switch i64 %proto.2.i, label %flow_dissector.exit.thread [
150*9880d681SAndroid Build Coastguard Worker    i64 2048, label %87
151*9880d681SAndroid Build Coastguard Worker    i64 34525, label %113
152*9880d681SAndroid Build Coastguard Worker  ]
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker; <label>:87                                      ; preds = %86
155*9880d681SAndroid Build Coastguard Worker  %88 = add i64 %nhoff.6.i, 6
156*9880d681SAndroid Build Coastguard Worker  %89 = call i64 @llvm.bpf.load.half(i8* %1, i64 %88) #2
157*9880d681SAndroid Build Coastguard Worker  %90 = and i64 %89, 16383
158*9880d681SAndroid Build Coastguard Worker  %91 = icmp eq i64 %90, 0
159*9880d681SAndroid Build Coastguard Worker  br i1 %91, label %92, label %.thread.i4.i
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; <label>:92                                      ; preds = %87
162*9880d681SAndroid Build Coastguard Worker  %93 = add i64 %nhoff.6.i, 9
163*9880d681SAndroid Build Coastguard Worker  %94 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %93) #2
164*9880d681SAndroid Build Coastguard Worker  %95 = icmp eq i64 %94, 47
165*9880d681SAndroid Build Coastguard Worker  br i1 %95, label %102, label %.thread.i4.i
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker.thread.i4.i:                                     ; preds = %92, %87
168*9880d681SAndroid Build Coastguard Worker  %96 = phi i64 [ %94, %92 ], [ 0, %87 ]
169*9880d681SAndroid Build Coastguard Worker  %97 = add i64 %nhoff.6.i, 12
170*9880d681SAndroid Build Coastguard Worker  %98 = call i64 @llvm.bpf.load.word(i8* %1, i64 %97) #2
171*9880d681SAndroid Build Coastguard Worker  %99 = add i64 %nhoff.6.i, 16
172*9880d681SAndroid Build Coastguard Worker  %100 = call i64 @llvm.bpf.load.word(i8* %1, i64 %99) #2
173*9880d681SAndroid Build Coastguard Worker  %101 = trunc i64 %100 to i32
174*9880d681SAndroid Build Coastguard Worker  br label %102
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Worker; <label>:102                                     ; preds = %.thread.i4.i, %92
177*9880d681SAndroid Build Coastguard Worker  %103 = phi i32 [ %101, %.thread.i4.i ], [ %63, %92 ]
178*9880d681SAndroid Build Coastguard Worker  %104 = phi i64 [ %96, %.thread.i4.i ], [ 47, %92 ]
179*9880d681SAndroid Build Coastguard Worker  %105 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %nhoff.6.i) #2
180*9880d681SAndroid Build Coastguard Worker  %106 = icmp eq i64 %105, 69
181*9880d681SAndroid Build Coastguard Worker  br i1 %106, label %107, label %109
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker; <label>:107                                     ; preds = %102
184*9880d681SAndroid Build Coastguard Worker  %108 = add i64 %nhoff.6.i, 20
185*9880d681SAndroid Build Coastguard Worker  br label %187
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker; <label>:109                                     ; preds = %102
188*9880d681SAndroid Build Coastguard Worker  %110 = shl i64 %105, 2
189*9880d681SAndroid Build Coastguard Worker  %111 = and i64 %110, 60
190*9880d681SAndroid Build Coastguard Worker  %112 = add i64 %111, %nhoff.6.i
191*9880d681SAndroid Build Coastguard Worker  br label %187
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker; <label>:113                                     ; preds = %86
194*9880d681SAndroid Build Coastguard Worker  %114 = add i64 %nhoff.6.i, 6
195*9880d681SAndroid Build Coastguard Worker  %115 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %114) #2
196*9880d681SAndroid Build Coastguard Worker  %116 = add i64 %nhoff.6.i, 8
197*9880d681SAndroid Build Coastguard Worker  %117 = call i64 @llvm.bpf.load.word(i8* %1, i64 %116) #2
198*9880d681SAndroid Build Coastguard Worker  %118 = add i64 %nhoff.6.i, 12
199*9880d681SAndroid Build Coastguard Worker  %119 = call i64 @llvm.bpf.load.word(i8* %1, i64 %118) #2
200*9880d681SAndroid Build Coastguard Worker  %120 = add i64 %nhoff.6.i, 16
201*9880d681SAndroid Build Coastguard Worker  %121 = call i64 @llvm.bpf.load.word(i8* %1, i64 %120) #2
202*9880d681SAndroid Build Coastguard Worker  %122 = add i64 %nhoff.6.i, 20
203*9880d681SAndroid Build Coastguard Worker  %123 = call i64 @llvm.bpf.load.word(i8* %1, i64 %122) #2
204*9880d681SAndroid Build Coastguard Worker  %124 = add i64 %nhoff.6.i, 24
205*9880d681SAndroid Build Coastguard Worker  %125 = call i64 @llvm.bpf.load.word(i8* %1, i64 %124) #2
206*9880d681SAndroid Build Coastguard Worker  %126 = add i64 %nhoff.6.i, 28
207*9880d681SAndroid Build Coastguard Worker  %127 = call i64 @llvm.bpf.load.word(i8* %1, i64 %126) #2
208*9880d681SAndroid Build Coastguard Worker  %128 = add i64 %nhoff.6.i, 32
209*9880d681SAndroid Build Coastguard Worker  %129 = call i64 @llvm.bpf.load.word(i8* %1, i64 %128) #2
210*9880d681SAndroid Build Coastguard Worker  %130 = add i64 %nhoff.6.i, 36
211*9880d681SAndroid Build Coastguard Worker  %131 = call i64 @llvm.bpf.load.word(i8* %1, i64 %130) #2
212*9880d681SAndroid Build Coastguard Worker  %132 = xor i64 %127, %125
213*9880d681SAndroid Build Coastguard Worker  %133 = xor i64 %132, %129
214*9880d681SAndroid Build Coastguard Worker  %134 = xor i64 %133, %131
215*9880d681SAndroid Build Coastguard Worker  %135 = trunc i64 %134 to i32
216*9880d681SAndroid Build Coastguard Worker  %136 = add i64 %nhoff.6.i, 40
217*9880d681SAndroid Build Coastguard Worker  br label %187
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Worker; <label>:137                                     ; preds = %parse_ip.exit.i
220*9880d681SAndroid Build Coastguard Worker  %138 = add i64 %nhoff.2.i, 6
221*9880d681SAndroid Build Coastguard Worker  %139 = call i64 @llvm.bpf.load.half(i8* %1, i64 %138) #2
222*9880d681SAndroid Build Coastguard Worker  %140 = and i64 %139, 16383
223*9880d681SAndroid Build Coastguard Worker  %141 = icmp eq i64 %140, 0
224*9880d681SAndroid Build Coastguard Worker  br i1 %141, label %142, label %.thread.i1.i
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker; <label>:142                                     ; preds = %137
227*9880d681SAndroid Build Coastguard Worker  %143 = add i64 %nhoff.2.i, 9
228*9880d681SAndroid Build Coastguard Worker  %144 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %143) #2
229*9880d681SAndroid Build Coastguard Worker  %145 = icmp eq i64 %144, 47
230*9880d681SAndroid Build Coastguard Worker  br i1 %145, label %152, label %.thread.i1.i
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Worker.thread.i1.i:                                     ; preds = %142, %137
233*9880d681SAndroid Build Coastguard Worker  %146 = phi i64 [ %144, %142 ], [ 0, %137 ]
234*9880d681SAndroid Build Coastguard Worker  %147 = add i64 %nhoff.2.i, 12
235*9880d681SAndroid Build Coastguard Worker  %148 = call i64 @llvm.bpf.load.word(i8* %1, i64 %147) #2
236*9880d681SAndroid Build Coastguard Worker  %149 = add i64 %nhoff.2.i, 16
237*9880d681SAndroid Build Coastguard Worker  %150 = call i64 @llvm.bpf.load.word(i8* %1, i64 %149) #2
238*9880d681SAndroid Build Coastguard Worker  %151 = trunc i64 %150 to i32
239*9880d681SAndroid Build Coastguard Worker  br label %152
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker; <label>:152                                     ; preds = %.thread.i1.i, %142
242*9880d681SAndroid Build Coastguard Worker  %153 = phi i32 [ %151, %.thread.i1.i ], [ %63, %142 ]
243*9880d681SAndroid Build Coastguard Worker  %154 = phi i64 [ %146, %.thread.i1.i ], [ 47, %142 ]
244*9880d681SAndroid Build Coastguard Worker  %155 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %nhoff.2.i) #2
245*9880d681SAndroid Build Coastguard Worker  %156 = icmp eq i64 %155, 69
246*9880d681SAndroid Build Coastguard Worker  br i1 %156, label %157, label %159
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Worker; <label>:157                                     ; preds = %152
249*9880d681SAndroid Build Coastguard Worker  %158 = add i64 %nhoff.2.i, 20
250*9880d681SAndroid Build Coastguard Worker  br label %187
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker; <label>:159                                     ; preds = %152
253*9880d681SAndroid Build Coastguard Worker  %160 = shl i64 %155, 2
254*9880d681SAndroid Build Coastguard Worker  %161 = and i64 %160, 60
255*9880d681SAndroid Build Coastguard Worker  %162 = add i64 %161, %nhoff.2.i
256*9880d681SAndroid Build Coastguard Worker  br label %187
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker; <label>:163                                     ; preds = %parse_ip.exit.i
259*9880d681SAndroid Build Coastguard Worker  %164 = add i64 %nhoff.2.i, 6
260*9880d681SAndroid Build Coastguard Worker  %165 = call i64 @llvm.bpf.load.byte(i8* %1, i64 %164) #2
261*9880d681SAndroid Build Coastguard Worker  %166 = add i64 %nhoff.2.i, 8
262*9880d681SAndroid Build Coastguard Worker  %167 = call i64 @llvm.bpf.load.word(i8* %1, i64 %166) #2
263*9880d681SAndroid Build Coastguard Worker  %168 = add i64 %nhoff.2.i, 12
264*9880d681SAndroid Build Coastguard Worker  %169 = call i64 @llvm.bpf.load.word(i8* %1, i64 %168) #2
265*9880d681SAndroid Build Coastguard Worker  %170 = add i64 %nhoff.2.i, 16
266*9880d681SAndroid Build Coastguard Worker  %171 = call i64 @llvm.bpf.load.word(i8* %1, i64 %170) #2
267*9880d681SAndroid Build Coastguard Worker  %172 = add i64 %nhoff.2.i, 20
268*9880d681SAndroid Build Coastguard Worker  %173 = call i64 @llvm.bpf.load.word(i8* %1, i64 %172) #2
269*9880d681SAndroid Build Coastguard Worker  %174 = add i64 %nhoff.2.i, 24
270*9880d681SAndroid Build Coastguard Worker  %175 = call i64 @llvm.bpf.load.word(i8* %1, i64 %174) #2
271*9880d681SAndroid Build Coastguard Worker  %176 = add i64 %nhoff.2.i, 28
272*9880d681SAndroid Build Coastguard Worker  %177 = call i64 @llvm.bpf.load.word(i8* %1, i64 %176) #2
273*9880d681SAndroid Build Coastguard Worker  %178 = add i64 %nhoff.2.i, 32
274*9880d681SAndroid Build Coastguard Worker  %179 = call i64 @llvm.bpf.load.word(i8* %1, i64 %178) #2
275*9880d681SAndroid Build Coastguard Worker  %180 = add i64 %nhoff.2.i, 36
276*9880d681SAndroid Build Coastguard Worker  %181 = call i64 @llvm.bpf.load.word(i8* %1, i64 %180) #2
277*9880d681SAndroid Build Coastguard Worker  %182 = xor i64 %177, %175
278*9880d681SAndroid Build Coastguard Worker  %183 = xor i64 %182, %179
279*9880d681SAndroid Build Coastguard Worker  %184 = xor i64 %183, %181
280*9880d681SAndroid Build Coastguard Worker  %185 = trunc i64 %184 to i32
281*9880d681SAndroid Build Coastguard Worker  %186 = add i64 %nhoff.2.i, 40
282*9880d681SAndroid Build Coastguard Worker  br label %187
283*9880d681SAndroid Build Coastguard Worker
284*9880d681SAndroid Build Coastguard Worker; <label>:187                                     ; preds = %163, %159, %157, %113, %109, %107, %65, %parse_ip.exit.i
285*9880d681SAndroid Build Coastguard Worker  %188 = phi i32 [ %63, %parse_ip.exit.i ], [ %185, %163 ], [ %63, %65 ], [ %135, %113 ], [ %103, %107 ], [ %103, %109 ], [ %153, %157 ], [ %153, %159 ]
286*9880d681SAndroid Build Coastguard Worker  %189 = phi i64 [ %64, %parse_ip.exit.i ], [ %165, %163 ], [ 47, %65 ], [ %115, %113 ], [ %104, %107 ], [ %104, %109 ], [ %154, %157 ], [ %154, %159 ]
287*9880d681SAndroid Build Coastguard Worker  %nhoff.7.i = phi i64 [ %nhoff.2.i, %parse_ip.exit.i ], [ %186, %163 ], [ %nhoff.2.i, %65 ], [ %136, %113 ], [ %108, %107 ], [ %112, %109 ], [ %158, %157 ], [ %162, %159 ]
288*9880d681SAndroid Build Coastguard Worker  %cond.i.i = icmp eq i64 %189, 51
289*9880d681SAndroid Build Coastguard Worker  %190 = select i1 %cond.i.i, i64 4, i64 0
290*9880d681SAndroid Build Coastguard Worker  %191 = add i64 %190, %nhoff.7.i
291*9880d681SAndroid Build Coastguard Worker  %192 = call i64 @llvm.bpf.load.word(i8* %1, i64 %191) #2
292*9880d681SAndroid Build Coastguard Worker  store i32 %188, i32* %key, align 4
293*9880d681SAndroid Build Coastguard Worker  %193 = bitcast i32* %key to i8*
294*9880d681SAndroid Build Coastguard Worker  %194 = call i8* inttoptr (i64 1 to i8* (i8*, i8*)*)(i8* bitcast (%struct.bpf_map_def* @hash_map to i8*), i8* %193) #2
295*9880d681SAndroid Build Coastguard Worker  %195 = icmp eq i8* %194, null
296*9880d681SAndroid Build Coastguard Worker  br i1 %195, label %199, label %196
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Worker; <label>:196                                     ; preds = %187
299*9880d681SAndroid Build Coastguard Worker  %197 = bitcast i8* %194 to i64*
300*9880d681SAndroid Build Coastguard Worker  %198 = atomicrmw add i64* %197, i64 1 seq_cst
301*9880d681SAndroid Build Coastguard Worker  br label %flow_dissector.exit.thread
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Worker; <label>:199                                     ; preds = %187
304*9880d681SAndroid Build Coastguard Worker  store i64 1, i64* %val, align 8
305*9880d681SAndroid Build Coastguard Worker  %200 = bitcast i64* %val to i8*
306*9880d681SAndroid Build Coastguard Worker  %201 = call i32 inttoptr (i64 2 to i32 (i8*, i8*, i8*, i64)*)(i8* bitcast (%struct.bpf_map_def* @hash_map to i8*), i8* %193, i8* %200, i64 0) #2
307*9880d681SAndroid Build Coastguard Worker  br label %flow_dissector.exit.thread
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Workerflow_dissector.exit.thread:                       ; preds = %86, %12, %196, %199
310*9880d681SAndroid Build Coastguard Worker  ret i32 0
311*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bpf_prog2:
312*9880d681SAndroid Build Coastguard Worker; CHECK: ldabs_h r0, r6.data + 12 # encoding: [0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00]
313*9880d681SAndroid Build Coastguard Worker; CHECK: ldabs_h r0, r6.data + 16 # encoding: [0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00]
314*9880d681SAndroid Build Coastguard Worker; CHECK: implicit-def: %R1
315*9880d681SAndroid Build Coastguard Worker; CHECK: ld_64   r1
316*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ori
317*9880d681SAndroid Build Coastguard Worker; CHECK: call 1 # encoding: [0x85,0x00,0x00,0x00,0x01,0x00,0x00,0x00]
318*9880d681SAndroid Build Coastguard Worker; CHECK: call 2 # encoding: [0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00]
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.bpf.load.half(i8*, i64) #1
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.bpf.load.word(i8*, i64) #1
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.bpf.load.byte(i8*, i64) #1
326