; 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: nounwind
declare double @sqrt(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
declare dso_local void @check_region(ptr noundef, i32 noundef, i32 noundef, float noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

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

41:                                               ; preds = %7
  store i32 1, ptr %38, align 4
  br label %308

42:                                               ; preds = %7
  %43 = load float, ptr %12, align 4, !tbaa !11
  %44 = load i32, ptr %9, align 4, !tbaa !9
  %45 = sitofp i32 %44 to float
  %46 = fmul float %43, %45
  %47 = fpext float %46 to double
  %48 = fadd double %47, 5.000000e-01
  %49 = fptosi double %48 to i32
  store i32 %49, ptr %35, align 4, !tbaa !9
  %50 = load float, ptr %13, align 4, !tbaa !11
  %51 = load i32, ptr %9, align 4, !tbaa !9
  %52 = sitofp i32 %51 to float
  %53 = fmul float %50, %52
  %54 = fpext float %53 to double
  %55 = fadd double %54, 5.000000e-01
  %56 = fptosi double %55 to i32
  store i32 %56, ptr %36, align 4, !tbaa !9
  %57 = load float, ptr %14, align 4, !tbaa !11
  %58 = load i32, ptr %10, align 4, !tbaa !9
  %59 = sitofp i32 %58 to float
  %60 = fmul float %57, %59
  %61 = fpext float %60 to double
  %62 = fadd double %61, 5.000000e-01
  %63 = fptosi double %62 to i32
  store i32 %63, ptr %37, align 4, !tbaa !9
  %64 = load float, ptr %11, align 4, !tbaa !11
  %65 = fpext float %64 to double
  %66 = call double @sqrt(double noundef 3.000000e+00) #4
  %67 = fdiv double %65, %66
  %68 = load i32, ptr %9, align 4, !tbaa !9
  %69 = sitofp i32 %68 to double
  %70 = fmul double %67, %69
  %71 = call double @llvm.ceil.f64(double %70)
  %72 = fsub double %71, 1.000000e+00
  %73 = fptosi double %72 to i32
  store i32 %73, ptr %24, align 4, !tbaa !9
  %74 = load i32, ptr %35, align 4, !tbaa !9
  %75 = load i32, ptr %24, align 4, !tbaa !9
  %76 = sub nsw i32 %74, %75
  store i32 %76, ptr %25, align 4, !tbaa !9
  %77 = load i32, ptr %35, align 4, !tbaa !9
  %78 = load i32, ptr %24, align 4, !tbaa !9
  %79 = add nsw i32 %77, %78
  store i32 %79, ptr %26, align 4, !tbaa !9
  %80 = load i32, ptr %36, align 4, !tbaa !9
  %81 = load i32, ptr %24, align 4, !tbaa !9
  %82 = sub nsw i32 %80, %81
  store i32 %82, ptr %27, align 4, !tbaa !9
  %83 = load i32, ptr %36, align 4, !tbaa !9
  %84 = load i32, ptr %24, align 4, !tbaa !9
  %85 = add nsw i32 %83, %84
  store i32 %85, ptr %28, align 4, !tbaa !9
  %86 = load i32, ptr %37, align 4, !tbaa !9
  %87 = load i32, ptr %24, align 4, !tbaa !9
  %88 = sub nsw i32 %86, %87
  store i32 %88, ptr %29, align 4, !tbaa !9
  %89 = load i32, ptr %37, align 4, !tbaa !9
  %90 = load i32, ptr %24, align 4, !tbaa !9
  %91 = add nsw i32 %89, %90
  store i32 %91, ptr %30, align 4, !tbaa !9
  %92 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %92, ptr %15, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %194, %42
  %94 = load i32, ptr %15, align 4, !tbaa !9
  %95 = load i32, ptr %26, align 4, !tbaa !9
  %96 = icmp sle i32 %94, %95
  br i1 %96, label %97, label %197

97:                                               ; preds = %93
  %98 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %98, ptr %16, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %190, %97
  %100 = load i32, ptr %16, align 4, !tbaa !9
  %101 = load i32, ptr %28, align 4, !tbaa !9
  %102 = icmp sle i32 %100, %101
  br i1 %102, label %103, label %193

103:                                              ; preds = %99
  %104 = load i32, ptr %29, align 4, !tbaa !9
  store i32 %104, ptr %17, align 4, !tbaa !9
  br label %105

105:                                              ; preds = %186, %103
  %106 = load i32, ptr %17, align 4, !tbaa !9
  %107 = load i32, ptr %30, align 4, !tbaa !9
  %108 = icmp sle i32 %106, %107
  br i1 %108, label %109, label %189

109:                                              ; preds = %105
  %110 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %110, ptr %32, align 4, !tbaa !9
  %111 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %111, ptr %33, align 4, !tbaa !9
  %112 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %112, ptr %34, align 4, !tbaa !9
  %113 = load i32, ptr %32, align 4, !tbaa !9
  %114 = icmp slt i32 %113, 0
  br i1 %114, label %115, label %119

115:                                              ; preds = %109
  %116 = load i32, ptr %9, align 4, !tbaa !9
  %117 = load i32, ptr %32, align 4, !tbaa !9
  %118 = add nsw i32 %117, %116
  store i32 %118, ptr %32, align 4, !tbaa !9
  br label %128

119:                                              ; preds = %109
  %120 = load i32, ptr %32, align 4, !tbaa !9
  %121 = load i32, ptr %9, align 4, !tbaa !9
  %122 = icmp sge i32 %120, %121
  br i1 %122, label %123, label %127

123:                                              ; preds = %119
  %124 = load i32, ptr %9, align 4, !tbaa !9
  %125 = load i32, ptr %32, align 4, !tbaa !9
  %126 = sub nsw i32 %125, %124
  store i32 %126, ptr %32, align 4, !tbaa !9
  br label %127

127:                                              ; preds = %123, %119
  br label %128

128:                                              ; preds = %127, %115
  %129 = load i32, ptr %33, align 4, !tbaa !9
  %130 = icmp slt i32 %129, 0
  br i1 %130, label %131, label %135

131:                                              ; preds = %128
  %132 = load i32, ptr %9, align 4, !tbaa !9
  %133 = load i32, ptr %33, align 4, !tbaa !9
  %134 = add nsw i32 %133, %132
  store i32 %134, ptr %33, align 4, !tbaa !9
  br label %144

135:                                              ; preds = %128
  %136 = load i32, ptr %33, align 4, !tbaa !9
  %137 = load i32, ptr %9, align 4, !tbaa !9
  %138 = icmp sge i32 %136, %137
  br i1 %138, label %139, label %143

139:                                              ; preds = %135
  %140 = load i32, ptr %9, align 4, !tbaa !9
  %141 = load i32, ptr %33, align 4, !tbaa !9
  %142 = sub nsw i32 %141, %140
  store i32 %142, ptr %33, align 4, !tbaa !9
  br label %143

143:                                              ; preds = %139, %135
  br label %144

144:                                              ; preds = %143, %131
  %145 = load i32, ptr %34, align 4, !tbaa !9
  %146 = icmp slt i32 %145, 0
  br i1 %146, label %147, label %151

147:                                              ; preds = %144
  %148 = load i32, ptr %10, align 4, !tbaa !9
  %149 = load i32, ptr %34, align 4, !tbaa !9
  %150 = add nsw i32 %149, %148
  store i32 %150, ptr %34, align 4, !tbaa !9
  br label %160

151:                                              ; preds = %144
  %152 = load i32, ptr %34, align 4, !tbaa !9
  %153 = load i32, ptr %10, align 4, !tbaa !9
  %154 = icmp sge i32 %152, %153
  br i1 %154, label %155, label %159

155:                                              ; preds = %151
  %156 = load i32, ptr %10, align 4, !tbaa !9
  %157 = load i32, ptr %34, align 4, !tbaa !9
  %158 = sub nsw i32 %157, %156
  store i32 %158, ptr %34, align 4, !tbaa !9
  br label %159

159:                                              ; preds = %155, %151
  br label %160

160:                                              ; preds = %159, %147
  %161 = load ptr, ptr %8, align 8, !tbaa !5
  %162 = load i32, ptr %34, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.SimulationOptions, ptr %164, i32 0, i32 3
  %166 = load float, ptr %165, align 4, !tbaa !13
  %167 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.SimulationOptions, ptr %167, i32 0, i32 0
  %169 = load i32, ptr %168, align 8, !tbaa !16
  %170 = sitofp i32 %169 to float
  %171 = fmul float %166, %170
  %172 = fptosi float %171 to i64
  %173 = load i32, ptr %33, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = load ptr, ptr @simulation_options_global, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.SimulationOptions, ptr %175, i32 0, i32 0
  %177 = load i32, ptr %176, align 8, !tbaa !16
  %178 = sext i32 %177 to i64
  %179 = load i32, ptr %32, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = mul nsw i64 %178, %180
  %182 = add nsw i64 %174, %181
  %183 = mul nsw i64 %172, %182
  %184 = add nsw i64 %163, %183
  %185 = getelementptr inbounds float, ptr %161, i64 %184
  store float 0.000000e+00, ptr %185, align 4, !tbaa !11
  br label %186

186:                                              ; preds = %160
  %187 = load i32, ptr %17, align 4, !tbaa !9
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr %17, align 4, !tbaa !9
  br label %105, !llvm.loop !17

189:                                              ; preds = %105
  br label %190

190:                                              ; preds = %189
  %191 = load i32, ptr %16, align 4, !tbaa !9
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %16, align 4, !tbaa !9
  br label %99, !llvm.loop !19

193:                                              ; preds = %99
  br label %194

194:                                              ; preds = %193
  %195 = load i32, ptr %15, align 4, !tbaa !9
  %196 = add nsw i32 %195, 1
  store i32 %196, ptr %15, align 4, !tbaa !9
  br label %93, !llvm.loop !20

197:                                              ; preds = %93
  %198 = load float, ptr %11, align 4, !tbaa !11
  %199 = load i32, ptr %9, align 4, !tbaa !9
  %200 = sitofp i32 %199 to float
  %201 = fmul float %198, %200
  %202 = fpext float %201 to double
  %203 = call double @llvm.ceil.f64(double %202)
  %204 = fptosi double %203 to i32
  store i32 %204, ptr %24, align 4, !tbaa !9
  %205 = load float, ptr %11, align 4, !tbaa !11
  %206 = load i32, ptr %9, align 4, !tbaa !9
  %207 = sitofp i32 %206 to float
  %208 = fmul float %205, %207
  %209 = fpext float %208 to double
  %210 = call double @pow(double noundef %209, double noundef 2.000000e+00) #4
  %211 = fptrunc double %210 to float
  store float %211, ptr %31, align 4, !tbaa !11
  %212 = load i32, ptr %35, align 4, !tbaa !9
  %213 = load i32, ptr %24, align 4, !tbaa !9
  %214 = sub nsw i32 %212, %213
  store i32 %214, ptr %18, align 4, !tbaa !9
  %215 = load i32, ptr %35, align 4, !tbaa !9
  %216 = load i32, ptr %24, align 4, !tbaa !9
  %217 = add nsw i32 %215, %216
  store i32 %217, ptr %19, align 4, !tbaa !9
  %218 = load i32, ptr %36, align 4, !tbaa !9
  %219 = load i32, ptr %24, align 4, !tbaa !9
  %220 = sub nsw i32 %218, %219
  store i32 %220, ptr %20, align 4, !tbaa !9
  %221 = load i32, ptr %36, align 4, !tbaa !9
  %222 = load i32, ptr %24, align 4, !tbaa !9
  %223 = add nsw i32 %221, %222
  store i32 %223, ptr %21, align 4, !tbaa !9
  %224 = load i32, ptr %37, align 4, !tbaa !9
  %225 = load i32, ptr %24, align 4, !tbaa !9
  %226 = sub nsw i32 %224, %225
  store i32 %226, ptr %22, align 4, !tbaa !9
  %227 = load i32, ptr %37, align 4, !tbaa !9
  %228 = load i32, ptr %24, align 4, !tbaa !9
  %229 = add nsw i32 %227, %228
  store i32 %229, ptr %23, align 4, !tbaa !9
  %230 = load ptr, ptr %8, align 8, !tbaa !5
  %231 = load i32, ptr %9, align 4, !tbaa !9
  %232 = load i32, ptr %10, align 4, !tbaa !9
  %233 = load float, ptr %31, align 4, !tbaa !11
  %234 = load i32, ptr %35, align 4, !tbaa !9
  %235 = load i32, ptr %36, align 4, !tbaa !9
  %236 = load i32, ptr %37, align 4, !tbaa !9
  %237 = load i32, ptr %18, align 4, !tbaa !9
  %238 = load i32, ptr %25, align 4, !tbaa !9
  %239 = load i32, ptr %20, align 4, !tbaa !9
  %240 = load i32, ptr %21, align 4, !tbaa !9
  %241 = load i32, ptr %22, align 4, !tbaa !9
  %242 = load i32, ptr %23, align 4, !tbaa !9
  call void @check_region(ptr noundef %230, i32 noundef %231, i32 noundef %232, float noundef %233, i32 noundef %234, i32 noundef %235, i32 noundef %236, i32 noundef %237, i32 noundef %238, i32 noundef %239, i32 noundef %240, i32 noundef %241, i32 noundef %242)
  %243 = load ptr, ptr %8, align 8, !tbaa !5
  %244 = load i32, ptr %9, align 4, !tbaa !9
  %245 = load i32, ptr %10, align 4, !tbaa !9
  %246 = load float, ptr %31, align 4, !tbaa !11
  %247 = load i32, ptr %35, align 4, !tbaa !9
  %248 = load i32, ptr %36, align 4, !tbaa !9
  %249 = load i32, ptr %37, align 4, !tbaa !9
  %250 = load i32, ptr %26, align 4, !tbaa !9
  %251 = load i32, ptr %19, align 4, !tbaa !9
  %252 = load i32, ptr %20, align 4, !tbaa !9
  %253 = load i32, ptr %21, align 4, !tbaa !9
  %254 = load i32, ptr %22, align 4, !tbaa !9
  %255 = load i32, ptr %23, align 4, !tbaa !9
  call void @check_region(ptr noundef %243, i32 noundef %244, i32 noundef %245, float noundef %246, i32 noundef %247, i32 noundef %248, i32 noundef %249, i32 noundef %250, i32 noundef %251, i32 noundef %252, i32 noundef %253, i32 noundef %254, i32 noundef %255)
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = load i32, ptr %9, align 4, !tbaa !9
  %258 = load i32, ptr %10, align 4, !tbaa !9
  %259 = load float, ptr %31, align 4, !tbaa !11
  %260 = load i32, ptr %35, align 4, !tbaa !9
  %261 = load i32, ptr %36, align 4, !tbaa !9
  %262 = load i32, ptr %37, align 4, !tbaa !9
  %263 = load i32, ptr %18, align 4, !tbaa !9
  %264 = load i32, ptr %19, align 4, !tbaa !9
  %265 = load i32, ptr %20, align 4, !tbaa !9
  %266 = load i32, ptr %27, align 4, !tbaa !9
  %267 = load i32, ptr %22, align 4, !tbaa !9
  %268 = load i32, ptr %23, align 4, !tbaa !9
  call void @check_region(ptr noundef %256, i32 noundef %257, i32 noundef %258, float noundef %259, i32 noundef %260, i32 noundef %261, i32 noundef %262, i32 noundef %263, i32 noundef %264, i32 noundef %265, i32 noundef %266, i32 noundef %267, i32 noundef %268)
  %269 = load ptr, ptr %8, align 8, !tbaa !5
  %270 = load i32, ptr %9, align 4, !tbaa !9
  %271 = load i32, ptr %10, align 4, !tbaa !9
  %272 = load float, ptr %31, align 4, !tbaa !11
  %273 = load i32, ptr %35, align 4, !tbaa !9
  %274 = load i32, ptr %36, align 4, !tbaa !9
  %275 = load i32, ptr %37, align 4, !tbaa !9
  %276 = load i32, ptr %18, align 4, !tbaa !9
  %277 = load i32, ptr %19, align 4, !tbaa !9
  %278 = load i32, ptr %28, align 4, !tbaa !9
  %279 = load i32, ptr %21, align 4, !tbaa !9
  %280 = load i32, ptr %22, align 4, !tbaa !9
  %281 = load i32, ptr %23, align 4, !tbaa !9
  call void @check_region(ptr noundef %269, i32 noundef %270, i32 noundef %271, float noundef %272, i32 noundef %273, i32 noundef %274, i32 noundef %275, i32 noundef %276, i32 noundef %277, i32 noundef %278, i32 noundef %279, i32 noundef %280, i32 noundef %281)
  %282 = load ptr, ptr %8, align 8, !tbaa !5
  %283 = load i32, ptr %9, align 4, !tbaa !9
  %284 = load i32, ptr %10, align 4, !tbaa !9
  %285 = load float, ptr %31, align 4, !tbaa !11
  %286 = load i32, ptr %35, align 4, !tbaa !9
  %287 = load i32, ptr %36, align 4, !tbaa !9
  %288 = load i32, ptr %37, align 4, !tbaa !9
  %289 = load i32, ptr %18, align 4, !tbaa !9
  %290 = load i32, ptr %19, align 4, !tbaa !9
  %291 = load i32, ptr %20, align 4, !tbaa !9
  %292 = load i32, ptr %21, align 4, !tbaa !9
  %293 = load i32, ptr %22, align 4, !tbaa !9
  %294 = load i32, ptr %29, align 4, !tbaa !9
  call void @check_region(ptr noundef %282, i32 noundef %283, i32 noundef %284, float noundef %285, i32 noundef %286, i32 noundef %287, i32 noundef %288, i32 noundef %289, i32 noundef %290, i32 noundef %291, i32 noundef %292, i32 noundef %293, i32 noundef %294)
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  %296 = load i32, ptr %9, align 4, !tbaa !9
  %297 = load i32, ptr %10, align 4, !tbaa !9
  %298 = load float, ptr %31, align 4, !tbaa !11
  %299 = load i32, ptr %35, align 4, !tbaa !9
  %300 = load i32, ptr %36, align 4, !tbaa !9
  %301 = load i32, ptr %37, align 4, !tbaa !9
  %302 = load i32, ptr %18, align 4, !tbaa !9
  %303 = load i32, ptr %19, align 4, !tbaa !9
  %304 = load i32, ptr %20, align 4, !tbaa !9
  %305 = load i32, ptr %21, align 4, !tbaa !9
  %306 = load i32, ptr %30, align 4, !tbaa !9
  %307 = load i32, ptr %23, align 4, !tbaa !9
  call void @check_region(ptr noundef %295, i32 noundef %296, i32 noundef %297, float noundef %298, i32 noundef %299, i32 noundef %300, i32 noundef %301, i32 noundef %302, i32 noundef %303, i32 noundef %304, i32 noundef %305, i32 noundef %306, i32 noundef %307)
  store i32 0, ptr %38, align 4
  br label %308

308:                                              ; preds = %197, %41
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  %309 = load i32, ptr %38, align 4
  switch i32 %309, label %311 [
    i32 0, label %310
    i32 1, label %310
  ]

310:                                              ; preds = %308, %308
  ret void

311:                                              ; preds = %308
  unreachable
}

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

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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: nounwind uwtable
declare dso_local void @check_region(ptr noundef, i32 noundef, i32 noundef, float noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @update_in_sphere(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %3, float noundef %4, float noundef %5, float noundef %6) local_unnamed_addr #0 {
  %8 = fcmp olt float %3, 0.000000e+00
  br i1 %8, label %78, label %9

9:                                                ; preds = %7
  %10 = sitofp i32 %1 to float
  %11 = fmul float %10, %4
  %12 = fpext float %11 to double
  %13 = fmul float %10, %5
  %14 = fpext float %13 to double
  %15 = fadd double %14, 5.000000e-01
  %16 = fptosi double %15 to i32
  %17 = sitofp i32 %2 to float
  %18 = fmul float %17, %6
  %19 = fpext float %18 to double
  %20 = fadd double %19, 5.000000e-01
  %21 = fptosi double %20 to i32
  %22 = fpext float %3 to double
  %23 = fdiv double %22, 0x3FFBB67AE8584CAA
  %24 = sitofp i32 %1 to double
  %25 = fmul double %23, %24
  %26 = tail call double @llvm.ceil.f64(double %25)
  %27 = insertelement <2 x double> poison, double %12, i64 0
  %28 = insertelement <2 x double> %27, double %26, i64 1
  %29 = fadd <2 x double> %28, <double 5.000000e-01, double -1.000000e+00>
  %30 = fptosi <2 x double> %29 to <2 x i32>
  %31 = extractelement <2 x i32> %30, i64 0
  %32 = extractelement <2 x i32> %30, i64 1
  %33 = sub nsw i32 %31, %32
  %34 = add i32 %32, %31
  %35 = sub nsw i32 %16, %32
  %36 = add i32 %32, %16
  %37 = sub nsw i32 %21, %32
  %38 = add i32 %32, %21
  %.not176 = icmp sgt i32 %33, %34
  %.not163173 = icmp sgt i32 %35, %36
  %or.cond = select i1 %.not176, i1 true, i1 %.not163173
  %.not164171 = icmp sgt i32 %37, %38
  %or.cond186 = select i1 %or.cond, i1 true, i1 %.not164171
  br i1 %or.cond186, label %._crit_edge178, label %.preheader170

.preheader170:                                    ; preds = %9, %._crit_edge175.split
  %.0177 = phi i32 [ %67, %._crit_edge175.split ], [ %33, %9 ]
  %39 = icmp slt i32 %.0177, 0
  %.not165 = icmp slt i32 %.0177, %1
  %40 = select i1 %.not165, i32 0, i32 %1
  %41 = sub i32 0, %40
  %.0158.p = select i1 %39, i32 %1, i32 %41
  %.0158 = add i32 %.0158.p, %.0177
  %42 = load ptr, ptr @simulation_options_global, align 8
  %43 = getelementptr inbounds i8, ptr %42, i64 12
  %44 = sext i32 %.0158 to i64
  %45 = load i32, ptr %42, align 8, !tbaa !5
  %46 = sitofp i32 %45 to float
  %47 = sext i32 %45 to i64
  %48 = mul nsw i64 %47, %44
  br label %.preheader

.preheader:                                       ; preds = %.preheader170, %._crit_edge
  %.0154174 = phi i32 [ %35, %.preheader170 ], [ %66, %._crit_edge ]
  %49 = icmp slt i32 %.0154174, 0
  %.not166 = icmp slt i32 %.0154174, %1
  %50 = select i1 %.not166, i32 0, i32 %1
  %51 = sub i32 0, %50
  %.0157.p = select i1 %49, i32 %1, i32 %51
  %.0157 = add i32 %.0157.p, %.0154174
  %52 = sext i32 %.0157 to i64
  %53 = add nsw i64 %48, %52
  br label %54

54:                                               ; preds = %.preheader, %54
  %.0155172 = phi i32 [ %37, %.preheader ], [ %65, %54 ]
  %55 = icmp slt i32 %.0155172, 0
  %.not167 = icmp slt i32 %.0155172, %2
  %56 = select i1 %.not167, i32 0, i32 %2
  %57 = sub i32 0, %56
  %.0156.p = select i1 %55, i32 %2, i32 %57
  %.0156 = add i32 %.0156.p, %.0155172
  %58 = sext i32 %.0156 to i64
  %59 = load float, ptr %43, align 4, !tbaa !12
  %60 = fmul float %59, %46
  %61 = fptosi float %60 to i64
  %62 = mul nsw i64 %53, %61
  %63 = getelementptr float, ptr %0, i64 %62
  %64 = getelementptr float, ptr %63, i64 %58
  store float 0.000000e+00, ptr %64, align 4, !tbaa !13
  %65 = add i32 %.0155172, 1
  %exitcond.not = icmp eq i32 %.0155172, %38
  br i1 %exitcond.not, label %._crit_edge, label %54, !llvm.loop !14

._crit_edge:                                      ; preds = %54
  %66 = add i32 %.0154174, 1
  %exitcond184.not = icmp eq i32 %.0154174, %36
  br i1 %exitcond184.not, label %._crit_edge175.split, label %.preheader, !llvm.loop !16

._crit_edge175.split:                             ; preds = %._crit_edge
  %67 = add i32 %.0177, 1
  %exitcond185.not = icmp eq i32 %.0177, %34
  br i1 %exitcond185.not, label %._crit_edge178, label %.preheader170, !llvm.loop !17

._crit_edge178:                                   ; preds = %._crit_edge175.split, %9
  %68 = fmul float %10, %3
  %69 = tail call float @llvm.ceil.f32(float %68)
  %70 = fptosi float %69 to i32
  %71 = fmul float %68, %68
  %72 = sub nsw i32 %31, %70
  %73 = add nsw i32 %31, %70
  %74 = sub nsw i32 %16, %70
  %75 = add nsw i32 %16, %70
  %76 = sub nsw i32 %21, %70
  %77 = add nsw i32 %21, %70
  tail call void @check_region(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %71, i32 noundef %31, i32 noundef %16, i32 noundef %21, i32 noundef %72, i32 noundef %33, i32 noundef %74, i32 noundef %75, i32 noundef %76, i32 noundef %77)
  tail call void @check_region(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %71, i32 noundef %31, i32 noundef %16, i32 noundef %21, i32 noundef %34, i32 noundef %73, i32 noundef %74, i32 noundef %75, i32 noundef %76, i32 noundef %77)
  tail call void @check_region(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %71, i32 noundef %31, i32 noundef %16, i32 noundef %21, i32 noundef %72, i32 noundef %73, i32 noundef %74, i32 noundef %35, i32 noundef %76, i32 noundef %77)
  tail call void @check_region(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %71, i32 noundef %31, i32 noundef %16, i32 noundef %21, i32 noundef %72, i32 noundef %73, i32 noundef %36, i32 noundef %75, i32 noundef %76, i32 noundef %77)
  tail call void @check_region(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %71, i32 noundef %31, i32 noundef %16, i32 noundef %21, i32 noundef %72, i32 noundef %73, i32 noundef %74, i32 noundef %75, i32 noundef %76, i32 noundef %37)
  tail call void @check_region(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %71, i32 noundef %31, i32 noundef %16, i32 noundef %21, i32 noundef %72, i32 noundef %73, i32 noundef %74, i32 noundef %75, i32 noundef %38, i32 noundef %77)
  br label %78

78:                                               ; preds = %7, %._crit_edge178
  ret void
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.ceil.f32(float) #2

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass