; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (dlaed9)

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

@.str = external hidden unnamed_addr constant [7 x i8], align 1
@c__1 = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dlaed9_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) #0 {
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  store ptr %0, ptr %14, align 8, !tbaa !5
  store ptr %1, ptr %15, align 8, !tbaa !5
  store ptr %2, ptr %16, align 8, !tbaa !5
  store ptr %3, ptr %17, align 8, !tbaa !5
  store ptr %4, ptr %18, align 8, !tbaa !5
  store ptr %5, ptr %19, align 8, !tbaa !5
  store ptr %6, ptr %20, align 8, !tbaa !5
  store ptr %7, ptr %21, align 8, !tbaa !5
  store ptr %8, ptr %22, align 8, !tbaa !5
  store ptr %9, ptr %23, align 8, !tbaa !5
  store ptr %10, ptr %24, align 8, !tbaa !5
  store ptr %11, ptr %25, align 8, !tbaa !5
  store ptr %12, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %38 = load ptr, ptr %18, align 8, !tbaa !5
  %39 = getelementptr inbounds double, ptr %38, i32 -1
  store ptr %39, ptr %18, align 8, !tbaa !5
  %40 = load ptr, ptr %20, align 8, !tbaa !5
  %41 = load i32, ptr %40, align 4, !tbaa !9
  store i32 %41, ptr %27, align 4, !tbaa !9
  %42 = load i32, ptr %27, align 4, !tbaa !9
  %43 = mul nsw i32 %42, 1
  %44 = add nsw i32 1, %43
  store i32 %44, ptr %28, align 4, !tbaa !9
  %45 = load i32, ptr %28, align 4, !tbaa !9
  %46 = load ptr, ptr %19, align 8, !tbaa !5
  %47 = sext i32 %45 to i64
  %48 = sub i64 0, %47
  %49 = getelementptr inbounds double, ptr %46, i64 %48
  store ptr %49, ptr %19, align 8, !tbaa !5
  %50 = load ptr, ptr %22, align 8, !tbaa !5
  %51 = getelementptr inbounds double, ptr %50, i32 -1
  store ptr %51, ptr %22, align 8, !tbaa !5
  %52 = load ptr, ptr %23, align 8, !tbaa !5
  %53 = getelementptr inbounds double, ptr %52, i32 -1
  store ptr %53, ptr %23, align 8, !tbaa !5
  %54 = load ptr, ptr %25, align 8, !tbaa !5
  %55 = load i32, ptr %54, align 4, !tbaa !9
  store i32 %55, ptr %29, align 4, !tbaa !9
  %56 = load i32, ptr %29, align 4, !tbaa !9
  %57 = mul nsw i32 %56, 1
  %58 = add nsw i32 1, %57
  store i32 %58, ptr %30, align 4, !tbaa !9
  %59 = load i32, ptr %30, align 4, !tbaa !9
  %60 = load ptr, ptr %24, align 8, !tbaa !5
  %61 = sext i32 %59 to i64
  %62 = sub i64 0, %61
  %63 = getelementptr inbounds double, ptr %60, i64 %62
  store ptr %63, ptr %24, align 8, !tbaa !5
  %64 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 0, ptr %64, align 4, !tbaa !9
  %65 = load ptr, ptr %14, align 8, !tbaa !5
  %66 = load i32, ptr %65, align 4, !tbaa !9
  %67 = icmp slt i32 %66, 0
  br i1 %67, label %68, label %70

68:                                               ; preds = %13
  %69 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 -1, ptr %69, align 4, !tbaa !9
  br label %160

70:                                               ; preds = %13
  %71 = load ptr, ptr %15, align 8, !tbaa !5
  %72 = load i32, ptr %71, align 4, !tbaa !9
  %73 = icmp slt i32 %72, 1
  br i1 %73, label %87, label %74

74:                                               ; preds = %70
  %75 = load ptr, ptr %15, align 8, !tbaa !5
  %76 = load i32, ptr %75, align 4, !tbaa !9
  %77 = load ptr, ptr %14, align 8, !tbaa !5
  %78 = load i32, ptr %77, align 4, !tbaa !9
  %79 = icmp sge i32 1, %78
  br i1 %79, label %80, label %81

80:                                               ; preds = %74
  br label %84

81:                                               ; preds = %74
  %82 = load ptr, ptr %14, align 8, !tbaa !5
  %83 = load i32, ptr %82, align 4, !tbaa !9
  br label %84

84:                                               ; preds = %81, %80
  %85 = phi i32 [ 1, %80 ], [ %83, %81 ]
  %86 = icmp sgt i32 %76, %85
  br i1 %86, label %87, label %89

87:                                               ; preds = %84, %70
  %88 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 -2, ptr %88, align 4, !tbaa !9
  br label %159

89:                                               ; preds = %84
  %90 = load ptr, ptr %16, align 8, !tbaa !5
  %91 = load i32, ptr %90, align 4, !tbaa !9
  %92 = icmp sge i32 1, %91
  br i1 %92, label %93, label %94

93:                                               ; preds = %89
  br label %97

94:                                               ; preds = %89
  %95 = load ptr, ptr %16, align 8, !tbaa !5
  %96 = load i32, ptr %95, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %94, %93
  %98 = phi i32 [ 1, %93 ], [ %96, %94 ]
  %99 = load ptr, ptr %15, align 8, !tbaa !5
  %100 = load i32, ptr %99, align 4, !tbaa !9
  %101 = icmp slt i32 %98, %100
  br i1 %101, label %115, label %102

102:                                              ; preds = %97
  %103 = load ptr, ptr %16, align 8, !tbaa !5
  %104 = load i32, ptr %103, align 4, !tbaa !9
  %105 = load ptr, ptr %14, align 8, !tbaa !5
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = icmp sge i32 1, %106
  br i1 %107, label %108, label %109

108:                                              ; preds = %102
  br label %112

109:                                              ; preds = %102
  %110 = load ptr, ptr %14, align 8, !tbaa !5
  %111 = load i32, ptr %110, align 4, !tbaa !9
  br label %112

112:                                              ; preds = %109, %108
  %113 = phi i32 [ 1, %108 ], [ %111, %109 ]
  %114 = icmp sgt i32 %104, %113
  br i1 %114, label %115, label %117

115:                                              ; preds = %112, %97
  %116 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 -3, ptr %116, align 4, !tbaa !9
  br label %158

117:                                              ; preds = %112
  %118 = load ptr, ptr %17, align 8, !tbaa !5
  %119 = load i32, ptr %118, align 4, !tbaa !9
  %120 = load ptr, ptr %14, align 8, !tbaa !5
  %121 = load i32, ptr %120, align 4, !tbaa !9
  %122 = icmp slt i32 %119, %121
  br i1 %122, label %123, label %125

123:                                              ; preds = %117
  %124 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 -4, ptr %124, align 4, !tbaa !9
  br label %157

125:                                              ; preds = %117
  %126 = load ptr, ptr %20, align 8, !tbaa !5
  %127 = load i32, ptr %126, align 4, !tbaa !9
  %128 = load ptr, ptr %14, align 8, !tbaa !5
  %129 = load i32, ptr %128, align 4, !tbaa !9
  %130 = icmp sge i32 1, %129
  br i1 %130, label %131, label %132

131:                                              ; preds = %125
  br label %135

132:                                              ; preds = %125
  %133 = load ptr, ptr %14, align 8, !tbaa !5
  %134 = load i32, ptr %133, align 4, !tbaa !9
  br label %135

135:                                              ; preds = %132, %131
  %136 = phi i32 [ 1, %131 ], [ %134, %132 ]
  %137 = icmp slt i32 %127, %136
  br i1 %137, label %138, label %140

138:                                              ; preds = %135
  %139 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 -7, ptr %139, align 4, !tbaa !9
  br label %156

140:                                              ; preds = %135
  %141 = load ptr, ptr %25, align 8, !tbaa !5
  %142 = load i32, ptr %141, align 4, !tbaa !9
  %143 = load ptr, ptr %14, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 4, !tbaa !9
  %145 = icmp sge i32 1, %144
  br i1 %145, label %146, label %147

146:                                              ; preds = %140
  br label %150

147:                                              ; preds = %140
  %148 = load ptr, ptr %14, align 8, !tbaa !5
  %149 = load i32, ptr %148, align 4, !tbaa !9
  br label %150

150:                                              ; preds = %147, %146
  %151 = phi i32 [ 1, %146 ], [ %149, %147 ]
  %152 = icmp slt i32 %142, %151
  br i1 %152, label %153, label %155

153:                                              ; preds = %150
  %154 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 -12, ptr %154, align 4, !tbaa !9
  br label %155

155:                                              ; preds = %153, %150
  br label %156

156:                                              ; preds = %155, %138
  br label %157

157:                                              ; preds = %156, %123
  br label %158

158:                                              ; preds = %157, %115
  br label %159

159:                                              ; preds = %158, %87
  br label %160

160:                                              ; preds = %159, %68
  %161 = load ptr, ptr %26, align 8, !tbaa !5
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %169

164:                                              ; preds = %160
  %165 = load ptr, ptr %26, align 8, !tbaa !5
  %166 = load i32, ptr %165, align 4, !tbaa !9
  %167 = sub nsw i32 0, %166
  store i32 %167, ptr %31, align 4, !tbaa !9
  %168 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %31, i32 noundef 6)
  store i32 1, ptr %37, align 4
  br label %533

169:                                              ; preds = %160
  %170 = load ptr, ptr %14, align 8, !tbaa !5
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %172 = icmp eq i32 %171, 0
  br i1 %172, label %173, label %174

173:                                              ; preds = %169
  store i32 1, ptr %37, align 4
  br label %533

174:                                              ; preds = %169
  %175 = load ptr, ptr %17, align 8, !tbaa !5
  %176 = load i32, ptr %175, align 4, !tbaa !9
  store i32 %176, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %177

177:                                              ; preds = %201, %174
  %178 = load i32, ptr %35, align 4, !tbaa !9
  %179 = load i32, ptr %31, align 4, !tbaa !9
  %180 = icmp sle i32 %178, %179
  br i1 %180, label %181, label %204

181:                                              ; preds = %177
  %182 = load ptr, ptr %22, align 8, !tbaa !5
  %183 = load i32, ptr %35, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds double, ptr %182, i64 %184
  %186 = load ptr, ptr %22, align 8, !tbaa !5
  %187 = load i32, ptr %35, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds double, ptr %186, i64 %188
  %190 = call double @dlamc3_(ptr noundef %185, ptr noundef %189)
  %191 = load ptr, ptr %22, align 8, !tbaa !5
  %192 = load i32, ptr %35, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds double, ptr %191, i64 %193
  %195 = load double, ptr %194, align 8, !tbaa !11
  %196 = fsub double %190, %195
  %197 = load ptr, ptr %22, align 8, !tbaa !5
  %198 = load i32, ptr %35, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds double, ptr %197, i64 %199
  store double %196, ptr %200, align 8, !tbaa !11
  br label %201

201:                                              ; preds = %181
  %202 = load i32, ptr %35, align 4, !tbaa !9
  %203 = add nsw i32 %202, 1
  store i32 %203, ptr %35, align 4, !tbaa !9
  br label %177, !llvm.loop !13

204:                                              ; preds = %177
  %205 = load ptr, ptr %16, align 8, !tbaa !5
  %206 = load i32, ptr %205, align 4, !tbaa !9
  store i32 %206, ptr %31, align 4, !tbaa !9
  %207 = load ptr, ptr %15, align 8, !tbaa !5
  %208 = load i32, ptr %207, align 4, !tbaa !9
  store i32 %208, ptr %36, align 4, !tbaa !9
  br label %209

209:                                              ; preds = %237, %204
  %210 = load i32, ptr %36, align 4, !tbaa !9
  %211 = load i32, ptr %31, align 4, !tbaa !9
  %212 = icmp sle i32 %210, %211
  br i1 %212, label %213, label %240

213:                                              ; preds = %209
  %214 = load ptr, ptr %14, align 8, !tbaa !5
  %215 = load ptr, ptr %22, align 8, !tbaa !5
  %216 = getelementptr inbounds double, ptr %215, i64 1
  %217 = load ptr, ptr %23, align 8, !tbaa !5
  %218 = getelementptr inbounds double, ptr %217, i64 1
  %219 = load ptr, ptr %19, align 8, !tbaa !5
  %220 = load i32, ptr %36, align 4, !tbaa !9
  %221 = load i32, ptr %27, align 4, !tbaa !9
  %222 = mul nsw i32 %220, %221
  %223 = add nsw i32 %222, 1
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %219, i64 %224
  %226 = load ptr, ptr %21, align 8, !tbaa !5
  %227 = load ptr, ptr %18, align 8, !tbaa !5
  %228 = load i32, ptr %36, align 4, !tbaa !9
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds double, ptr %227, i64 %229
  %231 = load ptr, ptr %26, align 8, !tbaa !5
  call void @dlaed4_(ptr noundef %214, ptr noundef %36, ptr noundef %216, ptr noundef %218, ptr noundef %225, ptr noundef %226, ptr noundef %230, ptr noundef %231)
  %232 = load ptr, ptr %26, align 8, !tbaa !5
  %233 = load i32, ptr %232, align 4, !tbaa !9
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %235, label %236

235:                                              ; preds = %213
  br label %532

236:                                              ; preds = %213
  br label %237

237:                                              ; preds = %236
  %238 = load i32, ptr %36, align 4, !tbaa !9
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %36, align 4, !tbaa !9
  br label %209, !llvm.loop !15

240:                                              ; preds = %209
  %241 = load ptr, ptr %14, align 8, !tbaa !5
  %242 = load i32, ptr %241, align 4, !tbaa !9
  %243 = icmp eq i32 %242, 1
  br i1 %243, label %248, label %244

244:                                              ; preds = %240
  %245 = load ptr, ptr %14, align 8, !tbaa !5
  %246 = load i32, ptr %245, align 4, !tbaa !9
  %247 = icmp eq i32 %246, 2
  br i1 %247, label %248, label %288

248:                                              ; preds = %244, %240
  %249 = load ptr, ptr %14, align 8, !tbaa !5
  %250 = load i32, ptr %249, align 4, !tbaa !9
  store i32 %250, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %251

251:                                              ; preds = %284, %248
  %252 = load i32, ptr %35, align 4, !tbaa !9
  %253 = load i32, ptr %31, align 4, !tbaa !9
  %254 = icmp sle i32 %252, %253
  br i1 %254, label %255, label %287

255:                                              ; preds = %251
  %256 = load ptr, ptr %14, align 8, !tbaa !5
  %257 = load i32, ptr %256, align 4, !tbaa !9
  store i32 %257, ptr %32, align 4, !tbaa !9
  store i32 1, ptr %36, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %280, %255
  %259 = load i32, ptr %36, align 4, !tbaa !9
  %260 = load i32, ptr %32, align 4, !tbaa !9
  %261 = icmp sle i32 %259, %260
  br i1 %261, label %262, label %283

262:                                              ; preds = %258
  %263 = load ptr, ptr %19, align 8, !tbaa !5
  %264 = load i32, ptr %36, align 4, !tbaa !9
  %265 = load i32, ptr %35, align 4, !tbaa !9
  %266 = load i32, ptr %27, align 4, !tbaa !9
  %267 = mul nsw i32 %265, %266
  %268 = add nsw i32 %264, %267
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds double, ptr %263, i64 %269
  %271 = load double, ptr %270, align 8, !tbaa !11
  %272 = load ptr, ptr %24, align 8, !tbaa !5
  %273 = load i32, ptr %36, align 4, !tbaa !9
  %274 = load i32, ptr %35, align 4, !tbaa !9
  %275 = load i32, ptr %29, align 4, !tbaa !9
  %276 = mul nsw i32 %274, %275
  %277 = add nsw i32 %273, %276
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds double, ptr %272, i64 %278
  store double %271, ptr %279, align 8, !tbaa !11
  br label %280

280:                                              ; preds = %262
  %281 = load i32, ptr %36, align 4, !tbaa !9
  %282 = add nsw i32 %281, 1
  store i32 %282, ptr %36, align 4, !tbaa !9
  br label %258, !llvm.loop !16

283:                                              ; preds = %258
  br label %284

284:                                              ; preds = %283
  %285 = load i32, ptr %35, align 4, !tbaa !9
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %35, align 4, !tbaa !9
  br label %251, !llvm.loop !17

287:                                              ; preds = %251
  br label %532

288:                                              ; preds = %244
  %289 = load ptr, ptr %14, align 8, !tbaa !5
  %290 = load ptr, ptr %23, align 8, !tbaa !5
  %291 = getelementptr inbounds double, ptr %290, i64 1
  %292 = load ptr, ptr %24, align 8, !tbaa !5
  %293 = load i32, ptr %30, align 4, !tbaa !9
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds double, ptr %292, i64 %294
  call void @dcopy_(ptr noundef %289, ptr noundef %291, ptr noundef @c__1, ptr noundef %295, ptr noundef @c__1)
  %296 = load ptr, ptr %20, align 8, !tbaa !5
  %297 = load i32, ptr %296, align 4, !tbaa !9
  %298 = add nsw i32 %297, 1
  store i32 %298, ptr %31, align 4, !tbaa !9
  %299 = load ptr, ptr %14, align 8, !tbaa !5
  %300 = load ptr, ptr %19, align 8, !tbaa !5
  %301 = load i32, ptr %28, align 4, !tbaa !9
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds double, ptr %300, i64 %302
  %304 = load ptr, ptr %23, align 8, !tbaa !5
  %305 = getelementptr inbounds double, ptr %304, i64 1
  call void @dcopy_(ptr noundef %299, ptr noundef %303, ptr noundef %31, ptr noundef %305, ptr noundef @c__1)
  %306 = load ptr, ptr %14, align 8, !tbaa !5
  %307 = load i32, ptr %306, align 4, !tbaa !9
  store i32 %307, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %36, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %391, %288
  %309 = load i32, ptr %36, align 4, !tbaa !9
  %310 = load i32, ptr %31, align 4, !tbaa !9
  %311 = icmp sle i32 %309, %310
  br i1 %311, label %312, label %394

312:                                              ; preds = %308
  %313 = load i32, ptr %36, align 4, !tbaa !9
  %314 = sub nsw i32 %313, 1
  store i32 %314, ptr %32, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %347, %312
  %316 = load i32, ptr %35, align 4, !tbaa !9
  %317 = load i32, ptr %32, align 4, !tbaa !9
  %318 = icmp sle i32 %316, %317
  br i1 %318, label %319, label %350

319:                                              ; preds = %315
  %320 = load ptr, ptr %19, align 8, !tbaa !5
  %321 = load i32, ptr %35, align 4, !tbaa !9
  %322 = load i32, ptr %36, align 4, !tbaa !9
  %323 = load i32, ptr %27, align 4, !tbaa !9
  %324 = mul nsw i32 %322, %323
  %325 = add nsw i32 %321, %324
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds double, ptr %320, i64 %326
  %328 = load double, ptr %327, align 8, !tbaa !11
  %329 = load ptr, ptr %22, align 8, !tbaa !5
  %330 = load i32, ptr %35, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds double, ptr %329, i64 %331
  %333 = load double, ptr %332, align 8, !tbaa !11
  %334 = load ptr, ptr %22, align 8, !tbaa !5
  %335 = load i32, ptr %36, align 4, !tbaa !9
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds double, ptr %334, i64 %336
  %338 = load double, ptr %337, align 8, !tbaa !11
  %339 = fsub double %333, %338
  %340 = fdiv double %328, %339
  %341 = load ptr, ptr %23, align 8, !tbaa !5
  %342 = load i32, ptr %35, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds double, ptr %341, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !11
  %346 = fmul double %345, %340
  store double %346, ptr %344, align 8, !tbaa !11
  br label %347

347:                                              ; preds = %319
  %348 = load i32, ptr %35, align 4, !tbaa !9
  %349 = add nsw i32 %348, 1
  store i32 %349, ptr %35, align 4, !tbaa !9
  br label %315, !llvm.loop !18

350:                                              ; preds = %315
  %351 = load ptr, ptr %14, align 8, !tbaa !5
  %352 = load i32, ptr %351, align 4, !tbaa !9
  store i32 %352, ptr %32, align 4, !tbaa !9
  %353 = load i32, ptr %36, align 4, !tbaa !9
  %354 = add nsw i32 %353, 1
  store i32 %354, ptr %35, align 4, !tbaa !9
  br label %355

355:                                              ; preds = %387, %350
  %356 = load i32, ptr %35, align 4, !tbaa !9
  %357 = load i32, ptr %32, align 4, !tbaa !9
  %358 = icmp sle i32 %356, %357
  br i1 %358, label %359, label %390

359:                                              ; preds = %355
  %360 = load ptr, ptr %19, align 8, !tbaa !5
  %361 = load i32, ptr %35, align 4, !tbaa !9
  %362 = load i32, ptr %36, align 4, !tbaa !9
  %363 = load i32, ptr %27, align 4, !tbaa !9
  %364 = mul nsw i32 %362, %363
  %365 = add nsw i32 %361, %364
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds double, ptr %360, i64 %366
  %368 = load double, ptr %367, align 8, !tbaa !11
  %369 = load ptr, ptr %22, align 8, !tbaa !5
  %370 = load i32, ptr %35, align 4, !tbaa !9
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds double, ptr %369, i64 %371
  %373 = load double, ptr %372, align 8, !tbaa !11
  %374 = load ptr, ptr %22, align 8, !tbaa !5
  %375 = load i32, ptr %36, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds double, ptr %374, i64 %376
  %378 = load double, ptr %377, align 8, !tbaa !11
  %379 = fsub double %373, %378
  %380 = fdiv double %368, %379
  %381 = load ptr, ptr %23, align 8, !tbaa !5
  %382 = load i32, ptr %35, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds double, ptr %381, i64 %383
  %385 = load double, ptr %384, align 8, !tbaa !11
  %386 = fmul double %385, %380
  store double %386, ptr %384, align 8, !tbaa !11
  br label %387

387:                                              ; preds = %359
  %388 = load i32, ptr %35, align 4, !tbaa !9
  %389 = add nsw i32 %388, 1
  store i32 %389, ptr %35, align 4, !tbaa !9
  br label %355, !llvm.loop !19

390:                                              ; preds = %355
  br label %391

391:                                              ; preds = %390
  %392 = load i32, ptr %36, align 4, !tbaa !9
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %36, align 4, !tbaa !9
  br label %308, !llvm.loop !20

394:                                              ; preds = %308
  %395 = load ptr, ptr %14, align 8, !tbaa !5
  %396 = load i32, ptr %395, align 4, !tbaa !9
  store i32 %396, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %397

397:                                              ; preds = %444, %394
  %398 = load i32, ptr %35, align 4, !tbaa !9
  %399 = load i32, ptr %31, align 4, !tbaa !9
  %400 = icmp sle i32 %398, %399
  br i1 %400, label %401, label %447

401:                                              ; preds = %397
  %402 = load ptr, ptr %23, align 8, !tbaa !5
  %403 = load i32, ptr %35, align 4, !tbaa !9
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds double, ptr %402, i64 %404
  %406 = load double, ptr %405, align 8, !tbaa !11
  %407 = fneg double %406
  %408 = call double @sqrt(double noundef %407) #4
  store double %408, ptr %33, align 8, !tbaa !11
  %409 = load ptr, ptr %24, align 8, !tbaa !5
  %410 = load i32, ptr %35, align 4, !tbaa !9
  %411 = load i32, ptr %29, align 4, !tbaa !9
  %412 = add nsw i32 %410, %411
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds double, ptr %409, i64 %413
  %415 = load double, ptr %414, align 8, !tbaa !11
  %416 = fcmp oge double %415, 0.000000e+00
  br i1 %416, label %417, label %427

417:                                              ; preds = %401
  %418 = load double, ptr %33, align 8, !tbaa !11
  %419 = fcmp oge double %418, 0.000000e+00
  br i1 %419, label %420, label %422

420:                                              ; preds = %417
  %421 = load double, ptr %33, align 8, !tbaa !11
  br label %425

422:                                              ; preds = %417
  %423 = load double, ptr %33, align 8, !tbaa !11
  %424 = fneg double %423
  br label %425

425:                                              ; preds = %422, %420
  %426 = phi double [ %421, %420 ], [ %424, %422 ]
  br label %438

427:                                              ; preds = %401
  %428 = load double, ptr %33, align 8, !tbaa !11
  %429 = fcmp oge double %428, 0.000000e+00
  br i1 %429, label %430, label %432

430:                                              ; preds = %427
  %431 = load double, ptr %33, align 8, !tbaa !11
  br label %435

432:                                              ; preds = %427
  %433 = load double, ptr %33, align 8, !tbaa !11
  %434 = fneg double %433
  br label %435

435:                                              ; preds = %432, %430
  %436 = phi double [ %431, %430 ], [ %434, %432 ]
  %437 = fneg double %436
  br label %438

438:                                              ; preds = %435, %425
  %439 = phi double [ %426, %425 ], [ %437, %435 ]
  %440 = load ptr, ptr %23, align 8, !tbaa !5
  %441 = load i32, ptr %35, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds double, ptr %440, i64 %442
  store double %439, ptr %443, align 8, !tbaa !11
  br label %444

444:                                              ; preds = %438
  %445 = load i32, ptr %35, align 4, !tbaa !9
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %35, align 4, !tbaa !9
  br label %397, !llvm.loop !21

447:                                              ; preds = %397
  %448 = load ptr, ptr %14, align 8, !tbaa !5
  %449 = load i32, ptr %448, align 4, !tbaa !9
  store i32 %449, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %36, align 4, !tbaa !9
  br label %450

450:                                              ; preds = %528, %447
  %451 = load i32, ptr %36, align 4, !tbaa !9
  %452 = load i32, ptr %31, align 4, !tbaa !9
  %453 = icmp sle i32 %451, %452
  br i1 %453, label %454, label %531

454:                                              ; preds = %450
  %455 = load ptr, ptr %14, align 8, !tbaa !5
  %456 = load i32, ptr %455, align 4, !tbaa !9
  store i32 %456, ptr %32, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %457

457:                                              ; preds = %485, %454
  %458 = load i32, ptr %35, align 4, !tbaa !9
  %459 = load i32, ptr %32, align 4, !tbaa !9
  %460 = icmp sle i32 %458, %459
  br i1 %460, label %461, label %488

461:                                              ; preds = %457
  %462 = load ptr, ptr %23, align 8, !tbaa !5
  %463 = load i32, ptr %35, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds double, ptr %462, i64 %464
  %466 = load double, ptr %465, align 8, !tbaa !11
  %467 = load ptr, ptr %19, align 8, !tbaa !5
  %468 = load i32, ptr %35, align 4, !tbaa !9
  %469 = load i32, ptr %36, align 4, !tbaa !9
  %470 = load i32, ptr %27, align 4, !tbaa !9
  %471 = mul nsw i32 %469, %470
  %472 = add nsw i32 %468, %471
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds double, ptr %467, i64 %473
  %475 = load double, ptr %474, align 8, !tbaa !11
  %476 = fdiv double %466, %475
  %477 = load ptr, ptr %19, align 8, !tbaa !5
  %478 = load i32, ptr %35, align 4, !tbaa !9
  %479 = load i32, ptr %36, align 4, !tbaa !9
  %480 = load i32, ptr %27, align 4, !tbaa !9
  %481 = mul nsw i32 %479, %480
  %482 = add nsw i32 %478, %481
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds double, ptr %477, i64 %483
  store double %476, ptr %484, align 8, !tbaa !11
  br label %485

485:                                              ; preds = %461
  %486 = load i32, ptr %35, align 4, !tbaa !9
  %487 = add nsw i32 %486, 1
  store i32 %487, ptr %35, align 4, !tbaa !9
  br label %457, !llvm.loop !22

488:                                              ; preds = %457
  %489 = load ptr, ptr %14, align 8, !tbaa !5
  %490 = load ptr, ptr %19, align 8, !tbaa !5
  %491 = load i32, ptr %36, align 4, !tbaa !9
  %492 = load i32, ptr %27, align 4, !tbaa !9
  %493 = mul nsw i32 %491, %492
  %494 = add nsw i32 %493, 1
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds double, ptr %490, i64 %495
  %497 = call double @dnrm2_(ptr noundef %489, ptr noundef %496, ptr noundef @c__1)
  store double %497, ptr %34, align 8, !tbaa !11
  %498 = load ptr, ptr %14, align 8, !tbaa !5
  %499 = load i32, ptr %498, align 4, !tbaa !9
  store i32 %499, ptr %32, align 4, !tbaa !9
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %500

500:                                              ; preds = %524, %488
  %501 = load i32, ptr %35, align 4, !tbaa !9
  %502 = load i32, ptr %32, align 4, !tbaa !9
  %503 = icmp sle i32 %501, %502
  br i1 %503, label %504, label %527

504:                                              ; preds = %500
  %505 = load ptr, ptr %19, align 8, !tbaa !5
  %506 = load i32, ptr %35, align 4, !tbaa !9
  %507 = load i32, ptr %36, align 4, !tbaa !9
  %508 = load i32, ptr %27, align 4, !tbaa !9
  %509 = mul nsw i32 %507, %508
  %510 = add nsw i32 %506, %509
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds double, ptr %505, i64 %511
  %513 = load double, ptr %512, align 8, !tbaa !11
  %514 = load double, ptr %34, align 8, !tbaa !11
  %515 = fdiv double %513, %514
  %516 = load ptr, ptr %24, align 8, !tbaa !5
  %517 = load i32, ptr %35, align 4, !tbaa !9
  %518 = load i32, ptr %36, align 4, !tbaa !9
  %519 = load i32, ptr %29, align 4, !tbaa !9
  %520 = mul nsw i32 %518, %519
  %521 = add nsw i32 %517, %520
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds double, ptr %516, i64 %522
  store double %515, ptr %523, align 8, !tbaa !11
  br label %524

524:                                              ; preds = %504
  %525 = load i32, ptr %35, align 4, !tbaa !9
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %35, align 4, !tbaa !9
  br label %500, !llvm.loop !23

527:                                              ; preds = %500
  br label %528

528:                                              ; preds = %527
  %529 = load i32, ptr %36, align 4, !tbaa !9
  %530 = add nsw i32 %529, 1
  store i32 %530, ptr %36, align 4, !tbaa !9
  br label %450, !llvm.loop !24

531:                                              ; preds = %450
  br label %532

532:                                              ; preds = %531, %287, %235
  store i32 1, ptr %37, align 4
  br label %533

533:                                              ; preds = %532, %173, %164
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  ret void
}

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

declare i32 @xerbla_(ptr noundef, ptr noundef, i32 noundef) #2

declare double @dlamc3_(ptr noundef, ptr noundef) #2

declare void @dlaed4_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

declare double @dnrm2_(ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}


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

@.str = external hidden unnamed_addr constant [7 x i8], align 1
@c__1 = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dlaed9_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr noundef %4, ptr noundef %5, ptr nocapture noundef readonly %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr nocapture noundef readonly %11, ptr noundef %12) local_unnamed_addr #0 {
  %14 = ptrtoint ptr %5 to i64
  %15 = ptrtoint ptr %10 to i64
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #5
  %18 = getelementptr inbounds i8, ptr %4, i64 -8
  %19 = load i32, ptr %6, align 4, !tbaa !5
  %narrow163 = xor i32 %19, -1
  %20 = sext i32 %narrow163 to i64
  %21 = getelementptr inbounds double, ptr %5, i64 %20
  %22 = getelementptr inbounds i8, ptr %8, i64 -8
  %23 = getelementptr inbounds i8, ptr %9, i64 -8
  %24 = load i32, ptr %11, align 4, !tbaa !5
  %narrow = xor i32 %24, -1
  %25 = sext i32 %narrow to i64
  %26 = getelementptr inbounds double, ptr %10, i64 %25
  store i32 0, ptr %12, align 4, !tbaa !5
  %27 = load i32, ptr %0, align 4, !tbaa !5
  %28 = icmp slt i32 %27, 0
  br i1 %28, label %.thread, label %29

29:                                               ; preds = %13
  %30 = load i32, ptr %1, align 4, !tbaa !5
  %31 = icmp slt i32 %30, 1
  br i1 %31, label %.thread, label %32

32:                                               ; preds = %29
  %spec.select = tail call i32 @llvm.umax.i32(i32 %27, i32 1)
  %33 = icmp ugt i32 %30, %spec.select
  br i1 %33, label %.thread, label %34

34:                                               ; preds = %32
  %35 = load i32, ptr %2, align 4, !tbaa !5
  %spec.select177 = tail call i32 @llvm.smax.i32(i32 %35, i32 1)
  %36 = icmp ult i32 %spec.select177, %30
  %37 = icmp sgt i32 %35, %spec.select
  %or.cond = or i1 %37, %36
  br i1 %or.cond, label %.thread, label %38

38:                                               ; preds = %34
  %39 = load i32, ptr %3, align 4, !tbaa !5
  %40 = icmp slt i32 %39, %27
  br i1 %40, label %.thread, label %41

41:                                               ; preds = %38
  %42 = load i32, ptr %6, align 4, !tbaa !5
  %43 = icmp slt i32 %42, %spec.select
  br i1 %43, label %.thread, label %44

44:                                               ; preds = %41
  %45 = load i32, ptr %11, align 4, !tbaa !5
  %46 = icmp slt i32 %45, %spec.select
  br i1 %46, label %.thread, label %48

.thread:                                          ; preds = %44, %41, %38, %34, %29, %32, %13
  %.sink = phi i32 [ -1, %13 ], [ -2, %32 ], [ -2, %29 ], [ -3, %34 ], [ -4, %38 ], [ -7, %41 ], [ -12, %44 ]
  %.neg279 = phi i32 [ 1, %13 ], [ 2, %32 ], [ 2, %29 ], [ 3, %34 ], [ 4, %38 ], [ 7, %41 ], [ 12, %44 ]
  store i32 %.sink, ptr %12, align 4, !tbaa !5
  store i32 %.neg279, ptr %16, align 4, !tbaa !5
  %47 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16, i32 noundef 6) #5
  br label %.loopexit

48:                                               ; preds = %44
  %49 = icmp eq i32 %27, 0
  br i1 %49, label %.loopexit, label %50

50:                                               ; preds = %48
  %.not161186 = icmp eq i32 %39, 0
  br i1 %.not161186, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %50
  %51 = add nuw i32 %39, 1
  %wide.trip.count = zext i32 %51 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %52 = getelementptr inbounds double, ptr %22, i64 %indvars.iv
  %53 = tail call double @dlamc3_(ptr noundef nonnull %52, ptr noundef nonnull %52) #5
  %54 = load double, ptr %52, align 8, !tbaa !9
  %55 = fsub double %53, %54
  store double %55, ptr %52, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !11

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.pre = load i32, ptr %2, align 4, !tbaa !5
  %.pre273 = load i32, ptr %1, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %50
  %56 = phi i32 [ %.pre273, %._crit_edge.loopexit ], [ %30, %50 ]
  %57 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %35, %50 ]
  store i32 %57, ptr %16, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %21, i64 8
  store i32 %56, ptr %17, align 4, !tbaa !5
  %.not162188 = icmp sgt i32 %56, %57
  br i1 %.not162188, label %._crit_edge192, label %.lr.ph191

.lr.ph191:                                        ; preds = %._crit_edge, %63
  %storemerge189 = phi i32 [ %65, %63 ], [ %56, %._crit_edge ]
  %58 = mul nsw i32 %storemerge189, %19
  %59 = sext i32 %58 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %59
  %60 = sext i32 %storemerge189 to i64
  %61 = getelementptr inbounds double, ptr %18, i64 %60
  call void @dlaed4_(ptr noundef nonnull %0, ptr noundef nonnull %17, ptr noundef %8, ptr noundef %9, ptr noundef %gep, ptr noundef %7, ptr noundef nonnull %61, ptr noundef nonnull %12) #5
  %62 = load i32, ptr %12, align 4, !tbaa !5
  %.not176 = icmp eq i32 %62, 0
  br i1 %.not176, label %63, label %.loopexit

63:                                               ; preds = %.lr.ph191
  %64 = load i32, ptr %17, align 4, !tbaa !5
  %65 = add nsw i32 %64, 1
  store i32 %65, ptr %17, align 4, !tbaa !5
  %66 = load i32, ptr %16, align 4, !tbaa !5
  %.not162.not = icmp slt i32 %64, %66
  br i1 %.not162.not, label %.lr.ph191, label %._crit_edge192, !llvm.loop !13

._crit_edge192:                                   ; preds = %63, %._crit_edge
  %67 = load i32, ptr %0, align 4, !tbaa !5
  %.off = add i32 %67, -1
  %switch = icmp ult i32 %.off, 2
  br i1 %switch, label %.preheader.preheader, label %75

.preheader.preheader:                             ; preds = %._crit_edge192
  %68 = add nuw nsw i32 %67, 1
  %69 = sext i32 %19 to i64
  %70 = sext i32 %24 to i64
  %invariant.gep295 = getelementptr double, ptr %21, i64 %69
  %invariant.gep297 = getelementptr double, ptr %26, i64 %70
  %gep296 = getelementptr i8, ptr %invariant.gep295, i64 8
  %71 = load double, ptr %gep296, align 8, !tbaa !9
  %gep298 = getelementptr i8, ptr %invariant.gep297, i64 8
  store double %71, ptr %gep298, align 8, !tbaa !9
  %cond = icmp eq i32 %68, 2
  br i1 %cond, label %.loopexit, label %._crit_edge227

._crit_edge227:                                   ; preds = %.preheader.preheader
  %gep296.1 = getelementptr i8, ptr %invariant.gep295, i64 16
  %72 = load double, ptr %gep296.1, align 8, !tbaa !9
  %gep298.1 = getelementptr i8, ptr %invariant.gep297, i64 16
  store double %72, ptr %gep298.1, align 8, !tbaa !9
  %invariant.gep295.1.idx = shl nsw i64 %69, 4
  %invariant.gep295.1 = getelementptr i8, ptr %21, i64 %invariant.gep295.1.idx
  %invariant.gep297.1.idx = shl nsw i64 %70, 4
  %invariant.gep297.1 = getelementptr i8, ptr %26, i64 %invariant.gep297.1.idx
  %gep296.1402 = getelementptr i8, ptr %invariant.gep295.1, i64 8
  %73 = load double, ptr %gep296.1402, align 8, !tbaa !9
  %gep298.1403 = getelementptr i8, ptr %invariant.gep297.1, i64 8
  store double %73, ptr %gep298.1403, align 8, !tbaa !9
  %gep296.1.1 = getelementptr i8, ptr %invariant.gep295.1, i64 16
  %74 = load double, ptr %gep296.1.1, align 8, !tbaa !9
  %gep298.1.1 = getelementptr i8, ptr %invariant.gep297.1, i64 16
  store double %74, ptr %gep298.1.1, align 8, !tbaa !9
  br label %.loopexit

75:                                               ; preds = %._crit_edge192
  call void @dcopy_(ptr noundef nonnull %0, ptr noundef %9, ptr noundef nonnull @c__1, ptr noundef %10, ptr noundef nonnull @c__1) #5
  %76 = load i32, ptr %6, align 4, !tbaa !5
  %77 = add nsw i32 %76, 1
  store i32 %77, ptr %16, align 4, !tbaa !5
  call void @dcopy_(ptr noundef nonnull %0, ptr noundef %5, ptr noundef nonnull %16, ptr noundef %9, ptr noundef nonnull @c__1) #5
  %78 = load i32, ptr %0, align 4, !tbaa !5
  %.not165200 = icmp slt i32 %78, 1
  br i1 %.not165200, label %.loopexit, label %.preheader184.preheader

.preheader184.preheader:                          ; preds = %75
  %79 = zext nneg i32 %78 to i64
  %80 = sext i32 %19 to i64
  %81 = add nuw i32 %78, 1
  %wide.trip.count247 = zext i32 %81 to i64
  %wide.trip.count244 = zext nneg i32 %78 to i64
  %82 = shl nuw nsw i64 %wide.trip.count244, 3
  %scevgep301 = getelementptr i8, ptr %9, i64 %82
  %83 = shl nsw i64 %80, 3
  %84 = add nsw i64 %80, %20
  %85 = shl nsw i64 %84, 3
  %86 = add nsw i64 %83, 8
  %87 = shl nsw i64 %80, 3
  %88 = shl nuw nsw i64 %wide.trip.count247, 3
  %89 = getelementptr i8, ptr %8, i64 %88
  %scevgep304 = getelementptr i8, ptr %89, i64 -8
  %scevgep306 = getelementptr i8, ptr %8, i64 %82
  %90 = shl nsw i64 %80, 3
  %91 = add nsw i64 %80, %20
  %92 = shl nsw i64 %91, 3
  %93 = add nsw i64 %92, 8
  %94 = shl nsw i64 %80, 3
  %95 = add nsw i64 %90, 8
  %96 = shl nuw nsw i64 %wide.trip.count247, 3
  %97 = getelementptr i8, ptr %8, i64 %96
  %scevgep320 = getelementptr i8, ptr %97, i64 -8
  %98 = getelementptr i8, ptr %5, i64 %93
  %99 = getelementptr i8, ptr %5, i64 %93
  %100 = getelementptr i8, ptr %5, i64 %85
  %101 = getelementptr i8, ptr %100, i64 16
  %102 = getelementptr i8, ptr %5, i64 %85
  %103 = getelementptr i8, ptr %102, i64 %82
  %104 = getelementptr i8, ptr %103, i64 8
  %bound0325 = icmp ugt ptr %scevgep320, %9
  %bound1308 = icmp ugt ptr %scevgep301, %8
  %105 = add nsw i64 %wide.trip.count244, -1
  br label %.preheader184

.preheader184:                                    ; preds = %.preheader184.preheader, %._crit_edge199
  %indvar = phi i64 [ 0, %.preheader184.preheader ], [ %indvar.next, %._crit_edge199 ]
  %indvars.iv239 = phi i64 [ 1, %.preheader184.preheader ], [ %indvars.iv.next240, %._crit_edge199 ]
  %106 = shl nuw nsw i64 %indvar, 3
  %scevgep317 = getelementptr i8, ptr %9, i64 %106
  %107 = mul i64 %94, %indvar
  %scevgep318 = getelementptr i8, ptr %98, i64 %107
  %108 = mul i64 %95, %indvar
  %scevgep319 = getelementptr i8, ptr %99, i64 %108
  %scevgep321 = getelementptr i8, ptr %8, i64 %106
  %109 = xor i64 %indvar, -1
  %110 = add i64 %109, %wide.trip.count244
  %111 = shl nuw nsw i64 %indvar, 3
  %112 = add nuw i64 %111, 8
  %scevgep = getelementptr i8, ptr %9, i64 %112
  %113 = mul i64 %86, %indvar
  %scevgep302 = getelementptr i8, ptr %101, i64 %113
  %114 = mul i64 %87, %indvar
  %scevgep303 = getelementptr i8, ptr %104, i64 %114
  %scevgep305 = getelementptr i8, ptr %8, i64 %112
  %.not171.not193 = icmp ugt i64 %indvars.iv239, 1
  br i1 %.not171.not193, label %.lr.ph195, label %.preheader183

.lr.ph195:                                        ; preds = %.preheader184
  %115 = mul nsw i64 %indvars.iv239, %80
  %116 = getelementptr inbounds double, ptr %22, i64 %indvars.iv239
  %invariant.gep283 = getelementptr double, ptr %21, i64 %115
  %min.iters.check335 = icmp ult i64 %indvar, 2
  br i1 %min.iters.check335, label %scalar.ph334.preheader, label %vector.memcheck316

scalar.ph334.preheader:                           ; preds = %middle.block333, %vector.memcheck316, %.lr.ph195
  %indvars.iv234.ph = phi i64 [ 1, %vector.memcheck316 ], [ 1, %.lr.ph195 ], [ %ind.end339, %middle.block333 ]
  %117 = and i64 %indvars.iv239, 1
  %lcmp.mod.not.not = icmp eq i64 %117, 0
  br i1 %lcmp.mod.not.not, label %scalar.ph334.prol, label %scalar.ph334.prol.loopexit

scalar.ph334.prol:                                ; preds = %scalar.ph334.preheader
  %gep284.prol = getelementptr double, ptr %invariant.gep283, i64 %indvars.iv234.ph
  %118 = load double, ptr %gep284.prol, align 8, !tbaa !9
  %119 = getelementptr inbounds double, ptr %22, i64 %indvars.iv234.ph
  %120 = load double, ptr %119, align 8, !tbaa !9
  %121 = load double, ptr %116, align 8, !tbaa !9
  %122 = fsub double %120, %121
  %123 = fdiv double %118, %122
  %124 = getelementptr inbounds double, ptr %23, i64 %indvars.iv234.ph
  %125 = load double, ptr %124, align 8, !tbaa !9
  %126 = fmul double %125, %123
  store double %126, ptr %124, align 8, !tbaa !9
  %indvars.iv.next235.prol = add nuw nsw i64 %indvars.iv234.ph, 1
  br label %scalar.ph334.prol.loopexit

scalar.ph334.prol.loopexit:                       ; preds = %scalar.ph334.prol, %scalar.ph334.preheader
  %indvars.iv234.unr = phi i64 [ %indvars.iv234.ph, %scalar.ph334.preheader ], [ %indvars.iv.next235.prol, %scalar.ph334.prol ]
  %127 = icmp eq i64 %indvar, %indvars.iv234.ph
  br i1 %127, label %.preheader183, label %scalar.ph334.preheader.new

scalar.ph334.preheader.new:                       ; preds = %scalar.ph334.prol.loopexit
  %invariant.gep404 = getelementptr i8, ptr %invariant.gep283, i64 8
  br label %scalar.ph334

vector.memcheck316:                               ; preds = %.lr.ph195
  %bound0322 = icmp ugt ptr %scevgep319, %9
  %bound1323 = icmp ult ptr %scevgep318, %scevgep317
  %found.conflict324 = and i1 %bound0322, %bound1323
  %bound1326 = icmp ugt ptr %scevgep317, %8
  %found.conflict327 = and i1 %bound0325, %bound1326
  %conflict.rdx328 = or i1 %found.conflict324, %found.conflict327
  %bound0329 = icmp ugt ptr %scevgep321, %9
  %bound1330 = icmp ugt ptr %scevgep317, %8
  %found.conflict331 = and i1 %bound0329, %bound1330
  %conflict.rdx332 = or i1 %conflict.rdx328, %found.conflict331
  br i1 %conflict.rdx332, label %scalar.ph334.preheader, label %vector.ph336

vector.ph336:                                     ; preds = %vector.memcheck316
  %n.vec338 = and i64 %indvar, -2
  %ind.end339 = or i64 %indvar, 1
  %128 = load double, ptr %116, align 8, !tbaa !9, !alias.scope !14
  %broadcast.splatinsert346 = insertelement <2 x double> poison, double %128, i64 0
  %broadcast.splat347 = shufflevector <2 x double> %broadcast.splatinsert346, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body341

vector.body341:                                   ; preds = %vector.body341, %vector.ph336
  %index342 = phi i64 [ 0, %vector.ph336 ], [ %index.next349, %vector.body341 ]
  %offset.idx343 = or disjoint i64 %index342, 1
  %129 = getelementptr double, ptr %invariant.gep283, i64 %offset.idx343
  %wide.load344 = load <2 x double>, ptr %129, align 8, !tbaa !9, !alias.scope !17
  %130 = getelementptr double, ptr %8, i64 %index342
  %wide.load345 = load <2 x double>, ptr %130, align 8, !tbaa !9, !alias.scope !19
  %131 = fsub <2 x double> %wide.load345, %broadcast.splat347
  %132 = fdiv <2 x double> %wide.load344, %131
  %133 = getelementptr double, ptr %9, i64 %index342
  %wide.load348 = load <2 x double>, ptr %133, align 8, !tbaa !9, !alias.scope !21, !noalias !23
  %134 = fmul <2 x double> %wide.load348, %132
  store <2 x double> %134, ptr %133, align 8, !tbaa !9, !alias.scope !21, !noalias !23
  %index.next349 = add nuw i64 %index342, 2
  %135 = icmp eq i64 %index.next349, %n.vec338
  br i1 %135, label %middle.block333, label %vector.body341, !llvm.loop !24

middle.block333:                                  ; preds = %vector.body341
  %cmp.n350 = icmp eq i64 %indvar, %n.vec338
  br i1 %cmp.n350, label %.preheader183, label %scalar.ph334.preheader

.preheader183:                                    ; preds = %scalar.ph334.prol.loopexit, %scalar.ph334, %middle.block333, %.preheader184
  %.not172.not196 = icmp ult i64 %indvars.iv239, %79
  br i1 %.not172.not196, label %.lr.ph198, label %._crit_edge199

.lr.ph198:                                        ; preds = %.preheader183
  %136 = mul nsw i64 %indvars.iv239, %80
  %137 = getelementptr inbounds double, ptr %22, i64 %indvars.iv239
  %invariant.gep285 = getelementptr double, ptr %21, i64 %136
  %min.iters.check = icmp ult i64 %110, 2
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph198
  %indvars.iv241.ph = phi i64 [ %indvars.iv239, %vector.memcheck ], [ %indvars.iv239, %.lr.ph198 ], [ %ind.end, %middle.block ]
  %138 = sub i64 %wide.trip.count244, %indvars.iv241.ph
  %xtraiter395 = and i64 %138, 1
  %lcmp.mod396.not = icmp eq i64 %xtraiter395, 0
  br i1 %lcmp.mod396.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %indvars.iv.next242.prol = add nuw nsw i64 %indvars.iv241.ph, 1
  %gep286.prol = getelementptr double, ptr %invariant.gep285, i64 %indvars.iv.next242.prol
  %139 = load double, ptr %gep286.prol, align 8, !tbaa !9
  %140 = getelementptr double, ptr %8, i64 %indvars.iv241.ph
  %141 = load double, ptr %140, align 8, !tbaa !9
  %142 = load double, ptr %137, align 8, !tbaa !9
  %143 = fsub double %141, %142
  %144 = fdiv double %139, %143
  %145 = getelementptr double, ptr %9, i64 %indvars.iv241.ph
  %146 = load double, ptr %145, align 8, !tbaa !9
  %147 = fmul double %146, %144
  store double %147, ptr %145, align 8, !tbaa !9
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv241.unr = phi i64 [ %indvars.iv241.ph, %scalar.ph.preheader ], [ %indvars.iv.next242.prol, %scalar.ph.prol ]
  %148 = icmp eq i64 %indvars.iv241.ph, %105
  br i1 %148, label %._crit_edge199, label %scalar.ph

vector.memcheck:                                  ; preds = %.lr.ph198
  %bound0 = icmp ult ptr %scevgep, %scevgep303
  %bound1 = icmp ult ptr %scevgep302, %scevgep301
  %found.conflict = and i1 %bound0, %bound1
  %bound0307 = icmp ult ptr %scevgep, %scevgep304
  %found.conflict309 = and i1 %bound0307, %bound1308
  %conflict.rdx = or i1 %found.conflict, %found.conflict309
  %bound0310 = icmp ult ptr %scevgep, %scevgep306
  %bound1311 = icmp ult ptr %scevgep305, %scevgep301
  %found.conflict312 = and i1 %bound0310, %bound1311
  %conflict.rdx313 = or i1 %conflict.rdx, %found.conflict312
  br i1 %conflict.rdx313, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %110, -2
  %ind.end = add i64 %indvars.iv239, %n.vec
  %invariant.gep406 = getelementptr i8, ptr %invariant.gep285, i64 8
  %149 = load double, ptr %137, align 8, !tbaa !9, !alias.scope !27
  %broadcast.splatinsert = insertelement <2 x double> poison, double %149, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = add i64 %indvars.iv239, %index
  %gep407 = getelementptr double, ptr %invariant.gep406, i64 %offset.idx
  %wide.load = load <2 x double>, ptr %gep407, align 8, !tbaa !9, !alias.scope !30
  %150 = getelementptr double, ptr %8, i64 %offset.idx
  %wide.load314 = load <2 x double>, ptr %150, align 8, !tbaa !9, !alias.scope !32
  %151 = fsub <2 x double> %wide.load314, %broadcast.splat
  %152 = fdiv <2 x double> %wide.load, %151
  %153 = getelementptr double, ptr %9, i64 %offset.idx
  %wide.load315 = load <2 x double>, ptr %153, align 8, !tbaa !9, !alias.scope !34, !noalias !36
  %154 = fmul <2 x double> %wide.load315, %152
  store <2 x double> %154, ptr %153, align 8, !tbaa !9, !alias.scope !34, !noalias !36
  %index.next = add nuw i64 %index, 2
  %155 = icmp eq i64 %index.next, %n.vec
  br i1 %155, label %middle.block, label %vector.body, !llvm.loop !37

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %110, %n.vec
  br i1 %cmp.n, label %._crit_edge199, label %scalar.ph.preheader

scalar.ph334:                                     ; preds = %scalar.ph334, %scalar.ph334.preheader.new
  %indvars.iv234 = phi i64 [ %indvars.iv234.unr, %scalar.ph334.preheader.new ], [ %indvars.iv.next235.1, %scalar.ph334 ]
  %gep284 = getelementptr double, ptr %invariant.gep283, i64 %indvars.iv234
  %156 = load double, ptr %gep284, align 8, !tbaa !9
  %157 = getelementptr inbounds double, ptr %22, i64 %indvars.iv234
  %158 = load double, ptr %157, align 8, !tbaa !9
  %159 = load double, ptr %116, align 8, !tbaa !9
  %160 = fsub double %158, %159
  %161 = fdiv double %156, %160
  %162 = getelementptr inbounds double, ptr %23, i64 %indvars.iv234
  %163 = load double, ptr %162, align 8, !tbaa !9
  %164 = fmul double %163, %161
  store double %164, ptr %162, align 8, !tbaa !9
  %gep405 = getelementptr double, ptr %invariant.gep404, i64 %indvars.iv234
  %165 = load double, ptr %gep405, align 8, !tbaa !9
  %166 = getelementptr double, ptr %8, i64 %indvars.iv234
  %167 = load double, ptr %166, align 8, !tbaa !9
  %168 = load double, ptr %116, align 8, !tbaa !9
  %169 = fsub double %167, %168
  %170 = fdiv double %165, %169
  %171 = getelementptr double, ptr %9, i64 %indvars.iv234
  %172 = load double, ptr %171, align 8, !tbaa !9
  %173 = fmul double %172, %170
  store double %173, ptr %171, align 8, !tbaa !9
  %indvars.iv.next235.1 = add nuw nsw i64 %indvars.iv234, 2
  %exitcond238.not.1 = icmp eq i64 %indvars.iv.next235.1, %indvars.iv239
  br i1 %exitcond238.not.1, label %.preheader183, label %scalar.ph334, !llvm.loop !38

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv241 = phi i64 [ %indvars.iv.next242.1, %scalar.ph ], [ %indvars.iv241.unr, %scalar.ph.prol.loopexit ]
  %indvars.iv.next242 = add nuw nsw i64 %indvars.iv241, 1
  %gep286 = getelementptr double, ptr %invariant.gep285, i64 %indvars.iv.next242
  %174 = load double, ptr %gep286, align 8, !tbaa !9
  %175 = getelementptr double, ptr %8, i64 %indvars.iv241
  %176 = load double, ptr %175, align 8, !tbaa !9
  %177 = load double, ptr %137, align 8, !tbaa !9
  %178 = fsub double %176, %177
  %179 = fdiv double %174, %178
  %180 = getelementptr double, ptr %9, i64 %indvars.iv241
  %181 = load double, ptr %180, align 8, !tbaa !9
  %182 = fmul double %181, %179
  store double %182, ptr %180, align 8, !tbaa !9
  %indvars.iv.next242.1 = add nuw nsw i64 %indvars.iv241, 2
  %gep286.1 = getelementptr double, ptr %invariant.gep285, i64 %indvars.iv.next242.1
  %183 = load double, ptr %gep286.1, align 8, !tbaa !9
  %184 = getelementptr double, ptr %8, i64 %indvars.iv.next242
  %185 = load double, ptr %184, align 8, !tbaa !9
  %186 = load double, ptr %137, align 8, !tbaa !9
  %187 = fsub double %185, %186
  %188 = fdiv double %183, %187
  %189 = getelementptr double, ptr %9, i64 %indvars.iv.next242
  %190 = load double, ptr %189, align 8, !tbaa !9
  %191 = fmul double %190, %188
  store double %191, ptr %189, align 8, !tbaa !9
  %exitcond245.not.1 = icmp eq i64 %indvars.iv.next242.1, %wide.trip.count244
  br i1 %exitcond245.not.1, label %._crit_edge199, label %scalar.ph, !llvm.loop !39

._crit_edge199:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %.preheader183
  %indvars.iv.next240 = add nuw nsw i64 %indvars.iv239, 1
  %exitcond248.not = icmp eq i64 %indvars.iv.next240, %wide.trip.count247
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond248.not, label %._crit_edge202, label %.preheader184, !llvm.loop !40

._crit_edge202:                                   ; preds = %._crit_edge199
  store i32 %78, ptr %16, align 4, !tbaa !5
  br i1 %.not165200, label %.loopexit, label %.lr.ph206.preheader

.lr.ph206.preheader:                              ; preds = %._crit_edge202
  %192 = sext i32 %24 to i64
  %invariant.gep287 = getelementptr double, ptr %26, i64 %192
  br label %.lr.ph206

.lr.ph206:                                        ; preds = %.lr.ph206.preheader, %204
  %indvars.iv249 = phi i64 [ 1, %.lr.ph206.preheader ], [ %indvars.iv.next250, %204 ]
  %193 = getelementptr inbounds double, ptr %23, i64 %indvars.iv249
  %194 = load double, ptr %193, align 8, !tbaa !9
  %195 = fneg double %194
  %196 = call double @sqrt(double noundef %195) #5
  %gep288 = getelementptr double, ptr %invariant.gep287, i64 %indvars.iv249
  %197 = load double, ptr %gep288, align 8, !tbaa !9
  %198 = fcmp ult double %197, 0.000000e+00
  %199 = fcmp oge double %196, 0.000000e+00
  %.neg = fneg double %196
  br i1 %198, label %202, label %200

200:                                              ; preds = %.lr.ph206
  %201 = select i1 %199, double %196, double %.neg
  br label %204

202:                                              ; preds = %.lr.ph206
  %203 = select i1 %199, double %.neg, double %196
  br label %204

204:                                              ; preds = %202, %200
  %205 = phi double [ %201, %200 ], [ %203, %202 ]
  store double %205, ptr %193, align 8, !tbaa !9
  %indvars.iv.next250 = add nuw nsw i64 %indvars.iv249, 1
  %206 = load i32, ptr %16, align 4, !tbaa !5
  %207 = sext i32 %206 to i64
  %.not166.not = icmp slt i64 %indvars.iv249, %207
  br i1 %.not166.not, label %.lr.ph206, label %._crit_edge207, !llvm.loop !41

._crit_edge207:                                   ; preds = %204
  %.pre274 = load i32, ptr %0, align 4, !tbaa !5
  store i32 %.pre274, ptr %16, align 4, !tbaa !5
  store i32 1, ptr %17, align 4, !tbaa !5
  %.not168220 = icmp slt i32 %.pre274, 1
  br i1 %.not168220, label %.loopexit, label %.lr.ph223.preheader

.lr.ph223.preheader:                              ; preds = %._crit_edge207
  %208 = shl nsw i64 %20, 3
  %209 = getelementptr i8, ptr %5, i64 %208
  %scevgep369 = getelementptr i8, ptr %209, i64 8
  %scevgep371 = getelementptr i8, ptr %5, i64 %208
  %scevgep373 = getelementptr i8, ptr %9, i64 -8
  br label %.lr.ph223

.lr.ph223:                                        ; preds = %.lr.ph223.preheader, %._crit_edge217
  %210 = phi i32 [ %245, %._crit_edge217 ], [ %.pre274, %.lr.ph223.preheader ]
  %storemerge167221 = phi i32 [ %277, %._crit_edge217 ], [ 1, %.lr.ph223.preheader ]
  %.not169208 = icmp slt i32 %210, 1
  %.pre276 = mul i32 %storemerge167221, %19
  %.pre277 = sext i32 %.pre276 to i64
  br i1 %.not169208, label %._crit_edge212, label %.lr.ph211

.lr.ph211:                                        ; preds = %.lr.ph223
  %211 = add nuw i32 %210, 1
  %wide.trip.count255 = zext i32 %211 to i64
  %invariant.gep289 = getelementptr double, ptr %21, i64 %.pre277
  %212 = zext nneg i32 %210 to i64
  %min.iters.check380 = icmp eq i32 %210, 1
  br i1 %min.iters.check380, label %scalar.ph379.preheader, label %vector.memcheck368

vector.memcheck368:                               ; preds = %.lr.ph211
  %213 = shl nsw i64 %.pre277, 3
  %scevgep370 = getelementptr i8, ptr %scevgep369, i64 %213
  %214 = shl nuw nsw i64 %wide.trip.count255, 3
  %215 = getelementptr i8, ptr %scevgep371, i64 %213
  %scevgep372 = getelementptr i8, ptr %215, i64 %214
  %scevgep374 = getelementptr i8, ptr %scevgep373, i64 %214
  %bound0375 = icmp ult ptr %scevgep370, %scevgep374
  %bound1376 = icmp ugt ptr %scevgep372, %9
  %found.conflict377 = and i1 %bound0375, %bound1376
  br i1 %found.conflict377, label %scalar.ph379.preheader, label %vector.ph381

vector.ph381:                                     ; preds = %vector.memcheck368
  %n.vec383 = and i64 %212, 2147483646
  %ind.end384 = or i64 %212, 1
  br label %vector.body386

vector.body386:                                   ; preds = %vector.body386, %vector.ph381
  %index387 = phi i64 [ 0, %vector.ph381 ], [ %index.next391, %vector.body386 ]
  %offset.idx388 = or disjoint i64 %index387, 1
  %216 = getelementptr double, ptr %9, i64 %index387
  %wide.load389 = load <2 x double>, ptr %216, align 8, !tbaa !9, !alias.scope !42
  %217 = getelementptr double, ptr %invariant.gep289, i64 %offset.idx388
  %wide.load390 = load <2 x double>, ptr %217, align 8, !tbaa !9, !alias.scope !45, !noalias !42
  %218 = fdiv <2 x double> %wide.load389, %wide.load390
  store <2 x double> %218, ptr %217, align 8, !tbaa !9, !alias.scope !45, !noalias !42
  %index.next391 = add nuw i64 %index387, 2
  %219 = icmp eq i64 %index.next391, %n.vec383
  br i1 %219, label %middle.block378, label %vector.body386, !llvm.loop !47

middle.block378:                                  ; preds = %vector.body386
  %cmp.n392 = icmp eq i64 %n.vec383, %212
  br i1 %cmp.n392, label %._crit_edge212, label %scalar.ph379.preheader

scalar.ph379.preheader:                           ; preds = %middle.block378, %vector.memcheck368, %.lr.ph211
  %indvars.iv252.ph = phi i64 [ 1, %vector.memcheck368 ], [ 1, %.lr.ph211 ], [ %ind.end384, %middle.block378 ]
  %220 = sub nsw i64 %wide.trip.count255, %indvars.iv252.ph
  %221 = zext nneg i32 %210 to i64
  %222 = sub nsw i64 %221, %indvars.iv252.ph
  %xtraiter397 = and i64 %220, 3
  %lcmp.mod398.not = icmp eq i64 %xtraiter397, 0
  br i1 %lcmp.mod398.not, label %scalar.ph379.prol.loopexit, label %scalar.ph379.prol

scalar.ph379.prol:                                ; preds = %scalar.ph379.preheader, %scalar.ph379.prol
  %indvars.iv252.prol = phi i64 [ %indvars.iv.next253.prol, %scalar.ph379.prol ], [ %indvars.iv252.ph, %scalar.ph379.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph379.prol ], [ 0, %scalar.ph379.preheader ]
  %223 = getelementptr inbounds double, ptr %23, i64 %indvars.iv252.prol
  %224 = load double, ptr %223, align 8, !tbaa !9
  %gep290.prol = getelementptr double, ptr %invariant.gep289, i64 %indvars.iv252.prol
  %225 = load double, ptr %gep290.prol, align 8, !tbaa !9
  %226 = fdiv double %224, %225
  store double %226, ptr %gep290.prol, align 8, !tbaa !9
  %indvars.iv.next253.prol = add nuw nsw i64 %indvars.iv252.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter397
  br i1 %prol.iter.cmp.not, label %scalar.ph379.prol.loopexit, label %scalar.ph379.prol, !llvm.loop !48

scalar.ph379.prol.loopexit:                       ; preds = %scalar.ph379.prol, %scalar.ph379.preheader
  %indvars.iv252.unr = phi i64 [ %indvars.iv252.ph, %scalar.ph379.preheader ], [ %indvars.iv.next253.prol, %scalar.ph379.prol ]
  %227 = icmp ult i64 %222, 3
  br i1 %227, label %._crit_edge212, label %scalar.ph379.preheader.new

scalar.ph379.preheader.new:                       ; preds = %scalar.ph379.prol.loopexit
  %invariant.gep408 = getelementptr i8, ptr %invariant.gep289, i64 8
  br label %scalar.ph379

scalar.ph379:                                     ; preds = %scalar.ph379, %scalar.ph379.preheader.new
  %indvars.iv252 = phi i64 [ %indvars.iv252.unr, %scalar.ph379.preheader.new ], [ %indvars.iv.next253.3, %scalar.ph379 ]
  %228 = getelementptr inbounds double, ptr %23, i64 %indvars.iv252
  %229 = load double, ptr %228, align 8, !tbaa !9
  %gep290 = getelementptr double, ptr %invariant.gep289, i64 %indvars.iv252
  %230 = load double, ptr %gep290, align 8, !tbaa !9
  %231 = fdiv double %229, %230
  store double %231, ptr %gep290, align 8, !tbaa !9
  %232 = getelementptr double, ptr %9, i64 %indvars.iv252
  %233 = load double, ptr %232, align 8, !tbaa !9
  %gep409 = getelementptr double, ptr %invariant.gep408, i64 %indvars.iv252
  %234 = load double, ptr %gep409, align 8, !tbaa !9
  %235 = fdiv double %233, %234
  store double %235, ptr %gep409, align 8, !tbaa !9
  %indvars.iv.next253.1 = add nuw nsw i64 %indvars.iv252, 2
  %236 = getelementptr inbounds double, ptr %23, i64 %indvars.iv.next253.1
  %237 = load double, ptr %236, align 8, !tbaa !9
  %gep290.2 = getelementptr double, ptr %invariant.gep289, i64 %indvars.iv.next253.1
  %238 = load double, ptr %gep290.2, align 8, !tbaa !9
  %239 = fdiv double %237, %238
  store double %239, ptr %gep290.2, align 8, !tbaa !9
  %indvars.iv.next253.2 = add nuw nsw i64 %indvars.iv252, 3
  %240 = getelementptr inbounds double, ptr %23, i64 %indvars.iv.next253.2
  %241 = load double, ptr %240, align 8, !tbaa !9
  %gep290.3 = getelementptr double, ptr %invariant.gep289, i64 %indvars.iv.next253.2
  %242 = load double, ptr %gep290.3, align 8, !tbaa !9
  %243 = fdiv double %241, %242
  store double %243, ptr %gep290.3, align 8, !tbaa !9
  %indvars.iv.next253.3 = add nuw nsw i64 %indvars.iv252, 4
  %exitcond256.not.3 = icmp eq i64 %indvars.iv.next253.3, %wide.trip.count255
  br i1 %exitcond256.not.3, label %._crit_edge212, label %scalar.ph379, !llvm.loop !50

._crit_edge212:                                   ; preds = %scalar.ph379.prol.loopexit, %scalar.ph379, %middle.block378, %.lr.ph223
  %gep219 = getelementptr double, ptr %invariant.gep, i64 %.pre277
  %244 = call double @dnrm2_(ptr noundef nonnull %0, ptr noundef %gep219, ptr noundef nonnull @c__1) #5
  %245 = load i32, ptr %0, align 4, !tbaa !5
  %.not170213 = icmp slt i32 %245, 1
  %.pre275 = load i32, ptr %17, align 4, !tbaa !5
  br i1 %.not170213, label %._crit_edge217, label %.lr.ph216

.lr.ph216:                                        ; preds = %._crit_edge212
  %246 = mul nsw i32 %.pre275, %19
  %247 = mul nsw i32 %.pre275, %24
  %248 = sext i32 %246 to i64
  %249 = sext i32 %247 to i64
  %250 = add nuw i32 %245, 1
  %wide.trip.count260 = zext i32 %250 to i64
  %invariant.gep291 = getelementptr double, ptr %21, i64 %248
  %invariant.gep293 = getelementptr double, ptr %26, i64 %249
  %251 = zext nneg i32 %245 to i64
  %min.iters.check354 = icmp eq i32 %245, 1
  br i1 %min.iters.check354, label %scalar.ph353.preheader, label %vector.memcheck351

vector.memcheck351:                               ; preds = %.lr.ph216
  %252 = add nsw i64 %25, %249
  %253 = shl nsw i64 %252, 3
  %254 = add i64 %253, %15
  %255 = add nsw i64 %20, %248
  %256 = shl nsw i64 %255, 3
  %257 = add i64 %256, %14
  %258 = sub i64 %254, %257
  %diff.check = icmp ult i64 %258, 16
  br i1 %diff.check, label %scalar.ph353.preheader, label %vector.ph355

vector.ph355:                                     ; preds = %vector.memcheck351
  %n.vec357 = and i64 %251, 2147483646
  %ind.end358 = or i64 %251, 1
  %broadcast.splatinsert364 = insertelement <2 x double> poison, double %244, i64 0
  %broadcast.splat365 = shufflevector <2 x double> %broadcast.splatinsert364, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body360

vector.body360:                                   ; preds = %vector.body360, %vector.ph355
  %index361 = phi i64 [ 0, %vector.ph355 ], [ %index.next366, %vector.body360 ]
  %offset.idx362 = or disjoint i64 %index361, 1
  %259 = getelementptr double, ptr %invariant.gep291, i64 %offset.idx362
  %wide.load363 = load <2 x double>, ptr %259, align 8, !tbaa !9
  %260 = fdiv <2 x double> %wide.load363, %broadcast.splat365
  %261 = getelementptr double, ptr %invariant.gep293, i64 %offset.idx362
  store <2 x double> %260, ptr %261, align 8, !tbaa !9
  %index.next366 = add nuw i64 %index361, 2
  %262 = icmp eq i64 %index.next366, %n.vec357
  br i1 %262, label %middle.block352, label %vector.body360, !llvm.loop !51

middle.block352:                                  ; preds = %vector.body360
  %cmp.n367 = icmp eq i64 %n.vec357, %251
  br i1 %cmp.n367, label %._crit_edge217, label %scalar.ph353.preheader

scalar.ph353.preheader:                           ; preds = %middle.block352, %vector.memcheck351, %.lr.ph216
  %indvars.iv257.ph = phi i64 [ 1, %vector.memcheck351 ], [ 1, %.lr.ph216 ], [ %ind.end358, %middle.block352 ]
  %263 = sub nsw i64 %wide.trip.count260, %indvars.iv257.ph
  %264 = zext nneg i32 %245 to i64
  %265 = sub nsw i64 %264, %indvars.iv257.ph
  %xtraiter399 = and i64 %263, 3
  %lcmp.mod400.not = icmp eq i64 %xtraiter399, 0
  br i1 %lcmp.mod400.not, label %scalar.ph353.prol.loopexit, label %scalar.ph353.prol

scalar.ph353.prol:                                ; preds = %scalar.ph353.preheader, %scalar.ph353.prol
  %indvars.iv257.prol = phi i64 [ %indvars.iv.next258.prol, %scalar.ph353.prol ], [ %indvars.iv257.ph, %scalar.ph353.preheader ]
  %prol.iter401 = phi i64 [ %prol.iter401.next, %scalar.ph353.prol ], [ 0, %scalar.ph353.preheader ]
  %gep292.prol = getelementptr double, ptr %invariant.gep291, i64 %indvars.iv257.prol
  %266 = load double, ptr %gep292.prol, align 8, !tbaa !9
  %267 = fdiv double %266, %244
  %gep294.prol = getelementptr double, ptr %invariant.gep293, i64 %indvars.iv257.prol
  store double %267, ptr %gep294.prol, align 8, !tbaa !9
  %indvars.iv.next258.prol = add nuw nsw i64 %indvars.iv257.prol, 1
  %prol.iter401.next = add i64 %prol.iter401, 1
  %prol.iter401.cmp.not = icmp eq i64 %prol.iter401.next, %xtraiter399
  br i1 %prol.iter401.cmp.not, label %scalar.ph353.prol.loopexit, label %scalar.ph353.prol, !llvm.loop !52

scalar.ph353.prol.loopexit:                       ; preds = %scalar.ph353.prol, %scalar.ph353.preheader
  %indvars.iv257.unr = phi i64 [ %indvars.iv257.ph, %scalar.ph353.preheader ], [ %indvars.iv.next258.prol, %scalar.ph353.prol ]
  %268 = icmp ult i64 %265, 3
  br i1 %268, label %._crit_edge217, label %scalar.ph353

scalar.ph353:                                     ; preds = %scalar.ph353.prol.loopexit, %scalar.ph353
  %indvars.iv257 = phi i64 [ %indvars.iv.next258.3, %scalar.ph353 ], [ %indvars.iv257.unr, %scalar.ph353.prol.loopexit ]
  %gep292 = getelementptr double, ptr %invariant.gep291, i64 %indvars.iv257
  %269 = load double, ptr %gep292, align 8, !tbaa !9
  %270 = fdiv double %269, %244
  %gep294 = getelementptr double, ptr %invariant.gep293, i64 %indvars.iv257
  store double %270, ptr %gep294, align 8, !tbaa !9
  %indvars.iv.next258 = add nuw nsw i64 %indvars.iv257, 1
  %gep292.1 = getelementptr double, ptr %invariant.gep291, i64 %indvars.iv.next258
  %271 = load double, ptr %gep292.1, align 8, !tbaa !9
  %272 = fdiv double %271, %244
  %gep294.1 = getelementptr double, ptr %invariant.gep293, i64 %indvars.iv.next258
  store double %272, ptr %gep294.1, align 8, !tbaa !9
  %indvars.iv.next258.1 = add nuw nsw i64 %indvars.iv257, 2
  %gep292.2 = getelementptr double, ptr %invariant.gep291, i64 %indvars.iv.next258.1
  %273 = load double, ptr %gep292.2, align 8, !tbaa !9
  %274 = fdiv double %273, %244
  %gep294.2 = getelementptr double, ptr %invariant.gep293, i64 %indvars.iv.next258.1
  store double %274, ptr %gep294.2, align 8, !tbaa !9
  %indvars.iv.next258.2 = add nuw nsw i64 %indvars.iv257, 3
  %gep292.3 = getelementptr double, ptr %invariant.gep291, i64 %indvars.iv.next258.2
  %275 = load double, ptr %gep292.3, align 8, !tbaa !9
  %276 = fdiv double %275, %244
  %gep294.3 = getelementptr double, ptr %invariant.gep293, i64 %indvars.iv.next258.2
  store double %276, ptr %gep294.3, align 8, !tbaa !9
  %indvars.iv.next258.3 = add nuw nsw i64 %indvars.iv257, 4
  %exitcond261.not.3 = icmp eq i64 %indvars.iv.next258.3, %wide.trip.count260
  br i1 %exitcond261.not.3, label %._crit_edge217, label %scalar.ph353, !llvm.loop !53

._crit_edge217:                                   ; preds = %scalar.ph353.prol.loopexit, %scalar.ph353, %middle.block352, %._crit_edge212
  %277 = add nsw i32 %.pre275, 1
  store i32 %277, ptr %17, align 4, !tbaa !5
  %278 = load i32, ptr %16, align 4, !tbaa !5
  %.not168.not = icmp slt i32 %.pre275, %278
  br i1 %.not168.not, label %.lr.ph223, label %.loopexit, !llvm.loop !54

.loopexit:                                        ; preds = %.preheader.preheader, %.lr.ph191, %._crit_edge217, %._crit_edge227, %._crit_edge202, %75, %._crit_edge207, %48, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #5
  ret void
}

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

declare i32 @xerbla_(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare double @dlamc3_(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dlaed4_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare double @dnrm2_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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


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