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

; 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @update_Rinv(ptr noundef %0, ptr noundef %1) #1 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %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 i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca double, align 8
  %15 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %16 = load ptr, ptr %4, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.DAQPWorkspace, ptr %16, i32 0, i32 1
  %18 = load i32, ptr %17, align 8, !tbaa !9
  store i32 %18, ptr %12, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 1, ptr %13, align 4, !tbaa !13
  store i32 0, ptr %6, align 4, !tbaa !13
  store i32 1, ptr %9, align 4, !tbaa !13
  br label %19

19:                                               ; preds = %56, %2
  %20 = load i32, ptr %6, align 4, !tbaa !13
  %21 = load i32, ptr %12, align 4, !tbaa !13
  %22 = icmp slt i32 %20, %21
  br i1 %22, label %23, label %63

23:                                               ; preds = %19
  store i32 1, ptr %7, align 4, !tbaa !13
  br label %24

24:                                               ; preds = %46, %23
  %25 = load i32, ptr %7, align 4, !tbaa !13
  %26 = load i32, ptr %12, align 4, !tbaa !13
  %27 = load i32, ptr %6, align 4, !tbaa !13
  %28 = sub nsw i32 %26, %27
  %29 = icmp slt i32 %25, %28
  br i1 %29, label %30, label %51

30:                                               ; preds = %24
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = load i32, ptr %9, align 4, !tbaa !13
  %33 = sext i32 %32 to i64
  %34 = getelementptr inbounds double, ptr %31, i64 %33
  %35 = load double, ptr %34, align 8, !tbaa !14
  %36 = fcmp ogt double %35, 0x3D719799812DEA11
  br i1 %36, label %44, label %37

37:                                               ; preds = %30
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = load i32, ptr %9, align 4, !tbaa !13
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds double, ptr %38, i64 %40
  %42 = load double, ptr %41, align 8, !tbaa !14
  %43 = fcmp olt double %42, 0xBD719799812DEA11
  br i1 %43, label %44, label %45

44:                                               ; preds = %37, %30
  store i32 0, ptr %13, align 4, !tbaa !13
  br label %51

45:                                               ; preds = %37
  br label %46

46:                                               ; preds = %45
  %47 = load i32, ptr %7, align 4, !tbaa !13
  %48 = add nsw i32 %47, 1
  store i32 %48, ptr %7, align 4, !tbaa !13
  %49 = load i32, ptr %9, align 4, !tbaa !13
  %50 = add nsw i32 %49, 1
  store i32 %50, ptr %9, align 4, !tbaa !13
  br label %24, !llvm.loop !15

51:                                               ; preds = %44, %24
  %52 = load i32, ptr %13, align 4, !tbaa !13
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %54, label %55

54:                                               ; preds = %51
  br label %63

55:                                               ; preds = %51
  br label %56

56:                                               ; preds = %55
  %57 = load i32, ptr %6, align 4, !tbaa !13
  %58 = add nsw i32 %57, 1
  store i32 %58, ptr %6, align 4, !tbaa !13
  %59 = load i32, ptr %6, align 4, !tbaa !13
  %60 = add nsw i32 %59, 1
  %61 = load i32, ptr %9, align 4, !tbaa !13
  %62 = add nsw i32 %61, %60
  store i32 %62, ptr %9, align 4, !tbaa !13
  br label %19, !llvm.loop !17

63:                                               ; preds = %54, %19
  %64 = load i32, ptr %13, align 4, !tbaa !13
  %65 = icmp eq i32 %64, 1
  br i1 %65, label %66, label %172

66:                                               ; preds = %63
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.DAQPWorkspace, ptr %67, i32 0, i32 7
  %69 = load ptr, ptr %68, align 8, !tbaa !18
  %70 = icmp ne ptr %69, null
  br i1 %70, label %71, label %79

71:                                               ; preds = %66
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.DAQPWorkspace, ptr %72, i32 0, i32 7
  %74 = load ptr, ptr %73, align 8, !tbaa !18
  %75 = load ptr, ptr %4, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.DAQPWorkspace, ptr %75, i32 0, i32 11
  store ptr %74, ptr %76, align 8, !tbaa !19
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.DAQPWorkspace, ptr %77, i32 0, i32 7
  store ptr null, ptr %78, align 8, !tbaa !18
  br label %79

79:                                               ; preds = %71, %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  store i32 0, ptr %6, align 4, !tbaa !13
  store i32 0, ptr %9, align 4, !tbaa !13
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.DAQPWorkspace, ptr %80, i32 0, i32 10
  %82 = load ptr, ptr %81, align 8, !tbaa !20
  %83 = icmp ne ptr %82, null
  br i1 %83, label %84, label %132

84:                                               ; preds = %79
  br label %85

85:                                               ; preds = %125, %84
  %86 = load i32, ptr %6, align 4, !tbaa !13
  %87 = load ptr, ptr %4, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.DAQPWorkspace, ptr %87, i32 0, i32 3
  %89 = load i32, ptr %88, align 8, !tbaa !21
  %90 = icmp slt i32 %86, %89
  br i1 %90, label %91, label %131

91:                                               ; preds = %85
  %92 = load ptr, ptr %5, align 8, !tbaa !5
  %93 = load i32, ptr %9, align 4, !tbaa !13
  %94 = add nsw i32 %93, 1
  store i32 %94, ptr %9, align 4, !tbaa !13
  %95 = sext i32 %93 to i64
  %96 = getelementptr inbounds double, ptr %92, i64 %95
  %97 = load double, ptr %96, align 8, !tbaa !14
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.DAQPWorkspace, ptr %98, i32 0, i32 28
  %100 = load ptr, ptr %99, align 8, !tbaa !22
  %101 = getelementptr inbounds %struct.DAQPSettings, ptr %100, i32 0, i32 8
  %102 = load double, ptr %101, align 8, !tbaa !23
  %103 = fadd double %97, %102
  store double %103, ptr %14, align 8, !tbaa !14
  %104 = load double, ptr %14, align 8, !tbaa !14
  %105 = fcmp ole double %104, 0.000000e+00
  br i1 %105, label %106, label %107

106:                                              ; preds = %91
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %15, align 4
  br label %171

107:                                              ; preds = %91
  %108 = load double, ptr %14, align 8, !tbaa !14
  %109 = call double @sqrt(double noundef %108) #4
  store double %109, ptr %14, align 8, !tbaa !14
  %110 = load double, ptr %14, align 8, !tbaa !14
  %111 = fdiv double 1.000000e+00, %110
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.DAQPWorkspace, ptr %112, i32 0, i32 11
  %114 = load ptr, ptr %113, align 8, !tbaa !19
  %115 = load i32, ptr %6, align 4, !tbaa !13
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds double, ptr %114, i64 %116
  store double %111, ptr %117, align 8, !tbaa !14
  %118 = load double, ptr %14, align 8, !tbaa !14
  %119 = load ptr, ptr %4, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.DAQPWorkspace, ptr %119, i32 0, i32 10
  %121 = load ptr, ptr %120, align 8, !tbaa !20
  %122 = load i32, ptr %6, align 4, !tbaa !13
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %121, i64 %123
  store double %118, ptr %124, align 8, !tbaa !14
  br label %125

125:                                              ; preds = %107
  %126 = load i32, ptr %6, align 4, !tbaa !13
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %6, align 4, !tbaa !13
  %128 = load i32, ptr %12, align 4, !tbaa !13
  %129 = load i32, ptr %9, align 4, !tbaa !13
  %130 = add nsw i32 %129, %128
  store i32 %130, ptr %9, align 4, !tbaa !13
  br label %85, !llvm.loop !25

131:                                              ; preds = %85
  br label %132

132:                                              ; preds = %131, %79
  br label %133

133:                                              ; preds = %164, %132
  %134 = load i32, ptr %6, align 4, !tbaa !13
  %135 = load i32, ptr %12, align 4, !tbaa !13
  %136 = icmp slt i32 %134, %135
  br i1 %136, label %137, label %170

137:                                              ; preds = %133
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = load i32, ptr %9, align 4, !tbaa !13
  %140 = add nsw i32 %139, 1
  store i32 %140, ptr %9, align 4, !tbaa !13
  %141 = sext i32 %139 to i64
  %142 = getelementptr inbounds double, ptr %138, i64 %141
  %143 = load double, ptr %142, align 8, !tbaa !14
  %144 = load ptr, ptr %4, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.DAQPWorkspace, ptr %144, i32 0, i32 28
  %146 = load ptr, ptr %145, align 8, !tbaa !22
  %147 = getelementptr inbounds %struct.DAQPSettings, ptr %146, i32 0, i32 8
  %148 = load double, ptr %147, align 8, !tbaa !23
  %149 = fadd double %143, %148
  store double %149, ptr %14, align 8, !tbaa !14
  %150 = load double, ptr %14, align 8, !tbaa !14
  %151 = fcmp ole double %150, 0.000000e+00
  br i1 %151, label %152, label %153

152:                                              ; preds = %137
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %15, align 4
  br label %171

153:                                              ; preds = %137
  %154 = load double, ptr %14, align 8, !tbaa !14
  %155 = call double @sqrt(double noundef %154) #4
  store double %155, ptr %14, align 8, !tbaa !14
  %156 = load double, ptr %14, align 8, !tbaa !14
  %157 = fdiv double 1.000000e+00, %156
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.DAQPWorkspace, ptr %158, i32 0, i32 11
  %160 = load ptr, ptr %159, align 8, !tbaa !19
  %161 = load i32, ptr %6, align 4, !tbaa !13
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds double, ptr %160, i64 %162
  store double %157, ptr %163, align 8, !tbaa !14
  br label %164

164:                                              ; preds = %153
  %165 = load i32, ptr %6, align 4, !tbaa !13
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %6, align 4, !tbaa !13
  %167 = load i32, ptr %12, align 4, !tbaa !13
  %168 = load i32, ptr %9, align 4, !tbaa !13
  %169 = add nsw i32 %168, %167
  store i32 %169, ptr %9, align 4, !tbaa !13
  br label %133, !llvm.loop !26

170:                                              ; preds = %133
  store i32 1, ptr %3, align 4
  store i32 1, ptr %15, align 4
  br label %171

171:                                              ; preds = %170, %152, %106
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  br label %506

172:                                              ; preds = %63
  %173 = load ptr, ptr %4, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.DAQPWorkspace, ptr %173, i32 0, i32 11
  %175 = load ptr, ptr %174, align 8, !tbaa !19
  %176 = icmp ne ptr %175, null
  br i1 %176, label %177, label %190

177:                                              ; preds = %172
  %178 = load ptr, ptr %4, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.DAQPWorkspace, ptr %178, i32 0, i32 7
  %180 = load ptr, ptr %179, align 8, !tbaa !18
  %181 = icmp eq ptr %180, null
  br i1 %181, label %182, label %190

182:                                              ; preds = %177
  %183 = load ptr, ptr %4, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.DAQPWorkspace, ptr %183, i32 0, i32 11
  %185 = load ptr, ptr %184, align 8, !tbaa !19
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.DAQPWorkspace, ptr %186, i32 0, i32 7
  store ptr %185, ptr %187, align 8, !tbaa !18
  %188 = load ptr, ptr %4, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.DAQPWorkspace, ptr %188, i32 0, i32 11
  store ptr null, ptr %189, align 8, !tbaa !19
  br label %190

190:                                              ; preds = %182, %177, %172
  store i32 0, ptr %6, align 4, !tbaa !13
  store i32 0, ptr %9, align 4, !tbaa !13
  store i32 0, ptr %11, align 4, !tbaa !13
  br label %191

191:                                              ; preds = %374, %190
  %192 = load i32, ptr %6, align 4, !tbaa !13
  %193 = load i32, ptr %12, align 4, !tbaa !13
  %194 = icmp slt i32 %192, %193
  br i1 %194, label %195, label %385

195:                                              ; preds = %191
  %196 = load ptr, ptr %5, align 8, !tbaa !5
  %197 = load i32, ptr %11, align 4, !tbaa !13
  %198 = add nsw i32 %197, 1
  store i32 %198, ptr %11, align 4, !tbaa !13
  %199 = sext i32 %197 to i64
  %200 = getelementptr inbounds double, ptr %196, i64 %199
  %201 = load double, ptr %200, align 8, !tbaa !14
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.DAQPWorkspace, ptr %202, i32 0, i32 28
  %204 = load ptr, ptr %203, align 8, !tbaa !22
  %205 = getelementptr inbounds %struct.DAQPSettings, ptr %204, i32 0, i32 8
  %206 = load double, ptr %205, align 8, !tbaa !23
  %207 = fadd double %201, %206
  %208 = load ptr, ptr %4, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.DAQPWorkspace, ptr %208, i32 0, i32 7
  %210 = load ptr, ptr %209, align 8, !tbaa !18
  %211 = load i32, ptr %9, align 4, !tbaa !13
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds double, ptr %210, i64 %212
  store double %207, ptr %213, align 8, !tbaa !14
  store i32 0, ptr %8, align 4, !tbaa !13
  %214 = load i32, ptr %6, align 4, !tbaa !13
  store i32 %214, ptr %10, align 4, !tbaa !13
  br label %215

215:                                              ; preds = %243, %195
  %216 = load i32, ptr %8, align 4, !tbaa !13
  %217 = load i32, ptr %6, align 4, !tbaa !13
  %218 = icmp slt i32 %216, %217
  br i1 %218, label %219, label %251

219:                                              ; preds = %215
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.DAQPWorkspace, ptr %220, i32 0, i32 7
  %222 = load ptr, ptr %221, align 8, !tbaa !18
  %223 = load i32, ptr %10, align 4, !tbaa !13
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %222, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !14
  %227 = load ptr, ptr %4, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.DAQPWorkspace, ptr %227, i32 0, i32 7
  %229 = load ptr, ptr %228, align 8, !tbaa !18
  %230 = load i32, ptr %10, align 4, !tbaa !13
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds double, ptr %229, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !14
  %234 = load ptr, ptr %4, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.DAQPWorkspace, ptr %234, i32 0, i32 7
  %236 = load ptr, ptr %235, align 8, !tbaa !18
  %237 = load i32, ptr %9, align 4, !tbaa !13
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds double, ptr %236, i64 %238
  %240 = load double, ptr %239, align 8, !tbaa !14
  %241 = fneg double %226
  %242 = call double @llvm.fmuladd.f64(double %241, double %233, double %240)
  store double %242, ptr %239, align 8, !tbaa !14
  br label %243

243:                                              ; preds = %219
  %244 = load i32, ptr %8, align 4, !tbaa !13
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %8, align 4, !tbaa !13
  %246 = load i32, ptr %12, align 4, !tbaa !13
  %247 = load i32, ptr %8, align 4, !tbaa !13
  %248 = sub nsw i32 %246, %247
  %249 = load i32, ptr %10, align 4, !tbaa !13
  %250 = add nsw i32 %249, %248
  store i32 %250, ptr %10, align 4, !tbaa !13
  br label %215, !llvm.loop !27

251:                                              ; preds = %215
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.DAQPWorkspace, ptr %252, i32 0, i32 7
  %254 = load ptr, ptr %253, align 8, !tbaa !18
  %255 = load i32, ptr %9, align 4, !tbaa !13
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds double, ptr %254, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !14
  %259 = fcmp ole double %258, 0.000000e+00
  br i1 %259, label %260, label %261

260:                                              ; preds = %251
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %15, align 4
  br label %506

261:                                              ; preds = %251
  %262 = load ptr, ptr %4, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.DAQPWorkspace, ptr %262, i32 0, i32 7
  %264 = load ptr, ptr %263, align 8, !tbaa !18
  %265 = load i32, ptr %9, align 4, !tbaa !13
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds double, ptr %264, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !14
  %269 = call double @sqrt(double noundef %268) #4
  %270 = load ptr, ptr %4, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.DAQPWorkspace, ptr %270, i32 0, i32 7
  %272 = load ptr, ptr %271, align 8, !tbaa !18
  %273 = load i32, ptr %9, align 4, !tbaa !13
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds double, ptr %272, i64 %274
  store double %269, ptr %275, align 8, !tbaa !14
  store i32 1, ptr %7, align 4, !tbaa !13
  br label %276

276:                                              ; preds = %356, %261
  %277 = load i32, ptr %7, align 4, !tbaa !13
  %278 = load i32, ptr %12, align 4, !tbaa !13
  %279 = load i32, ptr %6, align 4, !tbaa !13
  %280 = sub nsw i32 %278, %279
  %281 = icmp slt i32 %277, %280
  br i1 %281, label %282, label %359

282:                                              ; preds = %276
  %283 = load ptr, ptr %5, align 8, !tbaa !5
  %284 = load i32, ptr %11, align 4, !tbaa !13
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %11, align 4, !tbaa !13
  %286 = sext i32 %284 to i64
  %287 = getelementptr inbounds double, ptr %283, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !14
  %289 = load ptr, ptr %4, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.DAQPWorkspace, ptr %289, i32 0, i32 7
  %291 = load ptr, ptr %290, align 8, !tbaa !18
  %292 = load i32, ptr %9, align 4, !tbaa !13
  %293 = load i32, ptr %7, align 4, !tbaa !13
  %294 = add nsw i32 %292, %293
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds double, ptr %291, i64 %295
  store double %288, ptr %296, align 8, !tbaa !14
  store i32 0, ptr %8, align 4, !tbaa !13
  %297 = load i32, ptr %6, align 4, !tbaa !13
  store i32 %297, ptr %10, align 4, !tbaa !13
  br label %298

298:                                              ; preds = %330, %282
  %299 = load i32, ptr %8, align 4, !tbaa !13
  %300 = load i32, ptr %6, align 4, !tbaa !13
  %301 = icmp slt i32 %299, %300
  br i1 %301, label %302, label %338

302:                                              ; preds = %298
  %303 = load ptr, ptr %4, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.DAQPWorkspace, ptr %303, i32 0, i32 7
  %305 = load ptr, ptr %304, align 8, !tbaa !18
  %306 = load i32, ptr %10, align 4, !tbaa !13
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds double, ptr %305, i64 %307
  %309 = load double, ptr %308, align 8, !tbaa !14
  %310 = load ptr, ptr %4, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.DAQPWorkspace, ptr %310, i32 0, i32 7
  %312 = load ptr, ptr %311, align 8, !tbaa !18
  %313 = load i32, ptr %10, align 4, !tbaa !13
  %314 = load i32, ptr %7, align 4, !tbaa !13
  %315 = add nsw i32 %313, %314
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds double, ptr %312, i64 %316
  %318 = load double, ptr %317, align 8, !tbaa !14
  %319 = load ptr, ptr %4, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.DAQPWorkspace, ptr %319, i32 0, i32 7
  %321 = load ptr, ptr %320, align 8, !tbaa !18
  %322 = load i32, ptr %9, align 4, !tbaa !13
  %323 = load i32, ptr %7, align 4, !tbaa !13
  %324 = add nsw i32 %322, %323
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds double, ptr %321, i64 %325
  %327 = load double, ptr %326, align 8, !tbaa !14
  %328 = fneg double %309
  %329 = call double @llvm.fmuladd.f64(double %328, double %318, double %327)
  store double %329, ptr %326, align 8, !tbaa !14
  br label %330

330:                                              ; preds = %302
  %331 = load i32, ptr %8, align 4, !tbaa !13
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %8, align 4, !tbaa !13
  %333 = load i32, ptr %12, align 4, !tbaa !13
  %334 = load i32, ptr %8, align 4, !tbaa !13
  %335 = sub nsw i32 %333, %334
  %336 = load i32, ptr %10, align 4, !tbaa !13
  %337 = add nsw i32 %336, %335
  store i32 %337, ptr %10, align 4, !tbaa !13
  br label %298, !llvm.loop !28

338:                                              ; preds = %298
  %339 = load ptr, ptr %4, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.DAQPWorkspace, ptr %339, i32 0, i32 7
  %341 = load ptr, ptr %340, align 8, !tbaa !18
  %342 = load i32, ptr %9, align 4, !tbaa !13
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds double, ptr %341, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !14
  %346 = load ptr, ptr %4, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.DAQPWorkspace, ptr %346, i32 0, i32 7
  %348 = load ptr, ptr %347, align 8, !tbaa !18
  %349 = load i32, ptr %9, align 4, !tbaa !13
  %350 = load i32, ptr %7, align 4, !tbaa !13
  %351 = add nsw i32 %349, %350
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds double, ptr %348, i64 %352
  %354 = load double, ptr %353, align 8, !tbaa !14
  %355 = fdiv double %354, %345
  store double %355, ptr %353, align 8, !tbaa !14
  br label %356

356:                                              ; preds = %338
  %357 = load i32, ptr %7, align 4, !tbaa !13
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %7, align 4, !tbaa !13
  br label %276, !llvm.loop !29

359:                                              ; preds = %276
  %360 = load ptr, ptr %4, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.DAQPWorkspace, ptr %360, i32 0, i32 7
  %362 = load ptr, ptr %361, align 8, !tbaa !18
  %363 = load i32, ptr %9, align 4, !tbaa !13
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds double, ptr %362, i64 %364
  %366 = load double, ptr %365, align 8, !tbaa !14
  %367 = fdiv double 1.000000e+00, %366
  %368 = load ptr, ptr %4, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.DAQPWorkspace, ptr %368, i32 0, i32 7
  %370 = load ptr, ptr %369, align 8, !tbaa !18
  %371 = load i32, ptr %9, align 4, !tbaa !13
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %370, i64 %372
  store double %367, ptr %373, align 8, !tbaa !14
  br label %374

374:                                              ; preds = %359
  %375 = load i32, ptr %12, align 4, !tbaa !13
  %376 = load i32, ptr %6, align 4, !tbaa !13
  %377 = sub nsw i32 %375, %376
  %378 = load i32, ptr %9, align 4, !tbaa !13
  %379 = add nsw i32 %378, %377
  store i32 %379, ptr %9, align 4, !tbaa !13
  %380 = load i32, ptr %6, align 4, !tbaa !13
  %381 = add nsw i32 %380, 1
  store i32 %381, ptr %6, align 4, !tbaa !13
  %382 = load i32, ptr %6, align 4, !tbaa !13
  %383 = load i32, ptr %11, align 4, !tbaa !13
  %384 = add nsw i32 %383, %382
  store i32 %384, ptr %11, align 4, !tbaa !13
  br label %191, !llvm.loop !30

385:                                              ; preds = %191
  store i32 0, ptr %8, align 4, !tbaa !13
  store i32 0, ptr %9, align 4, !tbaa !13
  br label %386

386:                                              ; preds = %502, %385
  %387 = load i32, ptr %8, align 4, !tbaa !13
  %388 = load i32, ptr %12, align 4, !tbaa !13
  %389 = icmp slt i32 %387, %388
  br i1 %389, label %390, label %505

390:                                              ; preds = %386
  %391 = load i32, ptr %9, align 4, !tbaa !13
  store i32 %391, ptr %10, align 4, !tbaa !13
  %392 = load ptr, ptr %4, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.DAQPWorkspace, ptr %392, i32 0, i32 7
  %394 = load ptr, ptr %393, align 8, !tbaa !18
  %395 = load i32, ptr %10, align 4, !tbaa !13
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr %10, align 4, !tbaa !13
  %397 = sext i32 %395 to i64
  %398 = getelementptr inbounds double, ptr %394, i64 %397
  %399 = load double, ptr %398, align 8, !tbaa !14
  %400 = load ptr, ptr %4, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.DAQPWorkspace, ptr %400, i32 0, i32 7
  %402 = load ptr, ptr %401, align 8, !tbaa !18
  %403 = load i32, ptr %9, align 4, !tbaa !13
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds double, ptr %402, i64 %404
  store double %399, ptr %405, align 8, !tbaa !14
  %406 = load i32, ptr %8, align 4, !tbaa !13
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %7, align 4, !tbaa !13
  br label %408

408:                                              ; preds = %430, %390
  %409 = load i32, ptr %7, align 4, !tbaa !13
  %410 = load i32, ptr %12, align 4, !tbaa !13
  %411 = icmp slt i32 %409, %410
  br i1 %411, label %412, label %433

412:                                              ; preds = %408
  %413 = load ptr, ptr %4, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.DAQPWorkspace, ptr %413, i32 0, i32 7
  %415 = load ptr, ptr %414, align 8, !tbaa !18
  %416 = load i32, ptr %9, align 4, !tbaa !13
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds double, ptr %415, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !14
  %420 = fneg double %419
  %421 = load ptr, ptr %4, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.DAQPWorkspace, ptr %421, i32 0, i32 7
  %423 = load ptr, ptr %422, align 8, !tbaa !18
  %424 = load i32, ptr %10, align 4, !tbaa !13
  %425 = add nsw i32 %424, 1
  store i32 %425, ptr %10, align 4, !tbaa !13
  %426 = sext i32 %424 to i64
  %427 = getelementptr inbounds double, ptr %423, i64 %426
  %428 = load double, ptr %427, align 8, !tbaa !14
  %429 = fmul double %428, %420
  store double %429, ptr %427, align 8, !tbaa !14
  br label %430

430:                                              ; preds = %412
  %431 = load i32, ptr %7, align 4, !tbaa !13
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %7, align 4, !tbaa !13
  br label %408, !llvm.loop !31

433:                                              ; preds = %408
  %434 = load i32, ptr %9, align 4, !tbaa !13
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %9, align 4, !tbaa !13
  %436 = load i32, ptr %8, align 4, !tbaa !13
  %437 = add nsw i32 %436, 1
  store i32 %437, ptr %6, align 4, !tbaa !13
  br label %438

438:                                              ; preds = %496, %433
  %439 = load i32, ptr %6, align 4, !tbaa !13
  %440 = load i32, ptr %12, align 4, !tbaa !13
  %441 = icmp slt i32 %439, %440
  br i1 %441, label %442, label %501

442:                                              ; preds = %438
  %443 = load ptr, ptr %4, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.DAQPWorkspace, ptr %443, i32 0, i32 7
  %445 = load ptr, ptr %444, align 8, !tbaa !18
  %446 = load i32, ptr %10, align 4, !tbaa !13
  %447 = add nsw i32 %446, 1
  store i32 %447, ptr %10, align 4, !tbaa !13
  %448 = sext i32 %446 to i64
  %449 = getelementptr inbounds double, ptr %445, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !14
  %451 = load ptr, ptr %4, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.DAQPWorkspace, ptr %451, i32 0, i32 7
  %453 = load ptr, ptr %452, align 8, !tbaa !18
  %454 = load i32, ptr %9, align 4, !tbaa !13
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds double, ptr %453, i64 %455
  %457 = load double, ptr %456, align 8, !tbaa !14
  %458 = fmul double %457, %450
  store double %458, ptr %456, align 8, !tbaa !14
  store i32 1, ptr %7, align 4, !tbaa !13
  br label %459

459:                                              ; preds = %492, %442
  %460 = load i32, ptr %7, align 4, !tbaa !13
  %461 = load i32, ptr %12, align 4, !tbaa !13
  %462 = load i32, ptr %6, align 4, !tbaa !13
  %463 = sub nsw i32 %461, %462
  %464 = icmp slt i32 %460, %463
  br i1 %464, label %465, label %495

465:                                              ; preds = %459
  %466 = load ptr, ptr %4, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.DAQPWorkspace, ptr %466, i32 0, i32 7
  %468 = load ptr, ptr %467, align 8, !tbaa !18
  %469 = load i32, ptr %10, align 4, !tbaa !13
  %470 = add nsw i32 %469, 1
  store i32 %470, ptr %10, align 4, !tbaa !13
  %471 = sext i32 %469 to i64
  %472 = getelementptr inbounds double, ptr %468, i64 %471
  %473 = load double, ptr %472, align 8, !tbaa !14
  %474 = load ptr, ptr %4, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.DAQPWorkspace, ptr %474, i32 0, i32 7
  %476 = load ptr, ptr %475, align 8, !tbaa !18
  %477 = load i32, ptr %9, align 4, !tbaa !13
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds double, ptr %476, i64 %478
  %480 = load double, ptr %479, align 8, !tbaa !14
  %481 = load ptr, ptr %4, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.DAQPWorkspace, ptr %481, i32 0, i32 7
  %483 = load ptr, ptr %482, align 8, !tbaa !18
  %484 = load i32, ptr %9, align 4, !tbaa !13
  %485 = load i32, ptr %7, align 4, !tbaa !13
  %486 = add nsw i32 %484, %485
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds double, ptr %483, i64 %487
  %489 = load double, ptr %488, align 8, !tbaa !14
  %490 = fneg double %473
  %491 = call double @llvm.fmuladd.f64(double %490, double %480, double %489)
  store double %491, ptr %488, align 8, !tbaa !14
  br label %492

492:                                              ; preds = %465
  %493 = load i32, ptr %7, align 4, !tbaa !13
  %494 = add nsw i32 %493, 1
  store i32 %494, ptr %7, align 4, !tbaa !13
  br label %459, !llvm.loop !32

495:                                              ; preds = %459
  br label %496

496:                                              ; preds = %495
  %497 = load i32, ptr %6, align 4, !tbaa !13
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr %6, align 4, !tbaa !13
  %499 = load i32, ptr %9, align 4, !tbaa !13
  %500 = add nsw i32 %499, 1
  store i32 %500, ptr %9, align 4, !tbaa !13
  br label %438, !llvm.loop !33

501:                                              ; preds = %438
  br label %502

502:                                              ; preds = %501
  %503 = load i32, ptr %8, align 4, !tbaa !13
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %8, align 4, !tbaa !13
  br label %386, !llvm.loop !34

505:                                              ; preds = %386
  store i32 1, ptr %3, align 4
  store i32 1, ptr %15, align 4
  br label %506

506:                                              ; preds = %505, %260, %171
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  %507 = load i32, ptr %3, align 4
  ret i32 %507
}

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 8}
!10 = !{!"", !6, i64 0, !11, i64 8, !11, i64 12, !11, 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, !12, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !11, i64 168, !6, i64 176, !11, i64 184, !11, i64 188, !11, i64 192, !12, i64 200, !6, i64 208, !6, i64 216, !11, i64 224, !6, i64 232}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!12, !12, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!10, !6, i64 48}
!19 = !{!10, !6, i64 80}
!20 = !{!10, !6, i64 72}
!21 = !{!10, !11, i64 16}
!22 = !{!10, !6, i64 208}
!23 = !{!24, !12, i64 56}
!24 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !11, i64 40, !11, i64 44, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !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 nounwind memory(readwrite, inaccessiblemem: write) uwtable
define dso_local range(i32 -5, 2) i32 @update_Rinv(ptr nocapture noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 8
  %4 = load i32, ptr %3, align 8, !tbaa !5
  %.not213 = icmp sgt i32 %4, 0
  br i1 %.not213, label %.preheader207, label %.critedge198

.preheader207:                                    ; preds = %2, %.critedge
  %indvars.iv285 = phi i32 [ %indvars.iv.next286, %.critedge ], [ %4, %2 ]
  %.0165215 = phi i32 [ %16, %.critedge ], [ 1, %2 ]
  %.0177214 = phi i32 [ %14, %.critedge ], [ 0, %2 ]
  %5 = sub nsw i32 %4, %.0177214
  %6 = icmp sgt i32 %5, 1
  br i1 %6, label %.lr.ph.preheader, label %.critedge

.lr.ph.preheader:                                 ; preds = %.preheader207
  %7 = sext i32 %.0165215 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %11
  %indvars.iv = phi i64 [ %7, %.lr.ph.preheader ], [ %indvars.iv.next, %11 ]
  %.0173211 = phi i32 [ 1, %.lr.ph.preheader ], [ %12, %11 ]
  %8 = getelementptr inbounds double, ptr %1, i64 %indvars.iv
  %9 = load double, ptr %8, align 8, !tbaa !12
  %10 = tail call double @llvm.fabs.f64(double %9)
  %or.cond = fcmp ogt double %10, 0x3D719799812DEA11
  br i1 %or.cond, label %71, label %11

11:                                               ; preds = %.lr.ph
  %12 = add nuw nsw i32 %.0173211, 1
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i32 %12, %indvars.iv285
  br i1 %exitcond.not, label %.critedge.loopexit, label %.lr.ph, !llvm.loop !13

.critedge.loopexit:                               ; preds = %11
  %13 = trunc nsw i64 %indvars.iv.next to i32
  br label %.critedge

.critedge:                                        ; preds = %.critedge.loopexit, %.preheader207
  %.1166.lcssa = phi i32 [ %.0165215, %.preheader207 ], [ %13, %.critedge.loopexit ]
  %14 = add nuw nsw i32 %.0177214, 1
  %15 = add nuw nsw i32 %.0177214, 2
  %16 = add nsw i32 %15, %.1166.lcssa
  %indvars.iv.next286 = add i32 %indvars.iv285, -1
  %exitcond287.not = icmp eq i32 %14, %4
  br i1 %exitcond287.not, label %.critedge198, label %.preheader207, !llvm.loop !15

.critedge198:                                     ; preds = %.critedge, %2
  %17 = getelementptr inbounds i8, ptr %0, i64 48
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %.not195 = icmp eq ptr %18, null
  br i1 %.not195, label %21, label %19

19:                                               ; preds = %.critedge198
  %20 = getelementptr inbounds i8, ptr %0, i64 80
  store ptr %18, ptr %20, align 8, !tbaa !17
  store ptr null, ptr %17, align 8, !tbaa !16
  br label %21

21:                                               ; preds = %19, %.critedge198
  %22 = getelementptr inbounds i8, ptr %0, i64 72
  %23 = load ptr, ptr %22, align 8, !tbaa !18
  %.not196 = icmp eq ptr %23, null
  br i1 %.not196, label %.loopexit205, label %.preheader204

.preheader204:                                    ; preds = %21
  %24 = getelementptr inbounds i8, ptr %0, i64 16
  %25 = load i32, ptr %24, align 8, !tbaa !19
  %26 = icmp sgt i32 %25, 0
  br i1 %26, label %.lr.ph218, label %.loopexit205

.lr.ph218:                                        ; preds = %.preheader204
  %27 = getelementptr inbounds i8, ptr %0, i64 208
  %28 = getelementptr inbounds i8, ptr %0, i64 80
  %29 = add i32 %4, 1
  br label %30

30:                                               ; preds = %.lr.ph218, %39
  %indvars.iv288 = phi i64 [ 0, %.lr.ph218 ], [ %indvars.iv.next289, %39 ]
  %.2167217 = phi i32 [ 0, %.lr.ph218 ], [ %46, %39 ]
  %31 = sext i32 %.2167217 to i64
  %32 = getelementptr inbounds double, ptr %1, i64 %31
  %33 = load double, ptr %32, align 8, !tbaa !12
  %34 = load ptr, ptr %27, align 8, !tbaa !20
  %35 = getelementptr inbounds i8, ptr %34, i64 56
  %36 = load double, ptr %35, align 8, !tbaa !21
  %37 = fadd double %33, %36
  %38 = fcmp ugt double %37, 0.000000e+00
  br i1 %38, label %39, label %.loopexit201

39:                                               ; preds = %30
  %40 = tail call double @sqrt(double noundef %37) #4
  %41 = fdiv double 1.000000e+00, %40
  %42 = load ptr, ptr %28, align 8, !tbaa !17
  %43 = getelementptr inbounds double, ptr %42, i64 %indvars.iv288
  store double %41, ptr %43, align 8, !tbaa !12
  %44 = load ptr, ptr %22, align 8, !tbaa !18
  %45 = getelementptr inbounds double, ptr %44, i64 %indvars.iv288
  store double %40, ptr %45, align 8, !tbaa !12
  %indvars.iv.next289 = add nuw nsw i64 %indvars.iv288, 1
  %46 = add i32 %29, %.2167217
  %47 = load i32, ptr %24, align 8, !tbaa !19
  %48 = sext i32 %47 to i64
  %49 = icmp slt i64 %indvars.iv.next289, %48
  br i1 %49, label %30, label %.loopexit205.loopexit, !llvm.loop !23

.loopexit205.loopexit:                            ; preds = %39
  %50 = trunc nuw nsw i64 %indvars.iv.next289 to i32
  br label %.loopexit205

.loopexit205:                                     ; preds = %.loopexit205.loopexit, %.preheader204, %21
  %.2179 = phi i32 [ 0, %21 ], [ 0, %.preheader204 ], [ %50, %.loopexit205.loopexit ]
  %.3168 = phi i32 [ 0, %21 ], [ 0, %.preheader204 ], [ %46, %.loopexit205.loopexit ]
  %51 = icmp slt i32 %.2179, %4
  br i1 %51, label %.lr.ph223, label %.loopexit201

.lr.ph223:                                        ; preds = %.loopexit205
  %52 = getelementptr inbounds i8, ptr %0, i64 208
  %53 = getelementptr inbounds i8, ptr %0, i64 80
  %54 = add i32 %4, 1
  %55 = zext nneg i32 %.2179 to i64
  %wide.trip.count = zext i32 %4 to i64
  br label %56

56:                                               ; preds = %.lr.ph223, %65
  %indvars.iv291 = phi i64 [ %55, %.lr.ph223 ], [ %indvars.iv.next292, %65 ]
  %.4169222 = phi i32 [ %.3168, %.lr.ph223 ], [ %70, %65 ]
  %57 = sext i32 %.4169222 to i64
  %58 = getelementptr inbounds double, ptr %1, i64 %57
  %59 = load double, ptr %58, align 8, !tbaa !12
  %60 = load ptr, ptr %52, align 8, !tbaa !20
  %61 = getelementptr inbounds i8, ptr %60, i64 56
  %62 = load double, ptr %61, align 8, !tbaa !21
  %63 = fadd double %59, %62
  %64 = fcmp ugt double %63, 0.000000e+00
  br i1 %64, label %65, label %.loopexit201

65:                                               ; preds = %56
  %66 = tail call double @sqrt(double noundef %63) #4
  %67 = fdiv double 1.000000e+00, %66
  %68 = load ptr, ptr %53, align 8, !tbaa !17
  %69 = getelementptr inbounds double, ptr %68, i64 %indvars.iv291
  store double %67, ptr %69, align 8, !tbaa !12
  %indvars.iv.next292 = add nuw nsw i64 %indvars.iv291, 1
  %70 = add i32 %54, %.4169222
  %exitcond294.not = icmp eq i64 %indvars.iv.next292, %wide.trip.count
  br i1 %exitcond294.not, label %.loopexit201, label %56, !llvm.loop !24

71:                                               ; preds = %.lr.ph
  %72 = getelementptr inbounds i8, ptr %0, i64 80
  %73 = load ptr, ptr %72, align 8, !tbaa !17
  %.not194 = icmp eq ptr %73, null
  br i1 %.not194, label %.lr.ph251, label %74

74:                                               ; preds = %71
  %75 = getelementptr inbounds i8, ptr %0, i64 48
  %76 = load ptr, ptr %75, align 8, !tbaa !16
  %77 = icmp eq ptr %76, null
  br i1 %77, label %78, label %.lr.ph251

78:                                               ; preds = %74
  store ptr %73, ptr %75, align 8, !tbaa !16
  store ptr null, ptr %72, align 8, !tbaa !17
  br label %.lr.ph251

.lr.ph251:                                        ; preds = %71, %74, %78
  %79 = getelementptr inbounds i8, ptr %0, i64 208
  %80 = getelementptr inbounds i8, ptr %0, i64 48
  %81 = zext nneg i32 %4 to i64
  %smax = tail call i32 @llvm.smax.i32(i32 %4, i32 1)
  %wide.trip.count330 = zext nneg i32 %smax to i64
  %.pre = load ptr, ptr %80, align 8, !tbaa !16
  %scevgep374 = getelementptr i8, ptr %1, i64 -8
  %invariant.gep441 = getelementptr i8, ptr %1, i64 8
  br label %88

.lr.ph271:                                        ; preds = %._crit_edge241
  %82 = getelementptr inbounds i8, ptr %0, i64 48
  %83 = zext nneg i32 %4 to i64
  %smax354 = tail call i32 @llvm.smax.i32(i32 %4, i32 1)
  %wide.trip.count352 = zext nneg i32 %4 to i64
  %84 = shl nuw nsw i64 %81, 3
  %85 = add nsw i64 %84, -16
  %86 = add nsw i64 %81, -2
  %87 = add nsw i32 %4, -2
  br label %209

88:                                               ; preds = %.lr.ph251, %._crit_edge241
  %89 = phi ptr [ %.pre, %.lr.ph251 ], [ %137, %._crit_edge241 ]
  %indvars.iv327 = phi i64 [ 0, %.lr.ph251 ], [ %indvars.iv.next328, %._crit_edge241 ]
  %indvars.iv314 = phi i32 [ %4, %.lr.ph251 ], [ %indvars.iv.next315, %._crit_edge241 ]
  %.0160249 = phi i32 [ 0, %.lr.ph251 ], [ %207, %._crit_edge241 ]
  %.5247 = phi i32 [ 0, %.lr.ph251 ], [ %205, %._crit_edge241 ]
  %90 = zext i32 %indvars.iv314 to i64
  %91 = zext i32 %indvars.iv314 to i64
  %92 = add nsw i64 %91, -1
  %93 = sext i32 %.5247 to i64
  %94 = shl nsw i64 %93, 3
  %95 = zext i32 %indvars.iv314 to i64
  %96 = shl nuw nsw i64 %95, 3
  %97 = sext i32 %.0160249 to i64
  %98 = getelementptr inbounds double, ptr %1, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !12
  %100 = load ptr, ptr %79, align 8, !tbaa !20
  %101 = getelementptr inbounds i8, ptr %100, i64 56
  %102 = load double, ptr %101, align 8, !tbaa !21
  %103 = fadd double %99, %102
  %104 = sext i32 %.5247 to i64
  %105 = getelementptr inbounds double, ptr %89, i64 %104
  store double %103, ptr %105, align 8, !tbaa !12
  %.not272 = icmp eq i64 %indvars.iv327, 0
  br i1 %.not272, label %._crit_edge, label %.lr.ph229

.lr.ph229:                                        ; preds = %88
  %106 = trunc nuw nsw i64 %indvars.iv327 to i32
  %xtraiter = and i64 %indvars.iv327, 1
  %107 = icmp eq i64 %indvars.iv327, 1
  br i1 %107, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph229.new

.lr.ph229.new:                                    ; preds = %.lr.ph229
  %unroll_iter = and i64 %indvars.iv327, 9223372036854775806
  br label %108

108:                                              ; preds = %108, %.lr.ph229.new
  %indvars.iv295 = phi i64 [ 0, %.lr.ph229.new ], [ %indvars.iv.next296.1, %108 ]
  %109 = phi double [ %103, %.lr.ph229.new ], [ %123, %108 ]
  %.0162228 = phi i32 [ %106, %.lr.ph229.new ], [ %127, %108 ]
  %niter = phi i64 [ 0, %.lr.ph229.new ], [ %niter.next.1, %108 ]
  %110 = sext i32 %.0162228 to i64
  %111 = getelementptr inbounds double, ptr %89, i64 %110
  %112 = load double, ptr %111, align 8, !tbaa !12
  %113 = fneg double %112
  %114 = tail call double @llvm.fmuladd.f64(double %113, double %112, double %109)
  store double %114, ptr %105, align 8, !tbaa !12
  %115 = trunc i64 %indvars.iv295 to i32
  %116 = xor i32 %115, -1
  %117 = add i32 %4, %116
  %118 = add nsw i32 %117, %.0162228
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds double, ptr %89, i64 %119
  %121 = load double, ptr %120, align 8, !tbaa !12
  %122 = fneg double %121
  %123 = tail call double @llvm.fmuladd.f64(double %122, double %121, double %114)
  store double %123, ptr %105, align 8, !tbaa !12
  %indvars.iv.next296.1 = add nuw nsw i64 %indvars.iv295, 2
  %124 = trunc i64 %indvars.iv295 to i32
  %125 = xor i32 %124, -2
  %126 = add i32 %4, %125
  %127 = add nsw i32 %126, %118
  %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 %108, !llvm.loop !25

._crit_edge.loopexit.unr-lcssa:                   ; preds = %108, %.lr.ph229
  %.lcssa.ph = phi double [ poison, %.lr.ph229 ], [ %123, %108 ]
  %.unr = phi double [ %103, %.lr.ph229 ], [ %123, %108 ]
  %.0162228.unr = phi i32 [ %106, %.lr.ph229 ], [ %127, %108 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %._crit_edge.loopexit.unr-lcssa
  %128 = sext i32 %.0162228.unr to i64
  %129 = getelementptr inbounds double, ptr %89, i64 %128
  %130 = load double, ptr %129, align 8, !tbaa !12
  %131 = fneg double %130
  %132 = tail call double @llvm.fmuladd.f64(double %131, double %130, double %.unr)
  store double %132, ptr %105, align 8, !tbaa !12
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %88
  %133 = phi double [ %103, %88 ], [ %.lcssa.ph, %._crit_edge.loopexit.unr-lcssa ], [ %132, %._crit_edge.loopexit.epilog-lcssa ]
  %134 = fcmp ugt double %133, 0.000000e+00
  br i1 %134, label %135, label %.loopexit201

135:                                              ; preds = %._crit_edge
  %136 = tail call double @sqrt(double noundef %133) #4
  %137 = load ptr, ptr %80, align 8, !tbaa !16
  %138 = getelementptr inbounds double, ptr %137, i64 %104
  store double %136, ptr %138, align 8, !tbaa !12
  %139 = sub nsw i64 %81, %indvars.iv327
  %.1161236 = add i32 %.0160249, 1
  %140 = icmp sgt i64 %139, 1
  br i1 %140, label %.lr.ph240, label %._crit_edge241

.lr.ph240:                                        ; preds = %135
  %141 = sext i32 %.1161236 to i64
  %wide.trip.count325 = zext i32 %indvars.iv314 to i64
  br i1 %.not272, label %.lr.ph240.split.preheader, label %.lr.ph233.us.preheader

.lr.ph233.us.preheader:                           ; preds = %.lr.ph240
  %142 = trunc nuw nsw i64 %indvars.iv327 to i32
  %invariant.gep = getelementptr double, ptr %137, i64 %104
  %xtraiter423 = and i64 %indvars.iv327, 1
  %143 = icmp eq i64 %indvars.iv327, 1
  %unroll_iter427 = and i64 %indvars.iv327, 9223372036854775806
  %lcmp.mod425.not = icmp eq i64 %xtraiter423, 0
  br label %.lr.ph233.us

.lr.ph240.split.preheader:                        ; preds = %.lr.ph240
  %invariant.gep362 = getelementptr double, ptr %137, i64 %104
  %min.iters.check = icmp ult i64 %92, 2
  br i1 %min.iters.check, label %.lr.ph240.split.preheader414, label %vector.memcheck

.lr.ph240.split.preheader414:                     ; preds = %middle.block, %vector.memcheck, %.lr.ph240.split.preheader
  %indvars.iv320.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph240.split.preheader ], [ %ind.end, %middle.block ]
  %indvars.iv318.ph = phi i64 [ %141, %vector.memcheck ], [ %141, %.lr.ph240.split.preheader ], [ %ind.end376, %middle.block ]
  %144 = and i64 %90, 1
  %lcmp.mod430.not.not = icmp eq i64 %144, 0
  br i1 %lcmp.mod430.not.not, label %.lr.ph240.split.prol, label %.lr.ph240.split.prol.loopexit

.lr.ph240.split.prol:                             ; preds = %.lr.ph240.split.preheader414
  %145 = getelementptr inbounds double, ptr %1, i64 %indvars.iv318.ph
  %146 = load double, ptr %145, align 8, !tbaa !12
  %gep363.prol = getelementptr double, ptr %invariant.gep362, i64 %indvars.iv320.ph
  store double %146, ptr %gep363.prol, align 8, !tbaa !12
  %147 = load double, ptr %138, align 8, !tbaa !12
  %148 = fdiv double %146, %147
  store double %148, ptr %gep363.prol, align 8, !tbaa !12
  %indvars.iv.next321.prol = add nuw nsw i64 %indvars.iv320.ph, 1
  %indvars.iv.next319.prol = add nsw i64 %indvars.iv318.ph, 1
  br label %.lr.ph240.split.prol.loopexit

.lr.ph240.split.prol.loopexit:                    ; preds = %.lr.ph240.split.prol, %.lr.ph240.split.preheader414
  %indvars.iv.next319.lcssa417.unr = phi i64 [ poison, %.lr.ph240.split.preheader414 ], [ %indvars.iv.next319.prol, %.lr.ph240.split.prol ]
  %indvars.iv320.unr = phi i64 [ %indvars.iv320.ph, %.lr.ph240.split.preheader414 ], [ %indvars.iv.next321.prol, %.lr.ph240.split.prol ]
  %indvars.iv318.unr = phi i64 [ %indvars.iv318.ph, %.lr.ph240.split.preheader414 ], [ %indvars.iv.next319.prol, %.lr.ph240.split.prol ]
  %149 = add nsw i64 %90, -1
  %150 = icmp eq i64 %indvars.iv320.ph, %149
  br i1 %150, label %._crit_edge241.loopexit, label %.lr.ph240.split.preheader414.new

.lr.ph240.split.preheader414.new:                 ; preds = %.lr.ph240.split.prol.loopexit
  %invariant.gep443 = getelementptr i8, ptr %invariant.gep362, i64 8
  br label %.lr.ph240.split

vector.memcheck:                                  ; preds = %.lr.ph240.split.preheader
  %scevgep = getelementptr i8, ptr %137, i64 8
  %scevgep371 = getelementptr i8, ptr %scevgep, i64 %94
  %151 = getelementptr i8, ptr %137, i64 %94
  %scevgep372 = getelementptr i8, ptr %151, i64 %96
  %152 = shl nsw i64 %141, 3
  %scevgep373 = getelementptr i8, ptr %1, i64 %152
  %153 = getelementptr i8, ptr %scevgep374, i64 %152
  %scevgep375 = getelementptr i8, ptr %153, i64 %96
  %bound0 = icmp ult ptr %scevgep371, %scevgep375
  %bound1 = icmp ult ptr %scevgep373, %scevgep372
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph240.split.preheader414, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %92, -2
  %ind.end = or i64 %92, 1
  %ind.end376 = add nsw i64 %n.vec, %141
  %invariant.gep439 = getelementptr double, ptr %1, i64 %141
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %gep440 = getelementptr double, ptr %invariant.gep439, i64 %index
  %wide.load = load <2 x double>, ptr %gep440, align 8, !tbaa !12, !alias.scope !26
  %154 = getelementptr double, ptr %invariant.gep362, i64 %offset.idx
  store <2 x double> %wide.load, ptr %154, align 8, !tbaa !12, !alias.scope !29, !noalias !26
  %155 = load double, ptr %138, align 8, !tbaa !12, !alias.scope !31
  %broadcast.splatinsert = insertelement <2 x double> poison, double %155, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %156 = fdiv <2 x double> %wide.load, %broadcast.splat
  store <2 x double> %156, ptr %154, align 8, !tbaa !12, !alias.scope !29, !noalias !26
  %index.next = add nuw i64 %index, 2
  %157 = icmp eq i64 %index.next, %n.vec
  br i1 %157, label %middle.block, label %vector.body, !llvm.loop !33

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %92, %n.vec
  br i1 %cmp.n, label %._crit_edge241.loopexit, label %.lr.ph240.split.preheader414

.lr.ph233.us:                                     ; preds = %.lr.ph233.us.preheader, %._crit_edge234.us
  %indvars.iv309 = phi i64 [ 1, %.lr.ph233.us.preheader ], [ %indvars.iv.next310, %._crit_edge234.us ]
  %indvars.iv307 = phi i64 [ %141, %.lr.ph233.us.preheader ], [ %indvars.iv.next308, %._crit_edge234.us ]
  %158 = getelementptr inbounds double, ptr %1, i64 %indvars.iv307
  %159 = load double, ptr %158, align 8, !tbaa !12
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv309
  store double %159, ptr %gep, align 8, !tbaa !12
  %160 = getelementptr double, ptr %137, i64 %indvars.iv309
  br i1 %143, label %._crit_edge234.us.unr-lcssa, label %.lr.ph233.us.new

.lr.ph233.us.new:                                 ; preds = %.lr.ph233.us, %.lr.ph233.us.new
  %indvars.iv301 = phi i64 [ %indvars.iv.next302.1, %.lr.ph233.us.new ], [ 0, %.lr.ph233.us ]
  %161 = phi double [ %179, %.lr.ph233.us.new ], [ %159, %.lr.ph233.us ]
  %.1163231.us = phi i32 [ %183, %.lr.ph233.us.new ], [ %142, %.lr.ph233.us ]
  %niter428 = phi i64 [ %niter428.next.1, %.lr.ph233.us.new ], [ 0, %.lr.ph233.us ]
  %162 = sext i32 %.1163231.us to i64
  %163 = getelementptr inbounds double, ptr %137, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !12
  %165 = getelementptr double, ptr %160, i64 %162
  %166 = load double, ptr %165, align 8, !tbaa !12
  %167 = fneg double %164
  %168 = tail call double @llvm.fmuladd.f64(double %167, double %166, double %161)
  store double %168, ptr %gep, align 8, !tbaa !12
  %169 = trunc i64 %indvars.iv301 to i32
  %170 = xor i32 %169, -1
  %171 = add i32 %4, %170
  %172 = add nsw i32 %171, %.1163231.us
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds double, ptr %137, i64 %173
  %175 = load double, ptr %174, align 8, !tbaa !12
  %176 = getelementptr double, ptr %160, i64 %173
  %177 = load double, ptr %176, align 8, !tbaa !12
  %178 = fneg double %175
  %179 = tail call double @llvm.fmuladd.f64(double %178, double %177, double %168)
  store double %179, ptr %gep, align 8, !tbaa !12
  %indvars.iv.next302.1 = add nuw nsw i64 %indvars.iv301, 2
  %180 = trunc i64 %indvars.iv301 to i32
  %181 = xor i32 %180, -2
  %182 = add i32 %4, %181
  %183 = add nsw i32 %182, %172
  %niter428.next.1 = add i64 %niter428, 2
  %niter428.ncmp.1 = icmp eq i64 %niter428.next.1, %unroll_iter427
  br i1 %niter428.ncmp.1, label %._crit_edge234.us.unr-lcssa, label %.lr.ph233.us.new, !llvm.loop !36

._crit_edge234.us.unr-lcssa:                      ; preds = %.lr.ph233.us.new, %.lr.ph233.us
  %.lcssa416.ph = phi double [ poison, %.lr.ph233.us ], [ %179, %.lr.ph233.us.new ]
  %.unr424 = phi double [ %159, %.lr.ph233.us ], [ %179, %.lr.ph233.us.new ]
  %.1163231.us.unr = phi i32 [ %142, %.lr.ph233.us ], [ %183, %.lr.ph233.us.new ]
  br i1 %lcmp.mod425.not, label %._crit_edge234.us, label %._crit_edge234.us.epilog-lcssa

._crit_edge234.us.epilog-lcssa:                   ; preds = %._crit_edge234.us.unr-lcssa
  %184 = sext i32 %.1163231.us.unr to i64
  %185 = getelementptr inbounds double, ptr %137, i64 %184
  %186 = load double, ptr %185, align 8, !tbaa !12
  %187 = getelementptr double, ptr %160, i64 %184
  %188 = load double, ptr %187, align 8, !tbaa !12
  %189 = fneg double %186
  %190 = tail call double @llvm.fmuladd.f64(double %189, double %188, double %.unr424)
  store double %190, ptr %gep, align 8, !tbaa !12
  br label %._crit_edge234.us

._crit_edge234.us:                                ; preds = %._crit_edge234.us.unr-lcssa, %._crit_edge234.us.epilog-lcssa
  %.lcssa416 = phi double [ %.lcssa416.ph, %._crit_edge234.us.unr-lcssa ], [ %190, %._crit_edge234.us.epilog-lcssa ]
  %191 = load double, ptr %138, align 8, !tbaa !12
  %192 = fdiv double %.lcssa416, %191
  store double %192, ptr %gep, align 8, !tbaa !12
  %indvars.iv.next310 = add nuw nsw i64 %indvars.iv309, 1
  %indvars.iv.next308 = add nsw i64 %indvars.iv307, 1
  %exitcond317.not = icmp eq i64 %indvars.iv.next310, %wide.trip.count325
  br i1 %exitcond317.not, label %._crit_edge241.loopexit274, label %.lr.ph233.us, !llvm.loop !37

.lr.ph240.split:                                  ; preds = %.lr.ph240.split, %.lr.ph240.split.preheader414.new
  %indvars.iv320 = phi i64 [ %indvars.iv320.unr, %.lr.ph240.split.preheader414.new ], [ %indvars.iv.next321.1, %.lr.ph240.split ]
  %indvars.iv318 = phi i64 [ %indvars.iv318.unr, %.lr.ph240.split.preheader414.new ], [ %indvars.iv.next319.1, %.lr.ph240.split ]
  %193 = getelementptr inbounds double, ptr %1, i64 %indvars.iv318
  %194 = load double, ptr %193, align 8, !tbaa !12
  %gep363 = getelementptr double, ptr %invariant.gep362, i64 %indvars.iv320
  store double %194, ptr %gep363, align 8, !tbaa !12
  %195 = load double, ptr %138, align 8, !tbaa !12
  %196 = fdiv double %194, %195
  store double %196, ptr %gep363, align 8, !tbaa !12
  %gep442 = getelementptr double, ptr %invariant.gep441, i64 %indvars.iv318
  %197 = load double, ptr %gep442, align 8, !tbaa !12
  %gep444 = getelementptr double, ptr %invariant.gep443, i64 %indvars.iv320
  store double %197, ptr %gep444, align 8, !tbaa !12
  %198 = load double, ptr %138, align 8, !tbaa !12
  %199 = fdiv double %197, %198
  store double %199, ptr %gep444, align 8, !tbaa !12
  %indvars.iv.next321.1 = add nuw nsw i64 %indvars.iv320, 2
  %indvars.iv.next319.1 = add nsw i64 %indvars.iv318, 2
  %exitcond326.not.1 = icmp eq i64 %indvars.iv.next321.1, %wide.trip.count325
  br i1 %exitcond326.not.1, label %._crit_edge241.loopexit, label %.lr.ph240.split, !llvm.loop !38

._crit_edge241.loopexit:                          ; preds = %.lr.ph240.split.prol.loopexit, %.lr.ph240.split, %middle.block
  %indvars.iv.next319.lcssa = phi i64 [ %ind.end376, %middle.block ], [ %indvars.iv.next319.lcssa417.unr, %.lr.ph240.split.prol.loopexit ], [ %indvars.iv.next319.1, %.lr.ph240.split ]
  %200 = trunc nsw i64 %indvars.iv.next319.lcssa to i32
  br label %._crit_edge241

._crit_edge241.loopexit274:                       ; preds = %._crit_edge234.us
  %201 = trunc nsw i64 %indvars.iv.next308 to i32
  br label %._crit_edge241

._crit_edge241:                                   ; preds = %._crit_edge241.loopexit274, %._crit_edge241.loopexit, %135
  %.1161.lcssa = phi i32 [ %.1161236, %135 ], [ %200, %._crit_edge241.loopexit ], [ %201, %._crit_edge241.loopexit274 ]
  %202 = load double, ptr %138, align 8, !tbaa !12
  %203 = fdiv double 1.000000e+00, %202
  store double %203, ptr %138, align 8, !tbaa !12
  %204 = trunc nsw i64 %139 to i32
  %205 = add nsw i32 %.5247, %204
  %indvars.iv.next328 = add nuw nsw i64 %indvars.iv327, 1
  %206 = trunc nuw nsw i64 %indvars.iv.next328 to i32
  %207 = add nsw i32 %.1161.lcssa, %206
  %indvars.iv.next315 = add i32 %indvars.iv314, -1
  %exitcond331.not = icmp eq i64 %indvars.iv.next328, %wide.trip.count330
  br i1 %exitcond331.not, label %.lr.ph271, label %88, !llvm.loop !39

.loopexit.loopexit:                               ; preds = %._crit_edge262
  %208 = trunc nsw i64 %indvars.iv.next344 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %209, %.loopexit.loopexit, %.preheader
  %.7.lcssa = phi i32 [ %213, %.preheader ], [ %208, %.loopexit.loopexit ], [ %213, %209 ]
  %indvars.iv.next346 = add nuw nsw i64 %indvars.iv345, 1
  %exitcond355.not = icmp eq i32 %214, %smax354
  %indvar.next382 = add i64 %indvar381, 1
  br i1 %exitcond355.not, label %.loopexit201, label %209, !llvm.loop !40

209:                                              ; preds = %.lr.ph271, %.loopexit
  %indvar381 = phi i64 [ 0, %.lr.ph271 ], [ %indvar.next382, %.loopexit ]
  %indvars.iv345 = phi i64 [ 1, %.lr.ph271 ], [ %indvars.iv.next346, %.loopexit ]
  %.6270 = phi i32 [ 0, %.lr.ph271 ], [ %.7.lcssa, %.loopexit ]
  %.2172269 = phi i32 [ 0, %.lr.ph271 ], [ %214, %.loopexit ]
  %210 = trunc i64 %indvar381 to i32
  %211 = mul nsw i64 %indvar381, -8
  %212 = add i64 %85, %211
  %213 = add i32 %.6270, 1
  %214 = add nuw nsw i32 %.2172269, 1
  %215 = icmp slt i32 %214, %4
  br i1 %215, label %.lr.ph255, label %.loopexit

.lr.ph255:                                        ; preds = %209
  %216 = trunc i64 %indvar381 to i32
  %217 = sext i32 %.6270 to i64
  %218 = load ptr, ptr %82, align 8, !tbaa !16
  %219 = getelementptr inbounds double, ptr %218, i64 %217
  %220 = sext i32 %213 to i64
  %221 = sub i32 %216, %4
  %222 = and i32 %221, 1
  %lcmp.mod432.not.not = icmp eq i32 %222, 0
  br i1 %lcmp.mod432.not.not, label %.prol.loopexit.unr-lcssa, label %.prol.loopexit

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph255
  %223 = load double, ptr %219, align 8, !tbaa !12
  %224 = fneg double %223
  %indvars.iv.next333.prol = add nsw i64 %220, 1
  %225 = getelementptr inbounds double, ptr %218, i64 %220
  %226 = load double, ptr %225, align 8, !tbaa !12
  %227 = fmul double %226, %224
  store double %227, ptr %225, align 8, !tbaa !12
  %228 = add nuw nsw i32 %.2172269, 2
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph255
  %indvars.iv.next333.lcssa.unr = phi i64 [ poison, %.lr.ph255 ], [ %indvars.iv.next333.prol, %.prol.loopexit.unr-lcssa ]
  %indvars.iv332.unr = phi i64 [ %220, %.lr.ph255 ], [ %indvars.iv.next333.prol, %.prol.loopexit.unr-lcssa ]
  %.2175252.unr = phi i32 [ %214, %.lr.ph255 ], [ %228, %.prol.loopexit.unr-lcssa ]
  %229 = icmp eq i32 %87, %210
  br i1 %229, label %.preheader, label %.lr.ph255.new

.lr.ph255.new:                                    ; preds = %.prol.loopexit
  %invariant.gep445 = getelementptr i8, ptr %218, i64 8
  br label %239

.preheader:                                       ; preds = %239, %.prol.loopexit
  %indvars.iv.next333.lcssa = phi i64 [ %indvars.iv.next333.lcssa.unr, %.prol.loopexit ], [ %indvars.iv.next333.1, %239 ]
  br i1 %215, label %.lr.ph267, label %.loopexit

.lr.ph267:                                        ; preds = %.preheader
  %230 = trunc nsw i64 %indvars.iv.next333.lcssa to i32
  %231 = load ptr, ptr %82, align 8, !tbaa !16
  %232 = sext i32 %213 to i64
  %233 = shl nsw i64 %220, 3
  %234 = getelementptr i8, ptr %231, i64 %84
  %235 = getelementptr i8, ptr %234, i64 -8
  %236 = getelementptr i8, ptr %235, i64 %211
  %scevgep383 = getelementptr i8, ptr %236, i64 %233
  %237 = getelementptr i8, ptr %231, i64 %233
  %238 = getelementptr i8, ptr %237, i64 8
  br label %250

239:                                              ; preds = %239, %.lr.ph255.new
  %indvars.iv332 = phi i64 [ %indvars.iv332.unr, %.lr.ph255.new ], [ %indvars.iv.next333.1, %239 ]
  %.2175252 = phi i32 [ %.2175252.unr, %.lr.ph255.new ], [ %249, %239 ]
  %240 = load double, ptr %219, align 8, !tbaa !12
  %241 = fneg double %240
  %242 = getelementptr inbounds double, ptr %218, i64 %indvars.iv332
  %243 = load double, ptr %242, align 8, !tbaa !12
  %244 = fmul double %243, %241
  store double %244, ptr %242, align 8, !tbaa !12
  %245 = load double, ptr %219, align 8, !tbaa !12
  %246 = fneg double %245
  %indvars.iv.next333.1 = add nsw i64 %indvars.iv332, 2
  %gep446 = getelementptr double, ptr %invariant.gep445, i64 %indvars.iv332
  %247 = load double, ptr %gep446, align 8, !tbaa !12
  %248 = fmul double %247, %246
  store double %248, ptr %gep446, align 8, !tbaa !12
  %249 = add nuw nsw i32 %.2175252, 2
  %exitcond335.not.1 = icmp eq i32 %249, %4
  br i1 %exitcond335.not.1, label %.preheader, label %239, !llvm.loop !41

250:                                              ; preds = %.lr.ph267, %._crit_edge262
  %indvar = phi i64 [ 0, %.lr.ph267 ], [ %indvar.next, %._crit_edge262 ]
  %indvars.iv347 = phi i64 [ %indvars.iv345, %.lr.ph267 ], [ %indvars.iv.next348, %._crit_edge262 ]
  %indvars.iv343 = phi i64 [ %232, %.lr.ph267 ], [ %indvars.iv.next344, %._crit_edge262 ]
  %.3266 = phi i32 [ %230, %.lr.ph267 ], [ %.4.lcssa, %._crit_edge262 ]
  %251 = add i64 %indvar381, %indvar
  %252 = sub i64 %86, %251
  %253 = shl i64 %indvar, 3
  %scevgep380 = getelementptr i8, ptr %238, i64 %253
  %254 = shl i64 %indvar, 3
  %255 = sub i64 %212, %254
  %scevgep385 = getelementptr i8, ptr %231, i64 %255
  %256 = sext i32 %.3266 to i64
  %257 = getelementptr inbounds double, ptr %231, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !12
  %259 = getelementptr inbounds double, ptr %231, i64 %indvars.iv343
  %260 = load double, ptr %259, align 8, !tbaa !12
  %261 = fmul double %258, %260
  store double %261, ptr %259, align 8, !tbaa !12
  %262 = sub nsw i64 %83, %indvars.iv347
  %.4257 = add i32 %.3266, 1
  %263 = icmp sgt i64 %262, 1
  br i1 %263, label %.lr.ph261.preheader, label %._crit_edge262

.lr.ph261.preheader:                              ; preds = %250
  %264 = sext i32 %.4257 to i64
  %invariant.gep364 = getelementptr double, ptr %231, i64 %indvars.iv343
  %min.iters.check392 = icmp ult i64 %252, 4
  br i1 %min.iters.check392, label %.lr.ph261.preheader412, label %vector.memcheck379

vector.memcheck379:                               ; preds = %.lr.ph261.preheader
  %265 = shl nsw i64 %264, 3
  %scevgep384 = getelementptr i8, ptr %231, i64 %265
  %scevgep386 = getelementptr i8, ptr %scevgep385, i64 %265
  %bound0387 = icmp ult ptr %scevgep380, %scevgep386
  %bound1388 = icmp ult ptr %scevgep384, %scevgep383
  %found.conflict389 = and i1 %bound0387, %bound1388
  br i1 %found.conflict389, label %.lr.ph261.preheader412, label %vector.ph393

vector.ph393:                                     ; preds = %vector.memcheck379
  %n.vec395 = and i64 %252, -4
  %ind.end396 = or disjoint i64 %n.vec395, 1
  %ind.end398 = add i64 %n.vec395, %264
  %broadcast.splatinsert408 = insertelement <2 x double> poison, double %261, i64 0
  %broadcast.splat409 = shufflevector <2 x double> %broadcast.splatinsert408, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep447 = getelementptr double, ptr %231, i64 %264
  br label %vector.body400

vector.body400:                                   ; preds = %vector.body400, %vector.ph393
  %index401 = phi i64 [ 0, %vector.ph393 ], [ %index.next410, %vector.body400 ]
  %offset.idx402 = or disjoint i64 %index401, 1
  %gep448 = getelementptr double, ptr %invariant.gep447, i64 %index401
  %266 = getelementptr inbounds i8, ptr %gep448, i64 16
  %wide.load404 = load <2 x double>, ptr %gep448, align 8, !tbaa !12, !alias.scope !42
  %wide.load405 = load <2 x double>, ptr %266, align 8, !tbaa !12, !alias.scope !42
  %267 = getelementptr double, ptr %invariant.gep364, i64 %offset.idx402
  %268 = getelementptr i8, ptr %267, i64 16
  %wide.load406 = load <2 x double>, ptr %267, align 8, !tbaa !12, !alias.scope !45, !noalias !42
  %wide.load407 = load <2 x double>, ptr %268, align 8, !tbaa !12, !alias.scope !45, !noalias !42
  %269 = fneg <2 x double> %wide.load404
  %270 = fneg <2 x double> %wide.load405
  %271 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %269, <2 x double> %broadcast.splat409, <2 x double> %wide.load406)
  %272 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %270, <2 x double> %broadcast.splat409, <2 x double> %wide.load407)
  store <2 x double> %271, ptr %267, align 8, !tbaa !12, !alias.scope !45, !noalias !42
  store <2 x double> %272, ptr %268, align 8, !tbaa !12, !alias.scope !45, !noalias !42
  %index.next410 = add nuw i64 %index401, 4
  %273 = icmp eq i64 %index.next410, %n.vec395
  br i1 %273, label %middle.block390, label %vector.body400, !llvm.loop !47

middle.block390:                                  ; preds = %vector.body400
  %cmp.n411 = icmp eq i64 %252, %n.vec395
  br i1 %cmp.n411, label %._crit_edge262.loopexit, label %.lr.ph261.preheader412

.lr.ph261.preheader412:                           ; preds = %middle.block390, %vector.memcheck379, %.lr.ph261.preheader
  %indvars.iv338.ph = phi i64 [ 1, %vector.memcheck379 ], [ 1, %.lr.ph261.preheader ], [ %ind.end396, %middle.block390 ]
  %indvars.iv336.ph = phi i64 [ %264, %vector.memcheck379 ], [ %264, %.lr.ph261.preheader ], [ %ind.end398, %middle.block390 ]
  br label %.lr.ph261

.lr.ph261:                                        ; preds = %.lr.ph261.preheader412, %.lr.ph261
  %indvars.iv338 = phi i64 [ %indvars.iv.next339, %.lr.ph261 ], [ %indvars.iv338.ph, %.lr.ph261.preheader412 ]
  %indvars.iv336 = phi i64 [ %indvars.iv.next337, %.lr.ph261 ], [ %indvars.iv336.ph, %.lr.ph261.preheader412 ]
  %274 = getelementptr inbounds double, ptr %231, i64 %indvars.iv336
  %275 = load double, ptr %274, align 8, !tbaa !12
  %gep365 = getelementptr double, ptr %invariant.gep364, i64 %indvars.iv338
  %276 = load double, ptr %gep365, align 8, !tbaa !12
  %277 = fneg double %275
  %278 = tail call double @llvm.fmuladd.f64(double %277, double %261, double %276)
  store double %278, ptr %gep365, align 8, !tbaa !12
  %indvars.iv.next339 = add nuw nsw i64 %indvars.iv338, 1
  %indvars.iv.next337 = add nsw i64 %indvars.iv336, 1
  %279 = icmp slt i64 %indvars.iv.next339, %262
  br i1 %279, label %.lr.ph261, label %._crit_edge262.loopexit, !llvm.loop !48

._crit_edge262.loopexit:                          ; preds = %.lr.ph261, %middle.block390
  %indvars.iv.next337.lcssa = phi i64 [ %ind.end398, %middle.block390 ], [ %indvars.iv.next337, %.lr.ph261 ]
  %280 = trunc nsw i64 %indvars.iv.next337.lcssa to i32
  br label %._crit_edge262

._crit_edge262:                                   ; preds = %._crit_edge262.loopexit, %250
  %.4.lcssa = phi i32 [ %.4257, %250 ], [ %280, %._crit_edge262.loopexit ]
  %indvars.iv.next348 = add nuw nsw i64 %indvars.iv347, 1
  %indvars.iv.next344 = add nsw i64 %indvars.iv343, 1
  %exitcond353.not = icmp eq i64 %indvars.iv.next348, %wide.trip.count352
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond353.not, label %.loopexit.loopexit, label %250, !llvm.loop !49

.loopexit201:                                     ; preds = %30, %65, %56, %._crit_edge, %.loopexit, %.loopexit205
  %.1159 = phi i32 [ 1, %.loopexit205 ], [ 1, %.loopexit ], [ -5, %._crit_edge ], [ 1, %65 ], [ -5, %56 ], [ -5, %30 ]
  ret i32 %.1159
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #3

attributes #0 = { nofree nounwind memory(readwrite, inaccessiblemem: write) 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 nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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, !10, i64 8}
!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 = !{!11, !11, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!6, !7, i64 48}
!17 = !{!6, !7, i64 80}
!18 = !{!6, !7, i64 72}
!19 = !{!6, !10, i64 16}
!20 = !{!6, !7, i64 208}
!21 = !{!22, !11, i64 56}
!22 = !{!"", !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}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = !{!32}
!32 = distinct !{!32, !28}
!33 = distinct !{!33, !14, !34, !35}
!34 = !{!"llvm.loop.isvectorized", i32 1}
!35 = !{!"llvm.loop.unroll.runtime.disable"}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14, !34}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = !{!43}
!43 = distinct !{!43, !44}
!44 = distinct !{!44, !"LVerDomain"}
!45 = !{!46}
!46 = distinct !{!46, !44}
!47 = distinct !{!47, !14, !34, !35}
!48 = distinct !{!48, !14, !34}
!49 = distinct !{!49, !14}


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