; LLVM IR from opensim-org/opensim-core :: OpenSim/Common/Lmdif.ll (Z5qrfaciiPdiiPiiS_S_S_)

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

@_ZZ5qrfaciiPdiiPiiS_S_S_E4zero = external hidden global double, align 8
@_ZZ5qrfaciiPdiiPiiS_S_S_E3one = external hidden global double, align 8
@_ZZ5qrfaciiPdiiPiiS_S_S_E3p05 = external hidden global double, align 8

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_Z5enormiPd(i32 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z5qrfaciiPdiiPiiS_S_S_(i32 noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) #2 {
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  store i32 %0, ptr %11, align 4, !tbaa !5
  store i32 %1, ptr %12, align 4, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !9
  store i32 %3, ptr %14, align 4, !tbaa !5
  store i32 %4, ptr %15, align 4, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !9
  store i32 %6, ptr %17, align 4, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !9
  store ptr %8, ptr %19, align 8, !tbaa !9
  store ptr %9, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  store i32 0, ptr %22, align 4, !tbaa !5
  store i32 0, ptr %24, align 4, !tbaa !5
  br label %32

32:                                               ; preds = %77, %10
  %33 = load i32, ptr %24, align 4, !tbaa !5
  %34 = load i32, ptr %12, align 4, !tbaa !5
  %35 = icmp slt i32 %33, %34
  br i1 %35, label %36, label %80

36:                                               ; preds = %32
  %37 = load i32, ptr %11, align 4, !tbaa !5
  %38 = load ptr, ptr %13, align 8, !tbaa !9
  %39 = load i32, ptr %22, align 4, !tbaa !5
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds double, ptr %38, i64 %40
  %42 = call noundef double @_Z5enormiPd(i32 noundef %37, ptr noundef %41)
  %43 = load ptr, ptr %19, align 8, !tbaa !9
  %44 = load i32, ptr %24, align 4, !tbaa !5
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds double, ptr %43, i64 %45
  store double %42, ptr %46, align 8, !tbaa !11
  %47 = load ptr, ptr %19, align 8, !tbaa !9
  %48 = load i32, ptr %24, align 4, !tbaa !5
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds double, ptr %47, i64 %49
  %51 = load double, ptr %50, align 8, !tbaa !11
  %52 = load ptr, ptr %18, align 8, !tbaa !9
  %53 = load i32, ptr %24, align 4, !tbaa !5
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds double, ptr %52, i64 %54
  store double %51, ptr %55, align 8, !tbaa !11
  %56 = load ptr, ptr %18, align 8, !tbaa !9
  %57 = load i32, ptr %24, align 4, !tbaa !5
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds double, ptr %56, i64 %58
  %60 = load double, ptr %59, align 8, !tbaa !11
  %61 = load ptr, ptr %20, align 8, !tbaa !9
  %62 = load i32, ptr %24, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds double, ptr %61, i64 %63
  store double %60, ptr %64, align 8, !tbaa !11
  %65 = load i32, ptr %15, align 4, !tbaa !5
  %66 = icmp ne i32 %65, 0
  br i1 %66, label %67, label %73

67:                                               ; preds = %36
  %68 = load i32, ptr %24, align 4, !tbaa !5
  %69 = load ptr, ptr %16, align 8, !tbaa !9
  %70 = load i32, ptr %24, align 4, !tbaa !5
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds i32, ptr %69, i64 %71
  store i32 %68, ptr %72, align 4, !tbaa !5
  br label %73

73:                                               ; preds = %67, %36
  %74 = load i32, ptr %11, align 4, !tbaa !5
  %75 = load i32, ptr %22, align 4, !tbaa !5
  %76 = add nsw i32 %75, %74
  store i32 %76, ptr %22, align 4, !tbaa !5
  br label %77

77:                                               ; preds = %73
  %78 = load i32, ptr %24, align 4, !tbaa !5
  %79 = add nsw i32 %78, 1
  store i32 %79, ptr %24, align 4, !tbaa !5
  br label %32, !llvm.loop !13

80:                                               ; preds = %32
  %81 = load i32, ptr %11, align 4, !tbaa !5
  %82 = load i32, ptr %12, align 4, !tbaa !5
  %83 = call noundef i32 @_Z4min0ii(i32 noundef %81, i32 noundef %82)
  store i32 %83, ptr %28, align 4, !tbaa !5
  store i32 0, ptr %24, align 4, !tbaa !5
  br label %84

84:                                               ; preds = %451, %80
  %85 = load i32, ptr %24, align 4, !tbaa !5
  %86 = load i32, ptr %28, align 4, !tbaa !5
  %87 = icmp slt i32 %85, %86
  br i1 %87, label %88, label %454

88:                                               ; preds = %84
  %89 = load i32, ptr %15, align 4, !tbaa !5
  %90 = icmp eq i32 %89, 0
  br i1 %90, label %91, label %92

91:                                               ; preds = %88
  br label %198

92:                                               ; preds = %88
  %93 = load i32, ptr %24, align 4, !tbaa !5
  store i32 %93, ptr %27, align 4, !tbaa !5
  %94 = load i32, ptr %24, align 4, !tbaa !5
  store i32 %94, ptr %26, align 4, !tbaa !5
  br label %95

95:                                               ; preds = %114, %92
  %96 = load i32, ptr %26, align 4, !tbaa !5
  %97 = load i32, ptr %12, align 4, !tbaa !5
  %98 = icmp slt i32 %96, %97
  br i1 %98, label %99, label %117

99:                                               ; preds = %95
  %100 = load ptr, ptr %18, align 8, !tbaa !9
  %101 = load i32, ptr %26, align 4, !tbaa !5
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds double, ptr %100, i64 %102
  %104 = load double, ptr %103, align 8, !tbaa !11
  %105 = load ptr, ptr %18, align 8, !tbaa !9
  %106 = load i32, ptr %27, align 4, !tbaa !5
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds double, ptr %105, i64 %107
  %109 = load double, ptr %108, align 8, !tbaa !11
  %110 = fcmp ogt double %104, %109
  br i1 %110, label %111, label %113

111:                                              ; preds = %99
  %112 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %112, ptr %27, align 4, !tbaa !5
  br label %113

113:                                              ; preds = %111, %99
  br label %114

114:                                              ; preds = %113
  %115 = load i32, ptr %26, align 4, !tbaa !5
  %116 = add nsw i32 %115, 1
  store i32 %116, ptr %26, align 4, !tbaa !5
  br label %95, !llvm.loop !15

117:                                              ; preds = %95
  %118 = load i32, ptr %27, align 4, !tbaa !5
  %119 = load i32, ptr %24, align 4, !tbaa !5
  %120 = icmp eq i32 %118, %119
  br i1 %120, label %121, label %122

121:                                              ; preds = %117
  br label %198

122:                                              ; preds = %117
  %123 = load i32, ptr %11, align 4, !tbaa !5
  %124 = load i32, ptr %24, align 4, !tbaa !5
  %125 = mul nsw i32 %123, %124
  store i32 %125, ptr %22, align 4, !tbaa !5
  %126 = load i32, ptr %11, align 4, !tbaa !5
  %127 = load i32, ptr %27, align 4, !tbaa !5
  %128 = mul nsw i32 %126, %127
  store i32 %128, ptr %23, align 4, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %129

129:                                              ; preds = %157, %122
  %130 = load i32, ptr %21, align 4, !tbaa !5
  %131 = load i32, ptr %11, align 4, !tbaa !5
  %132 = icmp slt i32 %130, %131
  br i1 %132, label %133, label %160

133:                                              ; preds = %129
  %134 = load ptr, ptr %13, align 8, !tbaa !9
  %135 = load i32, ptr %22, align 4, !tbaa !5
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds double, ptr %134, i64 %136
  %138 = load double, ptr %137, align 8, !tbaa !11
  store double %138, ptr %31, align 8, !tbaa !11
  %139 = load ptr, ptr %13, align 8, !tbaa !9
  %140 = load i32, ptr %23, align 4, !tbaa !5
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds double, ptr %139, i64 %141
  %143 = load double, ptr %142, align 8, !tbaa !11
  %144 = load ptr, ptr %13, align 8, !tbaa !9
  %145 = load i32, ptr %22, align 4, !tbaa !5
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds double, ptr %144, i64 %146
  store double %143, ptr %147, align 8, !tbaa !11
  %148 = load double, ptr %31, align 8, !tbaa !11
  %149 = load ptr, ptr %13, align 8, !tbaa !9
  %150 = load i32, ptr %23, align 4, !tbaa !5
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds double, ptr %149, i64 %151
  store double %148, ptr %152, align 8, !tbaa !11
  %153 = load i32, ptr %22, align 4, !tbaa !5
  %154 = add nsw i32 %153, 1
  store i32 %154, ptr %22, align 4, !tbaa !5
  %155 = load i32, ptr %23, align 4, !tbaa !5
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %23, align 4, !tbaa !5
  br label %157

157:                                              ; preds = %133
  %158 = load i32, ptr %21, align 4, !tbaa !5
  %159 = add nsw i32 %158, 1
  store i32 %159, ptr %21, align 4, !tbaa !5
  br label %129, !llvm.loop !16

160:                                              ; preds = %129
  %161 = load ptr, ptr %18, align 8, !tbaa !9
  %162 = load i32, ptr %24, align 4, !tbaa !5
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds double, ptr %161, i64 %163
  %165 = load double, ptr %164, align 8, !tbaa !11
  %166 = load ptr, ptr %18, align 8, !tbaa !9
  %167 = load i32, ptr %27, align 4, !tbaa !5
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds double, ptr %166, i64 %168
  store double %165, ptr %169, align 8, !tbaa !11
  %170 = load ptr, ptr %20, align 8, !tbaa !9
  %171 = load i32, ptr %24, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds double, ptr %170, i64 %172
  %174 = load double, ptr %173, align 8, !tbaa !11
  %175 = load ptr, ptr %20, align 8, !tbaa !9
  %176 = load i32, ptr %27, align 4, !tbaa !5
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %175, i64 %177
  store double %174, ptr %178, align 8, !tbaa !11
  %179 = load ptr, ptr %16, align 8, !tbaa !9
  %180 = load i32, ptr %24, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %179, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !5
  store i32 %183, ptr %26, align 4, !tbaa !5
  %184 = load ptr, ptr %16, align 8, !tbaa !9
  %185 = load i32, ptr %27, align 4, !tbaa !5
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i32, ptr %184, i64 %186
  %188 = load i32, ptr %187, align 4, !tbaa !5
  %189 = load ptr, ptr %16, align 8, !tbaa !9
  %190 = load i32, ptr %24, align 4, !tbaa !5
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %189, i64 %191
  store i32 %188, ptr %192, align 4, !tbaa !5
  %193 = load i32, ptr %26, align 4, !tbaa !5
  %194 = load ptr, ptr %16, align 8, !tbaa !9
  %195 = load i32, ptr %27, align 4, !tbaa !5
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i32, ptr %194, i64 %196
  store i32 %193, ptr %197, align 4, !tbaa !5
  br label %198

198:                                              ; preds = %160, %121, %91
  %199 = load i32, ptr %24, align 4, !tbaa !5
  %200 = load i32, ptr %11, align 4, !tbaa !5
  %201 = load i32, ptr %24, align 4, !tbaa !5
  %202 = mul nsw i32 %200, %201
  %203 = add nsw i32 %199, %202
  store i32 %203, ptr %23, align 4, !tbaa !5
  %204 = load i32, ptr %11, align 4, !tbaa !5
  %205 = load i32, ptr %24, align 4, !tbaa !5
  %206 = sub nsw i32 %204, %205
  %207 = load ptr, ptr %13, align 8, !tbaa !9
  %208 = load i32, ptr %23, align 4, !tbaa !5
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds double, ptr %207, i64 %209
  %211 = call noundef double @_Z5enormiPd(i32 noundef %206, ptr noundef %210)
  store double %211, ptr %29, align 8, !tbaa !11
  %212 = load double, ptr %29, align 8, !tbaa !11
  %213 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !11
  %214 = fcmp oeq double %212, %213
  br i1 %214, label %215, label %216

215:                                              ; preds = %198
  br label %444

216:                                              ; preds = %198
  %217 = load ptr, ptr %13, align 8, !tbaa !9
  %218 = load i32, ptr %23, align 4, !tbaa !5
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds double, ptr %217, i64 %219
  %221 = load double, ptr %220, align 8, !tbaa !11
  %222 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !11
  %223 = fcmp olt double %221, %222
  br i1 %223, label %224, label %227

224:                                              ; preds = %216
  %225 = load double, ptr %29, align 8, !tbaa !11
  %226 = fneg double %225
  store double %226, ptr %29, align 8, !tbaa !11
  br label %227

227:                                              ; preds = %224, %216
  %228 = load i32, ptr %23, align 4, !tbaa !5
  store i32 %228, ptr %22, align 4, !tbaa !5
  %229 = load i32, ptr %24, align 4, !tbaa !5
  store i32 %229, ptr %21, align 4, !tbaa !5
  br label %230

230:                                              ; preds = %244, %227
  %231 = load i32, ptr %21, align 4, !tbaa !5
  %232 = load i32, ptr %11, align 4, !tbaa !5
  %233 = icmp slt i32 %231, %232
  br i1 %233, label %234, label %247

234:                                              ; preds = %230
  %235 = load double, ptr %29, align 8, !tbaa !11
  %236 = load ptr, ptr %13, align 8, !tbaa !9
  %237 = load i32, ptr %22, align 4, !tbaa !5
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds double, ptr %236, i64 %238
  %240 = load double, ptr %239, align 8, !tbaa !11
  %241 = fdiv double %240, %235
  store double %241, ptr %239, align 8, !tbaa !11
  %242 = load i32, ptr %22, align 4, !tbaa !5
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %22, align 4, !tbaa !5
  br label %244

244:                                              ; preds = %234
  %245 = load i32, ptr %21, align 4, !tbaa !5
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr %21, align 4, !tbaa !5
  br label %230, !llvm.loop !17

247:                                              ; preds = %230
  %248 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E3one, align 8, !tbaa !11
  %249 = load ptr, ptr %13, align 8, !tbaa !9
  %250 = load i32, ptr %23, align 4, !tbaa !5
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds double, ptr %249, i64 %251
  %253 = load double, ptr %252, align 8, !tbaa !11
  %254 = fadd double %253, %248
  store double %254, ptr %252, align 8, !tbaa !11
  %255 = load i32, ptr %24, align 4, !tbaa !5
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %25, align 4, !tbaa !5
  %257 = load i32, ptr %25, align 4, !tbaa !5
  %258 = load i32, ptr %12, align 4, !tbaa !5
  %259 = icmp slt i32 %257, %258
  br i1 %259, label %260, label %443

260:                                              ; preds = %247
  %261 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %261, ptr %26, align 4, !tbaa !5
  br label %262

262:                                              ; preds = %439, %260
  %263 = load i32, ptr %26, align 4, !tbaa !5
  %264 = load i32, ptr %12, align 4, !tbaa !5
  %265 = icmp slt i32 %263, %264
  br i1 %265, label %266, label %442

266:                                              ; preds = %262
  %267 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !11
  store double %267, ptr %30, align 8, !tbaa !11
  %268 = load i32, ptr %24, align 4, !tbaa !5
  %269 = load i32, ptr %11, align 4, !tbaa !5
  %270 = load i32, ptr %26, align 4, !tbaa !5
  %271 = mul nsw i32 %269, %270
  %272 = add nsw i32 %268, %271
  store i32 %272, ptr %22, align 4, !tbaa !5
  %273 = load i32, ptr %24, align 4, !tbaa !5
  %274 = load i32, ptr %11, align 4, !tbaa !5
  %275 = load i32, ptr %24, align 4, !tbaa !5
  %276 = mul nsw i32 %274, %275
  %277 = add nsw i32 %273, %276
  store i32 %277, ptr %23, align 4, !tbaa !5
  %278 = load i32, ptr %24, align 4, !tbaa !5
  store i32 %278, ptr %21, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %300, %266
  %280 = load i32, ptr %21, align 4, !tbaa !5
  %281 = load i32, ptr %11, align 4, !tbaa !5
  %282 = icmp slt i32 %280, %281
  br i1 %282, label %283, label %303

283:                                              ; preds = %279
  %284 = load ptr, ptr %13, align 8, !tbaa !9
  %285 = load i32, ptr %23, align 4, !tbaa !5
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds double, ptr %284, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !11
  %289 = load ptr, ptr %13, align 8, !tbaa !9
  %290 = load i32, ptr %22, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds double, ptr %289, i64 %291
  %293 = load double, ptr %292, align 8, !tbaa !11
  %294 = load double, ptr %30, align 8, !tbaa !11
  %295 = call double @llvm.fmuladd.f64(double %288, double %293, double %294)
  store double %295, ptr %30, align 8, !tbaa !11
  %296 = load i32, ptr %22, align 4, !tbaa !5
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %22, align 4, !tbaa !5
  %298 = load i32, ptr %23, align 4, !tbaa !5
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %23, align 4, !tbaa !5
  br label %300

300:                                              ; preds = %283
  %301 = load i32, ptr %21, align 4, !tbaa !5
  %302 = add nsw i32 %301, 1
  store i32 %302, ptr %21, align 4, !tbaa !5
  br label %279, !llvm.loop !18

303:                                              ; preds = %279
  %304 = load double, ptr %30, align 8, !tbaa !11
  %305 = load ptr, ptr %13, align 8, !tbaa !9
  %306 = load i32, ptr %24, align 4, !tbaa !5
  %307 = load i32, ptr %11, align 4, !tbaa !5
  %308 = load i32, ptr %24, align 4, !tbaa !5
  %309 = mul nsw i32 %307, %308
  %310 = add nsw i32 %306, %309
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds double, ptr %305, i64 %311
  %313 = load double, ptr %312, align 8, !tbaa !11
  %314 = fdiv double %304, %313
  store double %314, ptr %31, align 8, !tbaa !11
  %315 = load i32, ptr %24, align 4, !tbaa !5
  %316 = load i32, ptr %11, align 4, !tbaa !5
  %317 = load i32, ptr %26, align 4, !tbaa !5
  %318 = mul nsw i32 %316, %317
  %319 = add nsw i32 %315, %318
  store i32 %319, ptr %22, align 4, !tbaa !5
  %320 = load i32, ptr %24, align 4, !tbaa !5
  %321 = load i32, ptr %11, align 4, !tbaa !5
  %322 = load i32, ptr %24, align 4, !tbaa !5
  %323 = mul nsw i32 %321, %322
  %324 = add nsw i32 %320, %323
  store i32 %324, ptr %23, align 4, !tbaa !5
  %325 = load i32, ptr %24, align 4, !tbaa !5
  store i32 %325, ptr %21, align 4, !tbaa !5
  br label %326

326:                                              ; preds = %348, %303
  %327 = load i32, ptr %21, align 4, !tbaa !5
  %328 = load i32, ptr %11, align 4, !tbaa !5
  %329 = icmp slt i32 %327, %328
  br i1 %329, label %330, label %351

330:                                              ; preds = %326
  %331 = load double, ptr %31, align 8, !tbaa !11
  %332 = load ptr, ptr %13, align 8, !tbaa !9
  %333 = load i32, ptr %23, align 4, !tbaa !5
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %332, i64 %334
  %336 = load double, ptr %335, align 8, !tbaa !11
  %337 = load ptr, ptr %13, align 8, !tbaa !9
  %338 = load i32, ptr %22, align 4, !tbaa !5
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds double, ptr %337, i64 %339
  %341 = load double, ptr %340, align 8, !tbaa !11
  %342 = fneg double %331
  %343 = call double @llvm.fmuladd.f64(double %342, double %336, double %341)
  store double %343, ptr %340, align 8, !tbaa !11
  %344 = load i32, ptr %22, align 4, !tbaa !5
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %22, align 4, !tbaa !5
  %346 = load i32, ptr %23, align 4, !tbaa !5
  %347 = add nsw i32 %346, 1
  store i32 %347, ptr %23, align 4, !tbaa !5
  br label %348

348:                                              ; preds = %330
  %349 = load i32, ptr %21, align 4, !tbaa !5
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %21, align 4, !tbaa !5
  br label %326, !llvm.loop !19

351:                                              ; preds = %326
  %352 = load i32, ptr %15, align 4, !tbaa !5
  %353 = icmp ne i32 %352, 0
  br i1 %353, label %354, label %438

354:                                              ; preds = %351
  %355 = load ptr, ptr %18, align 8, !tbaa !9
  %356 = load i32, ptr %26, align 4, !tbaa !5
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds double, ptr %355, i64 %357
  %359 = load double, ptr %358, align 8, !tbaa !11
  %360 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !11
  %361 = fcmp une double %359, %360
  br i1 %361, label %362, label %438

362:                                              ; preds = %354
  %363 = load ptr, ptr %13, align 8, !tbaa !9
  %364 = load i32, ptr %24, align 4, !tbaa !5
  %365 = load i32, ptr %11, align 4, !tbaa !5
  %366 = load i32, ptr %26, align 4, !tbaa !5
  %367 = mul nsw i32 %365, %366
  %368 = add nsw i32 %364, %367
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds double, ptr %363, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !11
  %372 = load ptr, ptr %18, align 8, !tbaa !9
  %373 = load i32, ptr %26, align 4, !tbaa !5
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds double, ptr %372, i64 %374
  %376 = load double, ptr %375, align 8, !tbaa !11
  %377 = fdiv double %371, %376
  store double %377, ptr %31, align 8, !tbaa !11
  %378 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !11
  %379 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E3one, align 8, !tbaa !11
  %380 = load double, ptr %31, align 8, !tbaa !11
  %381 = load double, ptr %31, align 8, !tbaa !11
  %382 = fneg double %380
  %383 = call double @llvm.fmuladd.f64(double %382, double %381, double %379)
  %384 = call noundef double @_Z5dmax1dd(double noundef %378, double noundef %383)
  store double %384, ptr %31, align 8, !tbaa !11
  %385 = load double, ptr %31, align 8, !tbaa !11
  %386 = call double @sqrt(double noundef %385) #5
  %387 = load ptr, ptr %18, align 8, !tbaa !9
  %388 = load i32, ptr %26, align 4, !tbaa !5
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds double, ptr %387, i64 %389
  %391 = load double, ptr %390, align 8, !tbaa !11
  %392 = fmul double %391, %386
  store double %392, ptr %390, align 8, !tbaa !11
  %393 = load ptr, ptr %18, align 8, !tbaa !9
  %394 = load i32, ptr %26, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds double, ptr %393, i64 %395
  %397 = load double, ptr %396, align 8, !tbaa !11
  %398 = load ptr, ptr %20, align 8, !tbaa !9
  %399 = load i32, ptr %26, align 4, !tbaa !5
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds double, ptr %398, i64 %400
  %402 = load double, ptr %401, align 8, !tbaa !11
  %403 = fdiv double %397, %402
  store double %403, ptr %31, align 8, !tbaa !11
  %404 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E3p05, align 8, !tbaa !11
  %405 = load double, ptr %31, align 8, !tbaa !11
  %406 = fmul double %404, %405
  %407 = load double, ptr %31, align 8, !tbaa !11
  %408 = fmul double %406, %407
  %409 = fcmp ole double %408, 1.200000e-16
  br i1 %409, label %410, label %437

410:                                              ; preds = %362
  %411 = load i32, ptr %11, align 4, !tbaa !5
  %412 = load i32, ptr %24, align 4, !tbaa !5
  %413 = sub nsw i32 %411, %412
  %414 = sub nsw i32 %413, 1
  %415 = load ptr, ptr %13, align 8, !tbaa !9
  %416 = load i32, ptr %25, align 4, !tbaa !5
  %417 = load i32, ptr %11, align 4, !tbaa !5
  %418 = load i32, ptr %26, align 4, !tbaa !5
  %419 = mul nsw i32 %417, %418
  %420 = add nsw i32 %416, %419
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds double, ptr %415, i64 %421
  %423 = call noundef double @_Z5enormiPd(i32 noundef %414, ptr noundef %422)
  %424 = load ptr, ptr %18, align 8, !tbaa !9
  %425 = load i32, ptr %26, align 4, !tbaa !5
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %424, i64 %426
  store double %423, ptr %427, align 8, !tbaa !11
  %428 = load ptr, ptr %18, align 8, !tbaa !9
  %429 = load i32, ptr %26, align 4, !tbaa !5
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds double, ptr %428, i64 %430
  %432 = load double, ptr %431, align 8, !tbaa !11
  %433 = load ptr, ptr %20, align 8, !tbaa !9
  %434 = load i32, ptr %26, align 4, !tbaa !5
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds double, ptr %433, i64 %435
  store double %432, ptr %436, align 8, !tbaa !11
  br label %437

437:                                              ; preds = %410, %362
  br label %438

438:                                              ; preds = %437, %354, %351
  br label %439

439:                                              ; preds = %438
  %440 = load i32, ptr %26, align 4, !tbaa !5
  %441 = add nsw i32 %440, 1
  store i32 %441, ptr %26, align 4, !tbaa !5
  br label %262, !llvm.loop !20

442:                                              ; preds = %262
  br label %443

443:                                              ; preds = %442, %247
  br label %444

444:                                              ; preds = %443, %215
  %445 = load double, ptr %29, align 8, !tbaa !11
  %446 = fneg double %445
  %447 = load ptr, ptr %18, align 8, !tbaa !9
  %448 = load i32, ptr %24, align 4, !tbaa !5
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %447, i64 %449
  store double %446, ptr %450, align 8, !tbaa !11
  br label %451

451:                                              ; preds = %444
  %452 = load i32, ptr %24, align 4, !tbaa !5
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %24, align 4, !tbaa !5
  br label %84, !llvm.loop !21

454:                                              ; preds = %84
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_Z5dmax1dd(double noundef, double noundef) #1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z4min0ii(i32 noundef, i32 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}


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

@_ZZ5qrfaciiPdiiPiiS_S_S_E4zero = external hidden local_unnamed_addr global double, align 8
@_ZZ5qrfaciiPdiiPiiS_S_S_E3one = external hidden local_unnamed_addr global double, align 8
@_ZZ5qrfaciiPdiiPiiS_S_S_E3p05 = external hidden local_unnamed_addr global double, align 8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_Z5enormiPd(i32 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_Z5qrfaciiPdiiPiiS_S_S_(i32 noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, ptr nocapture noundef %5, i32 noundef %6, ptr nocapture noundef %7, ptr nocapture noundef writeonly %8, ptr nocapture noundef %9) local_unnamed_addr #0 {
  %11 = icmp sgt i32 %1, 0
  br i1 %11, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %10
  %.not201 = icmp eq i32 %4, 0
  %12 = sext i32 %0 to i64
  %wide.trip.count252 = zext nneg i32 %1 to i64
  br i1 %.not201, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.lr.ph.split.us
  %indvars.iv247 = phi i64 [ %indvars.iv.next248, %.lr.ph.split.us ], [ 0, %.lr.ph ]
  %indvars.iv245 = phi i64 [ %indvars.iv.next246, %.lr.ph.split.us ], [ 0, %.lr.ph ]
  %13 = getelementptr inbounds double, ptr %2, i64 %indvars.iv245
  %14 = tail call noundef double @_Z5enormiPd(i32 noundef %0, ptr noundef %13)
  %15 = getelementptr inbounds double, ptr %8, i64 %indvars.iv247
  store double %14, ptr %15, align 8, !tbaa !5
  %16 = getelementptr inbounds double, ptr %7, i64 %indvars.iv247
  store double %14, ptr %16, align 8, !tbaa !5
  %17 = getelementptr inbounds double, ptr %9, i64 %indvars.iv247
  store double %14, ptr %17, align 8, !tbaa !5
  %indvars.iv.next246 = add nsw i64 %indvars.iv245, %12
  %indvars.iv.next248 = add nuw nsw i64 %indvars.iv247, 1
  %exitcond253.not = icmp eq i64 %indvars.iv.next248, %wide.trip.count252
  br i1 %exitcond253.not, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !9

.lr.ph.split:                                     ; preds = %.lr.ph, %.lr.ph.split
  %indvars.iv240 = phi i64 [ %indvars.iv.next241, %.lr.ph.split ], [ 0, %.lr.ph ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph.split ], [ 0, %.lr.ph ]
  %18 = getelementptr inbounds double, ptr %2, i64 %indvars.iv
  %19 = tail call noundef double @_Z5enormiPd(i32 noundef %0, ptr noundef %18)
  %20 = getelementptr inbounds double, ptr %8, i64 %indvars.iv240
  store double %19, ptr %20, align 8, !tbaa !5
  %21 = getelementptr inbounds double, ptr %7, i64 %indvars.iv240
  store double %19, ptr %21, align 8, !tbaa !5
  %22 = getelementptr inbounds double, ptr %9, i64 %indvars.iv240
  store double %19, ptr %22, align 8, !tbaa !5
  %23 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv240
  %24 = trunc nuw nsw i64 %indvars.iv240 to i32
  store i32 %24, ptr %23, align 4, !tbaa !11
  %indvars.iv.next = add nsw i64 %indvars.iv, %12
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next241, %wide.trip.count252
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !9

._crit_edge:                                      ; preds = %.lr.ph.split, %.lr.ph.split.us, %10
  %25 = tail call noundef i32 @_Z4min0ii(i32 noundef %0, i32 noundef %1)
  %26 = icmp sgt i32 %25, 0
  br i1 %26, label %.lr.ph237, label %._crit_edge238

.lr.ph237:                                        ; preds = %._crit_edge
  %27 = icmp eq i32 %4, 0
  %28 = icmp sgt i32 %0, 0
  %29 = add i32 %0, 1
  %30 = sext i32 %0 to i64
  %31 = sext i32 %1 to i64
  %wide.trip.count305 = zext nneg i32 %25 to i64
  %wide.trip.count259 = zext i32 %1 to i64
  %wide.trip.count302 = zext i32 %1 to i64
  %scevgep315 = getelementptr i8, ptr %2, i64 8
  %scevgep319 = getelementptr i8, ptr %2, i64 8
  %32 = add i32 %0, -1
  %33 = zext i32 %32 to i64
  %34 = shl nuw nsw i64 %33, 3
  %35 = add nuw nsw i64 %34, 8
  %scevgep350 = getelementptr i8, ptr %2, i64 %35
  %scevgep353 = getelementptr i8, ptr %2, i64 %35
  %36 = zext i32 %0 to i64
  %min.iters.check360 = icmp ult i32 %0, 4
  %n.vec363 = and i64 %36, 2147483644
  %ind.end369 = trunc nuw nsw i64 %n.vec363 to i32
  %cmp.n380 = icmp eq i64 %n.vec363, %36
  %37 = add nsw i32 %0, -1
  %invariant.gep398 = getelementptr i8, ptr %2, i64 8
  %invariant.gep400 = getelementptr i8, ptr %2, i64 8
  %38 = add i32 %0, -1
  %invariant.gep404 = getelementptr i8, ptr %2, i64 8
  %invariant.gep406 = getelementptr i8, ptr %2, i64 8
  %39 = add i32 %0, -1
  %invariant.gep412 = getelementptr i8, ptr %2, i64 8
  %invariant.gep414 = getelementptr i8, ptr %2, i64 8
  br label %40

40:                                               ; preds = %.lr.ph237, %.loopexit
  %indvars.iv297 = phi i64 [ 1, %.lr.ph237 ], [ %indvars.iv.next298, %.loopexit ]
  %indvars.iv277 = phi i32 [ %0, %.lr.ph237 ], [ %indvars.iv.next278, %.loopexit ]
  %indvars.iv271 = phi i32 [ 0, %.lr.ph237 ], [ %indvars.iv.next272, %.loopexit ]
  %indvars.iv261 = phi i32 [ 0, %.lr.ph237 ], [ %indvars.iv.next262, %.loopexit ]
  %indvars.iv254 = phi i64 [ 0, %.lr.ph237 ], [ %indvars.iv.next255.pre-phi, %.loopexit ]
  %41 = sext i32 %indvars.iv261 to i64
  %42 = shl nsw i64 %41, 3
  %scevgep349 = getelementptr i8, ptr %2, i64 %42
  %scevgep351 = getelementptr i8, ptr %scevgep350, i64 %42
  %43 = sext i32 %indvars.iv271 to i64
  %44 = shl nsw i64 %43, 3
  %scevgep318 = getelementptr i8, ptr %2, i64 %44
  %45 = sext i32 %indvars.iv271 to i64
  %46 = sext i32 %indvars.iv261 to i64
  br i1 %27, label %._crit_edge307, label %.preheader202

._crit_edge307:                                   ; preds = %40
  %.pre308 = trunc nuw nsw i64 %indvars.iv254 to i32
  br label %121

.preheader202:                                    ; preds = %40
  %47 = icmp slt i64 %indvars.iv254, %31
  %48 = trunc nuw nsw i64 %indvars.iv254 to i32
  br i1 %47, label %.lr.ph207.preheader, label %._crit_edge208

.lr.ph207.preheader:                              ; preds = %.preheader202
  %49 = sub i64 %wide.trip.count302, %indvars.iv254
  %xtraiter = and i64 %49, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph207.prol.loopexit, label %.lr.ph207.prol

.lr.ph207.prol:                                   ; preds = %.lr.ph207.preheader, %.lr.ph207.prol
  %indvars.iv256.prol = phi i64 [ %indvars.iv.next257.prol, %.lr.ph207.prol ], [ %indvars.iv254, %.lr.ph207.preheader ]
  %.0180206.prol = phi i32 [ %.1181.prol, %.lr.ph207.prol ], [ %48, %.lr.ph207.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph207.prol ], [ 0, %.lr.ph207.preheader ]
  %50 = getelementptr inbounds double, ptr %7, i64 %indvars.iv256.prol
  %51 = load double, ptr %50, align 8, !tbaa !5
  %52 = sext i32 %.0180206.prol to i64
  %53 = getelementptr inbounds double, ptr %7, i64 %52
  %54 = load double, ptr %53, align 8, !tbaa !5
  %55 = fcmp ogt double %51, %54
  %56 = trunc nuw nsw i64 %indvars.iv256.prol to i32
  %.1181.prol = select i1 %55, i32 %56, i32 %.0180206.prol
  %indvars.iv.next257.prol = add nuw nsw i64 %indvars.iv256.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.ph207.prol.loopexit, label %.lr.ph207.prol, !llvm.loop !13

.lr.ph207.prol.loopexit:                          ; preds = %.lr.ph207.prol, %.lr.ph207.preheader
  %.1181.lcssa.unr = phi i32 [ poison, %.lr.ph207.preheader ], [ %.1181.prol, %.lr.ph207.prol ]
  %indvars.iv256.unr = phi i64 [ %indvars.iv254, %.lr.ph207.preheader ], [ %indvars.iv.next257.prol, %.lr.ph207.prol ]
  %.0180206.unr = phi i32 [ %48, %.lr.ph207.preheader ], [ %.1181.prol, %.lr.ph207.prol ]
  %57 = sub i64 %indvars.iv254, %wide.trip.count302
  %58 = icmp ugt i64 %57, -4
  br i1 %58, label %._crit_edge208, label %.lr.ph207

.lr.ph207:                                        ; preds = %.lr.ph207.prol.loopexit, %.lr.ph207
  %indvars.iv256 = phi i64 [ %indvars.iv.next257.3, %.lr.ph207 ], [ %indvars.iv256.unr, %.lr.ph207.prol.loopexit ]
  %.0180206 = phi i32 [ %.1181.3, %.lr.ph207 ], [ %.0180206.unr, %.lr.ph207.prol.loopexit ]
  %59 = getelementptr inbounds double, ptr %7, i64 %indvars.iv256
  %60 = load double, ptr %59, align 8, !tbaa !5
  %61 = sext i32 %.0180206 to i64
  %62 = getelementptr inbounds double, ptr %7, i64 %61
  %63 = load double, ptr %62, align 8, !tbaa !5
  %64 = fcmp ogt double %60, %63
  %65 = trunc nuw nsw i64 %indvars.iv256 to i32
  %.1181 = select i1 %64, i32 %65, i32 %.0180206
  %indvars.iv.next257 = add nuw nsw i64 %indvars.iv256, 1
  %66 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next257
  %67 = load double, ptr %66, align 8, !tbaa !5
  %68 = sext i32 %.1181 to i64
  %69 = getelementptr inbounds double, ptr %7, i64 %68
  %70 = load double, ptr %69, align 8, !tbaa !5
  %71 = fcmp ogt double %67, %70
  %72 = trunc nuw nsw i64 %indvars.iv.next257 to i32
  %.1181.1 = select i1 %71, i32 %72, i32 %.1181
  %indvars.iv.next257.1 = add nuw nsw i64 %indvars.iv256, 2
  %73 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next257.1
  %74 = load double, ptr %73, align 8, !tbaa !5
  %75 = sext i32 %.1181.1 to i64
  %76 = getelementptr inbounds double, ptr %7, i64 %75
  %77 = load double, ptr %76, align 8, !tbaa !5
  %78 = fcmp ogt double %74, %77
  %79 = trunc nuw nsw i64 %indvars.iv.next257.1 to i32
  %.1181.2 = select i1 %78, i32 %79, i32 %.1181.1
  %indvars.iv.next257.2 = add nuw nsw i64 %indvars.iv256, 3
  %80 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next257.2
  %81 = load double, ptr %80, align 8, !tbaa !5
  %82 = sext i32 %.1181.2 to i64
  %83 = getelementptr inbounds double, ptr %7, i64 %82
  %84 = load double, ptr %83, align 8, !tbaa !5
  %85 = fcmp ogt double %81, %84
  %86 = trunc nuw nsw i64 %indvars.iv.next257.2 to i32
  %.1181.3 = select i1 %85, i32 %86, i32 %.1181.2
  %indvars.iv.next257.3 = add nuw nsw i64 %indvars.iv256, 4
  %exitcond260.not.3 = icmp eq i64 %indvars.iv.next257.3, %wide.trip.count259
  br i1 %exitcond260.not.3, label %._crit_edge208, label %.lr.ph207, !llvm.loop !15

._crit_edge208:                                   ; preds = %.lr.ph207.prol.loopexit, %.lr.ph207, %.preheader202
  %.0180.lcssa = phi i32 [ %48, %.preheader202 ], [ %.1181.lcssa.unr, %.lr.ph207.prol.loopexit ], [ %.1181.3, %.lr.ph207 ]
  %87 = zext i32 %.0180.lcssa to i64
  %88 = icmp eq i64 %indvars.iv254, %87
  br i1 %88, label %121, label %89

89:                                               ; preds = %._crit_edge208
  br i1 %28, label %.lr.ph213.preheader, label %._crit_edge214

.lr.ph213.preheader:                              ; preds = %89
  %90 = mul i32 %.0180.lcssa, %0
  %91 = sext i32 %90 to i64
  br i1 %min.iters.check360, label %.lr.ph213.preheader382, label %vector.memcheck348

vector.memcheck348:                               ; preds = %.lr.ph213.preheader
  %92 = shl nsw i64 %91, 3
  %scevgep352 = getelementptr i8, ptr %2, i64 %92
  %scevgep354 = getelementptr i8, ptr %scevgep353, i64 %92
  %bound0355 = icmp ult ptr %scevgep349, %scevgep354
  %bound1356 = icmp ult ptr %scevgep352, %scevgep351
  %found.conflict357 = and i1 %bound0355, %bound1356
  br i1 %found.conflict357, label %.lr.ph213.preheader382, label %vector.ph361

vector.ph361:                                     ; preds = %vector.memcheck348
  %ind.end364 = add nsw i64 %n.vec363, %91
  %ind.end366 = add nsw i64 %n.vec363, %46
  %invariant.gep394 = getelementptr double, ptr %2, i64 %46
  %invariant.gep396 = getelementptr double, ptr %2, i64 %91
  br label %vector.body371

vector.body371:                                   ; preds = %vector.body371, %vector.ph361
  %index372 = phi i64 [ 0, %vector.ph361 ], [ %index.next379, %vector.body371 ]
  %gep395 = getelementptr double, ptr %invariant.gep394, i64 %index372
  %93 = getelementptr inbounds i8, ptr %gep395, i64 16
  %wide.load375 = load <2 x double>, ptr %gep395, align 8, !tbaa !5, !alias.scope !16, !noalias !19
  %wide.load376 = load <2 x double>, ptr %93, align 8, !tbaa !5, !alias.scope !16, !noalias !19
  %gep397 = getelementptr double, ptr %invariant.gep396, i64 %index372
  %94 = getelementptr inbounds i8, ptr %gep397, i64 16
  %wide.load377 = load <2 x double>, ptr %gep397, align 8, !tbaa !5, !alias.scope !19
  %wide.load378 = load <2 x double>, ptr %94, align 8, !tbaa !5, !alias.scope !19
  store <2 x double> %wide.load377, ptr %gep395, align 8, !tbaa !5, !alias.scope !16, !noalias !19
  store <2 x double> %wide.load378, ptr %93, align 8, !tbaa !5, !alias.scope !16, !noalias !19
  store <2 x double> %wide.load375, ptr %gep397, align 8, !tbaa !5, !alias.scope !19
  store <2 x double> %wide.load376, ptr %94, align 8, !tbaa !5, !alias.scope !19
  %index.next379 = add nuw i64 %index372, 4
  %95 = icmp eq i64 %index.next379, %n.vec363
  br i1 %95, label %middle.block358, label %vector.body371, !llvm.loop !21

middle.block358:                                  ; preds = %vector.body371
  br i1 %cmp.n380, label %._crit_edge214, label %.lr.ph213.preheader382

.lr.ph213.preheader382:                           ; preds = %middle.block358, %vector.memcheck348, %.lr.ph213.preheader
  %indvars.iv265.ph = phi i64 [ %91, %vector.memcheck348 ], [ %91, %.lr.ph213.preheader ], [ %ind.end364, %middle.block358 ]
  %indvars.iv263.ph = phi i64 [ %46, %vector.memcheck348 ], [ %46, %.lr.ph213.preheader ], [ %ind.end366, %middle.block358 ]
  %.0178211.ph = phi i32 [ 0, %vector.memcheck348 ], [ 0, %.lr.ph213.preheader ], [ %ind.end369, %middle.block358 ]
  %96 = sub i32 %0, %.0178211.ph
  %xtraiter384 = and i32 %96, 1
  %lcmp.mod385.not = icmp eq i32 %xtraiter384, 0
  br i1 %lcmp.mod385.not, label %.lr.ph213.prol.loopexit, label %.lr.ph213.prol

.lr.ph213.prol:                                   ; preds = %.lr.ph213.preheader382
  %97 = getelementptr inbounds double, ptr %2, i64 %indvars.iv263.ph
  %98 = load double, ptr %97, align 8, !tbaa !5
  %99 = getelementptr inbounds double, ptr %2, i64 %indvars.iv265.ph
  %100 = load double, ptr %99, align 8, !tbaa !5
  store double %100, ptr %97, align 8, !tbaa !5
  store double %98, ptr %99, align 8, !tbaa !5
  %indvars.iv.next264.prol = add nsw i64 %indvars.iv263.ph, 1
  %indvars.iv.next266.prol = add nsw i64 %indvars.iv265.ph, 1
  %101 = add nuw nsw i32 %.0178211.ph, 1
  br label %.lr.ph213.prol.loopexit

.lr.ph213.prol.loopexit:                          ; preds = %.lr.ph213.prol, %.lr.ph213.preheader382
  %indvars.iv265.unr = phi i64 [ %indvars.iv265.ph, %.lr.ph213.preheader382 ], [ %indvars.iv.next266.prol, %.lr.ph213.prol ]
  %indvars.iv263.unr = phi i64 [ %indvars.iv263.ph, %.lr.ph213.preheader382 ], [ %indvars.iv.next264.prol, %.lr.ph213.prol ]
  %.0178211.unr = phi i32 [ %.0178211.ph, %.lr.ph213.preheader382 ], [ %101, %.lr.ph213.prol ]
  %102 = icmp eq i32 %.0178211.ph, %37
  br i1 %102, label %._crit_edge214, label %.lr.ph213

.lr.ph213:                                        ; preds = %.lr.ph213.prol.loopexit, %.lr.ph213
  %indvars.iv265 = phi i64 [ %indvars.iv.next266.1, %.lr.ph213 ], [ %indvars.iv265.unr, %.lr.ph213.prol.loopexit ]
  %indvars.iv263 = phi i64 [ %indvars.iv.next264.1, %.lr.ph213 ], [ %indvars.iv263.unr, %.lr.ph213.prol.loopexit ]
  %.0178211 = phi i32 [ %109, %.lr.ph213 ], [ %.0178211.unr, %.lr.ph213.prol.loopexit ]
  %103 = getelementptr inbounds double, ptr %2, i64 %indvars.iv263
  %104 = load double, ptr %103, align 8, !tbaa !5
  %105 = getelementptr inbounds double, ptr %2, i64 %indvars.iv265
  %106 = load double, ptr %105, align 8, !tbaa !5
  store double %106, ptr %103, align 8, !tbaa !5
  store double %104, ptr %105, align 8, !tbaa !5
  %gep399 = getelementptr double, ptr %invariant.gep398, i64 %indvars.iv263
  %107 = load double, ptr %gep399, align 8, !tbaa !5
  %gep401 = getelementptr double, ptr %invariant.gep400, i64 %indvars.iv265
  %108 = load double, ptr %gep401, align 8, !tbaa !5
  store double %108, ptr %gep399, align 8, !tbaa !5
  store double %107, ptr %gep401, align 8, !tbaa !5
  %indvars.iv.next264.1 = add nsw i64 %indvars.iv263, 2
  %indvars.iv.next266.1 = add nsw i64 %indvars.iv265, 2
  %109 = add nuw nsw i32 %.0178211, 2
  %exitcond270.not.1 = icmp eq i32 %109, %0
  br i1 %exitcond270.not.1, label %._crit_edge214, label %.lr.ph213, !llvm.loop !24

._crit_edge214:                                   ; preds = %.lr.ph213.prol.loopexit, %.lr.ph213, %middle.block358, %89
  %110 = getelementptr inbounds double, ptr %7, i64 %indvars.iv254
  %111 = load double, ptr %110, align 8, !tbaa !5
  %112 = sext i32 %.0180.lcssa to i64
  %113 = getelementptr inbounds double, ptr %7, i64 %112
  store double %111, ptr %113, align 8, !tbaa !5
  %114 = getelementptr inbounds double, ptr %9, i64 %indvars.iv254
  %115 = load double, ptr %114, align 8, !tbaa !5
  %116 = getelementptr inbounds double, ptr %9, i64 %112
  store double %115, ptr %116, align 8, !tbaa !5
  %117 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv254
  %118 = load i32, ptr %117, align 4, !tbaa !11
  %119 = getelementptr inbounds i32, ptr %5, i64 %112
  %120 = load i32, ptr %119, align 4, !tbaa !11
  store i32 %120, ptr %117, align 4, !tbaa !11
  store i32 %118, ptr %119, align 4, !tbaa !11
  br label %121

121:                                              ; preds = %._crit_edge307, %._crit_edge208, %._crit_edge214
  %.pre-phi = phi i32 [ %.pre308, %._crit_edge307 ], [ %48, %._crit_edge208 ], [ %48, %._crit_edge214 ]
  %122 = mul i32 %.pre-phi, %29
  %123 = sub nsw i64 %30, %indvars.iv254
  %124 = sext i32 %122 to i64
  %125 = getelementptr inbounds double, ptr %2, i64 %124
  %126 = trunc nsw i64 %123 to i32
  %127 = tail call noundef double @_Z5enormiPd(i32 noundef %126, ptr noundef %125)
  %128 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !5
  %129 = fcmp oeq double %127, %128
  br i1 %129, label %..loopexit_crit_edge, label %130

..loopexit_crit_edge:                             ; preds = %121
  %.pre309 = add nuw nsw i64 %indvars.iv254, 1
  br label %.loopexit

130:                                              ; preds = %121
  %131 = load double, ptr %125, align 8, !tbaa !5
  %132 = fcmp olt double %131, %128
  %133 = fneg double %127
  %.0177 = select i1 %132, double %133, double %127
  %134 = icmp slt i64 %indvars.iv254, %30
  br i1 %134, label %.lr.ph218.preheader, label %._crit_edge219

.lr.ph218.preheader:                              ; preds = %130
  %135 = sub i32 %32, %.pre-phi
  %136 = zext i32 %135 to i64
  %137 = add nuw nsw i64 %136, 1
  %min.iters.check331 = icmp eq i32 %32, %.pre-phi
  br i1 %min.iters.check331, label %.lr.ph218.preheader381, label %vector.ph332

vector.ph332:                                     ; preds = %.lr.ph218.preheader
  %n.vec334 = and i64 %137, 8589934590
  %ind.end335 = add nsw i64 %n.vec334, %45
  %.cast337 = trunc i64 %n.vec334 to i32
  %ind.end338 = add i32 %.pre-phi, %.cast337
  %broadcast.splatinsert344 = insertelement <2 x double> poison, double %.0177, i64 0
  %broadcast.splat345 = shufflevector <2 x double> %broadcast.splatinsert344, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep402 = getelementptr double, ptr %2, i64 %45
  br label %vector.body340

vector.body340:                                   ; preds = %vector.body340, %vector.ph332
  %index341 = phi i64 [ 0, %vector.ph332 ], [ %index.next346, %vector.body340 ]
  %gep403 = getelementptr double, ptr %invariant.gep402, i64 %index341
  %wide.load343 = load <2 x double>, ptr %gep403, align 8, !tbaa !5
  %138 = fdiv <2 x double> %wide.load343, %broadcast.splat345
  store <2 x double> %138, ptr %gep403, align 8, !tbaa !5
  %index.next346 = add nuw i64 %index341, 2
  %139 = icmp eq i64 %index.next346, %n.vec334
  br i1 %139, label %middle.block329, label %vector.body340, !llvm.loop !25

middle.block329:                                  ; preds = %vector.body340
  %cmp.n347 = icmp eq i64 %137, %n.vec334
  br i1 %cmp.n347, label %._crit_edge219.loopexit, label %.lr.ph218.preheader381

.lr.ph218.preheader381:                           ; preds = %middle.block329, %.lr.ph218.preheader
  %indvars.iv273.ph = phi i64 [ %45, %.lr.ph218.preheader ], [ %ind.end335, %middle.block329 ]
  %.1179216.ph = phi i32 [ %.pre-phi, %.lr.ph218.preheader ], [ %ind.end338, %middle.block329 ]
  br label %.lr.ph218

.lr.ph218:                                        ; preds = %.lr.ph218.preheader381, %.lr.ph218
  %indvars.iv273 = phi i64 [ %indvars.iv.next274, %.lr.ph218 ], [ %indvars.iv273.ph, %.lr.ph218.preheader381 ]
  %.1179216 = phi i32 [ %143, %.lr.ph218 ], [ %.1179216.ph, %.lr.ph218.preheader381 ]
  %140 = getelementptr inbounds double, ptr %2, i64 %indvars.iv273
  %141 = load double, ptr %140, align 8, !tbaa !5
  %142 = fdiv double %141, %.0177
  store double %142, ptr %140, align 8, !tbaa !5
  %indvars.iv.next274 = add nsw i64 %indvars.iv273, 1
  %143 = add nuw nsw i32 %.1179216, 1
  %exitcond276.not = icmp eq i32 %143, %0
  br i1 %exitcond276.not, label %._crit_edge219.loopexit, label %.lr.ph218, !llvm.loop !26

._crit_edge219.loopexit:                          ; preds = %.lr.ph218, %middle.block329
  %.pre = load double, ptr %125, align 8, !tbaa !5
  br label %._crit_edge219

._crit_edge219:                                   ; preds = %._crit_edge219.loopexit, %130
  %144 = phi double [ %.pre, %._crit_edge219.loopexit ], [ %131, %130 ]
  %145 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E3one, align 8, !tbaa !5
  %146 = fadd double %145, %144
  store double %146, ptr %125, align 8, !tbaa !5
  %147 = add nuw nsw i64 %indvars.iv254, 1
  %148 = icmp slt i64 %147, %31
  br i1 %148, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %._crit_edge219
  %invariant.gep = getelementptr double, ptr %2, i64 %indvars.iv254
  %invariant.gep312 = getelementptr double, ptr %2, i64 %147
  %149 = trunc i64 %123 to i32
  %150 = add i32 %149, -1
  %151 = xor i32 %.pre-phi, -1
  %152 = add i32 %151, %0
  %153 = zext i32 %152 to i64
  %154 = shl nuw nsw i64 %153, 3
  %scevgep316 = getelementptr i8, ptr %scevgep315, i64 %154
  %155 = getelementptr i8, ptr %scevgep319, i64 %44
  %scevgep320 = getelementptr i8, ptr %155, i64 %154
  %156 = xor i32 %.pre-phi, -1
  %157 = add i32 %156, %0
  %158 = zext i32 %157 to i64
  %159 = add nuw nsw i64 %158, 1
  %160 = sub i32 %0, %.pre-phi
  %xtraiter387 = and i32 %160, 1
  %lcmp.mod388.not = icmp eq i32 %xtraiter387, 0
  %161 = getelementptr inbounds double, ptr %2, i64 %45
  %indvars.iv.next284.prol = add nsw i64 %45, 1
  %162 = add nuw nsw i32 %.pre-phi, 1
  %163 = icmp eq i32 %.pre-phi, %38
  %min.iters.check = icmp ult i32 %157, 3
  %n.vec = and i64 %159, 8589934588
  %ind.end = add nsw i64 %n.vec, %45
  %.cast = trunc i64 %n.vec to i32
  %ind.end323 = add i32 %.pre-phi, %.cast
  %invariant.gep408 = getelementptr double, ptr %2, i64 %45
  %cmp.n = icmp eq i64 %159, %n.vec
  br label %164

164:                                              ; preds = %.preheader, %232
  %indvars.iv299 = phi i64 [ %indvars.iv297, %.preheader ], [ %indvars.iv.next300, %232 ]
  %indvars.iv279 = phi i32 [ %indvars.iv277, %.preheader ], [ %indvars.iv.next280, %232 ]
  %165 = sext i32 %indvars.iv279 to i64
  %166 = shl nsw i64 %165, 3
  %scevgep = getelementptr i8, ptr %2, i64 %166
  %scevgep317 = getelementptr i8, ptr %scevgep316, i64 %166
  %167 = sext i32 %indvars.iv279 to i64
  %168 = mul nsw i64 %indvars.iv299, %30
  br i1 %134, label %.lr.ph225.preheader, label %._crit_edge233

.lr.ph225.preheader:                              ; preds = %164
  %169 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !5
  br i1 %lcmp.mod388.not, label %.lr.ph225.prol.loopexit, label %.lr.ph225.prol

.lr.ph225.prol:                                   ; preds = %.lr.ph225.preheader
  %170 = load double, ptr %161, align 8, !tbaa !5
  %171 = getelementptr inbounds double, ptr %2, i64 %167
  %172 = load double, ptr %171, align 8, !tbaa !5
  %173 = tail call double @llvm.fmuladd.f64(double %170, double %172, double %169)
  %indvars.iv.next282.prol = add nsw i64 %167, 1
  br label %.lr.ph225.prol.loopexit

.lr.ph225.prol.loopexit:                          ; preds = %.lr.ph225.prol, %.lr.ph225.preheader
  %.lcssa.unr = phi double [ poison, %.lr.ph225.preheader ], [ %173, %.lr.ph225.prol ]
  %indvars.iv283.unr = phi i64 [ %45, %.lr.ph225.preheader ], [ %indvars.iv.next284.prol, %.lr.ph225.prol ]
  %indvars.iv281.unr = phi i64 [ %167, %.lr.ph225.preheader ], [ %indvars.iv.next282.prol, %.lr.ph225.prol ]
  %.0223.unr = phi double [ %169, %.lr.ph225.preheader ], [ %173, %.lr.ph225.prol ]
  %.2222.unr = phi i32 [ %.pre-phi, %.lr.ph225.preheader ], [ %162, %.lr.ph225.prol ]
  br i1 %163, label %._crit_edge226, label %.lr.ph225

.lr.ph225:                                        ; preds = %.lr.ph225.prol.loopexit, %.lr.ph225
  %indvars.iv283 = phi i64 [ %indvars.iv.next284.1, %.lr.ph225 ], [ %indvars.iv283.unr, %.lr.ph225.prol.loopexit ]
  %indvars.iv281 = phi i64 [ %indvars.iv.next282.1, %.lr.ph225 ], [ %indvars.iv281.unr, %.lr.ph225.prol.loopexit ]
  %.0223 = phi double [ %181, %.lr.ph225 ], [ %.0223.unr, %.lr.ph225.prol.loopexit ]
  %.2222 = phi i32 [ %182, %.lr.ph225 ], [ %.2222.unr, %.lr.ph225.prol.loopexit ]
  %174 = getelementptr inbounds double, ptr %2, i64 %indvars.iv283
  %175 = load double, ptr %174, align 8, !tbaa !5
  %176 = getelementptr inbounds double, ptr %2, i64 %indvars.iv281
  %177 = load double, ptr %176, align 8, !tbaa !5
  %178 = tail call double @llvm.fmuladd.f64(double %175, double %177, double %.0223)
  %gep405 = getelementptr double, ptr %invariant.gep404, i64 %indvars.iv283
  %179 = load double, ptr %gep405, align 8, !tbaa !5
  %gep407 = getelementptr double, ptr %invariant.gep406, i64 %indvars.iv281
  %180 = load double, ptr %gep407, align 8, !tbaa !5
  %181 = tail call double @llvm.fmuladd.f64(double %179, double %180, double %178)
  %indvars.iv.next282.1 = add nsw i64 %indvars.iv281, 2
  %indvars.iv.next284.1 = add nsw i64 %indvars.iv283, 2
  %182 = add nuw nsw i32 %.2222, 2
  %exitcond288.not.1 = icmp eq i32 %182, %0
  br i1 %exitcond288.not.1, label %._crit_edge226, label %.lr.ph225, !llvm.loop !27

._crit_edge226:                                   ; preds = %.lr.ph225, %.lr.ph225.prol.loopexit
  %.lcssa = phi double [ %.lcssa.unr, %.lr.ph225.prol.loopexit ], [ %181, %.lr.ph225 ]
  br i1 %134, label %.lr.ph232, label %._crit_edge233

.lr.ph232:                                        ; preds = %._crit_edge226
  %183 = load double, ptr %125, align 8, !tbaa !5
  %184 = fneg double %.lcssa
  %185 = fdiv double %184, %183
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph232
  %bound0 = icmp ult ptr %scevgep, %scevgep320
  %bound1 = icmp ult ptr %scevgep318, %scevgep317
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %ind.end321 = add nsw i64 %n.vec, %167
  %broadcast.splatinsert = insertelement <2 x double> poison, double %185, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep410 = getelementptr double, ptr %2, i64 %167
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %gep409 = getelementptr double, ptr %invariant.gep408, i64 %index
  %186 = getelementptr inbounds i8, ptr %gep409, i64 16
  %wide.load = load <2 x double>, ptr %gep409, align 8, !tbaa !5, !alias.scope !28
  %wide.load326 = load <2 x double>, ptr %186, align 8, !tbaa !5, !alias.scope !28
  %gep411 = getelementptr double, ptr %invariant.gep410, i64 %index
  %187 = getelementptr inbounds i8, ptr %gep411, i64 16
  %wide.load327 = load <2 x double>, ptr %gep411, align 8, !tbaa !5, !alias.scope !31, !noalias !28
  %wide.load328 = load <2 x double>, ptr %187, align 8, !tbaa !5, !alias.scope !31, !noalias !28
  %188 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load, <2 x double> %wide.load327)
  %189 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load326, <2 x double> %wide.load328)
  store <2 x double> %188, ptr %gep411, align 8, !tbaa !5, !alias.scope !31, !noalias !28
  store <2 x double> %189, ptr %187, align 8, !tbaa !5, !alias.scope !31, !noalias !28
  %index.next = add nuw i64 %index, 4
  %190 = icmp eq i64 %index.next, %n.vec
  br i1 %190, label %middle.block, label %vector.body, !llvm.loop !33

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph232
  %indvars.iv291.ph = phi i64 [ %45, %vector.memcheck ], [ %45, %.lr.ph232 ], [ %ind.end, %middle.block ]
  %indvars.iv289.ph = phi i64 [ %167, %vector.memcheck ], [ %167, %.lr.ph232 ], [ %ind.end321, %middle.block ]
  %.3230.ph = phi i32 [ %.pre-phi, %vector.memcheck ], [ %.pre-phi, %.lr.ph232 ], [ %ind.end323, %middle.block ]
  %191 = sub i32 %0, %.3230.ph
  %xtraiter390 = and i32 %191, 1
  %lcmp.mod391.not = icmp eq i32 %xtraiter390, 0
  br i1 %lcmp.mod391.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %192 = getelementptr inbounds double, ptr %2, i64 %indvars.iv291.ph
  %193 = load double, ptr %192, align 8, !tbaa !5
  %194 = getelementptr inbounds double, ptr %2, i64 %indvars.iv289.ph
  %195 = load double, ptr %194, align 8, !tbaa !5
  %196 = tail call double @llvm.fmuladd.f64(double %185, double %193, double %195)
  store double %196, ptr %194, align 8, !tbaa !5
  %indvars.iv.next290.prol = add nsw i64 %indvars.iv289.ph, 1
  %indvars.iv.next292.prol = add nsw i64 %indvars.iv291.ph, 1
  %197 = add nuw nsw i32 %.3230.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv291.unr = phi i64 [ %indvars.iv291.ph, %scalar.ph.preheader ], [ %indvars.iv.next292.prol, %scalar.ph.prol ]
  %indvars.iv289.unr = phi i64 [ %indvars.iv289.ph, %scalar.ph.preheader ], [ %indvars.iv.next290.prol, %scalar.ph.prol ]
  %.3230.unr = phi i32 [ %.3230.ph, %scalar.ph.preheader ], [ %197, %scalar.ph.prol ]
  %198 = icmp eq i32 %.3230.ph, %39
  br i1 %198, label %._crit_edge233, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv291 = phi i64 [ %indvars.iv.next292.1, %scalar.ph ], [ %indvars.iv291.unr, %scalar.ph.prol.loopexit ]
  %indvars.iv289 = phi i64 [ %indvars.iv.next290.1, %scalar.ph ], [ %indvars.iv289.unr, %scalar.ph.prol.loopexit ]
  %.3230 = phi i32 [ %207, %scalar.ph ], [ %.3230.unr, %scalar.ph.prol.loopexit ]
  %199 = getelementptr inbounds double, ptr %2, i64 %indvars.iv291
  %200 = load double, ptr %199, align 8, !tbaa !5
  %201 = getelementptr inbounds double, ptr %2, i64 %indvars.iv289
  %202 = load double, ptr %201, align 8, !tbaa !5
  %203 = tail call double @llvm.fmuladd.f64(double %185, double %200, double %202)
  store double %203, ptr %201, align 8, !tbaa !5
  %gep413 = getelementptr double, ptr %invariant.gep412, i64 %indvars.iv291
  %204 = load double, ptr %gep413, align 8, !tbaa !5
  %gep415 = getelementptr double, ptr %invariant.gep414, i64 %indvars.iv289
  %205 = load double, ptr %gep415, align 8, !tbaa !5
  %206 = tail call double @llvm.fmuladd.f64(double %185, double %204, double %205)
  store double %206, ptr %gep415, align 8, !tbaa !5
  %indvars.iv.next290.1 = add nsw i64 %indvars.iv289, 2
  %indvars.iv.next292.1 = add nsw i64 %indvars.iv291, 2
  %207 = add nuw nsw i32 %.3230, 2
  %exitcond296.not.1 = icmp eq i32 %207, %0
  br i1 %exitcond296.not.1, label %._crit_edge233, label %scalar.ph, !llvm.loop !34

._crit_edge233:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %164, %._crit_edge226
  br i1 %27, label %232, label %208

208:                                              ; preds = %._crit_edge233
  %209 = getelementptr inbounds double, ptr %7, i64 %indvars.iv299
  %210 = load double, ptr %209, align 8, !tbaa !5
  %211 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E4zero, align 8, !tbaa !5
  %212 = fcmp une double %210, %211
  br i1 %212, label %213, label %232

213:                                              ; preds = %208
  %gep = getelementptr double, ptr %invariant.gep, i64 %168
  %214 = load double, ptr %gep, align 8, !tbaa !5
  %215 = fdiv double %214, %210
  %216 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E3one, align 8, !tbaa !5
  %217 = fneg double %215
  %218 = tail call double @llvm.fmuladd.f64(double %217, double %215, double %216)
  %219 = tail call noundef double @_Z5dmax1dd(double noundef %211, double noundef %218)
  %220 = tail call double @sqrt(double noundef %219) #4
  %221 = load double, ptr %209, align 8, !tbaa !5
  %222 = fmul double %220, %221
  store double %222, ptr %209, align 8, !tbaa !5
  %223 = getelementptr inbounds double, ptr %9, i64 %indvars.iv299
  %224 = load double, ptr %223, align 8, !tbaa !5
  %225 = fdiv double %222, %224
  %226 = load double, ptr @_ZZ5qrfaciiPdiiPiiS_S_S_E3p05, align 8, !tbaa !5
  %227 = fmul double %226, %225
  %228 = fmul double %225, %227
  %229 = fcmp ugt double %228, 1.200000e-16
  br i1 %229, label %232, label %230

230:                                              ; preds = %213
  %gep313 = getelementptr double, ptr %invariant.gep312, i64 %168
  %231 = tail call noundef double @_Z5enormiPd(i32 noundef %150, ptr noundef %gep313)
  store double %231, ptr %209, align 8, !tbaa !5
  store double %231, ptr %223, align 8, !tbaa !5
  br label %232

232:                                              ; preds = %._crit_edge233, %208, %230, %213
  %indvars.iv.next300 = add nuw nsw i64 %indvars.iv299, 1
  %indvars.iv.next280 = add i32 %indvars.iv279, %0
  %exitcond303.not = icmp eq i64 %indvars.iv.next300, %wide.trip.count302
  br i1 %exitcond303.not, label %.loopexit, label %164, !llvm.loop !35

.loopexit:                                        ; preds = %232, %..loopexit_crit_edge, %._crit_edge219
  %indvars.iv.next255.pre-phi = phi i64 [ %.pre309, %..loopexit_crit_edge ], [ %147, %._crit_edge219 ], [ %147, %232 ]
  %.1 = phi double [ %127, %..loopexit_crit_edge ], [ %.0177, %._crit_edge219 ], [ %.0177, %232 ]
  %233 = fneg double %.1
  %234 = getelementptr inbounds double, ptr %7, i64 %indvars.iv254
  store double %233, ptr %234, align 8, !tbaa !5
  %indvars.iv.next262 = add i32 %indvars.iv261, %0
  %indvars.iv.next272 = add i32 %indvars.iv271, %29
  %indvars.iv.next278 = add i32 %indvars.iv277, %29
  %indvars.iv.next298 = add nuw nsw i64 %indvars.iv297, 1
  %exitcond306.not = icmp eq i64 %indvars.iv.next255.pre-phi, %wide.trip.count305
  br i1 %exitcond306.not, label %._crit_edge238, label %40, !llvm.loop !36

._crit_edge238:                                   ; preds = %.loopexit, %._crit_edge
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_Z5dmax1dd(double noundef, double noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z4min0ii(i32 noundef, i32 noundef) local_unnamed_addr #0

; 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.unroll.disable"}
!15 = distinct !{!15, !10}
!16 = !{!17}
!17 = distinct !{!17, !18}
!18 = distinct !{!18, !"LVerDomain"}
!19 = !{!20}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !10, !22, !23}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = distinct !{!24, !10, !22}
!25 = distinct !{!25, !10, !22, !23}
!26 = distinct !{!26, !10, !23, !22}
!27 = distinct !{!27, !10}
!28 = !{!29}
!29 = distinct !{!29, !30}
!30 = distinct !{!30, !"LVerDomain"}
!31 = !{!32}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !10, !22, !23}
!34 = distinct !{!34, !10, !22}
!35 = distinct !{!35, !10}
!36 = distinct !{!36, !10}


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