; LLVM IR from 21cmfast/21cmFAST :: src/py21cmfast/src (bubble_helper_progs)

; 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.SimulationOptions = type { i32, i32, float, float, i32, double, double, float, double, i32, i32, double, double, double, double, double, float, double, double, double, double, double, double, double }

@simulation_options_global = external global ptr, align 8

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @check_region(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12) #2 {
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca float, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca float, align 4
  store ptr %0, ptr %14, align 8, !tbaa !5
  store i32 %1, ptr %15, align 4, !tbaa !9
  store i32 %2, ptr %16, align 4, !tbaa !9
  store float %3, ptr %17, align 4, !tbaa !11
  store i32 %4, ptr %18, align 4, !tbaa !9
  store i32 %5, ptr %19, align 4, !tbaa !9
  store i32 %6, ptr %20, align 4, !tbaa !9
  store i32 %7, ptr %21, align 4, !tbaa !9
  store i32 %8, ptr %22, align 4, !tbaa !9
  store i32 %9, ptr %23, align 4, !tbaa !9
  store i32 %10, ptr %24, align 4, !tbaa !9
  store i32 %11, ptr %25, align 4, !tbaa !9
  store i32 %12, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  %42 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %42, ptr %27, align 4, !tbaa !9
  br label %43

43:                                               ; preds = %456, %13
  %44 = load i32, ptr %27, align 4, !tbaa !9
  %45 = load i32, ptr %22, align 4, !tbaa !9
  %46 = icmp sle i32 %44, %45
  br i1 %46, label %47, label %459

47:                                               ; preds = %43
  %48 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %48, ptr %28, align 4, !tbaa !9
  br label %49

49:                                               ; preds = %452, %47
  %50 = load i32, ptr %28, align 4, !tbaa !9
  %51 = load i32, ptr %24, align 4, !tbaa !9
  %52 = icmp sle i32 %50, %51
  br i1 %52, label %53, label %455

53:                                               ; preds = %49
  %54 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %54, ptr %29, align 4, !tbaa !9
  br label %55

55:                                               ; preds = %448, %53
  %56 = load i32, ptr %29, align 4, !tbaa !9
  %57 = load i32, ptr %26, align 4, !tbaa !9
  %58 = icmp sle i32 %56, %57
  br i1 %58, label %59, label %451

59:                                               ; preds = %55
  %60 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %60, ptr %30, align 4, !tbaa !9
  %61 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %61, ptr %31, align 4, !tbaa !9
  %62 = load i32, ptr %29, align 4, !tbaa !9
  store i32 %62, ptr %32, align 4, !tbaa !9
  %63 = load i32, ptr %30, align 4, !tbaa !9
  %64 = icmp slt i32 %63, 0
  br i1 %64, label %65, label %69

65:                                               ; preds = %59
  %66 = load i32, ptr %15, align 4, !tbaa !9
  %67 = load i32, ptr %30, align 4, !tbaa !9
  %68 = add nsw i32 %67, %66
  store i32 %68, ptr %30, align 4, !tbaa !9
  br label %78

69:                                               ; preds = %59
  %70 = load i32, ptr %30, align 4, !tbaa !9
  %71 = load i32, ptr %15, align 4, !tbaa !9
  %72 = icmp sge i32 %70, %71
  br i1 %72, label %73, label %77

73:                                               ; preds = %69
  %74 = load i32, ptr %15, align 4, !tbaa !9
  %75 = load i32, ptr %30, align 4, !tbaa !9
  %76 = sub nsw i32 %75, %74
  store i32 %76, ptr %30, align 4, !tbaa !9
  br label %77

77:                                               ; preds = %73, %69
  br label %78

78:                                               ; preds = %77, %65
  %79 = load i32, ptr %31, align 4, !tbaa !9
  %80 = icmp slt i32 %79, 0
  br i1 %80, label %81, label %85

81:                                               ; preds = %78
  %82 = load i32, ptr %15, align 4, !tbaa !9
  %83 = load i32, ptr %31, align 4, !tbaa !9
  %84 = add nsw i32 %83, %82
  store i32 %84, ptr %31, align 4, !tbaa !9
  br label %94

85:                                               ; preds = %78
  %86 = load i32, ptr %31, align 4, !tbaa !9
  %87 = load i32, ptr %15, align 4, !tbaa !9
  %88 = icmp sge i32 %86, %87
  br i1 %88, label %89, label %93

89:                                               ; preds = %85
  %90 = load i32, ptr %15, align 4, !tbaa !9
  %91 = load i32, ptr %31, align 4, !tbaa !9
  %92 = sub nsw i32 %91, %90
  store i32 %92, ptr %31, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %89, %85
  br label %94

94:                                               ; preds = %93, %81
  %95 = load i32, ptr %32, align 4, !tbaa !9
  %96 = icmp slt i32 %95, 0
  br i1 %96, label %97, label %101

97:                                               ; preds = %94
  %98 = load i32, ptr %16, align 4, !tbaa !9
  %99 = load i32, ptr %32, align 4, !tbaa !9
  %100 = add nsw i32 %99, %98
  store i32 %100, ptr %32, align 4, !tbaa !9
  br label %110

101:                                              ; preds = %94
  %102 = load i32, ptr %32, align 4, !tbaa !9
  %103 = load i32, ptr %16, align 4, !tbaa !9
  %104 = icmp sge i32 %102, %103
  br i1 %104, label %105, label %109

105:                                              ; preds = %101
  %106 = load i32, ptr %16, align 4, !tbaa !9
  %107 = load i32, ptr %32, align 4, !tbaa !9
  %108 = sub nsw i32 %107, %106
  store i32 %108, ptr %32, align 4, !tbaa !9
  br label %109

109:                                              ; preds = %105, %101
  br label %110

110:                                              ; preds = %109, %97
  %111 = load ptr, ptr %14, align 8, !tbaa !5
  %112 = load i32, ptr %32, align 4, !tbaa !9
  %113 = sext i32 %112 to i64
  %114 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.SimulationOptions, ptr %114, i32 0, i32 3
  %116 = load float, ptr %115, align 4, !tbaa !13
  %117 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.SimulationOptions, ptr %117, i32 0, i32 0
  %119 = load i32, ptr %118, align 8, !tbaa !16
  %120 = sitofp i32 %119 to float
  %121 = fmul float %116, %120
  %122 = fptosi float %121 to i64
  %123 = load i32, ptr %31, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.SimulationOptions, ptr %125, i32 0, i32 0
  %127 = load i32, ptr %126, align 8, !tbaa !16
  %128 = sext i32 %127 to i64
  %129 = load i32, ptr %30, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = mul nsw i64 %128, %130
  %132 = add nsw i64 %124, %131
  %133 = mul nsw i64 %122, %132
  %134 = add nsw i64 %113, %133
  %135 = getelementptr inbounds float, ptr %111, i64 %134
  %136 = load float, ptr %135, align 4, !tbaa !11
  %137 = fcmp une float %136, 0.000000e+00
  br i1 %137, label %138, label %447

138:                                              ; preds = %110
  %139 = load i32, ptr %18, align 4, !tbaa !9
  %140 = load i32, ptr %30, align 4, !tbaa !9
  %141 = sub nsw i32 %139, %140
  %142 = sitofp i32 %141 to double
  %143 = call double @pow(double noundef %142, double noundef 2.000000e+00) #3
  %144 = fptrunc double %143 to float
  store float %144, ptr %33, align 4, !tbaa !11
  %145 = load i32, ptr %19, align 4, !tbaa !9
  %146 = load i32, ptr %31, align 4, !tbaa !9
  %147 = sub nsw i32 %145, %146
  %148 = sitofp i32 %147 to double
  %149 = call double @pow(double noundef %148, double noundef 2.000000e+00) #3
  %150 = fptrunc double %149 to float
  store float %150, ptr %36, align 4, !tbaa !11
  %151 = load i32, ptr %20, align 4, !tbaa !9
  %152 = load i32, ptr %32, align 4, !tbaa !9
  %153 = sub nsw i32 %151, %152
  %154 = sitofp i32 %153 to double
  %155 = call double @pow(double noundef %154, double noundef 2.000000e+00) #3
  %156 = fptrunc double %155 to float
  store float %156, ptr %39, align 4, !tbaa !11
  %157 = load i32, ptr %18, align 4, !tbaa !9
  %158 = load i32, ptr %30, align 4, !tbaa !9
  %159 = sub nsw i32 %157, %158
  %160 = load i32, ptr %15, align 4, !tbaa !9
  %161 = add nsw i32 %159, %160
  %162 = sitofp i32 %161 to double
  %163 = call double @pow(double noundef %162, double noundef 2.000000e+00) #3
  %164 = fptrunc double %163 to float
  store float %164, ptr %34, align 4, !tbaa !11
  %165 = load i32, ptr %19, align 4, !tbaa !9
  %166 = load i32, ptr %31, align 4, !tbaa !9
  %167 = sub nsw i32 %165, %166
  %168 = load i32, ptr %15, align 4, !tbaa !9
  %169 = add nsw i32 %167, %168
  %170 = sitofp i32 %169 to double
  %171 = call double @pow(double noundef %170, double noundef 2.000000e+00) #3
  %172 = fptrunc double %171 to float
  store float %172, ptr %37, align 4, !tbaa !11
  %173 = load i32, ptr %20, align 4, !tbaa !9
  %174 = load i32, ptr %32, align 4, !tbaa !9
  %175 = sub nsw i32 %173, %174
  %176 = load i32, ptr %16, align 4, !tbaa !9
  %177 = add nsw i32 %175, %176
  %178 = sitofp i32 %177 to double
  %179 = call double @pow(double noundef %178, double noundef 2.000000e+00) #3
  %180 = fptrunc double %179 to float
  store float %180, ptr %40, align 4, !tbaa !11
  %181 = load i32, ptr %18, align 4, !tbaa !9
  %182 = load i32, ptr %30, align 4, !tbaa !9
  %183 = sub nsw i32 %181, %182
  %184 = load i32, ptr %15, align 4, !tbaa !9
  %185 = sub nsw i32 %183, %184
  %186 = sitofp i32 %185 to double
  %187 = call double @pow(double noundef %186, double noundef 2.000000e+00) #3
  %188 = fptrunc double %187 to float
  store float %188, ptr %35, align 4, !tbaa !11
  %189 = load i32, ptr %19, align 4, !tbaa !9
  %190 = load i32, ptr %31, align 4, !tbaa !9
  %191 = sub nsw i32 %189, %190
  %192 = load i32, ptr %15, align 4, !tbaa !9
  %193 = sub nsw i32 %191, %192
  %194 = sitofp i32 %193 to double
  %195 = call double @pow(double noundef %194, double noundef 2.000000e+00) #3
  %196 = fptrunc double %195 to float
  store float %196, ptr %38, align 4, !tbaa !11
  %197 = load i32, ptr %20, align 4, !tbaa !9
  %198 = load i32, ptr %32, align 4, !tbaa !9
  %199 = sub nsw i32 %197, %198
  %200 = load i32, ptr %16, align 4, !tbaa !9
  %201 = sub nsw i32 %199, %200
  %202 = sitofp i32 %201 to double
  %203 = call double @pow(double noundef %202, double noundef 2.000000e+00) #3
  %204 = fptrunc double %203 to float
  store float %204, ptr %41, align 4, !tbaa !11
  %205 = load float, ptr %17, align 4, !tbaa !11
  %206 = load float, ptr %33, align 4, !tbaa !11
  %207 = load float, ptr %36, align 4, !tbaa !11
  %208 = fadd float %206, %207
  %209 = load float, ptr %39, align 4, !tbaa !11
  %210 = fadd float %208, %209
  %211 = fcmp ogt float %205, %210
  br i1 %211, label %420, label %212

212:                                              ; preds = %138
  %213 = load float, ptr %17, align 4, !tbaa !11
  %214 = load float, ptr %33, align 4, !tbaa !11
  %215 = load float, ptr %36, align 4, !tbaa !11
  %216 = fadd float %214, %215
  %217 = load float, ptr %40, align 4, !tbaa !11
  %218 = fadd float %216, %217
  %219 = fcmp ogt float %213, %218
  br i1 %219, label %420, label %220

220:                                              ; preds = %212
  %221 = load float, ptr %17, align 4, !tbaa !11
  %222 = load float, ptr %33, align 4, !tbaa !11
  %223 = load float, ptr %36, align 4, !tbaa !11
  %224 = fadd float %222, %223
  %225 = load float, ptr %41, align 4, !tbaa !11
  %226 = fadd float %224, %225
  %227 = fcmp ogt float %221, %226
  br i1 %227, label %420, label %228

228:                                              ; preds = %220
  %229 = load float, ptr %17, align 4, !tbaa !11
  %230 = load float, ptr %33, align 4, !tbaa !11
  %231 = load float, ptr %37, align 4, !tbaa !11
  %232 = fadd float %230, %231
  %233 = load float, ptr %39, align 4, !tbaa !11
  %234 = fadd float %232, %233
  %235 = fcmp ogt float %229, %234
  br i1 %235, label %420, label %236

236:                                              ; preds = %228
  %237 = load float, ptr %17, align 4, !tbaa !11
  %238 = load float, ptr %33, align 4, !tbaa !11
  %239 = load float, ptr %37, align 4, !tbaa !11
  %240 = fadd float %238, %239
  %241 = load float, ptr %40, align 4, !tbaa !11
  %242 = fadd float %240, %241
  %243 = fcmp ogt float %237, %242
  br i1 %243, label %420, label %244

244:                                              ; preds = %236
  %245 = load float, ptr %17, align 4, !tbaa !11
  %246 = load float, ptr %33, align 4, !tbaa !11
  %247 = load float, ptr %37, align 4, !tbaa !11
  %248 = fadd float %246, %247
  %249 = load float, ptr %41, align 4, !tbaa !11
  %250 = fadd float %248, %249
  %251 = fcmp ogt float %245, %250
  br i1 %251, label %420, label %252

252:                                              ; preds = %244
  %253 = load float, ptr %17, align 4, !tbaa !11
  %254 = load float, ptr %33, align 4, !tbaa !11
  %255 = load float, ptr %38, align 4, !tbaa !11
  %256 = fadd float %254, %255
  %257 = load float, ptr %39, align 4, !tbaa !11
  %258 = fadd float %256, %257
  %259 = fcmp ogt float %253, %258
  br i1 %259, label %420, label %260

260:                                              ; preds = %252
  %261 = load float, ptr %17, align 4, !tbaa !11
  %262 = load float, ptr %33, align 4, !tbaa !11
  %263 = load float, ptr %38, align 4, !tbaa !11
  %264 = fadd float %262, %263
  %265 = load float, ptr %40, align 4, !tbaa !11
  %266 = fadd float %264, %265
  %267 = fcmp ogt float %261, %266
  br i1 %267, label %420, label %268

268:                                              ; preds = %260
  %269 = load float, ptr %17, align 4, !tbaa !11
  %270 = load float, ptr %33, align 4, !tbaa !11
  %271 = load float, ptr %38, align 4, !tbaa !11
  %272 = fadd float %270, %271
  %273 = load float, ptr %41, align 4, !tbaa !11
  %274 = fadd float %272, %273
  %275 = fcmp ogt float %269, %274
  br i1 %275, label %420, label %276

276:                                              ; preds = %268
  %277 = load float, ptr %17, align 4, !tbaa !11
  %278 = load float, ptr %34, align 4, !tbaa !11
  %279 = load float, ptr %36, align 4, !tbaa !11
  %280 = fadd float %278, %279
  %281 = load float, ptr %39, align 4, !tbaa !11
  %282 = fadd float %280, %281
  %283 = fcmp ogt float %277, %282
  br i1 %283, label %420, label %284

284:                                              ; preds = %276
  %285 = load float, ptr %17, align 4, !tbaa !11
  %286 = load float, ptr %34, align 4, !tbaa !11
  %287 = load float, ptr %36, align 4, !tbaa !11
  %288 = fadd float %286, %287
  %289 = load float, ptr %40, align 4, !tbaa !11
  %290 = fadd float %288, %289
  %291 = fcmp ogt float %285, %290
  br i1 %291, label %420, label %292

292:                                              ; preds = %284
  %293 = load float, ptr %17, align 4, !tbaa !11
  %294 = load float, ptr %34, align 4, !tbaa !11
  %295 = load float, ptr %36, align 4, !tbaa !11
  %296 = fadd float %294, %295
  %297 = load float, ptr %41, align 4, !tbaa !11
  %298 = fadd float %296, %297
  %299 = fcmp ogt float %293, %298
  br i1 %299, label %420, label %300

300:                                              ; preds = %292
  %301 = load float, ptr %17, align 4, !tbaa !11
  %302 = load float, ptr %34, align 4, !tbaa !11
  %303 = load float, ptr %37, align 4, !tbaa !11
  %304 = fadd float %302, %303
  %305 = load float, ptr %39, align 4, !tbaa !11
  %306 = fadd float %304, %305
  %307 = fcmp ogt float %301, %306
  br i1 %307, label %420, label %308

308:                                              ; preds = %300
  %309 = load float, ptr %17, align 4, !tbaa !11
  %310 = load float, ptr %34, align 4, !tbaa !11
  %311 = load float, ptr %37, align 4, !tbaa !11
  %312 = fadd float %310, %311
  %313 = load float, ptr %40, align 4, !tbaa !11
  %314 = fadd float %312, %313
  %315 = fcmp ogt float %309, %314
  br i1 %315, label %420, label %316

316:                                              ; preds = %308
  %317 = load float, ptr %17, align 4, !tbaa !11
  %318 = load float, ptr %34, align 4, !tbaa !11
  %319 = load float, ptr %37, align 4, !tbaa !11
  %320 = fadd float %318, %319
  %321 = load float, ptr %41, align 4, !tbaa !11
  %322 = fadd float %320, %321
  %323 = fcmp ogt float %317, %322
  br i1 %323, label %420, label %324

324:                                              ; preds = %316
  %325 = load float, ptr %17, align 4, !tbaa !11
  %326 = load float, ptr %34, align 4, !tbaa !11
  %327 = load float, ptr %38, align 4, !tbaa !11
  %328 = fadd float %326, %327
  %329 = load float, ptr %39, align 4, !tbaa !11
  %330 = fadd float %328, %329
  %331 = fcmp ogt float %325, %330
  br i1 %331, label %420, label %332

332:                                              ; preds = %324
  %333 = load float, ptr %17, align 4, !tbaa !11
  %334 = load float, ptr %34, align 4, !tbaa !11
  %335 = load float, ptr %38, align 4, !tbaa !11
  %336 = fadd float %334, %335
  %337 = load float, ptr %40, align 4, !tbaa !11
  %338 = fadd float %336, %337
  %339 = fcmp ogt float %333, %338
  br i1 %339, label %420, label %340

340:                                              ; preds = %332
  %341 = load float, ptr %17, align 4, !tbaa !11
  %342 = load float, ptr %34, align 4, !tbaa !11
  %343 = load float, ptr %38, align 4, !tbaa !11
  %344 = fadd float %342, %343
  %345 = load float, ptr %41, align 4, !tbaa !11
  %346 = fadd float %344, %345
  %347 = fcmp ogt float %341, %346
  br i1 %347, label %420, label %348

348:                                              ; preds = %340
  %349 = load float, ptr %17, align 4, !tbaa !11
  %350 = load float, ptr %35, align 4, !tbaa !11
  %351 = load float, ptr %36, align 4, !tbaa !11
  %352 = fadd float %350, %351
  %353 = load float, ptr %39, align 4, !tbaa !11
  %354 = fadd float %352, %353
  %355 = fcmp ogt float %349, %354
  br i1 %355, label %420, label %356

356:                                              ; preds = %348
  %357 = load float, ptr %17, align 4, !tbaa !11
  %358 = load float, ptr %35, align 4, !tbaa !11
  %359 = load float, ptr %36, align 4, !tbaa !11
  %360 = fadd float %358, %359
  %361 = load float, ptr %40, align 4, !tbaa !11
  %362 = fadd float %360, %361
  %363 = fcmp ogt float %357, %362
  br i1 %363, label %420, label %364

364:                                              ; preds = %356
  %365 = load float, ptr %17, align 4, !tbaa !11
  %366 = load float, ptr %35, align 4, !tbaa !11
  %367 = load float, ptr %36, align 4, !tbaa !11
  %368 = fadd float %366, %367
  %369 = load float, ptr %41, align 4, !tbaa !11
  %370 = fadd float %368, %369
  %371 = fcmp ogt float %365, %370
  br i1 %371, label %420, label %372

372:                                              ; preds = %364
  %373 = load float, ptr %17, align 4, !tbaa !11
  %374 = load float, ptr %35, align 4, !tbaa !11
  %375 = load float, ptr %37, align 4, !tbaa !11
  %376 = fadd float %374, %375
  %377 = load float, ptr %39, align 4, !tbaa !11
  %378 = fadd float %376, %377
  %379 = fcmp ogt float %373, %378
  br i1 %379, label %420, label %380

380:                                              ; preds = %372
  %381 = load float, ptr %17, align 4, !tbaa !11
  %382 = load float, ptr %35, align 4, !tbaa !11
  %383 = load float, ptr %37, align 4, !tbaa !11
  %384 = fadd float %382, %383
  %385 = load float, ptr %40, align 4, !tbaa !11
  %386 = fadd float %384, %385
  %387 = fcmp ogt float %381, %386
  br i1 %387, label %420, label %388

388:                                              ; preds = %380
  %389 = load float, ptr %17, align 4, !tbaa !11
  %390 = load float, ptr %35, align 4, !tbaa !11
  %391 = load float, ptr %37, align 4, !tbaa !11
  %392 = fadd float %390, %391
  %393 = load float, ptr %41, align 4, !tbaa !11
  %394 = fadd float %392, %393
  %395 = fcmp ogt float %389, %394
  br i1 %395, label %420, label %396

396:                                              ; preds = %388
  %397 = load float, ptr %17, align 4, !tbaa !11
  %398 = load float, ptr %35, align 4, !tbaa !11
  %399 = load float, ptr %38, align 4, !tbaa !11
  %400 = fadd float %398, %399
  %401 = load float, ptr %39, align 4, !tbaa !11
  %402 = fadd float %400, %401
  %403 = fcmp ogt float %397, %402
  br i1 %403, label %420, label %404

404:                                              ; preds = %396
  %405 = load float, ptr %17, align 4, !tbaa !11
  %406 = load float, ptr %35, align 4, !tbaa !11
  %407 = load float, ptr %38, align 4, !tbaa !11
  %408 = fadd float %406, %407
  %409 = load float, ptr %40, align 4, !tbaa !11
  %410 = fadd float %408, %409
  %411 = fcmp ogt float %405, %410
  br i1 %411, label %420, label %412

412:                                              ; preds = %404
  %413 = load float, ptr %17, align 4, !tbaa !11
  %414 = load float, ptr %35, align 4, !tbaa !11
  %415 = load float, ptr %38, align 4, !tbaa !11
  %416 = fadd float %414, %415
  %417 = load float, ptr %41, align 4, !tbaa !11
  %418 = fadd float %416, %417
  %419 = fcmp ogt float %413, %418
  br i1 %419, label %420, label %446

420:                                              ; preds = %412, %404, %396, %388, %380, %372, %364, %356, %348, %340, %332, %324, %316, %308, %300, %292, %284, %276, %268, %260, %252, %244, %236, %228, %220, %212, %138
  %421 = load ptr, ptr %14, align 8, !tbaa !5
  %422 = load i32, ptr %32, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.SimulationOptions, ptr %424, i32 0, i32 3
  %426 = load float, ptr %425, align 4, !tbaa !13
  %427 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.SimulationOptions, ptr %427, i32 0, i32 0
  %429 = load i32, ptr %428, align 8, !tbaa !16
  %430 = sitofp i32 %429 to float
  %431 = fmul float %426, %430
  %432 = fptosi float %431 to i64
  %433 = load i32, ptr %31, align 4, !tbaa !9
  %434 = sext i32 %433 to i64
  %435 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.SimulationOptions, ptr %435, i32 0, i32 0
  %437 = load i32, ptr %436, align 8, !tbaa !16
  %438 = sext i32 %437 to i64
  %439 = load i32, ptr %30, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = mul nsw i64 %438, %440
  %442 = add nsw i64 %434, %441
  %443 = mul nsw i64 %432, %442
  %444 = add nsw i64 %423, %443
  %445 = getelementptr inbounds float, ptr %421, i64 %444
  store float 0.000000e+00, ptr %445, align 4, !tbaa !11
  br label %446

446:                                              ; preds = %420, %412
  br label %447

447:                                              ; preds = %446, %110
  br label %448

448:                                              ; preds = %447
  %449 = load i32, ptr %29, align 4, !tbaa !9
  %450 = add nsw i32 %449, 1
  store i32 %450, ptr %29, align 4, !tbaa !9
  br label %55, !llvm.loop !17

451:                                              ; preds = %55
  br label %452

452:                                              ; preds = %451
  %453 = load i32, ptr %28, align 4, !tbaa !9
  %454 = add nsw i32 %453, 1
  store i32 %454, ptr %28, align 4, !tbaa !9
  br label %49, !llvm.loop !19

455:                                              ; preds = %49
  br label %456

456:                                              ; preds = %455
  %457 = load i32, ptr %27, align 4, !tbaa !9
  %458 = add nsw i32 %457, 1
  store i32 %458, ptr %27, align 4, !tbaa !9
  br label %43, !llvm.loop !20

459:                                              ; preds = %43
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !12, i64 12}
!14 = !{!"SimulationOptions", !10, i64 0, !10, i64 4, !12, i64 8, !12, i64 12, !10, i64 16, !15, i64 24, !15, i64 32, !12, i64 40, !15, i64 48, !10, i64 56, !10, i64 60, !15, i64 64, !15, i64 72, !15, i64 80, !15, i64 88, !15, i64 96, !12, i64 104, !15, i64 112, !15, i64 120, !15, i64 128, !15, i64 136, !15, i64 144, !15, i64 152, !15, i64 160}
!15 = !{!"double", !7, i64 0}
!16 = !{!14, !10, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}


; 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"

@simulation_options_global = external local_unnamed_addr global ptr, align 8

; Function Attrs: nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable
define dso_local void @check_region(ptr nocapture noundef %0, i32 noundef %1, i32 noundef %2, float noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i32 noundef %10, i32 noundef %11, i32 noundef %12) local_unnamed_addr #0 {
  %.not239 = icmp sgt i32 %7, %8
  %.not183236 = icmp sgt i32 %9, %10
  %or.cond249 = or i1 %.not239, %.not183236
  %.not184234 = icmp sgt i32 %11, %12
  %or.cond250 = or i1 %or.cond249, %.not184234
  br i1 %or.cond250, label %._crit_edge241, label %.preheader233

.preheader233:                                    ; preds = %13, %._crit_edge238.split
  %.0240 = phi i32 [ %145, %._crit_edge238.split ], [ %7, %13 ]
  %14 = icmp slt i32 %.0240, 0
  %.not185 = icmp slt i32 %.0240, %1
  %15 = select i1 %.not185, i32 0, i32 %1
  %16 = sub i32 0, %15
  %.0177.p = select i1 %14, i32 %1, i32 %16
  %.0177 = add i32 %.0177.p, %.0240
  %17 = load ptr, ptr @simulation_options_global, align 8
  %18 = getelementptr inbounds i8, ptr %17, i64 12
  %19 = sext i32 %.0177 to i64
  %20 = sub nsw i32 %4, %.0177
  %21 = sitofp i32 %20 to double
  %square = fmul double %21, %21
  %22 = fptrunc double %square to float
  %23 = add nsw i32 %20, %1
  %24 = sitofp i32 %23 to double
  %square190 = fmul double %24, %24
  %25 = fptrunc double %square190 to float
  %26 = sub nsw i32 %20, %1
  %27 = sitofp i32 %26 to double
  %square193 = fmul double %27, %27
  %28 = fptrunc double %square193 to float
  %29 = load i32, ptr %17, align 8, !tbaa !5
  %30 = sitofp i32 %29 to float
  %31 = sext i32 %29 to i64
  %32 = mul nsw i64 %31, %19
  br label %.preheader

.preheader:                                       ; preds = %.preheader233, %._crit_edge
  %.0175237 = phi i32 [ %9, %.preheader233 ], [ %144, %._crit_edge ]
  %33 = icmp slt i32 %.0175237, 0
  %.not186 = icmp slt i32 %.0175237, %1
  %34 = select i1 %.not186, i32 0, i32 %1
  %35 = sub i32 0, %34
  %.0178.p = select i1 %33, i32 %1, i32 %35
  %.0178 = add i32 %.0178.p, %.0175237
  %36 = sext i32 %.0178 to i64
  %37 = add nsw i64 %32, %36
  %38 = sub nsw i32 %5, %.0178
  %39 = sitofp i32 %38 to double
  %square188 = fmul double %39, %39
  %40 = fptrunc double %square188 to float
  %41 = add nsw i32 %38, %1
  %42 = sitofp i32 %41 to double
  %square191 = fmul double %42, %42
  %43 = fptrunc double %square191 to float
  %44 = sub nsw i32 %38, %1
  %45 = sitofp i32 %44 to double
  %square194 = fmul double %45, %45
  %46 = fptrunc double %square194 to float
  %47 = fadd float %22, %40
  %48 = fadd float %22, %43
  %49 = fadd float %22, %46
  %50 = fadd float %25, %40
  %51 = fadd float %25, %43
  %52 = fadd float %25, %46
  %53 = fadd float %28, %40
  %54 = fadd float %28, %43
  %55 = fadd float %28, %46
  br label %56

56:                                               ; preds = %.preheader, %142
  %.0176235 = phi i32 [ %11, %.preheader ], [ %143, %142 ]
  %57 = icmp slt i32 %.0176235, 0
  %.not187 = icmp slt i32 %.0176235, %2
  %58 = select i1 %.not187, i32 0, i32 %2
  %59 = sub i32 0, %58
  %.0179.p = select i1 %57, i32 %2, i32 %59
  %.0179 = add i32 %.0179.p, %.0176235
  %60 = sext i32 %.0179 to i64
  %61 = load float, ptr %18, align 4, !tbaa !12
  %62 = fmul float %61, %30
  %63 = fptosi float %62 to i64
  %64 = mul nsw i64 %37, %63
  %65 = getelementptr float, ptr %0, i64 %64
  %66 = getelementptr float, ptr %65, i64 %60
  %67 = load float, ptr %66, align 4, !tbaa !13
  %68 = fcmp une float %67, 0.000000e+00
  br i1 %68, label %69, label %142

69:                                               ; preds = %56
  %70 = sub nsw i32 %6, %.0179
  %71 = sitofp i32 %70 to double
  %square189 = fmul double %71, %71
  %72 = fptrunc double %square189 to float
  %73 = add nsw i32 %70, %2
  %74 = sitofp i32 %73 to double
  %square192 = fmul double %74, %74
  %75 = fptrunc double %square192 to float
  %76 = sub nsw i32 %70, %2
  %77 = sitofp i32 %76 to double
  %square195 = fmul double %77, %77
  %78 = fptrunc double %square195 to float
  %79 = fadd float %47, %72
  %80 = fcmp olt float %79, %3
  %81 = fadd float %47, %75
  %82 = fcmp olt float %81, %3
  %or.cond = select i1 %80, i1 true, i1 %82
  %83 = fadd float %47, %78
  %84 = fcmp olt float %83, %3
  %or.cond200 = select i1 %or.cond, i1 true, i1 %84
  br i1 %or.cond200, label %141, label %85

85:                                               ; preds = %69
  %86 = fadd float %48, %72
  %87 = fcmp olt float %86, %3
  %88 = fadd float %48, %75
  %89 = fcmp olt float %88, %3
  %or.cond202 = select i1 %87, i1 true, i1 %89
  %90 = fadd float %48, %78
  %91 = fcmp olt float %90, %3
  %or.cond204 = select i1 %or.cond202, i1 true, i1 %91
  br i1 %or.cond204, label %141, label %92

92:                                               ; preds = %85
  %93 = fadd float %49, %72
  %94 = fcmp olt float %93, %3
  %95 = fadd float %49, %75
  %96 = fcmp olt float %95, %3
  %or.cond206 = select i1 %94, i1 true, i1 %96
  %97 = fadd float %49, %78
  %98 = fcmp olt float %97, %3
  %or.cond208 = select i1 %or.cond206, i1 true, i1 %98
  br i1 %or.cond208, label %141, label %99

99:                                               ; preds = %92
  %100 = fadd float %50, %72
  %101 = fcmp olt float %100, %3
  %102 = fadd float %50, %75
  %103 = fcmp olt float %102, %3
  %or.cond210 = select i1 %101, i1 true, i1 %103
  %104 = fadd float %50, %78
  %105 = fcmp olt float %104, %3
  %or.cond212 = select i1 %or.cond210, i1 true, i1 %105
  br i1 %or.cond212, label %141, label %106

106:                                              ; preds = %99
  %107 = fadd float %51, %72
  %108 = fcmp olt float %107, %3
  %109 = fadd float %51, %75
  %110 = fcmp olt float %109, %3
  %or.cond214 = select i1 %108, i1 true, i1 %110
  %111 = fadd float %51, %78
  %112 = fcmp olt float %111, %3
  %or.cond216 = select i1 %or.cond214, i1 true, i1 %112
  br i1 %or.cond216, label %141, label %113

113:                                              ; preds = %106
  %114 = fadd float %52, %72
  %115 = fcmp olt float %114, %3
  %116 = fadd float %52, %75
  %117 = fcmp olt float %116, %3
  %or.cond218 = select i1 %115, i1 true, i1 %117
  %118 = fadd float %52, %78
  %119 = fcmp olt float %118, %3
  %or.cond220 = select i1 %or.cond218, i1 true, i1 %119
  br i1 %or.cond220, label %141, label %120

120:                                              ; preds = %113
  %121 = fadd float %53, %72
  %122 = fcmp olt float %121, %3
  %123 = fadd float %53, %75
  %124 = fcmp olt float %123, %3
  %or.cond222 = select i1 %122, i1 true, i1 %124
  %125 = fadd float %53, %78
  %126 = fcmp olt float %125, %3
  %or.cond224 = select i1 %or.cond222, i1 true, i1 %126
  br i1 %or.cond224, label %141, label %127

127:                                              ; preds = %120
  %128 = fadd float %54, %72
  %129 = fcmp olt float %128, %3
  %130 = fadd float %54, %75
  %131 = fcmp olt float %130, %3
  %or.cond226 = select i1 %129, i1 true, i1 %131
  %132 = fadd float %54, %78
  %133 = fcmp olt float %132, %3
  %or.cond228 = select i1 %or.cond226, i1 true, i1 %133
  br i1 %or.cond228, label %141, label %134

134:                                              ; preds = %127
  %135 = fadd float %55, %72
  %136 = fcmp olt float %135, %3
  %137 = fadd float %55, %75
  %138 = fcmp olt float %137, %3
  %or.cond230 = select i1 %136, i1 true, i1 %138
  %139 = fadd float %55, %78
  %140 = fcmp olt float %139, %3
  %or.cond232 = select i1 %or.cond230, i1 true, i1 %140
  br i1 %or.cond232, label %141, label %142

141:                                              ; preds = %134, %127, %120, %113, %106, %99, %92, %85, %69
  store float 0.000000e+00, ptr %66, align 4, !tbaa !13
  br label %142

142:                                              ; preds = %134, %56, %141
  %143 = add i32 %.0176235, 1
  %exitcond.not = icmp eq i32 %.0176235, %12
  br i1 %exitcond.not, label %._crit_edge, label %56, !llvm.loop !14

._crit_edge:                                      ; preds = %142
  %144 = add i32 %.0175237, 1
  %exitcond247.not = icmp eq i32 %.0175237, %10
  br i1 %exitcond247.not, label %._crit_edge238.split, label %.preheader, !llvm.loop !16

._crit_edge238.split:                             ; preds = %._crit_edge
  %145 = add i32 %.0240, 1
  %exitcond248.not = icmp eq i32 %.0240, %8
  br i1 %exitcond248.not, label %._crit_edge241, label %.preheader233, !llvm.loop !17

._crit_edge241:                                   ; preds = %._crit_edge238.split, %13
  ret void
}

attributes #0 = { nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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 0}
!6 = !{!"SimulationOptions", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 12, !7, i64 16, !11, i64 24, !11, i64 32, !10, i64 40, !11, i64 48, !7, i64 56, !7, i64 60, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !10, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!6, !10, i64 12}
!13 = !{!10, !10, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass