; LLVM IR from darnstrom/daqp :: src (factorization)

; 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.DAQPWorkspace = type { ptr, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, ptr, ptr, ptr, ptr, i32, ptr, i32, i32, i32, double, ptr, ptr, i32, ptr }
%struct.DAQPSettings = type { double, double, double, double, double, i32, i32, double, double, double, double, double, double }

; Function Attrs: nounwind uwtable
define dso_local void @update_LDL_add(ptr noundef %0, i32 noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca double, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  %17 = load ptr, ptr %3, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.DAQPWorkspace, ptr %17, i32 0, i32 26
  store i32 -1, ptr %18, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.DAQPWorkspace, ptr %19, i32 0, i32 24
  %21 = load i32, ptr %20, align 8, !tbaa !14
  %22 = load ptr, ptr %3, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.DAQPWorkspace, ptr %22, i32 0, i32 24
  %24 = load i32, ptr %23, align 8, !tbaa !14
  %25 = add nsw i32 %24, 1
  %26 = mul nsw i32 %21, %25
  %27 = sdiv i32 %26, 2
  store i32 %27, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %28 = load i32, ptr %4, align 4, !tbaa !9
  %29 = load ptr, ptr %3, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.DAQPWorkspace, ptr %29, i32 0, i32 3
  %31 = load i32, ptr %30, align 8, !tbaa !15
  %32 = icmp slt i32 %28, %31
  br i1 %32, label %33, label %58

33:                                               ; preds = %2
  %34 = load ptr, ptr %3, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.DAQPWorkspace, ptr %34, i32 0, i32 7
  %36 = load ptr, ptr %35, align 8, !tbaa !16
  %37 = icmp ne ptr %36, null
  br i1 %37, label %38, label %54

38:                                               ; preds = %33
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.DAQPWorkspace, ptr %39, i32 0, i32 7
  %41 = load ptr, ptr %40, align 8, !tbaa !16
  %42 = load ptr, ptr %3, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.DAQPWorkspace, ptr %42, i32 0, i32 1
  %44 = load i32, ptr %43, align 8, !tbaa !17
  %45 = mul nsw i32 2, %44
  %46 = load i32, ptr %4, align 4, !tbaa !9
  %47 = sub nsw i32 %45, %46
  %48 = sub nsw i32 %47, 1
  %49 = load i32, ptr %4, align 4, !tbaa !9
  %50 = mul nsw i32 %48, %49
  %51 = sdiv i32 %50, 2
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds double, ptr %41, i64 %52
  br label %55

54:                                               ; preds = %33
  br label %55

55:                                               ; preds = %54, %38
  %56 = phi ptr [ %53, %38 ], [ null, %54 ]
  store ptr %56, ptr %13, align 8, !tbaa !5
  %57 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %57, ptr %10, align 4, !tbaa !9
  br label %73

58:                                               ; preds = %2
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.DAQPWorkspace, ptr %59, i32 0, i32 4
  %61 = load ptr, ptr %60, align 8, !tbaa !18
  %62 = load ptr, ptr %3, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.DAQPWorkspace, ptr %62, i32 0, i32 1
  %64 = load i32, ptr %63, align 8, !tbaa !17
  %65 = load i32, ptr %4, align 4, !tbaa !9
  %66 = load ptr, ptr %3, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.DAQPWorkspace, ptr %66, i32 0, i32 3
  %68 = load i32, ptr %67, align 8, !tbaa !15
  %69 = sub nsw i32 %65, %68
  %70 = mul nsw i32 %64, %69
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds double, ptr %61, i64 %71
  store ptr %72, ptr %13, align 8, !tbaa !5
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %73

73:                                               ; preds = %58, %55
  %74 = load ptr, ptr %13, align 8, !tbaa !5
  %75 = icmp eq ptr %74, null
  br i1 %75, label %76, label %77

76:                                               ; preds = %73
  store double 1.000000e+00, ptr %12, align 8, !tbaa !19
  br label %102

77:                                               ; preds = %73
  %78 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %78, ptr %5, align 4, !tbaa !9
  store double 0.000000e+00, ptr %12, align 8, !tbaa !19
  br label %79

79:                                               ; preds = %98, %77
  %80 = load i32, ptr %5, align 4, !tbaa !9
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.DAQPWorkspace, ptr %81, i32 0, i32 1
  %83 = load i32, ptr %82, align 8, !tbaa !17
  %84 = icmp slt i32 %80, %83
  br i1 %84, label %85, label %101

85:                                               ; preds = %79
  %86 = load ptr, ptr %13, align 8, !tbaa !5
  %87 = load i32, ptr %5, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds double, ptr %86, i64 %88
  %90 = load double, ptr %89, align 8, !tbaa !19
  %91 = load ptr, ptr %13, align 8, !tbaa !5
  %92 = load i32, ptr %5, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds double, ptr %91, i64 %93
  %95 = load double, ptr %94, align 8, !tbaa !19
  %96 = load double, ptr %12, align 8, !tbaa !19
  %97 = call double @llvm.fmuladd.f64(double %90, double %95, double %96)
  store double %97, ptr %12, align 8, !tbaa !19
  br label %98

98:                                               ; preds = %85
  %99 = load i32, ptr %5, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %5, align 4, !tbaa !9
  br label %79, !llvm.loop !20

101:                                              ; preds = %79
  br label %102

102:                                              ; preds = %101, %76
  %103 = load ptr, ptr %3, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.DAQPWorkspace, ptr %103, i32 0, i32 9
  %105 = load ptr, ptr %104, align 8, !tbaa !22
  %106 = load i32, ptr %4, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds i32, ptr %105, i64 %107
  %109 = load i32, ptr %108, align 4, !tbaa !9
  %110 = and i32 %109, 8
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %112, label %132

112:                                              ; preds = %102
  %113 = load ptr, ptr %3, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.DAQPWorkspace, ptr %113, i32 0, i32 9
  %115 = load ptr, ptr %114, align 8, !tbaa !22
  %116 = load i32, ptr %4, align 4, !tbaa !9
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds i32, ptr %115, i64 %117
  %119 = load i32, ptr %118, align 4, !tbaa !9
  %120 = and i32 %119, 32
  %121 = icmp eq i32 %120, 0
  br i1 %121, label %122, label %132

122:                                              ; preds = %112
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.DAQPWorkspace, ptr %123, i32 0, i32 28
  %125 = load ptr, ptr %124, align 8, !tbaa !23
  %126 = getelementptr inbounds %struct.DAQPSettings, ptr %125, i32 0, i32 10
  %127 = load double, ptr %126, align 8, !tbaa !24
  %128 = load double, ptr %12, align 8, !tbaa !19
  %129 = fadd double %128, %127
  store double %129, ptr %12, align 8, !tbaa !19
  %130 = load i32, ptr %11, align 4, !tbaa !9
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %11, align 4, !tbaa !9
  br label %132

132:                                              ; preds = %122, %112, %102
  %133 = load double, ptr %12, align 8, !tbaa !19
  %134 = load ptr, ptr %3, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.DAQPWorkspace, ptr %134, i32 0, i32 19
  %136 = load ptr, ptr %135, align 8, !tbaa !26
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.DAQPWorkspace, ptr %137, i32 0, i32 24
  %139 = load i32, ptr %138, align 8, !tbaa !14
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds double, ptr %136, i64 %140
  store double %133, ptr %141, align 8, !tbaa !19
  %142 = load ptr, ptr %3, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.DAQPWorkspace, ptr %142, i32 0, i32 24
  %144 = load i32, ptr %143, align 8, !tbaa !14
  %145 = icmp eq i32 %144, 0
  br i1 %145, label %146, label %147

146:                                              ; preds = %132
  store i32 1, ptr %15, align 4
  br label %467

147:                                              ; preds = %132
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %298, %147
  %149 = load i32, ptr %5, align 4, !tbaa !9
  %150 = load ptr, ptr %3, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.DAQPWorkspace, ptr %150, i32 0, i32 24
  %152 = load i32, ptr %151, align 8, !tbaa !14
  %153 = icmp slt i32 %149, %152
  br i1 %153, label %154, label %301

154:                                              ; preds = %148
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.DAQPWorkspace, ptr %155, i32 0, i32 23
  %157 = load ptr, ptr %156, align 8, !tbaa !27
  %158 = load i32, ptr %5, align 4, !tbaa !9
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds i32, ptr %157, i64 %159
  %161 = load i32, ptr %160, align 4, !tbaa !9
  store i32 %161, ptr %8, align 4, !tbaa !9
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.DAQPWorkspace, ptr %162, i32 0, i32 9
  %164 = load ptr, ptr %163, align 8, !tbaa !22
  %165 = load i32, ptr %8, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds i32, ptr %164, i64 %166
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = and i32 %168, 8
  %170 = icmp ne i32 %169, 0
  br i1 %170, label %171, label %184

171:                                              ; preds = %154
  %172 = load ptr, ptr %3, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.DAQPWorkspace, ptr %172, i32 0, i32 9
  %174 = load ptr, ptr %173, align 8, !tbaa !22
  %175 = load i32, ptr %8, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i32, ptr %174, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = and i32 %178, 32
  %180 = icmp eq i32 %179, 0
  br i1 %180, label %181, label %184

181:                                              ; preds = %171
  %182 = load i32, ptr %11, align 4, !tbaa !9
  %183 = add nsw i32 %182, 1
  store i32 %183, ptr %11, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %181, %171, %154
  %185 = load i32, ptr %8, align 4, !tbaa !9
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.DAQPWorkspace, ptr %186, i32 0, i32 3
  %188 = load i32, ptr %187, align 8, !tbaa !15
  %189 = icmp slt i32 %185, %188
  br i1 %189, label %190, label %223

190:                                              ; preds = %184
  %191 = load ptr, ptr %3, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.DAQPWorkspace, ptr %191, i32 0, i32 7
  %193 = load ptr, ptr %192, align 8, !tbaa !16
  %194 = icmp ne ptr %193, null
  br i1 %194, label %195, label %211

195:                                              ; preds = %190
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.DAQPWorkspace, ptr %196, i32 0, i32 7
  %198 = load ptr, ptr %197, align 8, !tbaa !16
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.DAQPWorkspace, ptr %199, i32 0, i32 1
  %201 = load i32, ptr %200, align 8, !tbaa !17
  %202 = mul nsw i32 2, %201
  %203 = load i32, ptr %8, align 4, !tbaa !9
  %204 = sub nsw i32 %202, %203
  %205 = sub nsw i32 %204, 1
  %206 = load i32, ptr %8, align 4, !tbaa !9
  %207 = mul nsw i32 %205, %206
  %208 = sdiv i32 %207, 2
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds double, ptr %198, i64 %209
  br label %212

211:                                              ; preds = %190
  br label %212

212:                                              ; preds = %211, %195
  %213 = phi ptr [ %210, %195 ], [ null, %211 ]
  store ptr %213, ptr %14, align 8, !tbaa !5
  %214 = load i32, ptr %10, align 4, !tbaa !9
  %215 = load i32, ptr %8, align 4, !tbaa !9
  %216 = icmp sgt i32 %214, %215
  br i1 %216, label %217, label %219

217:                                              ; preds = %212
  %218 = load i32, ptr %10, align 4, !tbaa !9
  br label %221

219:                                              ; preds = %212
  %220 = load i32, ptr %8, align 4, !tbaa !9
  br label %221

221:                                              ; preds = %219, %217
  %222 = phi i32 [ %218, %217 ], [ %220, %219 ]
  store i32 %222, ptr %6, align 4, !tbaa !9
  br label %239

223:                                              ; preds = %184
  %224 = load ptr, ptr %3, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.DAQPWorkspace, ptr %224, i32 0, i32 4
  %226 = load ptr, ptr %225, align 8, !tbaa !18
  %227 = load ptr, ptr %3, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.DAQPWorkspace, ptr %227, i32 0, i32 1
  %229 = load i32, ptr %228, align 8, !tbaa !17
  %230 = load i32, ptr %8, align 4, !tbaa !9
  %231 = load ptr, ptr %3, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.DAQPWorkspace, ptr %231, i32 0, i32 3
  %233 = load i32, ptr %232, align 8, !tbaa !15
  %234 = sub nsw i32 %230, %233
  %235 = mul nsw i32 %229, %234
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds double, ptr %226, i64 %236
  store ptr %237, ptr %14, align 8, !tbaa !5
  %238 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %238, ptr %6, align 4, !tbaa !9
  br label %239

239:                                              ; preds = %223, %221
  %240 = load ptr, ptr %14, align 8, !tbaa !5
  %241 = icmp eq ptr %240, null
  br i1 %241, label %242, label %254

242:                                              ; preds = %239
  %243 = load ptr, ptr %13, align 8, !tbaa !5
  %244 = icmp eq ptr %243, null
  br i1 %244, label %245, label %246

245:                                              ; preds = %242
  br label %252

246:                                              ; preds = %242
  %247 = load ptr, ptr %13, align 8, !tbaa !5
  %248 = load i32, ptr %6, align 4, !tbaa !9
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds double, ptr %247, i64 %249
  %251 = load double, ptr %250, align 8, !tbaa !19
  br label %252

252:                                              ; preds = %246, %245
  %253 = phi double [ 0.000000e+00, %245 ], [ %251, %246 ]
  store double %253, ptr %12, align 8, !tbaa !19
  br label %288

254:                                              ; preds = %239
  %255 = load ptr, ptr %13, align 8, !tbaa !5
  %256 = icmp eq ptr %255, null
  br i1 %256, label %257, label %263

257:                                              ; preds = %254
  %258 = load ptr, ptr %14, align 8, !tbaa !5
  %259 = load i32, ptr %6, align 4, !tbaa !9
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds double, ptr %258, i64 %260
  %262 = load double, ptr %261, align 8, !tbaa !19
  store double %262, ptr %12, align 8, !tbaa !19
  br label %287

263:                                              ; preds = %254
  store double 0.000000e+00, ptr %12, align 8, !tbaa !19
  br label %264

264:                                              ; preds = %283, %263
  %265 = load i32, ptr %6, align 4, !tbaa !9
  %266 = load ptr, ptr %3, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.DAQPWorkspace, ptr %266, i32 0, i32 1
  %268 = load i32, ptr %267, align 8, !tbaa !17
  %269 = icmp slt i32 %265, %268
  br i1 %269, label %270, label %286

270:                                              ; preds = %264
  %271 = load ptr, ptr %14, align 8, !tbaa !5
  %272 = load i32, ptr %6, align 4, !tbaa !9
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds double, ptr %271, i64 %273
  %275 = load double, ptr %274, align 8, !tbaa !19
  %276 = load ptr, ptr %13, align 8, !tbaa !5
  %277 = load i32, ptr %6, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds double, ptr %276, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !19
  %281 = load double, ptr %12, align 8, !tbaa !19
  %282 = call double @llvm.fmuladd.f64(double %275, double %280, double %281)
  store double %282, ptr %12, align 8, !tbaa !19
  br label %283

283:                                              ; preds = %270
  %284 = load i32, ptr %6, align 4, !tbaa !9
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %6, align 4, !tbaa !9
  br label %264, !llvm.loop !28

286:                                              ; preds = %264
  br label %287

287:                                              ; preds = %286, %257
  br label %288

288:                                              ; preds = %287, %252
  %289 = load double, ptr %12, align 8, !tbaa !19
  %290 = load ptr, ptr %3, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.DAQPWorkspace, ptr %290, i32 0, i32 18
  %292 = load ptr, ptr %291, align 8, !tbaa !29
  %293 = load i32, ptr %9, align 4, !tbaa !9
  %294 = load i32, ptr %5, align 4, !tbaa !9
  %295 = add nsw i32 %293, %294
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds double, ptr %292, i64 %296
  store double %289, ptr %297, align 8, !tbaa !19
  br label %298

298:                                              ; preds = %288
  %299 = load i32, ptr %5, align 4, !tbaa !9
  %300 = add nsw i32 %299, 1
  store i32 %300, ptr %5, align 4, !tbaa !9
  br label %148, !llvm.loop !30

301:                                              ; preds = %148
  store i32 0, ptr %5, align 4, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %358, %301
  %303 = load i32, ptr %5, align 4, !tbaa !9
  %304 = load ptr, ptr %3, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.DAQPWorkspace, ptr %304, i32 0, i32 24
  %306 = load i32, ptr %305, align 8, !tbaa !14
  %307 = icmp slt i32 %303, %306
  br i1 %307, label %308, label %361

308:                                              ; preds = %302
  %309 = load ptr, ptr %3, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.DAQPWorkspace, ptr %309, i32 0, i32 18
  %311 = load ptr, ptr %310, align 8, !tbaa !29
  %312 = load i32, ptr %9, align 4, !tbaa !9
  %313 = load i32, ptr %5, align 4, !tbaa !9
  %314 = add nsw i32 %312, %313
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds double, ptr %311, i64 %315
  %317 = load double, ptr %316, align 8, !tbaa !19
  store double %317, ptr %12, align 8, !tbaa !19
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %318

318:                                              ; preds = %343, %308
  %319 = load i32, ptr %6, align 4, !tbaa !9
  %320 = load i32, ptr %5, align 4, !tbaa !9
  %321 = icmp slt i32 %319, %320
  br i1 %321, label %322, label %346

322:                                              ; preds = %318
  %323 = load ptr, ptr %3, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.DAQPWorkspace, ptr %323, i32 0, i32 18
  %325 = load ptr, ptr %324, align 8, !tbaa !29
  %326 = load i32, ptr %7, align 4, !tbaa !9
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %7, align 4, !tbaa !9
  %328 = sext i32 %326 to i64
  %329 = getelementptr inbounds double, ptr %325, i64 %328
  %330 = load double, ptr %329, align 8, !tbaa !19
  %331 = load ptr, ptr %3, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.DAQPWorkspace, ptr %331, i32 0, i32 18
  %333 = load ptr, ptr %332, align 8, !tbaa !29
  %334 = load i32, ptr %9, align 4, !tbaa !9
  %335 = load i32, ptr %6, align 4, !tbaa !9
  %336 = add nsw i32 %334, %335
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds double, ptr %333, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !19
  %340 = load double, ptr %12, align 8, !tbaa !19
  %341 = fneg double %330
  %342 = call double @llvm.fmuladd.f64(double %341, double %339, double %340)
  store double %342, ptr %12, align 8, !tbaa !19
  br label %343

343:                                              ; preds = %322
  %344 = load i32, ptr %6, align 4, !tbaa !9
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %6, align 4, !tbaa !9
  br label %318, !llvm.loop !31

346:                                              ; preds = %318
  %347 = load double, ptr %12, align 8, !tbaa !19
  %348 = load ptr, ptr %3, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.DAQPWorkspace, ptr %348, i32 0, i32 18
  %350 = load ptr, ptr %349, align 8, !tbaa !29
  %351 = load i32, ptr %9, align 4, !tbaa !9
  %352 = load i32, ptr %5, align 4, !tbaa !9
  %353 = add nsw i32 %351, %352
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds double, ptr %350, i64 %354
  store double %347, ptr %355, align 8, !tbaa !19
  %356 = load i32, ptr %7, align 4, !tbaa !9
  %357 = add nsw i32 %356, 1
  store i32 %357, ptr %7, align 4, !tbaa !9
  br label %358

358:                                              ; preds = %346
  %359 = load i32, ptr %5, align 4, !tbaa !9
  %360 = add nsw i32 %359, 1
  store i32 %360, ptr %5, align 4, !tbaa !9
  br label %302, !llvm.loop !32

361:                                              ; preds = %302
  %362 = load ptr, ptr %3, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.DAQPWorkspace, ptr %362, i32 0, i32 19
  %364 = load ptr, ptr %363, align 8, !tbaa !26
  %365 = load ptr, ptr %3, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.DAQPWorkspace, ptr %365, i32 0, i32 24
  %367 = load i32, ptr %366, align 8, !tbaa !14
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds double, ptr %364, i64 %368
  %370 = load double, ptr %369, align 8, !tbaa !19
  store double %370, ptr %12, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  store i32 0, ptr %5, align 4, !tbaa !9
  %371 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %371, ptr %7, align 4, !tbaa !9
  br label %372

372:                                              ; preds = %412, %361
  %373 = load i32, ptr %5, align 4, !tbaa !9
  %374 = load ptr, ptr %3, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.DAQPWorkspace, ptr %374, i32 0, i32 24
  %376 = load i32, ptr %375, align 8, !tbaa !14
  %377 = icmp slt i32 %373, %376
  br i1 %377, label %378, label %417

378:                                              ; preds = %372
  %379 = load ptr, ptr %3, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.DAQPWorkspace, ptr %379, i32 0, i32 18
  %381 = load ptr, ptr %380, align 8, !tbaa !29
  %382 = load i32, ptr %7, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds double, ptr %381, i64 %383
  %385 = load double, ptr %384, align 8, !tbaa !19
  store double %385, ptr %16, align 8, !tbaa !19
  %386 = load ptr, ptr %3, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.DAQPWorkspace, ptr %386, i32 0, i32 19
  %388 = load ptr, ptr %387, align 8, !tbaa !26
  %389 = load i32, ptr %5, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds double, ptr %388, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !19
  %393 = load ptr, ptr %3, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.DAQPWorkspace, ptr %393, i32 0, i32 18
  %395 = load ptr, ptr %394, align 8, !tbaa !29
  %396 = load i32, ptr %7, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds double, ptr %395, i64 %397
  %399 = load double, ptr %398, align 8, !tbaa !19
  %400 = fdiv double %399, %392
  store double %400, ptr %398, align 8, !tbaa !19
  %401 = load double, ptr %16, align 8, !tbaa !19
  %402 = load ptr, ptr %3, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.DAQPWorkspace, ptr %402, i32 0, i32 18
  %404 = load ptr, ptr %403, align 8, !tbaa !29
  %405 = load i32, ptr %7, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds double, ptr %404, i64 %406
  %408 = load double, ptr %407, align 8, !tbaa !19
  %409 = load double, ptr %12, align 8, !tbaa !19
  %410 = fneg double %401
  %411 = call double @llvm.fmuladd.f64(double %410, double %408, double %409)
  store double %411, ptr %12, align 8, !tbaa !19
  br label %412

412:                                              ; preds = %378
  %413 = load i32, ptr %5, align 4, !tbaa !9
  %414 = add nsw i32 %413, 1
  store i32 %414, ptr %5, align 4, !tbaa !9
  %415 = load i32, ptr %7, align 4, !tbaa !9
  %416 = add nsw i32 %415, 1
  store i32 %416, ptr %7, align 4, !tbaa !9
  br label %372, !llvm.loop !33

417:                                              ; preds = %372
  %418 = load double, ptr %12, align 8, !tbaa !19
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.DAQPWorkspace, ptr %419, i32 0, i32 19
  %421 = load ptr, ptr %420, align 8, !tbaa !26
  %422 = load ptr, ptr %3, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.DAQPWorkspace, ptr %422, i32 0, i32 24
  %424 = load i32, ptr %423, align 8, !tbaa !14
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds double, ptr %421, i64 %425
  store double %418, ptr %426, align 8, !tbaa !19
  %427 = load ptr, ptr %3, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.DAQPWorkspace, ptr %427, i32 0, i32 19
  %429 = load ptr, ptr %428, align 8, !tbaa !26
  %430 = load ptr, ptr %3, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.DAQPWorkspace, ptr %430, i32 0, i32 24
  %432 = load i32, ptr %431, align 8, !tbaa !14
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds double, ptr %429, i64 %433
  %435 = load double, ptr %434, align 8, !tbaa !19
  %436 = load ptr, ptr %3, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.DAQPWorkspace, ptr %436, i32 0, i32 28
  %438 = load ptr, ptr %437, align 8, !tbaa !23
  %439 = getelementptr inbounds %struct.DAQPSettings, ptr %438, i32 0, i32 2
  %440 = load double, ptr %439, align 8, !tbaa !34
  %441 = fcmp olt double %435, %440
  br i1 %441, label %452, label %442

442:                                              ; preds = %417
  %443 = load ptr, ptr %3, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.DAQPWorkspace, ptr %443, i32 0, i32 24
  %445 = load i32, ptr %444, align 8, !tbaa !14
  %446 = load ptr, ptr %3, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.DAQPWorkspace, ptr %446, i32 0, i32 1
  %448 = load i32, ptr %447, align 8, !tbaa !17
  %449 = load i32, ptr %11, align 4, !tbaa !9
  %450 = add nsw i32 %448, %449
  %451 = icmp sge i32 %445, %450
  br i1 %451, label %452, label %466

452:                                              ; preds = %442, %417
  %453 = load ptr, ptr %3, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.DAQPWorkspace, ptr %453, i32 0, i32 24
  %455 = load i32, ptr %454, align 8, !tbaa !14
  %456 = load ptr, ptr %3, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.DAQPWorkspace, ptr %456, i32 0, i32 26
  store i32 %455, ptr %457, align 8, !tbaa !11
  %458 = load ptr, ptr %3, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.DAQPWorkspace, ptr %458, i32 0, i32 19
  %460 = load ptr, ptr %459, align 8, !tbaa !26
  %461 = load ptr, ptr %3, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.DAQPWorkspace, ptr %461, i32 0, i32 24
  %463 = load i32, ptr %462, align 8, !tbaa !14
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds double, ptr %460, i64 %464
  store double 0.000000e+00, ptr %465, align 8, !tbaa !19
  br label %466

466:                                              ; preds = %452, %442
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  store i32 0, ptr %15, align 4
  br label %467

467:                                              ; preds = %466, %146
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  %468 = load i32, ptr %15, align 4
  switch i32 %468, label %470 [
    i32 0, label %469
    i32 1, label %469
  ]

469:                                              ; preds = %467, %467
  ret void

470:                                              ; preds = %467
  unreachable
}

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

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

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

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

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 192}
!12 = !{!"", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !13, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !10, i64 184, !10, i64 188, !10, i64 192, !13, i64 200, !6, i64 208, !6, i64 216, !10, i64 224, !6, i64 232}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !10, i64 184}
!15 = !{!12, !10, i64 16}
!16 = !{!12, !6, i64 48}
!17 = !{!12, !10, i64 8}
!18 = !{!12, !6, i64 24}
!19 = !{!13, !13, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!12, !6, i64 64}
!23 = !{!12, !6, i64 208}
!24 = !{!25, !13, i64 72}
!25 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !10, i64 40, !10, i64 44, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88}
!26 = !{!12, !6, i64 144}
!27 = !{!12, !6, i64 176}
!28 = distinct !{!28, !21}
!29 = !{!12, !6, i64 136}
!30 = distinct !{!30, !21}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !21}
!34 = !{!25, !13, i64 16}


; 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: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @update_LDL_add(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 192
  store i32 -1, ptr %3, align 8, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 184
  %5 = load i32, ptr %4, align 8, !tbaa !12
  %6 = add nsw i32 %5, 1
  %7 = mul nsw i32 %6, %5
  %8 = sdiv i32 %7, 2
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = load i32, ptr %9, align 8, !tbaa !13
  %11 = icmp sgt i32 %10, %1
  br i1 %11, label %12, label %23

12:                                               ; preds = %2
  %13 = getelementptr inbounds i8, ptr %0, i64 48
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %.not = icmp eq ptr %14, null
  br i1 %.not, label %.thread, label %15

15:                                               ; preds = %12
  %16 = getelementptr inbounds i8, ptr %0, i64 8
  %17 = load i32, ptr %16, align 8, !tbaa !15
  %18 = shl nsw i32 %17, 1
  %19 = xor i32 %1, -1
  %20 = add i32 %18, %19
  %21 = mul nsw i32 %20, %1
  %22 = sdiv i32 %21, 2
  br label %30

23:                                               ; preds = %2
  %24 = getelementptr inbounds i8, ptr %0, i64 24
  %25 = load ptr, ptr %24, align 8, !tbaa !16
  %26 = getelementptr inbounds i8, ptr %0, i64 8
  %27 = load i32, ptr %26, align 8, !tbaa !15
  %28 = sub nsw i32 %1, %10
  %29 = mul nsw i32 %27, %28
  br label %30

30:                                               ; preds = %15, %23
  %.sink250 = phi i32 [ %22, %15 ], [ %29, %23 ]
  %.sink = phi ptr [ %14, %15 ], [ %25, %23 ]
  %31 = phi i32 [ %17, %15 ], [ %27, %23 ]
  %.0139 = phi i32 [ %1, %15 ], [ 0, %23 ]
  %32 = sext i32 %.sink250 to i64
  %33 = getelementptr inbounds double, ptr %.sink, i64 %32
  %34 = icmp eq ptr %.sink, null
  br i1 %34, label %.thread, label %.preheader169

.preheader169:                                    ; preds = %30
  %35 = icmp slt i32 %.0139, %31
  br i1 %35, label %.lr.ph.preheader, label %.thread

.lr.ph.preheader:                                 ; preds = %.preheader169
  %36 = sext i32 %.0139 to i64
  %wide.trip.count = sext i32 %31 to i64
  %37 = sub nsw i64 %wide.trip.count, %36
  %xtraiter = and i64 %37, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader, %.lr.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %.lr.ph.prol ], [ %36, %.lr.ph.preheader ]
  %.0132170.prol = phi double [ %40, %.lr.ph.prol ], [ 0.000000e+00, %.lr.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader ]
  %38 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.prol
  %39 = load double, ptr %38, align 8, !tbaa !17
  %40 = tail call double @llvm.fmuladd.f64(double %39, double %39, double %.0132170.prol)
  %indvars.iv.next.prol = add nsw i64 %indvars.iv.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !18

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader
  %.lcssa258.unr = phi double [ poison, %.lr.ph.preheader ], [ %40, %.lr.ph.prol ]
  %indvars.iv.unr = phi i64 [ %36, %.lr.ph.preheader ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %.0132170.unr = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %40, %.lr.ph.prol ]
  %41 = sub nsw i64 %36, %wide.trip.count
  %42 = icmp ugt i64 %41, -4
  br i1 %42, label %.thread, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.prol.loopexit
  %invariant.gep276 = getelementptr i8, ptr %33, i64 8
  %invariant.gep278 = getelementptr i8, ptr %33, i64 16
  %invariant.gep280 = getelementptr i8, ptr %33, i64 24
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ %indvars.iv.unr, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %.0132170 = phi double [ %.0132170.unr, %.lr.ph.preheader.new ], [ %51, %.lr.ph ]
  %43 = getelementptr inbounds double, ptr %33, i64 %indvars.iv
  %44 = load double, ptr %43, align 8, !tbaa !17
  %45 = tail call double @llvm.fmuladd.f64(double %44, double %44, double %.0132170)
  %gep277 = getelementptr double, ptr %invariant.gep276, i64 %indvars.iv
  %46 = load double, ptr %gep277, align 8, !tbaa !17
  %47 = tail call double @llvm.fmuladd.f64(double %46, double %46, double %45)
  %gep279 = getelementptr double, ptr %invariant.gep278, i64 %indvars.iv
  %48 = load double, ptr %gep279, align 8, !tbaa !17
  %49 = tail call double @llvm.fmuladd.f64(double %48, double %48, double %47)
  %gep281 = getelementptr double, ptr %invariant.gep280, i64 %indvars.iv
  %50 = load double, ptr %gep281, align 8, !tbaa !17
  %51 = tail call double @llvm.fmuladd.f64(double %50, double %50, double %49)
  %indvars.iv.next.3 = add nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %.thread, label %.lr.ph, !llvm.loop !20

.thread:                                          ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %.preheader169, %12, %30
  %52 = phi i1 [ true, %30 ], [ true, %12 ], [ false, %.preheader169 ], [ false, %.lr.ph ], [ false, %.lr.ph.prol.loopexit ]
  %.0131166 = phi ptr [ null, %30 ], [ null, %12 ], [ %33, %.preheader169 ], [ %33, %.lr.ph ], [ %33, %.lr.ph.prol.loopexit ]
  %.0139165 = phi i32 [ %.0139, %30 ], [ %1, %12 ], [ %.0139, %.preheader169 ], [ %.0139, %.lr.ph ], [ %.0139, %.lr.ph.prol.loopexit ]
  %.1133 = phi double [ 1.000000e+00, %30 ], [ 1.000000e+00, %12 ], [ 0.000000e+00, %.preheader169 ], [ %.lcssa258.unr, %.lr.ph.prol.loopexit ], [ %51, %.lr.ph ]
  %53 = getelementptr inbounds i8, ptr %0, i64 64
  %54 = load ptr, ptr %53, align 8, !tbaa !22
  %55 = sext i32 %1 to i64
  %56 = getelementptr inbounds i32, ptr %54, i64 %55
  %57 = load i32, ptr %56, align 4, !tbaa !23
  %58 = and i32 %57, 40
  %or.cond = icmp eq i32 %58, 8
  br i1 %or.cond, label %59, label %65

59:                                               ; preds = %.thread
  %60 = getelementptr inbounds i8, ptr %0, i64 208
  %61 = load ptr, ptr %60, align 8, !tbaa !24
  %62 = getelementptr inbounds i8, ptr %61, i64 72
  %63 = load double, ptr %62, align 8, !tbaa !25
  %64 = fadd double %.1133, %63
  br label %65

65:                                               ; preds = %59, %.thread
  %.0136 = phi i32 [ 1, %59 ], [ 0, %.thread ]
  %.2134 = phi double [ %64, %59 ], [ %.1133, %.thread ]
  %66 = getelementptr inbounds i8, ptr %0, i64 144
  %67 = load ptr, ptr %66, align 8, !tbaa !27
  %68 = sext i32 %5 to i64
  %69 = getelementptr inbounds double, ptr %67, i64 %68
  store double %.2134, ptr %69, align 8, !tbaa !17
  %70 = icmp eq i32 %5, 0
  br i1 %70, label %209, label %.preheader168

.preheader168:                                    ; preds = %65
  %71 = icmp sgt i32 %5, 0
  br i1 %71, label %.lr.ph178, label %._crit_edge189.thread

.lr.ph178:                                        ; preds = %.preheader168
  %72 = getelementptr inbounds i8, ptr %0, i64 176
  %73 = load ptr, ptr %72, align 8, !tbaa !28
  %74 = getelementptr inbounds i8, ptr %0, i64 24
  %75 = getelementptr inbounds i8, ptr %0, i64 8
  %76 = getelementptr inbounds i8, ptr %0, i64 48
  %77 = getelementptr inbounds i8, ptr %0, i64 136
  %78 = load ptr, ptr %77, align 8, !tbaa !29
  %79 = zext nneg i32 %8 to i64
  %wide.trip.count211 = zext nneg i32 %5 to i64
  %invariant.gep = getelementptr inbounds double, ptr %78, i64 %79
  br label %83

.preheader:                                       ; preds = %.loopexit
  br i1 %71, label %.lr.ph188, label %._crit_edge189.thread

.lr.ph188:                                        ; preds = %.preheader
  %80 = getelementptr inbounds i8, ptr %0, i64 136
  %81 = load ptr, ptr %80, align 8, !tbaa !29
  %82 = zext nneg i32 %8 to i64
  %wide.trip.count227 = zext nneg i32 %5 to i64
  %invariant.gep247 = getelementptr inbounds double, ptr %81, i64 %82
  %invariant.gep245 = getelementptr inbounds double, ptr %81, i64 %82
  %invariant.gep282 = getelementptr i8, ptr %81, i64 8
  br label %151

83:                                               ; preds = %.lr.ph178, %.loopexit
  %indvars.iv208 = phi i64 [ 0, %.lr.ph178 ], [ %indvars.iv.next209, %.loopexit ]
  %.1137176 = phi i32 [ %.0136, %.lr.ph178 ], [ %.2138, %.loopexit ]
  %84 = getelementptr inbounds i32, ptr %73, i64 %indvars.iv208
  %85 = load i32, ptr %84, align 4, !tbaa !23
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds i32, ptr %54, i64 %86
  %88 = load i32, ptr %87, align 4, !tbaa !23
  %89 = and i32 %88, 40
  %or.cond162 = icmp eq i32 %89, 8
  %90 = zext i1 %or.cond162 to i32
  %.2138 = add nuw nsw i32 %.1137176, %90
  %91 = icmp slt i32 %85, %10
  br i1 %91, label %92, label %106

92:                                               ; preds = %83
  %93 = load ptr, ptr %76, align 8, !tbaa !14
  %.not159 = icmp eq ptr %93, null
  br i1 %.not159, label %103, label %94

94:                                               ; preds = %92
  %95 = load i32, ptr %75, align 8, !tbaa !15
  %96 = shl nsw i32 %95, 1
  %97 = xor i32 %85, -1
  %98 = add i32 %96, %97
  %99 = mul nsw i32 %98, %85
  %100 = sdiv i32 %99, 2
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds double, ptr %93, i64 %101
  br label %103

103:                                              ; preds = %92, %94
  %104 = phi ptr [ %102, %94 ], [ null, %92 ]
  %105 = tail call i32 @llvm.smax.i32(i32 %.0139165, i32 %85)
  br label %113

106:                                              ; preds = %83
  %107 = load ptr, ptr %74, align 8, !tbaa !16
  %108 = load i32, ptr %75, align 8, !tbaa !15
  %109 = sub nsw i32 %85, %10
  %110 = mul nsw i32 %108, %109
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds double, ptr %107, i64 %111
  br label %113

113:                                              ; preds = %106, %103
  %.0140 = phi i32 [ %105, %103 ], [ %.0139165, %106 ]
  %.0130 = phi ptr [ %104, %103 ], [ %112, %106 ]
  %114 = icmp eq ptr %.0130, null
  br i1 %114, label %115, label %116

115:                                              ; preds = %113
  br i1 %52, label %.loopexit, label %.loopexit.sink.split

116:                                              ; preds = %113
  br i1 %52, label %.loopexit.sink.split, label %.preheader167

.preheader167:                                    ; preds = %116
  %117 = load i32, ptr %75, align 8, !tbaa !15
  %118 = icmp slt i32 %.0140, %117
  br i1 %118, label %.lr.ph174.preheader, label %.loopexit

.lr.ph174.preheader:                              ; preds = %.preheader167
  %119 = sext i32 %.0140 to i64
  %wide.trip.count206 = sext i32 %117 to i64
  %120 = sub nsw i64 %wide.trip.count206, %119
  %xtraiter259 = and i64 %120, 3
  %lcmp.mod260.not = icmp eq i64 %xtraiter259, 0
  br i1 %lcmp.mod260.not, label %.lr.ph174.prol.loopexit, label %.lr.ph174.prol

.lr.ph174.prol:                                   ; preds = %.lr.ph174.preheader, %.lr.ph174.prol
  %indvars.iv203.prol = phi i64 [ %indvars.iv.next204.prol, %.lr.ph174.prol ], [ %119, %.lr.ph174.preheader ]
  %.3135173.prol = phi double [ %125, %.lr.ph174.prol ], [ 0.000000e+00, %.lr.ph174.preheader ]
  %prol.iter261 = phi i64 [ %prol.iter261.next, %.lr.ph174.prol ], [ 0, %.lr.ph174.preheader ]
  %121 = getelementptr inbounds double, ptr %.0130, i64 %indvars.iv203.prol
  %122 = load double, ptr %121, align 8, !tbaa !17
  %123 = getelementptr inbounds double, ptr %.0131166, i64 %indvars.iv203.prol
  %124 = load double, ptr %123, align 8, !tbaa !17
  %125 = tail call double @llvm.fmuladd.f64(double %122, double %124, double %.3135173.prol)
  %indvars.iv.next204.prol = add nsw i64 %indvars.iv203.prol, 1
  %prol.iter261.next = add i64 %prol.iter261, 1
  %prol.iter261.cmp.not = icmp eq i64 %prol.iter261.next, %xtraiter259
  br i1 %prol.iter261.cmp.not, label %.lr.ph174.prol.loopexit, label %.lr.ph174.prol, !llvm.loop !30

.lr.ph174.prol.loopexit:                          ; preds = %.lr.ph174.prol, %.lr.ph174.preheader
  %.lcssa257.unr = phi double [ poison, %.lr.ph174.preheader ], [ %125, %.lr.ph174.prol ]
  %indvars.iv203.unr = phi i64 [ %119, %.lr.ph174.preheader ], [ %indvars.iv.next204.prol, %.lr.ph174.prol ]
  %.3135173.unr = phi double [ 0.000000e+00, %.lr.ph174.preheader ], [ %125, %.lr.ph174.prol ]
  %126 = sub nsw i64 %119, %wide.trip.count206
  %127 = icmp ugt i64 %126, -4
  br i1 %127, label %.loopexit, label %.lr.ph174

.lr.ph174:                                        ; preds = %.lr.ph174.prol.loopexit, %.lr.ph174
  %indvars.iv203 = phi i64 [ %indvars.iv.next204.3, %.lr.ph174 ], [ %indvars.iv203.unr, %.lr.ph174.prol.loopexit ]
  %.3135173 = phi double [ %147, %.lr.ph174 ], [ %.3135173.unr, %.lr.ph174.prol.loopexit ]
  %128 = getelementptr inbounds double, ptr %.0130, i64 %indvars.iv203
  %129 = load double, ptr %128, align 8, !tbaa !17
  %130 = getelementptr inbounds double, ptr %.0131166, i64 %indvars.iv203
  %131 = load double, ptr %130, align 8, !tbaa !17
  %132 = tail call double @llvm.fmuladd.f64(double %129, double %131, double %.3135173)
  %indvars.iv.next204 = add nsw i64 %indvars.iv203, 1
  %133 = getelementptr inbounds double, ptr %.0130, i64 %indvars.iv.next204
  %134 = load double, ptr %133, align 8, !tbaa !17
  %135 = getelementptr inbounds double, ptr %.0131166, i64 %indvars.iv.next204
  %136 = load double, ptr %135, align 8, !tbaa !17
  %137 = tail call double @llvm.fmuladd.f64(double %134, double %136, double %132)
  %indvars.iv.next204.1 = add nsw i64 %indvars.iv203, 2
  %138 = getelementptr inbounds double, ptr %.0130, i64 %indvars.iv.next204.1
  %139 = load double, ptr %138, align 8, !tbaa !17
  %140 = getelementptr inbounds double, ptr %.0131166, i64 %indvars.iv.next204.1
  %141 = load double, ptr %140, align 8, !tbaa !17
  %142 = tail call double @llvm.fmuladd.f64(double %139, double %141, double %137)
  %indvars.iv.next204.2 = add nsw i64 %indvars.iv203, 3
  %143 = getelementptr inbounds double, ptr %.0130, i64 %indvars.iv.next204.2
  %144 = load double, ptr %143, align 8, !tbaa !17
  %145 = getelementptr inbounds double, ptr %.0131166, i64 %indvars.iv.next204.2
  %146 = load double, ptr %145, align 8, !tbaa !17
  %147 = tail call double @llvm.fmuladd.f64(double %144, double %146, double %142)
  %indvars.iv.next204.3 = add nsw i64 %indvars.iv203, 4
  %exitcond207.not.3 = icmp eq i64 %indvars.iv.next204.3, %wide.trip.count206
  br i1 %exitcond207.not.3, label %.loopexit, label %.lr.ph174, !llvm.loop !31

.loopexit.sink.split:                             ; preds = %116, %115
  %.0131166.sink = phi ptr [ %.0131166, %115 ], [ %.0130, %116 ]
  %148 = sext i32 %.0140 to i64
  %149 = getelementptr inbounds double, ptr %.0131166.sink, i64 %148
  %150 = load double, ptr %149, align 8, !tbaa !17
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph174.prol.loopexit, %.lr.ph174, %.loopexit.sink.split, %.preheader167, %115
  %.4 = phi double [ 0.000000e+00, %115 ], [ 0.000000e+00, %.preheader167 ], [ %150, %.loopexit.sink.split ], [ %.lcssa257.unr, %.lr.ph174.prol.loopexit ], [ %147, %.lr.ph174 ]
  %gep = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv208
  store double %.4, ptr %gep, align 8, !tbaa !17
  %indvars.iv.next209 = add nuw nsw i64 %indvars.iv208, 1
  %exitcond212.not = icmp eq i64 %indvars.iv.next209, %wide.trip.count211
  br i1 %exitcond212.not, label %.preheader, label %83, !llvm.loop !32

151:                                              ; preds = %.lr.ph188, %._crit_edge
  %indvars.iv224 = phi i64 [ 0, %.lr.ph188 ], [ %indvars.iv.next225, %._crit_edge ]
  %indvars.iv217 = phi i32 [ -1, %.lr.ph188 ], [ %indvars.iv.next218, %._crit_edge ]
  %.0143186 = phi i32 [ 0, %.lr.ph188 ], [ %171, %._crit_edge ]
  %gep248 = getelementptr inbounds double, ptr %invariant.gep247, i64 %indvars.iv224
  %152 = load double, ptr %gep248, align 8, !tbaa !17
  %.not197 = icmp eq i64 %indvars.iv224, 0
  br i1 %.not197, label %._crit_edge, label %.lr.ph183.preheader

.lr.ph183.preheader:                              ; preds = %151
  %153 = sext i32 %.0143186 to i64
  %154 = add i32 %.0143186, 1
  %xtraiter262 = and i64 %indvars.iv224, 1
  %155 = icmp eq i64 %indvars.iv224, 1
  br i1 %155, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph183.preheader.new

.lr.ph183.preheader.new:                          ; preds = %.lr.ph183.preheader
  %unroll_iter = and i64 %indvars.iv224, 9223372036854775806
  br label %.lr.ph183

.lr.ph183:                                        ; preds = %.lr.ph183, %.lr.ph183.preheader.new
  %indvars.iv215 = phi i64 [ %153, %.lr.ph183.preheader.new ], [ %indvars.iv.next216.1, %.lr.ph183 ]
  %indvars.iv213 = phi i64 [ 0, %.lr.ph183.preheader.new ], [ %indvars.iv.next214.1, %.lr.ph183 ]
  %.5182 = phi double [ %152, %.lr.ph183.preheader.new ], [ %164, %.lr.ph183 ]
  %niter = phi i64 [ 0, %.lr.ph183.preheader.new ], [ %niter.next.1, %.lr.ph183 ]
  %156 = getelementptr inbounds double, ptr %81, i64 %indvars.iv215
  %157 = load double, ptr %156, align 8, !tbaa !17
  %gep246 = getelementptr inbounds double, ptr %invariant.gep245, i64 %indvars.iv213
  %158 = load double, ptr %gep246, align 8, !tbaa !17
  %159 = fneg double %157
  %160 = tail call double @llvm.fmuladd.f64(double %159, double %158, double %.5182)
  %indvars.iv.next214 = or disjoint i64 %indvars.iv213, 1
  %indvars.iv.next216.1 = add nsw i64 %indvars.iv215, 2
  %gep283 = getelementptr double, ptr %invariant.gep282, i64 %indvars.iv215
  %161 = load double, ptr %gep283, align 8, !tbaa !17
  %gep246.1 = getelementptr inbounds double, ptr %invariant.gep245, i64 %indvars.iv.next214
  %162 = load double, ptr %gep246.1, align 8, !tbaa !17
  %163 = fneg double %161
  %164 = tail call double @llvm.fmuladd.f64(double %163, double %162, double %160)
  %indvars.iv.next214.1 = add nuw nsw i64 %indvars.iv213, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph183, !llvm.loop !33

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph183, %.lr.ph183.preheader
  %.lcssa256.ph = phi double [ poison, %.lr.ph183.preheader ], [ %164, %.lr.ph183 ]
  %indvars.iv215.unr = phi i64 [ %153, %.lr.ph183.preheader ], [ %indvars.iv.next216.1, %.lr.ph183 ]
  %indvars.iv213.unr = phi i64 [ 0, %.lr.ph183.preheader ], [ %indvars.iv.next214.1, %.lr.ph183 ]
  %.5182.unr = phi double [ %152, %.lr.ph183.preheader ], [ %164, %.lr.ph183 ]
  %lcmp.mod263.not = icmp eq i64 %xtraiter262, 0
  br i1 %lcmp.mod263.not, label %._crit_edge.loopexit, label %.lr.ph183.epil

.lr.ph183.epil:                                   ; preds = %._crit_edge.loopexit.unr-lcssa
  %165 = getelementptr inbounds double, ptr %81, i64 %indvars.iv215.unr
  %166 = load double, ptr %165, align 8, !tbaa !17
  %gep246.epil = getelementptr inbounds double, ptr %invariant.gep245, i64 %indvars.iv213.unr
  %167 = load double, ptr %gep246.epil, align 8, !tbaa !17
  %168 = fneg double %166
  %169 = tail call double @llvm.fmuladd.f64(double %168, double %167, double %.5182.unr)
  br label %._crit_edge.loopexit

._crit_edge.loopexit:                             ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph183.epil
  %.lcssa256 = phi double [ %.lcssa256.ph, %._crit_edge.loopexit.unr-lcssa ], [ %169, %.lr.ph183.epil ]
  %170 = add i32 %154, %indvars.iv217
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %151
  %.1144.lcssa = phi i32 [ %.0143186, %151 ], [ %170, %._crit_edge.loopexit ]
  %.5.lcssa = phi double [ %152, %151 ], [ %.lcssa256, %._crit_edge.loopexit ]
  store double %.5.lcssa, ptr %gep248, align 8, !tbaa !17
  %171 = add nsw i32 %.1144.lcssa, 1
  %indvars.iv.next225 = add nuw nsw i64 %indvars.iv224, 1
  %indvars.iv.next218 = add nsw i32 %indvars.iv217, 1
  %exitcond228.not = icmp eq i64 %indvars.iv.next225, %wide.trip.count227
  br i1 %exitcond228.not, label %._crit_edge189, label %151, !llvm.loop !34

._crit_edge189.thread:                            ; preds = %.preheader, %.preheader168
  %.1137.lcssa239.ph = phi i32 [ %.2138, %.preheader ], [ %.0136, %.preheader168 ]
  %172 = load double, ptr %69, align 8, !tbaa !17
  br label %._crit_edge195

._crit_edge189:                                   ; preds = %._crit_edge
  %173 = load double, ptr %69, align 8, !tbaa !17
  br i1 %71, label %.lr.ph194, label %._crit_edge195

.lr.ph194:                                        ; preds = %._crit_edge189
  %174 = getelementptr inbounds i8, ptr %0, i64 136
  %175 = load ptr, ptr %174, align 8, !tbaa !29
  %176 = zext nneg i32 %8 to i64
  %wide.trip.count236 = zext nneg i32 %5 to i64
  %xtraiter265 = and i64 %wide.trip.count236, 1
  %177 = icmp eq i32 %5, 1
  br i1 %177, label %._crit_edge195.loopexit.unr-lcssa, label %.lr.ph194.new

.lr.ph194.new:                                    ; preds = %.lr.ph194
  %unroll_iter268 = and i64 %wide.trip.count236, 2147483646
  %invariant.gep284 = getelementptr inbounds i8, ptr %175, i64 8
  br label %178

178:                                              ; preds = %178, %.lr.ph194.new
  %indvars.iv231 = phi i64 [ %176, %.lr.ph194.new ], [ %indvars.iv.next232.1, %178 ]
  %indvars.iv229 = phi i64 [ 0, %.lr.ph194.new ], [ %indvars.iv.next230.1, %178 ]
  %.6191 = phi double [ %173, %.lr.ph194.new ], [ %191, %178 ]
  %niter269 = phi i64 [ 0, %.lr.ph194.new ], [ %niter269.next.1, %178 ]
  %179 = getelementptr inbounds double, ptr %175, i64 %indvars.iv231
  %180 = load double, ptr %179, align 8, !tbaa !17
  %181 = getelementptr inbounds double, ptr %67, i64 %indvars.iv229
  %182 = load double, ptr %181, align 8, !tbaa !17
  %183 = fdiv double %180, %182
  store double %183, ptr %179, align 8, !tbaa !17
  %184 = fneg double %180
  %185 = tail call double @llvm.fmuladd.f64(double %184, double %183, double %.6191)
  %indvars.iv.next230 = or disjoint i64 %indvars.iv229, 1
  %gep285 = getelementptr inbounds double, ptr %invariant.gep284, i64 %indvars.iv231
  %186 = load double, ptr %gep285, align 8, !tbaa !17
  %187 = getelementptr inbounds double, ptr %67, i64 %indvars.iv.next230
  %188 = load double, ptr %187, align 8, !tbaa !17
  %189 = fdiv double %186, %188
  store double %189, ptr %gep285, align 8, !tbaa !17
  %190 = fneg double %186
  %191 = tail call double @llvm.fmuladd.f64(double %190, double %189, double %185)
  %indvars.iv.next230.1 = add nuw nsw i64 %indvars.iv229, 2
  %indvars.iv.next232.1 = add nuw nsw i64 %indvars.iv231, 2
  %niter269.next.1 = add i64 %niter269, 2
  %niter269.ncmp.1 = icmp eq i64 %niter269.next.1, %unroll_iter268
  br i1 %niter269.ncmp.1, label %._crit_edge195.loopexit.unr-lcssa, label %178, !llvm.loop !35

._crit_edge195.loopexit.unr-lcssa:                ; preds = %178, %.lr.ph194
  %.lcssa.ph = phi double [ poison, %.lr.ph194 ], [ %191, %178 ]
  %indvars.iv231.unr = phi i64 [ %176, %.lr.ph194 ], [ %indvars.iv.next232.1, %178 ]
  %indvars.iv229.unr = phi i64 [ 0, %.lr.ph194 ], [ %indvars.iv.next230.1, %178 ]
  %.6191.unr = phi double [ %173, %.lr.ph194 ], [ %191, %178 ]
  %lcmp.mod266.not = icmp eq i64 %xtraiter265, 0
  br i1 %lcmp.mod266.not, label %._crit_edge195, label %._crit_edge195.loopexit.epilog-lcssa

._crit_edge195.loopexit.epilog-lcssa:             ; preds = %._crit_edge195.loopexit.unr-lcssa
  %192 = getelementptr inbounds double, ptr %175, i64 %indvars.iv231.unr
  %193 = load double, ptr %192, align 8, !tbaa !17
  %194 = getelementptr inbounds double, ptr %67, i64 %indvars.iv229.unr
  %195 = load double, ptr %194, align 8, !tbaa !17
  %196 = fdiv double %193, %195
  store double %196, ptr %192, align 8, !tbaa !17
  %197 = fneg double %193
  %198 = tail call double @llvm.fmuladd.f64(double %197, double %196, double %.6191.unr)
  br label %._crit_edge195

._crit_edge195:                                   ; preds = %._crit_edge195.loopexit.epilog-lcssa, %._crit_edge195.loopexit.unr-lcssa, %._crit_edge189.thread, %._crit_edge189
  %.1137.lcssa239241 = phi i32 [ %.2138, %._crit_edge189 ], [ %.1137.lcssa239.ph, %._crit_edge189.thread ], [ %.2138, %._crit_edge195.loopexit.unr-lcssa ], [ %.2138, %._crit_edge195.loopexit.epilog-lcssa ]
  %.6.lcssa = phi double [ %173, %._crit_edge189 ], [ %172, %._crit_edge189.thread ], [ %.lcssa.ph, %._crit_edge195.loopexit.unr-lcssa ], [ %198, %._crit_edge195.loopexit.epilog-lcssa ]
  store double %.6.lcssa, ptr %69, align 8, !tbaa !17
  %199 = getelementptr inbounds i8, ptr %0, i64 208
  %200 = load ptr, ptr %199, align 8, !tbaa !24
  %201 = getelementptr inbounds i8, ptr %200, i64 16
  %202 = load double, ptr %201, align 8, !tbaa !36
  %203 = fcmp olt double %.6.lcssa, %202
  br i1 %203, label %208, label %204

204:                                              ; preds = %._crit_edge195
  %205 = getelementptr inbounds i8, ptr %0, i64 8
  %206 = load i32, ptr %205, align 8, !tbaa !15
  %207 = add nsw i32 %206, %.1137.lcssa239241
  %.not157 = icmp slt i32 %5, %207
  br i1 %.not157, label %209, label %208

208:                                              ; preds = %204, %._crit_edge195
  store i32 %5, ptr %3, align 8, !tbaa !5
  store double 0.000000e+00, ptr %69, align 8, !tbaa !17
  br label %209

209:                                              ; preds = %204, %208, %65
  ret void
}

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

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

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

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 192}
!6 = !{!"", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !11, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !10, i64 168, !7, i64 176, !10, i64 184, !10, i64 188, !10, i64 192, !11, i64 200, !7, i64 208, !7, i64 216, !10, i64 224, !7, i64 232}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!6, !10, i64 184}
!13 = !{!6, !10, i64 16}
!14 = !{!6, !7, i64 48}
!15 = !{!6, !10, i64 8}
!16 = !{!6, !7, i64 24}
!17 = !{!11, !11, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!6, !7, i64 64}
!23 = !{!10, !10, i64 0}
!24 = !{!6, !7, i64 208}
!25 = !{!26, !11, i64 72}
!26 = !{!"", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !10, i64 40, !10, i64 44, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88}
!27 = !{!6, !7, i64 144}
!28 = !{!6, !7, i64 176}
!29 = !{!6, !7, i64 136}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !21}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !21}
!34 = distinct !{!34, !21}
!35 = distinct !{!35, !21}
!36 = !{!26, !11, i64 16}


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