; LLVM IR from hans-ob1/neural_cam_ros :: src/detector (region_layer)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.layer = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, i32, float, float, float, float, float, float, float, i32, i32, float, i32, i32, i32, i32, float, float, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64 }
%struct.network_state = type { ptr, ptr, ptr, ptr, i32, i32, %struct.network }
%struct.network = type { ptr, i32, i32, ptr, float, i32, float, float, ptr, i32, ptr, i32, float, float, float, float, i32, i32, i32, ptr, ptr, i32, i32, i32, float, float, float, i32, i32, i32, i32, i32, i32, float, float, float, float, float, i32, ptr }
%struct.box = type { float, float, float, float }

@.str.1 = external hidden unnamed_addr constant [80 x i8], align 1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
define dso_local void @forward_region_layer(ptr noundef byval(%struct.layer) align 8 %0, ptr noundef byval(%struct.network_state) align 8 %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %struct.box, align 4
  %22 = alloca i32, align 4
  %23 = alloca float, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %struct.box, align 4
  %31 = alloca float, align 4
  %32 = alloca %struct.box, align 4
  %33 = alloca float, align 4
  %34 = alloca %struct.box, align 4
  %35 = alloca %struct.box, align 4
  %36 = alloca float, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %struct.box, align 4
  %40 = alloca i32, align 4
  %41 = alloca %struct.box, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  %45 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 47
  %46 = load i32, ptr %45, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %48 = load i32, ptr %47, align 4, !tbaa !13
  %49 = add nsw i32 %46, %48
  %50 = add nsw i32 %49, 1
  store i32 %50, ptr %8, align 4, !tbaa !14
  %51 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %52 = load ptr, ptr %51, align 8, !tbaa !15
  %53 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 1
  %54 = load ptr, ptr %53, align 8, !tbaa !16
  %55 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %56 = load i32, ptr %55, align 8, !tbaa !19
  %57 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %58 = load i32, ptr %57, align 8, !tbaa !20
  %59 = mul nsw i32 %56, %58
  %60 = sext i32 %59 to i64
  %61 = mul i64 %60, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %52, ptr align 4 %54, i64 %61, i1 false)
  %62 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %63 = load ptr, ptr %62, align 8, !tbaa !15
  %64 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %65 = load i32, ptr %64, align 4, !tbaa !21
  %66 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %67 = load i32, ptr %66, align 8, !tbaa !22
  %68 = mul nsw i32 %65, %67
  %69 = load i32, ptr %8, align 4, !tbaa !14
  %70 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %71 = load i32, ptr %70, align 8, !tbaa !23
  %72 = mul nsw i32 %69, %71
  %73 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %74 = load i32, ptr %73, align 8, !tbaa !20
  call void @flatten(ptr noundef %63, i32 noundef %68, i32 noundef %72, i32 noundef %74, i32 noundef 1)
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %75

75:                                               ; preds = %119, %2
  %76 = load i32, ptr %5, align 4, !tbaa !14
  %77 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %78 = load i32, ptr %77, align 8, !tbaa !20
  %79 = icmp slt i32 %76, %78
  br i1 %79, label %80, label %122

80:                                               ; preds = %75
  store i32 0, ptr %3, align 4, !tbaa !14
  br label %81

81:                                               ; preds = %115, %80
  %82 = load i32, ptr %3, align 4, !tbaa !14
  %83 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %84 = load i32, ptr %83, align 8, !tbaa !22
  %85 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %86 = load i32, ptr %85, align 4, !tbaa !21
  %87 = mul nsw i32 %84, %86
  %88 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %89 = load i32, ptr %88, align 8, !tbaa !23
  %90 = mul nsw i32 %87, %89
  %91 = icmp slt i32 %82, %90
  br i1 %91, label %92, label %118

92:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  %93 = load i32, ptr %8, align 4, !tbaa !14
  %94 = load i32, ptr %3, align 4, !tbaa !14
  %95 = mul nsw i32 %93, %94
  %96 = load i32, ptr %5, align 4, !tbaa !14
  %97 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %98 = load i32, ptr %97, align 8, !tbaa !19
  %99 = mul nsw i32 %96, %98
  %100 = add nsw i32 %95, %99
  store i32 %100, ptr %9, align 4, !tbaa !14
  %101 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %102 = load ptr, ptr %101, align 8, !tbaa !15
  %103 = load i32, ptr %9, align 4, !tbaa !14
  %104 = add nsw i32 %103, 4
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds float, ptr %102, i64 %105
  %107 = load float, ptr %106, align 4, !tbaa !24
  %108 = call float @logistic_activate(float noundef %107)
  %109 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %110 = load ptr, ptr %109, align 8, !tbaa !15
  %111 = load i32, ptr %9, align 4, !tbaa !14
  %112 = add nsw i32 %111, 4
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds float, ptr %110, i64 %113
  store float %108, ptr %114, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %115

115:                                              ; preds = %92
  %116 = load i32, ptr %3, align 4, !tbaa !14
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %3, align 4, !tbaa !14
  br label %81, !llvm.loop !25

118:                                              ; preds = %81
  br label %119

119:                                              ; preds = %118
  %120 = load i32, ptr %5, align 4, !tbaa !14
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %5, align 4, !tbaa !14
  br label %75, !llvm.loop !27

122:                                              ; preds = %75
  %123 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 134
  %124 = load ptr, ptr %123, align 8, !tbaa !28
  %125 = icmp ne ptr %124, null
  br i1 %125, label %126, label %175

126:                                              ; preds = %122
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %127

127:                                              ; preds = %171, %126
  %128 = load i32, ptr %5, align 4, !tbaa !14
  %129 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %130 = load i32, ptr %129, align 8, !tbaa !20
  %131 = icmp slt i32 %128, %130
  br i1 %131, label %132, label %174

132:                                              ; preds = %127
  store i32 0, ptr %3, align 4, !tbaa !14
  br label %133

133:                                              ; preds = %167, %132
  %134 = load i32, ptr %3, align 4, !tbaa !14
  %135 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %136 = load i32, ptr %135, align 8, !tbaa !22
  %137 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %138 = load i32, ptr %137, align 4, !tbaa !21
  %139 = mul nsw i32 %136, %138
  %140 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %141 = load i32, ptr %140, align 8, !tbaa !23
  %142 = mul nsw i32 %139, %141
  %143 = icmp slt i32 %134, %142
  br i1 %143, label %144, label %170

144:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  %145 = load i32, ptr %8, align 4, !tbaa !14
  %146 = load i32, ptr %3, align 4, !tbaa !14
  %147 = mul nsw i32 %145, %146
  %148 = load i32, ptr %5, align 4, !tbaa !14
  %149 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %150 = load i32, ptr %149, align 8, !tbaa !19
  %151 = mul nsw i32 %148, %150
  %152 = add nsw i32 %147, %151
  store i32 %152, ptr %10, align 4, !tbaa !14
  %153 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %154 = load ptr, ptr %153, align 8, !tbaa !15
  %155 = load i32, ptr %10, align 4, !tbaa !14
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds float, ptr %154, i64 %156
  %158 = getelementptr inbounds float, ptr %157, i64 5
  %159 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 134
  %160 = load ptr, ptr %159, align 8, !tbaa !28
  %161 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %162 = load ptr, ptr %161, align 8, !tbaa !15
  %163 = load i32, ptr %10, align 4, !tbaa !14
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds float, ptr %162, i64 %164
  %166 = getelementptr inbounds float, ptr %165, i64 5
  call void @softmax_tree(ptr noundef %158, i32 noundef 1, i32 noundef 0, float noundef 1.000000e+00, ptr noundef %160, ptr noundef %166)
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  br label %167

167:                                              ; preds = %144
  %168 = load i32, ptr %3, align 4, !tbaa !14
  %169 = add nsw i32 %168, 1
  store i32 %169, ptr %3, align 4, !tbaa !14
  br label %133, !llvm.loop !29

170:                                              ; preds = %133
  br label %171

171:                                              ; preds = %170
  %172 = load i32, ptr %5, align 4, !tbaa !14
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %5, align 4, !tbaa !14
  br label %127, !llvm.loop !30

174:                                              ; preds = %127
  br label %229

175:                                              ; preds = %122
  %176 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 45
  %177 = load i32, ptr %176, align 8, !tbaa !31
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %179, label %228

179:                                              ; preds = %175
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %180

180:                                              ; preds = %224, %179
  %181 = load i32, ptr %5, align 4, !tbaa !14
  %182 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %183 = load i32, ptr %182, align 8, !tbaa !20
  %184 = icmp slt i32 %181, %183
  br i1 %184, label %185, label %227

185:                                              ; preds = %180
  store i32 0, ptr %3, align 4, !tbaa !14
  br label %186

186:                                              ; preds = %220, %185
  %187 = load i32, ptr %3, align 4, !tbaa !14
  %188 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %189 = load i32, ptr %188, align 8, !tbaa !22
  %190 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %191 = load i32, ptr %190, align 4, !tbaa !21
  %192 = mul nsw i32 %189, %191
  %193 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %194 = load i32, ptr %193, align 8, !tbaa !23
  %195 = mul nsw i32 %192, %194
  %196 = icmp slt i32 %187, %195
  br i1 %196, label %197, label %223

197:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  %198 = load i32, ptr %8, align 4, !tbaa !14
  %199 = load i32, ptr %3, align 4, !tbaa !14
  %200 = mul nsw i32 %198, %199
  %201 = load i32, ptr %5, align 4, !tbaa !14
  %202 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %203 = load i32, ptr %202, align 8, !tbaa !19
  %204 = mul nsw i32 %201, %203
  %205 = add nsw i32 %200, %204
  store i32 %205, ptr %11, align 4, !tbaa !14
  %206 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %207 = load ptr, ptr %206, align 8, !tbaa !15
  %208 = load i32, ptr %11, align 4, !tbaa !14
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds float, ptr %207, i64 %209
  %211 = getelementptr inbounds float, ptr %210, i64 5
  %212 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %213 = load i32, ptr %212, align 4, !tbaa !13
  %214 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %215 = load ptr, ptr %214, align 8, !tbaa !15
  %216 = load i32, ptr %11, align 4, !tbaa !14
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds float, ptr %215, i64 %217
  %219 = getelementptr inbounds float, ptr %218, i64 5
  call void @softmax(ptr noundef %211, i32 noundef %213, float noundef 1.000000e+00, ptr noundef %219)
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  br label %220

220:                                              ; preds = %197
  %221 = load i32, ptr %3, align 4, !tbaa !14
  %222 = add nsw i32 %221, 1
  store i32 %222, ptr %3, align 4, !tbaa !14
  br label %186, !llvm.loop !32

223:                                              ; preds = %186
  br label %224

224:                                              ; preds = %223
  %225 = load i32, ptr %5, align 4, !tbaa !14
  %226 = add nsw i32 %225, 1
  store i32 %226, ptr %5, align 4, !tbaa !14
  br label %180, !llvm.loop !33

227:                                              ; preds = %180
  br label %228

228:                                              ; preds = %227, %175
  br label %229

229:                                              ; preds = %228, %174
  %230 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 4
  %231 = load i32, ptr %230, align 8, !tbaa !34
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %234, label %233

233:                                              ; preds = %229
  store i32 1, ptr %12, align 4
  br label %1053

234:                                              ; preds = %229
  %235 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %236 = load ptr, ptr %235, align 8, !tbaa !35
  %237 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %238 = load i32, ptr %237, align 8, !tbaa !19
  %239 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %240 = load i32, ptr %239, align 8, !tbaa !20
  %241 = mul nsw i32 %238, %240
  %242 = sext i32 %241 to i64
  %243 = mul i64 %242, 4
  call void @llvm.memset.p0.i64(ptr align 4 %236, i8 0, i64 %243, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store float 0.000000e+00, ptr %13, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  store float 0.000000e+00, ptr %14, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  store float 0.000000e+00, ptr %15, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  store float 0.000000e+00, ptr %16, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  store float 0.000000e+00, ptr %17, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store i32 0, ptr %18, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 0, ptr %19, align 4, !tbaa !14
  %244 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %245 = load ptr, ptr %244, align 8, !tbaa !36
  store float 0.000000e+00, ptr %245, align 4, !tbaa !24
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %246

246:                                              ; preds = %986, %234
  %247 = load i32, ptr %5, align 4, !tbaa !14
  %248 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %249 = load i32, ptr %248, align 8, !tbaa !20
  %250 = icmp slt i32 %247, %249
  br i1 %250, label %251, label %989

251:                                              ; preds = %246
  %252 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 134
  %253 = load ptr, ptr %252, align 8, !tbaa !28
  %254 = icmp ne ptr %253, null
  br i1 %254, label %255, label %467

255:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  store i32 0, ptr %20, align 4, !tbaa !14
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %256

256:                                              ; preds = %456, %255
  %257 = load i32, ptr %6, align 4, !tbaa !14
  %258 = icmp slt i32 %257, 30
  br i1 %258, label %259, label %459

259:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #8
  %260 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %261 = load ptr, ptr %260, align 8, !tbaa !37
  %262 = load i32, ptr %6, align 4, !tbaa !14
  %263 = mul nsw i32 %262, 5
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds float, ptr %261, i64 %264
  %266 = load i32, ptr %5, align 4, !tbaa !14
  %267 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 16
  %268 = load i32, ptr %267, align 4, !tbaa !38
  %269 = mul nsw i32 %266, %268
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds float, ptr %265, i64 %270
  %272 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %271)
  %273 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %21, i32 0, i32 0
  %274 = extractvalue { <2 x float>, <2 x float> } %272, 0
  store <2 x float> %274, ptr %273, align 4
  %275 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %21, i32 0, i32 1
  %276 = extractvalue { <2 x float>, <2 x float> } %272, 1
  store <2 x float> %276, ptr %275, align 4
  %277 = getelementptr inbounds %struct.box, ptr %21, i32 0, i32 0
  %278 = load float, ptr %277, align 4, !tbaa !39
  %279 = fcmp une float %278, 0.000000e+00
  br i1 %279, label %281, label %280

280:                                              ; preds = %259
  store i32 23, ptr %12, align 4
  br label %453

281:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %282 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %283 = load ptr, ptr %282, align 8, !tbaa !37
  %284 = load i32, ptr %6, align 4, !tbaa !14
  %285 = mul nsw i32 %284, 5
  %286 = load i32, ptr %5, align 4, !tbaa !14
  %287 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 16
  %288 = load i32, ptr %287, align 4, !tbaa !38
  %289 = mul nsw i32 %286, %288
  %290 = add nsw i32 %285, %289
  %291 = add nsw i32 %290, 4
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds float, ptr %283, i64 %292
  %294 = load float, ptr %293, align 4, !tbaa !24
  %295 = fptosi float %294 to i32
  store i32 %295, ptr %22, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store float 0.000000e+00, ptr %23, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !14
  %296 = getelementptr inbounds %struct.box, ptr %21, i32 0, i32 0
  %297 = load float, ptr %296, align 4, !tbaa !39
  %298 = fcmp ogt float %297, 1.000000e+05
  br i1 %298, label %299, label %451

299:                                              ; preds = %281
  %300 = getelementptr inbounds %struct.box, ptr %21, i32 0, i32 1
  %301 = load float, ptr %300, align 4, !tbaa !41
  %302 = fcmp ogt float %301, 1.000000e+05
  br i1 %302, label %303, label %451

303:                                              ; preds = %299
  store i32 0, ptr %7, align 4, !tbaa !14
  br label %304

304:                                              ; preds = %376, %303
  %305 = load i32, ptr %7, align 4, !tbaa !14
  %306 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %307 = load i32, ptr %306, align 8, !tbaa !23
  %308 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %309 = load i32, ptr %308, align 4, !tbaa !21
  %310 = mul nsw i32 %307, %309
  %311 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %312 = load i32, ptr %311, align 8, !tbaa !22
  %313 = mul nsw i32 %310, %312
  %314 = icmp slt i32 %305, %313
  br i1 %314, label %315, label %379

315:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %316 = load i32, ptr %8, align 4, !tbaa !14
  %317 = load i32, ptr %7, align 4, !tbaa !14
  %318 = mul nsw i32 %316, %317
  %319 = load i32, ptr %5, align 4, !tbaa !14
  %320 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %321 = load i32, ptr %320, align 8, !tbaa !19
  %322 = mul nsw i32 %319, %321
  %323 = add nsw i32 %318, %322
  %324 = add nsw i32 %323, 5
  store i32 %324, ptr %25, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  %325 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %326 = load ptr, ptr %325, align 8, !tbaa !15
  %327 = load i32, ptr %25, align 4, !tbaa !14
  %328 = sub nsw i32 %327, 1
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds float, ptr %326, i64 %329
  %331 = load float, ptr %330, align 4, !tbaa !24
  store float %331, ptr %26, align 4, !tbaa !24
  %332 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 66
  %333 = load float, ptr %332, align 4, !tbaa !42
  %334 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %335 = load ptr, ptr %334, align 8, !tbaa !15
  %336 = load i32, ptr %25, align 4, !tbaa !14
  %337 = sub nsw i32 %336, 1
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds float, ptr %335, i64 %338
  %340 = load float, ptr %339, align 4, !tbaa !24
  %341 = fsub float 0.000000e+00, %340
  %342 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %343 = load ptr, ptr %342, align 8, !tbaa !15
  %344 = load i32, ptr %25, align 4, !tbaa !14
  %345 = sub nsw i32 %344, 1
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds float, ptr %343, i64 %346
  %348 = load float, ptr %347, align 4, !tbaa !24
  %349 = call float @logistic_gradient(float noundef %348)
  %350 = fmul float %341, %349
  %351 = fmul float %333, %350
  %352 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %353 = load ptr, ptr %352, align 8, !tbaa !35
  %354 = load i32, ptr %25, align 4, !tbaa !14
  %355 = sub nsw i32 %354, 1
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds float, ptr %353, i64 %356
  store float %351, ptr %357, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %358 = load float, ptr %26, align 4, !tbaa !24
  %359 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %360 = load ptr, ptr %359, align 8, !tbaa !15
  %361 = load i32, ptr %25, align 4, !tbaa !14
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds float, ptr %360, i64 %362
  %364 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 134
  %365 = load ptr, ptr %364, align 8, !tbaa !28
  %366 = load i32, ptr %22, align 4, !tbaa !14
  %367 = call float @get_hierarchy_probability(ptr noundef %363, ptr noundef %365, i32 noundef %366)
  %368 = fmul float %358, %367
  store float %368, ptr %27, align 4, !tbaa !24
  %369 = load float, ptr %27, align 4, !tbaa !24
  %370 = load float, ptr %23, align 4, !tbaa !24
  %371 = fcmp ogt float %369, %370
  br i1 %371, label %372, label %375

372:                                              ; preds = %315
  %373 = load float, ptr %27, align 4, !tbaa !24
  store float %373, ptr %23, align 4, !tbaa !24
  %374 = load i32, ptr %7, align 4, !tbaa !14
  store i32 %374, ptr %24, align 4, !tbaa !14
  br label %375

375:                                              ; preds = %372, %315
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %376

376:                                              ; preds = %375
  %377 = load i32, ptr %7, align 4, !tbaa !14
  %378 = add nsw i32 %377, 1
  store i32 %378, ptr %7, align 4, !tbaa !14
  br label %304, !llvm.loop !43

379:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %380 = load i32, ptr %8, align 4, !tbaa !14
  %381 = load i32, ptr %24, align 4, !tbaa !14
  %382 = mul nsw i32 %380, %381
  %383 = load i32, ptr %5, align 4, !tbaa !14
  %384 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %385 = load i32, ptr %384, align 8, !tbaa !19
  %386 = mul nsw i32 %383, %385
  %387 = add nsw i32 %382, %386
  %388 = add nsw i32 %387, 5
  store i32 %388, ptr %28, align 4, !tbaa !14
  %389 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %390 = load ptr, ptr %389, align 8, !tbaa !15
  %391 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %392 = load ptr, ptr %391, align 8, !tbaa !35
  %393 = load i32, ptr %28, align 4, !tbaa !14
  %394 = load i32, ptr %22, align 4, !tbaa !14
  %395 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %396 = load i32, ptr %395, align 4, !tbaa !13
  %397 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 134
  %398 = load ptr, ptr %397, align 8, !tbaa !28
  %399 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 67
  %400 = load float, ptr %399, align 8, !tbaa !44
  call void @delta_region_class(ptr noundef %390, ptr noundef %392, i32 noundef %393, i32 noundef %394, i32 noundef %396, ptr noundef %398, float noundef %400, ptr noundef %15)
  %401 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %402 = load ptr, ptr %401, align 8, !tbaa !15
  %403 = load i32, ptr %28, align 4, !tbaa !14
  %404 = sub nsw i32 %403, 1
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds float, ptr %402, i64 %405
  %407 = load float, ptr %406, align 4, !tbaa !24
  %408 = fpext float %407 to double
  %409 = fcmp olt double %408, 3.000000e-01
  br i1 %409, label %410, label %441

410:                                              ; preds = %379
  %411 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 65
  %412 = load float, ptr %411, align 8, !tbaa !45
  %413 = fpext float %412 to double
  %414 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %415 = load ptr, ptr %414, align 8, !tbaa !15
  %416 = load i32, ptr %28, align 4, !tbaa !14
  %417 = sub nsw i32 %416, 1
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds float, ptr %415, i64 %418
  %420 = load float, ptr %419, align 4, !tbaa !24
  %421 = fpext float %420 to double
  %422 = fsub double 3.000000e-01, %421
  %423 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %424 = load ptr, ptr %423, align 8, !tbaa !15
  %425 = load i32, ptr %28, align 4, !tbaa !14
  %426 = sub nsw i32 %425, 1
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds float, ptr %424, i64 %427
  %429 = load float, ptr %428, align 4, !tbaa !24
  %430 = call float @logistic_gradient(float noundef %429)
  %431 = fpext float %430 to double
  %432 = fmul double %422, %431
  %433 = fmul double %413, %432
  %434 = fptrunc double %433 to float
  %435 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %436 = load ptr, ptr %435, align 8, !tbaa !35
  %437 = load i32, ptr %28, align 4, !tbaa !14
  %438 = sub nsw i32 %437, 1
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds float, ptr %436, i64 %439
  store float %434, ptr %440, align 4, !tbaa !24
  br label %448

441:                                              ; preds = %379
  %442 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %443 = load ptr, ptr %442, align 8, !tbaa !35
  %444 = load i32, ptr %28, align 4, !tbaa !14
  %445 = sub nsw i32 %444, 1
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds float, ptr %443, i64 %446
  store float 0.000000e+00, ptr %447, align 4, !tbaa !24
  br label %448

448:                                              ; preds = %441, %410
  %449 = load i32, ptr %19, align 4, !tbaa !14
  %450 = add nsw i32 %449, 1
  store i32 %450, ptr %19, align 4, !tbaa !14
  store i32 1, ptr %20, align 4, !tbaa !14
  store i32 23, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %452

451:                                              ; preds = %299, %281
  store i32 0, ptr %12, align 4
  br label %452

452:                                              ; preds = %451, %448
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %453

453:                                              ; preds = %452, %280
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #8
  %454 = load i32, ptr %12, align 4
  switch i32 %454, label %1056 [
    i32 0, label %455
    i32 23, label %459
  ]

455:                                              ; preds = %453
  br label %456

456:                                              ; preds = %455
  %457 = load i32, ptr %6, align 4, !tbaa !14
  %458 = add nsw i32 %457, 1
  store i32 %458, ptr %6, align 4, !tbaa !14
  br label %256, !llvm.loop !46

459:                                              ; preds = %453, %256
  %460 = load i32, ptr %20, align 4, !tbaa !14
  %461 = icmp ne i32 %460, 0
  br i1 %461, label %462, label %463

462:                                              ; preds = %459
  store i32 22, ptr %12, align 4
  br label %464

463:                                              ; preds = %459
  store i32 0, ptr %12, align 4
  br label %464

464:                                              ; preds = %463, %462
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  %465 = load i32, ptr %12, align 4
  switch i32 %465, label %1056 [
    i32 0, label %466
    i32 22, label %986
  ]

466:                                              ; preds = %464
  br label %467

467:                                              ; preds = %466, %251
  store i32 0, ptr %4, align 4, !tbaa !14
  br label %468

468:                                              ; preds = %696, %467
  %469 = load i32, ptr %4, align 4, !tbaa !14
  %470 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %471 = load i32, ptr %470, align 8, !tbaa !22
  %472 = icmp slt i32 %469, %471
  br i1 %472, label %473, label %699

473:                                              ; preds = %468
  store i32 0, ptr %3, align 4, !tbaa !14
  br label %474

474:                                              ; preds = %692, %473
  %475 = load i32, ptr %3, align 4, !tbaa !14
  %476 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %477 = load i32, ptr %476, align 4, !tbaa !21
  %478 = icmp slt i32 %475, %477
  br i1 %478, label %479, label %695

479:                                              ; preds = %474
  store i32 0, ptr %7, align 4, !tbaa !14
  br label %480

480:                                              ; preds = %688, %479
  %481 = load i32, ptr %7, align 4, !tbaa !14
  %482 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %483 = load i32, ptr %482, align 8, !tbaa !23
  %484 = icmp slt i32 %481, %483
  br i1 %484, label %485, label %691

485:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  %486 = load i32, ptr %8, align 4, !tbaa !14
  %487 = load i32, ptr %4, align 4, !tbaa !14
  %488 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %489 = load i32, ptr %488, align 4, !tbaa !21
  %490 = mul nsw i32 %487, %489
  %491 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %492 = load i32, ptr %491, align 8, !tbaa !23
  %493 = mul nsw i32 %490, %492
  %494 = load i32, ptr %3, align 4, !tbaa !14
  %495 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %496 = load i32, ptr %495, align 8, !tbaa !23
  %497 = mul nsw i32 %494, %496
  %498 = add nsw i32 %493, %497
  %499 = load i32, ptr %7, align 4, !tbaa !14
  %500 = add nsw i32 %498, %499
  %501 = mul nsw i32 %486, %500
  %502 = load i32, ptr %5, align 4, !tbaa !14
  %503 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %504 = load i32, ptr %503, align 8, !tbaa !19
  %505 = mul nsw i32 %502, %504
  %506 = add nsw i32 %501, %505
  store i32 %506, ptr %29, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #8
  %507 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %508 = load ptr, ptr %507, align 8, !tbaa !15
  %509 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %510 = load ptr, ptr %509, align 8, !tbaa !47
  %511 = load i32, ptr %7, align 4, !tbaa !14
  %512 = load i32, ptr %29, align 4, !tbaa !14
  %513 = load i32, ptr %3, align 4, !tbaa !14
  %514 = load i32, ptr %4, align 4, !tbaa !14
  %515 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %516 = load i32, ptr %515, align 4, !tbaa !21
  %517 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %518 = load i32, ptr %517, align 8, !tbaa !22
  %519 = call { <2 x float>, <2 x float> } @get_region_box(ptr noundef %508, ptr noundef %510, i32 noundef %511, i32 noundef %512, i32 noundef %513, i32 noundef %514, i32 noundef %516, i32 noundef %518)
  %520 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %30, i32 0, i32 0
  %521 = extractvalue { <2 x float>, <2 x float> } %519, 0
  store <2 x float> %521, ptr %520, align 4
  %522 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %30, i32 0, i32 1
  %523 = extractvalue { <2 x float>, <2 x float> } %519, 1
  store <2 x float> %523, ptr %522, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  store float 0.000000e+00, ptr %31, align 4, !tbaa !24
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %524

524:                                              ; preds = %568, %485
  %525 = load i32, ptr %6, align 4, !tbaa !14
  %526 = icmp slt i32 %525, 30
  br i1 %526, label %527, label %571

527:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #8
  %528 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %529 = load ptr, ptr %528, align 8, !tbaa !37
  %530 = load i32, ptr %6, align 4, !tbaa !14
  %531 = mul nsw i32 %530, 5
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds float, ptr %529, i64 %532
  %534 = load i32, ptr %5, align 4, !tbaa !14
  %535 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 16
  %536 = load i32, ptr %535, align 4, !tbaa !38
  %537 = mul nsw i32 %534, %536
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds float, ptr %533, i64 %538
  %540 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %539)
  %541 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 0
  %542 = extractvalue { <2 x float>, <2 x float> } %540, 0
  store <2 x float> %542, ptr %541, align 4
  %543 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 1
  %544 = extractvalue { <2 x float>, <2 x float> } %540, 1
  store <2 x float> %544, ptr %543, align 4
  %545 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 0
  %546 = load float, ptr %545, align 4, !tbaa !39
  %547 = fcmp une float %546, 0.000000e+00
  br i1 %547, label %549, label %548

548:                                              ; preds = %527
  store i32 38, ptr %12, align 4
  br label %565

549:                                              ; preds = %527
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %550 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %30, i32 0, i32 0
  %551 = load <2 x float>, ptr %550, align 4
  %552 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %30, i32 0, i32 1
  %553 = load <2 x float>, ptr %552, align 4
  %554 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 0
  %555 = load <2 x float>, ptr %554, align 4
  %556 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 1
  %557 = load <2 x float>, ptr %556, align 4
  %558 = call float @box_iou(<2 x float> %551, <2 x float> %553, <2 x float> %555, <2 x float> %557)
  store float %558, ptr %33, align 4, !tbaa !24
  %559 = load float, ptr %33, align 4, !tbaa !24
  %560 = load float, ptr %31, align 4, !tbaa !24
  %561 = fcmp ogt float %559, %560
  br i1 %561, label %562, label %564

562:                                              ; preds = %549
  %563 = load float, ptr %33, align 4, !tbaa !24
  store float %563, ptr %31, align 4, !tbaa !24
  br label %564

564:                                              ; preds = %562, %549
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  store i32 0, ptr %12, align 4
  br label %565

565:                                              ; preds = %564, %548
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  %566 = load i32, ptr %12, align 4
  switch i32 %566, label %1056 [
    i32 0, label %567
    i32 38, label %571
  ]

567:                                              ; preds = %565
  br label %568

568:                                              ; preds = %567
  %569 = load i32, ptr %6, align 4, !tbaa !14
  %570 = add nsw i32 %569, 1
  store i32 %570, ptr %6, align 4, !tbaa !14
  br label %524, !llvm.loop !48

571:                                              ; preds = %565, %524
  %572 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %573 = load ptr, ptr %572, align 8, !tbaa !15
  %574 = load i32, ptr %29, align 4, !tbaa !14
  %575 = add nsw i32 %574, 4
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds float, ptr %573, i64 %576
  %578 = load float, ptr %577, align 4, !tbaa !24
  %579 = load float, ptr %17, align 4, !tbaa !24
  %580 = fadd float %579, %578
  store float %580, ptr %17, align 4, !tbaa !24
  %581 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 66
  %582 = load float, ptr %581, align 4, !tbaa !42
  %583 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %584 = load ptr, ptr %583, align 8, !tbaa !15
  %585 = load i32, ptr %29, align 4, !tbaa !14
  %586 = add nsw i32 %585, 4
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds float, ptr %584, i64 %587
  %589 = load float, ptr %588, align 4, !tbaa !24
  %590 = fsub float 0.000000e+00, %589
  %591 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %592 = load ptr, ptr %591, align 8, !tbaa !15
  %593 = load i32, ptr %29, align 4, !tbaa !14
  %594 = add nsw i32 %593, 4
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds float, ptr %592, i64 %595
  %597 = load float, ptr %596, align 4, !tbaa !24
  %598 = call float @logistic_gradient(float noundef %597)
  %599 = fmul float %590, %598
  %600 = fmul float %582, %599
  %601 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %602 = load ptr, ptr %601, align 8, !tbaa !35
  %603 = load i32, ptr %29, align 4, !tbaa !14
  %604 = add nsw i32 %603, 4
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds float, ptr %602, i64 %605
  store float %600, ptr %606, align 4, !tbaa !24
  %607 = load float, ptr %31, align 4, !tbaa !24
  %608 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 70
  %609 = load float, ptr %608, align 4, !tbaa !49
  %610 = fcmp ogt float %607, %609
  br i1 %610, label %611, label %618

611:                                              ; preds = %571
  %612 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %613 = load ptr, ptr %612, align 8, !tbaa !35
  %614 = load i32, ptr %29, align 4, !tbaa !14
  %615 = add nsw i32 %614, 4
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds float, ptr %613, i64 %616
  store float 0.000000e+00, ptr %617, align 4, !tbaa !24
  br label %618

618:                                              ; preds = %611, %571
  %619 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 6
  %620 = getelementptr inbounds %struct.network, ptr %619, i32 0, i32 3
  %621 = load ptr, ptr %620, align 8, !tbaa !50
  %622 = load i32, ptr %621, align 4, !tbaa !14
  %623 = icmp slt i32 %622, 12800
  br i1 %623, label %624, label %687

624:                                              ; preds = %618
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #8
  call void @llvm.memset.p0.i64(ptr align 4 %34, i8 0, i64 16, i1 false)
  %625 = load i32, ptr %3, align 4, !tbaa !14
  %626 = sitofp i32 %625 to double
  %627 = fadd double %626, 5.000000e-01
  %628 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %629 = load i32, ptr %628, align 4, !tbaa !21
  %630 = sitofp i32 %629 to double
  %631 = fdiv double %627, %630
  %632 = fptrunc double %631 to float
  %633 = getelementptr inbounds %struct.box, ptr %34, i32 0, i32 0
  store float %632, ptr %633, align 4, !tbaa !39
  %634 = load i32, ptr %4, align 4, !tbaa !14
  %635 = sitofp i32 %634 to double
  %636 = fadd double %635, 5.000000e-01
  %637 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %638 = load i32, ptr %637, align 8, !tbaa !22
  %639 = sitofp i32 %638 to double
  %640 = fdiv double %636, %639
  %641 = fptrunc double %640 to float
  %642 = getelementptr inbounds %struct.box, ptr %34, i32 0, i32 1
  store float %641, ptr %642, align 4, !tbaa !41
  %643 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %644 = load ptr, ptr %643, align 8, !tbaa !47
  %645 = load i32, ptr %7, align 4, !tbaa !14
  %646 = mul nsw i32 2, %645
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds float, ptr %644, i64 %647
  %649 = load float, ptr %648, align 4, !tbaa !24
  %650 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %651 = load i32, ptr %650, align 4, !tbaa !21
  %652 = sitofp i32 %651 to float
  %653 = fdiv float %649, %652
  %654 = getelementptr inbounds %struct.box, ptr %34, i32 0, i32 2
  store float %653, ptr %654, align 4, !tbaa !51
  %655 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %656 = load ptr, ptr %655, align 8, !tbaa !47
  %657 = load i32, ptr %7, align 4, !tbaa !14
  %658 = mul nsw i32 2, %657
  %659 = add nsw i32 %658, 1
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds float, ptr %656, i64 %660
  %662 = load float, ptr %661, align 4, !tbaa !24
  %663 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %664 = load i32, ptr %663, align 8, !tbaa !22
  %665 = sitofp i32 %664 to float
  %666 = fdiv float %662, %665
  %667 = getelementptr inbounds %struct.box, ptr %34, i32 0, i32 3
  store float %666, ptr %667, align 4, !tbaa !52
  %668 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %669 = load ptr, ptr %668, align 8, !tbaa !15
  %670 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %671 = load ptr, ptr %670, align 8, !tbaa !47
  %672 = load i32, ptr %7, align 4, !tbaa !14
  %673 = load i32, ptr %29, align 4, !tbaa !14
  %674 = load i32, ptr %3, align 4, !tbaa !14
  %675 = load i32, ptr %4, align 4, !tbaa !14
  %676 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %677 = load i32, ptr %676, align 4, !tbaa !21
  %678 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %679 = load i32, ptr %678, align 8, !tbaa !22
  %680 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %681 = load ptr, ptr %680, align 8, !tbaa !35
  %682 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %34, i32 0, i32 0
  %683 = load <2 x float>, ptr %682, align 4
  %684 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %34, i32 0, i32 1
  %685 = load <2 x float>, ptr %684, align 4
  %686 = call float @delta_region_box(<2 x float> %683, <2 x float> %685, ptr noundef %669, ptr noundef %671, i32 noundef %672, i32 noundef %673, i32 noundef %674, i32 noundef %675, i32 noundef %677, i32 noundef %679, ptr noundef %681, float noundef 0x3F847AE140000000)
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #8
  br label %687

687:                                              ; preds = %624, %618
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  br label %688

688:                                              ; preds = %687
  %689 = load i32, ptr %7, align 4, !tbaa !14
  %690 = add nsw i32 %689, 1
  store i32 %690, ptr %7, align 4, !tbaa !14
  br label %480, !llvm.loop !53

691:                                              ; preds = %480
  br label %692

692:                                              ; preds = %691
  %693 = load i32, ptr %3, align 4, !tbaa !14
  %694 = add nsw i32 %693, 1
  store i32 %694, ptr %3, align 4, !tbaa !14
  br label %474, !llvm.loop !54

695:                                              ; preds = %474
  br label %696

696:                                              ; preds = %695
  %697 = load i32, ptr %4, align 4, !tbaa !14
  %698 = add nsw i32 %697, 1
  store i32 %698, ptr %4, align 4, !tbaa !14
  br label %468, !llvm.loop !55

699:                                              ; preds = %468
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %700

700:                                              ; preds = %982, %699
  %701 = load i32, ptr %6, align 4, !tbaa !14
  %702 = icmp slt i32 %701, 30
  br i1 %702, label %703, label %985

703:                                              ; preds = %700
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #8
  %704 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %705 = load ptr, ptr %704, align 8, !tbaa !37
  %706 = load i32, ptr %6, align 4, !tbaa !14
  %707 = mul nsw i32 %706, 5
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds float, ptr %705, i64 %708
  %710 = load i32, ptr %5, align 4, !tbaa !14
  %711 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 16
  %712 = load i32, ptr %711, align 4, !tbaa !38
  %713 = mul nsw i32 %710, %712
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds float, ptr %709, i64 %714
  %716 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %715)
  %717 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %35, i32 0, i32 0
  %718 = extractvalue { <2 x float>, <2 x float> } %716, 0
  store <2 x float> %718, ptr %717, align 4
  %719 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %35, i32 0, i32 1
  %720 = extractvalue { <2 x float>, <2 x float> } %716, 1
  store <2 x float> %720, ptr %719, align 4
  %721 = getelementptr inbounds %struct.box, ptr %35, i32 0, i32 0
  %722 = load float, ptr %721, align 4, !tbaa !39
  %723 = fcmp une float %722, 0.000000e+00
  br i1 %723, label %725, label %724

724:                                              ; preds = %703
  store i32 41, ptr %12, align 4
  br label %979

725:                                              ; preds = %703
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store float 0.000000e+00, ptr %36, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 0, ptr %37, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  store i32 0, ptr %38, align 4, !tbaa !14
  %726 = getelementptr inbounds %struct.box, ptr %35, i32 0, i32 0
  %727 = load float, ptr %726, align 4, !tbaa !39
  %728 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %729 = load i32, ptr %728, align 4, !tbaa !21
  %730 = sitofp i32 %729 to float
  %731 = fmul float %727, %730
  %732 = fptosi float %731 to i32
  store i32 %732, ptr %3, align 4, !tbaa !14
  %733 = getelementptr inbounds %struct.box, ptr %35, i32 0, i32 1
  %734 = load float, ptr %733, align 4, !tbaa !41
  %735 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %736 = load i32, ptr %735, align 8, !tbaa !22
  %737 = sitofp i32 %736 to float
  %738 = fmul float %734, %737
  %739 = fptosi float %738 to i32
  store i32 %739, ptr %4, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %39, ptr align 4 %35, i64 16, i1 false), !tbaa.struct !56
  %740 = getelementptr inbounds %struct.box, ptr %39, i32 0, i32 0
  store float 0.000000e+00, ptr %740, align 4, !tbaa !39
  %741 = getelementptr inbounds %struct.box, ptr %39, i32 0, i32 1
  store float 0.000000e+00, ptr %741, align 4, !tbaa !41
  store i32 0, ptr %7, align 4, !tbaa !14
  br label %742

742:                                              ; preds = %835, %725
  %743 = load i32, ptr %7, align 4, !tbaa !14
  %744 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %745 = load i32, ptr %744, align 8, !tbaa !23
  %746 = icmp slt i32 %743, %745
  br i1 %746, label %747, label %838

747:                                              ; preds = %742
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %748 = load i32, ptr %8, align 4, !tbaa !14
  %749 = load i32, ptr %4, align 4, !tbaa !14
  %750 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %751 = load i32, ptr %750, align 4, !tbaa !21
  %752 = mul nsw i32 %749, %751
  %753 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %754 = load i32, ptr %753, align 8, !tbaa !23
  %755 = mul nsw i32 %752, %754
  %756 = load i32, ptr %3, align 4, !tbaa !14
  %757 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %758 = load i32, ptr %757, align 8, !tbaa !23
  %759 = mul nsw i32 %756, %758
  %760 = add nsw i32 %755, %759
  %761 = load i32, ptr %7, align 4, !tbaa !14
  %762 = add nsw i32 %760, %761
  %763 = mul nsw i32 %748, %762
  %764 = load i32, ptr %5, align 4, !tbaa !14
  %765 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %766 = load i32, ptr %765, align 8, !tbaa !19
  %767 = mul nsw i32 %764, %766
  %768 = add nsw i32 %763, %767
  store i32 %768, ptr %40, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #8
  %769 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %770 = load ptr, ptr %769, align 8, !tbaa !15
  %771 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %772 = load ptr, ptr %771, align 8, !tbaa !47
  %773 = load i32, ptr %7, align 4, !tbaa !14
  %774 = load i32, ptr %40, align 4, !tbaa !14
  %775 = load i32, ptr %3, align 4, !tbaa !14
  %776 = load i32, ptr %4, align 4, !tbaa !14
  %777 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %778 = load i32, ptr %777, align 4, !tbaa !21
  %779 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %780 = load i32, ptr %779, align 8, !tbaa !22
  %781 = call { <2 x float>, <2 x float> } @get_region_box(ptr noundef %770, ptr noundef %772, i32 noundef %773, i32 noundef %774, i32 noundef %775, i32 noundef %776, i32 noundef %778, i32 noundef %780)
  %782 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 0
  %783 = extractvalue { <2 x float>, <2 x float> } %781, 0
  store <2 x float> %783, ptr %782, align 4
  %784 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 1
  %785 = extractvalue { <2 x float>, <2 x float> } %781, 1
  store <2 x float> %785, ptr %784, align 4
  %786 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 68
  %787 = load i32, ptr %786, align 4, !tbaa !57
  %788 = icmp ne i32 %787, 0
  br i1 %788, label %789, label %815

789:                                              ; preds = %747
  %790 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %791 = load ptr, ptr %790, align 8, !tbaa !47
  %792 = load i32, ptr %7, align 4, !tbaa !14
  %793 = mul nsw i32 2, %792
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds float, ptr %791, i64 %794
  %796 = load float, ptr %795, align 4, !tbaa !24
  %797 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %798 = load i32, ptr %797, align 4, !tbaa !21
  %799 = sitofp i32 %798 to float
  %800 = fdiv float %796, %799
  %801 = getelementptr inbounds %struct.box, ptr %41, i32 0, i32 2
  store float %800, ptr %801, align 4, !tbaa !51
  %802 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %803 = load ptr, ptr %802, align 8, !tbaa !47
  %804 = load i32, ptr %7, align 4, !tbaa !14
  %805 = mul nsw i32 2, %804
  %806 = add nsw i32 %805, 1
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds float, ptr %803, i64 %807
  %809 = load float, ptr %808, align 4, !tbaa !24
  %810 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %811 = load i32, ptr %810, align 8, !tbaa !22
  %812 = sitofp i32 %811 to float
  %813 = fdiv float %809, %812
  %814 = getelementptr inbounds %struct.box, ptr %41, i32 0, i32 3
  store float %813, ptr %814, align 4, !tbaa !52
  br label %815

815:                                              ; preds = %789, %747
  %816 = getelementptr inbounds %struct.box, ptr %41, i32 0, i32 0
  store float 0.000000e+00, ptr %816, align 4, !tbaa !39
  %817 = getelementptr inbounds %struct.box, ptr %41, i32 0, i32 1
  store float 0.000000e+00, ptr %817, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  %818 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 0
  %819 = load <2 x float>, ptr %818, align 4
  %820 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %41, i32 0, i32 1
  %821 = load <2 x float>, ptr %820, align 4
  %822 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %39, i32 0, i32 0
  %823 = load <2 x float>, ptr %822, align 4
  %824 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %39, i32 0, i32 1
  %825 = load <2 x float>, ptr %824, align 4
  %826 = call float @box_iou(<2 x float> %819, <2 x float> %821, <2 x float> %823, <2 x float> %825)
  store float %826, ptr %42, align 4, !tbaa !24
  %827 = load float, ptr %42, align 4, !tbaa !24
  %828 = load float, ptr %36, align 4, !tbaa !24
  %829 = fcmp ogt float %827, %828
  br i1 %829, label %830, label %834

830:                                              ; preds = %815
  %831 = load i32, ptr %40, align 4, !tbaa !14
  store i32 %831, ptr %37, align 4, !tbaa !14
  %832 = load float, ptr %42, align 4, !tbaa !24
  store float %832, ptr %36, align 4, !tbaa !24
  %833 = load i32, ptr %7, align 4, !tbaa !14
  store i32 %833, ptr %38, align 4, !tbaa !14
  br label %834

834:                                              ; preds = %830, %815
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %835

835:                                              ; preds = %834
  %836 = load i32, ptr %7, align 4, !tbaa !14
  %837 = add nsw i32 %836, 1
  store i32 %837, ptr %7, align 4, !tbaa !14
  br label %742, !llvm.loop !58

838:                                              ; preds = %742
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  %839 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %840 = load ptr, ptr %839, align 8, !tbaa !15
  %841 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 93
  %842 = load ptr, ptr %841, align 8, !tbaa !47
  %843 = load i32, ptr %38, align 4, !tbaa !14
  %844 = load i32, ptr %37, align 4, !tbaa !14
  %845 = load i32, ptr %3, align 4, !tbaa !14
  %846 = load i32, ptr %4, align 4, !tbaa !14
  %847 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %848 = load i32, ptr %847, align 4, !tbaa !21
  %849 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %850 = load i32, ptr %849, align 8, !tbaa !22
  %851 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %852 = load ptr, ptr %851, align 8, !tbaa !35
  %853 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 64
  %854 = load float, ptr %853, align 4, !tbaa !59
  %855 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %35, i32 0, i32 0
  %856 = load <2 x float>, ptr %855, align 4
  %857 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %35, i32 0, i32 1
  %858 = load <2 x float>, ptr %857, align 4
  %859 = call float @delta_region_box(<2 x float> %856, <2 x float> %858, ptr noundef %840, ptr noundef %842, i32 noundef %843, i32 noundef %844, i32 noundef %845, i32 noundef %846, i32 noundef %848, i32 noundef %850, ptr noundef %852, float noundef %854)
  store float %859, ptr %43, align 4, !tbaa !24
  %860 = load float, ptr %43, align 4, !tbaa !24
  %861 = fpext float %860 to double
  %862 = fcmp ogt double %861, 5.000000e-01
  br i1 %862, label %863, label %866

863:                                              ; preds = %838
  %864 = load float, ptr %14, align 4, !tbaa !24
  %865 = fadd float %864, 1.000000e+00
  store float %865, ptr %14, align 4, !tbaa !24
  br label %866

866:                                              ; preds = %863, %838
  %867 = load float, ptr %43, align 4, !tbaa !24
  %868 = load float, ptr %13, align 4, !tbaa !24
  %869 = fadd float %868, %867
  store float %869, ptr %13, align 4, !tbaa !24
  %870 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %871 = load ptr, ptr %870, align 8, !tbaa !15
  %872 = load i32, ptr %37, align 4, !tbaa !14
  %873 = add nsw i32 %872, 4
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds float, ptr %871, i64 %874
  %876 = load float, ptr %875, align 4, !tbaa !24
  %877 = load float, ptr %16, align 4, !tbaa !24
  %878 = fadd float %877, %876
  store float %878, ptr %16, align 4, !tbaa !24
  %879 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 65
  %880 = load float, ptr %879, align 8, !tbaa !45
  %881 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %882 = load ptr, ptr %881, align 8, !tbaa !15
  %883 = load i32, ptr %37, align 4, !tbaa !14
  %884 = add nsw i32 %883, 4
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds float, ptr %882, i64 %885
  %887 = load float, ptr %886, align 4, !tbaa !24
  %888 = fsub float 1.000000e+00, %887
  %889 = fmul float %880, %888
  %890 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %891 = load ptr, ptr %890, align 8, !tbaa !15
  %892 = load i32, ptr %37, align 4, !tbaa !14
  %893 = add nsw i32 %892, 4
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds float, ptr %891, i64 %894
  %896 = load float, ptr %895, align 4, !tbaa !24
  %897 = call float @logistic_gradient(float noundef %896)
  %898 = fmul float %889, %897
  %899 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %900 = load ptr, ptr %899, align 8, !tbaa !35
  %901 = load i32, ptr %37, align 4, !tbaa !14
  %902 = add nsw i32 %901, 4
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds float, ptr %900, i64 %903
  store float %898, ptr %904, align 4, !tbaa !24
  %905 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 49
  %906 = load i32, ptr %905, align 8, !tbaa !60
  %907 = icmp ne i32 %906, 0
  br i1 %907, label %908, label %936

908:                                              ; preds = %866
  %909 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 65
  %910 = load float, ptr %909, align 8, !tbaa !45
  %911 = load float, ptr %43, align 4, !tbaa !24
  %912 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %913 = load ptr, ptr %912, align 8, !tbaa !15
  %914 = load i32, ptr %37, align 4, !tbaa !14
  %915 = add nsw i32 %914, 4
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds float, ptr %913, i64 %916
  %918 = load float, ptr %917, align 4, !tbaa !24
  %919 = fsub float %911, %918
  %920 = fmul float %910, %919
  %921 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %922 = load ptr, ptr %921, align 8, !tbaa !15
  %923 = load i32, ptr %37, align 4, !tbaa !14
  %924 = add nsw i32 %923, 4
  %925 = sext i32 %924 to i64
  %926 = getelementptr inbounds float, ptr %922, i64 %925
  %927 = load float, ptr %926, align 4, !tbaa !24
  %928 = call float @logistic_gradient(float noundef %927)
  %929 = fmul float %920, %928
  %930 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %931 = load ptr, ptr %930, align 8, !tbaa !35
  %932 = load i32, ptr %37, align 4, !tbaa !14
  %933 = add nsw i32 %932, 4
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds float, ptr %931, i64 %934
  store float %929, ptr %935, align 4, !tbaa !24
  br label %936

936:                                              ; preds = %908, %866
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  %937 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %938 = load ptr, ptr %937, align 8, !tbaa !37
  %939 = load i32, ptr %6, align 4, !tbaa !14
  %940 = mul nsw i32 %939, 5
  %941 = load i32, ptr %5, align 4, !tbaa !14
  %942 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 16
  %943 = load i32, ptr %942, align 4, !tbaa !38
  %944 = mul nsw i32 %941, %943
  %945 = add nsw i32 %940, %944
  %946 = add nsw i32 %945, 4
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds float, ptr %938, i64 %947
  %949 = load float, ptr %948, align 4, !tbaa !24
  %950 = fptosi float %949 to i32
  store i32 %950, ptr %44, align 4, !tbaa !14
  %951 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 82
  %952 = load ptr, ptr %951, align 8, !tbaa !61
  %953 = icmp ne ptr %952, null
  br i1 %953, label %954, label %961

954:                                              ; preds = %936
  %955 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 82
  %956 = load ptr, ptr %955, align 8, !tbaa !61
  %957 = load i32, ptr %44, align 4, !tbaa !14
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds i32, ptr %956, i64 %958
  %960 = load i32, ptr %959, align 4, !tbaa !14
  store i32 %960, ptr %44, align 4, !tbaa !14
  br label %961

961:                                              ; preds = %954, %936
  %962 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %963 = load ptr, ptr %962, align 8, !tbaa !15
  %964 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %965 = load ptr, ptr %964, align 8, !tbaa !35
  %966 = load i32, ptr %37, align 4, !tbaa !14
  %967 = add nsw i32 %966, 5
  %968 = load i32, ptr %44, align 4, !tbaa !14
  %969 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %970 = load i32, ptr %969, align 4, !tbaa !13
  %971 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 134
  %972 = load ptr, ptr %971, align 8, !tbaa !28
  %973 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 67
  %974 = load float, ptr %973, align 8, !tbaa !44
  call void @delta_region_class(ptr noundef %963, ptr noundef %965, i32 noundef %967, i32 noundef %968, i32 noundef %970, ptr noundef %972, float noundef %974, ptr noundef %15)
  %975 = load i32, ptr %18, align 4, !tbaa !14
  %976 = add nsw i32 %975, 1
  store i32 %976, ptr %18, align 4, !tbaa !14
  %977 = load i32, ptr %19, align 4, !tbaa !14
  %978 = add nsw i32 %977, 1
  store i32 %978, ptr %19, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  store i32 0, ptr %12, align 4
  br label %979

979:                                              ; preds = %961, %724
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  %980 = load i32, ptr %12, align 4
  switch i32 %980, label %1056 [
    i32 0, label %981
    i32 41, label %985
  ]

981:                                              ; preds = %979
  br label %982

982:                                              ; preds = %981
  %983 = load i32, ptr %6, align 4, !tbaa !14
  %984 = add nsw i32 %983, 1
  store i32 %984, ptr %6, align 4, !tbaa !14
  br label %700, !llvm.loop !62

985:                                              ; preds = %979, %700
  br label %986

986:                                              ; preds = %985, %464
  %987 = load i32, ptr %5, align 4, !tbaa !14
  %988 = add nsw i32 %987, 1
  store i32 %988, ptr %5, align 4, !tbaa !14
  br label %246, !llvm.loop !63

989:                                              ; preds = %246
  %990 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %991 = load ptr, ptr %990, align 8, !tbaa !35
  %992 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %993 = load i32, ptr %992, align 4, !tbaa !21
  %994 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %995 = load i32, ptr %994, align 8, !tbaa !22
  %996 = mul nsw i32 %993, %995
  %997 = load i32, ptr %8, align 4, !tbaa !14
  %998 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %999 = load i32, ptr %998, align 8, !tbaa !23
  %1000 = mul nsw i32 %997, %999
  %1001 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %1002 = load i32, ptr %1001, align 8, !tbaa !20
  call void @flatten(ptr noundef %991, i32 noundef %996, i32 noundef %1000, i32 noundef %1002, i32 noundef 0)
  %1003 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %1004 = load ptr, ptr %1003, align 8, !tbaa !35
  %1005 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %1006 = load i32, ptr %1005, align 8, !tbaa !19
  %1007 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %1008 = load i32, ptr %1007, align 8, !tbaa !20
  %1009 = mul nsw i32 %1006, %1008
  %1010 = call float @mag_array(ptr noundef %1004, i32 noundef %1009)
  %1011 = fpext float %1010 to double
  %1012 = call double @pow(double noundef %1011, double noundef 2.000000e+00) #8
  %1013 = fptrunc double %1012 to float
  %1014 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %1015 = load ptr, ptr %1014, align 8, !tbaa !36
  store float %1013, ptr %1015, align 4, !tbaa !24
  %1016 = load float, ptr %13, align 4, !tbaa !24
  %1017 = load i32, ptr %18, align 4, !tbaa !14
  %1018 = sitofp i32 %1017 to float
  %1019 = fdiv float %1016, %1018
  %1020 = fpext float %1019 to double
  %1021 = load float, ptr %15, align 4, !tbaa !24
  %1022 = load i32, ptr %19, align 4, !tbaa !14
  %1023 = sitofp i32 %1022 to float
  %1024 = fdiv float %1021, %1023
  %1025 = fpext float %1024 to double
  %1026 = load float, ptr %16, align 4, !tbaa !24
  %1027 = load i32, ptr %18, align 4, !tbaa !14
  %1028 = sitofp i32 %1027 to float
  %1029 = fdiv float %1026, %1028
  %1030 = fpext float %1029 to double
  %1031 = load float, ptr %17, align 4, !tbaa !24
  %1032 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 18
  %1033 = load i32, ptr %1032, align 4, !tbaa !21
  %1034 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 17
  %1035 = load i32, ptr %1034, align 8, !tbaa !22
  %1036 = mul nsw i32 %1033, %1035
  %1037 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %1038 = load i32, ptr %1037, align 8, !tbaa !23
  %1039 = mul nsw i32 %1036, %1038
  %1040 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %1041 = load i32, ptr %1040, align 8, !tbaa !20
  %1042 = mul nsw i32 %1039, %1041
  %1043 = sitofp i32 %1042 to float
  %1044 = fdiv float %1031, %1043
  %1045 = fpext float %1044 to double
  %1046 = load float, ptr %14, align 4, !tbaa !24
  %1047 = load i32, ptr %18, align 4, !tbaa !14
  %1048 = sitofp i32 %1047 to float
  %1049 = fdiv float %1046, %1048
  %1050 = fpext float %1049 to double
  %1051 = load i32, ptr %18, align 4, !tbaa !14
  %1052 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, double noundef %1020, double noundef %1025, double noundef %1030, double noundef %1045, double noundef %1050, i32 noundef %1051)
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  store i32 0, ptr %12, align 4
  br label %1053

1053:                                             ; preds = %989, %233
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #8
  %1054 = load i32, ptr %12, align 4
  switch i32 %1054, label %1056 [
    i32 0, label %1055
    i32 1, label %1055
  ]

1055:                                             ; preds = %1053, %1053
  ret void

1056:                                             ; preds = %1053, %979, %565, %464, %453
  unreachable
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @get_region_box(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @logistic_activate(float noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local float @delta_region_box(<2 x float>, <2 x float>, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, float noundef) #2

declare float @box_iou(<2 x float>, <2 x float>, <2 x float>, <2 x float>) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @logistic_gradient(float noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @delta_region_class(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, float noundef, ptr noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #6

declare void @flatten(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #5

declare void @softmax_tree(ptr noundef, i32 noundef, i32 noundef, float noundef, ptr noundef, ptr noundef) #5

declare void @softmax(ptr noundef, i32 noundef, float noundef, ptr noundef) #5

declare { <2 x float>, <2 x float> } @float_to_box(ptr noundef) #5

declare float @get_hierarchy_probability(ptr noundef, ptr noundef, i32 noundef) #5

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #7

declare float @mag_array(ptr noundef, i32 noundef) #5

declare i32 @printf(ptr noundef, ...) #5

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 216}
!6 = !{!"layer", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !7, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !7, i64 300, !7, i64 304, !11, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !11, i64 328, !11, i64 332, !11, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !10, i64 408, !10, i64 416, !10, i64 424, !10, i64 432, !10, i64 440, !10, i64 448, !10, i64 456, !10, i64 464, !10, i64 472, !10, i64 480, !10, i64 488, !10, i64 496, !10, i64 504, !10, i64 512, !10, i64 520, !10, i64 528, !10, i64 536, !10, i64 544, !10, i64 552, !10, i64 560, !10, i64 568, !10, i64 576, !10, i64 584, !10, i64 592, !10, i64 600, !10, i64 608, !10, i64 616, !10, i64 624, !10, i64 632, !10, i64 640, !10, i64 648, !10, i64 656, !10, i64 664, !10, i64 672, !10, i64 680, !10, i64 688, !10, i64 696, !10, i64 704, !10, i64 712, !10, i64 720, !10, i64 728, !10, i64 736, !10, i64 744, !10, i64 752, !10, i64 760, !10, i64 768, !10, i64 776, !10, i64 784, !10, i64 792, !12, i64 800}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"float", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!6, !7, i64 212}
!14 = !{!7, !7, i64 0}
!15 = !{!6, !10, i64 528}
!16 = !{!17, !10, i64 8}
!17 = !{!"network_state", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !7, i64 32, !7, i64 36, !18, i64 40}
!18 = !{!"network", !10, i64 0, !7, i64 8, !7, i64 12, !10, i64 16, !11, i64 24, !7, i64 28, !11, i64 32, !11, i64 36, !10, i64 40, !7, i64 48, !10, i64 56, !7, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 116, !7, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !7, i64 180, !10, i64 184}
!19 = !{!6, !7, i64 88}
!20 = !{!6, !7, i64 72}
!21 = !{!6, !7, i64 100}
!22 = !{!6, !7, i64 96}
!23 = !{!6, !7, i64 120}
!24 = !{!11, !11, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!6, !10, i64 792}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !26}
!31 = !{!6, !7, i64 208}
!32 = distinct !{!32, !26}
!33 = distinct !{!33, !26}
!34 = !{!17, !7, i64 32}
!35 = !{!6, !10, i64 520}
!36 = !{!6, !10, i64 392}
!37 = !{!17, !10, i64 0}
!38 = !{!6, !7, i64 92}
!39 = !{!40, !11, i64 0}
!40 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12}
!41 = !{!40, !11, i64 4}
!42 = !{!6, !11, i64 292}
!43 = distinct !{!43, !26}
!44 = !{!6, !11, i64 296}
!45 = !{!6, !11, i64 288}
!46 = distinct !{!46, !26}
!47 = !{!6, !10, i64 464}
!48 = distinct !{!48, !26}
!49 = !{!6, !11, i64 308}
!50 = !{!17, !10, i64 56}
!51 = !{!40, !11, i64 8}
!52 = !{!40, !11, i64 12}
!53 = distinct !{!53, !26}
!54 = distinct !{!54, !26}
!55 = distinct !{!55, !26}
!56 = !{i64 0, i64 4, !24, i64 4, i64 4, !24, i64 8, i64 4, !24, i64 12, i64 4, !24}
!57 = !{!6, !7, i64 300}
!58 = distinct !{!58, !26}
!59 = !{!6, !11, i64 284}
!60 = !{!6, !7, i64 224}
!61 = !{!6, !10, i64 376}
!62 = distinct !{!62, !26}
!63 = distinct !{!63, !26}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.layer = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, i32, float, float, float, float, float, float, float, i32, i32, float, i32, i32, i32, i32, float, float, float, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64 }
%struct.network_state = type { ptr, ptr, ptr, ptr, i32, i32, %struct.network }
%struct.network = type { ptr, i32, i32, ptr, float, i32, float, float, ptr, i32, ptr, i32, float, float, float, float, i32, i32, i32, ptr, ptr, i32, i32, i32, float, float, float, i32, i32, i32, i32, i32, i32, float, float, float, float, float, i32, ptr }

@.str.1 = external hidden unnamed_addr constant [80 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
define dso_local void @forward_region_layer(ptr noundef readonly byval(%struct.layer) align 8 %0, ptr nocapture noundef readonly byval(%struct.network_state) align 8 %1) local_unnamed_addr #2 {
  %3 = alloca float, align 4
  %4 = getelementptr inbounds i8, ptr %0, i64 216
  %5 = load i32, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 212
  %7 = load i32, ptr %6, align 4, !tbaa !13
  %8 = add i32 %5, 1
  %9 = add i32 %8, %7
  %10 = getelementptr inbounds i8, ptr %0, i64 528
  %11 = load ptr, ptr %10, align 8, !tbaa !14
  %12 = getelementptr inbounds i8, ptr %1, i64 8
  %13 = load ptr, ptr %12, align 8, !tbaa !15
  %14 = getelementptr inbounds i8, ptr %0, i64 88
  %15 = load i32, ptr %14, align 8, !tbaa !18
  %16 = getelementptr inbounds i8, ptr %0, i64 72
  %17 = load i32, ptr %16, align 8, !tbaa !19
  %18 = mul nsw i32 %17, %15
  %19 = sext i32 %18 to i64
  %20 = shl nsw i64 %19, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %11, ptr align 4 %13, i64 %20, i1 false)
  %21 = load ptr, ptr %10, align 8, !tbaa !14
  %22 = getelementptr inbounds i8, ptr %0, i64 100
  %23 = load i32, ptr %22, align 4, !tbaa !20
  %24 = getelementptr inbounds i8, ptr %0, i64 96
  %25 = load i32, ptr %24, align 8, !tbaa !21
  %26 = mul nsw i32 %25, %23
  %27 = getelementptr inbounds i8, ptr %0, i64 120
  %28 = load i32, ptr %27, align 8, !tbaa !22
  %29 = mul nsw i32 %28, %9
  %30 = load i32, ptr %16, align 8, !tbaa !19
  tail call void @flatten(ptr noundef %21, i32 noundef %26, i32 noundef %29, i32 noundef %30, i32 noundef 1) #8
  %31 = load i32, ptr %16, align 8
  %32 = icmp sgt i32 %31, 0
  br i1 %32, label %.preheader299.preheader, label %._crit_edge303

.preheader299.preheader:                          ; preds = %2
  %.pre = load i32, ptr %24, align 8, !tbaa !21
  %.pre412 = load i32, ptr %22, align 4, !tbaa !20
  %.pre413 = load i32, ptr %27, align 8, !tbaa !22
  br label %.preheader299

.preheader299:                                    ; preds = %.preheader299.preheader, %._crit_edge
  %33 = phi i32 [ %59, %._crit_edge ], [ %31, %.preheader299.preheader ]
  %34 = phi i32 [ %60, %._crit_edge ], [ %.pre413, %.preheader299.preheader ]
  %35 = phi i32 [ %61, %._crit_edge ], [ %.pre412, %.preheader299.preheader ]
  %36 = phi i32 [ %62, %._crit_edge ], [ %.pre, %.preheader299.preheader ]
  %.0186302 = phi i32 [ %63, %._crit_edge ], [ 0, %.preheader299.preheader ]
  %37 = mul nsw i32 %35, %36
  %38 = mul nsw i32 %37, %34
  %39 = icmp sgt i32 %38, 0
  br i1 %39, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader299
  %.pre414 = load ptr, ptr %10, align 8, !tbaa !14
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %40 = phi ptr [ %50, %.lr.ph ], [ %.pre414, %.lr.ph.preheader ]
  %.0184301 = phi i32 [ %52, %.lr.ph ], [ 0, %.lr.ph.preheader ]
  %41 = mul nsw i32 %.0184301, %9
  %42 = load i32, ptr %14, align 8, !tbaa !18
  %43 = mul nsw i32 %42, %.0186302
  %44 = add i32 %41, 4
  %45 = add i32 %44, %43
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds float, ptr %40, i64 %46
  %48 = load float, ptr %47, align 4, !tbaa !23
  %49 = tail call float @logistic_activate(float noundef %48)
  %50 = load ptr, ptr %10, align 8, !tbaa !14
  %51 = getelementptr inbounds float, ptr %50, i64 %46
  store float %49, ptr %51, align 4, !tbaa !23
  %52 = add nuw nsw i32 %.0184301, 1
  %53 = load i32, ptr %24, align 8, !tbaa !21
  %54 = load i32, ptr %22, align 4, !tbaa !20
  %55 = mul nsw i32 %54, %53
  %56 = load i32, ptr %27, align 8, !tbaa !22
  %57 = mul nsw i32 %55, %56
  %58 = icmp slt i32 %52, %57
  br i1 %58, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !24

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.pre415 = load i32, ptr %16, align 8
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader299
  %59 = phi i32 [ %.pre415, %._crit_edge.loopexit ], [ %33, %.preheader299 ]
  %60 = phi i32 [ %56, %._crit_edge.loopexit ], [ %34, %.preheader299 ]
  %61 = phi i32 [ %54, %._crit_edge.loopexit ], [ %35, %.preheader299 ]
  %62 = phi i32 [ %53, %._crit_edge.loopexit ], [ %36, %.preheader299 ]
  %63 = add nuw nsw i32 %.0186302, 1
  %64 = icmp slt i32 %63, %59
  br i1 %64, label %.preheader299, label %._crit_edge303, !llvm.loop !26

._crit_edge303:                                   ; preds = %._crit_edge, %2
  %65 = phi i32 [ %31, %2 ], [ %59, %._crit_edge ]
  %66 = getelementptr inbounds i8, ptr %0, i64 792
  %67 = load ptr, ptr %66, align 8, !tbaa !27
  %.not = icmp eq ptr %67, null
  br i1 %.not, label %98, label %.preheader297

.preheader297:                                    ; preds = %._crit_edge303
  %68 = icmp sgt i32 %65, 0
  br i1 %68, label %.preheader296.preheader, label %.loopexit295

.preheader296.preheader:                          ; preds = %.preheader297
  %.pre416 = load i32, ptr %24, align 8, !tbaa !21
  %.pre417 = load i32, ptr %22, align 4, !tbaa !20
  %.pre418 = load i32, ptr %27, align 8, !tbaa !22
  br label %.preheader296

.preheader296:                                    ; preds = %.preheader296.preheader, %._crit_edge306
  %69 = phi i32 [ %92, %._crit_edge306 ], [ %65, %.preheader296.preheader ]
  %70 = phi i32 [ %93, %._crit_edge306 ], [ %.pre418, %.preheader296.preheader ]
  %71 = phi i32 [ %94, %._crit_edge306 ], [ %.pre417, %.preheader296.preheader ]
  %72 = phi i32 [ %95, %._crit_edge306 ], [ %.pre416, %.preheader296.preheader ]
  %.1187307 = phi i32 [ %96, %._crit_edge306 ], [ 0, %.preheader296.preheader ]
  %73 = mul nsw i32 %71, %72
  %74 = mul nsw i32 %73, %70
  %75 = icmp sgt i32 %74, 0
  br i1 %75, label %.lr.ph305, label %._crit_edge306

.lr.ph305:                                        ; preds = %.preheader296, %.lr.ph305
  %.1304 = phi i32 [ %85, %.lr.ph305 ], [ 0, %.preheader296 ]
  %76 = mul nsw i32 %.1304, %9
  %77 = load i32, ptr %14, align 8, !tbaa !18
  %78 = mul nsw i32 %77, %.1187307
  %79 = add nsw i32 %78, %76
  %80 = load ptr, ptr %10, align 8, !tbaa !14
  %81 = sext i32 %79 to i64
  %82 = getelementptr inbounds float, ptr %80, i64 %81
  %83 = getelementptr inbounds i8, ptr %82, i64 20
  %84 = load ptr, ptr %66, align 8, !tbaa !27
  tail call void @softmax_tree(ptr noundef nonnull %83, i32 noundef 1, i32 noundef 0, float noundef 1.000000e+00, ptr noundef %84, ptr noundef nonnull %83) #8
  %85 = add nuw nsw i32 %.1304, 1
  %86 = load i32, ptr %24, align 8, !tbaa !21
  %87 = load i32, ptr %22, align 4, !tbaa !20
  %88 = mul nsw i32 %87, %86
  %89 = load i32, ptr %27, align 8, !tbaa !22
  %90 = mul nsw i32 %88, %89
  %91 = icmp slt i32 %85, %90
  br i1 %91, label %.lr.ph305, label %._crit_edge306.loopexit, !llvm.loop !28

._crit_edge306.loopexit:                          ; preds = %.lr.ph305
  %.pre419 = load i32, ptr %16, align 8, !tbaa !19
  br label %._crit_edge306

._crit_edge306:                                   ; preds = %._crit_edge306.loopexit, %.preheader296
  %92 = phi i32 [ %.pre419, %._crit_edge306.loopexit ], [ %69, %.preheader296 ]
  %93 = phi i32 [ %89, %._crit_edge306.loopexit ], [ %70, %.preheader296 ]
  %94 = phi i32 [ %87, %._crit_edge306.loopexit ], [ %71, %.preheader296 ]
  %95 = phi i32 [ %86, %._crit_edge306.loopexit ], [ %72, %.preheader296 ]
  %96 = add nuw nsw i32 %.1187307, 1
  %97 = icmp slt i32 %96, %92
  br i1 %97, label %.preheader296, label %.loopexit295, !llvm.loop !29

98:                                               ; preds = %._crit_edge303
  %99 = getelementptr inbounds i8, ptr %0, i64 208
  %100 = load i32, ptr %99, align 8, !tbaa !30
  %.not253 = icmp ne i32 %100, 0
  %101 = icmp sgt i32 %65, 0
  %or.cond391 = and i1 %.not253, %101
  br i1 %or.cond391, label %.preheader293.preheader, label %.loopexit295

.preheader293.preheader:                          ; preds = %98
  %.pre420 = load i32, ptr %24, align 8, !tbaa !21
  %.pre421 = load i32, ptr %22, align 4, !tbaa !20
  %.pre422 = load i32, ptr %27, align 8, !tbaa !22
  br label %.preheader293

.preheader293:                                    ; preds = %.preheader293.preheader, %._crit_edge310
  %102 = phi i32 [ %125, %._crit_edge310 ], [ %65, %.preheader293.preheader ]
  %103 = phi i32 [ %126, %._crit_edge310 ], [ %.pre422, %.preheader293.preheader ]
  %104 = phi i32 [ %127, %._crit_edge310 ], [ %.pre421, %.preheader293.preheader ]
  %105 = phi i32 [ %128, %._crit_edge310 ], [ %.pre420, %.preheader293.preheader ]
  %.2188311 = phi i32 [ %129, %._crit_edge310 ], [ 0, %.preheader293.preheader ]
  %106 = mul nsw i32 %104, %105
  %107 = mul nsw i32 %106, %103
  %108 = icmp sgt i32 %107, 0
  br i1 %108, label %.lr.ph309, label %._crit_edge310

.lr.ph309:                                        ; preds = %.preheader293, %.lr.ph309
  %.2308 = phi i32 [ %118, %.lr.ph309 ], [ 0, %.preheader293 ]
  %109 = mul nsw i32 %.2308, %9
  %110 = load i32, ptr %14, align 8, !tbaa !18
  %111 = mul nsw i32 %110, %.2188311
  %112 = add nsw i32 %111, %109
  %113 = load ptr, ptr %10, align 8, !tbaa !14
  %114 = sext i32 %112 to i64
  %115 = getelementptr inbounds float, ptr %113, i64 %114
  %116 = getelementptr inbounds i8, ptr %115, i64 20
  %117 = load i32, ptr %6, align 4, !tbaa !13
  tail call void @softmax(ptr noundef nonnull %116, i32 noundef %117, float noundef 1.000000e+00, ptr noundef nonnull %116) #8
  %118 = add nuw nsw i32 %.2308, 1
  %119 = load i32, ptr %24, align 8, !tbaa !21
  %120 = load i32, ptr %22, align 4, !tbaa !20
  %121 = mul nsw i32 %120, %119
  %122 = load i32, ptr %27, align 8, !tbaa !22
  %123 = mul nsw i32 %121, %122
  %124 = icmp slt i32 %118, %123
  br i1 %124, label %.lr.ph309, label %._crit_edge310.loopexit, !llvm.loop !31

._crit_edge310.loopexit:                          ; preds = %.lr.ph309
  %.pre423 = load i32, ptr %16, align 8, !tbaa !19
  br label %._crit_edge310

._crit_edge310:                                   ; preds = %._crit_edge310.loopexit, %.preheader293
  %125 = phi i32 [ %.pre423, %._crit_edge310.loopexit ], [ %102, %.preheader293 ]
  %126 = phi i32 [ %122, %._crit_edge310.loopexit ], [ %103, %.preheader293 ]
  %127 = phi i32 [ %120, %._crit_edge310.loopexit ], [ %104, %.preheader293 ]
  %128 = phi i32 [ %119, %._crit_edge310.loopexit ], [ %105, %.preheader293 ]
  %129 = add nuw nsw i32 %.2188311, 1
  %130 = icmp slt i32 %129, %125
  br i1 %130, label %.preheader293, label %.loopexit295, !llvm.loop !32

.loopexit295:                                     ; preds = %._crit_edge306, %._crit_edge310, %.preheader297, %98
  %131 = phi i32 [ %65, %.preheader297 ], [ %65, %98 ], [ %125, %._crit_edge310 ], [ %92, %._crit_edge306 ]
  %132 = getelementptr inbounds i8, ptr %1, i64 32
  %133 = load i32, ptr %132, align 8, !tbaa !33
  %.not254 = icmp eq i32 %133, 0
  br i1 %.not254, label %495, label %134

134:                                              ; preds = %.loopexit295
  %135 = getelementptr inbounds i8, ptr %0, i64 520
  %136 = load ptr, ptr %135, align 8, !tbaa !34
  %137 = load i32, ptr %14, align 8, !tbaa !18
  %138 = mul nsw i32 %131, %137
  %139 = sext i32 %138 to i64
  %140 = shl nsw i64 %139, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %136, i8 0, i64 %140, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  store float 0.000000e+00, ptr %3, align 4, !tbaa !23
  %141 = getelementptr inbounds i8, ptr %0, i64 392
  %142 = load ptr, ptr %141, align 8, !tbaa !35
  store float 0.000000e+00, ptr %142, align 4, !tbaa !23
  %143 = load i32, ptr %16, align 8, !tbaa !19
  %144 = icmp sgt i32 %143, 0
  br i1 %144, label %.lr.ph381, label %._crit_edge382

.lr.ph381:                                        ; preds = %134
  %145 = load ptr, ptr %1, align 8
  %146 = getelementptr inbounds i8, ptr %0, i64 92
  %invariant.gep = getelementptr i8, ptr %145, i64 16
  %147 = getelementptr inbounds i8, ptr %0, i64 292
  %148 = getelementptr inbounds i8, ptr %0, i64 296
  %149 = getelementptr inbounds i8, ptr %0, i64 288
  %150 = getelementptr inbounds i8, ptr %0, i64 464
  %151 = getelementptr inbounds i8, ptr %0, i64 308
  %152 = getelementptr inbounds i8, ptr %1, i64 56
  %153 = load ptr, ptr %152, align 8
  %154 = getelementptr inbounds i8, ptr %0, i64 300
  %155 = getelementptr inbounds i8, ptr %0, i64 284
  %156 = getelementptr inbounds i8, ptr %0, i64 224
  %157 = getelementptr inbounds i8, ptr %0, i64 376
  br label %158

158:                                              ; preds = %.lr.ph381, %.loopexit
  %.3189376 = phi i32 [ 0, %.lr.ph381 ], [ %457, %.loopexit ]
  %.0206373 = phi float [ 0.000000e+00, %.lr.ph381 ], [ %.3209, %.loopexit ]
  %.0210372 = phi float [ 0.000000e+00, %.lr.ph381 ], [ %.4214, %.loopexit ]
  %.0215371 = phi float [ 0.000000e+00, %.lr.ph381 ], [ %.3218, %.loopexit ]
  %.0223370 = phi float [ 0.000000e+00, %.lr.ph381 ], [ %.4227, %.loopexit ]
  %.0228369 = phi i32 [ 0, %.lr.ph381 ], [ %.3231, %.loopexit ]
  %.0232368 = phi i32 [ 0, %.lr.ph381 ], [ %.8, %.loopexit ]
  %159 = load ptr, ptr %66, align 8, !tbaa !27
  %.not255 = icmp eq ptr %159, null
  br i1 %.not255, label %.thread, label %.preheader292

160:                                              ; preds = %170
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 30
  br i1 %exitcond.not, label %.thread, label %.preheader292, !llvm.loop !36

.preheader292:                                    ; preds = %158, %160
  %indvars.iv = phi i64 [ %indvars.iv.next, %160 ], [ 0, %158 ]
  %161 = mul nuw nsw i64 %indvars.iv, 5
  %162 = getelementptr inbounds float, ptr %145, i64 %161
  %163 = load i32, ptr %146, align 4, !tbaa !37
  %164 = mul nsw i32 %163, %.3189376
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds float, ptr %162, i64 %165
  %167 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %166) #8
  %168 = extractvalue { <2 x float>, <2 x float> } %167, 0
  %.sroa.068.0.vec.extract = extractelement <2 x float> %168, i64 0
  %169 = fcmp une float %.sroa.068.0.vec.extract, 0.000000e+00
  br i1 %169, label %170, label %.thread

170:                                              ; preds = %.preheader292
  %171 = fcmp ogt float %.sroa.068.0.vec.extract, 1.000000e+05
  %.sroa.068.4.vec.extract = extractelement <2 x float> %168, i64 1
  %172 = fcmp ogt float %.sroa.068.4.vec.extract, 1.000000e+05
  %or.cond = select i1 %171, i1 %172, i1 false
  br i1 %or.cond, label %.preheader291, label %160

.preheader291:                                    ; preds = %170
  %173 = trunc nuw nsw i64 %161 to i32
  %174 = load i32, ptr %146, align 4, !tbaa !37
  %175 = mul nsw i32 %174, %.3189376
  %176 = add nsw i32 %175, %173
  %177 = sext i32 %176 to i64
  %gep = getelementptr float, ptr %invariant.gep, i64 %177
  %178 = load float, ptr %gep, align 4, !tbaa !23
  %179 = fptosi float %178 to i32
  %180 = load i32, ptr %27, align 8, !tbaa !22
  %181 = load i32, ptr %22, align 4, !tbaa !20
  %182 = mul nsw i32 %181, %180
  %183 = load i32, ptr %24, align 8, !tbaa !21
  %184 = mul nsw i32 %182, %183
  %185 = icmp sgt i32 %184, 0
  br i1 %185, label %.lr.ph317, label %._crit_edge318

.lr.ph317:                                        ; preds = %.preheader291, %.lr.ph317
  %.0199316 = phi i32 [ %210, %.lr.ph317 ], [ 0, %.preheader291 ]
  %.0241315 = phi float [ %.1242, %.lr.ph317 ], [ 0.000000e+00, %.preheader291 ]
  %.0243314 = phi i32 [ %.1244, %.lr.ph317 ], [ 0, %.preheader291 ]
  %186 = mul nsw i32 %.0199316, %9
  %187 = load i32, ptr %14, align 8, !tbaa !18
  %188 = mul nsw i32 %187, %.3189376
  %189 = add nsw i32 %188, %186
  %190 = load ptr, ptr %10, align 8, !tbaa !14
  %191 = add nsw i32 %189, 4
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds float, ptr %190, i64 %192
  %194 = load float, ptr %193, align 4, !tbaa !23
  %195 = load float, ptr %147, align 4, !tbaa !38
  %196 = fsub float 0.000000e+00, %194
  %197 = call float @logistic_gradient(float noundef %194)
  %198 = fmul float %196, %197
  %199 = fmul float %195, %198
  %200 = load ptr, ptr %135, align 8, !tbaa !34
  %201 = getelementptr inbounds float, ptr %200, i64 %192
  store float %199, ptr %201, align 4, !tbaa !23
  %202 = load ptr, ptr %10, align 8, !tbaa !14
  %203 = sext i32 %189 to i64
  %204 = getelementptr float, ptr %202, i64 %203
  %205 = getelementptr i8, ptr %204, i64 20
  %206 = load ptr, ptr %66, align 8, !tbaa !27
  %207 = call float @get_hierarchy_probability(ptr noundef %205, ptr noundef %206, i32 noundef %179) #8
  %208 = fmul float %194, %207
  %209 = fcmp ogt float %208, %.0241315
  %.1244 = select i1 %209, i32 %.0199316, i32 %.0243314
  %.1242 = select i1 %209, float %208, float %.0241315
  %210 = add nuw nsw i32 %.0199316, 1
  %211 = load i32, ptr %27, align 8, !tbaa !22
  %212 = load i32, ptr %22, align 4, !tbaa !20
  %213 = mul nsw i32 %212, %211
  %214 = load i32, ptr %24, align 8, !tbaa !21
  %215 = mul nsw i32 %213, %214
  %216 = icmp slt i32 %210, %215
  br i1 %216, label %.lr.ph317, label %._crit_edge318, !llvm.loop !39

._crit_edge318:                                   ; preds = %.lr.ph317, %.preheader291
  %.0243.lcssa = phi i32 [ 0, %.preheader291 ], [ %.1244, %.lr.ph317 ]
  %217 = mul nsw i32 %.0243.lcssa, %9
  %218 = load i32, ptr %14, align 8, !tbaa !18
  %219 = mul nsw i32 %218, %.3189376
  %220 = add nsw i32 %219, %217
  %221 = add nsw i32 %220, 5
  %222 = load ptr, ptr %10, align 8, !tbaa !14
  %223 = load ptr, ptr %135, align 8, !tbaa !34
  %224 = load i32, ptr %6, align 4, !tbaa !13
  %225 = load ptr, ptr %66, align 8, !tbaa !27
  %226 = load float, ptr %148, align 8, !tbaa !40
  call void @delta_region_class(ptr noundef %222, ptr noundef %223, i32 noundef %221, i32 noundef %179, i32 noundef %224, ptr noundef %225, float noundef %226, ptr noundef nonnull %3)
  %227 = load ptr, ptr %10, align 8, !tbaa !14
  %228 = add nsw i32 %220, 4
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds float, ptr %227, i64 %229
  %231 = load float, ptr %230, align 4, !tbaa !23
  %232 = fpext float %231 to double
  %233 = fcmp olt double %232, 3.000000e-01
  br i1 %233, label %234, label %.thread.thread

234:                                              ; preds = %._crit_edge318
  %235 = load float, ptr %149, align 8, !tbaa !41
  %236 = fpext float %235 to double
  %237 = fsub double 3.000000e-01, %232
  %238 = call float @logistic_gradient(float noundef %231)
  %239 = fpext float %238 to double
  %240 = fmul double %237, %239
  %241 = fmul double %240, %236
  %242 = fptrunc double %241 to float
  br label %.thread.thread

.thread.thread:                                   ; preds = %._crit_edge318, %234
  %.sink = phi float [ %242, %234 ], [ 0.000000e+00, %._crit_edge318 ]
  %243 = load ptr, ptr %135, align 8, !tbaa !34
  %244 = getelementptr inbounds float, ptr %243, i64 %229
  store float %.sink, ptr %244, align 4, !tbaa !23
  %245 = add nsw i32 %.0232368, 1
  br label %.loopexit

.thread:                                          ; preds = %160, %.preheader292, %158
  %246 = load i32, ptr %24, align 8, !tbaa !21
  %247 = icmp sgt i32 %246, 0
  %248 = load i32, ptr %22, align 4
  %249 = icmp sgt i32 %248, 0
  %or.cond448 = select i1 %247, i1 %249, i1 false
  br i1 %or.cond448, label %.preheader289, label %.preheader290

.preheader290:                                    ; preds = %._crit_edge334, %.thread
  %.1224.lcssa = phi float [ %.0223370, %.thread ], [ %.2225.lcssa, %._crit_edge334 ]
  %250 = add i32 %.0232368, 30
  %251 = add i32 %.0228369, 30
  br label %347

.preheader289:                                    ; preds = %.thread, %._crit_edge334
  %252 = phi i32 [ %342, %._crit_edge334 ], [ %246, %.thread ]
  %253 = phi i32 [ %343, %._crit_edge334 ], [ %248, %.thread ]
  %254 = phi i32 [ %344, %._crit_edge334 ], [ %248, %.thread ]
  %.0185343 = phi i32 [ %345, %._crit_edge334 ], [ 0, %.thread ]
  %.1224340 = phi float [ %.2225.lcssa, %._crit_edge334 ], [ %.0223370, %.thread ]
  %255 = icmp sgt i32 %254, 0
  br i1 %255, label %.preheader.lr.ph, label %._crit_edge334

.preheader.lr.ph:                                 ; preds = %.preheader289
  %256 = uitofp nneg i32 %.0185343 to double
  %257 = fadd double %256, 5.000000e-01
  %258 = load i32, ptr %27, align 8, !tbaa !22
  %259 = icmp sgt i32 %258, 0
  br i1 %259, label %.preheader.preheader, label %._crit_edge334

.preheader.preheader:                             ; preds = %.preheader.lr.ph
  %260 = insertelement <2 x double> poison, double %257, i64 0
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge326
  %261 = phi i32 [ %338, %._crit_edge326 ], [ %253, %.preheader.preheader ]
  %262 = phi i32 [ %339, %._crit_edge326 ], [ %258, %.preheader.preheader ]
  %.3333 = phi i32 [ %340, %._crit_edge326 ], [ 0, %.preheader.preheader ]
  %.2225330 = phi float [ %.3226.lcssa, %._crit_edge326 ], [ %.1224340, %.preheader.preheader ]
  %263 = icmp sgt i32 %262, 0
  br i1 %263, label %.lr.ph325, label %._crit_edge326

.lr.ph325:                                        ; preds = %.preheader
  %264 = uitofp nneg i32 %.3333 to double
  %265 = fadd double %264, 5.000000e-01
  %266 = insertelement <2 x double> %260, double %265, i64 1
  br label %267

267:                                              ; preds = %.lr.ph325, %334
  %indvars.iv402 = phi i64 [ 0, %.lr.ph325 ], [ %indvars.iv.next403, %334 ]
  %268 = phi i32 [ %262, %.lr.ph325 ], [ %335, %334 ]
  %.3226321 = phi float [ %.2225330, %.lr.ph325 ], [ %304, %334 ]
  %269 = load i32, ptr %22, align 4, !tbaa !20
  %270 = mul nsw i32 %269, %.0185343
  %271 = add i32 %270, %.3333
  %272 = mul i32 %271, %268
  %273 = trunc nuw nsw i64 %indvars.iv402 to i32
  %274 = add nsw i32 %272, %273
  %275 = mul nsw i32 %274, %9
  %276 = load i32, ptr %14, align 8, !tbaa !18
  %277 = mul nsw i32 %276, %.3189376
  %278 = add nsw i32 %275, %277
  %279 = load ptr, ptr %10, align 8, !tbaa !14
  %280 = load ptr, ptr %150, align 8, !tbaa !42
  %281 = load i32, ptr %24, align 8, !tbaa !21
  %282 = call { <2 x float>, <2 x float> } @get_region_box(ptr noundef %279, ptr noundef %280, i32 noundef %273, i32 noundef %278, i32 noundef %.3333, i32 noundef %.0185343, i32 noundef %269, i32 noundef %281)
  %283 = extractvalue { <2 x float>, <2 x float> } %282, 0
  %284 = extractvalue { <2 x float>, <2 x float> } %282, 1
  br label %285

285:                                              ; preds = %267, %294
  %indvars.iv398 = phi i64 [ 0, %267 ], [ %indvars.iv.next399, %294 ]
  %.0219319 = phi float [ 0.000000e+00, %267 ], [ %.1220, %294 ]
  %.idx = mul i64 %indvars.iv398, 20
  %286 = getelementptr inbounds i8, ptr %145, i64 %.idx
  %287 = load i32, ptr %146, align 4, !tbaa !37
  %288 = mul nsw i32 %287, %.3189376
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds float, ptr %286, i64 %289
  %291 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %290) #8
  %292 = extractvalue { <2 x float>, <2 x float> } %291, 0
  %.sroa.038.0.vec.extract = extractelement <2 x float> %292, i64 0
  %293 = fcmp une float %.sroa.038.0.vec.extract, 0.000000e+00
  br i1 %293, label %294, label %298

294:                                              ; preds = %285
  %295 = extractvalue { <2 x float>, <2 x float> } %291, 1
  %296 = call float @box_iou(<2 x float> %283, <2 x float> %284, <2 x float> %292, <2 x float> %295) #8
  %297 = fcmp ogt float %296, %.0219319
  %.1220 = select i1 %297, float %296, float %.0219319
  %indvars.iv.next399 = add nuw nsw i64 %indvars.iv398, 1
  %exitcond401.not = icmp eq i64 %indvars.iv.next399, 30
  br i1 %exitcond401.not, label %298, label %285, !llvm.loop !43

298:                                              ; preds = %285, %294
  %.0219.lcssa = phi float [ %.0219319, %285 ], [ %.1220, %294 ]
  %299 = load ptr, ptr %10, align 8, !tbaa !14
  %300 = add nsw i32 %278, 4
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds float, ptr %299, i64 %301
  %303 = load float, ptr %302, align 4, !tbaa !23
  %304 = fadd float %.3226321, %303
  %305 = load float, ptr %147, align 4, !tbaa !38
  %306 = fsub float 0.000000e+00, %303
  %307 = call float @logistic_gradient(float noundef %303)
  %308 = fmul float %306, %307
  %309 = fmul float %305, %308
  %310 = load ptr, ptr %135, align 8, !tbaa !34
  %311 = getelementptr inbounds float, ptr %310, i64 %301
  store float %309, ptr %311, align 4, !tbaa !23
  %312 = load float, ptr %151, align 4, !tbaa !44
  %313 = fcmp ogt float %.0219.lcssa, %312
  br i1 %313, label %314, label %315

314:                                              ; preds = %298
  store float 0.000000e+00, ptr %311, align 4, !tbaa !23
  br label %315

315:                                              ; preds = %314, %298
  %316 = load i32, ptr %153, align 4, !tbaa !45
  %317 = icmp slt i32 %316, 12800
  br i1 %317, label %318, label %334

318:                                              ; preds = %315
  %319 = load ptr, ptr %150, align 8, !tbaa !42
  %.idx466 = shl nsw i64 %indvars.iv402, 3
  %320 = getelementptr inbounds i8, ptr %319, i64 %.idx466
  %321 = load <2 x i32>, ptr %24, align 8, !tbaa !45
  %322 = sitofp <2 x i32> %321 to <2 x double>
  %323 = fdiv <2 x double> %266, %322
  %324 = fptrunc <2 x double> %323 to <2 x float>
  %325 = shufflevector <2 x float> %324, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %326 = load <2 x float>, ptr %320, align 4, !tbaa !23
  %327 = sitofp <2 x i32> %321 to <2 x float>
  %328 = shufflevector <2 x float> %327, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %329 = fdiv <2 x float> %326, %328
  %330 = load ptr, ptr %10, align 8, !tbaa !14
  %331 = extractelement <2 x i32> %321, i64 0
  %332 = extractelement <2 x i32> %321, i64 1
  %333 = call float @delta_region_box(<2 x float> %325, <2 x float> %329, ptr noundef %330, ptr noundef %319, i32 noundef %273, i32 noundef %278, i32 noundef %.3333, i32 noundef %.0185343, i32 noundef %332, i32 noundef %331, ptr noundef nonnull %310, float noundef 0x3F847AE140000000)
  br label %334

334:                                              ; preds = %318, %315
  %indvars.iv.next403 = add nuw nsw i64 %indvars.iv402, 1
  %335 = load i32, ptr %27, align 8, !tbaa !22
  %336 = sext i32 %335 to i64
  %337 = icmp slt i64 %indvars.iv.next403, %336
  br i1 %337, label %267, label %._crit_edge326.loopexit, !llvm.loop !46

._crit_edge326.loopexit:                          ; preds = %334
  %.pre424 = load i32, ptr %22, align 4, !tbaa !20
  br label %._crit_edge326

._crit_edge326:                                   ; preds = %._crit_edge326.loopexit, %.preheader
  %338 = phi i32 [ %261, %.preheader ], [ %.pre424, %._crit_edge326.loopexit ]
  %339 = phi i32 [ %262, %.preheader ], [ %335, %._crit_edge326.loopexit ]
  %.3226.lcssa = phi float [ %.2225330, %.preheader ], [ %304, %._crit_edge326.loopexit ]
  %340 = add nuw nsw i32 %.3333, 1
  %341 = icmp slt i32 %340, %338
  br i1 %341, label %.preheader, label %._crit_edge334.loopexit, !llvm.loop !47

._crit_edge334.loopexit:                          ; preds = %._crit_edge326
  %.pre425 = load i32, ptr %24, align 8, !tbaa !21
  br label %._crit_edge334

._crit_edge334:                                   ; preds = %.preheader.lr.ph, %._crit_edge334.loopexit, %.preheader289
  %342 = phi i32 [ %252, %.preheader289 ], [ %.pre425, %._crit_edge334.loopexit ], [ %252, %.preheader.lr.ph ]
  %343 = phi i32 [ %253, %.preheader289 ], [ %338, %._crit_edge334.loopexit ], [ %253, %.preheader.lr.ph ]
  %344 = phi i32 [ %254, %.preheader289 ], [ %338, %._crit_edge334.loopexit ], [ %254, %.preheader.lr.ph ]
  %.2225.lcssa = phi float [ %.1224340, %.preheader289 ], [ %.3226.lcssa, %._crit_edge334.loopexit ], [ %.1224340, %.preheader.lr.ph ]
  %345 = add nuw nsw i32 %.0185343, 1
  %346 = icmp slt i32 %345, %342
  br i1 %346, label %.preheader289, label %.preheader290, !llvm.loop !49

347:                                              ; preds = %.preheader290, %449
  %indvars.iv408 = phi i64 [ 0, %.preheader290 ], [ %indvars.iv.next409, %449 ]
  %.1207364 = phi float [ %.0206373, %.preheader290 ], [ %409, %449 ]
  %.1211363 = phi float [ %.0210372, %.preheader290 ], [ %.2212, %449 ]
  %.1216362 = phi float [ %.0215371, %.preheader290 ], [ %415, %449 ]
  %.1229361 = phi i32 [ %.0228369, %.preheader290 ], [ %455, %449 ]
  %.6360 = phi i32 [ %.0232368, %.preheader290 ], [ %456, %449 ]
  %348 = mul nuw nsw i64 %indvars.iv408, 5
  %349 = getelementptr inbounds float, ptr %145, i64 %348
  %350 = load i32, ptr %146, align 4, !tbaa !37
  %351 = mul nsw i32 %350, %.3189376
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds float, ptr %349, i64 %352
  %354 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %353) #8
  %355 = extractvalue { <2 x float>, <2 x float> } %354, 0
  %356 = extractvalue { <2 x float>, <2 x float> } %354, 1
  %.sroa.026.0.vec.extract = extractelement <2 x float> %355, i64 0
  %357 = fcmp une float %.sroa.026.0.vec.extract, 0.000000e+00
  br i1 %357, label %358, label %.loopexit

358:                                              ; preds = %347
  %359 = load i32, ptr %22, align 4, !tbaa !20
  %360 = sitofp i32 %359 to float
  %361 = fmul float %.sroa.026.0.vec.extract, %360
  %362 = fptosi float %361 to i32
  %.sroa.026.4.vec.extract = extractelement <2 x float> %355, i64 1
  %363 = load i32, ptr %24, align 8, !tbaa !21
  %364 = sitofp i32 %363 to float
  %365 = fmul float %.sroa.026.4.vec.extract, %364
  %366 = fptosi float %365 to i32
  %367 = load i32, ptr %27, align 8, !tbaa !22
  %368 = icmp sgt i32 %367, 0
  br i1 %368, label %.lr.ph356, label %._crit_edge357

.lr.ph356:                                        ; preds = %358, %394
  %indvars.iv405 = phi i64 [ %indvars.iv.next406, %394 ], [ 0, %358 ]
  %369 = phi i32 [ %397, %394 ], [ %367, %358 ]
  %.0193354 = phi i32 [ %.1194, %394 ], [ 0, %358 ]
  %.0195353 = phi i32 [ %.1196, %394 ], [ 0, %358 ]
  %.0197352 = phi float [ %.1198, %394 ], [ 0.000000e+00, %358 ]
  %370 = load i32, ptr %22, align 4, !tbaa !20
  %371 = mul nsw i32 %370, %366
  %372 = add i32 %371, %362
  %373 = mul i32 %372, %369
  %374 = trunc nuw nsw i64 %indvars.iv405 to i32
  %375 = add nsw i32 %373, %374
  %376 = mul nsw i32 %375, %9
  %377 = load i32, ptr %14, align 8, !tbaa !18
  %378 = mul nsw i32 %377, %.3189376
  %379 = add nsw i32 %376, %378
  %380 = load ptr, ptr %10, align 8, !tbaa !14
  %381 = load ptr, ptr %150, align 8, !tbaa !42
  %382 = load i32, ptr %24, align 8, !tbaa !21
  %383 = call { <2 x float>, <2 x float> } @get_region_box(ptr noundef %380, ptr noundef %381, i32 noundef %374, i32 noundef %379, i32 noundef %362, i32 noundef %366, i32 noundef %370, i32 noundef %382)
  %384 = extractvalue { <2 x float>, <2 x float> } %383, 1
  %385 = load i32, ptr %154, align 4, !tbaa !50
  %.not259 = icmp eq i32 %385, 0
  br i1 %.not259, label %394, label %386

386:                                              ; preds = %.lr.ph356
  %387 = load ptr, ptr %150, align 8, !tbaa !42
  %.idx467 = shl nsw i64 %indvars.iv405, 3
  %388 = getelementptr inbounds i8, ptr %387, i64 %.idx467
  %389 = load <2 x float>, ptr %388, align 4, !tbaa !23
  %390 = load <2 x i32>, ptr %24, align 8, !tbaa !45
  %391 = sitofp <2 x i32> %390 to <2 x float>
  %392 = shufflevector <2 x float> %391, <2 x float> poison, <2 x i32> <i32 1, i32 0>
  %393 = fdiv <2 x float> %389, %392
  br label %394

394:                                              ; preds = %386, %.lr.ph356
  %.sroa.6.0 = phi <2 x float> [ %393, %386 ], [ %384, %.lr.ph356 ]
  %395 = call float @box_iou(<2 x float> zeroinitializer, <2 x float> %.sroa.6.0, <2 x float> zeroinitializer, <2 x float> %356) #8
  %396 = fcmp ogt float %395, %.0197352
  %.1198 = select i1 %396, float %395, float %.0197352
  %.1196 = select i1 %396, i32 %379, i32 %.0195353
  %.1194 = select i1 %396, i32 %374, i32 %.0193354
  %indvars.iv.next406 = add nuw nsw i64 %indvars.iv405, 1
  %397 = load i32, ptr %27, align 8, !tbaa !22
  %398 = sext i32 %397 to i64
  %399 = icmp slt i64 %indvars.iv.next406, %398
  br i1 %399, label %.lr.ph356, label %._crit_edge357.loopexit, !llvm.loop !51

._crit_edge357.loopexit:                          ; preds = %394
  %.pre426 = load i32, ptr %22, align 4, !tbaa !20
  %.pre427 = load i32, ptr %24, align 8, !tbaa !21
  br label %._crit_edge357

._crit_edge357:                                   ; preds = %._crit_edge357.loopexit, %358
  %400 = phi i32 [ %363, %358 ], [ %.pre427, %._crit_edge357.loopexit ]
  %401 = phi i32 [ %359, %358 ], [ %.pre426, %._crit_edge357.loopexit ]
  %.0195.lcssa = phi i32 [ 0, %358 ], [ %.1196, %._crit_edge357.loopexit ]
  %.0193.lcssa = phi i32 [ 0, %358 ], [ %.1194, %._crit_edge357.loopexit ]
  %402 = load ptr, ptr %10, align 8, !tbaa !14
  %403 = load ptr, ptr %150, align 8, !tbaa !42
  %404 = load ptr, ptr %135, align 8, !tbaa !34
  %405 = load float, ptr %155, align 4, !tbaa !52
  %406 = call float @delta_region_box(<2 x float> %355, <2 x float> %356, ptr noundef %402, ptr noundef %403, i32 noundef %.0193.lcssa, i32 noundef %.0195.lcssa, i32 noundef %362, i32 noundef %366, i32 noundef %401, i32 noundef %400, ptr noundef %404, float noundef %405)
  %407 = fcmp ogt float %406, 5.000000e-01
  %408 = fadd float %.1211363, 1.000000e+00
  %.2212 = select i1 %407, float %408, float %.1211363
  %409 = fadd float %.1207364, %406
  %410 = load ptr, ptr %10, align 8, !tbaa !14
  %411 = add nsw i32 %.0195.lcssa, 4
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds float, ptr %410, i64 %412
  %414 = load float, ptr %413, align 4, !tbaa !23
  %415 = fadd float %.1216362, %414
  %416 = load float, ptr %149, align 8, !tbaa !41
  %417 = fsub float 1.000000e+00, %414
  %418 = fmul float %416, %417
  %419 = call float @logistic_gradient(float noundef %414)
  %420 = fmul float %418, %419
  %421 = load ptr, ptr %135, align 8, !tbaa !34
  %422 = getelementptr inbounds float, ptr %421, i64 %412
  store float %420, ptr %422, align 4, !tbaa !23
  %423 = load i32, ptr %156, align 8, !tbaa !53
  %.not257 = icmp eq i32 %423, 0
  br i1 %.not257, label %435, label %424

424:                                              ; preds = %._crit_edge357
  %425 = load float, ptr %149, align 8, !tbaa !41
  %426 = load ptr, ptr %10, align 8, !tbaa !14
  %427 = getelementptr inbounds float, ptr %426, i64 %412
  %428 = load float, ptr %427, align 4, !tbaa !23
  %429 = fsub float %406, %428
  %430 = fmul float %425, %429
  %431 = call float @logistic_gradient(float noundef %428)
  %432 = fmul float %431, %430
  %433 = load ptr, ptr %135, align 8, !tbaa !34
  %434 = getelementptr inbounds float, ptr %433, i64 %412
  store float %432, ptr %434, align 4, !tbaa !23
  br label %435

435:                                              ; preds = %424, %._crit_edge357
  %436 = phi ptr [ %433, %424 ], [ %421, %._crit_edge357 ]
  %437 = load i32, ptr %146, align 4, !tbaa !37
  %438 = mul nsw i32 %437, %.3189376
  %439 = trunc nuw nsw i64 %348 to i32
  %440 = add nsw i32 %438, %439
  %441 = sext i32 %440 to i64
  %gep367 = getelementptr float, ptr %invariant.gep, i64 %441
  %442 = load float, ptr %gep367, align 4, !tbaa !23
  %443 = fptosi float %442 to i32
  %444 = load ptr, ptr %157, align 8, !tbaa !54
  %.not258 = icmp eq ptr %444, null
  br i1 %.not258, label %449, label %445

445:                                              ; preds = %435
  %446 = sext i32 %443 to i64
  %447 = getelementptr inbounds i32, ptr %444, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !45
  br label %449

449:                                              ; preds = %435, %445
  %.0 = phi i32 [ %448, %445 ], [ %443, %435 ]
  %450 = load ptr, ptr %10, align 8, !tbaa !14
  %451 = add nsw i32 %.0195.lcssa, 5
  %452 = load i32, ptr %6, align 4, !tbaa !13
  %453 = load ptr, ptr %66, align 8, !tbaa !27
  %454 = load float, ptr %148, align 8, !tbaa !40
  call void @delta_region_class(ptr noundef %450, ptr noundef nonnull %436, i32 noundef %451, i32 noundef %.0, i32 noundef %452, ptr noundef %453, float noundef %454, ptr noundef nonnull %3)
  %455 = add nsw i32 %.1229361, 1
  %456 = add nsw i32 %.6360, 1
  %indvars.iv.next409 = add nuw nsw i64 %indvars.iv408, 1
  %exitcond411.not = icmp eq i64 %indvars.iv.next409, 30
  br i1 %exitcond411.not, label %.loopexit, label %347, !llvm.loop !55

.loopexit:                                        ; preds = %347, %449, %.thread.thread
  %.8 = phi i32 [ %245, %.thread.thread ], [ %250, %449 ], [ %.6360, %347 ]
  %.3231 = phi i32 [ %.0228369, %.thread.thread ], [ %251, %449 ], [ %.1229361, %347 ]
  %.4227 = phi float [ %.0223370, %.thread.thread ], [ %.1224.lcssa, %449 ], [ %.1224.lcssa, %347 ]
  %.3218 = phi float [ %.0215371, %.thread.thread ], [ %415, %449 ], [ %.1216362, %347 ]
  %.4214 = phi float [ %.0210372, %.thread.thread ], [ %.2212, %449 ], [ %.1211363, %347 ]
  %.3209 = phi float [ %.0206373, %.thread.thread ], [ %409, %449 ], [ %.1207364, %347 ]
  %457 = add nuw nsw i32 %.3189376, 1
  %458 = load i32, ptr %16, align 8, !tbaa !19
  %459 = icmp slt i32 %457, %458
  br i1 %459, label %158, label %._crit_edge382.loopexit, !llvm.loop !56

._crit_edge382.loopexit:                          ; preds = %.loopexit
  %460 = sitofp i32 %.8 to float
  br label %._crit_edge382

._crit_edge382:                                   ; preds = %._crit_edge382.loopexit, %134
  %.0232.lcssa = phi float [ 0.000000e+00, %134 ], [ %460, %._crit_edge382.loopexit ]
  %.0228.lcssa = phi i32 [ 0, %134 ], [ %.3231, %._crit_edge382.loopexit ]
  %.0223.lcssa = phi float [ 0.000000e+00, %134 ], [ %.4227, %._crit_edge382.loopexit ]
  %.0215.lcssa = phi float [ 0.000000e+00, %134 ], [ %.3218, %._crit_edge382.loopexit ]
  %.0210.lcssa = phi float [ 0.000000e+00, %134 ], [ %.4214, %._crit_edge382.loopexit ]
  %.0206.lcssa = phi float [ 0.000000e+00, %134 ], [ %.3209, %._crit_edge382.loopexit ]
  %.lcssa300 = phi i32 [ %143, %134 ], [ %458, %._crit_edge382.loopexit ]
  %461 = load ptr, ptr %135, align 8, !tbaa !34
  %462 = load i32, ptr %22, align 4, !tbaa !20
  %463 = load i32, ptr %24, align 8, !tbaa !21
  %464 = mul nsw i32 %463, %462
  %465 = load i32, ptr %27, align 8, !tbaa !22
  %466 = mul nsw i32 %465, %9
  call void @flatten(ptr noundef %461, i32 noundef %464, i32 noundef %466, i32 noundef %.lcssa300, i32 noundef 0) #8
  %467 = load ptr, ptr %135, align 8, !tbaa !34
  %468 = load i32, ptr %14, align 8, !tbaa !18
  %469 = load i32, ptr %16, align 8, !tbaa !19
  %470 = mul nsw i32 %469, %468
  %471 = call float @mag_array(ptr noundef %467, i32 noundef %470) #8
  %472 = fmul float %471, %471
  %473 = load ptr, ptr %141, align 8, !tbaa !35
  store float %472, ptr %473, align 4, !tbaa !23
  %474 = sitofp i32 %.0228.lcssa to float
  %475 = fdiv float %.0206.lcssa, %474
  %476 = fpext float %475 to double
  %477 = load float, ptr %3, align 4, !tbaa !23
  %478 = fdiv float %477, %.0232.lcssa
  %479 = fpext float %478 to double
  %480 = fdiv float %.0215.lcssa, %474
  %481 = fpext float %480 to double
  %482 = load i32, ptr %22, align 4, !tbaa !20
  %483 = load i32, ptr %24, align 8, !tbaa !21
  %484 = mul nsw i32 %483, %482
  %485 = load i32, ptr %27, align 8, !tbaa !22
  %486 = mul nsw i32 %484, %485
  %487 = load i32, ptr %16, align 8, !tbaa !19
  %488 = mul nsw i32 %486, %487
  %489 = sitofp i32 %488 to float
  %490 = fdiv float %.0223.lcssa, %489
  %491 = fpext float %490 to double
  %492 = fdiv float %.0210.lcssa, %474
  %493 = fpext float %492 to double
  %494 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, double noundef %476, double noundef %479, double noundef %481, double noundef %491, double noundef %493, i32 noundef %.0228.lcssa)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  br label %495

495:                                              ; preds = %.loopexit295, %._crit_edge382
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @get_region_box(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @logistic_activate(float noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local float @delta_region_box(<2 x float>, <2 x float>, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, float noundef) local_unnamed_addr #2

declare float @box_iou(<2 x float>, <2 x float>, <2 x float>, <2 x float>) local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @logistic_gradient(float noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local void @delta_region_class(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, float noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #6

declare void @flatten(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #5

declare void @softmax_tree(ptr noundef, i32 noundef, i32 noundef, float noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare void @softmax(ptr noundef, i32 noundef, float noundef, ptr noundef) local_unnamed_addr #5

declare { <2 x float>, <2 x float> } @float_to_box(ptr noundef) local_unnamed_addr #5

declare float @get_hierarchy_probability(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

declare float @mag_array(ptr noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #7

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 216}
!6 = !{!"layer", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !7, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !7, i64 300, !7, i64 304, !11, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !11, i64 328, !11, i64 332, !11, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !10, i64 408, !10, i64 416, !10, i64 424, !10, i64 432, !10, i64 440, !10, i64 448, !10, i64 456, !10, i64 464, !10, i64 472, !10, i64 480, !10, i64 488, !10, i64 496, !10, i64 504, !10, i64 512, !10, i64 520, !10, i64 528, !10, i64 536, !10, i64 544, !10, i64 552, !10, i64 560, !10, i64 568, !10, i64 576, !10, i64 584, !10, i64 592, !10, i64 600, !10, i64 608, !10, i64 616, !10, i64 624, !10, i64 632, !10, i64 640, !10, i64 648, !10, i64 656, !10, i64 664, !10, i64 672, !10, i64 680, !10, i64 688, !10, i64 696, !10, i64 704, !10, i64 712, !10, i64 720, !10, i64 728, !10, i64 736, !10, i64 744, !10, i64 752, !10, i64 760, !10, i64 768, !10, i64 776, !10, i64 784, !10, i64 792, !12, i64 800}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"float", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!6, !7, i64 212}
!14 = !{!6, !10, i64 528}
!15 = !{!16, !10, i64 8}
!16 = !{!"network_state", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !7, i64 32, !7, i64 36, !17, i64 40}
!17 = !{!"network", !10, i64 0, !7, i64 8, !7, i64 12, !10, i64 16, !11, i64 24, !7, i64 28, !11, i64 32, !11, i64 36, !10, i64 40, !7, i64 48, !10, i64 56, !7, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 116, !7, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !7, i64 180, !10, i64 184}
!18 = !{!6, !7, i64 88}
!19 = !{!6, !7, i64 72}
!20 = !{!6, !7, i64 100}
!21 = !{!6, !7, i64 96}
!22 = !{!6, !7, i64 120}
!23 = !{!11, !11, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!6, !10, i64 792}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = !{!6, !7, i64 208}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = !{!16, !7, i64 32}
!34 = !{!6, !10, i64 520}
!35 = !{!6, !10, i64 392}
!36 = distinct !{!36, !25}
!37 = !{!6, !7, i64 92}
!38 = !{!6, !11, i64 292}
!39 = distinct !{!39, !25}
!40 = !{!6, !11, i64 296}
!41 = !{!6, !11, i64 288}
!42 = !{!6, !10, i64 464}
!43 = distinct !{!43, !25}
!44 = !{!6, !11, i64 308}
!45 = !{!7, !7, i64 0}
!46 = distinct !{!46, !25}
!47 = distinct !{!47, !25, !48}
!48 = !{!"llvm.loop.unswitch.partial.disable"}
!49 = distinct !{!49, !25, !48}
!50 = !{!6, !7, i64 300}
!51 = distinct !{!51, !25}
!52 = !{!6, !11, i64 284}
!53 = !{!6, !7, i64 224}
!54 = !{!6, !10, i64 376}
!55 = distinct !{!55, !25}
!56 = distinct !{!56, !25}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass