; LLVM IR from stfc/PSycloneBench :: benchmarks/nemo/nemolite2d/manual_versions/psykal_cpp (time_step_ompopt)

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

; Function Attrs: mustprogress uwtable
define dso_local void @c_invoke_time_step(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, i32 noundef %26, i32 noundef %27, i32 noundef %28, i32 noundef %29, i32 noundef %30, double noundef %31, double noundef %32, double noundef %33, double noundef %34, double noundef %35, double noundef %36) #0 {
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca double, align 8
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  store ptr %0, ptr %38, align 8, !tbaa !5
  store ptr %1, ptr %39, align 8, !tbaa !5
  store ptr %2, ptr %40, align 8, !tbaa !5
  store ptr %3, ptr %41, align 8, !tbaa !5
  store ptr %4, ptr %42, align 8, !tbaa !5
  store ptr %5, ptr %43, align 8, !tbaa !5
  store ptr %6, ptr %44, align 8, !tbaa !5
  store ptr %7, ptr %45, align 8, !tbaa !5
  store ptr %8, ptr %46, align 8, !tbaa !5
  store ptr %9, ptr %47, align 8, !tbaa !5
  store ptr %10, ptr %48, align 8, !tbaa !5
  store ptr %11, ptr %49, align 8, !tbaa !5
  store ptr %12, ptr %50, align 8, !tbaa !5
  store ptr %13, ptr %51, align 8, !tbaa !5
  store ptr %14, ptr %52, align 8, !tbaa !5
  store ptr %15, ptr %53, align 8, !tbaa !5
  store ptr %16, ptr %54, align 8, !tbaa !5
  store ptr %17, ptr %55, align 8, !tbaa !5
  store ptr %18, ptr %56, align 8, !tbaa !5
  store ptr %19, ptr %57, align 8, !tbaa !5
  store ptr %20, ptr %58, align 8, !tbaa !5
  store ptr %21, ptr %59, align 8, !tbaa !5
  store ptr %22, ptr %60, align 8, !tbaa !5
  store ptr %23, ptr %61, align 8, !tbaa !5
  store ptr %24, ptr %62, align 8, !tbaa !5
  store i32 %25, ptr %63, align 4, !tbaa !9
  store i32 %26, ptr %64, align 4, !tbaa !9
  store i32 %27, ptr %65, align 4, !tbaa !9
  store i32 %28, ptr %66, align 4, !tbaa !9
  store i32 %29, ptr %67, align 4, !tbaa !9
  store i32 %30, ptr %68, align 4, !tbaa !9
  store double %31, ptr %69, align 8, !tbaa !11
  store double %32, ptr %70, align 8, !tbaa !11
  store double %33, ptr %71, align 8, !tbaa !11
  store double %34, ptr %72, align 8, !tbaa !11
  store double %35, ptr %73, align 8, !tbaa !11
  store double %36, ptr %74, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #3
  %91 = load i32, ptr %66, align 4, !tbaa !9
  store i32 %91, ptr %75, align 4, !tbaa !9
  br label %92

92:                                               ; preds = %183, %37
  %93 = load i32, ptr %75, align 4, !tbaa !9
  %94 = load i32, ptr %67, align 4, !tbaa !9
  %95 = icmp sle i32 %93, %94
  br i1 %95, label %97, label %96

96:                                               ; preds = %92
  store i32 2, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #3
  br label %186

97:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #3
  %98 = load i32, ptr %64, align 4, !tbaa !9
  store i32 %98, ptr %77, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %179, %97
  %100 = load i32, ptr %77, align 4, !tbaa !9
  %101 = load i32, ptr %65, align 4, !tbaa !9
  %102 = icmp sle i32 %100, %101
  br i1 %102, label %104, label %103

103:                                              ; preds = %99
  store i32 5, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #3
  br label %182

104:                                              ; preds = %99
  %105 = load i32, ptr %77, align 4, !tbaa !9
  %106 = load i32, ptr %75, align 4, !tbaa !9
  %107 = load i32, ptr %68, align 4, !tbaa !9
  %108 = load ptr, ptr %38, align 8, !tbaa !5
  %109 = load ptr, ptr %39, align 8, !tbaa !5
  %110 = load ptr, ptr %40, align 8, !tbaa !5
  %111 = load ptr, ptr %41, align 8, !tbaa !5
  %112 = load ptr, ptr %42, align 8, !tbaa !5
  %113 = load ptr, ptr %43, align 8, !tbaa !5
  %114 = load ptr, ptr %44, align 8, !tbaa !5
  %115 = load ptr, ptr %45, align 8, !tbaa !5
  %116 = load double, ptr %69, align 8, !tbaa !11
  %117 = load ptr, ptr %52, align 8, !tbaa !5
  call void @_Z15continuity_codeiiiPdS_S_S_S_S_S_S_dS_(i32 noundef %105, i32 noundef %106, i32 noundef %107, ptr noundef %108, ptr noundef %109, ptr noundef %110, ptr noundef %111, ptr noundef %112, ptr noundef %113, ptr noundef %114, ptr noundef %115, double noundef %116, ptr noundef %117)
  %118 = load i32, ptr %77, align 4, !tbaa !9
  %119 = load i32, ptr %75, align 4, !tbaa !9
  %120 = load i32, ptr %68, align 4, !tbaa !9
  %121 = load i32, ptr %63, align 4, !tbaa !9
  %122 = load ptr, ptr %38, align 8, !tbaa !5
  %123 = load ptr, ptr %51, align 8, !tbaa !5
  %124 = load double, ptr %69, align 8, !tbaa !11
  call void @_Z11bc_ssh_codeiiiiPdPid(i32 noundef %118, i32 noundef %119, i32 noundef %120, i32 noundef %121, ptr noundef %122, ptr noundef %123, double noundef %124)
  %125 = load i32, ptr %77, align 4, !tbaa !9
  %126 = load i32, ptr %75, align 4, !tbaa !9
  %127 = load i32, ptr %68, align 4, !tbaa !9
  %128 = load ptr, ptr %46, align 8, !tbaa !5
  %129 = load ptr, ptr %44, align 8, !tbaa !5
  %130 = load ptr, ptr %45, align 8, !tbaa !5
  %131 = load ptr, ptr %42, align 8, !tbaa !5
  %132 = load ptr, ptr %43, align 8, !tbaa !5
  %133 = load ptr, ptr %47, align 8, !tbaa !5
  %134 = load ptr, ptr %48, align 8, !tbaa !5
  %135 = load ptr, ptr %39, align 8, !tbaa !5
  %136 = load ptr, ptr %40, align 8, !tbaa !5
  %137 = load ptr, ptr %41, align 8, !tbaa !5
  %138 = load ptr, ptr %51, align 8, !tbaa !5
  %139 = load ptr, ptr %55, align 8, !tbaa !5
  %140 = load ptr, ptr %56, align 8, !tbaa !5
  %141 = load ptr, ptr %57, align 8, !tbaa !5
  %142 = load ptr, ptr %58, align 8, !tbaa !5
  %143 = load ptr, ptr %60, align 8, !tbaa !5
  %144 = load ptr, ptr %53, align 8, !tbaa !5
  %145 = load ptr, ptr %61, align 8, !tbaa !5
  %146 = load double, ptr %69, align 8, !tbaa !11
  %147 = load double, ptr %70, align 8, !tbaa !11
  %148 = load double, ptr %71, align 8, !tbaa !11
  %149 = load double, ptr %72, align 8, !tbaa !11
  %150 = load double, ptr %73, align 8, !tbaa !11
  %151 = load double, ptr %74, align 8, !tbaa !11
  call void @_Z15momentum_u_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef %125, i32 noundef %126, i32 noundef %127, ptr noundef %128, ptr noundef %129, ptr noundef %130, ptr noundef %131, ptr noundef %132, ptr noundef %133, ptr noundef %134, ptr noundef %135, ptr noundef %136, ptr noundef %137, ptr noundef %138, ptr noundef %139, ptr noundef %140, ptr noundef %141, ptr noundef %142, ptr noundef %143, ptr noundef %144, ptr noundef %145, double noundef %146, double noundef %147, double noundef %148, double noundef %149, double noundef %150, double noundef %151)
  %152 = load i32, ptr %77, align 4, !tbaa !9
  %153 = load i32, ptr %75, align 4, !tbaa !9
  %154 = load i32, ptr %68, align 4, !tbaa !9
  %155 = load ptr, ptr %49, align 8, !tbaa !5
  %156 = load ptr, ptr %44, align 8, !tbaa !5
  %157 = load ptr, ptr %45, align 8, !tbaa !5
  %158 = load ptr, ptr %42, align 8, !tbaa !5
  %159 = load ptr, ptr %43, align 8, !tbaa !5
  %160 = load ptr, ptr %47, align 8, !tbaa !5
  %161 = load ptr, ptr %50, align 8, !tbaa !5
  %162 = load ptr, ptr %39, align 8, !tbaa !5
  %163 = load ptr, ptr %40, align 8, !tbaa !5
  %164 = load ptr, ptr %41, align 8, !tbaa !5
  %165 = load ptr, ptr %51, align 8, !tbaa !5
  %166 = load ptr, ptr %56, align 8, !tbaa !5
  %167 = load ptr, ptr %57, align 8, !tbaa !5
  %168 = load ptr, ptr %58, align 8, !tbaa !5
  %169 = load ptr, ptr %59, align 8, !tbaa !5
  %170 = load ptr, ptr %60, align 8, !tbaa !5
  %171 = load ptr, ptr %54, align 8, !tbaa !5
  %172 = load ptr, ptr %62, align 8, !tbaa !5
  %173 = load double, ptr %69, align 8, !tbaa !11
  %174 = load double, ptr %70, align 8, !tbaa !11
  %175 = load double, ptr %71, align 8, !tbaa !11
  %176 = load double, ptr %72, align 8, !tbaa !11
  %177 = load double, ptr %73, align 8, !tbaa !11
  %178 = load double, ptr %74, align 8, !tbaa !11
  call void @_Z15momentum_v_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef %152, i32 noundef %153, i32 noundef %154, ptr noundef %155, ptr noundef %156, ptr noundef %157, ptr noundef %158, ptr noundef %159, ptr noundef %160, ptr noundef %161, ptr noundef %162, ptr noundef %163, ptr noundef %164, ptr noundef %165, ptr noundef %166, ptr noundef %167, ptr noundef %168, ptr noundef %169, ptr noundef %170, ptr noundef %171, ptr noundef %172, double noundef %173, double noundef %174, double noundef %175, double noundef %176, double noundef %177, double noundef %178)
  br label %179

179:                                              ; preds = %104
  %180 = load i32, ptr %77, align 4, !tbaa !9
  %181 = add nsw i32 %180, 1
  store i32 %181, ptr %77, align 4, !tbaa !9
  br label %99, !llvm.loop !13

182:                                              ; preds = %103
  br label %183

183:                                              ; preds = %182
  %184 = load i32, ptr %75, align 4, !tbaa !9
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %75, align 4, !tbaa !9
  br label %92, !llvm.loop !15

186:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #3
  %187 = load i32, ptr %66, align 4, !tbaa !9
  %188 = sub nsw i32 %187, 1
  store i32 %188, ptr %78, align 4, !tbaa !9
  br label %189

189:                                              ; preds = %213, %186
  %190 = load i32, ptr %78, align 4, !tbaa !9
  %191 = load i32, ptr %67, align 4, !tbaa !9
  %192 = add nsw i32 %191, 1
  %193 = icmp sle i32 %190, %192
  br i1 %193, label %195, label %194

194:                                              ; preds = %189
  store i32 8, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #3
  br label %216

195:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #3
  %196 = load i32, ptr %64, align 4, !tbaa !9
  %197 = sub nsw i32 %196, 1
  store i32 %197, ptr %79, align 4, !tbaa !9
  br label %198

198:                                              ; preds = %209, %195
  %199 = load i32, ptr %79, align 4, !tbaa !9
  %200 = load i32, ptr %65, align 4, !tbaa !9
  %201 = icmp sle i32 %199, %200
  br i1 %201, label %203, label %202

202:                                              ; preds = %198
  store i32 11, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #3
  br label %212

203:                                              ; preds = %198
  %204 = load i32, ptr %79, align 4, !tbaa !9
  %205 = load i32, ptr %78, align 4, !tbaa !9
  %206 = load i32, ptr %68, align 4, !tbaa !9
  %207 = load ptr, ptr %46, align 8, !tbaa !5
  %208 = load ptr, ptr %51, align 8, !tbaa !5
  call void @_Z15bc_solid_u_codeiiiPdPi(i32 noundef %204, i32 noundef %205, i32 noundef %206, ptr noundef %207, ptr noundef %208)
  br label %209

209:                                              ; preds = %203
  %210 = load i32, ptr %79, align 4, !tbaa !9
  %211 = add nsw i32 %210, 1
  store i32 %211, ptr %79, align 4, !tbaa !9
  br label %198, !llvm.loop !16

212:                                              ; preds = %202
  br label %213

213:                                              ; preds = %212
  %214 = load i32, ptr %78, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %78, align 4, !tbaa !9
  br label %189, !llvm.loop !17

216:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #3
  %217 = load i32, ptr %66, align 4, !tbaa !9
  %218 = sub nsw i32 %217, 1
  store i32 %218, ptr %80, align 4, !tbaa !9
  br label %219

219:                                              ; preds = %243, %216
  %220 = load i32, ptr %80, align 4, !tbaa !9
  %221 = load i32, ptr %67, align 4, !tbaa !9
  %222 = icmp sle i32 %220, %221
  br i1 %222, label %224, label %223

223:                                              ; preds = %219
  store i32 14, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #3
  br label %246

224:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #3
  %225 = load i32, ptr %64, align 4, !tbaa !9
  %226 = sub nsw i32 %225, 1
  store i32 %226, ptr %81, align 4, !tbaa !9
  br label %227

227:                                              ; preds = %239, %224
  %228 = load i32, ptr %81, align 4, !tbaa !9
  %229 = load i32, ptr %65, align 4, !tbaa !9
  %230 = add nsw i32 %229, 1
  %231 = icmp sle i32 %228, %230
  br i1 %231, label %233, label %232

232:                                              ; preds = %227
  store i32 17, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #3
  br label %242

233:                                              ; preds = %227
  %234 = load i32, ptr %81, align 4, !tbaa !9
  %235 = load i32, ptr %80, align 4, !tbaa !9
  %236 = load i32, ptr %68, align 4, !tbaa !9
  %237 = load ptr, ptr %49, align 8, !tbaa !5
  %238 = load ptr, ptr %51, align 8, !tbaa !5
  call void @_Z15bc_solid_v_codeiiiPdPi(i32 noundef %234, i32 noundef %235, i32 noundef %236, ptr noundef %237, ptr noundef %238)
  br label %239

239:                                              ; preds = %233
  %240 = load i32, ptr %81, align 4, !tbaa !9
  %241 = add nsw i32 %240, 1
  store i32 %241, ptr %81, align 4, !tbaa !9
  br label %227, !llvm.loop !18

242:                                              ; preds = %232
  br label %243

243:                                              ; preds = %242
  %244 = load i32, ptr %80, align 4, !tbaa !9
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %80, align 4, !tbaa !9
  br label %219, !llvm.loop !19

246:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #3
  %247 = load i32, ptr %66, align 4, !tbaa !9
  %248 = sub nsw i32 %247, 1
  store i32 %248, ptr %82, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %276, %246
  %250 = load i32, ptr %82, align 4, !tbaa !9
  %251 = load i32, ptr %67, align 4, !tbaa !9
  %252 = add nsw i32 %251, 1
  %253 = icmp sle i32 %250, %252
  br i1 %253, label %255, label %254

254:                                              ; preds = %249
  store i32 20, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #3
  br label %279

255:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #3
  %256 = load i32, ptr %64, align 4, !tbaa !9
  %257 = sub nsw i32 %256, 1
  store i32 %257, ptr %83, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %272, %255
  %259 = load i32, ptr %83, align 4, !tbaa !9
  %260 = load i32, ptr %65, align 4, !tbaa !9
  %261 = icmp sle i32 %259, %260
  br i1 %261, label %263, label %262

262:                                              ; preds = %258
  store i32 23, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #3
  br label %275

263:                                              ; preds = %258
  %264 = load i32, ptr %83, align 4, !tbaa !9
  %265 = load i32, ptr %82, align 4, !tbaa !9
  %266 = load i32, ptr %68, align 4, !tbaa !9
  %267 = load ptr, ptr %46, align 8, !tbaa !5
  %268 = load ptr, ptr %42, align 8, !tbaa !5
  %269 = load ptr, ptr %40, align 8, !tbaa !5
  %270 = load ptr, ptr %51, align 8, !tbaa !5
  %271 = load double, ptr %74, align 8, !tbaa !11
  call void @_Z17bc_flather_u_codeiiiPdS_S_Pid(i32 noundef %264, i32 noundef %265, i32 noundef %266, ptr noundef %267, ptr noundef %268, ptr noundef %269, ptr noundef %270, double noundef %271)
  br label %272

272:                                              ; preds = %263
  %273 = load i32, ptr %83, align 4, !tbaa !9
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %83, align 4, !tbaa !9
  br label %258, !llvm.loop !20

275:                                              ; preds = %262
  br label %276

276:                                              ; preds = %275
  %277 = load i32, ptr %82, align 4, !tbaa !9
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %82, align 4, !tbaa !9
  br label %249, !llvm.loop !21

279:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #3
  %280 = load i32, ptr %66, align 4, !tbaa !9
  %281 = sub nsw i32 %280, 1
  store i32 %281, ptr %84, align 4, !tbaa !9
  br label %282

282:                                              ; preds = %309, %279
  %283 = load i32, ptr %84, align 4, !tbaa !9
  %284 = load i32, ptr %67, align 4, !tbaa !9
  %285 = icmp sle i32 %283, %284
  br i1 %285, label %287, label %286

286:                                              ; preds = %282
  store i32 26, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #3
  br label %312

287:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #3
  %288 = load i32, ptr %64, align 4, !tbaa !9
  %289 = sub nsw i32 %288, 1
  store i32 %289, ptr %85, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %305, %287
  %291 = load i32, ptr %85, align 4, !tbaa !9
  %292 = load i32, ptr %65, align 4, !tbaa !9
  %293 = add nsw i32 %292, 1
  %294 = icmp sle i32 %291, %293
  br i1 %294, label %296, label %295

295:                                              ; preds = %290
  store i32 29, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #3
  br label %308

296:                                              ; preds = %290
  %297 = load i32, ptr %85, align 4, !tbaa !9
  %298 = load i32, ptr %84, align 4, !tbaa !9
  %299 = load i32, ptr %68, align 4, !tbaa !9
  %300 = load ptr, ptr %49, align 8, !tbaa !5
  %301 = load ptr, ptr %43, align 8, !tbaa !5
  %302 = load ptr, ptr %41, align 8, !tbaa !5
  %303 = load ptr, ptr %51, align 8, !tbaa !5
  %304 = load double, ptr %74, align 8, !tbaa !11
  call void @_Z17bc_flather_v_codeiiiPdS_S_Pid(i32 noundef %297, i32 noundef %298, i32 noundef %299, ptr noundef %300, ptr noundef %301, ptr noundef %302, ptr noundef %303, double noundef %304)
  br label %305

305:                                              ; preds = %296
  %306 = load i32, ptr %85, align 4, !tbaa !9
  %307 = add nsw i32 %306, 1
  store i32 %307, ptr %85, align 4, !tbaa !9
  br label %290, !llvm.loop !22

308:                                              ; preds = %295
  br label %309

309:                                              ; preds = %308
  %310 = load i32, ptr %84, align 4, !tbaa !9
  %311 = add nsw i32 %310, 1
  store i32 %311, ptr %84, align 4, !tbaa !9
  br label %282, !llvm.loop !23

312:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #3
  %313 = load i32, ptr %66, align 4, !tbaa !9
  %314 = sub nsw i32 %313, 1
  store i32 %314, ptr %86, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %367, %312
  %316 = load i32, ptr %86, align 4, !tbaa !9
  %317 = load i32, ptr %67, align 4, !tbaa !9
  %318 = add nsw i32 %317, 1
  %319 = icmp slt i32 %316, %318
  br i1 %319, label %321, label %320

320:                                              ; preds = %315
  store i32 32, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #3
  br label %370

321:                                              ; preds = %315
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #3
  %322 = load i32, ptr %64, align 4, !tbaa !9
  %323 = sub nsw i32 %322, 1
  store i32 %323, ptr %87, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %363, %321
  %325 = load i32, ptr %87, align 4, !tbaa !9
  %326 = load i32, ptr %65, align 4, !tbaa !9
  %327 = add nsw i32 %326, 1
  %328 = icmp sle i32 %325, %327
  br i1 %328, label %330, label %329

329:                                              ; preds = %324
  store i32 35, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #3
  br label %366

330:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #3
  %331 = load i32, ptr %86, align 4, !tbaa !9
  %332 = load i32, ptr %68, align 4, !tbaa !9
  %333 = mul nsw i32 %331, %332
  %334 = load i32, ptr %87, align 4, !tbaa !9
  %335 = add nsw i32 %333, %334
  store i32 %335, ptr %88, align 4, !tbaa !9
  %336 = load ptr, ptr %46, align 8, !tbaa !5
  %337 = load i32, ptr %88, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds double, ptr %336, i64 %338
  %340 = load double, ptr %339, align 8, !tbaa !11
  %341 = load ptr, ptr %44, align 8, !tbaa !5
  %342 = load i32, ptr %88, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds double, ptr %341, i64 %343
  store double %340, ptr %344, align 8, !tbaa !11
  %345 = load ptr, ptr %49, align 8, !tbaa !5
  %346 = load i32, ptr %88, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds double, ptr %345, i64 %347
  %349 = load double, ptr %348, align 8, !tbaa !11
  %350 = load ptr, ptr %45, align 8, !tbaa !5
  %351 = load i32, ptr %88, align 4, !tbaa !9
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds double, ptr %350, i64 %352
  store double %349, ptr %353, align 8, !tbaa !11
  %354 = load ptr, ptr %38, align 8, !tbaa !5
  %355 = load i32, ptr %88, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds double, ptr %354, i64 %356
  %358 = load double, ptr %357, align 8, !tbaa !11
  %359 = load ptr, ptr %39, align 8, !tbaa !5
  %360 = load i32, ptr %88, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds double, ptr %359, i64 %361
  store double %358, ptr %362, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #3
  br label %363

363:                                              ; preds = %330
  %364 = load i32, ptr %87, align 4, !tbaa !9
  %365 = add nsw i32 %364, 1
  store i32 %365, ptr %87, align 4, !tbaa !9
  br label %324, !llvm.loop !24

366:                                              ; preds = %329
  br label %367

367:                                              ; preds = %366
  %368 = load i32, ptr %86, align 4, !tbaa !9
  %369 = add nsw i32 %368, 1
  store i32 %369, ptr %86, align 4, !tbaa !9
  br label %315, !llvm.loop !25

370:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #3
  %371 = load i32, ptr %66, align 4, !tbaa !9
  store i32 %371, ptr %89, align 4, !tbaa !9
  br label %372

372:                                              ; preds = %406, %370
  %373 = load i32, ptr %89, align 4, !tbaa !9
  %374 = load i32, ptr %67, align 4, !tbaa !9
  %375 = icmp sle i32 %373, %374
  br i1 %375, label %377, label %376

376:                                              ; preds = %372
  store i32 38, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #3
  br label %409

377:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #3
  %378 = load i32, ptr %64, align 4, !tbaa !9
  store i32 %378, ptr %90, align 4, !tbaa !9
  br label %379

379:                                              ; preds = %402, %377
  %380 = load i32, ptr %90, align 4, !tbaa !9
  %381 = load i32, ptr %65, align 4, !tbaa !9
  %382 = sub nsw i32 %381, 1
  %383 = icmp sle i32 %380, %382
  br i1 %383, label %385, label %384

384:                                              ; preds = %379
  store i32 41, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #3
  br label %405

385:                                              ; preds = %379
  %386 = load i32, ptr %90, align 4, !tbaa !9
  %387 = load i32, ptr %89, align 4, !tbaa !9
  %388 = load i32, ptr %68, align 4, !tbaa !9
  %389 = load ptr, ptr %40, align 8, !tbaa !5
  %390 = load ptr, ptr %39, align 8, !tbaa !5
  %391 = load ptr, ptr %51, align 8, !tbaa !5
  %392 = load ptr, ptr %52, align 8, !tbaa !5
  %393 = load ptr, ptr %53, align 8, !tbaa !5
  call void @_Z14next_sshu_codeiiiPdPKdPKiS1_S1_(i32 noundef %386, i32 noundef %387, i32 noundef %388, ptr noundef %389, ptr noundef %390, ptr noundef %391, ptr noundef %392, ptr noundef %393)
  %394 = load i32, ptr %90, align 4, !tbaa !9
  %395 = load i32, ptr %89, align 4, !tbaa !9
  %396 = load i32, ptr %68, align 4, !tbaa !9
  %397 = load ptr, ptr %41, align 8, !tbaa !5
  %398 = load ptr, ptr %39, align 8, !tbaa !5
  %399 = load ptr, ptr %51, align 8, !tbaa !5
  %400 = load ptr, ptr %52, align 8, !tbaa !5
  %401 = load ptr, ptr %54, align 8, !tbaa !5
  call void @_Z14next_sshv_codeiiiPdS_PiS_S_(i32 noundef %394, i32 noundef %395, i32 noundef %396, ptr noundef %397, ptr noundef %398, ptr noundef %399, ptr noundef %400, ptr noundef %401)
  br label %402

402:                                              ; preds = %385
  %403 = load i32, ptr %90, align 4, !tbaa !9
  %404 = add nsw i32 %403, 1
  store i32 %404, ptr %90, align 4, !tbaa !9
  br label %379, !llvm.loop !26

405:                                              ; preds = %384
  br label %406

406:                                              ; preds = %405
  %407 = load i32, ptr %89, align 4, !tbaa !9
  %408 = add nsw i32 %407, 1
  store i32 %408, ptr %89, align 4, !tbaa !9
  br label %372, !llvm.loop !27

409:                                              ; preds = %376
  ret void
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15continuity_codeiiiPdS_S_S_S_S_S_S_dS_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z11bc_ssh_codeiiiiPdPid(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, double noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15momentum_u_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15momentum_v_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) #2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15bc_solid_u_codeiiiPdPi(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15bc_solid_v_codeiiiPdPi(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z17bc_flather_u_codeiiiPdS_S_Pid(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z17bc_flather_v_codeiiiPdS_S_Pid(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z14next_sshu_codeiiiPdPKdPKiS1_S1_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z14next_sshv_codeiiiPdS_PiS_S_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

attributes #0 = { mustprogress 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}


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

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @c_invoke_time_step(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, i32 noundef %26, i32 noundef %27, i32 noundef %28, i32 noundef %29, i32 noundef %30, double noundef %31, double noundef %32, double noundef %33, double noundef %34, double noundef %35, double noundef %36) local_unnamed_addr #0 {
  %38 = ptrtoint ptr %0 to i64
  %39 = ptrtoint ptr %11 to i64
  %40 = ptrtoint ptr %8 to i64
  %41 = ptrtoint ptr %1 to i64
  %42 = ptrtoint ptr %6 to i64
  %43 = ptrtoint ptr %7 to i64
  %.not222 = icmp sgt i32 %28, %29
  %.not213220 = icmp sgt i32 %26, %27
  %or.cond = or i1 %.not222, %.not213220
  br i1 %or.cond, label %._crit_edge224, label %.preheader219

.preheader219:                                    ; preds = %37, %._crit_edge
  %.0187223 = phi i32 [ %47, %._crit_edge ], [ %28, %37 ]
  br label %48

._crit_edge224:                                   ; preds = %._crit_edge, %37
  %44 = add nsw i32 %28, -1
  %45 = add nsw i32 %29, 1
  %.not201229 = icmp sgt i32 %44, %45
  br i1 %.not201229, label %.preheader218, label %.lr.ph232

.lr.ph232:                                        ; preds = %._crit_edge224
  %46 = add nsw i32 %26, -1
  %.not212225 = icmp sgt i32 %46, %27
  br i1 %.not212225, label %.preheader218, label %.lr.ph

._crit_edge:                                      ; preds = %48
  %47 = add i32 %.0187223, 1
  %exitcond279.not = icmp eq i32 %.0187223, %29
  br i1 %exitcond279.not, label %._crit_edge224, label %.preheader219, !llvm.loop !5

48:                                               ; preds = %.preheader219, %48
  %.0198221 = phi i32 [ %26, %.preheader219 ], [ %49, %48 ]
  tail call void @_Z15continuity_codeiiiPdS_S_S_S_S_S_S_dS_(i32 noundef %.0198221, i32 noundef %.0187223, i32 noundef %30, ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, double noundef %31, ptr noundef %14)
  tail call void @_Z11bc_ssh_codeiiiiPdPid(i32 noundef %.0198221, i32 noundef %.0187223, i32 noundef %30, i32 noundef %25, ptr noundef %0, ptr noundef %13, double noundef %31)
  tail call void @_Z15momentum_u_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef %.0198221, i32 noundef %.0187223, i32 noundef %30, ptr noundef %8, ptr noundef %6, ptr noundef %7, ptr noundef %4, ptr noundef %5, ptr noundef %9, ptr noundef %10, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %13, ptr noundef %17, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %22, ptr noundef %15, ptr noundef %23, double noundef %31, double noundef %32, double noundef %33, double noundef %34, double noundef %35, double noundef %36)
  tail call void @_Z15momentum_v_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef %.0198221, i32 noundef %.0187223, i32 noundef %30, ptr noundef %11, ptr noundef %6, ptr noundef %7, ptr noundef %4, ptr noundef %5, ptr noundef %9, ptr noundef %12, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %13, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %21, ptr noundef %22, ptr noundef %16, ptr noundef %24, double noundef %31, double noundef %32, double noundef %33, double noundef %34, double noundef %35, double noundef %36)
  %49 = add i32 %.0198221, 1
  %exitcond.not = icmp eq i32 %.0198221, %27
  br i1 %exitcond.not, label %._crit_edge, label %48, !llvm.loop !7

.preheader218:                                    ; preds = %._crit_edge228, %.lr.ph232, %._crit_edge224
  %.not202238 = icmp sgt i32 %44, %29
  br i1 %.not202238, label %.preheader217, label %.lr.ph240

.lr.ph240:                                        ; preds = %.preheader218
  %50 = add nsw i32 %26, -1
  %51 = add nsw i32 %27, 1
  %.not211233 = icmp sgt i32 %50, %51
  br i1 %.not211233, label %.preheader217, label %.lr.ph236

.lr.ph:                                           ; preds = %.lr.ph232, %._crit_edge228
  %.0197230 = phi i32 [ %52, %._crit_edge228 ], [ %44, %.lr.ph232 ]
  br label %53

._crit_edge228:                                   ; preds = %53
  %52 = add nsw i32 %.0197230, 1
  %.not201 = icmp sgt i32 %.0197230, %29
  br i1 %.not201, label %.preheader218, label %.lr.ph, !llvm.loop !8

53:                                               ; preds = %.lr.ph, %53
  %.0196226 = phi i32 [ %46, %.lr.ph ], [ %54, %53 ]
  tail call void @_Z15bc_solid_u_codeiiiPdPi(i32 noundef %.0196226, i32 noundef %.0197230, i32 noundef %30, ptr noundef %8, ptr noundef %13)
  %54 = add i32 %.0196226, 1
  %exitcond280.not = icmp eq i32 %.0196226, %27
  br i1 %exitcond280.not, label %._crit_edge228, label %53, !llvm.loop !9

.preheader217:                                    ; preds = %._crit_edge237, %.lr.ph240, %.preheader218
  br i1 %.not201229, label %.preheader216, label %.lr.ph248

.lr.ph248:                                        ; preds = %.preheader217
  %55 = add nsw i32 %26, -1
  %.not210241 = icmp sgt i32 %55, %27
  br i1 %.not210241, label %.preheader216, label %.lr.ph244

.lr.ph236:                                        ; preds = %.lr.ph240, %._crit_edge237
  %.0195239 = phi i32 [ %56, %._crit_edge237 ], [ %44, %.lr.ph240 ]
  br label %57

._crit_edge237:                                   ; preds = %57
  %56 = add i32 %.0195239, 1
  %exitcond281.not = icmp eq i32 %.0195239, %29
  br i1 %exitcond281.not, label %.preheader217, label %.lr.ph236, !llvm.loop !10

57:                                               ; preds = %.lr.ph236, %57
  %.0194234 = phi i32 [ %50, %.lr.ph236 ], [ %58, %57 ]
  tail call void @_Z15bc_solid_v_codeiiiPdPi(i32 noundef %.0194234, i32 noundef %.0195239, i32 noundef %30, ptr noundef %11, ptr noundef %13)
  %58 = add nsw i32 %.0194234, 1
  %.not211 = icmp sgt i32 %.0194234, %27
  br i1 %.not211, label %._crit_edge237, label %57, !llvm.loop !11

.preheader216:                                    ; preds = %._crit_edge245, %.lr.ph248, %.preheader217
  br i1 %.not202238, label %.preheader214, label %.lr.ph256

.lr.ph256:                                        ; preds = %.preheader216
  %59 = add nsw i32 %26, -1
  %60 = add nsw i32 %27, 1
  %.not209249 = icmp sgt i32 %59, %60
  br i1 %.not209249, label %.lr.ph264, label %.lr.ph252

.lr.ph244:                                        ; preds = %.lr.ph248, %._crit_edge245
  %.0193247 = phi i32 [ %61, %._crit_edge245 ], [ %44, %.lr.ph248 ]
  br label %62

._crit_edge245:                                   ; preds = %62
  %61 = add nsw i32 %.0193247, 1
  %.not203 = icmp sgt i32 %.0193247, %29
  br i1 %.not203, label %.preheader216, label %.lr.ph244, !llvm.loop !12

62:                                               ; preds = %.lr.ph244, %62
  %.0192242 = phi i32 [ %55, %.lr.ph244 ], [ %63, %62 ]
  tail call void @_Z17bc_flather_u_codeiiiPdS_S_Pid(i32 noundef %.0192242, i32 noundef %.0193247, i32 noundef %30, ptr noundef %8, ptr noundef %4, ptr noundef %2, ptr noundef %13, double noundef %36)
  %63 = add i32 %.0192242, 1
  %exitcond282.not = icmp eq i32 %.0192242, %27
  br i1 %exitcond282.not, label %._crit_edge245, label %62, !llvm.loop !13

.preheader215:                                    ; preds = %._crit_edge253
  br i1 %.not202238, label %.preheader214, label %.lr.ph264

.lr.ph264:                                        ; preds = %.lr.ph256, %.preheader215
  %64 = add nsw i32 %26, -1
  %65 = add nsw i32 %27, 1
  %.not208257 = icmp sgt i32 %64, %65
  br i1 %.not208257, label %.preheader214, label %.lr.ph260.preheader

.lr.ph260.preheader:                              ; preds = %.lr.ph264
  %66 = sext i32 %64 to i64
  %67 = add i32 %27, 2
  %68 = sext i32 %44 to i64
  %69 = sext i32 %30 to i64
  %70 = sub i64 %43, %42
  %71 = sub i64 %41, %42
  %72 = sub i64 %42, %40
  %73 = sub i64 %39, %42
  %74 = sub i64 %38, %42
  %75 = sub i64 %41, %43
  %76 = sub i64 %43, %40
  %77 = sub i64 %43, %39
  %78 = sub i64 %38, %43
  %79 = sub i64 %41, %40
  %80 = sub i64 %41, %39
  %81 = sub i64 %41, %38
  %82 = add i32 %27, 2
  %83 = sub i32 %82, %26
  %84 = zext i32 %83 to i64
  %85 = add nuw nsw i64 %84, 1
  %86 = add i32 %27, 1
  %min.iters.check = icmp ult i32 %83, 13
  %diff.check = icmp ult i64 %70, 32
  %diff.check295 = icmp ult i64 %71, 32
  %conflict.rdx = or i1 %diff.check, %diff.check295
  %diff.check296 = icmp ult i64 %72, 32
  %conflict.rdx297 = or i1 %conflict.rdx, %diff.check296
  %diff.check298 = icmp ult i64 %73, 32
  %conflict.rdx299 = or i1 %conflict.rdx297, %diff.check298
  %diff.check300 = icmp ult i64 %74, 32
  %conflict.rdx301 = or i1 %conflict.rdx299, %diff.check300
  %diff.check302 = icmp ult i64 %75, 32
  %conflict.rdx303 = or i1 %conflict.rdx301, %diff.check302
  %diff.check304 = icmp ult i64 %76, 32
  %conflict.rdx305 = or i1 %conflict.rdx303, %diff.check304
  %diff.check306 = icmp ult i64 %77, 32
  %conflict.rdx307 = or i1 %conflict.rdx305, %diff.check306
  %diff.check308 = icmp ult i64 %78, 32
  %conflict.rdx309 = or i1 %conflict.rdx307, %diff.check308
  %diff.check310 = icmp ult i64 %79, 32
  %conflict.rdx311 = or i1 %conflict.rdx309, %diff.check310
  %diff.check312 = icmp ult i64 %80, 32
  %conflict.rdx313 = or i1 %conflict.rdx311, %diff.check312
  %diff.check314 = icmp ult i64 %81, 32
  %conflict.rdx315 = or i1 %conflict.rdx313, %diff.check314
  %n.vec = and i64 %85, 8589934588
  %ind.end = add nsw i64 %n.vec, %66
  %cmp.n = icmp eq i64 %85, %n.vec
  br label %.lr.ph260

.lr.ph252:                                        ; preds = %.lr.ph256, %._crit_edge253
  %.0191255 = phi i32 [ %87, %._crit_edge253 ], [ %44, %.lr.ph256 ]
  br label %88

._crit_edge253:                                   ; preds = %88
  %87 = add i32 %.0191255, 1
  %exitcond283.not = icmp eq i32 %.0191255, %29
  br i1 %exitcond283.not, label %.preheader215, label %.lr.ph252, !llvm.loop !14

88:                                               ; preds = %.lr.ph252, %88
  %.0190250 = phi i32 [ %59, %.lr.ph252 ], [ %89, %88 ]
  tail call void @_Z17bc_flather_v_codeiiiPdS_S_Pid(i32 noundef %.0190250, i32 noundef %.0191255, i32 noundef %30, ptr noundef %11, ptr noundef %5, ptr noundef %3, ptr noundef %13, double noundef %36)
  %89 = add nsw i32 %.0190250, 1
  %.not209 = icmp sgt i32 %.0190250, %27
  br i1 %.not209, label %._crit_edge253, label %88, !llvm.loop !15

.preheader214:                                    ; preds = %._crit_edge261, %.preheader216, %.lr.ph264, %.preheader215
  %.not207.not265 = icmp sge i32 %26, %27
  %or.cond294.not = or i1 %.not207.not265, %.not222
  br i1 %or.cond294.not, label %._crit_edge271, label %.preheader.us

.preheader.us:                                    ; preds = %.preheader214, %._crit_edge268.us
  %.0186270.us = phi i32 [ %92, %._crit_edge268.us ], [ %28, %.preheader214 ]
  br label %90

90:                                               ; preds = %.preheader.us, %90
  %.0266.us = phi i32 [ %26, %.preheader.us ], [ %91, %90 ]
  tail call void @_Z14next_sshu_codeiiiPdPKdPKiS1_S1_(i32 noundef %.0266.us, i32 noundef %.0186270.us, i32 noundef %30, ptr noundef %2, ptr noundef %1, ptr noundef %13, ptr noundef %14, ptr noundef %15)
  tail call void @_Z14next_sshv_codeiiiPdS_PiS_S_(i32 noundef %.0266.us, i32 noundef %.0186270.us, i32 noundef %30, ptr noundef %3, ptr noundef %1, ptr noundef %13, ptr noundef %14, ptr noundef %16)
  %91 = add i32 %.0266.us, 1
  %exitcond291.not = icmp eq i32 %91, %27
  br i1 %exitcond291.not, label %._crit_edge268.us, label %90, !llvm.loop !16

._crit_edge268.us:                                ; preds = %90
  %92 = add i32 %.0186270.us, 1
  %exitcond292.not = icmp eq i32 %.0186270.us, %29
  br i1 %exitcond292.not, label %._crit_edge271, label %.preheader.us, !llvm.loop !17

.lr.ph260:                                        ; preds = %.lr.ph260.preheader, %._crit_edge261
  %indvars.iv286 = phi i64 [ %68, %.lr.ph260.preheader ], [ %indvars.iv.next287, %._crit_edge261 ]
  %93 = mul nsw i64 %indvars.iv286, %69
  %brmerge = select i1 %min.iters.check, i1 true, i1 %conflict.rdx315
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

scalar.ph.preheader:                              ; preds = %.lr.ph260, %middle.block
  %indvars.iv.ph = phi i64 [ %66, %.lr.ph260 ], [ %ind.end, %middle.block ]
  %94 = trunc i64 %indvars.iv.ph to i32
  %95 = sub i32 %27, %94
  %xtraiter = and i32 %95, 1
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %96 = add nsw i64 %indvars.iv.ph, %93
  %97 = getelementptr inbounds double, ptr %8, i64 %96
  %98 = load double, ptr %97, align 8, !tbaa !18
  %99 = getelementptr inbounds double, ptr %6, i64 %96
  store double %98, ptr %99, align 8, !tbaa !18
  %100 = getelementptr inbounds double, ptr %11, i64 %96
  %101 = load double, ptr %100, align 8, !tbaa !18
  %102 = getelementptr inbounds double, ptr %7, i64 %96
  store double %101, ptr %102, align 8, !tbaa !18
  %103 = getelementptr inbounds double, ptr %0, i64 %96
  %104 = load double, ptr %103, align 8, !tbaa !18
  %105 = getelementptr inbounds double, ptr %1, i64 %96
  store double %104, ptr %105, align 8, !tbaa !18
  %indvars.iv.next.prol = add nsw i64 %indvars.iv.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %106 = icmp eq i32 %86, %94
  br i1 %106, label %._crit_edge261, label %scalar.ph

vector.body:                                      ; preds = %.lr.ph260, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph260 ]
  %offset.idx = add i64 %index, %66
  %107 = add nsw i64 %offset.idx, %93
  %108 = getelementptr inbounds double, ptr %8, i64 %107
  %109 = getelementptr inbounds i8, ptr %108, i64 16
  %wide.load = load <2 x double>, ptr %108, align 8, !tbaa !18
  %wide.load316 = load <2 x double>, ptr %109, align 8, !tbaa !18
  %110 = getelementptr inbounds double, ptr %6, i64 %107
  %111 = getelementptr inbounds i8, ptr %110, i64 16
  store <2 x double> %wide.load, ptr %110, align 8, !tbaa !18
  store <2 x double> %wide.load316, ptr %111, align 8, !tbaa !18
  %112 = getelementptr inbounds double, ptr %11, i64 %107
  %113 = getelementptr inbounds i8, ptr %112, i64 16
  %wide.load317 = load <2 x double>, ptr %112, align 8, !tbaa !18
  %wide.load318 = load <2 x double>, ptr %113, align 8, !tbaa !18
  %114 = getelementptr inbounds double, ptr %7, i64 %107
  %115 = getelementptr inbounds i8, ptr %114, i64 16
  store <2 x double> %wide.load317, ptr %114, align 8, !tbaa !18
  store <2 x double> %wide.load318, ptr %115, align 8, !tbaa !18
  %116 = getelementptr inbounds double, ptr %0, i64 %107
  %117 = getelementptr inbounds i8, ptr %116, i64 16
  %wide.load319 = load <2 x double>, ptr %116, align 8, !tbaa !18
  %wide.load320 = load <2 x double>, ptr %117, align 8, !tbaa !18
  %118 = getelementptr inbounds double, ptr %1, i64 %107
  %119 = getelementptr inbounds i8, ptr %118, i64 16
  store <2 x double> %wide.load319, ptr %118, align 8, !tbaa !18
  store <2 x double> %wide.load320, ptr %119, align 8, !tbaa !18
  %index.next = add nuw i64 %index, 4
  %120 = icmp eq i64 %index.next, %n.vec
  br i1 %120, label %middle.block, label %vector.body, !llvm.loop !22

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge261, label %scalar.ph.preheader

._crit_edge261:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next287 = add nsw i64 %indvars.iv286, 1
  %lftr.wideiv289 = trunc i64 %indvars.iv.next287 to i32
  %exitcond290.not = icmp eq i32 %45, %lftr.wideiv289
  br i1 %exitcond290.not, label %.preheader214, label %.lr.ph260, !llvm.loop !25

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %121 = add nsw i64 %indvars.iv, %93
  %122 = getelementptr inbounds double, ptr %8, i64 %121
  %123 = load double, ptr %122, align 8, !tbaa !18
  %124 = getelementptr inbounds double, ptr %6, i64 %121
  store double %123, ptr %124, align 8, !tbaa !18
  %125 = getelementptr inbounds double, ptr %11, i64 %121
  %126 = load double, ptr %125, align 8, !tbaa !18
  %127 = getelementptr inbounds double, ptr %7, i64 %121
  store double %126, ptr %127, align 8, !tbaa !18
  %128 = getelementptr inbounds double, ptr %0, i64 %121
  %129 = load double, ptr %128, align 8, !tbaa !18
  %130 = getelementptr inbounds double, ptr %1, i64 %121
  store double %129, ptr %130, align 8, !tbaa !18
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %131 = add nsw i64 %indvars.iv.next, %93
  %132 = getelementptr inbounds double, ptr %8, i64 %131
  %133 = load double, ptr %132, align 8, !tbaa !18
  %134 = getelementptr inbounds double, ptr %6, i64 %131
  store double %133, ptr %134, align 8, !tbaa !18
  %135 = getelementptr inbounds double, ptr %11, i64 %131
  %136 = load double, ptr %135, align 8, !tbaa !18
  %137 = getelementptr inbounds double, ptr %7, i64 %131
  store double %136, ptr %137, align 8, !tbaa !18
  %138 = getelementptr inbounds double, ptr %0, i64 %131
  %139 = load double, ptr %138, align 8, !tbaa !18
  %140 = getelementptr inbounds double, ptr %1, i64 %131
  store double %139, ptr %140, align 8, !tbaa !18
  %indvars.iv.next.1 = add nsw i64 %indvars.iv, 2
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond285.1 = icmp eq i32 %67, %lftr.wideiv.1
  br i1 %exitcond285.1, label %._crit_edge261, label %scalar.ph, !llvm.loop !26

._crit_edge271:                                   ; preds = %._crit_edge268.us, %.preheader214
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15continuity_codeiiiPdS_S_S_S_S_S_S_dS_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z11bc_ssh_codeiiiiPdPid(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15momentum_u_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15momentum_v_codeiiiPdS_S_S_S_S_S_S_S_S_PiS_S_S_S_S_S_S_dddddd(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15bc_solid_u_codeiiiPdPi(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z15bc_solid_v_codeiiiPdPi(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z17bc_flather_u_codeiiiPdS_S_Pid(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z17bc_flather_v_codeiiiPdS_S_Pid(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z14next_sshu_codeiiiPdPKdPKiS1_S1_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z14next_sshv_codeiiiPdS_PiS_S_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

attributes #0 = { mustprogress 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 = { inlinehint mustprogress 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" }

!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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = distinct !{!7, !6}
!8 = distinct !{!8, !6}
!9 = distinct !{!9, !6}
!10 = distinct !{!10, !6}
!11 = distinct !{!11, !6}
!12 = distinct !{!12, !6}
!13 = distinct !{!13, !6}
!14 = distinct !{!14, !6}
!15 = distinct !{!15, !6}
!16 = distinct !{!16, !6}
!17 = distinct !{!17, !6}
!18 = !{!19, !19, i64 0}
!19 = !{!"double", !20, i64 0}
!20 = !{!"omnipotent char", !21, i64 0}
!21 = !{!"Simple C++ TBAA"}
!22 = distinct !{!22, !6, !23, !24}
!23 = !{!"llvm.loop.isvectorized", i32 1}
!24 = !{!"llvm.loop.unroll.runtime.disable"}
!25 = distinct !{!25, !6}
!26 = distinct !{!26, !6, !23}


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