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