; LLVM IR from Discngine/fpocket :: src (mdpbase)

; 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.s_mdgrid = type { ptr, ptr, i32, i32, i32, float, i32 }
%struct.c_lst_pockets = type { ptr, ptr, ptr, i64, ptr }
%struct.node_pocket = type { ptr, ptr, ptr }
%struct.s_pocket = type { ptr, ptr, float, float, float, float, [3 x float], i32, i32, i32, i32 }
%struct.c_lst_vertices = type { ptr, ptr, ptr, i64 }
%struct.s_mdparams = type { ptr, [2000 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, i32, i32, [3 x float], float, i16, [3 x i16] }
%struct.s_desc = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, i32, [20 x i32], i32, i32, i32, float, float, i32, i32, i32, i32, i32, [255 x i8], [255 x i8], [8 x i8] }
%struct.node_vertice = type { ptr, ptr, ptr }
%struct.s_vvertice = type { i32, i32, i32, i32, i32, float, float, float, float, i32, i32, [4 x i32], [4 x ptr], [3 x float], float }

@stderr = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [241 x i8], align 1

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

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
define dso_local void @calculate_md_dens_grid(ptr noundef %0, ptr noundef %1, ptr noundef %2) #2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 0, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  store i32 0, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !9
  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
  store float 1.000000e+00, ptr %19, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  store ptr null, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  store ptr null, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  store ptr null, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %25 = load ptr, ptr %4, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.s_mdgrid, ptr %25, i32 0, i32 5
  %27 = load float, ptr %26, align 4, !tbaa !13
  %28 = fpext float %27 to double
  %29 = fdiv double 1.000000e+00, %28
  %30 = fptosi double %29 to i32
  store i32 %30, ptr %24, align 4, !tbaa !9
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.c_lst_pockets, ptr %31, i32 0, i32 0
  %33 = load ptr, ptr %32, align 8, !tbaa !15
  store ptr %33, ptr %20, align 8, !tbaa !5
  br label %34

34:                                               ; preds = %414, %3
  %35 = load ptr, ptr %20, align 8, !tbaa !5
  %36 = icmp ne ptr %35, null
  br i1 %36, label %37, label %418

37:                                               ; preds = %34
  %38 = load ptr, ptr %20, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.node_pocket, ptr %38, i32 0, i32 2
  %40 = load ptr, ptr %39, align 8, !tbaa !18
  store ptr %40, ptr %21, align 8, !tbaa !5
  %41 = load ptr, ptr %21, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.s_pocket, ptr %41, i32 0, i32 1
  %43 = load ptr, ptr %42, align 8, !tbaa !20
  %44 = getelementptr inbounds %struct.c_lst_vertices, ptr %43, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8, !tbaa !22
  store ptr %45, ptr %22, align 8, !tbaa !5
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.s_mdparams, ptr %46, i32 0, i32 19
  %48 = load i32, ptr %47, align 8, !tbaa !24
  %49 = icmp ne i32 %48, 0
  br i1 %49, label %50, label %56

50:                                               ; preds = %37
  %51 = load ptr, ptr %21, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.s_pocket, ptr %51, i32 0, i32 0
  %53 = load ptr, ptr %52, align 8, !tbaa !27
  %54 = getelementptr inbounds %struct.s_desc, ptr %53, i32 0, i32 33
  %55 = load float, ptr %54, align 4, !tbaa !28
  store float %55, ptr %19, align 4, !tbaa !11
  br label %56

56:                                               ; preds = %50, %37
  br label %57

57:                                               ; preds = %362, %56
  %58 = load ptr, ptr %22, align 8, !tbaa !5
  %59 = icmp ne ptr %58, null
  br i1 %59, label %60, label %366

60:                                               ; preds = %57
  %61 = load ptr, ptr %22, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.node_vertice, ptr %61, i32 0, i32 2
  %63 = load ptr, ptr %62, align 8, !tbaa !30
  store ptr %63, ptr %23, align 8, !tbaa !5
  %64 = load ptr, ptr %23, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.s_vvertice, ptr %64, i32 0, i32 6
  %66 = load float, ptr %65, align 8, !tbaa !32
  store float %66, ptr %16, align 4, !tbaa !11
  %67 = load ptr, ptr %23, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.s_vvertice, ptr %67, i32 0, i32 7
  %69 = load float, ptr %68, align 4, !tbaa !34
  store float %69, ptr %17, align 4, !tbaa !11
  %70 = load ptr, ptr %23, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.s_vvertice, ptr %70, i32 0, i32 8
  %72 = load float, ptr %71, align 8, !tbaa !35
  store float %72, ptr %18, align 4, !tbaa !11
  %73 = load float, ptr %16, align 4, !tbaa !11
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.s_mdgrid, ptr %74, i32 0, i32 1
  %76 = load ptr, ptr %75, align 8, !tbaa !36
  %77 = getelementptr inbounds float, ptr %76, i64 0
  %78 = load float, ptr %77, align 4, !tbaa !11
  %79 = fsub float %73, %78
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.s_mdgrid, ptr %80, i32 0, i32 5
  %82 = load float, ptr %81, align 4, !tbaa !13
  %83 = fdiv float %79, %82
  %84 = call float @llvm.round.f32(float %83)
  %85 = fptosi float %84 to i32
  store i32 %85, ptr %7, align 4, !tbaa !9
  %86 = load float, ptr %17, align 4, !tbaa !11
  %87 = load ptr, ptr %4, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.s_mdgrid, ptr %87, i32 0, i32 1
  %89 = load ptr, ptr %88, align 8, !tbaa !36
  %90 = getelementptr inbounds float, ptr %89, i64 1
  %91 = load float, ptr %90, align 4, !tbaa !11
  %92 = fsub float %86, %91
  %93 = load ptr, ptr %4, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.s_mdgrid, ptr %93, i32 0, i32 5
  %95 = load float, ptr %94, align 4, !tbaa !13
  %96 = fdiv float %92, %95
  %97 = call float @llvm.round.f32(float %96)
  %98 = fptosi float %97 to i32
  store i32 %98, ptr %8, align 4, !tbaa !9
  %99 = load float, ptr %18, align 4, !tbaa !11
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.s_mdgrid, ptr %100, i32 0, i32 1
  %102 = load ptr, ptr %101, align 8, !tbaa !36
  %103 = getelementptr inbounds float, ptr %102, i64 2
  %104 = load float, ptr %103, align 4, !tbaa !11
  %105 = fsub float %99, %104
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.s_mdgrid, ptr %106, i32 0, i32 5
  %108 = load float, ptr %107, align 4, !tbaa !13
  %109 = fdiv float %105, %108
  %110 = call float @llvm.round.f32(float %109)
  %111 = fptosi float %110 to i32
  store i32 %111, ptr %9, align 4, !tbaa !9
  %112 = load i32, ptr %24, align 4, !tbaa !9
  %113 = sub nsw i32 0, %112
  store i32 %113, ptr %13, align 4, !tbaa !9
  br label %114

114:                                              ; preds = %359, %60
  %115 = load i32, ptr %13, align 4, !tbaa !9
  %116 = load i32, ptr %24, align 4, !tbaa !9
  %117 = icmp sle i32 %115, %116
  br i1 %117, label %118, label %362

118:                                              ; preds = %114
  %119 = load i32, ptr %24, align 4, !tbaa !9
  %120 = sub nsw i32 0, %119
  store i32 %120, ptr %14, align 4, !tbaa !9
  br label %121

121:                                              ; preds = %355, %118
  %122 = load i32, ptr %14, align 4, !tbaa !9
  %123 = load i32, ptr %24, align 4, !tbaa !9
  %124 = icmp sle i32 %122, %123
  br i1 %124, label %125, label %358

125:                                              ; preds = %121
  %126 = load i32, ptr %24, align 4, !tbaa !9
  %127 = sub nsw i32 0, %126
  store i32 %127, ptr %15, align 4, !tbaa !9
  br label %128

128:                                              ; preds = %351, %125
  %129 = load i32, ptr %15, align 4, !tbaa !9
  %130 = load i32, ptr %24, align 4, !tbaa !9
  %131 = icmp sle i32 %129, %130
  br i1 %131, label %132, label %354

132:                                              ; preds = %128
  %133 = load i32, ptr %13, align 4, !tbaa !9
  %134 = load i32, ptr %13, align 4, !tbaa !9
  %135 = mul nsw i32 %133, %134
  %136 = load i32, ptr %14, align 4, !tbaa !9
  %137 = load i32, ptr %14, align 4, !tbaa !9
  %138 = mul nsw i32 %136, %137
  %139 = add nsw i32 %135, %138
  %140 = load i32, ptr %15, align 4, !tbaa !9
  %141 = load i32, ptr %15, align 4, !tbaa !9
  %142 = mul nsw i32 %140, %141
  %143 = add nsw i32 %139, %142
  %144 = icmp ne i32 %143, 0
  br i1 %144, label %145, label %350

145:                                              ; preds = %132
  %146 = load i32, ptr %13, align 4, !tbaa !9
  %147 = icmp slt i32 %146, 0
  br i1 %147, label %148, label %166

148:                                              ; preds = %145
  %149 = load i32, ptr %13, align 4, !tbaa !9
  %150 = sitofp i32 %149 to float
  %151 = load float, ptr %16, align 4, !tbaa !11
  %152 = fadd float %150, %151
  %153 = load ptr, ptr %4, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.s_mdgrid, ptr %153, i32 0, i32 1
  %155 = load ptr, ptr %154, align 8, !tbaa !36
  %156 = getelementptr inbounds float, ptr %155, i64 0
  %157 = load float, ptr %156, align 4, !tbaa !11
  %158 = fsub float %152, %157
  %159 = load ptr, ptr %4, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.s_mdgrid, ptr %159, i32 0, i32 5
  %161 = load float, ptr %160, align 4, !tbaa !13
  %162 = fdiv float %158, %161
  %163 = fpext float %162 to double
  %164 = call double @llvm.ceil.f64(double %163)
  %165 = fptosi double %164 to i32
  store i32 %165, ptr %10, align 4, !tbaa !9
  br label %194

166:                                              ; preds = %145
  %167 = load i32, ptr %13, align 4, !tbaa !9
  %168 = icmp sgt i32 %167, 0
  br i1 %168, label %169, label %187

169:                                              ; preds = %166
  %170 = load i32, ptr %13, align 4, !tbaa !9
  %171 = sitofp i32 %170 to float
  %172 = load float, ptr %16, align 4, !tbaa !11
  %173 = fadd float %171, %172
  %174 = load ptr, ptr %4, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.s_mdgrid, ptr %174, i32 0, i32 1
  %176 = load ptr, ptr %175, align 8, !tbaa !36
  %177 = getelementptr inbounds float, ptr %176, i64 0
  %178 = load float, ptr %177, align 4, !tbaa !11
  %179 = fsub float %173, %178
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.s_mdgrid, ptr %180, i32 0, i32 5
  %182 = load float, ptr %181, align 4, !tbaa !13
  %183 = fdiv float %179, %182
  %184 = fpext float %183 to double
  %185 = call double @llvm.floor.f64(double %184)
  %186 = fptosi double %185 to i32
  store i32 %186, ptr %10, align 4, !tbaa !9
  br label %193

187:                                              ; preds = %166
  %188 = load i32, ptr %13, align 4, !tbaa !9
  %189 = icmp eq i32 %188, 0
  br i1 %189, label %190, label %192

190:                                              ; preds = %187
  %191 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %191, ptr %10, align 4, !tbaa !9
  br label %192

192:                                              ; preds = %190, %187
  br label %193

193:                                              ; preds = %192, %169
  br label %194

194:                                              ; preds = %193, %148
  %195 = load i32, ptr %14, align 4, !tbaa !9
  %196 = icmp slt i32 %195, 0
  br i1 %196, label %197, label %215

197:                                              ; preds = %194
  %198 = load i32, ptr %14, align 4, !tbaa !9
  %199 = sitofp i32 %198 to float
  %200 = load float, ptr %17, align 4, !tbaa !11
  %201 = fadd float %199, %200
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.s_mdgrid, ptr %202, i32 0, i32 1
  %204 = load ptr, ptr %203, align 8, !tbaa !36
  %205 = getelementptr inbounds float, ptr %204, i64 1
  %206 = load float, ptr %205, align 4, !tbaa !11
  %207 = fsub float %201, %206
  %208 = load ptr, ptr %4, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.s_mdgrid, ptr %208, i32 0, i32 5
  %210 = load float, ptr %209, align 4, !tbaa !13
  %211 = fdiv float %207, %210
  %212 = fpext float %211 to double
  %213 = call double @llvm.ceil.f64(double %212)
  %214 = fptosi double %213 to i32
  store i32 %214, ptr %11, align 4, !tbaa !9
  br label %243

215:                                              ; preds = %194
  %216 = load i32, ptr %14, align 4, !tbaa !9
  %217 = icmp sgt i32 %216, 0
  br i1 %217, label %218, label %236

218:                                              ; preds = %215
  %219 = load i32, ptr %14, align 4, !tbaa !9
  %220 = sitofp i32 %219 to float
  %221 = load float, ptr %17, align 4, !tbaa !11
  %222 = fadd float %220, %221
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.s_mdgrid, ptr %223, i32 0, i32 1
  %225 = load ptr, ptr %224, align 8, !tbaa !36
  %226 = getelementptr inbounds float, ptr %225, i64 1
  %227 = load float, ptr %226, align 4, !tbaa !11
  %228 = fsub float %222, %227
  %229 = load ptr, ptr %4, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.s_mdgrid, ptr %229, i32 0, i32 5
  %231 = load float, ptr %230, align 4, !tbaa !13
  %232 = fdiv float %228, %231
  %233 = fpext float %232 to double
  %234 = call double @llvm.floor.f64(double %233)
  %235 = fptosi double %234 to i32
  store i32 %235, ptr %11, align 4, !tbaa !9
  br label %242

236:                                              ; preds = %215
  %237 = load i32, ptr %14, align 4, !tbaa !9
  %238 = icmp eq i32 %237, 0
  br i1 %238, label %239, label %241

239:                                              ; preds = %236
  %240 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %240, ptr %11, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %239, %236
  br label %242

242:                                              ; preds = %241, %218
  br label %243

243:                                              ; preds = %242, %197
  %244 = load i32, ptr %15, align 4, !tbaa !9
  %245 = icmp slt i32 %244, 0
  br i1 %245, label %246, label %264

246:                                              ; preds = %243
  %247 = load i32, ptr %15, align 4, !tbaa !9
  %248 = sitofp i32 %247 to float
  %249 = load float, ptr %18, align 4, !tbaa !11
  %250 = fadd float %248, %249
  %251 = load ptr, ptr %4, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.s_mdgrid, ptr %251, i32 0, i32 1
  %253 = load ptr, ptr %252, align 8, !tbaa !36
  %254 = getelementptr inbounds float, ptr %253, i64 2
  %255 = load float, ptr %254, align 4, !tbaa !11
  %256 = fsub float %250, %255
  %257 = load ptr, ptr %4, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.s_mdgrid, ptr %257, i32 0, i32 5
  %259 = load float, ptr %258, align 4, !tbaa !13
  %260 = fdiv float %256, %259
  %261 = fpext float %260 to double
  %262 = call double @llvm.ceil.f64(double %261)
  %263 = fptosi double %262 to i32
  store i32 %263, ptr %12, align 4, !tbaa !9
  br label %292

264:                                              ; preds = %243
  %265 = load i32, ptr %15, align 4, !tbaa !9
  %266 = icmp sgt i32 %265, 0
  br i1 %266, label %267, label %285

267:                                              ; preds = %264
  %268 = load i32, ptr %15, align 4, !tbaa !9
  %269 = sitofp i32 %268 to float
  %270 = load float, ptr %18, align 4, !tbaa !11
  %271 = fadd float %269, %270
  %272 = load ptr, ptr %4, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.s_mdgrid, ptr %272, i32 0, i32 1
  %274 = load ptr, ptr %273, align 8, !tbaa !36
  %275 = getelementptr inbounds float, ptr %274, i64 2
  %276 = load float, ptr %275, align 4, !tbaa !11
  %277 = fsub float %271, %276
  %278 = load ptr, ptr %4, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.s_mdgrid, ptr %278, i32 0, i32 5
  %280 = load float, ptr %279, align 4, !tbaa !13
  %281 = fdiv float %277, %280
  %282 = fpext float %281 to double
  %283 = call double @llvm.floor.f64(double %282)
  %284 = fptosi double %283 to i32
  store i32 %284, ptr %12, align 4, !tbaa !9
  br label %291

285:                                              ; preds = %264
  %286 = load i32, ptr %15, align 4, !tbaa !9
  %287 = icmp eq i32 %286, 0
  br i1 %287, label %288, label %290

288:                                              ; preds = %285
  %289 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %289, ptr %12, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %288, %285
  br label %291

291:                                              ; preds = %290, %267
  br label %292

292:                                              ; preds = %291, %246
  %293 = load i32, ptr %10, align 4, !tbaa !9
  %294 = load i32, ptr %7, align 4, !tbaa !9
  %295 = icmp ne i32 %293, %294
  br i1 %295, label %304, label %296

296:                                              ; preds = %292
  %297 = load i32, ptr %11, align 4, !tbaa !9
  %298 = load i32, ptr %8, align 4, !tbaa !9
  %299 = icmp ne i32 %297, %298
  br i1 %299, label %304, label %300

300:                                              ; preds = %296
  %301 = load i32, ptr %12, align 4, !tbaa !9
  %302 = load i32, ptr %9, align 4, !tbaa !9
  %303 = icmp ne i32 %301, %302
  br i1 %303, label %304, label %349

304:                                              ; preds = %300, %296, %292
  %305 = load i32, ptr %10, align 4, !tbaa !9
  %306 = icmp sge i32 %305, 0
  br i1 %306, label %307, label %349

307:                                              ; preds = %304
  %308 = load i32, ptr %11, align 4, !tbaa !9
  %309 = icmp sge i32 %308, 0
  br i1 %309, label %310, label %349

310:                                              ; preds = %307
  %311 = load i32, ptr %12, align 4, !tbaa !9
  %312 = icmp sge i32 %311, 0
  br i1 %312, label %313, label %349

313:                                              ; preds = %310
  %314 = load i32, ptr %10, align 4, !tbaa !9
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.s_mdgrid, ptr %315, i32 0, i32 2
  %317 = load i32, ptr %316, align 8, !tbaa !37
  %318 = icmp slt i32 %314, %317
  br i1 %318, label %319, label %349

319:                                              ; preds = %313
  %320 = load i32, ptr %11, align 4, !tbaa !9
  %321 = load ptr, ptr %4, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.s_mdgrid, ptr %321, i32 0, i32 3
  %323 = load i32, ptr %322, align 4, !tbaa !38
  %324 = icmp slt i32 %320, %323
  br i1 %324, label %325, label %349

325:                                              ; preds = %319
  %326 = load i32, ptr %12, align 4, !tbaa !9
  %327 = load ptr, ptr %4, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.s_mdgrid, ptr %327, i32 0, i32 4
  %329 = load i32, ptr %328, align 8, !tbaa !39
  %330 = icmp slt i32 %326, %329
  br i1 %330, label %331, label %349

331:                                              ; preds = %325
  %332 = load float, ptr %19, align 4, !tbaa !11
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.s_mdgrid, ptr %333, i32 0, i32 0
  %335 = load ptr, ptr %334, align 8, !tbaa !40
  %336 = load i32, ptr %10, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds ptr, ptr %335, i64 %337
  %339 = load ptr, ptr %338, align 8, !tbaa !5
  %340 = load i32, ptr %11, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds ptr, ptr %339, i64 %341
  %343 = load ptr, ptr %342, align 8, !tbaa !5
  %344 = load i32, ptr %12, align 4, !tbaa !9
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds float, ptr %343, i64 %345
  %347 = load float, ptr %346, align 4, !tbaa !11
  %348 = fadd float %347, %332
  store float %348, ptr %346, align 4, !tbaa !11
  br label %349

349:                                              ; preds = %331, %325, %319, %313, %310, %307, %304, %300
  br label %350

350:                                              ; preds = %349, %132
  br label %351

351:                                              ; preds = %350
  %352 = load i32, ptr %15, align 4, !tbaa !9
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %15, align 4, !tbaa !9
  br label %128, !llvm.loop !41

354:                                              ; preds = %128
  br label %355

355:                                              ; preds = %354
  %356 = load i32, ptr %14, align 4, !tbaa !9
  %357 = add nsw i32 %356, 1
  store i32 %357, ptr %14, align 4, !tbaa !9
  br label %121, !llvm.loop !43

358:                                              ; preds = %121
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %13, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %13, align 4, !tbaa !9
  br label %114, !llvm.loop !44

362:                                              ; preds = %114
  %363 = load ptr, ptr %22, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.node_vertice, ptr %363, i32 0, i32 0
  %365 = load ptr, ptr %364, align 8, !tbaa !45
  store ptr %365, ptr %22, align 8, !tbaa !5
  br label %57, !llvm.loop !46

366:                                              ; preds = %57
  %367 = load i32, ptr %7, align 4, !tbaa !9
  %368 = load ptr, ptr %4, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.s_mdgrid, ptr %368, i32 0, i32 2
  %370 = load i32, ptr %369, align 8, !tbaa !37
  %371 = icmp slt i32 %367, %370
  br i1 %371, label %372, label %411

372:                                              ; preds = %366
  %373 = load i32, ptr %8, align 4, !tbaa !9
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.s_mdgrid, ptr %374, i32 0, i32 3
  %376 = load i32, ptr %375, align 4, !tbaa !38
  %377 = icmp slt i32 %373, %376
  br i1 %377, label %378, label %411

378:                                              ; preds = %372
  %379 = load i32, ptr %9, align 4, !tbaa !9
  %380 = load ptr, ptr %4, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.s_mdgrid, ptr %380, i32 0, i32 4
  %382 = load i32, ptr %381, align 8, !tbaa !39
  %383 = icmp slt i32 %379, %382
  br i1 %383, label %384, label %411

384:                                              ; preds = %378
  %385 = load i32, ptr %7, align 4, !tbaa !9
  %386 = icmp sge i32 %385, 0
  br i1 %386, label %387, label %411

387:                                              ; preds = %384
  %388 = load i32, ptr %8, align 4, !tbaa !9
  %389 = icmp sge i32 %388, 0
  br i1 %389, label %390, label %411

390:                                              ; preds = %387
  %391 = load i32, ptr %9, align 4, !tbaa !9
  %392 = icmp sge i32 %391, 0
  br i1 %392, label %393, label %411

393:                                              ; preds = %390
  %394 = load float, ptr %19, align 4, !tbaa !11
  %395 = load ptr, ptr %4, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.s_mdgrid, ptr %395, i32 0, i32 0
  %397 = load ptr, ptr %396, align 8, !tbaa !40
  %398 = load i32, ptr %7, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds ptr, ptr %397, i64 %399
  %401 = load ptr, ptr %400, align 8, !tbaa !5
  %402 = load i32, ptr %8, align 4, !tbaa !9
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds ptr, ptr %401, i64 %403
  %405 = load ptr, ptr %404, align 8, !tbaa !5
  %406 = load i32, ptr %9, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds float, ptr %405, i64 %407
  %409 = load float, ptr %408, align 4, !tbaa !11
  %410 = fadd float %409, %394
  store float %410, ptr %408, align 4, !tbaa !11
  br label %414

411:                                              ; preds = %390, %387, %384, %378, %372, %366
  %412 = load ptr, ptr @stderr, align 8, !tbaa !5
  %413 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %412, ptr noundef @.str.1) #4
  br label %414

414:                                              ; preds = %411, %393
  %415 = load ptr, ptr %20, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.node_pocket, ptr %415, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8, !tbaa !47
  store ptr %417, ptr %20, align 8, !tbaa !5
  br label %34, !llvm.loop !48

418:                                              ; preds = %34
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  ret void
}

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.floor.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 28}
!14 = !{!"s_mdgrid", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !12, i64 28, !10, i64 32}
!15 = !{!16, !6, i64 0}
!16 = !{!"c_lst_pockets", !6, i64 0, !6, i64 8, !6, i64 16, !17, i64 24, !6, i64 32}
!17 = !{!"long", !7, i64 0}
!18 = !{!19, !6, i64 16}
!19 = !{!"node_pocket", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!21, !6, i64 8}
!21 = !{!"s_pocket", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !7, i64 32, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56}
!22 = !{!23, !6, i64 0}
!23 = !{!"c_lst_vertices", !6, i64 0, !6, i64 8, !6, i64 16, !17, i64 24}
!24 = !{!25, !10, i64 2144}
!25 = !{!"s_mdparams", !6, i64 0, !7, i64 8, !6, i64 2008, !6, i64 2016, !6, i64 2024, !6, i64 2032, !6, i64 2040, !6, i64 2048, !6, i64 2056, !6, i64 2064, !6, i64 2072, !6, i64 2080, !6, i64 2088, !6, i64 2096, !6, i64 2104, !6, i64 2112, !6, i64 2120, !10, i64 2128, !6, i64 2136, !10, i64 2144, !10, i64 2148, !7, i64 2152, !12, i64 2164, !26, i64 2168, !7, i64 2170}
!26 = !{!"short", !7, i64 0}
!27 = !{!21, !6, i64 0}
!28 = !{!29, !12, i64 208}
!29 = !{!"s_desc", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !10, i64 108, !7, i64 112, !10, i64 192, !10, i64 196, !10, i64 200, !12, i64 204, !12, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !7, i64 232, !7, i64 487, !7, i64 742}
!30 = !{!31, !6, i64 16}
!31 = !{!"node_vertice", !6, i64 0, !6, i64 8, !6, i64 16}
!32 = !{!33, !12, i64 24}
!33 = !{!"s_vvertice", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !10, i64 36, !10, i64 40, !7, i64 44, !7, i64 64, !7, i64 96, !12, i64 108}
!34 = !{!33, !12, i64 28}
!35 = !{!33, !12, i64 32}
!36 = !{!14, !6, i64 8}
!37 = !{!14, !10, i64 16}
!38 = !{!14, !10, i64 20}
!39 = !{!14, !10, i64 24}
!40 = !{!14, !6, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = distinct !{!43, !42}
!44 = distinct !{!44, !42}
!45 = !{!31, !6, i64 0}
!46 = distinct !{!46, !42}
!47 = !{!19, !6, i64 0}
!48 = distinct !{!48, !42}


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [241 x i8], align 1

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

; Function Attrs: nofree nounwind uwtable
define dso_local void @calculate_md_dens_grid(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2) local_unnamed_addr #1 {
  %4 = getelementptr inbounds i8, ptr %0, i64 28
  %.0125208 = load ptr, ptr %1, align 8, !tbaa !5
  %.not209 = icmp eq ptr %.0125208, null
  br i1 %.not209, label %._crit_edge220, label %.lr.ph219

.lr.ph219:                                        ; preds = %3
  %5 = load float, ptr %4, align 4, !tbaa !9
  %6 = fpext float %5 to double
  %7 = fdiv double 1.000000e+00, %6
  %8 = fptosi double %7 to i32
  %9 = getelementptr inbounds i8, ptr %2, i64 2144
  %10 = getelementptr inbounds i8, ptr %0, i64 8
  %11 = sub nsw i32 0, %8
  %.not154184 = icmp slt i32 %8, 0
  %12 = getelementptr inbounds i8, ptr %0, i64 16
  %13 = getelementptr inbounds i8, ptr %0, i64 20
  %14 = getelementptr inbounds i8, ptr %0, i64 24
  br label %15

15:                                               ; preds = %.lr.ph219, %188
  %.0125217 = phi ptr [ %.0125208, %.lr.ph219 ], [ %.0125, %188 ]
  %.0126215 = phi float [ 1.000000e+00, %.lr.ph219 ], [ %.1127, %188 ]
  %.0130213 = phi i32 [ 0, %.lr.ph219 ], [ %.1131.lcssa, %188 ]
  %16 = phi <2 x i32> [ zeroinitializer, %.lr.ph219 ], [ %158, %188 ]
  %17 = getelementptr inbounds i8, ptr %.0125217, i64 16
  %18 = load ptr, ptr %17, align 8, !tbaa !13
  %19 = getelementptr inbounds i8, ptr %18, i64 8
  %20 = load ptr, ptr %19, align 8, !tbaa !15
  %21 = load ptr, ptr %20, align 8, !tbaa !17
  %22 = load i32, ptr %9, align 8, !tbaa !20
  %.not152 = icmp eq i32 %22, 0
  br i1 %.not152, label %27, label %23

23:                                               ; preds = %15
  %24 = load ptr, ptr %18, align 8, !tbaa !23
  %25 = getelementptr inbounds i8, ptr %24, i64 208
  %26 = load float, ptr %25, align 4, !tbaa !24
  br label %27

27:                                               ; preds = %23, %15
  %.1127 = phi float [ %26, %23 ], [ %.0126215, %15 ]
  %.not153195 = icmp eq ptr %21, null
  br i1 %.not153195, label %._crit_edge201, label %.lr.ph

.lr.ph:                                           ; preds = %27
  %28 = load ptr, ptr %10, align 8, !tbaa !26
  %29 = getelementptr inbounds i8, ptr %28, i64 4
  %30 = getelementptr inbounds i8, ptr %28, i64 8
  br label %31

31:                                               ; preds = %.lr.ph, %._crit_edge189.split
  %.0124199 = phi ptr [ %21, %.lr.ph ], [ %157, %._crit_edge189.split ]
  %32 = getelementptr inbounds i8, ptr %.0124199, i64 16
  %33 = load ptr, ptr %32, align 8, !tbaa !27
  %34 = getelementptr inbounds i8, ptr %33, i64 24
  %35 = getelementptr inbounds i8, ptr %33, i64 32
  %36 = load float, ptr %35, align 8, !tbaa !29
  %37 = load float, ptr %4, align 4, !tbaa !9
  %38 = load <2 x float>, ptr %34, align 8, !tbaa !31
  %39 = load <2 x float>, ptr %28, align 4, !tbaa !31
  %40 = fsub <2 x float> %38, %39
  %41 = insertelement <2 x float> poison, float %37, i64 0
  %42 = shufflevector <2 x float> %41, <2 x float> poison, <2 x i32> zeroinitializer
  %43 = fdiv <2 x float> %40, %42
  %44 = tail call <2 x float> @llvm.round.v2f32(<2 x float> %43)
  %45 = fptosi <2 x float> %44 to <2 x i32>
  %46 = load float, ptr %30, align 4, !tbaa !31
  %47 = fsub float %36, %46
  %48 = fdiv float %47, %37
  %49 = tail call float @llvm.round.f32(float %48)
  %50 = fptosi float %49 to i32
  br i1 %.not154184, label %._crit_edge189.split, label %.preheader164.preheader

.preheader164.preheader:                          ; preds = %31
  %51 = extractelement <2 x i32> %45, i64 0
  %52 = icmp sgt i32 %51, -1
  %53 = extractelement <2 x float> %38, i64 0
  %54 = extractelement <2 x float> %38, i64 1
  %55 = extractelement <2 x i32> %45, i64 1
  br label %.preheader164

.preheader164:                                    ; preds = %.preheader164.preheader, %._crit_edge178.split
  %.0136187 = phi i32 [ %156, %._crit_edge178.split ], [ %11, %.preheader164.preheader ]
  %56 = mul nsw i32 %.0136187, %.0136187
  %57 = icmp slt i32 %.0136187, 0
  %.not158 = icmp eq i32 %.0136187, 0
  %58 = uitofp nneg i32 %.0136187 to float
  %59 = fadd float %53, %58
  %60 = sitofp i32 %.0136187 to float
  %61 = fadd float %53, %60
  br label %.preheader

.preheader:                                       ; preds = %.preheader164, %._crit_edge
  %.0135176 = phi i32 [ %11, %.preheader164 ], [ %155, %._crit_edge ]
  %62 = mul nsw i32 %.0135176, %.0135176
  %63 = add nuw nsw i32 %62, %56
  %64 = icmp slt i32 %.0135176, 0
  %.not159 = icmp eq i32 %.0135176, 0
  %65 = uitofp nneg i32 %.0135176 to float
  %66 = fadd float %54, %65
  %67 = sitofp i32 %.0135176 to float
  %68 = fadd float %54, %67
  br label %69

69:                                               ; preds = %.preheader, %153
  %.0134168 = phi i32 [ %11, %.preheader ], [ %154, %153 ]
  %70 = mul nsw i32 %.0134168, %.0134168
  %71 = or i32 %70, %63
  %.not157 = icmp eq i32 %71, 0
  br i1 %.not157, label %153, label %72

72:                                               ; preds = %69
  br i1 %57, label %73, label %80

73:                                               ; preds = %72
  %74 = load float, ptr %28, align 4, !tbaa !31
  %75 = fsub float %61, %74
  %76 = load float, ptr %4, align 4, !tbaa !9
  %77 = fdiv float %75, %76
  %78 = tail call float @llvm.ceil.f32(float %77)
  %79 = fptosi float %78 to i32
  br label %88

80:                                               ; preds = %72
  br i1 %.not158, label %88, label %81

81:                                               ; preds = %80
  %82 = load float, ptr %28, align 4, !tbaa !31
  %83 = fsub float %59, %82
  %84 = load float, ptr %4, align 4, !tbaa !9
  %85 = fdiv float %83, %84
  %86 = tail call float @llvm.floor.f32(float %85)
  %87 = fptosi float %86 to i32
  br label %88

88:                                               ; preds = %80, %81, %73
  %.5 = phi i32 [ %79, %73 ], [ %87, %81 ], [ %51, %80 ]
  br i1 %64, label %89, label %96

89:                                               ; preds = %88
  %90 = load float, ptr %29, align 4, !tbaa !31
  %91 = fsub float %68, %90
  %92 = load float, ptr %4, align 4, !tbaa !9
  %93 = fdiv float %91, %92
  %94 = tail call float @llvm.ceil.f32(float %93)
  %95 = fptosi float %94 to i32
  br label %104

96:                                               ; preds = %88
  br i1 %.not159, label %104, label %97

97:                                               ; preds = %96
  %98 = load float, ptr %29, align 4, !tbaa !31
  %99 = fsub float %66, %98
  %100 = load float, ptr %4, align 4, !tbaa !9
  %101 = fdiv float %99, %100
  %102 = tail call float @llvm.floor.f32(float %101)
  %103 = fptosi float %102 to i32
  br label %104

104:                                              ; preds = %96, %97, %89
  %.5149 = phi i32 [ %95, %89 ], [ %103, %97 ], [ %55, %96 ]
  %105 = icmp slt i32 %.0134168, 0
  br i1 %105, label %106, label %115

106:                                              ; preds = %104
  %107 = sitofp i32 %.0134168 to float
  %108 = fadd float %36, %107
  %109 = load float, ptr %30, align 4, !tbaa !31
  %110 = fsub float %108, %109
  %111 = load float, ptr %4, align 4, !tbaa !9
  %112 = fdiv float %110, %111
  %113 = tail call float @llvm.ceil.f32(float %112)
  %114 = fptosi float %113 to i32
  br label %125

115:                                              ; preds = %104
  %.not160 = icmp eq i32 %.0134168, 0
  br i1 %.not160, label %125, label %116

116:                                              ; preds = %115
  %117 = uitofp nneg i32 %.0134168 to float
  %118 = fadd float %36, %117
  %119 = load float, ptr %30, align 4, !tbaa !31
  %120 = fsub float %118, %119
  %121 = load float, ptr %4, align 4, !tbaa !9
  %122 = fdiv float %120, %121
  %123 = tail call float @llvm.floor.f32(float %122)
  %124 = fptosi float %123 to i32
  br label %125

125:                                              ; preds = %115, %116, %106
  %.5142 = phi i32 [ %114, %106 ], [ %124, %116 ], [ %50, %115 ]
  %.not161 = icmp eq i32 %.5, %51
  %.not162 = icmp eq i32 %.5149, %55
  %or.cond163 = select i1 %.not161, i1 %.not162, i1 false
  br i1 %or.cond163, label %126, label %128

126:                                              ; preds = %125
  %127 = icmp ne i32 %.5142, %50
  %or.cond = select i1 %127, i1 %52, i1 false
  br i1 %or.cond, label %129, label %153

128:                                              ; preds = %125
  %.old1 = icmp sgt i32 %.5, -1
  br i1 %.old1, label %129, label %153

129:                                              ; preds = %126, %128
  %130 = icmp sgt i32 %.5149, -1
  %131 = icmp sgt i32 %.5142, -1
  %or.cond4 = select i1 %130, i1 %131, i1 false
  br i1 %or.cond4, label %132, label %153

132:                                              ; preds = %129
  %133 = load i32, ptr %12, align 8, !tbaa !32
  %134 = icmp slt i32 %.5, %133
  br i1 %134, label %135, label %153

135:                                              ; preds = %132
  %136 = load i32, ptr %13, align 4, !tbaa !33
  %137 = icmp slt i32 %.5149, %136
  br i1 %137, label %138, label %153

138:                                              ; preds = %135
  %139 = load i32, ptr %14, align 8, !tbaa !34
  %140 = icmp slt i32 %.5142, %139
  br i1 %140, label %141, label %153

141:                                              ; preds = %138
  %142 = load ptr, ptr %0, align 8, !tbaa !35
  %143 = zext nneg i32 %.5 to i64
  %144 = getelementptr inbounds ptr, ptr %142, i64 %143
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  %146 = zext nneg i32 %.5149 to i64
  %147 = getelementptr inbounds ptr, ptr %145, i64 %146
  %148 = load ptr, ptr %147, align 8, !tbaa !5
  %149 = zext nneg i32 %.5142 to i64
  %150 = getelementptr inbounds float, ptr %148, i64 %149
  %151 = load float, ptr %150, align 4, !tbaa !31
  %152 = fadd float %.1127, %151
  store float %152, ptr %150, align 4, !tbaa !31
  br label %153

153:                                              ; preds = %69, %141, %138, %135, %132, %129, %128, %126
  %154 = add i32 %.0134168, 1
  %exitcond.not = icmp eq i32 %.0134168, %8
  br i1 %exitcond.not, label %._crit_edge, label %69, !llvm.loop !36

._crit_edge:                                      ; preds = %153
  %155 = add i32 %.0135176, 1
  %exitcond223.not = icmp eq i32 %.0135176, %8
  br i1 %exitcond223.not, label %._crit_edge178.split, label %.preheader, !llvm.loop !38

._crit_edge178.split:                             ; preds = %._crit_edge
  %156 = add i32 %.0136187, 1
  %exitcond224.not = icmp eq i32 %.0136187, %8
  br i1 %exitcond224.not, label %._crit_edge189.split, label %.preheader164, !llvm.loop !39

._crit_edge189.split:                             ; preds = %._crit_edge178.split, %31
  %157 = load ptr, ptr %.0124199, align 8, !tbaa !40
  %.not153 = icmp eq ptr %157, null
  br i1 %.not153, label %._crit_edge201, label %31, !llvm.loop !41

._crit_edge201:                                   ; preds = %._crit_edge189.split, %27
  %.1131.lcssa = phi i32 [ %.0130213, %27 ], [ %50, %._crit_edge189.split ]
  %158 = phi <2 x i32> [ %16, %27 ], [ %45, %._crit_edge189.split ]
  %159 = load i32, ptr %12, align 8, !tbaa !32
  %160 = extractelement <2 x i32> %158, i64 0
  %161 = icmp slt i32 %160, %159
  br i1 %161, label %162, label %185

162:                                              ; preds = %._crit_edge201
  %163 = load i32, ptr %13, align 4, !tbaa !33
  %164 = extractelement <2 x i32> %158, i64 1
  %165 = icmp slt i32 %164, %163
  br i1 %165, label %166, label %185

166:                                              ; preds = %162
  %167 = load i32, ptr %14, align 8, !tbaa !34
  %168 = icmp slt i32 %.1131.lcssa, %167
  %169 = icmp sgt <2 x i32> %158, <i32 -1, i32 -1>
  %170 = extractelement <2 x i1> %169, i64 0
  %or.cond7 = and i1 %168, %170
  %171 = extractelement <2 x i1> %169, i64 1
  %or.cond10 = select i1 %or.cond7, i1 %171, i1 false
  %172 = icmp sgt i32 %.1131.lcssa, -1
  %or.cond13 = select i1 %or.cond10, i1 %172, i1 false
  br i1 %or.cond13, label %173, label %185

173:                                              ; preds = %166
  %174 = load ptr, ptr %0, align 8, !tbaa !35
  %175 = zext nneg i32 %160 to i64
  %176 = getelementptr inbounds ptr, ptr %174, i64 %175
  %177 = load ptr, ptr %176, align 8, !tbaa !5
  %178 = zext nneg i32 %164 to i64
  %179 = getelementptr inbounds ptr, ptr %177, i64 %178
  %180 = load ptr, ptr %179, align 8, !tbaa !5
  %181 = zext nneg i32 %.1131.lcssa to i64
  %182 = getelementptr inbounds float, ptr %180, i64 %181
  %183 = load float, ptr %182, align 4, !tbaa !31
  %184 = fadd float %.1127, %183
  store float %184, ptr %182, align 4, !tbaa !31
  br label %188

185:                                              ; preds = %166, %162, %._crit_edge201
  %186 = load ptr, ptr @stderr, align 8, !tbaa !5
  %187 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %186, ptr noundef nonnull @.str.1) #4
  br label %188

188:                                              ; preds = %185, %173
  %.0125 = load ptr, ptr %.0125217, align 8, !tbaa !5
  %.not = icmp eq ptr %.0125, null
  br i1 %.not, label %._crit_edge220, label %15, !llvm.loop !42

._crit_edge220:                                   ; preds = %188, %3
  ret void
}

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.round.v2f32(<2 x float>) #3

attributes #0 = { 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 #1 = { nofree 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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { cold 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, !12, i64 28}
!10 = !{!"s_mdgrid", !6, i64 0, !6, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !12, i64 28, !11, i64 32}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !6, i64 16}
!14 = !{!"node_pocket", !6, i64 0, !6, i64 8, !6, i64 16}
!15 = !{!16, !6, i64 8}
!16 = !{!"s_pocket", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !7, i64 32, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56}
!17 = !{!18, !6, i64 0}
!18 = !{!"c_lst_vertices", !6, i64 0, !6, i64 8, !6, i64 16, !19, i64 24}
!19 = !{!"long", !7, i64 0}
!20 = !{!21, !11, i64 2144}
!21 = !{!"s_mdparams", !6, i64 0, !7, i64 8, !6, i64 2008, !6, i64 2016, !6, i64 2024, !6, i64 2032, !6, i64 2040, !6, i64 2048, !6, i64 2056, !6, i64 2064, !6, i64 2072, !6, i64 2080, !6, i64 2088, !6, i64 2096, !6, i64 2104, !6, i64 2112, !6, i64 2120, !11, i64 2128, !6, i64 2136, !11, i64 2144, !11, i64 2148, !7, i64 2152, !12, i64 2164, !22, i64 2168, !7, i64 2170}
!22 = !{!"short", !7, i64 0}
!23 = !{!16, !6, i64 0}
!24 = !{!25, !12, i64 208}
!25 = !{!"s_desc", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !11, i64 108, !7, i64 112, !11, i64 192, !11, i64 196, !11, i64 200, !12, i64 204, !12, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !7, i64 232, !7, i64 487, !7, i64 742}
!26 = !{!10, !6, i64 8}
!27 = !{!28, !6, i64 16}
!28 = !{!"node_vertice", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!30, !12, i64 32}
!30 = !{!"s_vvertice", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !11, i64 36, !11, i64 40, !7, i64 44, !7, i64 64, !7, i64 96, !12, i64 108}
!31 = !{!12, !12, i64 0}
!32 = !{!10, !11, i64 16}
!33 = !{!10, !11, i64 20}
!34 = !{!10, !11, i64 24}
!35 = !{!10, !6, i64 0}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = distinct !{!38, !37}
!39 = distinct !{!39, !37}
!40 = !{!28, !6, i64 0}
!41 = distinct !{!41, !37}
!42 = distinct !{!42, !37}


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