; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (zstein)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@c__2 = external hidden global i64, align 8
@c__1 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @zstein_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) #0 {
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca %struct.doublecomplex, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca i64, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca i64, align 8
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca [4 x i64], align 16
  %61 = alloca i64, align 8
  %62 = alloca i64, align 8
  %63 = alloca double, align 8
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca i64, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca i32, align 4
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store ptr %2, ptr %17, align 8, !tbaa !5
  store ptr %3, ptr %18, align 8, !tbaa !5
  store ptr %4, ptr %19, align 8, !tbaa !5
  store ptr %5, ptr %20, align 8, !tbaa !5
  store ptr %6, ptr %21, align 8, !tbaa !5
  store ptr %7, ptr %22, align 8, !tbaa !5
  store ptr %8, ptr %23, align 8, !tbaa !5
  store ptr %9, ptr %24, align 8, !tbaa !5
  store ptr %10, ptr %25, align 8, !tbaa !5
  store ptr %11, ptr %26, align 8, !tbaa !5
  store ptr %12, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 8, 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 8, ptr %55) #5
  call void @llvm.lifetime.start.p0(i64 8, 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 8, ptr %59) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #5
  call void @llvm.lifetime.start.p0(i64 8, 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 8, ptr %65) #5
  call void @llvm.lifetime.start.p0(i64 8, 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 8, ptr %73) #5
  %75 = load ptr, ptr %16, align 8, !tbaa !5
  %76 = getelementptr inbounds double, ptr %75, i32 -1
  store ptr %76, ptr %16, align 8, !tbaa !5
  %77 = load ptr, ptr %17, align 8, !tbaa !5
  %78 = getelementptr inbounds double, ptr %77, i32 -1
  store ptr %78, ptr %17, align 8, !tbaa !5
  %79 = load ptr, ptr %19, align 8, !tbaa !5
  %80 = getelementptr inbounds double, ptr %79, i32 -1
  store ptr %80, ptr %19, align 8, !tbaa !5
  %81 = load ptr, ptr %20, align 8, !tbaa !5
  %82 = getelementptr inbounds i64, ptr %81, i32 -1
  store ptr %82, ptr %20, align 8, !tbaa !5
  %83 = load ptr, ptr %21, align 8, !tbaa !5
  %84 = getelementptr inbounds i64, ptr %83, i32 -1
  store ptr %84, ptr %21, align 8, !tbaa !5
  %85 = load ptr, ptr %23, align 8, !tbaa !5
  %86 = load i64, ptr %85, align 8, !tbaa !9
  store i64 %86, ptr %28, align 8, !tbaa !9
  %87 = load i64, ptr %28, align 8, !tbaa !9
  %88 = add nsw i64 1, %87
  store i64 %88, ptr %29, align 8, !tbaa !9
  %89 = load i64, ptr %29, align 8, !tbaa !9
  %90 = load ptr, ptr %22, align 8, !tbaa !5
  %91 = sub i64 0, %89
  %92 = getelementptr inbounds %struct.doublecomplex, ptr %90, i64 %91
  store ptr %92, ptr %22, align 8, !tbaa !5
  %93 = load ptr, ptr %24, align 8, !tbaa !5
  %94 = getelementptr inbounds double, ptr %93, i32 -1
  store ptr %94, ptr %24, align 8, !tbaa !5
  %95 = load ptr, ptr %25, align 8, !tbaa !5
  %96 = getelementptr inbounds i64, ptr %95, i32 -1
  store ptr %96, ptr %25, align 8, !tbaa !5
  %97 = load ptr, ptr %26, align 8, !tbaa !5
  %98 = getelementptr inbounds i64, ptr %97, i32 -1
  store ptr %98, ptr %26, align 8, !tbaa !5
  %99 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 0, ptr %99, align 8, !tbaa !9
  %100 = load ptr, ptr %18, align 8, !tbaa !5
  %101 = load i64, ptr %100, align 8, !tbaa !9
  store i64 %101, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %102

102:                                              ; preds = %110, %13
  %103 = load i64, ptr %41, align 8, !tbaa !9
  %104 = load i64, ptr %30, align 8, !tbaa !9
  %105 = icmp sle i64 %103, %104
  br i1 %105, label %106, label %113

106:                                              ; preds = %102
  %107 = load ptr, ptr %26, align 8, !tbaa !5
  %108 = load i64, ptr %41, align 8, !tbaa !9
  %109 = getelementptr inbounds i64, ptr %107, i64 %108
  store i64 0, ptr %109, align 8, !tbaa !9
  br label %110

110:                                              ; preds = %106
  %111 = load i64, ptr %41, align 8, !tbaa !9
  %112 = add nsw i64 %111, 1
  store i64 %112, ptr %41, align 8, !tbaa !9
  br label %102, !llvm.loop !11

113:                                              ; preds = %102
  %114 = load ptr, ptr %15, align 8, !tbaa !5
  %115 = load i64, ptr %114, align 8, !tbaa !9
  %116 = icmp slt i64 %115, 0
  br i1 %116, label %117, label %119

117:                                              ; preds = %113
  %118 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -1, ptr %118, align 8, !tbaa !9
  br label %198

119:                                              ; preds = %113
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = icmp slt i64 %121, 0
  br i1 %122, label %129, label %123

123:                                              ; preds = %119
  %124 = load ptr, ptr %18, align 8, !tbaa !5
  %125 = load i64, ptr %124, align 8, !tbaa !9
  %126 = load ptr, ptr %15, align 8, !tbaa !5
  %127 = load i64, ptr %126, align 8, !tbaa !9
  %128 = icmp sgt i64 %125, %127
  br i1 %128, label %129, label %131

129:                                              ; preds = %123, %119
  %130 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -4, ptr %130, align 8, !tbaa !9
  br label %197

131:                                              ; preds = %123
  %132 = load ptr, ptr %23, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !9
  %134 = load ptr, ptr %15, align 8, !tbaa !5
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = icmp sge i64 1, %135
  br i1 %136, label %137, label %138

137:                                              ; preds = %131
  br label %141

138:                                              ; preds = %131
  %139 = load ptr, ptr %15, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !9
  br label %141

141:                                              ; preds = %138, %137
  %142 = phi i64 [ 1, %137 ], [ %140, %138 ]
  %143 = icmp slt i64 %133, %142
  br i1 %143, label %144, label %146

144:                                              ; preds = %141
  %145 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -9, ptr %145, align 8, !tbaa !9
  br label %196

146:                                              ; preds = %141
  %147 = load ptr, ptr %18, align 8, !tbaa !5
  %148 = load i64, ptr %147, align 8, !tbaa !9
  store i64 %148, ptr %30, align 8, !tbaa !9
  store i64 2, ptr %42, align 8, !tbaa !9
  br label %149

149:                                              ; preds = %191, %146
  %150 = load i64, ptr %42, align 8, !tbaa !9
  %151 = load i64, ptr %30, align 8, !tbaa !9
  %152 = icmp sle i64 %150, %151
  br i1 %152, label %153, label %194

153:                                              ; preds = %149
  %154 = load ptr, ptr %20, align 8, !tbaa !5
  %155 = load i64, ptr %42, align 8, !tbaa !9
  %156 = getelementptr inbounds i64, ptr %154, i64 %155
  %157 = load i64, ptr %156, align 8, !tbaa !9
  %158 = load ptr, ptr %20, align 8, !tbaa !5
  %159 = load i64, ptr %42, align 8, !tbaa !9
  %160 = sub nsw i64 %159, 1
  %161 = getelementptr inbounds i64, ptr %158, i64 %160
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = icmp slt i64 %157, %162
  br i1 %163, label %164, label %166

164:                                              ; preds = %153
  %165 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -6, ptr %165, align 8, !tbaa !9
  br label %195

166:                                              ; preds = %153
  %167 = load ptr, ptr %20, align 8, !tbaa !5
  %168 = load i64, ptr %42, align 8, !tbaa !9
  %169 = getelementptr inbounds i64, ptr %167, i64 %168
  %170 = load i64, ptr %169, align 8, !tbaa !9
  %171 = load ptr, ptr %20, align 8, !tbaa !5
  %172 = load i64, ptr %42, align 8, !tbaa !9
  %173 = sub nsw i64 %172, 1
  %174 = getelementptr inbounds i64, ptr %171, i64 %173
  %175 = load i64, ptr %174, align 8, !tbaa !9
  %176 = icmp eq i64 %170, %175
  br i1 %176, label %177, label %190

177:                                              ; preds = %166
  %178 = load ptr, ptr %19, align 8, !tbaa !5
  %179 = load i64, ptr %42, align 8, !tbaa !9
  %180 = getelementptr inbounds double, ptr %178, i64 %179
  %181 = load double, ptr %180, align 8, !tbaa !13
  %182 = load ptr, ptr %19, align 8, !tbaa !5
  %183 = load i64, ptr %42, align 8, !tbaa !9
  %184 = sub nsw i64 %183, 1
  %185 = getelementptr inbounds double, ptr %182, i64 %184
  %186 = load double, ptr %185, align 8, !tbaa !13
  %187 = fcmp olt double %181, %186
  br i1 %187, label %188, label %190

188:                                              ; preds = %177
  %189 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -5, ptr %189, align 8, !tbaa !9
  br label %195

190:                                              ; preds = %177, %166
  br label %191

191:                                              ; preds = %190
  %192 = load i64, ptr %42, align 8, !tbaa !9
  %193 = add nsw i64 %192, 1
  store i64 %193, ptr %42, align 8, !tbaa !9
  br label %149, !llvm.loop !15

194:                                              ; preds = %149
  br label %195

195:                                              ; preds = %194, %188, %164
  br label %196

196:                                              ; preds = %195, %144
  br label %197

197:                                              ; preds = %196, %129
  br label %198

198:                                              ; preds = %197, %117
  %199 = load ptr, ptr %27, align 8, !tbaa !5
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = icmp ne i64 %200, 0
  br i1 %201, label %202, label %207

202:                                              ; preds = %198
  %203 = load ptr, ptr %27, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !9
  %205 = sub nsw i64 0, %204
  store i64 %205, ptr %30, align 8, !tbaa !9
  %206 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %30)
  store i32 0, ptr %14, align 4
  store i32 1, ptr %74, align 4
  br label %860

207:                                              ; preds = %198
  %208 = load ptr, ptr %15, align 8, !tbaa !5
  %209 = load i64, ptr %208, align 8, !tbaa !9
  %210 = icmp eq i64 %209, 0
  br i1 %210, label %215, label %211

211:                                              ; preds = %207
  %212 = load ptr, ptr %18, align 8, !tbaa !5
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = icmp eq i64 %213, 0
  br i1 %214, label %215, label %216

215:                                              ; preds = %211, %207
  store i32 0, ptr %14, align 4
  store i32 1, ptr %74, align 4
  br label %860

216:                                              ; preds = %211
  %217 = load ptr, ptr %15, align 8, !tbaa !5
  %218 = load i64, ptr %217, align 8, !tbaa !9
  %219 = icmp eq i64 %218, 1
  br i1 %219, label %220, label %231

220:                                              ; preds = %216
  %221 = load i64, ptr %28, align 8, !tbaa !9
  %222 = add nsw i64 %221, 1
  store i64 %222, ptr %30, align 8, !tbaa !9
  %223 = load ptr, ptr %22, align 8, !tbaa !5
  %224 = load i64, ptr %30, align 8, !tbaa !9
  %225 = getelementptr inbounds %struct.doublecomplex, ptr %223, i64 %224
  %226 = getelementptr inbounds %struct.doublecomplex, ptr %225, i32 0, i32 0
  store double 1.000000e+00, ptr %226, align 8, !tbaa !16
  %227 = load ptr, ptr %22, align 8, !tbaa !5
  %228 = load i64, ptr %30, align 8, !tbaa !9
  %229 = getelementptr inbounds %struct.doublecomplex, ptr %227, i64 %228
  %230 = getelementptr inbounds %struct.doublecomplex, ptr %229, i32 0, i32 1
  store double 0.000000e+00, ptr %230, align 8, !tbaa !18
  store i32 0, ptr %14, align 4
  store i32 1, ptr %74, align 4
  br label %860

231:                                              ; preds = %216
  br label %232

232:                                              ; preds = %231
  %233 = call double @dlamch_(ptr noundef @.str.1)
  store double %233, ptr %49, align 8, !tbaa !13
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %234

234:                                              ; preds = %241, %232
  %235 = load i64, ptr %41, align 8, !tbaa !9
  %236 = icmp sle i64 %235, 4
  br i1 %236, label %237, label %244

237:                                              ; preds = %234
  %238 = load i64, ptr %41, align 8, !tbaa !9
  %239 = sub nsw i64 %238, 1
  %240 = getelementptr inbounds [4 x i64], ptr %60, i64 0, i64 %239
  store i64 1, ptr %240, align 8, !tbaa !9
  br label %241

241:                                              ; preds = %237
  %242 = load i64, ptr %41, align 8, !tbaa !9
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %41, align 8, !tbaa !9
  br label %234, !llvm.loop !19

244:                                              ; preds = %234
  store i64 0, ptr %64, align 8, !tbaa !9
  %245 = load i64, ptr %64, align 8, !tbaa !9
  %246 = load ptr, ptr %15, align 8, !tbaa !5
  %247 = load i64, ptr %246, align 8, !tbaa !9
  %248 = add nsw i64 %245, %247
  store i64 %248, ptr %65, align 8, !tbaa !9
  %249 = load i64, ptr %65, align 8, !tbaa !9
  %250 = load ptr, ptr %15, align 8, !tbaa !5
  %251 = load i64, ptr %250, align 8, !tbaa !9
  %252 = add nsw i64 %249, %251
  store i64 %252, ptr %66, align 8, !tbaa !9
  %253 = load i64, ptr %66, align 8, !tbaa !9
  %254 = load ptr, ptr %15, align 8, !tbaa !5
  %255 = load i64, ptr %254, align 8, !tbaa !9
  %256 = add nsw i64 %253, %255
  store i64 %256, ptr %67, align 8, !tbaa !9
  %257 = load i64, ptr %67, align 8, !tbaa !9
  %258 = load ptr, ptr %15, align 8, !tbaa !5
  %259 = load i64, ptr %258, align 8, !tbaa !9
  %260 = add nsw i64 %257, %259
  store i64 %260, ptr %68, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  %261 = load ptr, ptr %20, align 8, !tbaa !5
  %262 = load ptr, ptr %18, align 8, !tbaa !5
  %263 = load i64, ptr %262, align 8, !tbaa !9
  %264 = getelementptr inbounds i64, ptr %261, i64 %263
  %265 = load i64, ptr %264, align 8, !tbaa !9
  store i64 %265, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %58, align 8, !tbaa !9
  br label %266

266:                                              ; preds = %856, %244
  %267 = load i64, ptr %58, align 8, !tbaa !9
  %268 = load i64, ptr %30, align 8, !tbaa !9
  %269 = icmp sle i64 %267, %268
  br i1 %269, label %270, label %859

270:                                              ; preds = %266
  %271 = load i64, ptr %58, align 8, !tbaa !9
  %272 = icmp eq i64 %271, 1
  br i1 %272, label %273, label %274

273:                                              ; preds = %270
  store i64 1, ptr %43, align 8, !tbaa !9
  br label %281

274:                                              ; preds = %270
  %275 = load ptr, ptr %21, align 8, !tbaa !5
  %276 = load i64, ptr %58, align 8, !tbaa !9
  %277 = sub nsw i64 %276, 1
  %278 = getelementptr inbounds i64, ptr %275, i64 %277
  %279 = load i64, ptr %278, align 8, !tbaa !9
  %280 = add nsw i64 %279, 1
  store i64 %280, ptr %43, align 8, !tbaa !9
  br label %281

281:                                              ; preds = %274, %273
  %282 = load ptr, ptr %21, align 8, !tbaa !5
  %283 = load i64, ptr %58, align 8, !tbaa !9
  %284 = getelementptr inbounds i64, ptr %282, i64 %283
  %285 = load i64, ptr %284, align 8, !tbaa !9
  store i64 %285, ptr %45, align 8, !tbaa !9
  %286 = load i64, ptr %45, align 8, !tbaa !9
  %287 = load i64, ptr %43, align 8, !tbaa !9
  %288 = sub nsw i64 %286, %287
  %289 = add nsw i64 %288, 1
  store i64 %289, ptr %70, align 8, !tbaa !9
  %290 = load i64, ptr %70, align 8, !tbaa !9
  %291 = icmp eq i64 %290, 1
  br i1 %291, label %292, label %293

292:                                              ; preds = %281
  br label %431

293:                                              ; preds = %281
  %294 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %294, ptr %61, align 8, !tbaa !9
  %295 = load ptr, ptr %16, align 8, !tbaa !5
  %296 = load i64, ptr %43, align 8, !tbaa !9
  %297 = getelementptr inbounds double, ptr %295, i64 %296
  %298 = load double, ptr %297, align 8, !tbaa !13
  store double %298, ptr %35, align 8, !tbaa !13
  %299 = load double, ptr %35, align 8, !tbaa !13
  %300 = fcmp oge double %299, 0.000000e+00
  br i1 %300, label %301, label %303

301:                                              ; preds = %293
  %302 = load double, ptr %35, align 8, !tbaa !13
  br label %306

303:                                              ; preds = %293
  %304 = load double, ptr %35, align 8, !tbaa !13
  %305 = fneg double %304
  br label %306

306:                                              ; preds = %303, %301
  %307 = phi double [ %302, %301 ], [ %305, %303 ]
  %308 = load ptr, ptr %17, align 8, !tbaa !5
  %309 = load i64, ptr %43, align 8, !tbaa !9
  %310 = getelementptr inbounds double, ptr %308, i64 %309
  %311 = load double, ptr %310, align 8, !tbaa !13
  store double %311, ptr %36, align 8, !tbaa !13
  %312 = load double, ptr %36, align 8, !tbaa !13
  %313 = fcmp oge double %312, 0.000000e+00
  br i1 %313, label %314, label %316

314:                                              ; preds = %306
  %315 = load double, ptr %36, align 8, !tbaa !13
  br label %319

316:                                              ; preds = %306
  %317 = load double, ptr %36, align 8, !tbaa !13
  %318 = fneg double %317
  br label %319

319:                                              ; preds = %316, %314
  %320 = phi double [ %315, %314 ], [ %318, %316 ]
  %321 = fadd double %307, %320
  store double %321, ptr %71, align 8, !tbaa !13
  %322 = load double, ptr %71, align 8, !tbaa !13
  store double %322, ptr %37, align 8, !tbaa !13
  %323 = load ptr, ptr %16, align 8, !tbaa !5
  %324 = load i64, ptr %45, align 8, !tbaa !9
  %325 = getelementptr inbounds double, ptr %323, i64 %324
  %326 = load double, ptr %325, align 8, !tbaa !13
  store double %326, ptr %35, align 8, !tbaa !13
  %327 = load double, ptr %35, align 8, !tbaa !13
  %328 = fcmp oge double %327, 0.000000e+00
  br i1 %328, label %329, label %331

329:                                              ; preds = %319
  %330 = load double, ptr %35, align 8, !tbaa !13
  br label %334

331:                                              ; preds = %319
  %332 = load double, ptr %35, align 8, !tbaa !13
  %333 = fneg double %332
  br label %334

334:                                              ; preds = %331, %329
  %335 = phi double [ %330, %329 ], [ %333, %331 ]
  %336 = load ptr, ptr %17, align 8, !tbaa !5
  %337 = load i64, ptr %45, align 8, !tbaa !9
  %338 = sub nsw i64 %337, 1
  %339 = getelementptr inbounds double, ptr %336, i64 %338
  %340 = load double, ptr %339, align 8, !tbaa !13
  store double %340, ptr %36, align 8, !tbaa !13
  %341 = load double, ptr %36, align 8, !tbaa !13
  %342 = fcmp oge double %341, 0.000000e+00
  br i1 %342, label %343, label %345

343:                                              ; preds = %334
  %344 = load double, ptr %36, align 8, !tbaa !13
  br label %348

345:                                              ; preds = %334
  %346 = load double, ptr %36, align 8, !tbaa !13
  %347 = fneg double %346
  br label %348

348:                                              ; preds = %345, %343
  %349 = phi double [ %344, %343 ], [ %347, %345 ]
  %350 = fadd double %335, %349
  store double %350, ptr %38, align 8, !tbaa !13
  %351 = load double, ptr %37, align 8, !tbaa !13
  %352 = load double, ptr %38, align 8, !tbaa !13
  %353 = fcmp oge double %351, %352
  br i1 %353, label %354, label %356

354:                                              ; preds = %348
  %355 = load double, ptr %37, align 8, !tbaa !13
  br label %358

356:                                              ; preds = %348
  %357 = load double, ptr %38, align 8, !tbaa !13
  br label %358

358:                                              ; preds = %356, %354
  %359 = phi double [ %355, %354 ], [ %357, %356 ]
  store double %359, ptr %71, align 8, !tbaa !13
  %360 = load i64, ptr %45, align 8, !tbaa !9
  %361 = sub nsw i64 %360, 1
  store i64 %361, ptr %31, align 8, !tbaa !9
  %362 = load i64, ptr %43, align 8, !tbaa !9
  %363 = add nsw i64 %362, 1
  store i64 %363, ptr %41, align 8, !tbaa !9
  br label %364

364:                                              ; preds = %421, %358
  %365 = load i64, ptr %41, align 8, !tbaa !9
  %366 = load i64, ptr %31, align 8, !tbaa !9
  %367 = icmp sle i64 %365, %366
  br i1 %367, label %368, label %424

368:                                              ; preds = %364
  %369 = load double, ptr %71, align 8, !tbaa !13
  store double %369, ptr %38, align 8, !tbaa !13
  %370 = load ptr, ptr %16, align 8, !tbaa !5
  %371 = load i64, ptr %41, align 8, !tbaa !9
  %372 = getelementptr inbounds double, ptr %370, i64 %371
  %373 = load double, ptr %372, align 8, !tbaa !13
  store double %373, ptr %35, align 8, !tbaa !13
  %374 = load double, ptr %35, align 8, !tbaa !13
  %375 = fcmp oge double %374, 0.000000e+00
  br i1 %375, label %376, label %378

376:                                              ; preds = %368
  %377 = load double, ptr %35, align 8, !tbaa !13
  br label %381

378:                                              ; preds = %368
  %379 = load double, ptr %35, align 8, !tbaa !13
  %380 = fneg double %379
  br label %381

381:                                              ; preds = %378, %376
  %382 = phi double [ %377, %376 ], [ %380, %378 ]
  %383 = load ptr, ptr %17, align 8, !tbaa !5
  %384 = load i64, ptr %41, align 8, !tbaa !9
  %385 = sub nsw i64 %384, 1
  %386 = getelementptr inbounds double, ptr %383, i64 %385
  %387 = load double, ptr %386, align 8, !tbaa !13
  store double %387, ptr %36, align 8, !tbaa !13
  %388 = load double, ptr %36, align 8, !tbaa !13
  %389 = fcmp oge double %388, 0.000000e+00
  br i1 %389, label %390, label %392

390:                                              ; preds = %381
  %391 = load double, ptr %36, align 8, !tbaa !13
  br label %395

392:                                              ; preds = %381
  %393 = load double, ptr %36, align 8, !tbaa !13
  %394 = fneg double %393
  br label %395

395:                                              ; preds = %392, %390
  %396 = phi double [ %391, %390 ], [ %394, %392 ]
  %397 = fadd double %382, %396
  %398 = load ptr, ptr %17, align 8, !tbaa !5
  %399 = load i64, ptr %41, align 8, !tbaa !9
  %400 = getelementptr inbounds double, ptr %398, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !13
  store double %401, ptr %37, align 8, !tbaa !13
  %402 = load double, ptr %37, align 8, !tbaa !13
  %403 = fcmp oge double %402, 0.000000e+00
  br i1 %403, label %404, label %406

404:                                              ; preds = %395
  %405 = load double, ptr %37, align 8, !tbaa !13
  br label %409

406:                                              ; preds = %395
  %407 = load double, ptr %37, align 8, !tbaa !13
  %408 = fneg double %407
  br label %409

409:                                              ; preds = %406, %404
  %410 = phi double [ %405, %404 ], [ %408, %406 ]
  %411 = fadd double %397, %410
  store double %411, ptr %39, align 8, !tbaa !13
  %412 = load double, ptr %38, align 8, !tbaa !13
  %413 = load double, ptr %39, align 8, !tbaa !13
  %414 = fcmp oge double %412, %413
  br i1 %414, label %415, label %417

415:                                              ; preds = %409
  %416 = load double, ptr %38, align 8, !tbaa !13
  br label %419

417:                                              ; preds = %409
  %418 = load double, ptr %39, align 8, !tbaa !13
  br label %419

419:                                              ; preds = %417, %415
  %420 = phi double [ %416, %415 ], [ %418, %417 ]
  store double %420, ptr %71, align 8, !tbaa !13
  br label %421

421:                                              ; preds = %419
  %422 = load i64, ptr %41, align 8, !tbaa !9
  %423 = add nsw i64 %422, 1
  store i64 %423, ptr %41, align 8, !tbaa !9
  br label %364, !llvm.loop !20

424:                                              ; preds = %364
  %425 = load double, ptr %71, align 8, !tbaa !13
  %426 = fmul double %425, 1.000000e-03
  store double %426, ptr %63, align 8, !tbaa !13
  %427 = load i64, ptr %70, align 8, !tbaa !9
  %428 = sitofp i64 %427 to double
  %429 = fdiv double 1.000000e-01, %428
  %430 = call double @sqrt(double noundef %429) #5
  store double %430, ptr %72, align 8, !tbaa !13
  br label %431

431:                                              ; preds = %424, %292
  store i64 0, ptr %57, align 8, !tbaa !9
  %432 = load ptr, ptr %18, align 8, !tbaa !5
  %433 = load i64, ptr %432, align 8, !tbaa !9
  store i64 %433, ptr %31, align 8, !tbaa !9
  %434 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %434, ptr %42, align 8, !tbaa !9
  br label %435

435:                                              ; preds = %851, %431
  %436 = load i64, ptr %42, align 8, !tbaa !9
  %437 = load i64, ptr %31, align 8, !tbaa !9
  %438 = icmp sle i64 %436, %437
  br i1 %438, label %439, label %854

439:                                              ; preds = %435
  %440 = load ptr, ptr %20, align 8, !tbaa !5
  %441 = load i64, ptr %42, align 8, !tbaa !9
  %442 = getelementptr inbounds i64, ptr %440, i64 %441
  %443 = load i64, ptr %442, align 8, !tbaa !9
  %444 = load i64, ptr %58, align 8, !tbaa !9
  %445 = icmp ne i64 %443, %444
  br i1 %445, label %446, label %448

446:                                              ; preds = %439
  %447 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %447, ptr %44, align 8, !tbaa !9
  br label %855

448:                                              ; preds = %439
  %449 = load i64, ptr %57, align 8, !tbaa !9
  %450 = add nsw i64 %449, 1
  store i64 %450, ptr %57, align 8, !tbaa !9
  %451 = load ptr, ptr %19, align 8, !tbaa !5
  %452 = load i64, ptr %42, align 8, !tbaa !9
  %453 = getelementptr inbounds double, ptr %451, i64 %452
  %454 = load double, ptr %453, align 8, !tbaa !13
  store double %454, ptr %47, align 8, !tbaa !13
  %455 = load i64, ptr %70, align 8, !tbaa !9
  %456 = icmp eq i64 %455, 1
  br i1 %456, label %457, label %462

457:                                              ; preds = %448
  %458 = load ptr, ptr %24, align 8, !tbaa !5
  %459 = load i64, ptr %64, align 8, !tbaa !9
  %460 = add nsw i64 %459, 1
  %461 = getelementptr inbounds double, ptr %458, i64 %460
  store double 1.000000e+00, ptr %461, align 8, !tbaa !13
  br label %786

462:                                              ; preds = %448
  %463 = load i64, ptr %57, align 8, !tbaa !9
  %464 = icmp sgt i64 %463, 1
  br i1 %464, label %465, label %491

465:                                              ; preds = %462
  %466 = load double, ptr %49, align 8, !tbaa !13
  %467 = load double, ptr %47, align 8, !tbaa !13
  %468 = fmul double %466, %467
  store double %468, ptr %35, align 8, !tbaa !13
  %469 = load double, ptr %35, align 8, !tbaa !13
  %470 = fcmp oge double %469, 0.000000e+00
  br i1 %470, label %471, label %473

471:                                              ; preds = %465
  %472 = load double, ptr %35, align 8, !tbaa !13
  br label %476

473:                                              ; preds = %465
  %474 = load double, ptr %35, align 8, !tbaa !13
  %475 = fneg double %474
  br label %476

476:                                              ; preds = %473, %471
  %477 = phi double [ %472, %471 ], [ %475, %473 ]
  store double %477, ptr %56, align 8, !tbaa !13
  %478 = load double, ptr %56, align 8, !tbaa !13
  %479 = fmul double %478, 1.000000e+01
  store double %479, ptr %73, align 8, !tbaa !13
  %480 = load double, ptr %47, align 8, !tbaa !13
  %481 = load double, ptr %54, align 8, !tbaa !13
  %482 = fsub double %480, %481
  store double %482, ptr %50, align 8, !tbaa !13
  %483 = load double, ptr %50, align 8, !tbaa !13
  %484 = load double, ptr %73, align 8, !tbaa !13
  %485 = fcmp olt double %483, %484
  br i1 %485, label %486, label %490

486:                                              ; preds = %476
  %487 = load double, ptr %54, align 8, !tbaa !13
  %488 = load double, ptr %73, align 8, !tbaa !13
  %489 = fadd double %487, %488
  store double %489, ptr %47, align 8, !tbaa !13
  br label %490

490:                                              ; preds = %486, %476
  br label %491

491:                                              ; preds = %490, %462
  store i64 0, ptr %53, align 8, !tbaa !9
  store i64 0, ptr %69, align 8, !tbaa !9
  %492 = getelementptr inbounds [4 x i64], ptr %60, i64 0, i64 0
  %493 = load ptr, ptr %24, align 8, !tbaa !5
  %494 = load i64, ptr %64, align 8, !tbaa !9
  %495 = add nsw i64 %494, 1
  %496 = getelementptr inbounds double, ptr %493, i64 %495
  %497 = call i32 @dlarnv_(ptr noundef @c__2, ptr noundef %492, ptr noundef %70, ptr noundef %496)
  %498 = load ptr, ptr %16, align 8, !tbaa !5
  %499 = load i64, ptr %43, align 8, !tbaa !9
  %500 = getelementptr inbounds double, ptr %498, i64 %499
  %501 = load ptr, ptr %24, align 8, !tbaa !5
  %502 = load i64, ptr %67, align 8, !tbaa !9
  %503 = add nsw i64 %502, 1
  %504 = getelementptr inbounds double, ptr %501, i64 %503
  %505 = call i32 @f2c_dcopy(ptr noundef %70, ptr noundef %500, ptr noundef @c__1, ptr noundef %504, ptr noundef @c__1)
  %506 = load i64, ptr %70, align 8, !tbaa !9
  %507 = sub nsw i64 %506, 1
  store i64 %507, ptr %32, align 8, !tbaa !9
  %508 = load ptr, ptr %17, align 8, !tbaa !5
  %509 = load i64, ptr %43, align 8, !tbaa !9
  %510 = getelementptr inbounds double, ptr %508, i64 %509
  %511 = load ptr, ptr %24, align 8, !tbaa !5
  %512 = load i64, ptr %65, align 8, !tbaa !9
  %513 = add nsw i64 %512, 2
  %514 = getelementptr inbounds double, ptr %511, i64 %513
  %515 = call i32 @f2c_dcopy(ptr noundef %32, ptr noundef %510, ptr noundef @c__1, ptr noundef %514, ptr noundef @c__1)
  %516 = load i64, ptr %70, align 8, !tbaa !9
  %517 = sub nsw i64 %516, 1
  store i64 %517, ptr %32, align 8, !tbaa !9
  %518 = load ptr, ptr %17, align 8, !tbaa !5
  %519 = load i64, ptr %43, align 8, !tbaa !9
  %520 = getelementptr inbounds double, ptr %518, i64 %519
  %521 = load ptr, ptr %24, align 8, !tbaa !5
  %522 = load i64, ptr %66, align 8, !tbaa !9
  %523 = add nsw i64 %522, 1
  %524 = getelementptr inbounds double, ptr %521, i64 %523
  %525 = call i32 @f2c_dcopy(ptr noundef %32, ptr noundef %520, ptr noundef @c__1, ptr noundef %524, ptr noundef @c__1)
  store double 0.000000e+00, ptr %52, align 8, !tbaa !13
  %526 = load ptr, ptr %24, align 8, !tbaa !5
  %527 = load i64, ptr %67, align 8, !tbaa !9
  %528 = add nsw i64 %527, 1
  %529 = getelementptr inbounds double, ptr %526, i64 %528
  %530 = load ptr, ptr %24, align 8, !tbaa !5
  %531 = load i64, ptr %65, align 8, !tbaa !9
  %532 = add nsw i64 %531, 2
  %533 = getelementptr inbounds double, ptr %530, i64 %532
  %534 = load ptr, ptr %24, align 8, !tbaa !5
  %535 = load i64, ptr %66, align 8, !tbaa !9
  %536 = add nsw i64 %535, 1
  %537 = getelementptr inbounds double, ptr %534, i64 %536
  %538 = load ptr, ptr %24, align 8, !tbaa !5
  %539 = load i64, ptr %68, align 8, !tbaa !9
  %540 = add nsw i64 %539, 1
  %541 = getelementptr inbounds double, ptr %538, i64 %540
  %542 = load ptr, ptr %25, align 8, !tbaa !5
  %543 = getelementptr inbounds i64, ptr %542, i64 1
  %544 = call i32 @dlagtf_(ptr noundef %70, ptr noundef %529, ptr noundef %47, ptr noundef %533, ptr noundef %537, ptr noundef %52, ptr noundef %541, ptr noundef %543, ptr noundef %62)
  br label %545

545:                                              ; preds = %747, %741, %491
  %546 = load i64, ptr %53, align 8, !tbaa !9
  %547 = add nsw i64 %546, 1
  store i64 %547, ptr %53, align 8, !tbaa !9
  %548 = load i64, ptr %53, align 8, !tbaa !9
  %549 = icmp sgt i64 %548, 5
  br i1 %549, label %550, label %551

550:                                              ; preds = %545
  br label %749

551:                                              ; preds = %545
  %552 = load double, ptr %49, align 8, !tbaa !13
  store double %552, ptr %36, align 8, !tbaa !13
  %553 = load ptr, ptr %24, align 8, !tbaa !5
  %554 = load i64, ptr %67, align 8, !tbaa !9
  %555 = load i64, ptr %70, align 8, !tbaa !9
  %556 = add nsw i64 %554, %555
  %557 = getelementptr inbounds double, ptr %553, i64 %556
  %558 = load double, ptr %557, align 8, !tbaa !13
  store double %558, ptr %35, align 8, !tbaa !13
  %559 = load double, ptr %35, align 8, !tbaa !13
  %560 = fcmp oge double %559, 0.000000e+00
  br i1 %560, label %561, label %563

561:                                              ; preds = %551
  %562 = load double, ptr %35, align 8, !tbaa !13
  br label %566

563:                                              ; preds = %551
  %564 = load double, ptr %35, align 8, !tbaa !13
  %565 = fneg double %564
  br label %566

566:                                              ; preds = %563, %561
  %567 = phi double [ %562, %561 ], [ %565, %563 ]
  store double %567, ptr %37, align 8, !tbaa !13
  %568 = load i64, ptr %70, align 8, !tbaa !9
  %569 = sitofp i64 %568 to double
  %570 = load double, ptr %71, align 8, !tbaa !13
  %571 = fmul double %569, %570
  %572 = load double, ptr %36, align 8, !tbaa !13
  %573 = load double, ptr %37, align 8, !tbaa !13
  %574 = fcmp oge double %572, %573
  br i1 %574, label %575, label %577

575:                                              ; preds = %566
  %576 = load double, ptr %36, align 8, !tbaa !13
  br label %579

577:                                              ; preds = %566
  %578 = load double, ptr %37, align 8, !tbaa !13
  br label %579

579:                                              ; preds = %577, %575
  %580 = phi double [ %576, %575 ], [ %578, %577 ]
  %581 = fmul double %571, %580
  %582 = load ptr, ptr %24, align 8, !tbaa !5
  %583 = load i64, ptr %64, align 8, !tbaa !9
  %584 = add nsw i64 %583, 1
  %585 = getelementptr inbounds double, ptr %582, i64 %584
  %586 = call double @f2c_dasum(ptr noundef %70, ptr noundef %585, ptr noundef @c__1)
  %587 = fdiv double %581, %586
  store double %587, ptr %48, align 8, !tbaa !13
  %588 = load ptr, ptr %24, align 8, !tbaa !5
  %589 = load i64, ptr %64, align 8, !tbaa !9
  %590 = add nsw i64 %589, 1
  %591 = getelementptr inbounds double, ptr %588, i64 %590
  %592 = call i32 @f2c_dscal(ptr noundef %70, ptr noundef %48, ptr noundef %591, ptr noundef @c__1)
  %593 = load ptr, ptr %24, align 8, !tbaa !5
  %594 = load i64, ptr %67, align 8, !tbaa !9
  %595 = add nsw i64 %594, 1
  %596 = getelementptr inbounds double, ptr %593, i64 %595
  %597 = load ptr, ptr %24, align 8, !tbaa !5
  %598 = load i64, ptr %65, align 8, !tbaa !9
  %599 = add nsw i64 %598, 2
  %600 = getelementptr inbounds double, ptr %597, i64 %599
  %601 = load ptr, ptr %24, align 8, !tbaa !5
  %602 = load i64, ptr %66, align 8, !tbaa !9
  %603 = add nsw i64 %602, 1
  %604 = getelementptr inbounds double, ptr %601, i64 %603
  %605 = load ptr, ptr %24, align 8, !tbaa !5
  %606 = load i64, ptr %68, align 8, !tbaa !9
  %607 = add nsw i64 %606, 1
  %608 = getelementptr inbounds double, ptr %605, i64 %607
  %609 = load ptr, ptr %25, align 8, !tbaa !5
  %610 = getelementptr inbounds i64, ptr %609, i64 1
  %611 = load ptr, ptr %24, align 8, !tbaa !5
  %612 = load i64, ptr %64, align 8, !tbaa !9
  %613 = add nsw i64 %612, 1
  %614 = getelementptr inbounds double, ptr %611, i64 %613
  %615 = call i32 @dlagts_(ptr noundef @c_n1, ptr noundef %70, ptr noundef %596, ptr noundef %600, ptr noundef %604, ptr noundef %608, ptr noundef %610, ptr noundef %614, ptr noundef %52, ptr noundef %62)
  %616 = load i64, ptr %57, align 8, !tbaa !9
  %617 = icmp eq i64 %616, 1
  br i1 %617, label %618, label %619

618:                                              ; preds = %579
  br label %717

619:                                              ; preds = %579
  %620 = load double, ptr %47, align 8, !tbaa !13
  %621 = load double, ptr %54, align 8, !tbaa !13
  %622 = fsub double %620, %621
  store double %622, ptr %35, align 8, !tbaa !13
  %623 = load double, ptr %35, align 8, !tbaa !13
  %624 = fcmp oge double %623, 0.000000e+00
  br i1 %624, label %625, label %627

625:                                              ; preds = %619
  %626 = load double, ptr %35, align 8, !tbaa !13
  br label %630

627:                                              ; preds = %619
  %628 = load double, ptr %35, align 8, !tbaa !13
  %629 = fneg double %628
  br label %630

630:                                              ; preds = %627, %625
  %631 = phi double [ %626, %625 ], [ %629, %627 ]
  %632 = load double, ptr %63, align 8, !tbaa !13
  %633 = fcmp ogt double %631, %632
  br i1 %633, label %634, label %636

634:                                              ; preds = %630
  %635 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %635, ptr %61, align 8, !tbaa !9
  br label %636

636:                                              ; preds = %634, %630
  %637 = load i64, ptr %61, align 8, !tbaa !9
  %638 = load i64, ptr %42, align 8, !tbaa !9
  %639 = icmp ne i64 %637, %638
  br i1 %639, label %640, label %716

640:                                              ; preds = %636
  %641 = load i64, ptr %42, align 8, !tbaa !9
  %642 = sub nsw i64 %641, 1
  store i64 %642, ptr %32, align 8, !tbaa !9
  %643 = load i64, ptr %61, align 8, !tbaa !9
  store i64 %643, ptr %41, align 8, !tbaa !9
  br label %644

644:                                              ; preds = %712, %640
  %645 = load i64, ptr %41, align 8, !tbaa !9
  %646 = load i64, ptr %32, align 8, !tbaa !9
  %647 = icmp sle i64 %645, %646
  br i1 %647, label %648, label %715

648:                                              ; preds = %644
  store double 0.000000e+00, ptr %55, align 8, !tbaa !13
  %649 = load i64, ptr %70, align 8, !tbaa !9
  store i64 %649, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %650

650:                                              ; preds = %676, %648
  %651 = load i64, ptr %46, align 8, !tbaa !9
  %652 = load i64, ptr %33, align 8, !tbaa !9
  %653 = icmp sle i64 %651, %652
  br i1 %653, label %654, label %679

654:                                              ; preds = %650
  %655 = load i64, ptr %43, align 8, !tbaa !9
  %656 = sub nsw i64 %655, 1
  %657 = load i64, ptr %46, align 8, !tbaa !9
  %658 = add nsw i64 %656, %657
  %659 = load i64, ptr %41, align 8, !tbaa !9
  %660 = load i64, ptr %28, align 8, !tbaa !9
  %661 = mul nsw i64 %659, %660
  %662 = add nsw i64 %658, %661
  store i64 %662, ptr %34, align 8, !tbaa !9
  %663 = load ptr, ptr %24, align 8, !tbaa !5
  %664 = load i64, ptr %64, align 8, !tbaa !9
  %665 = load i64, ptr %46, align 8, !tbaa !9
  %666 = add nsw i64 %664, %665
  %667 = getelementptr inbounds double, ptr %663, i64 %666
  %668 = load double, ptr %667, align 8, !tbaa !13
  %669 = load ptr, ptr %22, align 8, !tbaa !5
  %670 = load i64, ptr %34, align 8, !tbaa !9
  %671 = getelementptr inbounds %struct.doublecomplex, ptr %669, i64 %670
  %672 = getelementptr inbounds %struct.doublecomplex, ptr %671, i32 0, i32 0
  %673 = load double, ptr %672, align 8, !tbaa !16
  %674 = load double, ptr %55, align 8, !tbaa !13
  %675 = call double @llvm.fmuladd.f64(double %668, double %673, double %674)
  store double %675, ptr %55, align 8, !tbaa !13
  br label %676

676:                                              ; preds = %654
  %677 = load i64, ptr %46, align 8, !tbaa !9
  %678 = add nsw i64 %677, 1
  store i64 %678, ptr %46, align 8, !tbaa !9
  br label %650, !llvm.loop !21

679:                                              ; preds = %650
  %680 = load i64, ptr %70, align 8, !tbaa !9
  store i64 %680, ptr %33, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %681

681:                                              ; preds = %708, %679
  %682 = load i64, ptr %46, align 8, !tbaa !9
  %683 = load i64, ptr %33, align 8, !tbaa !9
  %684 = icmp sle i64 %682, %683
  br i1 %684, label %685, label %711

685:                                              ; preds = %681
  %686 = load i64, ptr %43, align 8, !tbaa !9
  %687 = sub nsw i64 %686, 1
  %688 = load i64, ptr %46, align 8, !tbaa !9
  %689 = add nsw i64 %687, %688
  %690 = load i64, ptr %41, align 8, !tbaa !9
  %691 = load i64, ptr %28, align 8, !tbaa !9
  %692 = mul nsw i64 %690, %691
  %693 = add nsw i64 %689, %692
  store i64 %693, ptr %34, align 8, !tbaa !9
  %694 = load double, ptr %55, align 8, !tbaa !13
  %695 = load ptr, ptr %22, align 8, !tbaa !5
  %696 = load i64, ptr %34, align 8, !tbaa !9
  %697 = getelementptr inbounds %struct.doublecomplex, ptr %695, i64 %696
  %698 = getelementptr inbounds %struct.doublecomplex, ptr %697, i32 0, i32 0
  %699 = load double, ptr %698, align 8, !tbaa !16
  %700 = load ptr, ptr %24, align 8, !tbaa !5
  %701 = load i64, ptr %64, align 8, !tbaa !9
  %702 = load i64, ptr %46, align 8, !tbaa !9
  %703 = add nsw i64 %701, %702
  %704 = getelementptr inbounds double, ptr %700, i64 %703
  %705 = load double, ptr %704, align 8, !tbaa !13
  %706 = fneg double %694
  %707 = call double @llvm.fmuladd.f64(double %706, double %699, double %705)
  store double %707, ptr %704, align 8, !tbaa !13
  br label %708

708:                                              ; preds = %685
  %709 = load i64, ptr %46, align 8, !tbaa !9
  %710 = add nsw i64 %709, 1
  store i64 %710, ptr %46, align 8, !tbaa !9
  br label %681, !llvm.loop !22

711:                                              ; preds = %681
  br label %712

712:                                              ; preds = %711
  %713 = load i64, ptr %41, align 8, !tbaa !9
  %714 = add nsw i64 %713, 1
  store i64 %714, ptr %41, align 8, !tbaa !9
  br label %644, !llvm.loop !23

715:                                              ; preds = %644
  br label %716

716:                                              ; preds = %715, %636
  br label %717

717:                                              ; preds = %716, %618
  %718 = load ptr, ptr %24, align 8, !tbaa !5
  %719 = load i64, ptr %64, align 8, !tbaa !9
  %720 = add nsw i64 %719, 1
  %721 = getelementptr inbounds double, ptr %718, i64 %720
  %722 = call i64 @f2c_idamax(ptr noundef %70, ptr noundef %721, ptr noundef @c__1)
  store i64 %722, ptr %59, align 8, !tbaa !9
  %723 = load ptr, ptr %24, align 8, !tbaa !5
  %724 = load i64, ptr %64, align 8, !tbaa !9
  %725 = load i64, ptr %59, align 8, !tbaa !9
  %726 = add nsw i64 %724, %725
  %727 = getelementptr inbounds double, ptr %723, i64 %726
  %728 = load double, ptr %727, align 8, !tbaa !13
  store double %728, ptr %35, align 8, !tbaa !13
  %729 = load double, ptr %35, align 8, !tbaa !13
  %730 = fcmp oge double %729, 0.000000e+00
  br i1 %730, label %731, label %733

731:                                              ; preds = %717
  %732 = load double, ptr %35, align 8, !tbaa !13
  br label %736

733:                                              ; preds = %717
  %734 = load double, ptr %35, align 8, !tbaa !13
  %735 = fneg double %734
  br label %736

736:                                              ; preds = %733, %731
  %737 = phi double [ %732, %731 ], [ %735, %733 ]
  store double %737, ptr %51, align 8, !tbaa !13
  %738 = load double, ptr %51, align 8, !tbaa !13
  %739 = load double, ptr %72, align 8, !tbaa !13
  %740 = fcmp olt double %738, %739
  br i1 %740, label %741, label %742

741:                                              ; preds = %736
  br label %545

742:                                              ; preds = %736
  %743 = load i64, ptr %69, align 8, !tbaa !9
  %744 = add nsw i64 %743, 1
  store i64 %744, ptr %69, align 8, !tbaa !9
  %745 = load i64, ptr %69, align 8, !tbaa !9
  %746 = icmp slt i64 %745, 3
  br i1 %746, label %747, label %748

747:                                              ; preds = %742
  br label %545

748:                                              ; preds = %742
  br label %758

749:                                              ; preds = %550
  %750 = load ptr, ptr %27, align 8, !tbaa !5
  %751 = load i64, ptr %750, align 8, !tbaa !9
  %752 = add nsw i64 %751, 1
  store i64 %752, ptr %750, align 8, !tbaa !9
  %753 = load i64, ptr %42, align 8, !tbaa !9
  %754 = load ptr, ptr %26, align 8, !tbaa !5
  %755 = load ptr, ptr %27, align 8, !tbaa !5
  %756 = load i64, ptr %755, align 8, !tbaa !9
  %757 = getelementptr inbounds i64, ptr %754, i64 %756
  store i64 %753, ptr %757, align 8, !tbaa !9
  br label %758

758:                                              ; preds = %749, %748
  %759 = load ptr, ptr %24, align 8, !tbaa !5
  %760 = load i64, ptr %64, align 8, !tbaa !9
  %761 = add nsw i64 %760, 1
  %762 = getelementptr inbounds double, ptr %759, i64 %761
  %763 = call double @f2c_dnrm2(ptr noundef %70, ptr noundef %762, ptr noundef @c__1)
  %764 = fdiv double 1.000000e+00, %763
  store double %764, ptr %48, align 8, !tbaa !13
  %765 = load ptr, ptr %24, align 8, !tbaa !5
  %766 = load i64, ptr %64, align 8, !tbaa !9
  %767 = add nsw i64 %766, 1
  %768 = getelementptr inbounds double, ptr %765, i64 %767
  %769 = call i64 @f2c_idamax(ptr noundef %70, ptr noundef %768, ptr noundef @c__1)
  store i64 %769, ptr %59, align 8, !tbaa !9
  %770 = load ptr, ptr %24, align 8, !tbaa !5
  %771 = load i64, ptr %64, align 8, !tbaa !9
  %772 = load i64, ptr %59, align 8, !tbaa !9
  %773 = add nsw i64 %771, %772
  %774 = getelementptr inbounds double, ptr %770, i64 %773
  %775 = load double, ptr %774, align 8, !tbaa !13
  %776 = fcmp olt double %775, 0.000000e+00
  br i1 %776, label %777, label %780

777:                                              ; preds = %758
  %778 = load double, ptr %48, align 8, !tbaa !13
  %779 = fneg double %778
  store double %779, ptr %48, align 8, !tbaa !13
  br label %780

780:                                              ; preds = %777, %758
  %781 = load ptr, ptr %24, align 8, !tbaa !5
  %782 = load i64, ptr %64, align 8, !tbaa !9
  %783 = add nsw i64 %782, 1
  %784 = getelementptr inbounds double, ptr %781, i64 %783
  %785 = call i32 @f2c_dscal(ptr noundef %70, ptr noundef %48, ptr noundef %784, ptr noundef @c__1)
  br label %786

786:                                              ; preds = %780, %457
  %787 = load ptr, ptr %15, align 8, !tbaa !5
  %788 = load i64, ptr %787, align 8, !tbaa !9
  store i64 %788, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %789

789:                                              ; preds = %807, %786
  %790 = load i64, ptr %41, align 8, !tbaa !9
  %791 = load i64, ptr %32, align 8, !tbaa !9
  %792 = icmp sle i64 %790, %791
  br i1 %792, label %793, label %810

793:                                              ; preds = %789
  %794 = load i64, ptr %41, align 8, !tbaa !9
  %795 = load i64, ptr %42, align 8, !tbaa !9
  %796 = load i64, ptr %28, align 8, !tbaa !9
  %797 = mul nsw i64 %795, %796
  %798 = add nsw i64 %794, %797
  store i64 %798, ptr %33, align 8, !tbaa !9
  %799 = load ptr, ptr %22, align 8, !tbaa !5
  %800 = load i64, ptr %33, align 8, !tbaa !9
  %801 = getelementptr inbounds %struct.doublecomplex, ptr %799, i64 %800
  %802 = getelementptr inbounds %struct.doublecomplex, ptr %801, i32 0, i32 0
  store double 0.000000e+00, ptr %802, align 8, !tbaa !16
  %803 = load ptr, ptr %22, align 8, !tbaa !5
  %804 = load i64, ptr %33, align 8, !tbaa !9
  %805 = getelementptr inbounds %struct.doublecomplex, ptr %803, i64 %804
  %806 = getelementptr inbounds %struct.doublecomplex, ptr %805, i32 0, i32 1
  store double 0.000000e+00, ptr %806, align 8, !tbaa !18
  br label %807

807:                                              ; preds = %793
  %808 = load i64, ptr %41, align 8, !tbaa !9
  %809 = add nsw i64 %808, 1
  store i64 %809, ptr %41, align 8, !tbaa !9
  br label %789, !llvm.loop !24

810:                                              ; preds = %789
  %811 = load i64, ptr %70, align 8, !tbaa !9
  store i64 %811, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  br label %812

812:                                              ; preds = %846, %810
  %813 = load i64, ptr %41, align 8, !tbaa !9
  %814 = load i64, ptr %32, align 8, !tbaa !9
  %815 = icmp sle i64 %813, %814
  br i1 %815, label %816, label %849

816:                                              ; preds = %812
  %817 = load i64, ptr %43, align 8, !tbaa !9
  %818 = load i64, ptr %41, align 8, !tbaa !9
  %819 = add nsw i64 %817, %818
  %820 = sub nsw i64 %819, 1
  %821 = load i64, ptr %42, align 8, !tbaa !9
  %822 = load i64, ptr %28, align 8, !tbaa !9
  %823 = mul nsw i64 %821, %822
  %824 = add nsw i64 %820, %823
  store i64 %824, ptr %33, align 8, !tbaa !9
  %825 = load i64, ptr %64, align 8, !tbaa !9
  %826 = load i64, ptr %41, align 8, !tbaa !9
  %827 = add nsw i64 %825, %826
  store i64 %827, ptr %34, align 8, !tbaa !9
  %828 = load ptr, ptr %24, align 8, !tbaa !5
  %829 = load i64, ptr %34, align 8, !tbaa !9
  %830 = getelementptr inbounds double, ptr %828, i64 %829
  %831 = load double, ptr %830, align 8, !tbaa !13
  %832 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  store double %831, ptr %832, align 8, !tbaa !16
  %833 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  store double 0.000000e+00, ptr %833, align 8, !tbaa !18
  %834 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 0
  %835 = load double, ptr %834, align 8, !tbaa !16
  %836 = load ptr, ptr %22, align 8, !tbaa !5
  %837 = load i64, ptr %33, align 8, !tbaa !9
  %838 = getelementptr inbounds %struct.doublecomplex, ptr %836, i64 %837
  %839 = getelementptr inbounds %struct.doublecomplex, ptr %838, i32 0, i32 0
  store double %835, ptr %839, align 8, !tbaa !16
  %840 = getelementptr inbounds %struct.doublecomplex, ptr %40, i32 0, i32 1
  %841 = load double, ptr %840, align 8, !tbaa !18
  %842 = load ptr, ptr %22, align 8, !tbaa !5
  %843 = load i64, ptr %33, align 8, !tbaa !9
  %844 = getelementptr inbounds %struct.doublecomplex, ptr %842, i64 %843
  %845 = getelementptr inbounds %struct.doublecomplex, ptr %844, i32 0, i32 1
  store double %841, ptr %845, align 8, !tbaa !18
  br label %846

846:                                              ; preds = %816
  %847 = load i64, ptr %41, align 8, !tbaa !9
  %848 = add nsw i64 %847, 1
  store i64 %848, ptr %41, align 8, !tbaa !9
  br label %812, !llvm.loop !25

849:                                              ; preds = %812
  %850 = load double, ptr %47, align 8, !tbaa !13
  store double %850, ptr %54, align 8, !tbaa !13
  br label %851

851:                                              ; preds = %849
  %852 = load i64, ptr %42, align 8, !tbaa !9
  %853 = add nsw i64 %852, 1
  store i64 %853, ptr %42, align 8, !tbaa !9
  br label %435, !llvm.loop !26

854:                                              ; preds = %435
  br label %855

855:                                              ; preds = %854, %446
  br label %856

856:                                              ; preds = %855
  %857 = load i64, ptr %58, align 8, !tbaa !9
  %858 = add nsw i64 %857, 1
  store i64 %858, ptr %58, align 8, !tbaa !9
  br label %266, !llvm.loop !27

859:                                              ; preds = %266
  store i32 0, ptr %14, align 4
  store i32 1, ptr %74, align 4
  br label %860

860:                                              ; preds = %859, %220, %215, %202
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  %861 = load i32, ptr %14, align 4
  ret i32 %861
}

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

declare i32 @dlagts_(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) #4

declare i64 @f2c_idamax(ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

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

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


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

%struct.doublecomplex = type { double, double }

@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@c__2 = external hidden global i64, align 8
@c__1 = external hidden global i64, align 8
@c_n1 = external hidden global i64, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @zstein_(ptr nocapture noundef readonly %0, ptr noundef %1, ptr noundef %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, ptr nocapture noundef %7, ptr nocapture noundef readonly %8, ptr noundef %9, ptr noundef %10, ptr nocapture noundef writeonly %11, ptr nocapture noundef %12) local_unnamed_addr #0 {
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca [4 x i64], align 16
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  %22 = getelementptr inbounds i8, ptr %1, i64 -8
  %23 = getelementptr inbounds i8, ptr %2, i64 -8
  %24 = getelementptr inbounds i8, ptr %4, i64 -8
  %25 = getelementptr inbounds i8, ptr %5, i64 -8
  %26 = getelementptr inbounds i8, ptr %6, i64 -8
  %27 = load i64, ptr %8, align 8, !tbaa !5
  %28 = xor i64 %27, -1
  %29 = getelementptr inbounds %struct.doublecomplex, ptr %7, i64 %28
  %30 = getelementptr inbounds i8, ptr %9, i64 -8
  store i64 0, ptr %12, align 8, !tbaa !5
  %31 = load i64, ptr %3, align 8, !tbaa !5
  %.not346 = icmp slt i64 %31, 1
  br i1 %.not346, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %13
  %32 = shl nuw i64 %31, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 %32, i1 false), !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %13
  %33 = load i64, ptr %0, align 8, !tbaa !5
  %34 = icmp slt i64 %33, 0
  br i1 %34, label %.thread.sink.split, label %35

35:                                               ; preds = %._crit_edge
  %36 = load i64, ptr %3, align 8, !tbaa !5
  %or.cond = icmp ugt i64 %36, %33
  br i1 %or.cond, label %.thread.sink.split, label %37

37:                                               ; preds = %35
  %38 = load i64, ptr %8, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %33, i64 1)
  %39 = icmp slt i64 %38, %spec.select
  br i1 %39, label %.thread.sink.split, label %40

40:                                               ; preds = %37
  %.not327348 = icmp ult i64 %36, 2
  br i1 %.not327348, label %._crit_edge352, label %.lr.ph351.preheader

.lr.ph351.preheader:                              ; preds = %40
  %.pre = load i64, ptr %5, align 8, !tbaa !5
  %invariant.gep446 = getelementptr i8, ptr %4, i64 -16
  br label %.lr.ph351

.lr.ph351:                                        ; preds = %.lr.ph351.preheader, %52
  %41 = phi i64 [ %43, %52 ], [ %.pre, %.lr.ph351.preheader ]
  %.0311349 = phi i64 [ %53, %52 ], [ 2, %.lr.ph351.preheader ]
  %42 = getelementptr inbounds i64, ptr %25, i64 %.0311349
  %43 = load i64, ptr %42, align 8, !tbaa !5
  %44 = icmp slt i64 %43, %41
  br i1 %44, label %.thread.sink.split, label %45

45:                                               ; preds = %.lr.ph351
  %46 = icmp eq i64 %43, %41
  br i1 %46, label %47, label %52

47:                                               ; preds = %45
  %48 = getelementptr inbounds double, ptr %24, i64 %.0311349
  %49 = load double, ptr %48, align 8, !tbaa !9
  %gep447 = getelementptr double, ptr %invariant.gep446, i64 %.0311349
  %50 = load double, ptr %gep447, align 8, !tbaa !9
  %51 = fcmp olt double %49, %50
  br i1 %51, label %.thread.sink.split, label %52

52:                                               ; preds = %45, %47
  %53 = add nuw i64 %.0311349, 1
  %exitcond.not = icmp eq i64 %.0311349, %36
  br i1 %exitcond.not, label %._crit_edge352, label %.lr.ph351, !llvm.loop !11

._crit_edge352:                                   ; preds = %52, %40
  %.pr = load i64, ptr %12, align 8, !tbaa !5
  %.not328 = icmp eq i64 %.pr, 0
  br i1 %.not328, label %57, label %.thread

.thread.sink.split:                               ; preds = %47, %.lr.ph351, %37, %35, %._crit_edge
  %.sink = phi i64 [ -1, %._crit_edge ], [ -4, %35 ], [ -9, %37 ], [ -6, %.lr.ph351 ], [ -5, %47 ]
  store i64 %.sink, ptr %12, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %._crit_edge352
  %54 = phi i64 [ %.pr, %._crit_edge352 ], [ %.sink, %.thread.sink.split ]
  %55 = sub nsw i64 0, %54
  store i64 %55, ptr %14, align 8, !tbaa !5
  %56 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %14) #7
  br label %.loopexit343

57:                                               ; preds = %._crit_edge352
  %58 = icmp eq i64 %33, 0
  %59 = icmp eq i64 %36, 0
  %or.cond448 = or i1 %58, %59
  br i1 %or.cond448, label %.loopexit343, label %60

60:                                               ; preds = %57
  %61 = icmp eq i64 %33, 1
  br i1 %61, label %62, label %63

62:                                               ; preds = %60
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %7, align 8, !tbaa !9
  br label %.loopexit343

63:                                               ; preds = %60
  %64 = tail call double @dlamch_(ptr noundef nonnull @.str.1) #7
  store i64 1, ptr %19, align 16, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %19, i64 8
  store i64 1, ptr %65, align 8, !tbaa !5
  %66 = getelementptr inbounds i8, ptr %19, i64 16
  store i64 1, ptr %66, align 16, !tbaa !5
  %67 = getelementptr inbounds i8, ptr %19, i64 24
  store i64 1, ptr %67, align 8, !tbaa !5
  %68 = load i64, ptr %3, align 8, !tbaa !5
  %69 = getelementptr inbounds i64, ptr %25, i64 %68
  %70 = load i64, ptr %69, align 8, !tbaa !5
  %invariant.gep412 = getelementptr i8, ptr %6, i64 -16
  %invariant.gep414 = getelementptr i8, ptr %29, i64 -16
  %.not329420 = icmp slt i64 %70, 1
  br i1 %.not329420, label %.loopexit343, label %.lr.ph429

.lr.ph429:                                        ; preds = %63
  %71 = load i64, ptr %0, align 8, !tbaa !5
  %72 = mul nsw i64 %71, 3
  %73 = getelementptr double, ptr %9, i64 %72
  %74 = getelementptr double, ptr %30, i64 %71
  %75 = getelementptr i8, ptr %74, i64 16
  %.idx = shl i64 %71, 4
  %76 = getelementptr i8, ptr %9, i64 %.idx
  %.idx334 = shl i64 %71, 5
  %77 = getelementptr i8, ptr %9, i64 %.idx334
  %78 = getelementptr double, ptr %30, i64 %72
  %79 = shl i64 %27, 4
  %80 = shl i64 %27, 4
  %81 = shl i64 %27, 4
  %scevgep465 = getelementptr i8, ptr %7, i64 -16
  %82 = shl i64 %27, 4
  %invariant.gep508 = getelementptr i8, ptr %7, i64 -24
  %invariant.gep510 = getelementptr i8, ptr %7, i64 -16
  %invariant.gep512 = getelementptr i8, ptr %7, i64 -16
  %invariant.gep514 = getelementptr i8, ptr %7, i64 -8
  %stride.check = icmp slt i64 %82, 0
  br label %83

83:                                               ; preds = %.lr.ph429, %._crit_edge404
  %.0291427 = phi double [ undef, %.lr.ph429 ], [ %.1, %._crit_edge404 ]
  %.0292426 = phi double [ undef, %.lr.ph429 ], [ %.2, %._crit_edge404 ]
  %.0295425 = phi double [ undef, %.lr.ph429 ], [ %.1296, %._crit_edge404 ]
  %.0297424 = phi i64 [ undef, %.lr.ph429 ], [ %.2299.lcssa, %._crit_edge404 ]
  %.0300423 = phi i64 [ 1, %.lr.ph429 ], [ %367, %._crit_edge404 ]
  %.0303422 = phi double [ undef, %.lr.ph429 ], [ %.1304.lcssa, %._crit_edge404 ]
  %.0308421 = phi i64 [ 1, %.lr.ph429 ], [ %.1309, %._crit_edge404 ]
  %84 = icmp eq i64 %.0300423, 1
  br i1 %84, label %88, label %85

85:                                               ; preds = %83
  %gep413 = getelementptr i64, ptr %invariant.gep412, i64 %.0300423
  %86 = load i64, ptr %gep413, align 8, !tbaa !5
  %87 = add nsw i64 %86, 1
  br label %88

88:                                               ; preds = %83, %85
  %.0310 = phi i64 [ %87, %85 ], [ 1, %83 ]
  %89 = getelementptr inbounds i64, ptr %26, i64 %.0300423
  %90 = load i64, ptr %89, align 8, !tbaa !5
  %91 = sub nsw i64 %90, %.0310
  %92 = add nsw i64 %91, 1
  store i64 %92, ptr %21, align 8, !tbaa !5
  %93 = icmp eq i64 %90, %.0310
  br i1 %93, label %142, label %94

94:                                               ; preds = %88
  %95 = getelementptr inbounds double, ptr %22, i64 %.0310
  %96 = load double, ptr %95, align 8, !tbaa !9
  %97 = getelementptr inbounds double, ptr %23, i64 %.0310
  %98 = load double, ptr %97, align 8, !tbaa !9
  %99 = getelementptr inbounds double, ptr %22, i64 %90
  %100 = load double, ptr %99, align 8, !tbaa !9
  %101 = add nsw i64 %90, -1
  %102 = getelementptr inbounds double, ptr %23, i64 %101
  %103 = load double, ptr %102, align 8, !tbaa !9
  %104 = insertelement <2 x double> poison, double %96, i64 0
  %105 = insertelement <2 x double> %104, double %100, i64 1
  %106 = fcmp oge <2 x double> %105, zeroinitializer
  %107 = fneg <2 x double> %105
  %108 = select <2 x i1> %106, <2 x double> %105, <2 x double> %107
  %109 = insertelement <2 x double> poison, double %98, i64 0
  %110 = insertelement <2 x double> %109, double %103, i64 1
  %111 = fcmp oge <2 x double> %110, zeroinitializer
  %112 = fneg <2 x double> %110
  %113 = select <2 x i1> %111, <2 x double> %110, <2 x double> %112
  %114 = fadd <2 x double> %108, %113
  %115 = extractelement <2 x double> %114, i64 0
  %116 = extractelement <2 x double> %114, i64 1
  %117 = fcmp oge double %115, %116
  %118 = select i1 %117, double %115, double %116
  %.not330.not354 = icmp slt i64 %.0310, %101
  br i1 %.not330.not354, label %.lr.ph358, label %._crit_edge359

.lr.ph358:                                        ; preds = %94, %.lr.ph358
  %.1293356 = phi double [ %137, %.lr.ph358 ], [ %118, %94 ]
  %.2315.in355 = phi i64 [ %.2315, %.lr.ph358 ], [ %.0310, %94 ]
  %.2315 = add nsw i64 %.2315.in355, 1
  %119 = getelementptr double, ptr %1, i64 %.2315.in355
  %120 = load double, ptr %119, align 8, !tbaa !9
  %121 = fcmp oge double %120, 0.000000e+00
  %122 = fneg double %120
  %123 = select i1 %121, double %120, double %122
  %124 = getelementptr inbounds double, ptr %23, i64 %.2315.in355
  %125 = load double, ptr %124, align 8, !tbaa !9
  %126 = fcmp oge double %125, 0.000000e+00
  %127 = fneg double %125
  %128 = select i1 %126, double %125, double %127
  %129 = fadd double %123, %128
  %130 = getelementptr double, ptr %2, i64 %.2315.in355
  %131 = load double, ptr %130, align 8, !tbaa !9
  %132 = fcmp oge double %131, 0.000000e+00
  %133 = fneg double %131
  %134 = select i1 %132, double %131, double %133
  %135 = fadd double %129, %134
  %136 = fcmp oge double %.1293356, %135
  %137 = select i1 %136, double %.1293356, double %135
  %exitcond436.not = icmp eq i64 %.2315, %101
  br i1 %exitcond436.not, label %._crit_edge359, label %.lr.ph358, !llvm.loop !13

._crit_edge359:                                   ; preds = %.lr.ph358, %94
  %.1293.lcssa = phi double [ %118, %94 ], [ %137, %.lr.ph358 ]
  %138 = fmul double %.1293.lcssa, 1.000000e-03
  %139 = sitofp i64 %92 to double
  %140 = fdiv double 1.000000e-01, %139
  %141 = call double @sqrt(double noundef %140) #7
  br label %142

142:                                              ; preds = %88, %._crit_edge359
  %.1298 = phi i64 [ %.0297424, %88 ], [ %.0310, %._crit_edge359 ]
  %.1296 = phi double [ %.0295425, %88 ], [ %138, %._crit_edge359 ]
  %.2 = phi double [ %.0292426, %88 ], [ %.1293.lcssa, %._crit_edge359 ]
  %.1 = phi double [ %.0291427, %88 ], [ %141, %._crit_edge359 ]
  %143 = load i64, ptr %3, align 8, !tbaa !5
  %.not331396 = icmp sgt i64 %.0308421, %143
  br i1 %.not331396, label %._crit_edge404, label %.lr.ph403

.lr.ph403:                                        ; preds = %142
  %144 = getelementptr inbounds double, ptr %22, i64 %.0310
  %145 = getelementptr inbounds double, ptr %23, i64 %.0310
  %gep415 = getelementptr %struct.doublecomplex, ptr %invariant.gep414, i64 %.0310
  %146 = shl i64 %.0308421, 4
  %147 = add i64 %146, -16
  %148 = mul i64 %27, %147
  %149 = add i64 %143, 1
  %150 = sub i64 %149, %.0308421
  %151 = getelementptr i8, ptr %7, i64 %148
  %152 = shl i64 %.0310, 4
  %153 = shl i64 %.0308421, 4
  %154 = add i64 %153, -16
  %155 = mul i64 %27, %154
  %156 = shl i64 %.0310, 4
  %scevgep466 = getelementptr i8, ptr %scevgep465, i64 %156
  %157 = shl i64 %.0308421, 4
  %158 = add i64 %157, -32
  %159 = mul i64 %27, %158
  %gep509 = getelementptr i8, ptr %invariant.gep508, i64 %159
  %160 = getelementptr i8, ptr %gep509, i64 %156
  %gep511 = getelementptr i8, ptr %invariant.gep510, i64 %155
  %161 = getelementptr i8, ptr %gep511, i64 %156
  %gep513 = getelementptr i8, ptr %invariant.gep512, i64 %148
  %162 = getelementptr i8, ptr %gep513, i64 %152
  %gep515 = getelementptr i8, ptr %invariant.gep514, i64 %148
  %163 = getelementptr i8, ptr %gep515, i64 %152
  br label %164

164:                                              ; preds = %.lr.ph403, %._crit_edge391
  %.2299401 = phi i64 [ %.1298, %.lr.ph403 ], [ %.7, %._crit_edge391 ]
  %.0301400 = phi i64 [ 0, %.lr.ph403 ], [ %172, %._crit_edge391 ]
  %.1304399 = phi double [ %.0303422, %.lr.ph403 ], [ %365, %._crit_edge391 ]
  %.1312397 = phi i64 [ %.0308421, %.lr.ph403 ], [ %366, %._crit_edge391 ]
  %165 = mul i64 %82, %.0301400
  %scevgep468 = getelementptr i8, ptr %160, i64 %165
  %166 = mul i64 %81, %.0301400
  %scevgep458 = getelementptr i8, ptr %161, i64 %166
  %167 = mul i64 %80, %.0301400
  %scevgep453 = getelementptr i8, ptr %162, i64 %167
  %scevgep454 = getelementptr i8, ptr %163, i64 %167
  %168 = mul i64 %79, %.0301400
  %scevgep = getelementptr i8, ptr %151, i64 %168
  %169 = getelementptr inbounds i64, ptr %25, i64 %.1312397
  %170 = load i64, ptr %169, align 8, !tbaa !5
  %.not332 = icmp eq i64 %170, %.0300423
  br i1 %.not332, label %171, label %._crit_edge404

171:                                              ; preds = %164
  %172 = add nuw i64 %.0301400, 1
  %173 = getelementptr inbounds double, ptr %24, i64 %.1312397
  %174 = load double, ptr %173, align 8, !tbaa !9
  store double %174, ptr %16, align 8, !tbaa !9
  %175 = load i64, ptr %21, align 8, !tbaa !5
  %176 = icmp eq i64 %175, 1
  br i1 %176, label %177, label %178

177:                                              ; preds = %171
  store double 1.000000e+00, ptr %9, align 8, !tbaa !9
  br label %321

178:                                              ; preds = %171
  %.not333 = icmp eq i64 %.0301400, 0
  br i1 %.not333, label %189, label %179

179:                                              ; preds = %178
  %180 = fmul double %64, %174
  %181 = fcmp oge double %180, 0.000000e+00
  %182 = fneg double %180
  %183 = select i1 %181, double %180, double %182
  %184 = fmul double %183, 1.000000e+01
  %185 = fsub double %174, %.1304399
  %186 = fcmp olt double %185, %184
  br i1 %186, label %187, label %189

187:                                              ; preds = %179
  %188 = fadd double %.1304399, %184
  store double %188, ptr %16, align 8, !tbaa !9
  br label %189

189:                                              ; preds = %179, %187, %178
  %190 = call i32 @dlarnv_(ptr noundef nonnull @c__2, ptr noundef nonnull %19, ptr noundef nonnull %21, ptr noundef %9) #7
  %191 = call i32 @f2c_dcopy(ptr noundef nonnull %21, ptr noundef nonnull %144, ptr noundef nonnull @c__1, ptr noundef %73, ptr noundef nonnull @c__1) #7
  %192 = load i64, ptr %21, align 8, !tbaa !5
  %193 = add nsw i64 %192, -1
  store i64 %193, ptr %15, align 8, !tbaa !5
  %194 = call i32 @f2c_dcopy(ptr noundef nonnull %15, ptr noundef nonnull %145, ptr noundef nonnull @c__1, ptr noundef %75, ptr noundef nonnull @c__1) #7
  %195 = load i64, ptr %21, align 8, !tbaa !5
  %196 = add nsw i64 %195, -1
  store i64 %196, ptr %15, align 8, !tbaa !5
  %197 = call i32 @f2c_dcopy(ptr noundef nonnull %15, ptr noundef nonnull %145, ptr noundef nonnull @c__1, ptr noundef %76, ptr noundef nonnull @c__1) #7
  store double 0.000000e+00, ptr %18, align 8, !tbaa !9
  %198 = call i32 @dlagtf_(ptr noundef nonnull %21, ptr noundef %73, ptr noundef nonnull %16, ptr noundef %75, ptr noundef %76, ptr noundef nonnull %18, ptr noundef %77, ptr noundef %10, ptr noundef nonnull %20) #7
  %199 = add nsw i64 %.1312397, -1
  br label %.outer

.outer:                                           ; preds = %304, %189
  %.0305.ph = phi i64 [ %201, %304 ], [ 0, %189 ]
  %.3.ph = phi i64 [ %.5, %304 ], [ %.2299401, %189 ]
  %.0294.ph = phi i64 [ %305, %304 ], [ 0, %189 ]
  br label %200

200:                                              ; preds = %.outer, %.loopexit
  %.0305 = phi i64 [ %201, %.loopexit ], [ %.0305.ph, %.outer ]
  %.3 = phi i64 [ %.5, %.loopexit ], [ %.3.ph, %.outer ]
  %201 = add nsw i64 %.0305, 1
  %202 = icmp sgt i64 %.0305, 4
  br i1 %202, label %306, label %203

203:                                              ; preds = %200
  %204 = load i64, ptr %21, align 8, !tbaa !5
  %205 = getelementptr double, ptr %78, i64 %204
  %206 = load double, ptr %205, align 8, !tbaa !9
  %207 = fcmp oge double %206, 0.000000e+00
  %208 = fneg double %206
  %209 = select i1 %207, double %206, double %208
  %210 = sitofp i64 %204 to double
  %211 = fmul double %.2, %210
  %212 = fcmp oge double %64, %209
  %213 = select i1 %212, double %64, double %209
  %214 = fmul double %211, %213
  %215 = call double @f2c_dasum(ptr noundef nonnull %21, ptr noundef %9, ptr noundef nonnull @c__1) #7
  %216 = fdiv double %214, %215
  store double %216, ptr %17, align 8, !tbaa !9
  %217 = call i32 @f2c_dscal(ptr noundef nonnull %21, ptr noundef nonnull %17, ptr noundef %9, ptr noundef nonnull @c__1) #7
  %218 = call i32 @dlagts_(ptr noundef nonnull @c_n1, ptr noundef nonnull %21, ptr noundef %73, ptr noundef %75, ptr noundef %76, ptr noundef %77, ptr noundef %10, ptr noundef %9, ptr noundef nonnull %18, ptr noundef nonnull %20) #7
  br i1 %.not333, label %.loopexit, label %219

219:                                              ; preds = %203
  %220 = load double, ptr %16, align 8, !tbaa !9
  %221 = fsub double %220, %.1304399
  %222 = fcmp oge double %221, 0.000000e+00
  %223 = fneg double %221
  %224 = select i1 %222, double %221, double %223
  %225 = fcmp ogt double %224, %.1296
  %.4 = select i1 %225, i64 %.1312397, i64 %.3
  %.not335 = icmp eq i64 %.4, %.1312397
  br i1 %.not335, label %.loopexit, label %226

226:                                              ; preds = %219
  store i64 %199, ptr %15, align 8, !tbaa !5
  %.not336.not372 = icmp slt i64 %.4, %.1312397
  br i1 %.not336.not372, label %.lr.ph375, label %.loopexit

.lr.ph375:                                        ; preds = %226
  %227 = load i64, ptr %21, align 8, !tbaa !5
  %.not338366 = icmp slt i64 %227, 1
  br i1 %.not338366, label %.loopexit, label %.lr.ph364.preheader

.lr.ph364.preheader:                              ; preds = %.lr.ph375
  %228 = shl i64 %227, 3
  %scevgep464 = getelementptr i8, ptr %9, i64 %228
  %229 = shl i64 %.4, 4
  %230 = add i64 %229, -16
  %231 = mul i64 %27, %230
  %scevgep467 = getelementptr i8, ptr %scevgep466, i64 %231
  %232 = shl i64 %227, 4
  %scevgep469 = getelementptr i8, ptr %scevgep468, i64 %232
  %xtraiter = and i64 %227, 3
  %233 = icmp ult i64 %227, 4
  %unroll_iter = and i64 %227, 9223372036854775804
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %min.iters.check475 = icmp ult i64 %227, 4
  %bound0470 = icmp ugt ptr %scevgep469, %9
  %bound1471 = icmp ult ptr %scevgep467, %scevgep464
  %found.conflict472 = and i1 %bound0470, %bound1471
  %234 = or i1 %found.conflict472, %stride.check
  %n.vec478 = and i64 %227, 9223372036854775804
  %ind.end479 = or disjoint i64 %n.vec478, 1
  %cmp.n487 = icmp eq i64 %227, %n.vec478
  %xtraiter493 = and i64 %227, 1
  %lcmp.mod494.not = icmp eq i64 %xtraiter493, 0
  br label %.lr.ph364

.lr.ph364:                                        ; preds = %.lr.ph364.preheader, %._crit_edge369
  %.3316373 = phi i64 [ %296, %._crit_edge369 ], [ %.4, %.lr.ph364.preheader ]
  %235 = mul nsw i64 %.3316373, %27
  %invariant.gep = getelementptr %struct.doublecomplex, ptr %gep415, i64 %235
  br i1 %233, label %..preheader_crit_edge.unr-lcssa, label %.lr.ph364.new

.lr.ph364.new:                                    ; preds = %.lr.ph364
  %invariant.gep504 = getelementptr i8, ptr %invariant.gep, i64 16
  br label %266

..preheader_crit_edge.unr-lcssa:                  ; preds = %266, %.lr.ph364
  %.lcssa488.ph = phi double [ poison, %.lr.ph364 ], [ %284, %266 ]
  %.0302362.unr = phi double [ 0.000000e+00, %.lr.ph364 ], [ %284, %266 ]
  %.0306361.unr = phi i64 [ 1, %.lr.ph364 ], [ %285, %266 ]
  br i1 %lcmp.mod.not, label %..preheader_crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %..preheader_crit_edge.unr-lcssa, %.epil.preheader
  %.0302362.epil = phi double [ %239, %.epil.preheader ], [ %.0302362.unr, %..preheader_crit_edge.unr-lcssa ]
  %.0306361.epil = phi i64 [ %240, %.epil.preheader ], [ %.0306361.unr, %..preheader_crit_edge.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %..preheader_crit_edge.unr-lcssa ]
  %236 = getelementptr inbounds double, ptr %30, i64 %.0306361.epil
  %237 = load double, ptr %236, align 8, !tbaa !9
  %gep.epil = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0306361.epil
  %238 = load double, ptr %gep.epil, align 8, !tbaa !14
  %239 = call double @llvm.fmuladd.f64(double %237, double %238, double %.0302362.epil)
  %240 = add nuw i64 %.0306361.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %..preheader_crit_edge, label %.epil.preheader, !llvm.loop !16

..preheader_crit_edge:                            ; preds = %.epil.preheader, %..preheader_crit_edge.unr-lcssa
  %.lcssa488 = phi double [ %.lcssa488.ph, %..preheader_crit_edge.unr-lcssa ], [ %239, %.epil.preheader ]
  %241 = fneg double %.lcssa488
  %brmerge = select i1 %min.iters.check475, i1 true, i1 %234
  br i1 %brmerge, label %scalar.ph474.preheader, label %vector.ph476

scalar.ph474.preheader:                           ; preds = %..preheader_crit_edge, %middle.block473
  %.1307367.ph = phi i64 [ 1, %..preheader_crit_edge ], [ %ind.end479, %middle.block473 ]
  br i1 %lcmp.mod494.not, label %scalar.ph474.prol.loopexit, label %scalar.ph474.prol

scalar.ph474.prol:                                ; preds = %scalar.ph474.preheader
  %gep371.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.1307367.ph
  %242 = load double, ptr %gep371.prol, align 8, !tbaa !14
  %243 = getelementptr inbounds double, ptr %30, i64 %.1307367.ph
  %244 = load double, ptr %243, align 8, !tbaa !9
  %245 = call double @llvm.fmuladd.f64(double %241, double %242, double %244)
  store double %245, ptr %243, align 8, !tbaa !9
  %246 = add nuw i64 %.1307367.ph, 1
  br label %scalar.ph474.prol.loopexit

scalar.ph474.prol.loopexit:                       ; preds = %scalar.ph474.prol, %scalar.ph474.preheader
  %.1307367.unr = phi i64 [ %.1307367.ph, %scalar.ph474.preheader ], [ %246, %scalar.ph474.prol ]
  %247 = icmp eq i64 %227, %.1307367.ph
  br i1 %247, label %._crit_edge369, label %scalar.ph474

vector.ph476:                                     ; preds = %..preheader_crit_edge
  %broadcast.splatinsert = insertelement <2 x double> poison, double %241, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep506 = getelementptr i8, ptr %invariant.gep, i64 64
  br label %vector.body481

vector.body481:                                   ; preds = %vector.body481, %vector.ph476
  %index482 = phi i64 [ 0, %vector.ph476 ], [ %index.next486, %vector.body481 ]
  %offset.idx483 = or disjoint i64 %index482, 1
  %248 = or disjoint i64 %index482, 2
  %249 = or disjoint i64 %index482, 3
  %250 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %offset.idx483
  %251 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %248
  %252 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %249
  %gep507 = getelementptr %struct.doublecomplex, ptr %invariant.gep506, i64 %index482
  %253 = load double, ptr %250, align 8, !tbaa !14, !alias.scope !18
  %254 = load double, ptr %251, align 8, !tbaa !14, !alias.scope !18
  %255 = insertelement <2 x double> poison, double %253, i64 0
  %256 = insertelement <2 x double> %255, double %254, i64 1
  %257 = load double, ptr %252, align 8, !tbaa !14, !alias.scope !18
  %258 = load double, ptr %gep507, align 8, !tbaa !14, !alias.scope !18
  %259 = insertelement <2 x double> poison, double %257, i64 0
  %260 = insertelement <2 x double> %259, double %258, i64 1
  %261 = getelementptr double, ptr %9, i64 %index482
  %262 = getelementptr inbounds i8, ptr %261, i64 16
  %wide.load484 = load <2 x double>, ptr %261, align 8, !tbaa !9, !alias.scope !21, !noalias !18
  %wide.load485 = load <2 x double>, ptr %262, align 8, !tbaa !9, !alias.scope !21, !noalias !18
  %263 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %256, <2 x double> %wide.load484)
  %264 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %260, <2 x double> %wide.load485)
  store <2 x double> %263, ptr %261, align 8, !tbaa !9, !alias.scope !21, !noalias !18
  store <2 x double> %264, ptr %262, align 8, !tbaa !9, !alias.scope !21, !noalias !18
  %index.next486 = add nuw i64 %index482, 4
  %265 = icmp eq i64 %index.next486, %n.vec478
  br i1 %265, label %middle.block473, label %vector.body481, !llvm.loop !23

middle.block473:                                  ; preds = %vector.body481
  br i1 %cmp.n487, label %._crit_edge369, label %scalar.ph474.preheader

266:                                              ; preds = %266, %.lr.ph364.new
  %.0302362 = phi double [ 0.000000e+00, %.lr.ph364.new ], [ %284, %266 ]
  %.0306361 = phi i64 [ 1, %.lr.ph364.new ], [ %285, %266 ]
  %niter = phi i64 [ 0, %.lr.ph364.new ], [ %niter.next.3, %266 ]
  %267 = getelementptr inbounds double, ptr %30, i64 %.0306361
  %268 = load double, ptr %267, align 8, !tbaa !9
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.0306361
  %269 = load double, ptr %gep, align 8, !tbaa !14
  %270 = call double @llvm.fmuladd.f64(double %268, double %269, double %.0302362)
  %271 = getelementptr double, ptr %9, i64 %.0306361
  %272 = load double, ptr %271, align 8, !tbaa !9
  %gep505 = getelementptr %struct.doublecomplex, ptr %invariant.gep504, i64 %.0306361
  %273 = load double, ptr %gep505, align 8, !tbaa !14
  %274 = call double @llvm.fmuladd.f64(double %272, double %273, double %270)
  %275 = add nuw nsw i64 %.0306361, 2
  %276 = getelementptr inbounds double, ptr %30, i64 %275
  %277 = load double, ptr %276, align 8, !tbaa !9
  %gep.2 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %275
  %278 = load double, ptr %gep.2, align 8, !tbaa !14
  %279 = call double @llvm.fmuladd.f64(double %277, double %278, double %274)
  %280 = add nuw i64 %.0306361, 3
  %281 = getelementptr inbounds double, ptr %30, i64 %280
  %282 = load double, ptr %281, align 8, !tbaa !9
  %gep.3 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %280
  %283 = load double, ptr %gep.3, align 8, !tbaa !14
  %284 = call double @llvm.fmuladd.f64(double %282, double %283, double %279)
  %285 = add nuw i64 %.0306361, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %..preheader_crit_edge.unr-lcssa, label %266, !llvm.loop !26

scalar.ph474:                                     ; preds = %scalar.ph474.prol.loopexit, %scalar.ph474
  %.1307367 = phi i64 [ %295, %scalar.ph474 ], [ %.1307367.unr, %scalar.ph474.prol.loopexit ]
  %gep371 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %.1307367
  %286 = load double, ptr %gep371, align 8, !tbaa !14
  %287 = getelementptr inbounds double, ptr %30, i64 %.1307367
  %288 = load double, ptr %287, align 8, !tbaa !9
  %289 = call double @llvm.fmuladd.f64(double %241, double %286, double %288)
  store double %289, ptr %287, align 8, !tbaa !9
  %290 = add nuw i64 %.1307367, 1
  %gep371.1 = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %290
  %291 = load double, ptr %gep371.1, align 8, !tbaa !14
  %292 = getelementptr double, ptr %9, i64 %.1307367
  %293 = load double, ptr %292, align 8, !tbaa !9
  %294 = call double @llvm.fmuladd.f64(double %241, double %291, double %293)
  store double %294, ptr %292, align 8, !tbaa !9
  %295 = add nuw i64 %.1307367, 2
  %exitcond438.not.1 = icmp eq i64 %290, %227
  br i1 %exitcond438.not.1, label %._crit_edge369, label %scalar.ph474, !llvm.loop !27

._crit_edge369:                                   ; preds = %scalar.ph474.prol.loopexit, %scalar.ph474, %middle.block473
  %296 = add nsw i64 %.3316373, 1
  %.not336.not = icmp slt i64 %296, %.1312397
  br i1 %.not336.not, label %.lr.ph364, label %.loopexit, !llvm.loop !28

.loopexit:                                        ; preds = %._crit_edge369, %.lr.ph375, %226, %219, %203
  %.5 = phi i64 [ %.3, %203 ], [ %.1312397, %219 ], [ %.4, %226 ], [ %.4, %.lr.ph375 ], [ %.4, %._crit_edge369 ]
  %297 = call i64 @f2c_idamax(ptr noundef nonnull %21, ptr noundef nonnull %9, ptr noundef nonnull @c__1) #7
  %298 = getelementptr inbounds double, ptr %30, i64 %297
  %299 = load double, ptr %298, align 8, !tbaa !9
  %300 = fcmp oge double %299, 0.000000e+00
  %301 = fneg double %299
  %302 = select i1 %300, double %299, double %301
  %303 = fcmp olt double %302, %.1
  br i1 %303, label %200, label %304

304:                                              ; preds = %.loopexit
  %305 = add nuw nsw i64 %.0294.ph, 1
  %exitcond439.not = icmp eq i64 %305, 3
  br i1 %exitcond439.not, label %.loopexit342, label %.outer

306:                                              ; preds = %200
  %307 = load i64, ptr %12, align 8, !tbaa !5
  %308 = add nsw i64 %307, 1
  store i64 %308, ptr %12, align 8, !tbaa !5
  %309 = getelementptr i64, ptr %11, i64 %307
  store i64 %.1312397, ptr %309, align 8, !tbaa !5
  br label %.loopexit342

.loopexit342:                                     ; preds = %304, %306
  %.6 = phi i64 [ %.3, %306 ], [ %.5, %304 ]
  %310 = call double @f2c_dnrm2(ptr noundef nonnull %21, ptr noundef %9, ptr noundef nonnull @c__1) #7
  %311 = fdiv double 1.000000e+00, %310
  store double %311, ptr %17, align 8, !tbaa !9
  %312 = call i64 @f2c_idamax(ptr noundef nonnull %21, ptr noundef %9, ptr noundef nonnull @c__1) #7
  %313 = getelementptr inbounds double, ptr %30, i64 %312
  %314 = load double, ptr %313, align 8, !tbaa !9
  %315 = fcmp olt double %314, 0.000000e+00
  br i1 %315, label %316, label %319

316:                                              ; preds = %.loopexit342
  %317 = load double, ptr %17, align 8, !tbaa !9
  %318 = fneg double %317
  store double %318, ptr %17, align 8, !tbaa !9
  br label %319

319:                                              ; preds = %316, %.loopexit342
  %320 = call i32 @f2c_dscal(ptr noundef nonnull %21, ptr noundef nonnull %17, ptr noundef nonnull %9, ptr noundef nonnull @c__1) #7
  br label %321

321:                                              ; preds = %319, %177
  %.7 = phi i64 [ %.2299401, %177 ], [ %.6, %319 ]
  %322 = load i64, ptr %0, align 8, !tbaa !5
  %.not339380 = icmp slt i64 %322, 1
  br i1 %.not339380, label %._crit_edge384, label %.lr.ph383

.lr.ph383:                                        ; preds = %321
  %323 = shl nuw i64 %322, 4
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %323, i1 false), !tbaa !9
  br label %._crit_edge384

._crit_edge384:                                   ; preds = %.lr.ph383, %321
  %324 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %324, ptr %15, align 8, !tbaa !5
  %.not340387 = icmp slt i64 %324, 1
  br i1 %.not340387, label %._crit_edge391, label %.lr.ph390

.lr.ph390:                                        ; preds = %._crit_edge384
  %325 = mul nsw i64 %.1312397, %27
  %invariant.gep394 = getelementptr %struct.doublecomplex, ptr %gep415, i64 %325
  %min.iters.check = icmp ult i64 %324, 24
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph390
  %326 = add nsw i64 %324, -1
  %mul.result = shl i64 %326, 4
  %327 = getelementptr i8, ptr %scevgep453, i64 %mul.result
  %328 = icmp ult ptr %327, %scevgep453
  %mul.result456 = shl i64 %326, 4
  %mul.overflow457 = icmp ugt i64 %326, 1152921504606846975
  %329 = getelementptr i8, ptr %scevgep454, i64 %mul.result456
  %330 = icmp ult ptr %329, %scevgep454
  %331 = or i1 %330, %mul.overflow457
  %332 = or i1 %328, %331
  br i1 %332, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %vector.scevcheck
  %333 = shl i64 %324, 4
  %scevgep459 = getelementptr i8, ptr %scevgep458, i64 %333
  %334 = shl nuw i64 %324, 3
  %scevgep460 = getelementptr i8, ptr %9, i64 %334
  %bound0 = icmp ult ptr %scevgep458, %scevgep460
  %bound1 = icmp ugt ptr %scevgep459, %9
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %324, 2305843009213693948
  %ind.end = or disjoint i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %335 = or disjoint i64 %index, 3
  %336 = getelementptr double, ptr %9, i64 %index
  %337 = getelementptr inbounds i8, ptr %336, i64 16
  %wide.load = load <2 x double>, ptr %336, align 8, !tbaa !9, !alias.scope !29
  %wide.load461 = load <2 x double>, ptr %337, align 8, !tbaa !9, !alias.scope !29
  %338 = getelementptr %struct.doublecomplex, ptr %invariant.gep394, i64 %offset.idx
  %339 = getelementptr %struct.doublecomplex, ptr %invariant.gep394, i64 %335
  %interleaved.vec = shufflevector <2 x double> %wide.load, <2 x double> zeroinitializer, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %338, align 8, !tbaa !9
  %interleaved.vec462 = shufflevector <2 x double> %wide.load461, <2 x double> zeroinitializer, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec462, ptr %339, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %340 = icmp eq i64 %index.next, %n.vec
  br i1 %340, label %middle.block, label %vector.body, !llvm.loop !32

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %vector.scevcheck, %.lr.ph390
  %.5318388.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %vector.scevcheck ], [ 1, %.lr.ph390 ], [ %ind.end, %middle.block ]
  %341 = add nuw i64 %324, 1
  %342 = sub i64 %341, %.5318388.ph
  %343 = sub i64 %324, %.5318388.ph
  %xtraiter495 = and i64 %342, 3
  %lcmp.mod496.not = icmp eq i64 %xtraiter495, 0
  br i1 %lcmp.mod496.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.5318388.prol = phi i64 [ %347, %scalar.ph.prol ], [ %.5318388.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %344 = getelementptr inbounds double, ptr %30, i64 %.5318388.prol
  %345 = load double, ptr %344, align 8, !tbaa !9
  %gep395.prol = getelementptr %struct.doublecomplex, ptr %invariant.gep394, i64 %.5318388.prol
  store double %345, ptr %gep395.prol, align 8, !tbaa !14
  %346 = getelementptr inbounds i8, ptr %gep395.prol, i64 8
  store double 0.000000e+00, ptr %346, align 8, !tbaa !33
  %347 = add nuw i64 %.5318388.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter495
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !34

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.5318388.unr = phi i64 [ %.5318388.ph, %scalar.ph.preheader ], [ %347, %scalar.ph.prol ]
  %348 = icmp ult i64 %343, 3
  br i1 %348, label %._crit_edge391, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.5318388 = phi i64 [ %364, %scalar.ph ], [ %.5318388.unr, %scalar.ph.prol.loopexit ]
  %349 = getelementptr inbounds double, ptr %30, i64 %.5318388
  %350 = load double, ptr %349, align 8, !tbaa !9
  %gep395 = getelementptr %struct.doublecomplex, ptr %invariant.gep394, i64 %.5318388
  store double %350, ptr %gep395, align 8, !tbaa !14
  %351 = getelementptr inbounds i8, ptr %gep395, i64 8
  store double 0.000000e+00, ptr %351, align 8, !tbaa !33
  %352 = getelementptr double, ptr %9, i64 %.5318388
  %353 = load double, ptr %352, align 8, !tbaa !9
  %354 = getelementptr %struct.doublecomplex, ptr %invariant.gep394, i64 %.5318388
  %gep395.1 = getelementptr i8, ptr %354, i64 16
  store double %353, ptr %gep395.1, align 8, !tbaa !14
  %355 = getelementptr i8, ptr %354, i64 24
  store double 0.000000e+00, ptr %355, align 8, !tbaa !33
  %356 = add nuw i64 %.5318388, 2
  %357 = getelementptr inbounds double, ptr %30, i64 %356
  %358 = load double, ptr %357, align 8, !tbaa !9
  %gep395.2 = getelementptr %struct.doublecomplex, ptr %invariant.gep394, i64 %356
  store double %358, ptr %gep395.2, align 8, !tbaa !14
  %359 = getelementptr inbounds i8, ptr %gep395.2, i64 8
  store double 0.000000e+00, ptr %359, align 8, !tbaa !33
  %360 = add nuw i64 %.5318388, 3
  %361 = getelementptr inbounds double, ptr %30, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !9
  %gep395.3 = getelementptr %struct.doublecomplex, ptr %invariant.gep394, i64 %360
  store double %362, ptr %gep395.3, align 8, !tbaa !14
  %363 = getelementptr inbounds i8, ptr %gep395.3, i64 8
  store double 0.000000e+00, ptr %363, align 8, !tbaa !33
  %364 = add nuw i64 %.5318388, 4
  %exitcond440.not.3 = icmp eq i64 %360, %324
  br i1 %exitcond440.not.3, label %._crit_edge391, label %scalar.ph, !llvm.loop !35

._crit_edge391:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %._crit_edge384
  %365 = load double, ptr %16, align 8, !tbaa !9
  %366 = add nsw i64 %.1312397, 1
  %exitcond441.not = icmp eq i64 %172, %150
  br i1 %exitcond441.not, label %._crit_edge404, label %164, !llvm.loop !36

._crit_edge404:                                   ; preds = %._crit_edge391, %164, %142
  %.1304.lcssa = phi double [ %.0303422, %142 ], [ %.1304399, %164 ], [ %365, %._crit_edge391 ]
  %.2299.lcssa = phi i64 [ %.1298, %142 ], [ %.2299401, %164 ], [ %.7, %._crit_edge391 ]
  %.1309 = phi i64 [ %.0308421, %142 ], [ %.1312397, %164 ], [ %.0308421, %._crit_edge391 ]
  %367 = add nuw nsw i64 %.0300423, 1
  %.not329.not = icmp slt i64 %.0300423, %70
  br i1 %.not329.not, label %83, label %.loopexit343, !llvm.loop !37

.loopexit343:                                     ; preds = %._crit_edge404, %63, %57, %62, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  ret i32 0
}

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

declare i32 @dlagts_(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) #4

declare i64 @f2c_idamax(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

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


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