; LLVM IR from hans-ob1/neural_cam_ros :: src/detector (detection_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.3 = external hidden unnamed_addr constant [86 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: nounwind uwtable
define dso_local void @forward_detection_layer(ptr noundef byval(%struct.layer) align 8 %0, ptr noundef byval(%struct.network_state) align 8 %1) #1 {
  %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 float, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca %struct.box, align 4
  %26 = alloca i32, align 4
  %27 = alloca %struct.box, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca %struct.box, align 4
  %33 = alloca float, align 4
  %34 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #7
  %35 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %36 = load i32, ptr %35, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %38 = load i32, ptr %37, align 8, !tbaa !5
  %39 = mul nsw i32 %36, %38
  store i32 %39, ptr %3, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %40 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %41 = load ptr, ptr %40, align 8, !tbaa !14
  %42 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 1
  %43 = load ptr, ptr %42, align 8, !tbaa !15
  %44 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %45 = load i32, ptr %44, align 8, !tbaa !18
  %46 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %47 = load i32, ptr %46, align 8, !tbaa !19
  %48 = mul nsw i32 %45, %47
  %49 = sext i32 %48 to i64
  %50 = mul i64 %49, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 4 %43, i64 %50, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  %51 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 45
  %52 = load i32, ptr %51, align 8, !tbaa !20
  %53 = icmp ne i32 %52, 0
  br i1 %53, label %54, label %100

54:                                               ; preds = %2
  store i32 0, ptr %6, align 4, !tbaa !13
  br label %55

55:                                               ; preds = %96, %54
  %56 = load i32, ptr %6, align 4, !tbaa !13
  %57 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %58 = load i32, ptr %57, align 8, !tbaa !19
  %59 = icmp slt i32 %56, %58
  br i1 %59, label %60, label %99

60:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %61 = load i32, ptr %6, align 4, !tbaa !13
  %62 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 14
  %63 = load i32, ptr %62, align 4, !tbaa !21
  %64 = mul nsw i32 %61, %63
  store i32 %64, ptr %7, align 4, !tbaa !13
  store i32 0, ptr %4, align 4, !tbaa !13
  br label %65

65:                                               ; preds = %92, %60
  %66 = load i32, ptr %4, align 4, !tbaa !13
  %67 = load i32, ptr %3, align 4, !tbaa !13
  %68 = icmp slt i32 %66, %67
  br i1 %68, label %69, label %95

69:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %70 = load i32, ptr %4, align 4, !tbaa !13
  %71 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %72 = load i32, ptr %71, align 4, !tbaa !22
  %73 = mul nsw i32 %70, %72
  store i32 %73, ptr %8, align 4, !tbaa !13
  %74 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %75 = load ptr, ptr %74, align 8, !tbaa !14
  %76 = load i32, ptr %7, align 4, !tbaa !13
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds float, ptr %75, i64 %77
  %79 = load i32, ptr %8, align 4, !tbaa !13
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds float, ptr %78, i64 %80
  %82 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %83 = load i32, ptr %82, align 4, !tbaa !22
  %84 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %85 = load ptr, ptr %84, align 8, !tbaa !14
  %86 = load i32, ptr %7, align 4, !tbaa !13
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds float, ptr %85, i64 %87
  %89 = load i32, ptr %8, align 4, !tbaa !13
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds float, ptr %88, i64 %90
  call void @softmax(ptr noundef %81, i32 noundef %83, float noundef 1.000000e+00, ptr noundef %91)
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  br label %92

92:                                               ; preds = %69
  %93 = load i32, ptr %4, align 4, !tbaa !13
  %94 = add nsw i32 %93, 1
  store i32 %94, ptr %4, align 4, !tbaa !13
  br label %65, !llvm.loop !23

95:                                               ; preds = %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  br label %96

96:                                               ; preds = %95
  %97 = load i32, ptr %6, align 4, !tbaa !13
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %6, align 4, !tbaa !13
  br label %55, !llvm.loop !25

99:                                               ; preds = %55
  br label %100

100:                                              ; preds = %99, %2
  %101 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 4
  %102 = load i32, ptr %101, align 8, !tbaa !26
  %103 = icmp ne i32 %102, 0
  br i1 %103, label %104, label %890

104:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  store float 0.000000e+00, ptr %9, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store float 0.000000e+00, ptr %10, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  store float 0.000000e+00, ptr %11, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  store float 0.000000e+00, ptr %12, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  store float 0.000000e+00, ptr %13, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  store i32 0, ptr %14, align 4, !tbaa !13
  %105 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %106 = load ptr, ptr %105, align 8, !tbaa !28
  store float 0.000000e+00, ptr %106, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %107 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 14
  %108 = load i32, ptr %107, align 4, !tbaa !21
  %109 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %110 = load i32, ptr %109, align 8, !tbaa !19
  %111 = mul nsw i32 %108, %110
  store i32 %111, ptr %15, align 4, !tbaa !13
  %112 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %113 = load ptr, ptr %112, align 8, !tbaa !29
  %114 = load i32, ptr %15, align 4, !tbaa !13
  %115 = sext i32 %114 to i64
  %116 = mul i64 %115, 4
  call void @llvm.memset.p0.i64(ptr align 4 %113, i8 0, i64 %116, i1 false)
  store i32 0, ptr %6, align 4, !tbaa !13
  br label %117

117:                                              ; preds = %837, %104
  %118 = load i32, ptr %6, align 4, !tbaa !13
  %119 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %120 = load i32, ptr %119, align 8, !tbaa !19
  %121 = icmp slt i32 %118, %120
  br i1 %121, label %122, label %840

122:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  %123 = load i32, ptr %6, align 4, !tbaa !13
  %124 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 14
  %125 = load i32, ptr %124, align 4, !tbaa !21
  %126 = mul nsw i32 %123, %125
  store i32 %126, ptr %16, align 4, !tbaa !13
  store i32 0, ptr %4, align 4, !tbaa !13
  br label %127

127:                                              ; preds = %833, %122
  %128 = load i32, ptr %4, align 4, !tbaa !13
  %129 = load i32, ptr %3, align 4, !tbaa !13
  %130 = icmp slt i32 %128, %129
  br i1 %130, label %131, label %836

131:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %132 = load i32, ptr %6, align 4, !tbaa !13
  %133 = load i32, ptr %3, align 4, !tbaa !13
  %134 = mul nsw i32 %132, %133
  %135 = load i32, ptr %4, align 4, !tbaa !13
  %136 = add nsw i32 %134, %135
  %137 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 47
  %138 = load i32, ptr %137, align 8, !tbaa !30
  %139 = add nsw i32 1, %138
  %140 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %141 = load i32, ptr %140, align 4, !tbaa !22
  %142 = add nsw i32 %139, %141
  %143 = mul nsw i32 %136, %142
  store i32 %143, ptr %17, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %144 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %145 = load ptr, ptr %144, align 8, !tbaa !31
  %146 = load i32, ptr %17, align 4, !tbaa !13
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds float, ptr %145, i64 %147
  %149 = load float, ptr %148, align 4, !tbaa !27
  %150 = fptosi float %149 to i32
  store i32 %150, ptr %18, align 4, !tbaa !13
  store i32 0, ptr %5, align 4, !tbaa !13
  br label %151

151:                                              ; preds = %210, %131
  %152 = load i32, ptr %5, align 4, !tbaa !13
  %153 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %154 = load i32, ptr %153, align 8, !tbaa !32
  %155 = icmp slt i32 %152, %154
  br i1 %155, label %156, label %213

156:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  %157 = load i32, ptr %16, align 4, !tbaa !13
  %158 = load i32, ptr %3, align 4, !tbaa !13
  %159 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %160 = load i32, ptr %159, align 4, !tbaa !22
  %161 = mul nsw i32 %158, %160
  %162 = add nsw i32 %157, %161
  %163 = load i32, ptr %4, align 4, !tbaa !13
  %164 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %165 = load i32, ptr %164, align 8, !tbaa !32
  %166 = mul nsw i32 %163, %165
  %167 = add nsw i32 %162, %166
  %168 = load i32, ptr %5, align 4, !tbaa !13
  %169 = add nsw i32 %167, %168
  store i32 %169, ptr %19, align 4, !tbaa !13
  %170 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 66
  %171 = load float, ptr %170, align 4, !tbaa !33
  %172 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %173 = load ptr, ptr %172, align 8, !tbaa !14
  %174 = load i32, ptr %19, align 4, !tbaa !13
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds float, ptr %173, i64 %175
  %177 = load float, ptr %176, align 4, !tbaa !27
  %178 = fsub float 0.000000e+00, %177
  %179 = fmul float %171, %178
  %180 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %181 = load ptr, ptr %180, align 8, !tbaa !29
  %182 = load i32, ptr %19, align 4, !tbaa !13
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds float, ptr %181, i64 %183
  store float %179, ptr %184, align 4, !tbaa !27
  %185 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 66
  %186 = load float, ptr %185, align 4, !tbaa !33
  %187 = fpext float %186 to double
  %188 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %189 = load ptr, ptr %188, align 8, !tbaa !14
  %190 = load i32, ptr %19, align 4, !tbaa !13
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds float, ptr %189, i64 %191
  %193 = load float, ptr %192, align 4, !tbaa !27
  %194 = fpext float %193 to double
  %195 = call double @pow(double noundef %194, double noundef 2.000000e+00) #7
  %196 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %197 = load ptr, ptr %196, align 8, !tbaa !28
  %198 = load float, ptr %197, align 4, !tbaa !27
  %199 = fpext float %198 to double
  %200 = call double @llvm.fmuladd.f64(double %187, double %195, double %199)
  %201 = fptrunc double %200 to float
  store float %201, ptr %197, align 4, !tbaa !27
  %202 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %203 = load ptr, ptr %202, align 8, !tbaa !14
  %204 = load i32, ptr %19, align 4, !tbaa !13
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds float, ptr %203, i64 %205
  %207 = load float, ptr %206, align 4, !tbaa !27
  %208 = load float, ptr %13, align 4, !tbaa !27
  %209 = fadd float %208, %207
  store float %209, ptr %13, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %210

210:                                              ; preds = %156
  %211 = load i32, ptr %5, align 4, !tbaa !13
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %5, align 4, !tbaa !13
  br label %151, !llvm.loop !34

213:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 -1, ptr %20, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  store float 0.000000e+00, ptr %21, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store float 2.000000e+01, ptr %22, align 4, !tbaa !27
  %214 = load i32, ptr %18, align 4, !tbaa !13
  %215 = icmp ne i32 %214, 0
  br i1 %215, label %217, label %216

216:                                              ; preds = %213
  store i32 13, ptr %23, align 4
  br label %830

217:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %218 = load i32, ptr %16, align 4, !tbaa !13
  %219 = load i32, ptr %4, align 4, !tbaa !13
  %220 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %221 = load i32, ptr %220, align 4, !tbaa !22
  %222 = mul nsw i32 %219, %221
  %223 = add nsw i32 %218, %222
  store i32 %223, ptr %24, align 4, !tbaa !13
  store i32 0, ptr %5, align 4, !tbaa !13
  br label %224

224:                                              ; preds = %319, %217
  %225 = load i32, ptr %5, align 4, !tbaa !13
  %226 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %227 = load i32, ptr %226, align 4, !tbaa !22
  %228 = icmp slt i32 %225, %227
  br i1 %228, label %229, label %322

229:                                              ; preds = %224
  %230 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 67
  %231 = load float, ptr %230, align 8, !tbaa !35
  %232 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8, !tbaa !31
  %234 = load i32, ptr %17, align 4, !tbaa !13
  %235 = add nsw i32 %234, 1
  %236 = load i32, ptr %5, align 4, !tbaa !13
  %237 = add nsw i32 %235, %236
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds float, ptr %233, i64 %238
  %240 = load float, ptr %239, align 4, !tbaa !27
  %241 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %242 = load ptr, ptr %241, align 8, !tbaa !14
  %243 = load i32, ptr %24, align 4, !tbaa !13
  %244 = load i32, ptr %5, align 4, !tbaa !13
  %245 = add nsw i32 %243, %244
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds float, ptr %242, i64 %246
  %248 = load float, ptr %247, align 4, !tbaa !27
  %249 = fsub float %240, %248
  %250 = fmul float %231, %249
  %251 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %252 = load ptr, ptr %251, align 8, !tbaa !29
  %253 = load i32, ptr %24, align 4, !tbaa !13
  %254 = load i32, ptr %5, align 4, !tbaa !13
  %255 = add nsw i32 %253, %254
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds float, ptr %252, i64 %256
  store float %250, ptr %257, align 4, !tbaa !27
  %258 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 67
  %259 = load float, ptr %258, align 8, !tbaa !35
  %260 = fpext float %259 to double
  %261 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %262 = load ptr, ptr %261, align 8, !tbaa !31
  %263 = load i32, ptr %17, align 4, !tbaa !13
  %264 = add nsw i32 %263, 1
  %265 = load i32, ptr %5, align 4, !tbaa !13
  %266 = add nsw i32 %264, %265
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds float, ptr %262, i64 %267
  %269 = load float, ptr %268, align 4, !tbaa !27
  %270 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %271 = load ptr, ptr %270, align 8, !tbaa !14
  %272 = load i32, ptr %24, align 4, !tbaa !13
  %273 = load i32, ptr %5, align 4, !tbaa !13
  %274 = add nsw i32 %272, %273
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds float, ptr %271, i64 %275
  %277 = load float, ptr %276, align 4, !tbaa !27
  %278 = fsub float %269, %277
  %279 = fpext float %278 to double
  %280 = call double @pow(double noundef %279, double noundef 2.000000e+00) #7
  %281 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %282 = load ptr, ptr %281, align 8, !tbaa !28
  %283 = load float, ptr %282, align 4, !tbaa !27
  %284 = fpext float %283 to double
  %285 = call double @llvm.fmuladd.f64(double %260, double %280, double %284)
  %286 = fptrunc double %285 to float
  store float %286, ptr %282, align 4, !tbaa !27
  %287 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %288 = load ptr, ptr %287, align 8, !tbaa !31
  %289 = load i32, ptr %17, align 4, !tbaa !13
  %290 = add nsw i32 %289, 1
  %291 = load i32, ptr %5, align 4, !tbaa !13
  %292 = add nsw i32 %290, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds float, ptr %288, i64 %293
  %295 = load float, ptr %294, align 4, !tbaa !27
  %296 = fcmp une float %295, 0.000000e+00
  br i1 %296, label %297, label %308

297:                                              ; preds = %229
  %298 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %299 = load ptr, ptr %298, align 8, !tbaa !14
  %300 = load i32, ptr %24, align 4, !tbaa !13
  %301 = load i32, ptr %5, align 4, !tbaa !13
  %302 = add nsw i32 %300, %301
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds float, ptr %299, i64 %303
  %305 = load float, ptr %304, align 4, !tbaa !27
  %306 = load float, ptr %10, align 4, !tbaa !27
  %307 = fadd float %306, %305
  store float %307, ptr %10, align 4, !tbaa !27
  br label %308

308:                                              ; preds = %297, %229
  %309 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %310 = load ptr, ptr %309, align 8, !tbaa !14
  %311 = load i32, ptr %24, align 4, !tbaa !13
  %312 = load i32, ptr %5, align 4, !tbaa !13
  %313 = add nsw i32 %311, %312
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds float, ptr %310, i64 %314
  %316 = load float, ptr %315, align 4, !tbaa !27
  %317 = load float, ptr %11, align 4, !tbaa !27
  %318 = fadd float %317, %316
  store float %318, ptr %11, align 4, !tbaa !27
  br label %319

319:                                              ; preds = %308
  %320 = load i32, ptr %5, align 4, !tbaa !13
  %321 = add nsw i32 %320, 1
  store i32 %321, ptr %5, align 4, !tbaa !13
  br label %224, !llvm.loop !36

322:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #7
  %323 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %324 = load ptr, ptr %323, align 8, !tbaa !31
  %325 = load i32, ptr %17, align 4, !tbaa !13
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds float, ptr %324, i64 %326
  %328 = getelementptr inbounds float, ptr %327, i64 1
  %329 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %330 = load i32, ptr %329, align 4, !tbaa !22
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds float, ptr %328, i64 %331
  %333 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %332)
  %334 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 0
  %335 = extractvalue { <2 x float>, <2 x float> } %333, 0
  store <2 x float> %335, ptr %334, align 4
  %336 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 1
  %337 = extractvalue { <2 x float>, <2 x float> } %333, 1
  store <2 x float> %337, ptr %336, align 4
  %338 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %339 = load i32, ptr %338, align 8, !tbaa !5
  %340 = sitofp i32 %339 to float
  %341 = getelementptr inbounds %struct.box, ptr %25, i32 0, i32 0
  %342 = load float, ptr %341, align 4, !tbaa !37
  %343 = fdiv float %342, %340
  store float %343, ptr %341, align 4, !tbaa !37
  %344 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %345 = load i32, ptr %344, align 8, !tbaa !5
  %346 = sitofp i32 %345 to float
  %347 = getelementptr inbounds %struct.box, ptr %25, i32 0, i32 1
  %348 = load float, ptr %347, align 4, !tbaa !39
  %349 = fdiv float %348, %346
  store float %349, ptr %347, align 4, !tbaa !39
  store i32 0, ptr %5, align 4, !tbaa !13
  br label %350

350:                                              ; preds = %454, %322
  %351 = load i32, ptr %5, align 4, !tbaa !13
  %352 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %353 = load i32, ptr %352, align 8, !tbaa !32
  %354 = icmp slt i32 %351, %353
  br i1 %354, label %355, label %457

355:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %356 = load i32, ptr %16, align 4, !tbaa !13
  %357 = load i32, ptr %3, align 4, !tbaa !13
  %358 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %359 = load i32, ptr %358, align 4, !tbaa !22
  %360 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %361 = load i32, ptr %360, align 8, !tbaa !32
  %362 = add nsw i32 %359, %361
  %363 = mul nsw i32 %357, %362
  %364 = add nsw i32 %356, %363
  %365 = load i32, ptr %4, align 4, !tbaa !13
  %366 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %367 = load i32, ptr %366, align 8, !tbaa !32
  %368 = mul nsw i32 %365, %367
  %369 = load i32, ptr %5, align 4, !tbaa !13
  %370 = add nsw i32 %368, %369
  %371 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 47
  %372 = load i32, ptr %371, align 8, !tbaa !30
  %373 = mul nsw i32 %370, %372
  %374 = add nsw i32 %364, %373
  store i32 %374, ptr %26, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #7
  %375 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %376 = load ptr, ptr %375, align 8, !tbaa !14
  %377 = load i32, ptr %26, align 4, !tbaa !13
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds float, ptr %376, i64 %378
  %380 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %379)
  %381 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %27, i32 0, i32 0
  %382 = extractvalue { <2 x float>, <2 x float> } %380, 0
  store <2 x float> %382, ptr %381, align 4
  %383 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %27, i32 0, i32 1
  %384 = extractvalue { <2 x float>, <2 x float> } %380, 1
  store <2 x float> %384, ptr %383, align 4
  %385 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %386 = load i32, ptr %385, align 8, !tbaa !5
  %387 = sitofp i32 %386 to float
  %388 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 0
  %389 = load float, ptr %388, align 4, !tbaa !37
  %390 = fdiv float %389, %387
  store float %390, ptr %388, align 4, !tbaa !37
  %391 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %392 = load i32, ptr %391, align 8, !tbaa !5
  %393 = sitofp i32 %392 to float
  %394 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 1
  %395 = load float, ptr %394, align 4, !tbaa !39
  %396 = fdiv float %395, %393
  store float %396, ptr %394, align 4, !tbaa !39
  %397 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 31
  %398 = load i32, ptr %397, align 8, !tbaa !40
  %399 = icmp ne i32 %398, 0
  br i1 %399, label %400, label %413

400:                                              ; preds = %355
  %401 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 2
  %402 = load float, ptr %401, align 4, !tbaa !41
  %403 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 2
  %404 = load float, ptr %403, align 4, !tbaa !41
  %405 = fmul float %402, %404
  %406 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 2
  store float %405, ptr %406, align 4, !tbaa !41
  %407 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 3
  %408 = load float, ptr %407, align 4, !tbaa !42
  %409 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 3
  %410 = load float, ptr %409, align 4, !tbaa !42
  %411 = fmul float %408, %410
  %412 = getelementptr inbounds %struct.box, ptr %27, i32 0, i32 3
  store float %411, ptr %412, align 4, !tbaa !42
  br label %413

413:                                              ; preds = %400, %355
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %414 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %27, i32 0, i32 0
  %415 = load <2 x float>, ptr %414, align 4
  %416 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %27, i32 0, i32 1
  %417 = load <2 x float>, ptr %416, align 4
  %418 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 0
  %419 = load <2 x float>, ptr %418, align 4
  %420 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 1
  %421 = load <2 x float>, ptr %420, align 4
  %422 = call float @box_iou(<2 x float> %415, <2 x float> %417, <2 x float> %419, <2 x float> %421)
  store float %422, ptr %28, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %423 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %27, i32 0, i32 0
  %424 = load <2 x float>, ptr %423, align 4
  %425 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %27, i32 0, i32 1
  %426 = load <2 x float>, ptr %425, align 4
  %427 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 0
  %428 = load <2 x float>, ptr %427, align 4
  %429 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 1
  %430 = load <2 x float>, ptr %429, align 4
  %431 = call float @box_rmse(<2 x float> %424, <2 x float> %426, <2 x float> %428, <2 x float> %430)
  store float %431, ptr %29, align 4, !tbaa !27
  %432 = load float, ptr %21, align 4, !tbaa !27
  %433 = fcmp ogt float %432, 0.000000e+00
  br i1 %433, label %437, label %434

434:                                              ; preds = %413
  %435 = load float, ptr %28, align 4, !tbaa !27
  %436 = fcmp ogt float %435, 0.000000e+00
  br i1 %436, label %437, label %445

437:                                              ; preds = %434, %413
  %438 = load float, ptr %28, align 4, !tbaa !27
  %439 = load float, ptr %21, align 4, !tbaa !27
  %440 = fcmp ogt float %438, %439
  br i1 %440, label %441, label %444

441:                                              ; preds = %437
  %442 = load float, ptr %28, align 4, !tbaa !27
  store float %442, ptr %21, align 4, !tbaa !27
  %443 = load i32, ptr %5, align 4, !tbaa !13
  store i32 %443, ptr %20, align 4, !tbaa !13
  br label %444

444:                                              ; preds = %441, %437
  br label %453

445:                                              ; preds = %434
  %446 = load float, ptr %29, align 4, !tbaa !27
  %447 = load float, ptr %22, align 4, !tbaa !27
  %448 = fcmp olt float %446, %447
  br i1 %448, label %449, label %452

449:                                              ; preds = %445
  %450 = load float, ptr %29, align 4, !tbaa !27
  store float %450, ptr %22, align 4, !tbaa !27
  %451 = load i32, ptr %5, align 4, !tbaa !13
  store i32 %451, ptr %20, align 4, !tbaa !13
  br label %452

452:                                              ; preds = %449, %445
  br label %453

453:                                              ; preds = %452, %444
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %454

454:                                              ; preds = %453
  %455 = load i32, ptr %5, align 4, !tbaa !13
  %456 = add nsw i32 %455, 1
  store i32 %456, ptr %5, align 4, !tbaa !13
  br label %350, !llvm.loop !43

457:                                              ; preds = %350
  %458 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 12
  %459 = load i32, ptr %458, align 4, !tbaa !44
  %460 = icmp ne i32 %459, 0
  br i1 %460, label %461, label %472

461:                                              ; preds = %457
  %462 = getelementptr inbounds %struct.box, ptr %25, i32 0, i32 2
  %463 = load float, ptr %462, align 4, !tbaa !41
  %464 = getelementptr inbounds %struct.box, ptr %25, i32 0, i32 3
  %465 = load float, ptr %464, align 4, !tbaa !42
  %466 = fmul float %463, %465
  %467 = fpext float %466 to double
  %468 = fcmp olt double %467, 1.000000e-01
  br i1 %468, label %469, label %470

469:                                              ; preds = %461
  store i32 1, ptr %20, align 4, !tbaa !13
  br label %471

470:                                              ; preds = %461
  store i32 0, ptr %20, align 4, !tbaa !13
  br label %471

471:                                              ; preds = %470, %469
  br label %472

472:                                              ; preds = %471, %457
  %473 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 69
  %474 = load i32, ptr %473, align 8, !tbaa !45
  %475 = icmp ne i32 %474, 0
  br i1 %475, label %476, label %487

476:                                              ; preds = %472
  %477 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 6
  %478 = getelementptr inbounds %struct.network, ptr %477, i32 0, i32 3
  %479 = load ptr, ptr %478, align 8, !tbaa !46
  %480 = load i32, ptr %479, align 4, !tbaa !13
  %481 = icmp slt i32 %480, 64000
  br i1 %481, label %482, label %487

482:                                              ; preds = %476
  %483 = call i32 @rand() #7
  %484 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %485 = load i32, ptr %484, align 8, !tbaa !32
  %486 = srem i32 %483, %485
  store i32 %486, ptr %20, align 4, !tbaa !13
  br label %487

487:                                              ; preds = %482, %476, %472
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %488 = load i32, ptr %16, align 4, !tbaa !13
  %489 = load i32, ptr %3, align 4, !tbaa !13
  %490 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %491 = load i32, ptr %490, align 4, !tbaa !22
  %492 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %493 = load i32, ptr %492, align 8, !tbaa !32
  %494 = add nsw i32 %491, %493
  %495 = mul nsw i32 %489, %494
  %496 = add nsw i32 %488, %495
  %497 = load i32, ptr %4, align 4, !tbaa !13
  %498 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %499 = load i32, ptr %498, align 8, !tbaa !32
  %500 = mul nsw i32 %497, %499
  %501 = load i32, ptr %20, align 4, !tbaa !13
  %502 = add nsw i32 %500, %501
  %503 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 47
  %504 = load i32, ptr %503, align 8, !tbaa !30
  %505 = mul nsw i32 %502, %504
  %506 = add nsw i32 %496, %505
  store i32 %506, ptr %30, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  %507 = load i32, ptr %17, align 4, !tbaa !13
  %508 = add nsw i32 %507, 1
  %509 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %510 = load i32, ptr %509, align 4, !tbaa !22
  %511 = add nsw i32 %508, %510
  store i32 %511, ptr %31, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #7
  %512 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %513 = load ptr, ptr %512, align 8, !tbaa !14
  %514 = load i32, ptr %30, align 4, !tbaa !13
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds float, ptr %513, i64 %515
  %517 = call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %516)
  %518 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 0
  %519 = extractvalue { <2 x float>, <2 x float> } %517, 0
  store <2 x float> %519, ptr %518, align 4
  %520 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 1
  %521 = extractvalue { <2 x float>, <2 x float> } %517, 1
  store <2 x float> %521, ptr %520, align 4
  %522 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %523 = load i32, ptr %522, align 8, !tbaa !5
  %524 = sitofp i32 %523 to float
  %525 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 0
  %526 = load float, ptr %525, align 4, !tbaa !37
  %527 = fdiv float %526, %524
  store float %527, ptr %525, align 4, !tbaa !37
  %528 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 27
  %529 = load i32, ptr %528, align 8, !tbaa !5
  %530 = sitofp i32 %529 to float
  %531 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 1
  %532 = load float, ptr %531, align 4, !tbaa !39
  %533 = fdiv float %532, %530
  store float %533, ptr %531, align 4, !tbaa !39
  %534 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 31
  %535 = load i32, ptr %534, align 8, !tbaa !40
  %536 = icmp ne i32 %535, 0
  br i1 %536, label %537, label %550

537:                                              ; preds = %487
  %538 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 2
  %539 = load float, ptr %538, align 4, !tbaa !41
  %540 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 2
  %541 = load float, ptr %540, align 4, !tbaa !41
  %542 = fmul float %539, %541
  %543 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 2
  store float %542, ptr %543, align 4, !tbaa !41
  %544 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 3
  %545 = load float, ptr %544, align 4, !tbaa !42
  %546 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 3
  %547 = load float, ptr %546, align 4, !tbaa !42
  %548 = fmul float %545, %547
  %549 = getelementptr inbounds %struct.box, ptr %32, i32 0, i32 3
  store float %548, ptr %549, align 4, !tbaa !42
  br label %550

550:                                              ; preds = %537, %487
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  %551 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 0
  %552 = load <2 x float>, ptr %551, align 4
  %553 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %32, i32 0, i32 1
  %554 = load <2 x float>, ptr %553, align 4
  %555 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 0
  %556 = load <2 x float>, ptr %555, align 4
  %557 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %25, i32 0, i32 1
  %558 = load <2 x float>, ptr %557, align 4
  %559 = call float @box_iou(<2 x float> %552, <2 x float> %554, <2 x float> %556, <2 x float> %558)
  store float %559, ptr %33, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %560 = load i32, ptr %16, align 4, !tbaa !13
  %561 = load i32, ptr %3, align 4, !tbaa !13
  %562 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %563 = load i32, ptr %562, align 4, !tbaa !22
  %564 = mul nsw i32 %561, %563
  %565 = add nsw i32 %560, %564
  %566 = load i32, ptr %4, align 4, !tbaa !13
  %567 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %568 = load i32, ptr %567, align 8, !tbaa !32
  %569 = mul nsw i32 %566, %568
  %570 = add nsw i32 %565, %569
  %571 = load i32, ptr %20, align 4, !tbaa !13
  %572 = add nsw i32 %570, %571
  store i32 %572, ptr %34, align 4, !tbaa !13
  %573 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 66
  %574 = load float, ptr %573, align 4, !tbaa !33
  %575 = fpext float %574 to double
  %576 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %577 = load ptr, ptr %576, align 8, !tbaa !14
  %578 = load i32, ptr %34, align 4, !tbaa !13
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds float, ptr %577, i64 %579
  %581 = load float, ptr %580, align 4, !tbaa !27
  %582 = fpext float %581 to double
  %583 = call double @pow(double noundef %582, double noundef 2.000000e+00) #7
  %584 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %585 = load ptr, ptr %584, align 8, !tbaa !28
  %586 = load float, ptr %585, align 4, !tbaa !27
  %587 = fpext float %586 to double
  %588 = fneg double %575
  %589 = call double @llvm.fmuladd.f64(double %588, double %583, double %587)
  %590 = fptrunc double %589 to float
  store float %590, ptr %585, align 4, !tbaa !27
  %591 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 65
  %592 = load float, ptr %591, align 8, !tbaa !47
  %593 = fpext float %592 to double
  %594 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %595 = load ptr, ptr %594, align 8, !tbaa !14
  %596 = load i32, ptr %34, align 4, !tbaa !13
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds float, ptr %595, i64 %597
  %599 = load float, ptr %598, align 4, !tbaa !27
  %600 = fsub float 1.000000e+00, %599
  %601 = fpext float %600 to double
  %602 = call double @pow(double noundef %601, double noundef 2.000000e+00) #7
  %603 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %604 = load ptr, ptr %603, align 8, !tbaa !28
  %605 = load float, ptr %604, align 4, !tbaa !27
  %606 = fpext float %605 to double
  %607 = call double @llvm.fmuladd.f64(double %593, double %602, double %606)
  %608 = fptrunc double %607 to float
  store float %608, ptr %604, align 4, !tbaa !27
  %609 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %610 = load ptr, ptr %609, align 8, !tbaa !14
  %611 = load i32, ptr %34, align 4, !tbaa !13
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds float, ptr %610, i64 %612
  %614 = load float, ptr %613, align 4, !tbaa !27
  %615 = load float, ptr %12, align 4, !tbaa !27
  %616 = fadd float %615, %614
  store float %616, ptr %12, align 4, !tbaa !27
  %617 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 65
  %618 = load float, ptr %617, align 8, !tbaa !47
  %619 = fpext float %618 to double
  %620 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %621 = load ptr, ptr %620, align 8, !tbaa !14
  %622 = load i32, ptr %34, align 4, !tbaa !13
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds float, ptr %621, i64 %623
  %625 = load float, ptr %624, align 4, !tbaa !27
  %626 = fpext float %625 to double
  %627 = fsub double 1.000000e+00, %626
  %628 = fmul double %619, %627
  %629 = fptrunc double %628 to float
  %630 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %631 = load ptr, ptr %630, align 8, !tbaa !29
  %632 = load i32, ptr %34, align 4, !tbaa !13
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds float, ptr %631, i64 %633
  store float %629, ptr %634, align 4, !tbaa !27
  %635 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 49
  %636 = load i32, ptr %635, align 8, !tbaa !48
  %637 = icmp ne i32 %636, 0
  br i1 %637, label %638, label %655

638:                                              ; preds = %550
  %639 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 65
  %640 = load float, ptr %639, align 8, !tbaa !47
  %641 = load float, ptr %33, align 4, !tbaa !27
  %642 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %643 = load ptr, ptr %642, align 8, !tbaa !14
  %644 = load i32, ptr %34, align 4, !tbaa !13
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds float, ptr %643, i64 %645
  %647 = load float, ptr %646, align 4, !tbaa !27
  %648 = fsub float %641, %647
  %649 = fmul float %640, %648
  %650 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %651 = load ptr, ptr %650, align 8, !tbaa !29
  %652 = load i32, ptr %34, align 4, !tbaa !13
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds float, ptr %651, i64 %653
  store float %649, ptr %654, align 4, !tbaa !27
  br label %655

655:                                              ; preds = %638, %550
  %656 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 64
  %657 = load float, ptr %656, align 4, !tbaa !49
  %658 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %659 = load ptr, ptr %658, align 8, !tbaa !31
  %660 = load i32, ptr %31, align 4, !tbaa !13
  %661 = add nsw i32 %660, 0
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds float, ptr %659, i64 %662
  %664 = load float, ptr %663, align 4, !tbaa !27
  %665 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %666 = load ptr, ptr %665, align 8, !tbaa !14
  %667 = load i32, ptr %30, align 4, !tbaa !13
  %668 = add nsw i32 %667, 0
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds float, ptr %666, i64 %669
  %671 = load float, ptr %670, align 4, !tbaa !27
  %672 = fsub float %664, %671
  %673 = fmul float %657, %672
  %674 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %675 = load ptr, ptr %674, align 8, !tbaa !29
  %676 = load i32, ptr %30, align 4, !tbaa !13
  %677 = add nsw i32 %676, 0
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds float, ptr %675, i64 %678
  store float %673, ptr %679, align 4, !tbaa !27
  %680 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 64
  %681 = load float, ptr %680, align 4, !tbaa !49
  %682 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %683 = load ptr, ptr %682, align 8, !tbaa !31
  %684 = load i32, ptr %31, align 4, !tbaa !13
  %685 = add nsw i32 %684, 1
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds float, ptr %683, i64 %686
  %688 = load float, ptr %687, align 4, !tbaa !27
  %689 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %690 = load ptr, ptr %689, align 8, !tbaa !14
  %691 = load i32, ptr %30, align 4, !tbaa !13
  %692 = add nsw i32 %691, 1
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds float, ptr %690, i64 %693
  %695 = load float, ptr %694, align 4, !tbaa !27
  %696 = fsub float %688, %695
  %697 = fmul float %681, %696
  %698 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %699 = load ptr, ptr %698, align 8, !tbaa !29
  %700 = load i32, ptr %30, align 4, !tbaa !13
  %701 = add nsw i32 %700, 1
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds float, ptr %699, i64 %702
  store float %697, ptr %703, align 4, !tbaa !27
  %704 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 64
  %705 = load float, ptr %704, align 4, !tbaa !49
  %706 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %707 = load ptr, ptr %706, align 8, !tbaa !31
  %708 = load i32, ptr %31, align 4, !tbaa !13
  %709 = add nsw i32 %708, 2
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds float, ptr %707, i64 %710
  %712 = load float, ptr %711, align 4, !tbaa !27
  %713 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %714 = load ptr, ptr %713, align 8, !tbaa !14
  %715 = load i32, ptr %30, align 4, !tbaa !13
  %716 = add nsw i32 %715, 2
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds float, ptr %714, i64 %717
  %719 = load float, ptr %718, align 4, !tbaa !27
  %720 = fsub float %712, %719
  %721 = fmul float %705, %720
  %722 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %723 = load ptr, ptr %722, align 8, !tbaa !29
  %724 = load i32, ptr %30, align 4, !tbaa !13
  %725 = add nsw i32 %724, 2
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds float, ptr %723, i64 %726
  store float %721, ptr %727, align 4, !tbaa !27
  %728 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 64
  %729 = load float, ptr %728, align 4, !tbaa !49
  %730 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %731 = load ptr, ptr %730, align 8, !tbaa !31
  %732 = load i32, ptr %31, align 4, !tbaa !13
  %733 = add nsw i32 %732, 3
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds float, ptr %731, i64 %734
  %736 = load float, ptr %735, align 4, !tbaa !27
  %737 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %738 = load ptr, ptr %737, align 8, !tbaa !14
  %739 = load i32, ptr %30, align 4, !tbaa !13
  %740 = add nsw i32 %739, 3
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds float, ptr %738, i64 %741
  %743 = load float, ptr %742, align 4, !tbaa !27
  %744 = fsub float %736, %743
  %745 = fmul float %729, %744
  %746 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %747 = load ptr, ptr %746, align 8, !tbaa !29
  %748 = load i32, ptr %30, align 4, !tbaa !13
  %749 = add nsw i32 %748, 3
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds float, ptr %747, i64 %750
  store float %745, ptr %751, align 4, !tbaa !27
  %752 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 31
  %753 = load i32, ptr %752, align 8, !tbaa !40
  %754 = icmp ne i32 %753, 0
  br i1 %754, label %755, label %814

755:                                              ; preds = %655
  %756 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 64
  %757 = load float, ptr %756, align 4, !tbaa !49
  %758 = fpext float %757 to double
  %759 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %760 = load ptr, ptr %759, align 8, !tbaa !31
  %761 = load i32, ptr %31, align 4, !tbaa !13
  %762 = add nsw i32 %761, 2
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds float, ptr %760, i64 %763
  %765 = load float, ptr %764, align 4, !tbaa !27
  %766 = fpext float %765 to double
  %767 = call double @sqrt(double noundef %766) #7
  %768 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %769 = load ptr, ptr %768, align 8, !tbaa !14
  %770 = load i32, ptr %30, align 4, !tbaa !13
  %771 = add nsw i32 %770, 2
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds float, ptr %769, i64 %772
  %774 = load float, ptr %773, align 4, !tbaa !27
  %775 = fpext float %774 to double
  %776 = fsub double %767, %775
  %777 = fmul double %758, %776
  %778 = fptrunc double %777 to float
  %779 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %780 = load ptr, ptr %779, align 8, !tbaa !29
  %781 = load i32, ptr %30, align 4, !tbaa !13
  %782 = add nsw i32 %781, 2
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds float, ptr %780, i64 %783
  store float %778, ptr %784, align 4, !tbaa !27
  %785 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 64
  %786 = load float, ptr %785, align 4, !tbaa !49
  %787 = fpext float %786 to double
  %788 = getelementptr inbounds %struct.network_state, ptr %1, i32 0, i32 0
  %789 = load ptr, ptr %788, align 8, !tbaa !31
  %790 = load i32, ptr %31, align 4, !tbaa !13
  %791 = add nsw i32 %790, 3
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds float, ptr %789, i64 %792
  %794 = load float, ptr %793, align 4, !tbaa !27
  %795 = fpext float %794 to double
  %796 = call double @sqrt(double noundef %795) #7
  %797 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 101
  %798 = load ptr, ptr %797, align 8, !tbaa !14
  %799 = load i32, ptr %30, align 4, !tbaa !13
  %800 = add nsw i32 %799, 3
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds float, ptr %798, i64 %801
  %803 = load float, ptr %802, align 4, !tbaa !27
  %804 = fpext float %803 to double
  %805 = fsub double %796, %804
  %806 = fmul double %787, %805
  %807 = fptrunc double %806 to float
  %808 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %809 = load ptr, ptr %808, align 8, !tbaa !29
  %810 = load i32, ptr %30, align 4, !tbaa !13
  %811 = add nsw i32 %810, 3
  %812 = sext i32 %811 to i64
  %813 = getelementptr inbounds float, ptr %809, i64 %812
  store float %807, ptr %813, align 4, !tbaa !27
  br label %814

814:                                              ; preds = %755, %655
  %815 = load float, ptr %33, align 4, !tbaa !27
  %816 = fsub float 1.000000e+00, %815
  %817 = fpext float %816 to double
  %818 = call double @pow(double noundef %817, double noundef 2.000000e+00) #7
  %819 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %820 = load ptr, ptr %819, align 8, !tbaa !28
  %821 = load float, ptr %820, align 4, !tbaa !27
  %822 = fpext float %821 to double
  %823 = fadd double %822, %818
  %824 = fptrunc double %823 to float
  store float %824, ptr %820, align 4, !tbaa !27
  %825 = load float, ptr %33, align 4, !tbaa !27
  %826 = load float, ptr %9, align 4, !tbaa !27
  %827 = fadd float %826, %825
  store float %827, ptr %9, align 4, !tbaa !27
  %828 = load i32, ptr %14, align 4, !tbaa !13
  %829 = add nsw i32 %828, 1
  store i32 %829, ptr %14, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  store i32 0, ptr %23, align 4
  br label %830

830:                                              ; preds = %814, %216
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  %831 = load i32, ptr %23, align 4
  switch i32 %831, label %891 [
    i32 0, label %832
    i32 13, label %833
  ]

832:                                              ; preds = %830
  br label %833

833:                                              ; preds = %832, %830
  %834 = load i32, ptr %4, align 4, !tbaa !13
  %835 = add nsw i32 %834, 1
  store i32 %835, ptr %4, align 4, !tbaa !13
  br label %127, !llvm.loop !50

836:                                              ; preds = %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %837

837:                                              ; preds = %836
  %838 = load i32, ptr %6, align 4, !tbaa !13
  %839 = add nsw i32 %838, 1
  store i32 %839, ptr %6, align 4, !tbaa !13
  br label %117, !llvm.loop !51

840:                                              ; preds = %117
  %841 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 100
  %842 = load ptr, ptr %841, align 8, !tbaa !29
  %843 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 15
  %844 = load i32, ptr %843, align 8, !tbaa !18
  %845 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %846 = load i32, ptr %845, align 8, !tbaa !19
  %847 = mul nsw i32 %844, %846
  %848 = call float @mag_array(ptr noundef %842, i32 noundef %847)
  %849 = fpext float %848 to double
  %850 = call double @pow(double noundef %849, double noundef 2.000000e+00) #7
  %851 = fptrunc double %850 to float
  %852 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 84
  %853 = load ptr, ptr %852, align 8, !tbaa !28
  store float %851, ptr %853, align 4, !tbaa !27
  %854 = load float, ptr %9, align 4, !tbaa !27
  %855 = load i32, ptr %14, align 4, !tbaa !13
  %856 = sitofp i32 %855 to float
  %857 = fdiv float %854, %856
  %858 = fpext float %857 to double
  %859 = load float, ptr %10, align 4, !tbaa !27
  %860 = load i32, ptr %14, align 4, !tbaa !13
  %861 = sitofp i32 %860 to float
  %862 = fdiv float %859, %861
  %863 = fpext float %862 to double
  %864 = load float, ptr %11, align 4, !tbaa !27
  %865 = load i32, ptr %14, align 4, !tbaa !13
  %866 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 46
  %867 = load i32, ptr %866, align 4, !tbaa !22
  %868 = mul nsw i32 %865, %867
  %869 = sitofp i32 %868 to float
  %870 = fdiv float %864, %869
  %871 = fpext float %870 to double
  %872 = load float, ptr %12, align 4, !tbaa !27
  %873 = load i32, ptr %14, align 4, !tbaa !13
  %874 = sitofp i32 %873 to float
  %875 = fdiv float %872, %874
  %876 = fpext float %875 to double
  %877 = load float, ptr %13, align 4, !tbaa !27
  %878 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 11
  %879 = load i32, ptr %878, align 8, !tbaa !19
  %880 = load i32, ptr %3, align 4, !tbaa !13
  %881 = mul nsw i32 %879, %880
  %882 = getelementptr inbounds %struct.layer, ptr %0, i32 0, i32 23
  %883 = load i32, ptr %882, align 8, !tbaa !32
  %884 = mul nsw i32 %881, %883
  %885 = sitofp i32 %884 to float
  %886 = fdiv float %877, %885
  %887 = fpext float %886 to double
  %888 = load i32, ptr %14, align 4, !tbaa !13
  %889 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %858, double noundef %863, double noundef %871, double noundef %876, double noundef %887, i32 noundef %888)
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %890

890:                                              ; preds = %840, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #7
  ret void

891:                                              ; preds = %830
  unreachable
}

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

; 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) #3

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #6

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

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

declare float @box_rmse(<2 x float>, <2 x float>, <2 x float>, <2 x float>) #4

; Function Attrs: nounwind
declare i32 @rand() #5

; Function Attrs: nounwind
declare double @sqrt(double noundef) #5

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

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

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { 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 #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "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 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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 136}
!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 = !{!7, !7, i64 0}
!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 208}
!21 = !{!6, !7, i64 84}
!22 = !{!6, !7, i64 212}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!16, !7, i64 32}
!27 = !{!11, !11, i64 0}
!28 = !{!6, !10, i64 392}
!29 = !{!6, !10, i64 520}
!30 = !{!6, !7, i64 216}
!31 = !{!16, !10, i64 0}
!32 = !{!6, !7, i64 120}
!33 = !{!6, !11, i64 292}
!34 = distinct !{!34, !24}
!35 = !{!6, !11, i64 296}
!36 = distinct !{!36, !24}
!37 = !{!38, !11, i64 0}
!38 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12}
!39 = !{!38, !11, i64 4}
!40 = !{!6, !7, i64 152}
!41 = !{!38, !11, i64 8}
!42 = !{!38, !11, i64 12}
!43 = distinct !{!43, !24}
!44 = !{!6, !7, i64 76}
!45 = !{!6, !7, i64 304}
!46 = !{!16, !10, i64 56}
!47 = !{!6, !11, i64 288}
!48 = !{!6, !7, i64 224}
!49 = !{!6, !11, i64 284}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}


; 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.3 = external hidden unnamed_addr constant [86 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: nounwind uwtable
define dso_local void @forward_detection_layer(ptr nocapture noundef readonly byval(%struct.layer) align 8 %0, ptr nocapture noundef readonly byval(%struct.network_state) align 8 %1) local_unnamed_addr #1 {
  %3 = getelementptr inbounds i8, ptr %0, i64 136
  %4 = load i32, ptr %3, align 8
  %5 = mul i32 %4, %4
  %6 = getelementptr inbounds i8, ptr %0, i64 528
  %7 = load ptr, ptr %6, align 8
  %8 = getelementptr inbounds i8, ptr %1, i64 8
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %0, i64 88
  %11 = load i32, ptr %10, align 8, !tbaa !13
  %12 = getelementptr inbounds i8, ptr %0, i64 72
  %13 = load i32, ptr %12, align 8, !tbaa !16
  %14 = mul nsw i32 %13, %11
  %15 = sext i32 %14 to i64
  %16 = shl nsw i64 %15, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %7, ptr align 4 %9, i64 %16, i1 false)
  %17 = getelementptr inbounds i8, ptr %0, i64 208
  %18 = load i32, ptr %17, align 8, !tbaa !17
  %.not = icmp ne i32 %18, 0
  %19 = icmp sgt i32 %13, 0
  %or.cond = select i1 %.not, i1 %19, i1 false
  br i1 %or.cond, label %.lr.ph212, label %.loopexit

.lr.ph212:                                        ; preds = %2
  %.not275 = icmp eq i32 %4, 0
  %20 = getelementptr inbounds i8, ptr %0, i64 212
  %21 = load i32, ptr %20, align 4
  br i1 %.not275, label %.loopexit, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %.lr.ph212
  %22 = getelementptr inbounds i8, ptr %0, i64 84
  %23 = load i32, ptr %22, align 4, !tbaa !18
  %24 = sext i32 %21 to i64
  %umax = tail call i32 @llvm.umax.i32(i32 %5, i32 1)
  %25 = sext i32 %23 to i64
  %wide.trip.count284 = zext nneg i32 %13 to i64
  %wide.trip.count = zext i32 %umax to i64
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %._crit_edge.us
  %indvars.iv281 = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvars.iv.next282, %._crit_edge.us ]
  %26 = mul nsw i64 %indvars.iv281, %25
  %27 = getelementptr inbounds float, ptr %7, i64 %26
  br label %28

28:                                               ; preds = %.lr.ph.us, %28
  %indvars.iv = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next, %28 ]
  %29 = mul nsw i64 %indvars.iv, %24
  %30 = getelementptr inbounds float, ptr %27, i64 %29
  tail call void @softmax(ptr noundef %30, i32 noundef %21, float noundef 1.000000e+00, ptr noundef %30) #9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %28, !llvm.loop !19

._crit_edge.us:                                   ; preds = %28
  %indvars.iv.next282 = add nuw nsw i64 %indvars.iv281, 1
  %exitcond285.not = icmp eq i64 %indvars.iv.next282, %wide.trip.count284
  br i1 %exitcond285.not, label %.loopexit, label %.lr.ph.us, !llvm.loop !21

.loopexit:                                        ; preds = %._crit_edge.us, %.lr.ph212, %2
  %31 = getelementptr inbounds i8, ptr %1, i64 32
  %32 = load i32, ptr %31, align 8, !tbaa !22
  %.not196 = icmp eq i32 %32, 0
  br i1 %.not196, label %312, label %33

33:                                               ; preds = %.loopexit
  %34 = getelementptr inbounds i8, ptr %0, i64 392
  %35 = load ptr, ptr %34, align 8
  store float 0.000000e+00, ptr %35, align 4, !tbaa !23
  %36 = getelementptr inbounds i8, ptr %0, i64 84
  %37 = load i32, ptr %36, align 4, !tbaa !18
  %38 = mul nsw i32 %13, %37
  %39 = getelementptr inbounds i8, ptr %0, i64 520
  %40 = load ptr, ptr %39, align 8
  %41 = sext i32 %38 to i64
  %42 = shl nsw i64 %41, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %40, i8 0, i64 %42, i1 false)
  br i1 %19, label %.lr.ph258, label %.._crit_edge259_crit_edge

.._crit_edge259_crit_edge:                        ; preds = %33
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 212
  %.pre312 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !24
  %.phi.trans.insert313 = getelementptr inbounds i8, ptr %0, i64 120
  %.pre314 = load i32, ptr %.phi.trans.insert313, align 8, !tbaa !25
  br label %._crit_edge259

.lr.ph258:                                        ; preds = %33
  %.not276 = icmp eq i32 %4, 0
  %43 = getelementptr inbounds i8, ptr %0, i64 216
  %44 = load i32, ptr %43, align 8
  %45 = getelementptr inbounds i8, ptr %0, i64 212
  %46 = load i32, ptr %45, align 4
  %47 = load ptr, ptr %1, align 8
  %48 = getelementptr inbounds i8, ptr %0, i64 120
  %49 = load i32, ptr %48, align 8
  %50 = icmp sgt i32 %49, 0
  %51 = mul nsw i32 %46, %5
  %52 = getelementptr inbounds i8, ptr %0, i64 292
  %53 = load float, ptr %52, align 4
  %54 = fpext float %53 to double
  %55 = icmp sgt i32 %46, 0
  %56 = getelementptr inbounds i8, ptr %0, i64 296
  %57 = load float, ptr %56, align 8
  %58 = fpext float %57 to double
  %59 = sext i32 %46 to i64
  %60 = sitofp i32 %4 to float
  %61 = getelementptr inbounds i8, ptr %0, i64 152
  %62 = load i32, ptr %61, align 8
  %.not205 = icmp eq i32 %62, 0
  %63 = getelementptr inbounds i8, ptr %0, i64 76
  %64 = load i32, ptr %63, align 4
  %.not198 = icmp eq i32 %64, 0
  %65 = getelementptr inbounds i8, ptr %0, i64 304
  %66 = load i32, ptr %65, align 8
  %.not199 = icmp eq i32 %66, 0
  %67 = getelementptr inbounds i8, ptr %1, i64 56
  %68 = load ptr, ptr %67, align 8
  %69 = fneg double %54
  %70 = getelementptr inbounds i8, ptr %0, i64 288
  %71 = load float, ptr %70, align 8
  %72 = fpext float %71 to double
  %73 = getelementptr inbounds i8, ptr %0, i64 224
  %74 = load i32, ptr %73, align 8
  %.not202 = icmp eq i32 %74, 0
  %75 = getelementptr inbounds i8, ptr %0, i64 284
  %76 = load float, ptr %75, align 4
  %invariant.gep = getelementptr i8, ptr %47, i64 8
  %invariant.gep248 = getelementptr i8, ptr %47, i64 12
  %77 = fpext float %76 to double
  br i1 %.not276, label %._crit_edge259, label %.lr.ph240.us.preheader

.lr.ph240.us.preheader:                           ; preds = %.lr.ph258
  %78 = add nsw i32 %46, %49
  %79 = mul nsw i32 %78, %5
  %80 = add nsw i32 %44, 1
  %81 = add nsw i32 %80, %46
  %82 = sext i32 %44 to i64
  %83 = sext i32 %81 to i64
  %84 = sext i32 %49 to i64
  %umax304 = tail call i32 @llvm.umax.i32(i32 %5, i32 1)
  %85 = sext i32 %37 to i64
  %86 = sext i32 %79 to i64
  %87 = sext i32 %5 to i64
  %wide.trip.count310 = zext nneg i32 %13 to i64
  %wide.trip.count305 = zext i32 %umax304 to i64
  %wide.trip.count289 = zext nneg i32 %49 to i64
  %wide.trip.count294 = zext nneg i32 %46 to i64
  %invariant.gep316 = getelementptr i8, ptr %47, i64 4
  %wide.trip.count299 = zext nneg i32 %49 to i64
  %88 = insertelement <2 x float> poison, float %60, i64 0
  %89 = shufflevector <2 x float> %88, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.lr.ph240.us

.lr.ph240.us:                                     ; preds = %.lr.ph240.us.preheader, %._crit_edge241.us
  %indvars.iv307 = phi i64 [ 0, %.lr.ph240.us.preheader ], [ %indvars.iv.next308, %._crit_edge241.us ]
  %.0162255.us = phi float [ 0.000000e+00, %.lr.ph240.us.preheader ], [ %.2164.us, %._crit_edge241.us ]
  %.0165254.us = phi float [ 0.000000e+00, %.lr.ph240.us.preheader ], [ %.4.us, %._crit_edge241.us ]
  %.0168253.us = phi float [ 0.000000e+00, %.lr.ph240.us.preheader ], [ %.3171.us, %._crit_edge241.us ]
  %.0172252.us = phi float [ 0.000000e+00, %.lr.ph240.us.preheader ], [ %.2174.us, %._crit_edge241.us ]
  %.0175251.us = phi float [ 0.000000e+00, %.lr.ph240.us.preheader ], [ %.2177.lcssa.us, %._crit_edge241.us ]
  %.0178250.us = phi i32 [ 0, %.lr.ph240.us.preheader ], [ %.2180.us, %._crit_edge241.us ]
  %90 = mul nsw i64 %indvars.iv307, %85
  %91 = mul nuw nsw i64 %indvars.iv307, %87
  %92 = add nsw i64 %90, %86
  %93 = trunc i64 %90 to i32
  %94 = add i32 %51, %93
  %95 = getelementptr float, ptr %7, i64 %92
  %96 = trunc nsw i64 %92 to i32
  %97 = trunc nsw i64 %90 to i32
  br label %98

98:                                               ; preds = %.lr.ph240.us, %269
  %indvars.iv301 = phi i64 [ 0, %.lr.ph240.us ], [ %indvars.iv.next302, %269 ]
  %.1163237.us = phi float [ %.0162255.us, %.lr.ph240.us ], [ %.2164.us, %269 ]
  %.1166236.us = phi float [ %.0165254.us, %.lr.ph240.us ], [ %.4.us, %269 ]
  %.1169235.us = phi float [ %.0168253.us, %.lr.ph240.us ], [ %.3171.us, %269 ]
  %.1173234.us = phi float [ %.0172252.us, %.lr.ph240.us ], [ %.2174.us, %269 ]
  %.1176233.us = phi float [ %.0175251.us, %.lr.ph240.us ], [ %.2177.lcssa.us, %269 ]
  %.1179232.us = phi i32 [ %.0178250.us, %.lr.ph240.us ], [ %.2180.us, %269 ]
  %99 = add nuw nsw i64 %indvars.iv301, %91
  %100 = mul nsw i64 %99, %83
  %101 = getelementptr inbounds float, ptr %47, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !23
  %103 = fptosi float %102 to i32
  br i1 %50, label %.lr.ph.us267, label %._crit_edge.us268

._crit_edge.us268:                                ; preds = %270, %98
  %.2177.lcssa.us = phi float [ %.1176233.us, %98 ], [ %287, %270 ]
  %.not197.us = icmp eq i32 %103, 0
  br i1 %.not197.us, label %269, label %104

104:                                              ; preds = %._crit_edge.us268
  %105 = mul nsw i64 %indvars.iv301, %59
  %106 = add nsw i64 %105, %90
  br i1 %55, label %.lr.ph219.us, label %._crit_edge220.us

._crit_edge220.us:                                ; preds = %248, %104
  %.2170.lcssa.us = phi float [ %.1169235.us, %104 ], [ %268, %248 ]
  %.2167.lcssa.us = phi float [ %.1166236.us, %104 ], [ %.3.us, %248 ]
  %107 = getelementptr inbounds i8, ptr %101, i64 4
  %108 = getelementptr inbounds float, ptr %107, i64 %59
  %109 = tail call { <2 x float>, <2 x float> } @float_to_box(ptr noundef nonnull %108) #9
  %110 = extractvalue { <2 x float>, <2 x float> } %109, 0
  %111 = extractvalue { <2 x float>, <2 x float> } %109, 1
  %112 = fdiv <2 x float> %110, %89
  br i1 %50, label %.lr.ph228.us, label %._crit_edge229.us

._crit_edge229.us:                                ; preds = %247, %._crit_edge220.us
  %.0185.lcssa.us = phi i32 [ -1, %._crit_edge220.us ], [ %.1186.us, %247 ]
  br i1 %.not198, label %118, label %113

113:                                              ; preds = %._crit_edge229.us
  %shift = shufflevector <2 x float> %111, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %114 = fmul <2 x float> %111, %shift
  %115 = extractelement <2 x float> %114, i64 0
  %116 = fpext float %115 to double
  %117 = fcmp olt double %116, 1.000000e-01
  %..us = zext i1 %117 to i32
  br label %118

118:                                              ; preds = %113, %._crit_edge229.us
  %.2187.us = phi i32 [ %.0185.lcssa.us, %._crit_edge229.us ], [ %..us, %113 ]
  br i1 %.not199, label %125, label %119

119:                                              ; preds = %118
  %120 = load i32, ptr %68, align 4, !tbaa !26
  %121 = icmp slt i32 %120, 64000
  br i1 %121, label %122, label %125

122:                                              ; preds = %119
  %123 = tail call i32 @rand() #9
  %124 = srem i32 %123, %49
  br label %125

125:                                              ; preds = %122, %119, %118
  %.3188.us = phi i32 [ %124, %122 ], [ %.2187.us, %119 ], [ %.2187.us, %118 ]
  %126 = trunc i64 %indvars.iv301 to i32
  %127 = mul i32 %49, %126
  %128 = add nsw i32 %127, %.3188.us
  %129 = mul nsw i32 %128, %44
  %130 = add nsw i32 %129, %96
  %131 = add nsw i64 %100, 1
  %132 = add nsw i64 %131, %59
  %133 = sext i32 %130 to i64
  %134 = getelementptr inbounds float, ptr %7, i64 %133
  %135 = tail call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %134) #9
  %136 = extractvalue { <2 x float>, <2 x float> } %135, 0
  %137 = extractvalue { <2 x float>, <2 x float> } %135, 1
  %138 = fdiv <2 x float> %136, %89
  %139 = fmul <2 x float> %137, %137
  %.sroa.8.0.us = select i1 %.not205, <2 x float> %137, <2 x float> %139
  %140 = tail call float @box_iou(<2 x float> %138, <2 x float> %.sroa.8.0.us, <2 x float> %112, <2 x float> %111) #9
  %141 = add i32 %.3188.us, %97
  %142 = add i32 %141, %51
  %143 = add i32 %142, %127
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds float, ptr %7, i64 %144
  %146 = load float, ptr %145, align 4, !tbaa !23
  %147 = fpext float %146 to double
  %square.us = fmul double %147, %147
  %148 = load float, ptr %35, align 4, !tbaa !23
  %149 = fpext float %148 to double
  %150 = tail call double @llvm.fmuladd.f64(double %69, double %square.us, double %149)
  %151 = fptrunc double %150 to float
  store float %151, ptr %35, align 4, !tbaa !23
  %152 = load float, ptr %145, align 4, !tbaa !23
  %153 = fsub float 1.000000e+00, %152
  %154 = fpext float %153 to double
  %square201.us = fmul double %154, %154
  %155 = fpext float %151 to double
  %156 = tail call double @llvm.fmuladd.f64(double %72, double %square201.us, double %155)
  %157 = fptrunc double %156 to float
  store float %157, ptr %35, align 4, !tbaa !23
  %158 = load float, ptr %145, align 4, !tbaa !23
  %159 = fadd float %.1173234.us, %158
  %160 = fpext float %158 to double
  %161 = fsub double 1.000000e+00, %160
  %162 = fmul double %161, %72
  %163 = fptrunc double %162 to float
  %164 = getelementptr inbounds float, ptr %40, i64 %144
  store float %163, ptr %164, align 4, !tbaa !23
  br i1 %.not202, label %169, label %165

165:                                              ; preds = %125
  %166 = load float, ptr %145, align 4, !tbaa !23
  %167 = fsub float %140, %166
  %168 = fmul float %71, %167
  store float %168, ptr %164, align 4, !tbaa !23
  br label %169

169:                                              ; preds = %165, %125
  %170 = getelementptr inbounds float, ptr %47, i64 %132
  %171 = load float, ptr %170, align 4, !tbaa !23
  %172 = load float, ptr %134, align 4, !tbaa !23
  %173 = fsub float %171, %172
  %174 = fmul float %76, %173
  %175 = getelementptr inbounds float, ptr %40, i64 %133
  store float %174, ptr %175, align 4, !tbaa !23
  %176 = getelementptr i8, ptr %170, i64 4
  %177 = load float, ptr %176, align 4, !tbaa !23
  %178 = add nsw i32 %130, 1
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds float, ptr %7, i64 %179
  %181 = load float, ptr %180, align 4, !tbaa !23
  %182 = fsub float %177, %181
  %183 = fmul float %76, %182
  %184 = getelementptr inbounds float, ptr %40, i64 %179
  store float %183, ptr %184, align 4, !tbaa !23
  %gep.us = getelementptr float, ptr %invariant.gep, i64 %132
  %185 = load float, ptr %gep.us, align 4, !tbaa !23
  %186 = add nsw i32 %130, 2
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds float, ptr %7, i64 %187
  %189 = load float, ptr %188, align 4, !tbaa !23
  %190 = fsub float %185, %189
  %191 = fmul float %76, %190
  %192 = getelementptr inbounds float, ptr %40, i64 %187
  store float %191, ptr %192, align 4, !tbaa !23
  %gep249.us = getelementptr float, ptr %invariant.gep248, i64 %132
  %193 = load float, ptr %gep249.us, align 4, !tbaa !23
  %194 = add nsw i32 %130, 3
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds float, ptr %7, i64 %195
  %197 = load float, ptr %196, align 4, !tbaa !23
  %198 = fsub float %193, %197
  %199 = fmul float %76, %198
  %200 = getelementptr inbounds float, ptr %40, i64 %195
  store float %199, ptr %200, align 4, !tbaa !23
  br i1 %.not205, label %218, label %201

201:                                              ; preds = %169
  %202 = load float, ptr %gep.us, align 4, !tbaa !23
  %203 = fpext float %202 to double
  %204 = tail call double @sqrt(double noundef %203) #9
  %205 = load float, ptr %188, align 4, !tbaa !23
  %206 = fpext float %205 to double
  %207 = fsub double %204, %206
  %208 = fmul double %207, %77
  %209 = fptrunc double %208 to float
  store float %209, ptr %192, align 4, !tbaa !23
  %210 = load float, ptr %gep249.us, align 4, !tbaa !23
  %211 = fpext float %210 to double
  %212 = tail call double @sqrt(double noundef %211) #9
  %213 = load float, ptr %196, align 4, !tbaa !23
  %214 = fpext float %213 to double
  %215 = fsub double %212, %214
  %216 = fmul double %215, %77
  %217 = fptrunc double %216 to float
  store float %217, ptr %200, align 4, !tbaa !23
  br label %218

218:                                              ; preds = %201, %169
  %219 = fsub float 1.000000e+00, %140
  %220 = fpext float %219 to double
  %square204.us = fmul double %220, %220
  %221 = load float, ptr %35, align 4, !tbaa !23
  %222 = fpext float %221 to double
  %223 = fadd double %square204.us, %222
  %224 = fptrunc double %223 to float
  store float %224, ptr %35, align 4, !tbaa !23
  %225 = fadd float %.1163237.us, %140
  %226 = add nsw i32 %.1179232.us, 1
  br label %269

227:                                              ; preds = %.lr.ph228.us, %247
  %indvars.iv296 = phi i64 [ 0, %.lr.ph228.us ], [ %indvars.iv.next297, %247 ]
  %.0181225.us = phi float [ 2.000000e+01, %.lr.ph228.us ], [ %.1182.us, %247 ]
  %.0183224.us = phi float [ 0.000000e+00, %.lr.ph228.us ], [ %.1184.us, %247 ]
  %.0185223.us = phi i32 [ -1, %.lr.ph228.us ], [ %.1186.us, %247 ]
  %228 = add nuw nsw i64 %290, %indvars.iv296
  %229 = mul nsw i64 %228, %82
  %230 = getelementptr float, ptr %95, i64 %229
  %231 = tail call { <2 x float>, <2 x float> } @float_to_box(ptr noundef %230) #9
  %232 = extractvalue { <2 x float>, <2 x float> } %231, 0
  %233 = extractvalue { <2 x float>, <2 x float> } %231, 1
  %234 = fdiv <2 x float> %232, %89
  %235 = fmul <2 x float> %233, %233
  %.sroa.9.0.us = select i1 %.not205, <2 x float> %233, <2 x float> %235
  %236 = tail call float @box_iou(<2 x float> %234, <2 x float> %.sroa.9.0.us, <2 x float> %112, <2 x float> %111) #9
  %237 = tail call float @box_rmse(<2 x float> %234, <2 x float> %.sroa.9.0.us, <2 x float> %112, <2 x float> %111) #9
  %238 = fcmp ogt float %.0183224.us, 0.000000e+00
  %239 = fcmp ogt float %236, 0.000000e+00
  %or.cond.us = select i1 %238, i1 true, i1 %239
  %240 = trunc nuw nsw i64 %indvars.iv296 to i32
  br i1 %or.cond.us, label %244, label %241

241:                                              ; preds = %227
  %242 = fcmp olt float %237, %.0181225.us
  br i1 %242, label %243, label %247

243:                                              ; preds = %241
  br label %247

244:                                              ; preds = %227
  %245 = fcmp ogt float %236, %.0183224.us
  br i1 %245, label %246, label %247

246:                                              ; preds = %244
  br label %247

247:                                              ; preds = %246, %244, %243, %241
  %.1186.us = phi i32 [ %240, %246 ], [ %.0185223.us, %244 ], [ %240, %243 ], [ %.0185223.us, %241 ]
  %.1184.us = phi float [ %236, %246 ], [ %.0183224.us, %244 ], [ %.0183224.us, %243 ], [ %.0183224.us, %241 ]
  %.1182.us = phi float [ %.0181225.us, %246 ], [ %.0181225.us, %244 ], [ %237, %243 ], [ %.0181225.us, %241 ]
  %indvars.iv.next297 = add nuw nsw i64 %indvars.iv296, 1
  %exitcond300.not = icmp eq i64 %indvars.iv.next297, %wide.trip.count299
  br i1 %exitcond300.not, label %._crit_edge229.us, label %227, !llvm.loop !27

248:                                              ; preds = %.lr.ph219.us, %248
  %indvars.iv291 = phi i64 [ 0, %.lr.ph219.us ], [ %indvars.iv.next292, %248 ]
  %.2167216.us = phi float [ %.1166236.us, %.lr.ph219.us ], [ %.3.us, %248 ]
  %.2170215.us = phi float [ %.1169235.us, %.lr.ph219.us ], [ %268, %248 ]
  %249 = getelementptr float, ptr %gep, i64 %indvars.iv291
  %250 = load float, ptr %249, align 4, !tbaa !23
  %251 = add nsw i64 %106, %indvars.iv291
  %252 = getelementptr inbounds float, ptr %7, i64 %251
  %253 = load float, ptr %252, align 4, !tbaa !23
  %254 = fsub float %250, %253
  %255 = fmul float %57, %254
  %256 = getelementptr inbounds float, ptr %40, i64 %251
  store float %255, ptr %256, align 4, !tbaa !23
  %257 = load float, ptr %249, align 4, !tbaa !23
  %258 = load float, ptr %252, align 4, !tbaa !23
  %259 = fsub float %257, %258
  %260 = fpext float %259 to double
  %square206.us = fmul double %260, %260
  %261 = load float, ptr %35, align 4, !tbaa !23
  %262 = fpext float %261 to double
  %263 = tail call double @llvm.fmuladd.f64(double %58, double %square206.us, double %262)
  %264 = fptrunc double %263 to float
  store float %264, ptr %35, align 4, !tbaa !23
  %265 = load float, ptr %249, align 4, !tbaa !23
  %266 = fcmp une float %265, 0.000000e+00
  %.pre = load float, ptr %252, align 4, !tbaa !23
  %267 = fadd float %.2167216.us, %.pre
  %.3.us = select i1 %266, float %267, float %.2167216.us
  %268 = fadd float %.2170215.us, %.pre
  %indvars.iv.next292 = add nuw nsw i64 %indvars.iv291, 1
  %exitcond295.not = icmp eq i64 %indvars.iv.next292, %wide.trip.count294
  br i1 %exitcond295.not, label %._crit_edge220.us, label %248, !llvm.loop !28

269:                                              ; preds = %218, %._crit_edge.us268
  %.2180.us = phi i32 [ %226, %218 ], [ %.1179232.us, %._crit_edge.us268 ]
  %.2174.us = phi float [ %159, %218 ], [ %.1173234.us, %._crit_edge.us268 ]
  %.3171.us = phi float [ %.2170.lcssa.us, %218 ], [ %.1169235.us, %._crit_edge.us268 ]
  %.4.us = phi float [ %.2167.lcssa.us, %218 ], [ %.1166236.us, %._crit_edge.us268 ]
  %.2164.us = phi float [ %225, %218 ], [ %.1163237.us, %._crit_edge.us268 ]
  %indvars.iv.next302 = add nuw nsw i64 %indvars.iv301, 1
  %exitcond306.not = icmp eq i64 %indvars.iv.next302, %wide.trip.count305
  br i1 %exitcond306.not, label %._crit_edge241.us, label %98, !llvm.loop !29

270:                                              ; preds = %.lr.ph.us267, %270
  %indvars.iv286 = phi i64 [ 0, %.lr.ph.us267 ], [ %indvars.iv.next287, %270 ]
  %.2177213.us = phi float [ %.1176233.us, %.lr.ph.us267 ], [ %287, %270 ]
  %271 = trunc nuw nsw i64 %indvars.iv286 to i32
  %272 = add i32 %94, %271
  %273 = add i32 %272, %289
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds float, ptr %7, i64 %274
  %276 = load float, ptr %275, align 4, !tbaa !23
  %277 = fsub float 0.000000e+00, %276
  %278 = fmul float %53, %277
  %279 = getelementptr inbounds float, ptr %40, i64 %274
  store float %278, ptr %279, align 4, !tbaa !23
  %280 = load float, ptr %275, align 4, !tbaa !23
  %281 = fpext float %280 to double
  %square207.us = fmul double %281, %281
  %282 = load float, ptr %35, align 4, !tbaa !23
  %283 = fpext float %282 to double
  %284 = tail call double @llvm.fmuladd.f64(double %54, double %square207.us, double %283)
  %285 = fptrunc double %284 to float
  store float %285, ptr %35, align 4, !tbaa !23
  %286 = load float, ptr %275, align 4, !tbaa !23
  %287 = fadd float %.2177213.us, %286
  %indvars.iv.next287 = add nuw nsw i64 %indvars.iv286, 1
  %exitcond290.not = icmp eq i64 %indvars.iv.next287, %wide.trip.count289
  br i1 %exitcond290.not, label %._crit_edge.us268, label %270, !llvm.loop !30

.lr.ph.us267:                                     ; preds = %98
  %288 = trunc i64 %indvars.iv301 to i32
  %289 = mul i32 %49, %288
  br label %270

.lr.ph219.us:                                     ; preds = %104
  %gep = getelementptr float, ptr %invariant.gep316, i64 %100
  br label %248

.lr.ph228.us:                                     ; preds = %._crit_edge220.us
  %290 = mul nuw nsw i64 %indvars.iv301, %84
  br label %227

._crit_edge241.us:                                ; preds = %269
  %indvars.iv.next308 = add nuw nsw i64 %indvars.iv307, 1
  %exitcond311.not = icmp eq i64 %indvars.iv.next308, %wide.trip.count310
  br i1 %exitcond311.not, label %._crit_edge259, label %.lr.ph240.us, !llvm.loop !31

._crit_edge259:                                   ; preds = %._crit_edge241.us, %.lr.ph258, %.._crit_edge259_crit_edge
  %291 = phi i32 [ %.pre314, %.._crit_edge259_crit_edge ], [ %49, %.lr.ph258 ], [ %49, %._crit_edge241.us ]
  %292 = phi i32 [ %.pre312, %.._crit_edge259_crit_edge ], [ %46, %.lr.ph258 ], [ %46, %._crit_edge241.us ]
  %.0178.lcssa = phi i32 [ 0, %.._crit_edge259_crit_edge ], [ 0, %.lr.ph258 ], [ %.2180.us, %._crit_edge241.us ]
  %.0175.lcssa = phi float [ 0.000000e+00, %.._crit_edge259_crit_edge ], [ 0.000000e+00, %.lr.ph258 ], [ %.2177.lcssa.us, %._crit_edge241.us ]
  %.0172.lcssa = phi float [ 0.000000e+00, %.._crit_edge259_crit_edge ], [ 0.000000e+00, %.lr.ph258 ], [ %.2174.us, %._crit_edge241.us ]
  %.0168.lcssa = phi float [ 0.000000e+00, %.._crit_edge259_crit_edge ], [ 0.000000e+00, %.lr.ph258 ], [ %.3171.us, %._crit_edge241.us ]
  %.0165.lcssa = phi float [ 0.000000e+00, %.._crit_edge259_crit_edge ], [ 0.000000e+00, %.lr.ph258 ], [ %.4.us, %._crit_edge241.us ]
  %.0162.lcssa = phi float [ 0.000000e+00, %.._crit_edge259_crit_edge ], [ 0.000000e+00, %.lr.ph258 ], [ %.2164.us, %._crit_edge241.us ]
  %293 = tail call float @mag_array(ptr noundef %40, i32 noundef %14) #9
  %294 = fmul float %293, %293
  store float %294, ptr %35, align 4, !tbaa !23
  %295 = sitofp i32 %.0178.lcssa to float
  %296 = fdiv float %.0162.lcssa, %295
  %297 = fpext float %296 to double
  %298 = fdiv float %.0165.lcssa, %295
  %299 = fpext float %298 to double
  %300 = mul nsw i32 %292, %.0178.lcssa
  %301 = sitofp i32 %300 to float
  %302 = fdiv float %.0168.lcssa, %301
  %303 = fpext float %302 to double
  %304 = fdiv float %.0172.lcssa, %295
  %305 = fpext float %304 to double
  %306 = mul nsw i32 %13, %5
  %307 = mul nsw i32 %306, %291
  %308 = sitofp i32 %307 to float
  %309 = fdiv float %.0175.lcssa, %308
  %310 = fpext float %309 to double
  %311 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %297, double noundef %299, double noundef %303, double noundef %305, double noundef %310, i32 noundef %.0178.lcssa)
  br label %312

312:                                              ; preds = %._crit_edge259, %.loopexit
  ret void
}

; 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) #2

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

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

declare float @box_rmse(<2 x float>, <2 x float>, <2 x float>, <2 x float>) local_unnamed_addr #3

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #5

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #6

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #8

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { mustprogress nofree nounwind willreturn memory(write) "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 #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { 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 8}
!6 = !{!"network_state", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !11, i64 40}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"network", !7, i64 0, !10, i64 8, !10, i64 12, !7, i64 16, !12, i64 24, !10, i64 28, !12, i64 32, !12, i64 36, !7, i64 40, !10, i64 48, !7, i64 56, !10, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !7, i64 96, !7, i64 104, !10, i64 112, !10, i64 116, !10, i64 120, !12, i64 124, !12, i64 128, !12, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !12, i64 160, !12, i64 164, !12, i64 168, !12, i64 172, !12, i64 176, !10, i64 180, !7, i64 184}
!12 = !{!"float", !8, i64 0}
!13 = !{!14, !10, i64 88}
!14 = !{!"layer", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !12, i64 180, !12, i64 184, !12, i64 188, !12, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !10, i64 248, !10, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !10, i64 268, !12, i64 272, !12, i64 276, !12, i64 280, !12, i64 284, !12, i64 288, !12, i64 292, !12, i64 296, !10, i64 300, !10, i64 304, !12, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !12, i64 328, !12, i64 332, !12, i64 336, !7, i64 344, !7, i64 352, !7, i64 360, !7, i64 368, !7, i64 376, !7, i64 384, !7, i64 392, !7, i64 400, !7, i64 408, !7, i64 416, !7, i64 424, !7, i64 432, !7, i64 440, !7, i64 448, !7, i64 456, !7, i64 464, !7, i64 472, !7, i64 480, !7, i64 488, !7, i64 496, !7, i64 504, !7, i64 512, !7, i64 520, !7, i64 528, !7, i64 536, !7, i64 544, !7, i64 552, !7, i64 560, !7, i64 568, !7, i64 576, !7, i64 584, !7, i64 592, !7, i64 600, !7, i64 608, !7, i64 616, !7, i64 624, !7, i64 632, !7, i64 640, !7, i64 648, !7, i64 656, !7, i64 664, !7, i64 672, !7, i64 680, !7, i64 688, !7, i64 696, !7, i64 704, !7, i64 712, !7, i64 720, !7, i64 728, !7, i64 736, !7, i64 744, !7, i64 752, !7, i64 760, !7, i64 768, !7, i64 776, !7, i64 784, !7, i64 792, !15, i64 800}
!15 = !{!"long", !8, i64 0}
!16 = !{!14, !10, i64 72}
!17 = !{!14, !10, i64 208}
!18 = !{!14, !10, i64 84}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = !{!6, !10, i64 32}
!23 = !{!12, !12, i64 0}
!24 = !{!14, !10, i64 212}
!25 = !{!14, !10, i64 120}
!26 = !{!10, !10, i64 0}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}


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