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

; 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 [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b19 = external hidden global double, align 8
@c_b21 = external hidden global double, align 8
@c__2 = external hidden global i32, align 4
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@c_false = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dtgsna_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19) #0 {
  %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 ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca double, align 8
  %58 = alloca double, align 8
  %59 = alloca i32, align 4
  %60 = alloca double, align 8
  %61 = alloca i32, align 4
  %62 = alloca double, align 8
  %63 = alloca double, align 8
  %64 = alloca double, align 8
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca double, align 8
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca double, align 8
  %79 = alloca [1 x double], align 8
  %80 = alloca double, align 8
  %81 = alloca [1 x double], align 8
  %82 = alloca i32, align 4
  %83 = alloca double, align 8
  %84 = alloca i32, align 4
  %85 = alloca double, align 8
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca double, align 8
  %90 = alloca double, align 8
  %91 = alloca i32, align 4
  %92 = alloca double, align 8
  %93 = alloca i32, align 4
  store ptr %0, ptr %21, align 8, !tbaa !5
  store ptr %1, ptr %22, align 8, !tbaa !5
  store ptr %2, ptr %23, align 8, !tbaa !5
  store ptr %3, ptr %24, align 8, !tbaa !5
  store ptr %4, ptr %25, align 8, !tbaa !5
  store ptr %5, ptr %26, align 8, !tbaa !5
  store ptr %6, ptr %27, align 8, !tbaa !5
  store ptr %7, ptr %28, align 8, !tbaa !5
  store ptr %8, ptr %29, align 8, !tbaa !5
  store ptr %9, ptr %30, align 8, !tbaa !5
  store ptr %10, ptr %31, align 8, !tbaa !5
  store ptr %11, ptr %32, align 8, !tbaa !5
  store ptr %12, ptr %33, align 8, !tbaa !5
  store ptr %13, ptr %34, align 8, !tbaa !5
  store ptr %14, ptr %35, align 8, !tbaa !5
  store ptr %15, ptr %36, align 8, !tbaa !5
  store ptr %16, ptr %37, align 8, !tbaa !5
  store ptr %17, ptr %38, align 8, !tbaa !5
  store ptr %18, ptr %39, align 8, !tbaa !5
  store ptr %19, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #5
  %94 = load ptr, ptr %23, align 8, !tbaa !5
  %95 = getelementptr inbounds i32, ptr %94, i32 -1
  store ptr %95, ptr %23, align 8, !tbaa !5
  %96 = load ptr, ptr %26, align 8, !tbaa !5
  %97 = load i32, ptr %96, align 4, !tbaa !9
  store i32 %97, ptr %41, align 4, !tbaa !9
  %98 = load i32, ptr %41, align 4, !tbaa !9
  %99 = mul nsw i32 %98, 1
  %100 = add nsw i32 1, %99
  store i32 %100, ptr %42, align 4, !tbaa !9
  %101 = load i32, ptr %42, align 4, !tbaa !9
  %102 = load ptr, ptr %25, align 8, !tbaa !5
  %103 = sext i32 %101 to i64
  %104 = sub i64 0, %103
  %105 = getelementptr inbounds double, ptr %102, i64 %104
  store ptr %105, ptr %25, align 8, !tbaa !5
  %106 = load ptr, ptr %28, align 8, !tbaa !5
  %107 = load i32, ptr %106, align 4, !tbaa !9
  store i32 %107, ptr %43, align 4, !tbaa !9
  %108 = load i32, ptr %43, align 4, !tbaa !9
  %109 = mul nsw i32 %108, 1
  %110 = add nsw i32 1, %109
  store i32 %110, ptr %44, align 4, !tbaa !9
  %111 = load i32, ptr %44, align 4, !tbaa !9
  %112 = load ptr, ptr %27, align 8, !tbaa !5
  %113 = sext i32 %111 to i64
  %114 = sub i64 0, %113
  %115 = getelementptr inbounds double, ptr %112, i64 %114
  store ptr %115, ptr %27, align 8, !tbaa !5
  %116 = load ptr, ptr %30, align 8, !tbaa !5
  %117 = load i32, ptr %116, align 4, !tbaa !9
  store i32 %117, ptr %45, align 4, !tbaa !9
  %118 = load i32, ptr %45, align 4, !tbaa !9
  %119 = mul nsw i32 %118, 1
  %120 = add nsw i32 1, %119
  store i32 %120, ptr %46, align 4, !tbaa !9
  %121 = load i32, ptr %46, align 4, !tbaa !9
  %122 = load ptr, ptr %29, align 8, !tbaa !5
  %123 = sext i32 %121 to i64
  %124 = sub i64 0, %123
  %125 = getelementptr inbounds double, ptr %122, i64 %124
  store ptr %125, ptr %29, align 8, !tbaa !5
  %126 = load ptr, ptr %32, align 8, !tbaa !5
  %127 = load i32, ptr %126, align 4, !tbaa !9
  store i32 %127, ptr %47, align 4, !tbaa !9
  %128 = load i32, ptr %47, align 4, !tbaa !9
  %129 = mul nsw i32 %128, 1
  %130 = add nsw i32 1, %129
  store i32 %130, ptr %48, align 4, !tbaa !9
  %131 = load i32, ptr %48, align 4, !tbaa !9
  %132 = load ptr, ptr %31, align 8, !tbaa !5
  %133 = sext i32 %131 to i64
  %134 = sub i64 0, %133
  %135 = getelementptr inbounds double, ptr %132, i64 %134
  store ptr %135, ptr %31, align 8, !tbaa !5
  %136 = load ptr, ptr %33, align 8, !tbaa !5
  %137 = getelementptr inbounds double, ptr %136, i32 -1
  store ptr %137, ptr %33, align 8, !tbaa !5
  %138 = load ptr, ptr %34, align 8, !tbaa !5
  %139 = getelementptr inbounds double, ptr %138, i32 -1
  store ptr %139, ptr %34, align 8, !tbaa !5
  %140 = load ptr, ptr %37, align 8, !tbaa !5
  %141 = getelementptr inbounds double, ptr %140, i32 -1
  store ptr %141, ptr %37, align 8, !tbaa !5
  %142 = load ptr, ptr %39, align 8, !tbaa !5
  %143 = getelementptr inbounds i32, ptr %142, i32 -1
  store ptr %143, ptr %39, align 8, !tbaa !5
  %144 = load ptr, ptr %21, align 8, !tbaa !5
  %145 = call i32 @lsame_(ptr noundef %144, ptr noundef @.str)
  store i32 %145, ptr %86, align 4, !tbaa !9
  %146 = load ptr, ptr %21, align 8, !tbaa !5
  %147 = call i32 @lsame_(ptr noundef %146, ptr noundef @.str.1)
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %152, label %149

149:                                              ; preds = %20
  %150 = load i32, ptr %86, align 4, !tbaa !9
  %151 = icmp ne i32 %150, 0
  br label %152

152:                                              ; preds = %149, %20
  %153 = phi i1 [ true, %20 ], [ %151, %149 ]
  %154 = zext i1 %153 to i32
  store i32 %154, ptr %74, align 4, !tbaa !9
  %155 = load ptr, ptr %21, align 8, !tbaa !5
  %156 = call i32 @lsame_(ptr noundef %155, ptr noundef @.str.2)
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %161, label %158

158:                                              ; preds = %152
  %159 = load i32, ptr %86, align 4, !tbaa !9
  %160 = icmp ne i32 %159, 0
  br label %161

161:                                              ; preds = %158, %152
  %162 = phi i1 [ true, %152 ], [ %160, %158 ]
  %163 = zext i1 %162 to i32
  store i32 %163, ptr %87, align 4, !tbaa !9
  %164 = load ptr, ptr %22, align 8, !tbaa !5
  %165 = call i32 @lsame_(ptr noundef %164, ptr noundef @.str.3)
  store i32 %165, ptr %88, align 4, !tbaa !9
  %166 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 0, ptr %166, align 4, !tbaa !9
  %167 = load ptr, ptr %38, align 8, !tbaa !5
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = icmp eq i32 %168, -1
  %170 = zext i1 %169 to i32
  store i32 %170, ptr %91, align 4, !tbaa !9
  %171 = load i32, ptr %74, align 4, !tbaa !9
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %178, label %173

173:                                              ; preds = %161
  %174 = load i32, ptr %87, align 4, !tbaa !9
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %178, label %176

176:                                              ; preds = %173
  %177 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -1, ptr %177, align 4, !tbaa !9
  br label %389

178:                                              ; preds = %173, %161
  %179 = load ptr, ptr %22, align 8, !tbaa !5
  %180 = call i32 @lsame_(ptr noundef %179, ptr noundef @.str.4)
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %187, label %182

182:                                              ; preds = %178
  %183 = load i32, ptr %88, align 4, !tbaa !9
  %184 = icmp ne i32 %183, 0
  br i1 %184, label %187, label %185

185:                                              ; preds = %182
  %186 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -2, ptr %186, align 4, !tbaa !9
  br label %388

187:                                              ; preds = %182, %178
  %188 = load ptr, ptr %24, align 8, !tbaa !5
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = icmp slt i32 %189, 0
  br i1 %190, label %191, label %193

191:                                              ; preds = %187
  %192 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -4, ptr %192, align 4, !tbaa !9
  br label %387

193:                                              ; preds = %187
  %194 = load ptr, ptr %26, align 8, !tbaa !5
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = load ptr, ptr %24, align 8, !tbaa !5
  %197 = load i32, ptr %196, align 4, !tbaa !9
  %198 = icmp sge i32 1, %197
  br i1 %198, label %199, label %200

199:                                              ; preds = %193
  br label %203

200:                                              ; preds = %193
  %201 = load ptr, ptr %24, align 8, !tbaa !5
  %202 = load i32, ptr %201, align 4, !tbaa !9
  br label %203

203:                                              ; preds = %200, %199
  %204 = phi i32 [ 1, %199 ], [ %202, %200 ]
  %205 = icmp slt i32 %195, %204
  br i1 %205, label %206, label %208

206:                                              ; preds = %203
  %207 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -6, ptr %207, align 4, !tbaa !9
  br label %386

208:                                              ; preds = %203
  %209 = load ptr, ptr %28, align 8, !tbaa !5
  %210 = load i32, ptr %209, align 4, !tbaa !9
  %211 = load ptr, ptr %24, align 8, !tbaa !5
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = icmp sge i32 1, %212
  br i1 %213, label %214, label %215

214:                                              ; preds = %208
  br label %218

215:                                              ; preds = %208
  %216 = load ptr, ptr %24, align 8, !tbaa !5
  %217 = load i32, ptr %216, align 4, !tbaa !9
  br label %218

218:                                              ; preds = %215, %214
  %219 = phi i32 [ 1, %214 ], [ %217, %215 ]
  %220 = icmp slt i32 %210, %219
  br i1 %220, label %221, label %223

221:                                              ; preds = %218
  %222 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -8, ptr %222, align 4, !tbaa !9
  br label %385

223:                                              ; preds = %218
  %224 = load i32, ptr %74, align 4, !tbaa !9
  %225 = icmp ne i32 %224, 0
  br i1 %225, label %226, label %234

226:                                              ; preds = %223
  %227 = load ptr, ptr %30, align 8, !tbaa !5
  %228 = load i32, ptr %227, align 4, !tbaa !9
  %229 = load ptr, ptr %24, align 8, !tbaa !5
  %230 = load i32, ptr %229, align 4, !tbaa !9
  %231 = icmp slt i32 %228, %230
  br i1 %231, label %232, label %234

232:                                              ; preds = %226
  %233 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -10, ptr %233, align 4, !tbaa !9
  br label %384

234:                                              ; preds = %226, %223
  %235 = load i32, ptr %74, align 4, !tbaa !9
  %236 = icmp ne i32 %235, 0
  br i1 %236, label %237, label %245

237:                                              ; preds = %234
  %238 = load ptr, ptr %32, align 8, !tbaa !5
  %239 = load i32, ptr %238, align 4, !tbaa !9
  %240 = load ptr, ptr %24, align 8, !tbaa !5
  %241 = load i32, ptr %240, align 4, !tbaa !9
  %242 = icmp slt i32 %239, %241
  br i1 %242, label %243, label %245

243:                                              ; preds = %237
  %244 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -12, ptr %244, align 4, !tbaa !9
  br label %383

245:                                              ; preds = %237, %234
  %246 = load i32, ptr %88, align 4, !tbaa !9
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %248, label %329

248:                                              ; preds = %245
  %249 = load ptr, ptr %36, align 8, !tbaa !5
  store i32 0, ptr %249, align 4, !tbaa !9
  store i32 0, ptr %55, align 4, !tbaa !9
  %250 = load ptr, ptr %24, align 8, !tbaa !5
  %251 = load i32, ptr %250, align 4, !tbaa !9
  store i32 %251, ptr %49, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %252

252:                                              ; preds = %325, %248
  %253 = load i32, ptr %66, align 4, !tbaa !9
  %254 = load i32, ptr %49, align 4, !tbaa !9
  %255 = icmp sle i32 %253, %254
  br i1 %255, label %256, label %328

256:                                              ; preds = %252
  %257 = load i32, ptr %55, align 4, !tbaa !9
  %258 = icmp ne i32 %257, 0
  br i1 %258, label %259, label %260

259:                                              ; preds = %256
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %324

260:                                              ; preds = %256
  %261 = load i32, ptr %66, align 4, !tbaa !9
  %262 = load ptr, ptr %24, align 8, !tbaa !5
  %263 = load i32, ptr %262, align 4, !tbaa !9
  %264 = icmp slt i32 %261, %263
  br i1 %264, label %265, label %310

265:                                              ; preds = %260
  %266 = load ptr, ptr %25, align 8, !tbaa !5
  %267 = load i32, ptr %66, align 4, !tbaa !9
  %268 = add nsw i32 %267, 1
  %269 = load i32, ptr %66, align 4, !tbaa !9
  %270 = load i32, ptr %41, align 4, !tbaa !9
  %271 = mul nsw i32 %269, %270
  %272 = add nsw i32 %268, %271
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds double, ptr %266, i64 %273
  %275 = load double, ptr %274, align 8, !tbaa !11
  %276 = fcmp oeq double %275, 0.000000e+00
  br i1 %276, label %277, label %289

277:                                              ; preds = %265
  %278 = load ptr, ptr %23, align 8, !tbaa !5
  %279 = load i32, ptr %66, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds i32, ptr %278, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !9
  %283 = icmp ne i32 %282, 0
  br i1 %283, label %284, label %288

284:                                              ; preds = %277
  %285 = load ptr, ptr %36, align 8, !tbaa !5
  %286 = load i32, ptr %285, align 4, !tbaa !9
  %287 = add nsw i32 %286, 1
  store i32 %287, ptr %285, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %284, %277
  br label %309

289:                                              ; preds = %265
  store i32 1, ptr %55, align 4, !tbaa !9
  %290 = load ptr, ptr %23, align 8, !tbaa !5
  %291 = load i32, ptr %66, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds i32, ptr %290, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !9
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %304, label %296

296:                                              ; preds = %289
  %297 = load ptr, ptr %23, align 8, !tbaa !5
  %298 = load i32, ptr %66, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds i32, ptr %297, i64 %300
  %302 = load i32, ptr %301, align 4, !tbaa !9
  %303 = icmp ne i32 %302, 0
  br i1 %303, label %304, label %308

304:                                              ; preds = %296, %289
  %305 = load ptr, ptr %36, align 8, !tbaa !5
  %306 = load i32, ptr %305, align 4, !tbaa !9
  %307 = add nsw i32 %306, 2
  store i32 %307, ptr %305, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %304, %296
  br label %309

309:                                              ; preds = %308, %288
  br label %323

310:                                              ; preds = %260
  %311 = load ptr, ptr %23, align 8, !tbaa !5
  %312 = load ptr, ptr %24, align 8, !tbaa !5
  %313 = load i32, ptr %312, align 4, !tbaa !9
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds i32, ptr %311, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !9
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %318, label %322

318:                                              ; preds = %310
  %319 = load ptr, ptr %36, align 8, !tbaa !5
  %320 = load i32, ptr %319, align 4, !tbaa !9
  %321 = add nsw i32 %320, 1
  store i32 %321, ptr %319, align 4, !tbaa !9
  br label %322

322:                                              ; preds = %318, %310
  br label %323

323:                                              ; preds = %322, %309
  br label %324

324:                                              ; preds = %323, %259
  br label %325

325:                                              ; preds = %324
  %326 = load i32, ptr %66, align 4, !tbaa !9
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %66, align 4, !tbaa !9
  br label %252, !llvm.loop !13

328:                                              ; preds = %252
  br label %333

329:                                              ; preds = %245
  %330 = load ptr, ptr %24, align 8, !tbaa !5
  %331 = load i32, ptr %330, align 4, !tbaa !9
  %332 = load ptr, ptr %36, align 8, !tbaa !5
  store i32 %331, ptr %332, align 4, !tbaa !9
  br label %333

333:                                              ; preds = %329, %328
  %334 = load ptr, ptr %24, align 8, !tbaa !5
  %335 = load i32, ptr %334, align 4, !tbaa !9
  %336 = icmp eq i32 %335, 0
  br i1 %336, label %337, label %338

337:                                              ; preds = %333
  store i32 1, ptr %73, align 4, !tbaa !9
  br label %359

338:                                              ; preds = %333
  %339 = load ptr, ptr %21, align 8, !tbaa !5
  %340 = call i32 @lsame_(ptr noundef %339, ptr noundef @.str.2)
  %341 = icmp ne i32 %340, 0
  br i1 %341, label %346, label %342

342:                                              ; preds = %338
  %343 = load ptr, ptr %21, align 8, !tbaa !5
  %344 = call i32 @lsame_(ptr noundef %343, ptr noundef @.str)
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %346, label %355

346:                                              ; preds = %342, %338
  %347 = load ptr, ptr %24, align 8, !tbaa !5
  %348 = load i32, ptr %347, align 4, !tbaa !9
  %349 = shl i32 %348, 1
  %350 = load ptr, ptr %24, align 8, !tbaa !5
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = add nsw i32 %351, 2
  %353 = mul nsw i32 %349, %352
  %354 = add nsw i32 %353, 16
  store i32 %354, ptr %73, align 4, !tbaa !9
  br label %358

355:                                              ; preds = %342
  %356 = load ptr, ptr %24, align 8, !tbaa !5
  %357 = load i32, ptr %356, align 4, !tbaa !9
  store i32 %357, ptr %73, align 4, !tbaa !9
  br label %358

358:                                              ; preds = %355, %346
  br label %359

359:                                              ; preds = %358, %337
  %360 = load i32, ptr %73, align 4, !tbaa !9
  %361 = sitofp i32 %360 to double
  %362 = load ptr, ptr %37, align 8, !tbaa !5
  %363 = getelementptr inbounds double, ptr %362, i64 1
  store double %361, ptr %363, align 8, !tbaa !11
  %364 = load ptr, ptr %35, align 8, !tbaa !5
  %365 = load i32, ptr %364, align 4, !tbaa !9
  %366 = load ptr, ptr %36, align 8, !tbaa !5
  %367 = load i32, ptr %366, align 4, !tbaa !9
  %368 = icmp slt i32 %365, %367
  br i1 %368, label %369, label %371

369:                                              ; preds = %359
  %370 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -15, ptr %370, align 4, !tbaa !9
  br label %382

371:                                              ; preds = %359
  %372 = load ptr, ptr %38, align 8, !tbaa !5
  %373 = load i32, ptr %372, align 4, !tbaa !9
  %374 = load i32, ptr %73, align 4, !tbaa !9
  %375 = icmp slt i32 %373, %374
  br i1 %375, label %376, label %381

376:                                              ; preds = %371
  %377 = load i32, ptr %91, align 4, !tbaa !9
  %378 = icmp ne i32 %377, 0
  br i1 %378, label %381, label %379

379:                                              ; preds = %376
  %380 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -18, ptr %380, align 4, !tbaa !9
  br label %381

381:                                              ; preds = %379, %376, %371
  br label %382

382:                                              ; preds = %381, %369
  br label %383

383:                                              ; preds = %382, %243
  br label %384

384:                                              ; preds = %383, %232
  br label %385

385:                                              ; preds = %384, %221
  br label %386

386:                                              ; preds = %385, %206
  br label %387

387:                                              ; preds = %386, %191
  br label %388

388:                                              ; preds = %387, %185
  br label %389

389:                                              ; preds = %388, %176
  %390 = load ptr, ptr %40, align 8, !tbaa !5
  %391 = load i32, ptr %390, align 4, !tbaa !9
  %392 = icmp ne i32 %391, 0
  br i1 %392, label %393, label %398

393:                                              ; preds = %389
  %394 = load ptr, ptr %40, align 8, !tbaa !5
  %395 = load i32, ptr %394, align 4, !tbaa !9
  %396 = sub nsw i32 0, %395
  store i32 %396, ptr %49, align 4, !tbaa !9
  %397 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %49, i32 noundef 6)
  store i32 1, ptr %93, align 4
  br label %1216

398:                                              ; preds = %389
  %399 = load i32, ptr %91, align 4, !tbaa !9
  %400 = icmp ne i32 %399, 0
  br i1 %400, label %401, label %402

401:                                              ; preds = %398
  store i32 1, ptr %93, align 4
  br label %1216

402:                                              ; preds = %398
  br label %403

403:                                              ; preds = %402
  %404 = load ptr, ptr %24, align 8, !tbaa !5
  %405 = load i32, ptr %404, align 4, !tbaa !9
  %406 = icmp eq i32 %405, 0
  br i1 %406, label %407, label %408

407:                                              ; preds = %403
  store i32 1, ptr %93, align 4
  br label %1216

408:                                              ; preds = %403
  %409 = call double @dlamch_(ptr noundef @.str.6)
  store double %409, ptr %92, align 8, !tbaa !11
  %410 = call double @dlamch_(ptr noundef @.str.3)
  %411 = load double, ptr %92, align 8, !tbaa !11
  %412 = fdiv double %410, %411
  store double %412, ptr %90, align 8, !tbaa !11
  store i32 0, ptr %82, align 4, !tbaa !9
  store i32 0, ptr %55, align 4, !tbaa !9
  %413 = load ptr, ptr %24, align 8, !tbaa !5
  %414 = load i32, ptr %413, align 4, !tbaa !9
  store i32 %414, ptr %49, align 4, !tbaa !9
  store i32 1, ptr %66, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %1208, %408
  %416 = load i32, ptr %66, align 4, !tbaa !9
  %417 = load i32, ptr %49, align 4, !tbaa !9
  %418 = icmp sle i32 %416, %417
  br i1 %418, label %419, label %1211

419:                                              ; preds = %415
  %420 = load i32, ptr %55, align 4, !tbaa !9
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %422, label %423

422:                                              ; preds = %419
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %1207

423:                                              ; preds = %419
  %424 = load i32, ptr %66, align 4, !tbaa !9
  %425 = load ptr, ptr %24, align 8, !tbaa !5
  %426 = load i32, ptr %425, align 4, !tbaa !9
  %427 = icmp slt i32 %424, %426
  br i1 %427, label %428, label %441

428:                                              ; preds = %423
  %429 = load ptr, ptr %25, align 8, !tbaa !5
  %430 = load i32, ptr %66, align 4, !tbaa !9
  %431 = add nsw i32 %430, 1
  %432 = load i32, ptr %66, align 4, !tbaa !9
  %433 = load i32, ptr %41, align 4, !tbaa !9
  %434 = mul nsw i32 %432, %433
  %435 = add nsw i32 %431, %434
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds double, ptr %429, i64 %436
  %438 = load double, ptr %437, align 8, !tbaa !11
  %439 = fcmp une double %438, 0.000000e+00
  %440 = zext i1 %439 to i32
  store i32 %440, ptr %55, align 4, !tbaa !9
  br label %441

441:                                              ; preds = %428, %423
  br label %442

442:                                              ; preds = %441
  %443 = load i32, ptr %88, align 4, !tbaa !9
  %444 = icmp ne i32 %443, 0
  br i1 %444, label %445, label %475

445:                                              ; preds = %442
  %446 = load i32, ptr %55, align 4, !tbaa !9
  %447 = icmp ne i32 %446, 0
  br i1 %447, label %448, label %465

448:                                              ; preds = %445
  %449 = load ptr, ptr %23, align 8, !tbaa !5
  %450 = load i32, ptr %66, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i32, ptr %449, i64 %451
  %453 = load i32, ptr %452, align 4, !tbaa !9
  %454 = icmp ne i32 %453, 0
  br i1 %454, label %464, label %455

455:                                              ; preds = %448
  %456 = load ptr, ptr %23, align 8, !tbaa !5
  %457 = load i32, ptr %66, align 4, !tbaa !9
  %458 = add nsw i32 %457, 1
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds i32, ptr %456, i64 %459
  %461 = load i32, ptr %460, align 4, !tbaa !9
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %464, label %463

463:                                              ; preds = %455
  br label %1207

464:                                              ; preds = %455, %448
  br label %474

465:                                              ; preds = %445
  %466 = load ptr, ptr %23, align 8, !tbaa !5
  %467 = load i32, ptr %66, align 4, !tbaa !9
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds i32, ptr %466, i64 %468
  %470 = load i32, ptr %469, align 4, !tbaa !9
  %471 = icmp ne i32 %470, 0
  br i1 %471, label %473, label %472

472:                                              ; preds = %465
  br label %1207

473:                                              ; preds = %465
  br label %474

474:                                              ; preds = %473, %464
  br label %475

475:                                              ; preds = %474, %442
  %476 = load i32, ptr %82, align 4, !tbaa !9
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %82, align 4, !tbaa !9
  %478 = load i32, ptr %74, align 4, !tbaa !9
  %479 = icmp ne i32 %478, 0
  br i1 %479, label %480, label %809

480:                                              ; preds = %475
  %481 = load i32, ptr %55, align 4, !tbaa !9
  %482 = icmp ne i32 %481, 0
  br i1 %482, label %483, label %716

483:                                              ; preds = %480
  %484 = load ptr, ptr %24, align 8, !tbaa !5
  %485 = load ptr, ptr %31, align 8, !tbaa !5
  %486 = load i32, ptr %82, align 4, !tbaa !9
  %487 = load i32, ptr %47, align 4, !tbaa !9
  %488 = mul nsw i32 %486, %487
  %489 = add nsw i32 %488, 1
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds double, ptr %485, i64 %490
  %492 = call double @dnrm2_(ptr noundef %484, ptr noundef %491, ptr noundef @c__1)
  store double %492, ptr %51, align 8, !tbaa !11
  %493 = load ptr, ptr %24, align 8, !tbaa !5
  %494 = load ptr, ptr %31, align 8, !tbaa !5
  %495 = load i32, ptr %82, align 4, !tbaa !9
  %496 = add nsw i32 %495, 1
  %497 = load i32, ptr %47, align 4, !tbaa !9
  %498 = mul nsw i32 %496, %497
  %499 = add nsw i32 %498, 1
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %494, i64 %500
  %502 = call double @dnrm2_(ptr noundef %493, ptr noundef %501, ptr noundef @c__1)
  store double %502, ptr %52, align 8, !tbaa !11
  %503 = call double @dlapy2_(ptr noundef %51, ptr noundef %52)
  store double %503, ptr %62, align 8, !tbaa !11
  %504 = load ptr, ptr %24, align 8, !tbaa !5
  %505 = load ptr, ptr %29, align 8, !tbaa !5
  %506 = load i32, ptr %82, align 4, !tbaa !9
  %507 = load i32, ptr %45, align 4, !tbaa !9
  %508 = mul nsw i32 %506, %507
  %509 = add nsw i32 %508, 1
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds double, ptr %505, i64 %510
  %512 = call double @dnrm2_(ptr noundef %504, ptr noundef %511, ptr noundef @c__1)
  store double %512, ptr %51, align 8, !tbaa !11
  %513 = load ptr, ptr %24, align 8, !tbaa !5
  %514 = load ptr, ptr %29, align 8, !tbaa !5
  %515 = load i32, ptr %82, align 4, !tbaa !9
  %516 = add nsw i32 %515, 1
  %517 = load i32, ptr %45, align 4, !tbaa !9
  %518 = mul nsw i32 %516, %517
  %519 = add nsw i32 %518, 1
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds double, ptr %514, i64 %520
  %522 = call double @dnrm2_(ptr noundef %513, ptr noundef %521, ptr noundef @c__1)
  store double %522, ptr %52, align 8, !tbaa !11
  %523 = call double @dlapy2_(ptr noundef %51, ptr noundef %52)
  store double %523, ptr %60, align 8, !tbaa !11
  %524 = load ptr, ptr %24, align 8, !tbaa !5
  %525 = load ptr, ptr %24, align 8, !tbaa !5
  %526 = load ptr, ptr %25, align 8, !tbaa !5
  %527 = load i32, ptr %42, align 4, !tbaa !9
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds double, ptr %526, i64 %528
  %530 = load ptr, ptr %26, align 8, !tbaa !5
  %531 = load ptr, ptr %31, align 8, !tbaa !5
  %532 = load i32, ptr %82, align 4, !tbaa !9
  %533 = load i32, ptr %47, align 4, !tbaa !9
  %534 = mul nsw i32 %532, %533
  %535 = add nsw i32 %534, 1
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds double, ptr %531, i64 %536
  %538 = load ptr, ptr %37, align 8, !tbaa !5
  %539 = getelementptr inbounds double, ptr %538, i64 1
  call void @dgemv_(ptr noundef @.str.7, ptr noundef %524, ptr noundef %525, ptr noundef @c_b19, ptr noundef %529, ptr noundef %530, ptr noundef %537, ptr noundef @c__1, ptr noundef @c_b21, ptr noundef %539, ptr noundef @c__1)
  %540 = load ptr, ptr %24, align 8, !tbaa !5
  %541 = load ptr, ptr %37, align 8, !tbaa !5
  %542 = getelementptr inbounds double, ptr %541, i64 1
  %543 = load ptr, ptr %29, align 8, !tbaa !5
  %544 = load i32, ptr %82, align 4, !tbaa !9
  %545 = load i32, ptr %45, align 4, !tbaa !9
  %546 = mul nsw i32 %544, %545
  %547 = add nsw i32 %546, 1
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds double, ptr %543, i64 %548
  %550 = call double @ddot_(ptr noundef %540, ptr noundef %542, ptr noundef @c__1, ptr noundef %549, ptr noundef @c__1)
  store double %550, ptr %80, align 8, !tbaa !11
  %551 = load ptr, ptr %24, align 8, !tbaa !5
  %552 = load ptr, ptr %37, align 8, !tbaa !5
  %553 = getelementptr inbounds double, ptr %552, i64 1
  %554 = load ptr, ptr %29, align 8, !tbaa !5
  %555 = load i32, ptr %82, align 4, !tbaa !9
  %556 = add nsw i32 %555, 1
  %557 = load i32, ptr %45, align 4, !tbaa !9
  %558 = mul nsw i32 %556, %557
  %559 = add nsw i32 %558, 1
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds double, ptr %554, i64 %560
  %562 = call double @ddot_(ptr noundef %551, ptr noundef %553, ptr noundef @c__1, ptr noundef %561, ptr noundef @c__1)
  store double %562, ptr %78, align 8, !tbaa !11
  %563 = load ptr, ptr %24, align 8, !tbaa !5
  %564 = load ptr, ptr %24, align 8, !tbaa !5
  %565 = load ptr, ptr %25, align 8, !tbaa !5
  %566 = load i32, ptr %42, align 4, !tbaa !9
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds double, ptr %565, i64 %567
  %569 = load ptr, ptr %26, align 8, !tbaa !5
  %570 = load ptr, ptr %31, align 8, !tbaa !5
  %571 = load i32, ptr %82, align 4, !tbaa !9
  %572 = add nsw i32 %571, 1
  %573 = load i32, ptr %47, align 4, !tbaa !9
  %574 = mul nsw i32 %572, %573
  %575 = add nsw i32 %574, 1
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds double, ptr %570, i64 %576
  %578 = load ptr, ptr %37, align 8, !tbaa !5
  %579 = getelementptr inbounds double, ptr %578, i64 1
  call void @dgemv_(ptr noundef @.str.7, ptr noundef %563, ptr noundef %564, ptr noundef @c_b19, ptr noundef %568, ptr noundef %569, ptr noundef %577, ptr noundef @c__1, ptr noundef @c_b21, ptr noundef %579, ptr noundef @c__1)
  %580 = load ptr, ptr %24, align 8, !tbaa !5
  %581 = load ptr, ptr %37, align 8, !tbaa !5
  %582 = getelementptr inbounds double, ptr %581, i64 1
  %583 = load ptr, ptr %29, align 8, !tbaa !5
  %584 = load i32, ptr %82, align 4, !tbaa !9
  %585 = add nsw i32 %584, 1
  %586 = load i32, ptr %45, align 4, !tbaa !9
  %587 = mul nsw i32 %585, %586
  %588 = add nsw i32 %587, 1
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds double, ptr %583, i64 %589
  %591 = call double @ddot_(ptr noundef %580, ptr noundef %582, ptr noundef @c__1, ptr noundef %590, ptr noundef @c__1)
  store double %591, ptr %70, align 8, !tbaa !11
  %592 = load ptr, ptr %24, align 8, !tbaa !5
  %593 = load ptr, ptr %37, align 8, !tbaa !5
  %594 = getelementptr inbounds double, ptr %593, i64 1
  %595 = load ptr, ptr %29, align 8, !tbaa !5
  %596 = load i32, ptr %82, align 4, !tbaa !9
  %597 = load i32, ptr %45, align 4, !tbaa !9
  %598 = mul nsw i32 %596, %597
  %599 = add nsw i32 %598, 1
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds double, ptr %595, i64 %600
  %602 = call double @ddot_(ptr noundef %592, ptr noundef %594, ptr noundef @c__1, ptr noundef %601, ptr noundef @c__1)
  store double %602, ptr %75, align 8, !tbaa !11
  %603 = load double, ptr %80, align 8, !tbaa !11
  %604 = load double, ptr %70, align 8, !tbaa !11
  %605 = fadd double %603, %604
  store double %605, ptr %57, align 8, !tbaa !11
  %606 = load double, ptr %75, align 8, !tbaa !11
  %607 = load double, ptr %78, align 8, !tbaa !11
  %608 = fsub double %606, %607
  store double %608, ptr %68, align 8, !tbaa !11
  %609 = load ptr, ptr %24, align 8, !tbaa !5
  %610 = load ptr, ptr %24, align 8, !tbaa !5
  %611 = load ptr, ptr %27, align 8, !tbaa !5
  %612 = load i32, ptr %44, align 4, !tbaa !9
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds double, ptr %611, i64 %613
  %615 = load ptr, ptr %28, align 8, !tbaa !5
  %616 = load ptr, ptr %31, align 8, !tbaa !5
  %617 = load i32, ptr %82, align 4, !tbaa !9
  %618 = load i32, ptr %47, align 4, !tbaa !9
  %619 = mul nsw i32 %617, %618
  %620 = add nsw i32 %619, 1
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds double, ptr %616, i64 %621
  %623 = load ptr, ptr %37, align 8, !tbaa !5
  %624 = getelementptr inbounds double, ptr %623, i64 1
  call void @dgemv_(ptr noundef @.str.7, ptr noundef %609, ptr noundef %610, ptr noundef @c_b19, ptr noundef %614, ptr noundef %615, ptr noundef %622, ptr noundef @c__1, ptr noundef @c_b21, ptr noundef %624, ptr noundef @c__1)
  %625 = load ptr, ptr %24, align 8, !tbaa !5
  %626 = load ptr, ptr %37, align 8, !tbaa !5
  %627 = getelementptr inbounds double, ptr %626, i64 1
  %628 = load ptr, ptr %29, align 8, !tbaa !5
  %629 = load i32, ptr %82, align 4, !tbaa !9
  %630 = load i32, ptr %45, align 4, !tbaa !9
  %631 = mul nsw i32 %629, %630
  %632 = add nsw i32 %631, 1
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds double, ptr %628, i64 %633
  %635 = call double @ddot_(ptr noundef %625, ptr noundef %627, ptr noundef @c__1, ptr noundef %634, ptr noundef @c__1)
  store double %635, ptr %80, align 8, !tbaa !11
  %636 = load ptr, ptr %24, align 8, !tbaa !5
  %637 = load ptr, ptr %37, align 8, !tbaa !5
  %638 = getelementptr inbounds double, ptr %637, i64 1
  %639 = load ptr, ptr %29, align 8, !tbaa !5
  %640 = load i32, ptr %82, align 4, !tbaa !9
  %641 = add nsw i32 %640, 1
  %642 = load i32, ptr %45, align 4, !tbaa !9
  %643 = mul nsw i32 %641, %642
  %644 = add nsw i32 %643, 1
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds double, ptr %639, i64 %645
  %647 = call double @ddot_(ptr noundef %636, ptr noundef %638, ptr noundef @c__1, ptr noundef %646, ptr noundef @c__1)
  store double %647, ptr %78, align 8, !tbaa !11
  %648 = load ptr, ptr %24, align 8, !tbaa !5
  %649 = load ptr, ptr %24, align 8, !tbaa !5
  %650 = load ptr, ptr %27, align 8, !tbaa !5
  %651 = load i32, ptr %44, align 4, !tbaa !9
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds double, ptr %650, i64 %652
  %654 = load ptr, ptr %28, align 8, !tbaa !5
  %655 = load ptr, ptr %31, align 8, !tbaa !5
  %656 = load i32, ptr %82, align 4, !tbaa !9
  %657 = add nsw i32 %656, 1
  %658 = load i32, ptr %47, align 4, !tbaa !9
  %659 = mul nsw i32 %657, %658
  %660 = add nsw i32 %659, 1
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds double, ptr %655, i64 %661
  %663 = load ptr, ptr %37, align 8, !tbaa !5
  %664 = getelementptr inbounds double, ptr %663, i64 1
  call void @dgemv_(ptr noundef @.str.7, ptr noundef %648, ptr noundef %649, ptr noundef @c_b19, ptr noundef %653, ptr noundef %654, ptr noundef %662, ptr noundef @c__1, ptr noundef @c_b21, ptr noundef %664, ptr noundef @c__1)
  %665 = load ptr, ptr %24, align 8, !tbaa !5
  %666 = load ptr, ptr %37, align 8, !tbaa !5
  %667 = getelementptr inbounds double, ptr %666, i64 1
  %668 = load ptr, ptr %29, align 8, !tbaa !5
  %669 = load i32, ptr %82, align 4, !tbaa !9
  %670 = add nsw i32 %669, 1
  %671 = load i32, ptr %45, align 4, !tbaa !9
  %672 = mul nsw i32 %670, %671
  %673 = add nsw i32 %672, 1
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds double, ptr %668, i64 %674
  %676 = call double @ddot_(ptr noundef %665, ptr noundef %667, ptr noundef @c__1, ptr noundef %675, ptr noundef @c__1)
  store double %676, ptr %70, align 8, !tbaa !11
  %677 = load ptr, ptr %24, align 8, !tbaa !5
  %678 = load ptr, ptr %37, align 8, !tbaa !5
  %679 = getelementptr inbounds double, ptr %678, i64 1
  %680 = load ptr, ptr %29, align 8, !tbaa !5
  %681 = load i32, ptr %82, align 4, !tbaa !9
  %682 = load i32, ptr %45, align 4, !tbaa !9
  %683 = mul nsw i32 %681, %682
  %684 = add nsw i32 %683, 1
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds double, ptr %680, i64 %685
  %687 = call double @ddot_(ptr noundef %677, ptr noundef %679, ptr noundef @c__1, ptr noundef %686, ptr noundef @c__1)
  store double %687, ptr %75, align 8, !tbaa !11
  %688 = load double, ptr %80, align 8, !tbaa !11
  %689 = load double, ptr %70, align 8, !tbaa !11
  %690 = fadd double %688, %689
  store double %690, ptr %58, align 8, !tbaa !11
  %691 = load double, ptr %75, align 8, !tbaa !11
  %692 = load double, ptr %78, align 8, !tbaa !11
  %693 = fsub double %691, %692
  store double %693, ptr %69, align 8, !tbaa !11
  %694 = call double @dlapy2_(ptr noundef %57, ptr noundef %68)
  store double %694, ptr %57, align 8, !tbaa !11
  %695 = call double @dlapy2_(ptr noundef %58, ptr noundef %69)
  store double %695, ptr %58, align 8, !tbaa !11
  %696 = call double @dlapy2_(ptr noundef %57, ptr noundef %58)
  store double %696, ptr %54, align 8, !tbaa !11
  %697 = load double, ptr %54, align 8, !tbaa !11
  %698 = load double, ptr %62, align 8, !tbaa !11
  %699 = load double, ptr %60, align 8, !tbaa !11
  %700 = fmul double %698, %699
  %701 = fdiv double %697, %700
  %702 = load ptr, ptr %33, align 8, !tbaa !5
  %703 = load i32, ptr %82, align 4, !tbaa !9
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds double, ptr %702, i64 %704
  store double %701, ptr %705, align 8, !tbaa !11
  %706 = load ptr, ptr %33, align 8, !tbaa !5
  %707 = load i32, ptr %82, align 4, !tbaa !9
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds double, ptr %706, i64 %708
  %710 = load double, ptr %709, align 8, !tbaa !11
  %711 = load ptr, ptr %33, align 8, !tbaa !5
  %712 = load i32, ptr %82, align 4, !tbaa !9
  %713 = add nsw i32 %712, 1
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds double, ptr %711, i64 %714
  store double %710, ptr %715, align 8, !tbaa !11
  br label %808

716:                                              ; preds = %480
  %717 = load ptr, ptr %24, align 8, !tbaa !5
  %718 = load ptr, ptr %31, align 8, !tbaa !5
  %719 = load i32, ptr %82, align 4, !tbaa !9
  %720 = load i32, ptr %47, align 4, !tbaa !9
  %721 = mul nsw i32 %719, %720
  %722 = add nsw i32 %721, 1
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds double, ptr %718, i64 %723
  %725 = call double @dnrm2_(ptr noundef %717, ptr noundef %724, ptr noundef @c__1)
  store double %725, ptr %62, align 8, !tbaa !11
  %726 = load ptr, ptr %24, align 8, !tbaa !5
  %727 = load ptr, ptr %29, align 8, !tbaa !5
  %728 = load i32, ptr %82, align 4, !tbaa !9
  %729 = load i32, ptr %45, align 4, !tbaa !9
  %730 = mul nsw i32 %728, %729
  %731 = add nsw i32 %730, 1
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds double, ptr %727, i64 %732
  %734 = call double @dnrm2_(ptr noundef %726, ptr noundef %733, ptr noundef @c__1)
  store double %734, ptr %60, align 8, !tbaa !11
  %735 = load ptr, ptr %24, align 8, !tbaa !5
  %736 = load ptr, ptr %24, align 8, !tbaa !5
  %737 = load ptr, ptr %25, align 8, !tbaa !5
  %738 = load i32, ptr %42, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds double, ptr %737, i64 %739
  %741 = load ptr, ptr %26, align 8, !tbaa !5
  %742 = load ptr, ptr %31, align 8, !tbaa !5
  %743 = load i32, ptr %82, align 4, !tbaa !9
  %744 = load i32, ptr %47, align 4, !tbaa !9
  %745 = mul nsw i32 %743, %744
  %746 = add nsw i32 %745, 1
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds double, ptr %742, i64 %747
  %749 = load ptr, ptr %37, align 8, !tbaa !5
  %750 = getelementptr inbounds double, ptr %749, i64 1
  call void @dgemv_(ptr noundef @.str.7, ptr noundef %735, ptr noundef %736, ptr noundef @c_b19, ptr noundef %740, ptr noundef %741, ptr noundef %748, ptr noundef @c__1, ptr noundef @c_b21, ptr noundef %750, ptr noundef @c__1)
  %751 = load ptr, ptr %24, align 8, !tbaa !5
  %752 = load ptr, ptr %37, align 8, !tbaa !5
  %753 = getelementptr inbounds double, ptr %752, i64 1
  %754 = load ptr, ptr %29, align 8, !tbaa !5
  %755 = load i32, ptr %82, align 4, !tbaa !9
  %756 = load i32, ptr %45, align 4, !tbaa !9
  %757 = mul nsw i32 %755, %756
  %758 = add nsw i32 %757, 1
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds double, ptr %754, i64 %759
  %761 = call double @ddot_(ptr noundef %751, ptr noundef %753, ptr noundef @c__1, ptr noundef %760, ptr noundef @c__1)
  store double %761, ptr %57, align 8, !tbaa !11
  %762 = load ptr, ptr %24, align 8, !tbaa !5
  %763 = load ptr, ptr %24, align 8, !tbaa !5
  %764 = load ptr, ptr %27, align 8, !tbaa !5
  %765 = load i32, ptr %44, align 4, !tbaa !9
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds double, ptr %764, i64 %766
  %768 = load ptr, ptr %28, align 8, !tbaa !5
  %769 = load ptr, ptr %31, align 8, !tbaa !5
  %770 = load i32, ptr %82, align 4, !tbaa !9
  %771 = load i32, ptr %47, align 4, !tbaa !9
  %772 = mul nsw i32 %770, %771
  %773 = add nsw i32 %772, 1
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds double, ptr %769, i64 %774
  %776 = load ptr, ptr %37, align 8, !tbaa !5
  %777 = getelementptr inbounds double, ptr %776, i64 1
  call void @dgemv_(ptr noundef @.str.7, ptr noundef %762, ptr noundef %763, ptr noundef @c_b19, ptr noundef %767, ptr noundef %768, ptr noundef %775, ptr noundef @c__1, ptr noundef @c_b21, ptr noundef %777, ptr noundef @c__1)
  %778 = load ptr, ptr %24, align 8, !tbaa !5
  %779 = load ptr, ptr %37, align 8, !tbaa !5
  %780 = getelementptr inbounds double, ptr %779, i64 1
  %781 = load ptr, ptr %29, align 8, !tbaa !5
  %782 = load i32, ptr %82, align 4, !tbaa !9
  %783 = load i32, ptr %45, align 4, !tbaa !9
  %784 = mul nsw i32 %782, %783
  %785 = add nsw i32 %784, 1
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds double, ptr %781, i64 %786
  %788 = call double @ddot_(ptr noundef %778, ptr noundef %780, ptr noundef @c__1, ptr noundef %787, ptr noundef @c__1)
  store double %788, ptr %58, align 8, !tbaa !11
  %789 = call double @dlapy2_(ptr noundef %57, ptr noundef %58)
  store double %789, ptr %54, align 8, !tbaa !11
  %790 = load double, ptr %54, align 8, !tbaa !11
  %791 = fcmp oeq double %790, 0.000000e+00
  br i1 %791, label %792, label %797

792:                                              ; preds = %716
  %793 = load ptr, ptr %33, align 8, !tbaa !5
  %794 = load i32, ptr %82, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds double, ptr %793, i64 %795
  store double -1.000000e+00, ptr %796, align 8, !tbaa !11
  br label %807

797:                                              ; preds = %716
  %798 = load double, ptr %54, align 8, !tbaa !11
  %799 = load double, ptr %62, align 8, !tbaa !11
  %800 = load double, ptr %60, align 8, !tbaa !11
  %801 = fmul double %799, %800
  %802 = fdiv double %798, %801
  %803 = load ptr, ptr %33, align 8, !tbaa !5
  %804 = load i32, ptr %82, align 4, !tbaa !9
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds double, ptr %803, i64 %805
  store double %802, ptr %806, align 8, !tbaa !11
  br label %807

807:                                              ; preds = %797, %792
  br label %808

808:                                              ; preds = %807, %483
  br label %809

809:                                              ; preds = %808, %475
  %810 = load i32, ptr %87, align 4, !tbaa !9
  %811 = icmp ne i32 %810, 0
  br i1 %811, label %812, label %1200

812:                                              ; preds = %809
  %813 = load ptr, ptr %24, align 8, !tbaa !5
  %814 = load i32, ptr %813, align 4, !tbaa !9
  %815 = icmp eq i32 %814, 1
  br i1 %815, label %816, label %832

816:                                              ; preds = %812
  %817 = load ptr, ptr %25, align 8, !tbaa !5
  %818 = load i32, ptr %41, align 4, !tbaa !9
  %819 = add nsw i32 %818, 1
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds double, ptr %817, i64 %820
  %822 = load ptr, ptr %27, align 8, !tbaa !5
  %823 = load i32, ptr %43, align 4, !tbaa !9
  %824 = add nsw i32 %823, 1
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds double, ptr %822, i64 %825
  %827 = call double @dlapy2_(ptr noundef %821, ptr noundef %826)
  %828 = load ptr, ptr %34, align 8, !tbaa !5
  %829 = load i32, ptr %82, align 4, !tbaa !9
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds double, ptr %828, i64 %830
  store double %827, ptr %831, align 8, !tbaa !11
  br label %1207

832:                                              ; preds = %812
  %833 = load i32, ptr %55, align 4, !tbaa !9
  %834 = icmp ne i32 %833, 0
  br i1 %834, label %835, label %986

835:                                              ; preds = %832
  %836 = load ptr, ptr %25, align 8, !tbaa !5
  %837 = load i32, ptr %66, align 4, !tbaa !9
  %838 = load i32, ptr %66, align 4, !tbaa !9
  %839 = load i32, ptr %41, align 4, !tbaa !9
  %840 = mul nsw i32 %838, %839
  %841 = add nsw i32 %837, %840
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds double, ptr %836, i64 %842
  %844 = load double, ptr %843, align 8, !tbaa !11
  %845 = load ptr, ptr %37, align 8, !tbaa !5
  %846 = getelementptr inbounds double, ptr %845, i64 1
  store double %844, ptr %846, align 8, !tbaa !11
  %847 = load ptr, ptr %25, align 8, !tbaa !5
  %848 = load i32, ptr %66, align 4, !tbaa !9
  %849 = add nsw i32 %848, 1
  %850 = load i32, ptr %66, align 4, !tbaa !9
  %851 = load i32, ptr %41, align 4, !tbaa !9
  %852 = mul nsw i32 %850, %851
  %853 = add nsw i32 %849, %852
  %854 = sext i32 %853 to i64
  %855 = getelementptr inbounds double, ptr %847, i64 %854
  %856 = load double, ptr %855, align 8, !tbaa !11
  %857 = load ptr, ptr %37, align 8, !tbaa !5
  %858 = getelementptr inbounds double, ptr %857, i64 2
  store double %856, ptr %858, align 8, !tbaa !11
  %859 = load ptr, ptr %25, align 8, !tbaa !5
  %860 = load i32, ptr %66, align 4, !tbaa !9
  %861 = load i32, ptr %66, align 4, !tbaa !9
  %862 = add nsw i32 %861, 1
  %863 = load i32, ptr %41, align 4, !tbaa !9
  %864 = mul nsw i32 %862, %863
  %865 = add nsw i32 %860, %864
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds double, ptr %859, i64 %866
  %868 = load double, ptr %867, align 8, !tbaa !11
  %869 = load ptr, ptr %37, align 8, !tbaa !5
  %870 = getelementptr inbounds double, ptr %869, i64 3
  store double %868, ptr %870, align 8, !tbaa !11
  %871 = load ptr, ptr %25, align 8, !tbaa !5
  %872 = load i32, ptr %66, align 4, !tbaa !9
  %873 = add nsw i32 %872, 1
  %874 = load i32, ptr %66, align 4, !tbaa !9
  %875 = add nsw i32 %874, 1
  %876 = load i32, ptr %41, align 4, !tbaa !9
  %877 = mul nsw i32 %875, %876
  %878 = add nsw i32 %873, %877
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds double, ptr %871, i64 %879
  %881 = load double, ptr %880, align 8, !tbaa !11
  %882 = load ptr, ptr %37, align 8, !tbaa !5
  %883 = getelementptr inbounds double, ptr %882, i64 4
  store double %881, ptr %883, align 8, !tbaa !11
  %884 = load ptr, ptr %27, align 8, !tbaa !5
  %885 = load i32, ptr %66, align 4, !tbaa !9
  %886 = load i32, ptr %66, align 4, !tbaa !9
  %887 = load i32, ptr %43, align 4, !tbaa !9
  %888 = mul nsw i32 %886, %887
  %889 = add nsw i32 %885, %888
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds double, ptr %884, i64 %890
  %892 = load double, ptr %891, align 8, !tbaa !11
  %893 = load ptr, ptr %37, align 8, !tbaa !5
  %894 = getelementptr inbounds double, ptr %893, i64 5
  store double %892, ptr %894, align 8, !tbaa !11
  %895 = load ptr, ptr %27, align 8, !tbaa !5
  %896 = load i32, ptr %66, align 4, !tbaa !9
  %897 = add nsw i32 %896, 1
  %898 = load i32, ptr %66, align 4, !tbaa !9
  %899 = load i32, ptr %43, align 4, !tbaa !9
  %900 = mul nsw i32 %898, %899
  %901 = add nsw i32 %897, %900
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds double, ptr %895, i64 %902
  %904 = load double, ptr %903, align 8, !tbaa !11
  %905 = load ptr, ptr %37, align 8, !tbaa !5
  %906 = getelementptr inbounds double, ptr %905, i64 6
  store double %904, ptr %906, align 8, !tbaa !11
  %907 = load ptr, ptr %27, align 8, !tbaa !5
  %908 = load i32, ptr %66, align 4, !tbaa !9
  %909 = load i32, ptr %66, align 4, !tbaa !9
  %910 = add nsw i32 %909, 1
  %911 = load i32, ptr %43, align 4, !tbaa !9
  %912 = mul nsw i32 %910, %911
  %913 = add nsw i32 %908, %912
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds double, ptr %907, i64 %914
  %916 = load double, ptr %915, align 8, !tbaa !11
  %917 = load ptr, ptr %37, align 8, !tbaa !5
  %918 = getelementptr inbounds double, ptr %917, i64 7
  store double %916, ptr %918, align 8, !tbaa !11
  %919 = load ptr, ptr %27, align 8, !tbaa !5
  %920 = load i32, ptr %66, align 4, !tbaa !9
  %921 = add nsw i32 %920, 1
  %922 = load i32, ptr %66, align 4, !tbaa !9
  %923 = add nsw i32 %922, 1
  %924 = load i32, ptr %43, align 4, !tbaa !9
  %925 = mul nsw i32 %923, %924
  %926 = add nsw i32 %921, %925
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds double, ptr %919, i64 %927
  %929 = load double, ptr %928, align 8, !tbaa !11
  %930 = load ptr, ptr %37, align 8, !tbaa !5
  %931 = getelementptr inbounds double, ptr %930, i64 8
  store double %929, ptr %931, align 8, !tbaa !11
  %932 = load double, ptr %90, align 8, !tbaa !11
  %933 = load double, ptr %92, align 8, !tbaa !11
  %934 = fmul double %932, %933
  store double %934, ptr %51, align 8, !tbaa !11
  %935 = load ptr, ptr %37, align 8, !tbaa !5
  %936 = getelementptr inbounds double, ptr %935, i64 1
  %937 = load ptr, ptr %37, align 8, !tbaa !5
  %938 = getelementptr inbounds double, ptr %937, i64 5
  %939 = getelementptr inbounds [1 x double], ptr %81, i64 0, i64 0
  %940 = getelementptr inbounds [1 x double], ptr %79, i64 0, i64 0
  call void @dlag2_(ptr noundef %936, ptr noundef @c__2, ptr noundef %938, ptr noundef @c__2, ptr noundef %51, ptr noundef %53, ptr noundef %939, ptr noundef %85, ptr noundef %940, ptr noundef %83)
  store double 1.000000e+00, ptr %89, align 8, !tbaa !11
  %941 = load double, ptr %85, align 8, !tbaa !11
  %942 = load double, ptr %85, align 8, !tbaa !11
  %943 = load double, ptr %83, align 8, !tbaa !11
  %944 = load double, ptr %83, align 8, !tbaa !11
  %945 = fmul double %943, %944
  %946 = call double @llvm.fmuladd.f64(double %941, double %942, double %945)
  %947 = load double, ptr %53, align 8, !tbaa !11
  %948 = load double, ptr %53, align 8, !tbaa !11
  %949 = call double @llvm.fmuladd.f64(double %947, double %948, double %946)
  %950 = fmul double %949, 2.000000e+00
  store double %950, ptr %71, align 8, !tbaa !11
  %951 = load double, ptr %53, align 8, !tbaa !11
  %952 = fmul double %951, 4.000000e+00
  %953 = load double, ptr %53, align 8, !tbaa !11
  %954 = fmul double %952, %953
  %955 = load double, ptr %83, align 8, !tbaa !11
  %956 = fmul double %954, %955
  %957 = load double, ptr %83, align 8, !tbaa !11
  %958 = fmul double %956, %957
  store double %958, ptr %72, align 8, !tbaa !11
  %959 = load double, ptr %71, align 8, !tbaa !11
  %960 = load double, ptr %71, align 8, !tbaa !11
  %961 = load double, ptr %71, align 8, !tbaa !11
  %962 = load double, ptr %72, align 8, !tbaa !11
  %963 = fmul double %962, 4.000000e+00
  %964 = fneg double %963
  %965 = call double @llvm.fmuladd.f64(double %960, double %961, double %964)
  %966 = call double @sqrt(double noundef %965) #5
  %967 = fadd double %959, %966
  store double %967, ptr %63, align 8, !tbaa !11
  %968 = load double, ptr %72, align 8, !tbaa !11
  %969 = load double, ptr %63, align 8, !tbaa !11
  %970 = fdiv double %968, %969
  store double %970, ptr %64, align 8, !tbaa !11
  %971 = load double, ptr %63, align 8, !tbaa !11
  %972 = fdiv double %971, 2.000000e+00
  store double %972, ptr %63, align 8, !tbaa !11
  %973 = load double, ptr %63, align 8, !tbaa !11
  %974 = call double @sqrt(double noundef %973) #5
  store double %974, ptr %51, align 8, !tbaa !11
  %975 = load double, ptr %64, align 8, !tbaa !11
  %976 = call double @sqrt(double noundef %975) #5
  store double %976, ptr %52, align 8, !tbaa !11
  %977 = load double, ptr %51, align 8, !tbaa !11
  %978 = load double, ptr %52, align 8, !tbaa !11
  %979 = fcmp ole double %977, %978
  br i1 %979, label %980, label %982

980:                                              ; preds = %835
  %981 = load double, ptr %51, align 8, !tbaa !11
  br label %984

982:                                              ; preds = %835
  %983 = load double, ptr %52, align 8, !tbaa !11
  br label %984

984:                                              ; preds = %982, %980
  %985 = phi double [ %981, %980 ], [ %983, %982 ]
  store double %985, ptr %54, align 8, !tbaa !11
  br label %986

986:                                              ; preds = %984, %832
  %987 = load ptr, ptr %24, align 8, !tbaa !5
  %988 = load ptr, ptr %24, align 8, !tbaa !5
  %989 = load ptr, ptr %25, align 8, !tbaa !5
  %990 = load i32, ptr %42, align 4, !tbaa !9
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds double, ptr %989, i64 %991
  %993 = load ptr, ptr %26, align 8, !tbaa !5
  %994 = load ptr, ptr %37, align 8, !tbaa !5
  %995 = getelementptr inbounds double, ptr %994, i64 1
  %996 = load ptr, ptr %24, align 8, !tbaa !5
  call void @dlacpy_(ptr noundef @.str.8, ptr noundef %987, ptr noundef %988, ptr noundef %992, ptr noundef %993, ptr noundef %995, ptr noundef %996)
  %997 = load ptr, ptr %24, align 8, !tbaa !5
  %998 = load ptr, ptr %24, align 8, !tbaa !5
  %999 = load ptr, ptr %27, align 8, !tbaa !5
  %1000 = load i32, ptr %44, align 4, !tbaa !9
  %1001 = sext i32 %1000 to i64
  %1002 = getelementptr inbounds double, ptr %999, i64 %1001
  %1003 = load ptr, ptr %28, align 8, !tbaa !5
  %1004 = load ptr, ptr %37, align 8, !tbaa !5
  %1005 = load ptr, ptr %24, align 8, !tbaa !5
  %1006 = load i32, ptr %1005, align 4, !tbaa !9
  %1007 = load ptr, ptr %24, align 8, !tbaa !5
  %1008 = load i32, ptr %1007, align 4, !tbaa !9
  %1009 = mul nsw i32 %1006, %1008
  %1010 = add nsw i32 %1009, 1
  %1011 = sext i32 %1010 to i64
  %1012 = getelementptr inbounds double, ptr %1004, i64 %1011
  %1013 = load ptr, ptr %24, align 8, !tbaa !5
  call void @dlacpy_(ptr noundef @.str.8, ptr noundef %997, ptr noundef %998, ptr noundef %1002, ptr noundef %1003, ptr noundef %1012, ptr noundef %1013)
  %1014 = load i32, ptr %66, align 4, !tbaa !9
  store i32 %1014, ptr %59, align 4, !tbaa !9
  store i32 1, ptr %61, align 4, !tbaa !9
  %1015 = load ptr, ptr %38, align 8, !tbaa !5
  %1016 = load i32, ptr %1015, align 4, !tbaa !9
  %1017 = load ptr, ptr %24, align 8, !tbaa !5
  %1018 = load i32, ptr %1017, align 4, !tbaa !9
  %1019 = shl i32 %1018, 1
  %1020 = load ptr, ptr %24, align 8, !tbaa !5
  %1021 = load i32, ptr %1020, align 4, !tbaa !9
  %1022 = mul nsw i32 %1019, %1021
  %1023 = sub nsw i32 %1016, %1022
  store i32 %1023, ptr %50, align 4, !tbaa !9
  %1024 = load ptr, ptr %24, align 8, !tbaa !5
  %1025 = load ptr, ptr %37, align 8, !tbaa !5
  %1026 = getelementptr inbounds double, ptr %1025, i64 1
  %1027 = load ptr, ptr %24, align 8, !tbaa !5
  %1028 = load ptr, ptr %37, align 8, !tbaa !5
  %1029 = load ptr, ptr %24, align 8, !tbaa !5
  %1030 = load i32, ptr %1029, align 4, !tbaa !9
  %1031 = load ptr, ptr %24, align 8, !tbaa !5
  %1032 = load i32, ptr %1031, align 4, !tbaa !9
  %1033 = mul nsw i32 %1030, %1032
  %1034 = add nsw i32 %1033, 1
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds double, ptr %1028, i64 %1035
  %1037 = load ptr, ptr %24, align 8, !tbaa !5
  %1038 = getelementptr inbounds [1 x double], ptr %79, i64 0, i64 0
  %1039 = getelementptr inbounds [1 x double], ptr %81, i64 0, i64 0
  %1040 = load ptr, ptr %37, align 8, !tbaa !5
  %1041 = load ptr, ptr %24, align 8, !tbaa !5
  %1042 = load i32, ptr %1041, align 4, !tbaa !9
  %1043 = load ptr, ptr %24, align 8, !tbaa !5
  %1044 = load i32, ptr %1043, align 4, !tbaa !9
  %1045 = mul nsw i32 %1042, %1044
  %1046 = shl i32 %1045, 1
  %1047 = add nsw i32 %1046, 1
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds double, ptr %1040, i64 %1048
  call void @dtgexc_(ptr noundef @c_false, ptr noundef @c_false, ptr noundef %1024, ptr noundef %1026, ptr noundef %1027, ptr noundef %1036, ptr noundef %1037, ptr noundef %1038, ptr noundef @c__1, ptr noundef %1039, ptr noundef @c__1, ptr noundef %59, ptr noundef %61, ptr noundef %1049, ptr noundef %50, ptr noundef %56)
  %1050 = load i32, ptr %56, align 4, !tbaa !9
  %1051 = icmp sgt i32 %1050, 0
  br i1 %1051, label %1052, label %1057

1052:                                             ; preds = %986
  %1053 = load ptr, ptr %34, align 8, !tbaa !5
  %1054 = load i32, ptr %82, align 4, !tbaa !9
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds double, ptr %1053, i64 %1055
  store double 0.000000e+00, ptr %1056, align 8, !tbaa !11
  br label %1185

1057:                                             ; preds = %986
  store i32 1, ptr %76, align 4, !tbaa !9
  %1058 = load ptr, ptr %37, align 8, !tbaa !5
  %1059 = getelementptr inbounds double, ptr %1058, i64 2
  %1060 = load double, ptr %1059, align 8, !tbaa !11
  %1061 = fcmp une double %1060, 0.000000e+00
  br i1 %1061, label %1062, label %1063

1062:                                             ; preds = %1057
  store i32 2, ptr %76, align 4, !tbaa !9
  br label %1063

1063:                                             ; preds = %1062, %1057
  %1064 = load ptr, ptr %24, align 8, !tbaa !5
  %1065 = load i32, ptr %1064, align 4, !tbaa !9
  %1066 = load i32, ptr %76, align 4, !tbaa !9
  %1067 = sub nsw i32 %1065, %1066
  store i32 %1067, ptr %77, align 4, !tbaa !9
  %1068 = load i32, ptr %77, align 4, !tbaa !9
  %1069 = icmp eq i32 %1068, 0
  br i1 %1069, label %1070, label %1076

1070:                                             ; preds = %1063
  %1071 = load double, ptr %54, align 8, !tbaa !11
  %1072 = load ptr, ptr %34, align 8, !tbaa !5
  %1073 = load i32, ptr %82, align 4, !tbaa !9
  %1074 = sext i32 %1073 to i64
  %1075 = getelementptr inbounds double, ptr %1072, i64 %1074
  store double %1071, ptr %1075, align 8, !tbaa !11
  br label %1184

1076:                                             ; preds = %1063
  %1077 = load ptr, ptr %24, align 8, !tbaa !5
  %1078 = load i32, ptr %1077, align 4, !tbaa !9
  %1079 = load ptr, ptr %24, align 8, !tbaa !5
  %1080 = load i32, ptr %1079, align 4, !tbaa !9
  %1081 = mul nsw i32 %1078, %1080
  %1082 = add nsw i32 %1081, 1
  store i32 %1082, ptr %65, align 4, !tbaa !9
  %1083 = load ptr, ptr %24, align 8, !tbaa !5
  %1084 = load i32, ptr %1083, align 4, !tbaa !9
  %1085 = shl i32 %1084, 1
  %1086 = load ptr, ptr %24, align 8, !tbaa !5
  %1087 = load i32, ptr %1086, align 4, !tbaa !9
  %1088 = mul nsw i32 %1085, %1087
  %1089 = add nsw i32 %1088, 1
  store i32 %1089, ptr %84, align 4, !tbaa !9
  %1090 = load ptr, ptr %38, align 8, !tbaa !5
  %1091 = load i32, ptr %1090, align 4, !tbaa !9
  %1092 = load ptr, ptr %24, align 8, !tbaa !5
  %1093 = load i32, ptr %1092, align 4, !tbaa !9
  %1094 = shl i32 %1093, 1
  %1095 = load ptr, ptr %24, align 8, !tbaa !5
  %1096 = load i32, ptr %1095, align 4, !tbaa !9
  %1097 = mul nsw i32 %1094, %1096
  %1098 = sub nsw i32 %1091, %1097
  store i32 %1098, ptr %50, align 4, !tbaa !9
  %1099 = load ptr, ptr %37, align 8, !tbaa !5
  %1100 = load ptr, ptr %24, align 8, !tbaa !5
  %1101 = load i32, ptr %1100, align 4, !tbaa !9
  %1102 = load i32, ptr %76, align 4, !tbaa !9
  %1103 = mul nsw i32 %1101, %1102
  %1104 = load i32, ptr %76, align 4, !tbaa !9
  %1105 = add nsw i32 %1103, %1104
  %1106 = add nsw i32 %1105, 1
  %1107 = sext i32 %1106 to i64
  %1108 = getelementptr inbounds double, ptr %1099, i64 %1107
  %1109 = load ptr, ptr %24, align 8, !tbaa !5
  %1110 = load ptr, ptr %37, align 8, !tbaa !5
  %1111 = getelementptr inbounds double, ptr %1110, i64 1
  %1112 = load ptr, ptr %24, align 8, !tbaa !5
  %1113 = load ptr, ptr %37, align 8, !tbaa !5
  %1114 = load i32, ptr %76, align 4, !tbaa !9
  %1115 = add nsw i32 %1114, 1
  %1116 = sext i32 %1115 to i64
  %1117 = getelementptr inbounds double, ptr %1113, i64 %1116
  %1118 = load ptr, ptr %24, align 8, !tbaa !5
  %1119 = load ptr, ptr %37, align 8, !tbaa !5
  %1120 = load ptr, ptr %24, align 8, !tbaa !5
  %1121 = load i32, ptr %1120, align 4, !tbaa !9
  %1122 = load i32, ptr %76, align 4, !tbaa !9
  %1123 = mul nsw i32 %1121, %1122
  %1124 = load i32, ptr %76, align 4, !tbaa !9
  %1125 = add nsw i32 %1123, %1124
  %1126 = load i32, ptr %65, align 4, !tbaa !9
  %1127 = add nsw i32 %1125, %1126
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds double, ptr %1119, i64 %1128
  %1130 = load ptr, ptr %24, align 8, !tbaa !5
  %1131 = load ptr, ptr %37, align 8, !tbaa !5
  %1132 = load i32, ptr %65, align 4, !tbaa !9
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds double, ptr %1131, i64 %1133
  %1135 = load ptr, ptr %24, align 8, !tbaa !5
  %1136 = load ptr, ptr %37, align 8, !tbaa !5
  %1137 = load i32, ptr %76, align 4, !tbaa !9
  %1138 = load i32, ptr %65, align 4, !tbaa !9
  %1139 = add nsw i32 %1137, %1138
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds double, ptr %1136, i64 %1140
  %1142 = load ptr, ptr %24, align 8, !tbaa !5
  %1143 = load ptr, ptr %34, align 8, !tbaa !5
  %1144 = load i32, ptr %82, align 4, !tbaa !9
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds double, ptr %1143, i64 %1145
  %1147 = load ptr, ptr %37, align 8, !tbaa !5
  %1148 = load i32, ptr %84, align 4, !tbaa !9
  %1149 = add nsw i32 %1148, 1
  %1150 = sext i32 %1149 to i64
  %1151 = getelementptr inbounds double, ptr %1147, i64 %1150
  %1152 = load ptr, ptr %39, align 8, !tbaa !5
  %1153 = getelementptr inbounds i32, ptr %1152, i64 1
  call void @dtgsyl_(ptr noundef @.str.7, ptr noundef @c__3, ptr noundef %77, ptr noundef %76, ptr noundef %1108, ptr noundef %1109, ptr noundef %1111, ptr noundef %1112, ptr noundef %1117, ptr noundef %1118, ptr noundef %1129, ptr noundef %1130, ptr noundef %1134, ptr noundef %1135, ptr noundef %1141, ptr noundef %1142, ptr noundef %67, ptr noundef %1146, ptr noundef %1151, ptr noundef %50, ptr noundef %1153, ptr noundef %56)
  %1154 = load i32, ptr %55, align 4, !tbaa !9
  %1155 = icmp ne i32 %1154, 0
  br i1 %1155, label %1156, label %1183

1156:                                             ; preds = %1076
  %1157 = load double, ptr %89, align 8, !tbaa !11
  %1158 = fcmp oge double 1.000000e+00, %1157
  br i1 %1158, label %1159, label %1160

1159:                                             ; preds = %1156
  br label %1162

1160:                                             ; preds = %1156
  %1161 = load double, ptr %89, align 8, !tbaa !11
  br label %1162

1162:                                             ; preds = %1160, %1159
  %1163 = phi double [ 1.000000e+00, %1159 ], [ %1161, %1160 ]
  %1164 = load ptr, ptr %34, align 8, !tbaa !5
  %1165 = load i32, ptr %82, align 4, !tbaa !9
  %1166 = sext i32 %1165 to i64
  %1167 = getelementptr inbounds double, ptr %1164, i64 %1166
  %1168 = load double, ptr %1167, align 8, !tbaa !11
  %1169 = fmul double %1163, %1168
  store double %1169, ptr %51, align 8, !tbaa !11
  %1170 = load double, ptr %51, align 8, !tbaa !11
  %1171 = load double, ptr %54, align 8, !tbaa !11
  %1172 = fcmp ole double %1170, %1171
  br i1 %1172, label %1173, label %1175

1173:                                             ; preds = %1162
  %1174 = load double, ptr %51, align 8, !tbaa !11
  br label %1177

1175:                                             ; preds = %1162
  %1176 = load double, ptr %54, align 8, !tbaa !11
  br label %1177

1177:                                             ; preds = %1175, %1173
  %1178 = phi double [ %1174, %1173 ], [ %1176, %1175 ]
  %1179 = load ptr, ptr %34, align 8, !tbaa !5
  %1180 = load i32, ptr %82, align 4, !tbaa !9
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds double, ptr %1179, i64 %1181
  store double %1178, ptr %1182, align 8, !tbaa !11
  br label %1183

1183:                                             ; preds = %1177, %1076
  br label %1184

1184:                                             ; preds = %1183, %1070
  br label %1185

1185:                                             ; preds = %1184, %1052
  %1186 = load i32, ptr %55, align 4, !tbaa !9
  %1187 = icmp ne i32 %1186, 0
  br i1 %1187, label %1188, label %1199

1188:                                             ; preds = %1185
  %1189 = load ptr, ptr %34, align 8, !tbaa !5
  %1190 = load i32, ptr %82, align 4, !tbaa !9
  %1191 = sext i32 %1190 to i64
  %1192 = getelementptr inbounds double, ptr %1189, i64 %1191
  %1193 = load double, ptr %1192, align 8, !tbaa !11
  %1194 = load ptr, ptr %34, align 8, !tbaa !5
  %1195 = load i32, ptr %82, align 4, !tbaa !9
  %1196 = add nsw i32 %1195, 1
  %1197 = sext i32 %1196 to i64
  %1198 = getelementptr inbounds double, ptr %1194, i64 %1197
  store double %1193, ptr %1198, align 8, !tbaa !11
  br label %1199

1199:                                             ; preds = %1188, %1185
  br label %1200

1200:                                             ; preds = %1199, %809
  %1201 = load i32, ptr %55, align 4, !tbaa !9
  %1202 = icmp ne i32 %1201, 0
  br i1 %1202, label %1203, label %1206

1203:                                             ; preds = %1200
  %1204 = load i32, ptr %82, align 4, !tbaa !9
  %1205 = add nsw i32 %1204, 1
  store i32 %1205, ptr %82, align 4, !tbaa !9
  br label %1206

1206:                                             ; preds = %1203, %1200
  br label %1207

1207:                                             ; preds = %1206, %816, %472, %463, %422
  br label %1208

1208:                                             ; preds = %1207
  %1209 = load i32, ptr %66, align 4, !tbaa !9
  %1210 = add nsw i32 %1209, 1
  store i32 %1210, ptr %66, align 4, !tbaa !9
  br label %415, !llvm.loop !15

1211:                                             ; preds = %415
  %1212 = load i32, ptr %73, align 4, !tbaa !9
  %1213 = sitofp i32 %1212 to double
  %1214 = load ptr, ptr %37, align 8, !tbaa !5
  %1215 = getelementptr inbounds double, ptr %1214, i64 1
  store double %1213, ptr %1215, align 8, !tbaa !11
  store i32 1, ptr %93, align 4
  br label %1216

1216:                                             ; preds = %1211, %407, %401, %393
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  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 @lsame_(ptr noundef, ptr noundef) #2

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

declare void @dtgsyl_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, 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 = { 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 = !{!"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}


; 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 [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b19 = external hidden global double, align 8
@c_b21 = external hidden global double, align 8
@c__2 = external hidden global i32, align 4
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@c_false = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dtgsna_(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr nocapture noundef readonly %9, ptr noundef %10, ptr nocapture noundef readonly %11, ptr nocapture noundef writeonly %12, ptr noundef %13, ptr nocapture noundef readonly %14, ptr nocapture noundef %15, ptr noundef %16, ptr nocapture noundef readonly %17, ptr noundef %18, ptr nocapture noundef %19) local_unnamed_addr #0 {
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca [1 x double], align 8
  %37 = alloca [1 x double], align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #6
  %40 = getelementptr inbounds i8, ptr %2, i64 -4
  %41 = load i32, ptr %5, align 4, !tbaa !5
  %narrow458 = xor i32 %41, -1
  %42 = sext i32 %narrow458 to i64
  %43 = getelementptr inbounds double, ptr %4, i64 %42
  %44 = load i32, ptr %7, align 4, !tbaa !5
  %narrow459 = xor i32 %44, -1
  %45 = sext i32 %narrow459 to i64
  %46 = getelementptr inbounds double, ptr %6, i64 %45
  %47 = load i32, ptr %9, align 4, !tbaa !5
  %narrow = xor i32 %47, -1
  %48 = sext i32 %narrow to i64
  %49 = getelementptr inbounds double, ptr %8, i64 %48
  %50 = load i32, ptr %11, align 4, !tbaa !5
  %narrow439 = xor i32 %50, -1
  %51 = sext i32 %narrow439 to i64
  %52 = getelementptr inbounds double, ptr %10, i64 %51
  %53 = getelementptr inbounds i8, ptr %12, i64 -8
  %54 = getelementptr inbounds i8, ptr %13, i64 -8
  %55 = getelementptr inbounds i8, ptr %16, i64 -8
  %56 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %57 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #6
  %58 = icmp ne i32 %57, 0
  %59 = icmp ne i32 %56, 0
  %60 = select i1 %58, i1 true, i1 %59
  %61 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %62 = icmp ne i32 %61, 0
  %63 = select i1 %62, i1 true, i1 %59
  %64 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #6
  store i32 0, ptr %19, align 4, !tbaa !5
  %65 = load i32, ptr %17, align 4, !tbaa !5
  %66 = icmp eq i32 %65, -1
  %or.cond = select i1 %60, i1 true, i1 %63
  br i1 %or.cond, label %67, label %.thread.sink.split

67:                                               ; preds = %20
  %68 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #6
  %69 = icmp ne i32 %68, 0
  %70 = icmp ne i32 %64, 0
  %or.cond3 = select i1 %69, i1 true, i1 %70
  br i1 %or.cond3, label %71, label %.thread.sink.split

71:                                               ; preds = %67
  %72 = load i32, ptr %3, align 4, !tbaa !5
  %73 = icmp slt i32 %72, 0
  br i1 %73, label %.thread.sink.split, label %74

74:                                               ; preds = %71
  %75 = load i32, ptr %5, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %72, i32 1)
  %76 = icmp slt i32 %75, %spec.select
  br i1 %76, label %.thread.sink.split, label %77

77:                                               ; preds = %74
  %78 = load i32, ptr %7, align 4, !tbaa !5
  %79 = icmp slt i32 %78, %spec.select
  br i1 %79, label %.thread.sink.split, label %80

80:                                               ; preds = %77
  br i1 %60, label %81, label %.critedge

81:                                               ; preds = %80
  %82 = load i32, ptr %9, align 4, !tbaa !5
  %83 = icmp slt i32 %82, %72
  br i1 %83, label %.thread.sink.split, label %84

84:                                               ; preds = %81
  %85 = load i32, ptr %11, align 4, !tbaa !5
  %86 = icmp slt i32 %85, %72
  br i1 %86, label %.thread.sink.split, label %.critedge

.critedge:                                        ; preds = %80, %84
  br i1 %70, label %87, label %114

87:                                               ; preds = %.critedge
  store i32 0, ptr %15, align 4, !tbaa !5
  %88 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %88, ptr %21, align 4, !tbaa !5
  %.not485 = icmp slt i32 %88, 1
  br i1 %.not485, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %87
  %89 = sext i32 %41 to i64
  %90 = add nuw i32 %88, 1
  %wide.trip.count = zext i32 %90 to i64
  %invariant.gep533 = getelementptr i8, ptr %43, i64 8
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %112
  %91 = phi i32 [ 0, %.lr.ph.preheader ], [ %113, %112 ]
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %112 ]
  %.0424487 = phi i32 [ 0, %.lr.ph.preheader ], [ %.1425, %112 ]
  %.not442 = icmp eq i32 %.0424487, 0
  br i1 %.not442, label %92, label %112

92:                                               ; preds = %.lr.ph
  %93 = load i32, ptr %3, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = icmp slt i64 %indvars.iv, %94
  br i1 %95, label %96, label %108

96:                                               ; preds = %92
  %97 = mul nsw i64 %indvars.iv, %89
  %gep534 = getelementptr double, ptr %invariant.gep533, i64 %indvars.iv
  %98 = getelementptr double, ptr %gep534, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !9
  %100 = fcmp oeq double %99, 0.000000e+00
  %101 = getelementptr inbounds i32, ptr %40, i64 %indvars.iv
  %102 = load i32, ptr %101, align 4, !tbaa !5
  %.not446 = icmp eq i32 %102, 0
  br i1 %100, label %103, label %104

103:                                              ; preds = %96
  br i1 %.not446, label %112, label %.sink.split

104:                                              ; preds = %96
  br i1 %.not446, label %105, label %.sink.split

105:                                              ; preds = %104
  %106 = getelementptr i32, ptr %2, i64 %indvars.iv
  %107 = load i32, ptr %106, align 4, !tbaa !5
  %.not445 = icmp eq i32 %107, 0
  br i1 %.not445, label %112, label %.sink.split

108:                                              ; preds = %92
  %109 = getelementptr inbounds i32, ptr %40, i64 %94
  %110 = load i32, ptr %109, align 4, !tbaa !5
  %.not443 = icmp eq i32 %110, 0
  br i1 %.not443, label %112, label %.sink.split

.sink.split:                                      ; preds = %108, %104, %105, %103
  %.sink537 = phi i32 [ 1, %103 ], [ 2, %105 ], [ 2, %104 ], [ 1, %108 ]
  %.1425.ph = phi i32 [ 0, %103 ], [ 1, %105 ], [ 1, %104 ], [ 0, %108 ]
  %111 = add nsw i32 %91, %.sink537
  store i32 %111, ptr %15, align 4, !tbaa !5
  br label %112

112:                                              ; preds = %.sink.split, %.lr.ph, %108, %103, %105
  %113 = phi i32 [ %91, %103 ], [ %91, %105 ], [ %91, %108 ], [ %91, %.lr.ph ], [ %111, %.sink.split ]
  %.1425 = phi i32 [ 0, %103 ], [ 1, %105 ], [ 0, %108 ], [ 0, %.lr.ph ], [ %.1425.ph, %.sink.split ]
  %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 %.loopexitthread-pre-split, label %.lr.ph, !llvm.loop !11

114:                                              ; preds = %.critedge
  store i32 %72, ptr %15, align 4, !tbaa !5
  br label %.loopexitthread-pre-split

.loopexitthread-pre-split:                        ; preds = %112, %114
  %.pr526 = load i32, ptr %3, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexitthread-pre-split, %87
  %115 = phi i32 [ %.pr526, %.loopexitthread-pre-split ], [ %88, %87 ]
  %116 = icmp eq i32 %115, 0
  br i1 %116, label %129, label %117

117:                                              ; preds = %.loopexit
  %118 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %.not440 = icmp eq i32 %118, 0
  br i1 %.not440, label %119, label %121

119:                                              ; preds = %117
  %120 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not441 = icmp eq i32 %120, 0
  br i1 %.not441, label %127, label %121

121:                                              ; preds = %119, %117
  %122 = load i32, ptr %3, align 4, !tbaa !5
  %123 = shl i32 %122, 1
  %124 = add nsw i32 %122, 2
  %125 = mul nsw i32 %123, %124
  %126 = add nsw i32 %125, 16
  br label %129

127:                                              ; preds = %119
  %128 = load i32, ptr %3, align 4, !tbaa !5
  br label %129

129:                                              ; preds = %.loopexit, %121, %127
  %130 = phi i32 [ %122, %121 ], [ %128, %127 ], [ 0, %.loopexit ]
  %.0429 = phi i32 [ %126, %121 ], [ %128, %127 ], [ 1, %.loopexit ]
  %131 = sitofp i32 %.0429 to double
  store double %131, ptr %16, align 8, !tbaa !9
  %132 = load i32, ptr %14, align 4, !tbaa !5
  %133 = load i32, ptr %15, align 4, !tbaa !5
  %134 = icmp slt i32 %132, %133
  br i1 %134, label %.thread.sink.split, label %135

135:                                              ; preds = %129
  %136 = load i32, ptr %17, align 4, !tbaa !5
  %137 = icmp sge i32 %136, %.0429
  %or.cond5 = select i1 %137, i1 true, i1 %66
  br i1 %or.cond5, label %138, label %.thread.sink.split

138:                                              ; preds = %135
  %.pr = load i32, ptr %19, align 4, !tbaa !5
  %.not447 = icmp eq i32 %.pr, 0
  br i1 %.not447, label %142, label %.thread

.thread.sink.split:                               ; preds = %135, %129, %84, %81, %77, %74, %71, %67, %20
  %.sink = phi i32 [ -1, %20 ], [ -2, %67 ], [ -4, %71 ], [ -6, %74 ], [ -8, %77 ], [ -10, %81 ], [ -12, %84 ], [ -15, %129 ], [ -18, %135 ]
  store i32 %.sink, ptr %19, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %138
  %139 = phi i32 [ %.pr, %138 ], [ %.sink, %.thread.sink.split ]
  %140 = sub nsw i32 0, %139
  store i32 %140, ptr %21, align 4, !tbaa !5
  %141 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %21, i32 noundef 6) #6
  br label %360

142:                                              ; preds = %138
  %143 = icmp eq i32 %130, 0
  %or.cond538 = select i1 %66, i1 true, i1 %143
  br i1 %or.cond538, label %360, label %144

144:                                              ; preds = %142
  %145 = tail call double @dlamch_(ptr noundef nonnull @.str.6) #6
  %146 = tail call double @dlamch_(ptr noundef nonnull @.str.3) #6
  %147 = load i32, ptr %3, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %52, i64 8
  %invariant.gep490 = getelementptr i8, ptr %49, i64 8
  %invariant.gep506 = getelementptr i8, ptr %16, i64 8
  %invariant.gep508 = getelementptr i8, ptr %13, i64 8
  %.not448510 = icmp slt i32 %147, 1
  br i1 %.not448510, label %._crit_edge, label %.lr.ph520

.lr.ph520:                                        ; preds = %144
  %148 = fdiv double %146, %145
  %.not450469 = icmp eq i32 %64, 0
  %149 = getelementptr inbounds i8, ptr %16, i64 16
  %150 = getelementptr inbounds i8, ptr %16, i64 24
  %151 = getelementptr inbounds i8, ptr %16, i64 32
  %152 = getelementptr inbounds i8, ptr %16, i64 40
  %153 = getelementptr inbounds i8, ptr %16, i64 48
  %154 = getelementptr inbounds i8, ptr %16, i64 56
  %155 = fmul double %145, %148
  %156 = sext i32 %41 to i64
  %157 = sext i32 %44 to i64
  %invariant.gep535 = getelementptr i8, ptr %43, i64 8
  %158 = zext nneg i32 %147 to i64
  br label %159

159:                                              ; preds = %.lr.ph520, %359
  %indvars.iv522 = phi i64 [ 1, %.lr.ph520 ], [ %indvars.iv.next523, %359 ]
  %.0517 = phi i32 [ 0, %.lr.ph520 ], [ %.1, %359 ]
  %.0422516 = phi double [ undef, %.lr.ph520 ], [ %.4, %359 ]
  %.2426515 = phi i32 [ 0, %.lr.ph520 ], [ %.4428, %359 ]
  %indvars524 = trunc i64 %indvars.iv522 to i32
  %.not449 = icmp eq i32 %.2426515, 0
  br i1 %.not449, label %160, label %359

160:                                              ; preds = %159
  %161 = load i32, ptr %3, align 4, !tbaa !5
  %162 = sext i32 %161 to i64
  %163 = icmp slt i64 %indvars.iv522, %162
  br i1 %163, label %164, label %.thread467

164:                                              ; preds = %160
  %165 = mul nsw i64 %indvars.iv522, %156
  %gep536 = getelementptr double, ptr %invariant.gep535, i64 %indvars.iv522
  %166 = getelementptr double, ptr %gep536, i64 %165
  %167 = load double, ptr %166, align 8, !tbaa !9
  %168 = fcmp une double %167, 0.000000e+00
  %169 = zext i1 %168 to i32
  br i1 %.not450469, label %179, label %170

.thread467:                                       ; preds = %160
  br i1 %.not450469, label %.thread476, label %.thread472

170:                                              ; preds = %164
  br i1 %168, label %171, label %.thread472

171:                                              ; preds = %170
  %172 = getelementptr inbounds i32, ptr %40, i64 %indvars.iv522
  %173 = load i32, ptr %172, align 4, !tbaa !5
  %.not453 = icmp eq i32 %173, 0
  br i1 %.not453, label %174, label %179

174:                                              ; preds = %171
  %175 = getelementptr inbounds i8, ptr %172, i64 4
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %.not454 = icmp eq i32 %176, 0
  br i1 %.not454, label %359, label %179

.thread472:                                       ; preds = %.thread467, %170
  %177 = getelementptr inbounds i32, ptr %40, i64 %indvars.iv522
  %178 = load i32, ptr %177, align 4, !tbaa !5
  %.not452 = icmp eq i32 %178, 0
  br i1 %.not452, label %359, label %.thread527

179:                                              ; preds = %174, %171, %164
  %.3427471 = phi i32 [ 1, %174 ], [ 1, %171 ], [ %169, %164 ]
  %180 = add nsw i32 %.0517, 1
  br i1 %60, label %183, label %235

.thread527:                                       ; preds = %.thread472
  %181 = add nsw i32 %.0517, 1
  br i1 %60, label %.thread480, label %235

.thread476:                                       ; preds = %.thread467
  %182 = add nsw i32 %.0517, 1
  br i1 %60, label %.thread480, label %235

183:                                              ; preds = %179
  %.not455 = icmp eq i32 %.3427471, 0
  br i1 %.not455, label %.thread480, label %184

184:                                              ; preds = %183
  %185 = mul nsw i32 %180, %50
  %186 = sext i32 %185 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %186
  %187 = call double @dnrm2_(ptr noundef nonnull %3, ptr noundef %gep, ptr noundef nonnull @c__1) #6
  store double %187, ptr %23, align 8, !tbaa !9
  %188 = add nsw i32 %.0517, 2
  %189 = mul nsw i32 %188, %50
  %190 = sext i32 %189 to i64
  %gep489 = getelementptr double, ptr %invariant.gep, i64 %190
  %191 = call double @dnrm2_(ptr noundef nonnull %3, ptr noundef %gep489, ptr noundef nonnull @c__1) #6
  store double %191, ptr %24, align 8, !tbaa !9
  %192 = call double @dlapy2_(ptr noundef nonnull %23, ptr noundef nonnull %24) #6
  %193 = mul nsw i32 %180, %47
  %194 = sext i32 %193 to i64
  %gep491 = getelementptr double, ptr %invariant.gep490, i64 %194
  %195 = call double @dnrm2_(ptr noundef nonnull %3, ptr noundef %gep491, ptr noundef nonnull @c__1) #6
  store double %195, ptr %23, align 8, !tbaa !9
  %196 = mul nsw i32 %188, %47
  %197 = sext i32 %196 to i64
  %gep493 = getelementptr double, ptr %invariant.gep490, i64 %197
  %198 = call double @dnrm2_(ptr noundef nonnull %3, ptr noundef %gep493, ptr noundef nonnull @c__1) #6
  store double %198, ptr %24, align 8, !tbaa !9
  %199 = call double @dlapy2_(ptr noundef nonnull %23, ptr noundef nonnull %24) #6
  call void @dgemv_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b21, ptr noundef %16, ptr noundef nonnull @c__1) #6
  %200 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep491, ptr noundef nonnull @c__1) #6
  %201 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep493, ptr noundef nonnull @c__1) #6
  call void @dgemv_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %gep489, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b21, ptr noundef %16, ptr noundef nonnull @c__1) #6
  %202 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep493, ptr noundef nonnull @c__1) #6
  %203 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep491, ptr noundef nonnull @c__1) #6
  %204 = fadd double %200, %202
  store double %204, ptr %27, align 8, !tbaa !9
  %205 = fsub double %203, %201
  store double %205, ptr %32, align 8, !tbaa !9
  call void @dgemv_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b21, ptr noundef %16, ptr noundef nonnull @c__1) #6
  %206 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep491, ptr noundef nonnull @c__1) #6
  %207 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep493, ptr noundef nonnull @c__1) #6
  call void @dgemv_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %gep489, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b21, ptr noundef %16, ptr noundef nonnull @c__1) #6
  %208 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep493, ptr noundef nonnull @c__1) #6
  %209 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep491, ptr noundef nonnull @c__1) #6
  %210 = fadd double %206, %208
  store double %210, ptr %28, align 8, !tbaa !9
  %211 = fsub double %209, %207
  store double %211, ptr %33, align 8, !tbaa !9
  %212 = call double @dlapy2_(ptr noundef nonnull %27, ptr noundef nonnull %32) #6
  store double %212, ptr %27, align 8, !tbaa !9
  %213 = call double @dlapy2_(ptr noundef nonnull %28, ptr noundef nonnull %33) #6
  store double %213, ptr %28, align 8, !tbaa !9
  %214 = call double @dlapy2_(ptr noundef nonnull %27, ptr noundef nonnull %28) #6
  %215 = fmul double %192, %199
  %216 = fdiv double %214, %215
  %217 = sext i32 %180 to i64
  %218 = getelementptr inbounds double, ptr %53, i64 %217
  store double %216, ptr %218, align 8, !tbaa !9
  br label %.sink.split539

.thread480:                                       ; preds = %.thread527, %.thread476, %183
  %219 = phi i32 [ %180, %183 ], [ %182, %.thread476 ], [ %181, %.thread527 ]
  %220 = mul nsw i32 %219, %50
  %221 = sext i32 %220 to i64
  %gep495 = getelementptr double, ptr %invariant.gep, i64 %221
  %222 = call double @dnrm2_(ptr noundef nonnull %3, ptr noundef %gep495, ptr noundef nonnull @c__1) #6
  %223 = mul nsw i32 %219, %47
  %224 = sext i32 %223 to i64
  %gep497 = getelementptr double, ptr %invariant.gep490, i64 %224
  %225 = call double @dnrm2_(ptr noundef nonnull %3, ptr noundef %gep497, ptr noundef nonnull @c__1) #6
  call void @dgemv_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %gep495, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b21, ptr noundef %16, ptr noundef nonnull @c__1) #6
  %226 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep497, ptr noundef nonnull @c__1) #6
  store double %226, ptr %27, align 8, !tbaa !9
  call void @dgemv_(ptr noundef nonnull @.str.7, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %gep495, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b21, ptr noundef %16, ptr noundef nonnull @c__1) #6
  %227 = call double @ddot_(ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull @c__1, ptr noundef %gep497, ptr noundef nonnull @c__1) #6
  store double %227, ptr %28, align 8, !tbaa !9
  %228 = call double @dlapy2_(ptr noundef nonnull %27, ptr noundef nonnull %28) #6
  %229 = fcmp oeq double %228, 0.000000e+00
  br i1 %229, label %.sink.split539, label %230

230:                                              ; preds = %.thread480
  %231 = fmul double %222, %225
  %232 = fdiv double %228, %231
  br label %.sink.split539

.sink.split539:                                   ; preds = %.thread480, %230, %184
  %.sink544 = phi i32 [ %188, %184 ], [ %219, %230 ], [ %219, %.thread480 ]
  %.sink541 = phi double [ %216, %184 ], [ %232, %230 ], [ -1.000000e+00, %.thread480 ]
  %.ph540 = phi i32 [ %180, %184 ], [ %219, %230 ], [ %219, %.thread480 ]
  %.3427471479.ph = phi i32 [ 1, %184 ], [ 0, %230 ], [ 0, %.thread480 ]
  %.1423.ph = phi double [ %214, %184 ], [ %228, %230 ], [ %228, %.thread480 ]
  %233 = sext i32 %.sink544 to i64
  %234 = getelementptr inbounds double, ptr %53, i64 %233
  store double %.sink541, ptr %234, align 8, !tbaa !9
  br label %235

235:                                              ; preds = %.sink.split539, %.thread527, %.thread476, %179
  %236 = phi i32 [ %180, %179 ], [ %182, %.thread476 ], [ %181, %.thread527 ], [ %.ph540, %.sink.split539 ]
  %.3427471479 = phi i32 [ %.3427471, %179 ], [ 0, %.thread476 ], [ 0, %.thread527 ], [ %.3427471479.ph, %.sink.split539 ]
  %.1423 = phi double [ %.0422516, %179 ], [ %.0422516, %.thread476 ], [ %.0422516, %.thread527 ], [ %.1423.ph, %.sink.split539 ]
  br i1 %63, label %237, label %.critedge462

237:                                              ; preds = %235
  %238 = load i32, ptr %3, align 4, !tbaa !5
  %239 = icmp eq i32 %238, 1
  br i1 %239, label %240, label %244

240:                                              ; preds = %237
  %241 = call double @dlapy2_(ptr noundef %4, ptr noundef %6) #6
  %242 = sext i32 %236 to i64
  %243 = getelementptr inbounds double, ptr %54, i64 %242
  store double %241, ptr %243, align 8, !tbaa !9
  br label %359

244:                                              ; preds = %237
  %.not456 = icmp eq i32 %.3427471479, 0
  br i1 %.not456, label %302, label %245

245:                                              ; preds = %244
  %246 = mul nsw i64 %indvars.iv522, %156
  %247 = getelementptr double, ptr %43, i64 %246
  %248 = getelementptr double, ptr %247, i64 %indvars.iv522
  %249 = load double, ptr %248, align 8, !tbaa !9
  store double %249, ptr %16, align 8, !tbaa !9
  %250 = add nuw nsw i64 %indvars.iv522, 1
  %251 = add nuw nsw i32 %indvars524, 1
  %252 = getelementptr double, ptr %43, i64 %250
  %253 = getelementptr double, ptr %252, i64 %246
  %254 = load double, ptr %253, align 8, !tbaa !9
  store double %254, ptr %invariant.gep506, align 8, !tbaa !9
  %255 = mul nsw i64 %250, %156
  %256 = mul nsw i32 %251, %41
  %257 = getelementptr double, ptr %43, i64 %255
  %258 = getelementptr double, ptr %257, i64 %indvars.iv522
  %259 = load double, ptr %258, align 8, !tbaa !9
  store double %259, ptr %149, align 8, !tbaa !9
  %260 = sext i32 %256 to i64
  %261 = getelementptr double, ptr %43, i64 %250
  %262 = getelementptr double, ptr %261, i64 %260
  %263 = load double, ptr %262, align 8, !tbaa !9
  store double %263, ptr %150, align 8, !tbaa !9
  %264 = mul nsw i64 %indvars.iv522, %157
  %265 = getelementptr double, ptr %46, i64 %264
  %266 = getelementptr double, ptr %265, i64 %indvars.iv522
  %267 = load double, ptr %266, align 8, !tbaa !9
  store double %267, ptr %151, align 8, !tbaa !9
  %268 = getelementptr double, ptr %46, i64 %250
  %269 = getelementptr double, ptr %268, i64 %264
  %270 = load double, ptr %269, align 8, !tbaa !9
  store double %270, ptr %152, align 8, !tbaa !9
  %271 = mul nsw i64 %250, %157
  %272 = mul nsw i32 %251, %44
  %273 = getelementptr double, ptr %46, i64 %271
  %274 = getelementptr double, ptr %273, i64 %indvars.iv522
  %275 = load double, ptr %274, align 8, !tbaa !9
  store double %275, ptr %153, align 8, !tbaa !9
  %276 = sext i32 %272 to i64
  %277 = getelementptr double, ptr %46, i64 %250
  %278 = getelementptr double, ptr %277, i64 %276
  %279 = load double, ptr %278, align 8, !tbaa !9
  store double %279, ptr %154, align 8, !tbaa !9
  store double %155, ptr %23, align 8, !tbaa !9
  call void @dlag2_(ptr noundef nonnull %16, ptr noundef nonnull @c__2, ptr noundef nonnull %151, ptr noundef nonnull @c__2, ptr noundef nonnull %23, ptr noundef nonnull %25, ptr noundef nonnull %37, ptr noundef nonnull %39, ptr noundef nonnull %36, ptr noundef nonnull %38) #6
  %280 = load double, ptr %39, align 8, !tbaa !9
  %281 = load double, ptr %38, align 8, !tbaa !9
  %282 = fmul double %281, %281
  %283 = call double @llvm.fmuladd.f64(double %280, double %280, double %282)
  %284 = load double, ptr %25, align 8, !tbaa !9
  %285 = call double @llvm.fmuladd.f64(double %284, double %284, double %283)
  %286 = fmul double %285, 2.000000e+00
  %287 = fmul double %284, 4.000000e+00
  %288 = fmul double %284, %287
  %289 = fmul double %281, %288
  %290 = fmul double %281, %289
  %291 = fmul double %290, -4.000000e+00
  %292 = call double @llvm.fmuladd.f64(double %286, double %286, double %291)
  %293 = call double @sqrt(double noundef %292) #6
  %294 = fadd double %293, %286
  %295 = fdiv double %290, %294
  %296 = fmul double %294, 5.000000e-01
  %297 = call double @sqrt(double noundef %296) #6
  store double %297, ptr %23, align 8, !tbaa !9
  %298 = call double @sqrt(double noundef %295) #6
  store double %298, ptr %24, align 8, !tbaa !9
  %299 = load double, ptr %23, align 8
  %300 = fcmp ole double %299, %298
  %301 = select i1 %300, double %299, double %298
  br label %302

302:                                              ; preds = %245, %244
  %.2 = phi double [ %301, %245 ], [ %.1423, %244 ]
  call void @dlacpy_(ptr noundef nonnull @.str.8, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %16, ptr noundef nonnull %3) #6
  %303 = load i32, ptr %3, align 4, !tbaa !5
  %304 = mul nsw i32 %303, %303
  %305 = zext nneg i32 %304 to i64
  %gep499 = getelementptr inbounds double, ptr %16, i64 %305
  call void @dlacpy_(ptr noundef nonnull @.str.8, ptr noundef nonnull %3, ptr noundef nonnull %3, ptr noundef %6, ptr noundef nonnull %7, ptr noundef nonnull %gep499, ptr noundef nonnull %3) #6
  store i32 %indvars524, ptr %29, align 4, !tbaa !5
  store i32 1, ptr %30, align 4, !tbaa !5
  %306 = load i32, ptr %17, align 4, !tbaa !5
  %307 = load i32, ptr %3, align 4, !tbaa !5
  %308 = shl i32 %307, 1
  %309 = mul nsw i32 %308, %307
  %310 = sub nsw i32 %306, %309
  store i32 %310, ptr %22, align 4, !tbaa !5
  %311 = mul nsw i32 %307, %307
  %312 = zext nneg i32 %311 to i64
  %gep501 = getelementptr inbounds double, ptr %16, i64 %312
  %313 = shl nuw i32 %311, 1
  %314 = or disjoint i32 %313, 1
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds double, ptr %55, i64 %315
  call void @dtgexc_(ptr noundef nonnull @c_false, ptr noundef nonnull @c_false, ptr noundef nonnull %3, ptr noundef %16, ptr noundef nonnull %3, ptr noundef nonnull %gep501, ptr noundef nonnull %3, ptr noundef nonnull %36, ptr noundef nonnull @c__1, ptr noundef nonnull %37, ptr noundef nonnull @c__1, ptr noundef nonnull %29, ptr noundef nonnull %30, ptr noundef nonnull %316, ptr noundef nonnull %22, ptr noundef nonnull %26) #6
  %317 = load i32, ptr %26, align 4, !tbaa !5
  %318 = icmp sgt i32 %317, 0
  br i1 %318, label %353, label %319

319:                                              ; preds = %302
  store i32 1, ptr %34, align 4, !tbaa !5
  %320 = load double, ptr %invariant.gep506, align 8, !tbaa !9
  %321 = fcmp une double %320, 0.000000e+00
  br i1 %321, label %322, label %323

322:                                              ; preds = %319
  store i32 2, ptr %34, align 4, !tbaa !5
  br label %323

323:                                              ; preds = %322, %319
  %324 = phi i32 [ 2, %322 ], [ 1, %319 ]
  %325 = load i32, ptr %3, align 4, !tbaa !5
  %326 = sub nsw i32 %325, %324
  store i32 %326, ptr %35, align 4, !tbaa !5
  %327 = icmp eq i32 %325, %324
  br i1 %327, label %353, label %328

328:                                              ; preds = %323
  %329 = mul nsw i32 %325, %325
  %330 = add nuw nsw i32 %329, 1
  %331 = shl i32 %325, 1
  %332 = mul nsw i32 %331, %325
  %333 = load i32, ptr %17, align 4, !tbaa !5
  %334 = sub nsw i32 %333, %332
  store i32 %334, ptr %22, align 4, !tbaa !5
  %335 = add i32 %325, 1
  %336 = mul i32 %335, %324
  %337 = sext i32 %336 to i64
  %gep503 = getelementptr double, ptr %16, i64 %337
  %338 = zext nneg i32 %324 to i64
  %gep505 = getelementptr double, ptr %16, i64 %338
  %339 = add nsw i32 %336, %330
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds double, ptr %55, i64 %340
  %342 = zext nneg i32 %330 to i64
  %343 = getelementptr inbounds double, ptr %55, i64 %342
  %344 = add nuw nsw i32 %330, %324
  %345 = zext nneg i32 %344 to i64
  %346 = getelementptr inbounds double, ptr %55, i64 %345
  %347 = sext i32 %236 to i64
  %348 = getelementptr inbounds double, ptr %54, i64 %347
  %349 = sext i32 %332 to i64
  %gep507 = getelementptr double, ptr %invariant.gep506, i64 %349
  call void @dtgsyl_(ptr noundef nonnull @.str.7, ptr noundef nonnull @c__3, ptr noundef nonnull %35, ptr noundef nonnull %34, ptr noundef %gep503, ptr noundef nonnull %3, ptr noundef nonnull %16, ptr noundef nonnull %3, ptr noundef %gep505, ptr noundef nonnull %3, ptr noundef nonnull %341, ptr noundef nonnull %3, ptr noundef nonnull %343, ptr noundef nonnull %3, ptr noundef nonnull %346, ptr noundef nonnull %3, ptr noundef nonnull %31, ptr noundef nonnull %348, ptr noundef %gep507, ptr noundef nonnull %22, ptr noundef %18, ptr noundef nonnull %26) #6
  br i1 %.not456, label %.critedge462, label %.thread484

.thread484:                                       ; preds = %328
  %350 = load double, ptr %348, align 8, !tbaa !9
  store double %350, ptr %23, align 8, !tbaa !9
  %351 = fcmp ole double %350, %.2
  %352 = select i1 %351, double %350, double %.2
  store double %352, ptr %348, align 8, !tbaa !9
  br label %._crit_edge525

353:                                              ; preds = %323, %302
  %.2.sink = phi double [ 0.000000e+00, %302 ], [ %.2, %323 ]
  %354 = sext i32 %236 to i64
  %355 = getelementptr inbounds double, ptr %54, i64 %354
  store double %.2.sink, ptr %355, align 8, !tbaa !9
  br i1 %.not456, label %.critedge462, label %._crit_edge525

._crit_edge525:                                   ; preds = %353, %.thread484
  %356 = phi double [ %352, %.thread484 ], [ %.2.sink, %353 ]
  %357 = sext i32 %.0517 to i64
  %gep509 = getelementptr double, ptr %invariant.gep508, i64 %357
  store double %356, ptr %gep509, align 8, !tbaa !9
  br label %.critedge462

.critedge462:                                     ; preds = %328, %353, %._crit_edge525, %235
  %.3 = phi double [ %.2, %._crit_edge525 ], [ %.2, %353 ], [ %.1423, %235 ], [ %.2, %328 ]
  %.not457 = icmp ne i32 %.3427471479, 0
  %358 = add nsw i32 %.0517, 2
  %spec.select463 = zext i1 %.not457 to i32
  %spec.select464 = select i1 %.not457, i32 %358, i32 %236
  br label %359

359:                                              ; preds = %.critedge462, %159, %240, %174, %.thread472
  %.4428 = phi i32 [ %.3427471479, %240 ], [ 1, %174 ], [ 0, %.thread472 ], [ 0, %159 ], [ %spec.select463, %.critedge462 ]
  %.4 = phi double [ %.1423, %240 ], [ %.0422516, %174 ], [ %.0422516, %.thread472 ], [ %.0422516, %159 ], [ %.3, %.critedge462 ]
  %.1 = phi i32 [ %236, %240 ], [ %.0517, %174 ], [ %.0517, %.thread472 ], [ %.0517, %159 ], [ %spec.select464, %.critedge462 ]
  %indvars.iv.next523 = add nuw nsw i64 %indvars.iv522, 1
  %.not448.not = icmp ult i64 %indvars.iv522, %158
  br i1 %.not448.not, label %159, label %._crit_edge, !llvm.loop !13

._crit_edge:                                      ; preds = %359, %144
  store double %131, ptr %16, align 8, !tbaa !9
  br label %360

360:                                              ; preds = %142, %._crit_edge, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6
  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 @lsame_(ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

declare void @dtgsyl_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, 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) #5

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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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}


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