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

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

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

98:                                               ; preds = %106, %13
  %99 = load i64, ptr %38, align 8, !tbaa !9
  %100 = load i64, ptr %30, align 8, !tbaa !9
  %101 = icmp sle i64 %99, %100
  br i1 %101, label %102, label %109

102:                                              ; preds = %98
  %103 = load ptr, ptr %26, align 8, !tbaa !5
  %104 = load i64, ptr %38, align 8, !tbaa !9
  %105 = getelementptr inbounds i64, ptr %103, i64 %104
  store i64 0, ptr %105, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %102
  %107 = load i64, ptr %38, align 8, !tbaa !9
  %108 = add nsw i64 %107, 1
  store i64 %108, ptr %38, align 8, !tbaa !9
  br label %98, !llvm.loop !11

109:                                              ; preds = %98
  %110 = load ptr, ptr %15, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = icmp slt i64 %111, 0
  br i1 %112, label %113, label %115

113:                                              ; preds = %109
  %114 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -1, ptr %114, align 8, !tbaa !9
  br label %194

115:                                              ; preds = %109
  %116 = load ptr, ptr %18, align 8, !tbaa !5
  %117 = load i64, ptr %116, align 8, !tbaa !9
  %118 = icmp slt i64 %117, 0
  br i1 %118, label %125, label %119

119:                                              ; preds = %115
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = load ptr, ptr %15, align 8, !tbaa !5
  %123 = load i64, ptr %122, align 8, !tbaa !9
  %124 = icmp sgt i64 %121, %123
  br i1 %124, label %125, label %127

125:                                              ; preds = %119, %115
  %126 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -4, ptr %126, align 8, !tbaa !9
  br label %193

127:                                              ; preds = %119
  %128 = load ptr, ptr %23, align 8, !tbaa !5
  %129 = load i64, ptr %128, align 8, !tbaa !9
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = load i64, ptr %130, align 8, !tbaa !9
  %132 = icmp sge i64 1, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %127
  br label %137

134:                                              ; preds = %127
  %135 = load ptr, ptr %15, align 8, !tbaa !5
  %136 = load i64, ptr %135, align 8, !tbaa !9
  br label %137

137:                                              ; preds = %134, %133
  %138 = phi i64 [ 1, %133 ], [ %136, %134 ]
  %139 = icmp slt i64 %129, %138
  br i1 %139, label %140, label %142

140:                                              ; preds = %137
  %141 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -9, ptr %141, align 8, !tbaa !9
  br label %192

142:                                              ; preds = %137
  %143 = load ptr, ptr %18, align 8, !tbaa !5
  %144 = load i64, ptr %143, align 8, !tbaa !9
  store i64 %144, ptr %30, align 8, !tbaa !9
  store i64 2, ptr %39, align 8, !tbaa !9
  br label %145

145:                                              ; preds = %187, %142
  %146 = load i64, ptr %39, align 8, !tbaa !9
  %147 = load i64, ptr %30, align 8, !tbaa !9
  %148 = icmp sle i64 %146, %147
  br i1 %148, label %149, label %190

149:                                              ; preds = %145
  %150 = load ptr, ptr %20, align 8, !tbaa !5
  %151 = load i64, ptr %39, align 8, !tbaa !9
  %152 = getelementptr inbounds i64, ptr %150, i64 %151
  %153 = load i64, ptr %152, align 8, !tbaa !9
  %154 = load ptr, ptr %20, align 8, !tbaa !5
  %155 = load i64, ptr %39, align 8, !tbaa !9
  %156 = sub nsw i64 %155, 1
  %157 = getelementptr inbounds i64, ptr %154, i64 %156
  %158 = load i64, ptr %157, align 8, !tbaa !9
  %159 = icmp slt i64 %153, %158
  br i1 %159, label %160, label %162

160:                                              ; preds = %149
  %161 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -6, ptr %161, align 8, !tbaa !9
  br label %191

162:                                              ; preds = %149
  %163 = load ptr, ptr %20, align 8, !tbaa !5
  %164 = load i64, ptr %39, align 8, !tbaa !9
  %165 = getelementptr inbounds i64, ptr %163, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = load ptr, ptr %20, align 8, !tbaa !5
  %168 = load i64, ptr %39, align 8, !tbaa !9
  %169 = sub nsw i64 %168, 1
  %170 = getelementptr inbounds i64, ptr %167, i64 %169
  %171 = load i64, ptr %170, align 8, !tbaa !9
  %172 = icmp eq i64 %166, %171
  br i1 %172, label %173, label %186

173:                                              ; preds = %162
  %174 = load ptr, ptr %19, align 8, !tbaa !5
  %175 = load i64, ptr %39, align 8, !tbaa !9
  %176 = getelementptr inbounds double, ptr %174, i64 %175
  %177 = load double, ptr %176, align 8, !tbaa !13
  %178 = load ptr, ptr %19, align 8, !tbaa !5
  %179 = load i64, ptr %39, align 8, !tbaa !9
  %180 = sub nsw i64 %179, 1
  %181 = getelementptr inbounds double, ptr %178, i64 %180
  %182 = load double, ptr %181, align 8, !tbaa !13
  %183 = fcmp olt double %177, %182
  br i1 %183, label %184, label %186

184:                                              ; preds = %173
  %185 = load ptr, ptr %27, align 8, !tbaa !5
  store i64 -5, ptr %185, align 8, !tbaa !9
  br label %191

186:                                              ; preds = %173, %162
  br label %187

187:                                              ; preds = %186
  %188 = load i64, ptr %39, align 8, !tbaa !9
  %189 = add nsw i64 %188, 1
  store i64 %189, ptr %39, align 8, !tbaa !9
  br label %145, !llvm.loop !15

190:                                              ; preds = %145
  br label %191

191:                                              ; preds = %190, %184, %160
  br label %192

192:                                              ; preds = %191, %140
  br label %193

193:                                              ; preds = %192, %125
  br label %194

194:                                              ; preds = %193, %113
  %195 = load ptr, ptr %27, align 8, !tbaa !5
  %196 = load i64, ptr %195, align 8, !tbaa !9
  %197 = icmp ne i64 %196, 0
  br i1 %197, label %198, label %203

198:                                              ; preds = %194
  %199 = load ptr, ptr %27, align 8, !tbaa !5
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = sub nsw i64 0, %200
  store i64 %201, ptr %30, align 8, !tbaa !9
  %202 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %30)
  store i32 0, ptr %14, align 4
  store i32 1, ptr %70, align 4
  br label %793

203:                                              ; preds = %194
  %204 = load ptr, ptr %15, align 8, !tbaa !5
  %205 = load i64, ptr %204, align 8, !tbaa !9
  %206 = icmp eq i64 %205, 0
  br i1 %206, label %211, label %207

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

211:                                              ; preds = %207, %203
  store i32 0, ptr %14, align 4
  store i32 1, ptr %70, align 4
  br label %793

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

216:                                              ; preds = %212
  %217 = load ptr, ptr %22, align 8, !tbaa !5
  %218 = load i64, ptr %28, align 8, !tbaa !9
  %219 = add nsw i64 %218, 1
  %220 = getelementptr inbounds double, ptr %217, i64 %219
  store double 1.000000e+00, ptr %220, align 8, !tbaa !13
  store i32 0, ptr %14, align 4
  store i32 1, ptr %70, align 4
  br label %793

221:                                              ; preds = %212
  br label %222

222:                                              ; preds = %221
  %223 = call double @dlamch_(ptr noundef @.str.1)
  store double %223, ptr %45, align 8, !tbaa !13
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %224

224:                                              ; preds = %231, %222
  %225 = load i64, ptr %38, align 8, !tbaa !9
  %226 = icmp sle i64 %225, 4
  br i1 %226, label %227, label %234

227:                                              ; preds = %224
  %228 = load i64, ptr %38, align 8, !tbaa !9
  %229 = sub nsw i64 %228, 1
  %230 = getelementptr inbounds [4 x i64], ptr %56, i64 0, i64 %229
  store i64 1, ptr %230, align 8, !tbaa !9
  br label %231

231:                                              ; preds = %227
  %232 = load i64, ptr %38, align 8, !tbaa !9
  %233 = add nsw i64 %232, 1
  store i64 %233, ptr %38, align 8, !tbaa !9
  br label %224, !llvm.loop !16

234:                                              ; preds = %224
  store i64 0, ptr %60, align 8, !tbaa !9
  %235 = load i64, ptr %60, align 8, !tbaa !9
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  %237 = load i64, ptr %236, align 8, !tbaa !9
  %238 = add nsw i64 %235, %237
  store i64 %238, ptr %61, align 8, !tbaa !9
  %239 = load i64, ptr %61, align 8, !tbaa !9
  %240 = load ptr, ptr %15, align 8, !tbaa !5
  %241 = load i64, ptr %240, align 8, !tbaa !9
  %242 = add nsw i64 %239, %241
  store i64 %242, ptr %62, align 8, !tbaa !9
  %243 = load i64, ptr %62, align 8, !tbaa !9
  %244 = load ptr, ptr %15, align 8, !tbaa !5
  %245 = load i64, ptr %244, align 8, !tbaa !9
  %246 = add nsw i64 %243, %245
  store i64 %246, ptr %63, align 8, !tbaa !9
  %247 = load i64, ptr %63, align 8, !tbaa !9
  %248 = load ptr, ptr %15, align 8, !tbaa !5
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %250 = add nsw i64 %247, %249
  store i64 %250, ptr %64, align 8, !tbaa !9
  store i64 1, ptr %41, align 8, !tbaa !9
  %251 = load ptr, ptr %20, align 8, !tbaa !5
  %252 = load ptr, ptr %18, align 8, !tbaa !5
  %253 = load i64, ptr %252, align 8, !tbaa !9
  %254 = getelementptr inbounds i64, ptr %251, i64 %253
  %255 = load i64, ptr %254, align 8, !tbaa !9
  store i64 %255, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %54, align 8, !tbaa !9
  br label %256

256:                                              ; preds = %789, %234
  %257 = load i64, ptr %54, align 8, !tbaa !9
  %258 = load i64, ptr %30, align 8, !tbaa !9
  %259 = icmp sle i64 %257, %258
  br i1 %259, label %260, label %792

260:                                              ; preds = %256
  %261 = load i64, ptr %54, align 8, !tbaa !9
  %262 = icmp eq i64 %261, 1
  br i1 %262, label %263, label %264

263:                                              ; preds = %260
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %271

264:                                              ; preds = %260
  %265 = load ptr, ptr %21, align 8, !tbaa !5
  %266 = load i64, ptr %54, align 8, !tbaa !9
  %267 = sub nsw i64 %266, 1
  %268 = getelementptr inbounds i64, ptr %265, i64 %267
  %269 = load i64, ptr %268, align 8, !tbaa !9
  %270 = add nsw i64 %269, 1
  store i64 %270, ptr %40, align 8, !tbaa !9
  br label %271

271:                                              ; preds = %264, %263
  %272 = load ptr, ptr %21, align 8, !tbaa !5
  %273 = load i64, ptr %54, align 8, !tbaa !9
  %274 = getelementptr inbounds i64, ptr %272, i64 %273
  %275 = load i64, ptr %274, align 8, !tbaa !9
  store i64 %275, ptr %42, align 8, !tbaa !9
  %276 = load i64, ptr %42, align 8, !tbaa !9
  %277 = load i64, ptr %40, align 8, !tbaa !9
  %278 = sub nsw i64 %276, %277
  %279 = add nsw i64 %278, 1
  store i64 %279, ptr %66, align 8, !tbaa !9
  %280 = load i64, ptr %66, align 8, !tbaa !9
  %281 = icmp eq i64 %280, 1
  br i1 %281, label %282, label %283

282:                                              ; preds = %271
  br label %421

283:                                              ; preds = %271
  %284 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %284, ptr %57, align 8, !tbaa !9
  %285 = load ptr, ptr %16, align 8, !tbaa !5
  %286 = load i64, ptr %40, align 8, !tbaa !9
  %287 = getelementptr inbounds double, ptr %285, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !13
  store double %288, ptr %33, align 8, !tbaa !13
  %289 = load double, ptr %33, align 8, !tbaa !13
  %290 = fcmp oge double %289, 0.000000e+00
  br i1 %290, label %291, label %293

291:                                              ; preds = %283
  %292 = load double, ptr %33, align 8, !tbaa !13
  br label %296

293:                                              ; preds = %283
  %294 = load double, ptr %33, align 8, !tbaa !13
  %295 = fneg double %294
  br label %296

296:                                              ; preds = %293, %291
  %297 = phi double [ %292, %291 ], [ %295, %293 ]
  %298 = load ptr, ptr %17, align 8, !tbaa !5
  %299 = load i64, ptr %40, align 8, !tbaa !9
  %300 = getelementptr inbounds double, ptr %298, i64 %299
  %301 = load double, ptr %300, align 8, !tbaa !13
  store double %301, ptr %34, align 8, !tbaa !13
  %302 = load double, ptr %34, align 8, !tbaa !13
  %303 = fcmp oge double %302, 0.000000e+00
  br i1 %303, label %304, label %306

304:                                              ; preds = %296
  %305 = load double, ptr %34, align 8, !tbaa !13
  br label %309

306:                                              ; preds = %296
  %307 = load double, ptr %34, align 8, !tbaa !13
  %308 = fneg double %307
  br label %309

309:                                              ; preds = %306, %304
  %310 = phi double [ %305, %304 ], [ %308, %306 ]
  %311 = fadd double %297, %310
  store double %311, ptr %67, align 8, !tbaa !13
  %312 = load double, ptr %67, align 8, !tbaa !13
  store double %312, ptr %35, align 8, !tbaa !13
  %313 = load ptr, ptr %16, align 8, !tbaa !5
  %314 = load i64, ptr %42, align 8, !tbaa !9
  %315 = getelementptr inbounds double, ptr %313, i64 %314
  %316 = load double, ptr %315, align 8, !tbaa !13
  store double %316, ptr %33, align 8, !tbaa !13
  %317 = load double, ptr %33, align 8, !tbaa !13
  %318 = fcmp oge double %317, 0.000000e+00
  br i1 %318, label %319, label %321

319:                                              ; preds = %309
  %320 = load double, ptr %33, align 8, !tbaa !13
  br label %324

321:                                              ; preds = %309
  %322 = load double, ptr %33, align 8, !tbaa !13
  %323 = fneg double %322
  br label %324

324:                                              ; preds = %321, %319
  %325 = phi double [ %320, %319 ], [ %323, %321 ]
  %326 = load ptr, ptr %17, align 8, !tbaa !5
  %327 = load i64, ptr %42, align 8, !tbaa !9
  %328 = sub nsw i64 %327, 1
  %329 = getelementptr inbounds double, ptr %326, i64 %328
  %330 = load double, ptr %329, align 8, !tbaa !13
  store double %330, ptr %34, align 8, !tbaa !13
  %331 = load double, ptr %34, align 8, !tbaa !13
  %332 = fcmp oge double %331, 0.000000e+00
  br i1 %332, label %333, label %335

333:                                              ; preds = %324
  %334 = load double, ptr %34, align 8, !tbaa !13
  br label %338

335:                                              ; preds = %324
  %336 = load double, ptr %34, align 8, !tbaa !13
  %337 = fneg double %336
  br label %338

338:                                              ; preds = %335, %333
  %339 = phi double [ %334, %333 ], [ %337, %335 ]
  %340 = fadd double %325, %339
  store double %340, ptr %36, align 8, !tbaa !13
  %341 = load double, ptr %35, align 8, !tbaa !13
  %342 = load double, ptr %36, align 8, !tbaa !13
  %343 = fcmp oge double %341, %342
  br i1 %343, label %344, label %346

344:                                              ; preds = %338
  %345 = load double, ptr %35, align 8, !tbaa !13
  br label %348

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

348:                                              ; preds = %346, %344
  %349 = phi double [ %345, %344 ], [ %347, %346 ]
  store double %349, ptr %67, align 8, !tbaa !13
  %350 = load i64, ptr %42, align 8, !tbaa !9
  %351 = sub nsw i64 %350, 1
  store i64 %351, ptr %31, align 8, !tbaa !9
  %352 = load i64, ptr %40, align 8, !tbaa !9
  %353 = add nsw i64 %352, 1
  store i64 %353, ptr %38, align 8, !tbaa !9
  br label %354

354:                                              ; preds = %411, %348
  %355 = load i64, ptr %38, align 8, !tbaa !9
  %356 = load i64, ptr %31, align 8, !tbaa !9
  %357 = icmp sle i64 %355, %356
  br i1 %357, label %358, label %414

358:                                              ; preds = %354
  %359 = load double, ptr %67, align 8, !tbaa !13
  store double %359, ptr %36, align 8, !tbaa !13
  %360 = load ptr, ptr %16, align 8, !tbaa !5
  %361 = load i64, ptr %38, align 8, !tbaa !9
  %362 = getelementptr inbounds double, ptr %360, i64 %361
  %363 = load double, ptr %362, align 8, !tbaa !13
  store double %363, ptr %33, align 8, !tbaa !13
  %364 = load double, ptr %33, align 8, !tbaa !13
  %365 = fcmp oge double %364, 0.000000e+00
  br i1 %365, label %366, label %368

366:                                              ; preds = %358
  %367 = load double, ptr %33, align 8, !tbaa !13
  br label %371

368:                                              ; preds = %358
  %369 = load double, ptr %33, align 8, !tbaa !13
  %370 = fneg double %369
  br label %371

371:                                              ; preds = %368, %366
  %372 = phi double [ %367, %366 ], [ %370, %368 ]
  %373 = load ptr, ptr %17, align 8, !tbaa !5
  %374 = load i64, ptr %38, align 8, !tbaa !9
  %375 = sub nsw i64 %374, 1
  %376 = getelementptr inbounds double, ptr %373, i64 %375
  %377 = load double, ptr %376, align 8, !tbaa !13
  store double %377, ptr %34, align 8, !tbaa !13
  %378 = load double, ptr %34, align 8, !tbaa !13
  %379 = fcmp oge double %378, 0.000000e+00
  br i1 %379, label %380, label %382

380:                                              ; preds = %371
  %381 = load double, ptr %34, align 8, !tbaa !13
  br label %385

382:                                              ; preds = %371
  %383 = load double, ptr %34, align 8, !tbaa !13
  %384 = fneg double %383
  br label %385

385:                                              ; preds = %382, %380
  %386 = phi double [ %381, %380 ], [ %384, %382 ]
  %387 = fadd double %372, %386
  %388 = load ptr, ptr %17, align 8, !tbaa !5
  %389 = load i64, ptr %38, align 8, !tbaa !9
  %390 = getelementptr inbounds double, ptr %388, i64 %389
  %391 = load double, ptr %390, align 8, !tbaa !13
  store double %391, ptr %35, align 8, !tbaa !13
  %392 = load double, ptr %35, align 8, !tbaa !13
  %393 = fcmp oge double %392, 0.000000e+00
  br i1 %393, label %394, label %396

394:                                              ; preds = %385
  %395 = load double, ptr %35, align 8, !tbaa !13
  br label %399

396:                                              ; preds = %385
  %397 = load double, ptr %35, align 8, !tbaa !13
  %398 = fneg double %397
  br label %399

399:                                              ; preds = %396, %394
  %400 = phi double [ %395, %394 ], [ %398, %396 ]
  %401 = fadd double %387, %400
  store double %401, ptr %37, align 8, !tbaa !13
  %402 = load double, ptr %36, align 8, !tbaa !13
  %403 = load double, ptr %37, align 8, !tbaa !13
  %404 = fcmp oge double %402, %403
  br i1 %404, label %405, label %407

405:                                              ; preds = %399
  %406 = load double, ptr %36, align 8, !tbaa !13
  br label %409

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

409:                                              ; preds = %407, %405
  %410 = phi double [ %406, %405 ], [ %408, %407 ]
  store double %410, ptr %67, align 8, !tbaa !13
  br label %411

411:                                              ; preds = %409
  %412 = load i64, ptr %38, align 8, !tbaa !9
  %413 = add nsw i64 %412, 1
  store i64 %413, ptr %38, align 8, !tbaa !9
  br label %354, !llvm.loop !17

414:                                              ; preds = %354
  %415 = load double, ptr %67, align 8, !tbaa !13
  %416 = fmul double %415, 1.000000e-03
  store double %416, ptr %59, align 8, !tbaa !13
  %417 = load i64, ptr %66, align 8, !tbaa !9
  %418 = sitofp i64 %417 to double
  %419 = fdiv double 1.000000e-01, %418
  %420 = call double @sqrt(double noundef %419) #4
  store double %420, ptr %68, align 8, !tbaa !13
  br label %421

421:                                              ; preds = %414, %282
  store i64 0, ptr %53, align 8, !tbaa !9
  %422 = load ptr, ptr %18, align 8, !tbaa !5
  %423 = load i64, ptr %422, align 8, !tbaa !9
  store i64 %423, ptr %31, align 8, !tbaa !9
  %424 = load i64, ptr %41, align 8, !tbaa !9
  store i64 %424, ptr %39, align 8, !tbaa !9
  br label %425

425:                                              ; preds = %784, %421
  %426 = load i64, ptr %39, align 8, !tbaa !9
  %427 = load i64, ptr %31, align 8, !tbaa !9
  %428 = icmp sle i64 %426, %427
  br i1 %428, label %429, label %787

429:                                              ; preds = %425
  %430 = load ptr, ptr %20, align 8, !tbaa !5
  %431 = load i64, ptr %39, align 8, !tbaa !9
  %432 = getelementptr inbounds i64, ptr %430, i64 %431
  %433 = load i64, ptr %432, align 8, !tbaa !9
  %434 = load i64, ptr %54, align 8, !tbaa !9
  %435 = icmp ne i64 %433, %434
  br i1 %435, label %436, label %438

436:                                              ; preds = %429
  %437 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %437, ptr %41, align 8, !tbaa !9
  br label %788

438:                                              ; preds = %429
  %439 = load i64, ptr %53, align 8, !tbaa !9
  %440 = add nsw i64 %439, 1
  store i64 %440, ptr %53, align 8, !tbaa !9
  %441 = load ptr, ptr %19, align 8, !tbaa !5
  %442 = load i64, ptr %39, align 8, !tbaa !9
  %443 = getelementptr inbounds double, ptr %441, i64 %442
  %444 = load double, ptr %443, align 8, !tbaa !13
  store double %444, ptr %43, align 8, !tbaa !13
  %445 = load i64, ptr %66, align 8, !tbaa !9
  %446 = icmp eq i64 %445, 1
  br i1 %446, label %447, label %452

447:                                              ; preds = %438
  %448 = load ptr, ptr %24, align 8, !tbaa !5
  %449 = load i64, ptr %60, align 8, !tbaa !9
  %450 = add nsw i64 %449, 1
  %451 = getelementptr inbounds double, ptr %448, i64 %450
  store double 1.000000e+00, ptr %451, align 8, !tbaa !13
  br label %738

452:                                              ; preds = %438
  %453 = load i64, ptr %53, align 8, !tbaa !9
  %454 = icmp sgt i64 %453, 1
  br i1 %454, label %455, label %481

455:                                              ; preds = %452
  %456 = load double, ptr %45, align 8, !tbaa !13
  %457 = load double, ptr %43, align 8, !tbaa !13
  %458 = fmul double %456, %457
  store double %458, ptr %33, align 8, !tbaa !13
  %459 = load double, ptr %33, align 8, !tbaa !13
  %460 = fcmp oge double %459, 0.000000e+00
  br i1 %460, label %461, label %463

461:                                              ; preds = %455
  %462 = load double, ptr %33, align 8, !tbaa !13
  br label %466

463:                                              ; preds = %455
  %464 = load double, ptr %33, align 8, !tbaa !13
  %465 = fneg double %464
  br label %466

466:                                              ; preds = %463, %461
  %467 = phi double [ %462, %461 ], [ %465, %463 ]
  store double %467, ptr %52, align 8, !tbaa !13
  %468 = load double, ptr %52, align 8, !tbaa !13
  %469 = fmul double %468, 1.000000e+01
  store double %469, ptr %69, align 8, !tbaa !13
  %470 = load double, ptr %43, align 8, !tbaa !13
  %471 = load double, ptr %50, align 8, !tbaa !13
  %472 = fsub double %470, %471
  store double %472, ptr %46, align 8, !tbaa !13
  %473 = load double, ptr %46, align 8, !tbaa !13
  %474 = load double, ptr %69, align 8, !tbaa !13
  %475 = fcmp olt double %473, %474
  br i1 %475, label %476, label %480

476:                                              ; preds = %466
  %477 = load double, ptr %50, align 8, !tbaa !13
  %478 = load double, ptr %69, align 8, !tbaa !13
  %479 = fadd double %477, %478
  store double %479, ptr %43, align 8, !tbaa !13
  br label %480

480:                                              ; preds = %476, %466
  br label %481

481:                                              ; preds = %480, %452
  store i64 0, ptr %49, align 8, !tbaa !9
  store i64 0, ptr %65, align 8, !tbaa !9
  %482 = getelementptr inbounds [4 x i64], ptr %56, i64 0, i64 0
  %483 = load ptr, ptr %24, align 8, !tbaa !5
  %484 = load i64, ptr %60, align 8, !tbaa !9
  %485 = add nsw i64 %484, 1
  %486 = getelementptr inbounds double, ptr %483, i64 %485
  %487 = call i32 @dlarnv_(ptr noundef @c__2, ptr noundef %482, ptr noundef %66, ptr noundef %486)
  %488 = load ptr, ptr %16, align 8, !tbaa !5
  %489 = load i64, ptr %40, align 8, !tbaa !9
  %490 = getelementptr inbounds double, ptr %488, i64 %489
  %491 = load ptr, ptr %24, align 8, !tbaa !5
  %492 = load i64, ptr %63, align 8, !tbaa !9
  %493 = add nsw i64 %492, 1
  %494 = getelementptr inbounds double, ptr %491, i64 %493
  %495 = call i32 @f2c_dcopy(ptr noundef %66, ptr noundef %490, ptr noundef @c__1, ptr noundef %494, ptr noundef @c__1)
  %496 = load i64, ptr %66, align 8, !tbaa !9
  %497 = sub nsw i64 %496, 1
  store i64 %497, ptr %32, align 8, !tbaa !9
  %498 = load ptr, ptr %17, align 8, !tbaa !5
  %499 = load i64, ptr %40, 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 %61, align 8, !tbaa !9
  %503 = add nsw i64 %502, 2
  %504 = getelementptr inbounds double, ptr %501, i64 %503
  %505 = call i32 @f2c_dcopy(ptr noundef %32, ptr noundef %500, ptr noundef @c__1, ptr noundef %504, ptr noundef @c__1)
  %506 = load i64, ptr %66, 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 %40, 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 %62, align 8, !tbaa !9
  %513 = add nsw i64 %512, 1
  %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)
  store double 0.000000e+00, ptr %48, align 8, !tbaa !13
  %516 = load ptr, ptr %24, align 8, !tbaa !5
  %517 = load i64, ptr %63, align 8, !tbaa !9
  %518 = add nsw i64 %517, 1
  %519 = getelementptr inbounds double, ptr %516, i64 %518
  %520 = load ptr, ptr %24, align 8, !tbaa !5
  %521 = load i64, ptr %61, align 8, !tbaa !9
  %522 = add nsw i64 %521, 2
  %523 = getelementptr inbounds double, ptr %520, i64 %522
  %524 = load ptr, ptr %24, align 8, !tbaa !5
  %525 = load i64, ptr %62, align 8, !tbaa !9
  %526 = add nsw i64 %525, 1
  %527 = getelementptr inbounds double, ptr %524, i64 %526
  %528 = load ptr, ptr %24, align 8, !tbaa !5
  %529 = load i64, ptr %64, align 8, !tbaa !9
  %530 = add nsw i64 %529, 1
  %531 = getelementptr inbounds double, ptr %528, i64 %530
  %532 = load ptr, ptr %25, align 8, !tbaa !5
  %533 = getelementptr inbounds i64, ptr %532, i64 1
  %534 = call i32 @dlagtf_(ptr noundef %66, ptr noundef %519, ptr noundef %43, ptr noundef %523, ptr noundef %527, ptr noundef %48, ptr noundef %531, ptr noundef %533, ptr noundef %58)
  br label %535

535:                                              ; preds = %699, %693, %481
  %536 = load i64, ptr %49, align 8, !tbaa !9
  %537 = add nsw i64 %536, 1
  store i64 %537, ptr %49, align 8, !tbaa !9
  %538 = load i64, ptr %49, align 8, !tbaa !9
  %539 = icmp sgt i64 %538, 5
  br i1 %539, label %540, label %541

540:                                              ; preds = %535
  br label %701

541:                                              ; preds = %535
  %542 = load double, ptr %45, align 8, !tbaa !13
  store double %542, ptr %34, align 8, !tbaa !13
  %543 = load ptr, ptr %24, align 8, !tbaa !5
  %544 = load i64, ptr %63, align 8, !tbaa !9
  %545 = load i64, ptr %66, align 8, !tbaa !9
  %546 = add nsw i64 %544, %545
  %547 = getelementptr inbounds double, ptr %543, i64 %546
  %548 = load double, ptr %547, align 8, !tbaa !13
  store double %548, ptr %33, align 8, !tbaa !13
  %549 = load double, ptr %33, align 8, !tbaa !13
  %550 = fcmp oge double %549, 0.000000e+00
  br i1 %550, label %551, label %553

551:                                              ; preds = %541
  %552 = load double, ptr %33, align 8, !tbaa !13
  br label %556

553:                                              ; preds = %541
  %554 = load double, ptr %33, align 8, !tbaa !13
  %555 = fneg double %554
  br label %556

556:                                              ; preds = %553, %551
  %557 = phi double [ %552, %551 ], [ %555, %553 ]
  store double %557, ptr %35, align 8, !tbaa !13
  %558 = load i64, ptr %66, align 8, !tbaa !9
  %559 = sitofp i64 %558 to double
  %560 = load double, ptr %67, align 8, !tbaa !13
  %561 = fmul double %559, %560
  %562 = load double, ptr %34, align 8, !tbaa !13
  %563 = load double, ptr %35, align 8, !tbaa !13
  %564 = fcmp oge double %562, %563
  br i1 %564, label %565, label %567

565:                                              ; preds = %556
  %566 = load double, ptr %34, align 8, !tbaa !13
  br label %569

567:                                              ; preds = %556
  %568 = load double, ptr %35, align 8, !tbaa !13
  br label %569

569:                                              ; preds = %567, %565
  %570 = phi double [ %566, %565 ], [ %568, %567 ]
  %571 = fmul double %561, %570
  %572 = load ptr, ptr %24, align 8, !tbaa !5
  %573 = load i64, ptr %60, align 8, !tbaa !9
  %574 = add nsw i64 %573, 1
  %575 = getelementptr inbounds double, ptr %572, i64 %574
  %576 = call double @f2c_dasum(ptr noundef %66, ptr noundef %575, ptr noundef @c__1)
  %577 = fdiv double %571, %576
  store double %577, ptr %44, align 8, !tbaa !13
  %578 = load ptr, ptr %24, align 8, !tbaa !5
  %579 = load i64, ptr %60, align 8, !tbaa !9
  %580 = add nsw i64 %579, 1
  %581 = getelementptr inbounds double, ptr %578, i64 %580
  %582 = call i32 @f2c_dscal(ptr noundef %66, ptr noundef %44, ptr noundef %581, ptr noundef @c__1)
  %583 = load ptr, ptr %24, align 8, !tbaa !5
  %584 = load i64, ptr %63, align 8, !tbaa !9
  %585 = add nsw i64 %584, 1
  %586 = getelementptr inbounds double, ptr %583, i64 %585
  %587 = load ptr, ptr %24, align 8, !tbaa !5
  %588 = load i64, ptr %61, align 8, !tbaa !9
  %589 = add nsw i64 %588, 2
  %590 = getelementptr inbounds double, ptr %587, i64 %589
  %591 = load ptr, ptr %24, align 8, !tbaa !5
  %592 = load i64, ptr %62, align 8, !tbaa !9
  %593 = add nsw i64 %592, 1
  %594 = getelementptr inbounds double, ptr %591, i64 %593
  %595 = load ptr, ptr %24, align 8, !tbaa !5
  %596 = load i64, ptr %64, align 8, !tbaa !9
  %597 = add nsw i64 %596, 1
  %598 = getelementptr inbounds double, ptr %595, i64 %597
  %599 = load ptr, ptr %25, align 8, !tbaa !5
  %600 = getelementptr inbounds i64, ptr %599, i64 1
  %601 = load ptr, ptr %24, align 8, !tbaa !5
  %602 = load i64, ptr %60, align 8, !tbaa !9
  %603 = add nsw i64 %602, 1
  %604 = getelementptr inbounds double, ptr %601, i64 %603
  %605 = call i32 @dlagts_(ptr noundef @c_n1, ptr noundef %66, ptr noundef %586, ptr noundef %590, ptr noundef %594, ptr noundef %598, ptr noundef %600, ptr noundef %604, ptr noundef %48, ptr noundef %58)
  %606 = load i64, ptr %53, align 8, !tbaa !9
  %607 = icmp eq i64 %606, 1
  br i1 %607, label %608, label %609

608:                                              ; preds = %569
  br label %669

609:                                              ; preds = %569
  %610 = load double, ptr %43, align 8, !tbaa !13
  %611 = load double, ptr %50, align 8, !tbaa !13
  %612 = fsub double %610, %611
  store double %612, ptr %33, align 8, !tbaa !13
  %613 = load double, ptr %33, align 8, !tbaa !13
  %614 = fcmp oge double %613, 0.000000e+00
  br i1 %614, label %615, label %617

615:                                              ; preds = %609
  %616 = load double, ptr %33, align 8, !tbaa !13
  br label %620

617:                                              ; preds = %609
  %618 = load double, ptr %33, align 8, !tbaa !13
  %619 = fneg double %618
  br label %620

620:                                              ; preds = %617, %615
  %621 = phi double [ %616, %615 ], [ %619, %617 ]
  %622 = load double, ptr %59, align 8, !tbaa !13
  %623 = fcmp ogt double %621, %622
  br i1 %623, label %624, label %626

624:                                              ; preds = %620
  %625 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %625, ptr %57, align 8, !tbaa !9
  br label %626

626:                                              ; preds = %624, %620
  %627 = load i64, ptr %57, align 8, !tbaa !9
  %628 = load i64, ptr %39, align 8, !tbaa !9
  %629 = icmp ne i64 %627, %628
  br i1 %629, label %630, label %668

630:                                              ; preds = %626
  %631 = load i64, ptr %39, align 8, !tbaa !9
  %632 = sub nsw i64 %631, 1
  store i64 %632, ptr %32, align 8, !tbaa !9
  %633 = load i64, ptr %57, align 8, !tbaa !9
  store i64 %633, ptr %38, align 8, !tbaa !9
  br label %634

634:                                              ; preds = %664, %630
  %635 = load i64, ptr %38, align 8, !tbaa !9
  %636 = load i64, ptr %32, align 8, !tbaa !9
  %637 = icmp sle i64 %635, %636
  br i1 %637, label %638, label %667

638:                                              ; preds = %634
  %639 = load ptr, ptr %24, align 8, !tbaa !5
  %640 = load i64, ptr %60, align 8, !tbaa !9
  %641 = add nsw i64 %640, 1
  %642 = getelementptr inbounds double, ptr %639, i64 %641
  %643 = load ptr, ptr %22, align 8, !tbaa !5
  %644 = load i64, ptr %40, align 8, !tbaa !9
  %645 = load i64, ptr %38, align 8, !tbaa !9
  %646 = load i64, ptr %28, align 8, !tbaa !9
  %647 = mul nsw i64 %645, %646
  %648 = add nsw i64 %644, %647
  %649 = getelementptr inbounds double, ptr %643, i64 %648
  %650 = call double @f2c_ddot(ptr noundef %66, ptr noundef %642, ptr noundef @c__1, ptr noundef %649, ptr noundef @c__1)
  %651 = fneg double %650
  store double %651, ptr %51, align 8, !tbaa !13
  %652 = load ptr, ptr %22, align 8, !tbaa !5
  %653 = load i64, ptr %40, align 8, !tbaa !9
  %654 = load i64, ptr %38, align 8, !tbaa !9
  %655 = load i64, ptr %28, align 8, !tbaa !9
  %656 = mul nsw i64 %654, %655
  %657 = add nsw i64 %653, %656
  %658 = getelementptr inbounds double, ptr %652, i64 %657
  %659 = load ptr, ptr %24, align 8, !tbaa !5
  %660 = load i64, ptr %60, align 8, !tbaa !9
  %661 = add nsw i64 %660, 1
  %662 = getelementptr inbounds double, ptr %659, i64 %661
  %663 = call i32 @f2c_daxpy(ptr noundef %66, ptr noundef %51, ptr noundef %658, ptr noundef @c__1, ptr noundef %662, ptr noundef @c__1)
  br label %664

664:                                              ; preds = %638
  %665 = load i64, ptr %38, align 8, !tbaa !9
  %666 = add nsw i64 %665, 1
  store i64 %666, ptr %38, align 8, !tbaa !9
  br label %634, !llvm.loop !18

667:                                              ; preds = %634
  br label %668

668:                                              ; preds = %667, %626
  br label %669

669:                                              ; preds = %668, %608
  %670 = load ptr, ptr %24, align 8, !tbaa !5
  %671 = load i64, ptr %60, align 8, !tbaa !9
  %672 = add nsw i64 %671, 1
  %673 = getelementptr inbounds double, ptr %670, i64 %672
  %674 = call i64 @f2c_idamax(ptr noundef %66, ptr noundef %673, ptr noundef @c__1)
  store i64 %674, ptr %55, align 8, !tbaa !9
  %675 = load ptr, ptr %24, align 8, !tbaa !5
  %676 = load i64, ptr %60, align 8, !tbaa !9
  %677 = load i64, ptr %55, align 8, !tbaa !9
  %678 = add nsw i64 %676, %677
  %679 = getelementptr inbounds double, ptr %675, i64 %678
  %680 = load double, ptr %679, align 8, !tbaa !13
  store double %680, ptr %33, align 8, !tbaa !13
  %681 = load double, ptr %33, align 8, !tbaa !13
  %682 = fcmp oge double %681, 0.000000e+00
  br i1 %682, label %683, label %685

683:                                              ; preds = %669
  %684 = load double, ptr %33, align 8, !tbaa !13
  br label %688

685:                                              ; preds = %669
  %686 = load double, ptr %33, align 8, !tbaa !13
  %687 = fneg double %686
  br label %688

688:                                              ; preds = %685, %683
  %689 = phi double [ %684, %683 ], [ %687, %685 ]
  store double %689, ptr %47, align 8, !tbaa !13
  %690 = load double, ptr %47, align 8, !tbaa !13
  %691 = load double, ptr %68, align 8, !tbaa !13
  %692 = fcmp olt double %690, %691
  br i1 %692, label %693, label %694

693:                                              ; preds = %688
  br label %535

694:                                              ; preds = %688
  %695 = load i64, ptr %65, align 8, !tbaa !9
  %696 = add nsw i64 %695, 1
  store i64 %696, ptr %65, align 8, !tbaa !9
  %697 = load i64, ptr %65, align 8, !tbaa !9
  %698 = icmp slt i64 %697, 3
  br i1 %698, label %699, label %700

699:                                              ; preds = %694
  br label %535

700:                                              ; preds = %694
  br label %710

701:                                              ; preds = %540
  %702 = load ptr, ptr %27, align 8, !tbaa !5
  %703 = load i64, ptr %702, align 8, !tbaa !9
  %704 = add nsw i64 %703, 1
  store i64 %704, ptr %702, align 8, !tbaa !9
  %705 = load i64, ptr %39, align 8, !tbaa !9
  %706 = load ptr, ptr %26, align 8, !tbaa !5
  %707 = load ptr, ptr %27, align 8, !tbaa !5
  %708 = load i64, ptr %707, align 8, !tbaa !9
  %709 = getelementptr inbounds i64, ptr %706, i64 %708
  store i64 %705, ptr %709, align 8, !tbaa !9
  br label %710

710:                                              ; preds = %701, %700
  %711 = load ptr, ptr %24, align 8, !tbaa !5
  %712 = load i64, ptr %60, align 8, !tbaa !9
  %713 = add nsw i64 %712, 1
  %714 = getelementptr inbounds double, ptr %711, i64 %713
  %715 = call double @f2c_dnrm2(ptr noundef %66, ptr noundef %714, ptr noundef @c__1)
  %716 = fdiv double 1.000000e+00, %715
  store double %716, ptr %44, align 8, !tbaa !13
  %717 = load ptr, ptr %24, align 8, !tbaa !5
  %718 = load i64, ptr %60, align 8, !tbaa !9
  %719 = add nsw i64 %718, 1
  %720 = getelementptr inbounds double, ptr %717, i64 %719
  %721 = call i64 @f2c_idamax(ptr noundef %66, ptr noundef %720, ptr noundef @c__1)
  store i64 %721, ptr %55, align 8, !tbaa !9
  %722 = load ptr, ptr %24, align 8, !tbaa !5
  %723 = load i64, ptr %60, align 8, !tbaa !9
  %724 = load i64, ptr %55, align 8, !tbaa !9
  %725 = add nsw i64 %723, %724
  %726 = getelementptr inbounds double, ptr %722, i64 %725
  %727 = load double, ptr %726, align 8, !tbaa !13
  %728 = fcmp olt double %727, 0.000000e+00
  br i1 %728, label %729, label %732

729:                                              ; preds = %710
  %730 = load double, ptr %44, align 8, !tbaa !13
  %731 = fneg double %730
  store double %731, ptr %44, align 8, !tbaa !13
  br label %732

732:                                              ; preds = %729, %710
  %733 = load ptr, ptr %24, align 8, !tbaa !5
  %734 = load i64, ptr %60, align 8, !tbaa !9
  %735 = add nsw i64 %734, 1
  %736 = getelementptr inbounds double, ptr %733, i64 %735
  %737 = call i32 @f2c_dscal(ptr noundef %66, ptr noundef %44, ptr noundef %736, ptr noundef @c__1)
  br label %738

738:                                              ; preds = %732, %447
  %739 = load ptr, ptr %15, align 8, !tbaa !5
  %740 = load i64, ptr %739, align 8, !tbaa !9
  store i64 %740, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %741

741:                                              ; preds = %753, %738
  %742 = load i64, ptr %38, align 8, !tbaa !9
  %743 = load i64, ptr %32, align 8, !tbaa !9
  %744 = icmp sle i64 %742, %743
  br i1 %744, label %745, label %756

745:                                              ; preds = %741
  %746 = load ptr, ptr %22, align 8, !tbaa !5
  %747 = load i64, ptr %38, align 8, !tbaa !9
  %748 = load i64, ptr %39, align 8, !tbaa !9
  %749 = load i64, ptr %28, align 8, !tbaa !9
  %750 = mul nsw i64 %748, %749
  %751 = add nsw i64 %747, %750
  %752 = getelementptr inbounds double, ptr %746, i64 %751
  store double 0.000000e+00, ptr %752, align 8, !tbaa !13
  br label %753

753:                                              ; preds = %745
  %754 = load i64, ptr %38, align 8, !tbaa !9
  %755 = add nsw i64 %754, 1
  store i64 %755, ptr %38, align 8, !tbaa !9
  br label %741, !llvm.loop !19

756:                                              ; preds = %741
  %757 = load i64, ptr %66, align 8, !tbaa !9
  store i64 %757, ptr %32, align 8, !tbaa !9
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %758

758:                                              ; preds = %779, %756
  %759 = load i64, ptr %38, align 8, !tbaa !9
  %760 = load i64, ptr %32, align 8, !tbaa !9
  %761 = icmp sle i64 %759, %760
  br i1 %761, label %762, label %782

762:                                              ; preds = %758
  %763 = load ptr, ptr %24, align 8, !tbaa !5
  %764 = load i64, ptr %60, align 8, !tbaa !9
  %765 = load i64, ptr %38, align 8, !tbaa !9
  %766 = add nsw i64 %764, %765
  %767 = getelementptr inbounds double, ptr %763, i64 %766
  %768 = load double, ptr %767, align 8, !tbaa !13
  %769 = load ptr, ptr %22, align 8, !tbaa !5
  %770 = load i64, ptr %40, align 8, !tbaa !9
  %771 = load i64, ptr %38, align 8, !tbaa !9
  %772 = add nsw i64 %770, %771
  %773 = sub nsw i64 %772, 1
  %774 = load i64, ptr %39, align 8, !tbaa !9
  %775 = load i64, ptr %28, align 8, !tbaa !9
  %776 = mul nsw i64 %774, %775
  %777 = add nsw i64 %773, %776
  %778 = getelementptr inbounds double, ptr %769, i64 %777
  store double %768, ptr %778, align 8, !tbaa !13
  br label %779

779:                                              ; preds = %762
  %780 = load i64, ptr %38, align 8, !tbaa !9
  %781 = add nsw i64 %780, 1
  store i64 %781, ptr %38, align 8, !tbaa !9
  br label %758, !llvm.loop !20

782:                                              ; preds = %758
  %783 = load double, ptr %43, align 8, !tbaa !13
  store double %783, ptr %50, align 8, !tbaa !13
  br label %784

784:                                              ; preds = %782
  %785 = load i64, ptr %39, align 8, !tbaa !9
  %786 = add nsw i64 %785, 1
  store i64 %786, ptr %39, align 8, !tbaa !9
  br label %425, !llvm.loop !21

787:                                              ; preds = %425
  br label %788

788:                                              ; preds = %787, %436
  br label %789

789:                                              ; preds = %788
  %790 = load i64, ptr %54, align 8, !tbaa !9
  %791 = add nsw i64 %790, 1
  store i64 %791, ptr %54, align 8, !tbaa !9
  br label %256, !llvm.loop !22

792:                                              ; preds = %256
  store i32 0, ptr %14, align 4
  store i32 1, ptr %70, align 4
  br label %793

793:                                              ; preds = %792, %216, %211, %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  %794 = load i32, ptr %14, align 4
  ret i32 %794
}

; 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

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

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

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 = { 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 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !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"

@.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 @dstein_(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 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 = ptrtoint ptr %9 to i64
  %15 = ptrtoint ptr %7 to i64
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca [4 x i64], align 16
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  %25 = getelementptr inbounds i8, ptr %1, i64 -8
  %26 = getelementptr inbounds i8, ptr %2, i64 -8
  %27 = getelementptr inbounds i8, ptr %4, i64 -8
  %28 = getelementptr inbounds i8, ptr %5, i64 -8
  %29 = getelementptr inbounds i8, ptr %6, i64 -8
  %30 = load i64, ptr %8, align 8, !tbaa !5
  %31 = xor i64 %30, -1
  %32 = getelementptr inbounds double, ptr %7, i64 %31
  %33 = getelementptr inbounds i8, ptr %9, i64 -8
  store i64 0, ptr %12, align 8, !tbaa !5
  %34 = load i64, ptr %3, align 8, !tbaa !5
  %.not319 = icmp slt i64 %34, 1
  br i1 %.not319, label %._crit_edge, label %.lr.ph.preheader

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

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

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

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

43:                                               ; preds = %40
  %.not302321 = icmp ult i64 %39, 2
  br i1 %.not302321, label %._crit_edge325, label %.lr.ph324.preheader

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

.lr.ph324:                                        ; preds = %.lr.ph324.preheader, %55
  %44 = phi i64 [ %46, %55 ], [ %.pre, %.lr.ph324.preheader ]
  %.0286322 = phi i64 [ %56, %55 ], [ 2, %.lr.ph324.preheader ]
  %45 = getelementptr inbounds i64, ptr %28, i64 %.0286322
  %46 = load i64, ptr %45, align 8, !tbaa !5
  %47 = icmp slt i64 %46, %44
  br i1 %47, label %.thread.sink.split, label %48

48:                                               ; preds = %.lr.ph324
  %49 = icmp eq i64 %46, %44
  br i1 %49, label %50, label %55

50:                                               ; preds = %48
  %51 = getelementptr inbounds double, ptr %27, i64 %.0286322
  %52 = load double, ptr %51, align 8, !tbaa !9
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0286322
  %53 = load double, ptr %gep, align 8, !tbaa !9
  %54 = fcmp olt double %52, %53
  br i1 %54, label %.thread.sink.split, label %55

55:                                               ; preds = %48, %50
  %56 = add nuw i64 %.0286322, 1
  %exitcond.not = icmp eq i64 %.0286322, %39
  br i1 %exitcond.not, label %._crit_edge325, label %.lr.ph324, !llvm.loop !11

._crit_edge325:                                   ; preds = %55, %43
  %.pr = load i64, ptr %12, align 8, !tbaa !5
  %.not303 = icmp eq i64 %.pr, 0
  br i1 %.not303, label %60, label %.thread

.thread.sink.split:                               ; preds = %50, %.lr.ph324, %40, %38, %._crit_edge
  %.sink = phi i64 [ -1, %._crit_edge ], [ -4, %38 ], [ -9, %40 ], [ -6, %.lr.ph324 ], [ -5, %50 ]
  store i64 %.sink, ptr %12, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %._crit_edge325
  %57 = phi i64 [ %.pr, %._crit_edge325 ], [ %.sink, %.thread.sink.split ]
  %58 = sub nsw i64 0, %57
  store i64 %58, ptr %16, align 8, !tbaa !5
  %59 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %16) #6
  br label %.loopexit316

60:                                               ; preds = %._crit_edge325
  %61 = icmp eq i64 %36, 0
  %62 = icmp eq i64 %39, 0
  %or.cond406 = or i1 %61, %62
  br i1 %or.cond406, label %.loopexit316, label %63

63:                                               ; preds = %60
  %64 = icmp eq i64 %36, 1
  br i1 %64, label %65, label %66

65:                                               ; preds = %63
  store double 1.000000e+00, ptr %7, align 8, !tbaa !9
  br label %.loopexit316

66:                                               ; preds = %63
  %67 = tail call double @dlamch_(ptr noundef nonnull @.str.1) #6
  store i64 1, ptr %22, align 16, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %22, i64 8
  store i64 1, ptr %68, align 8, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %22, i64 16
  store i64 1, ptr %69, align 16, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %22, i64 24
  store i64 1, ptr %70, align 8, !tbaa !5
  %71 = load i64, ptr %3, align 8, !tbaa !5
  %72 = getelementptr inbounds i64, ptr %28, i64 %71
  %73 = load i64, ptr %72, align 8, !tbaa !5
  %invariant.gep367 = getelementptr i8, ptr %6, i64 -16
  %invariant.gep369 = getelementptr i8, ptr %32, i64 -8
  %.not304371 = icmp slt i64 %73, 1
  br i1 %.not304371, label %.loopexit316, label %.lr.ph380

.lr.ph380:                                        ; preds = %66
  %74 = load i64, ptr %0, align 8, !tbaa !5
  %75 = mul nsw i64 %74, 3
  %76 = getelementptr double, ptr %9, i64 %75
  %77 = getelementptr double, ptr %33, i64 %74
  %78 = getelementptr i8, ptr %77, i64 16
  %.idx = shl i64 %74, 4
  %79 = getelementptr i8, ptr %9, i64 %.idx
  %.idx309 = shl i64 %74, 5
  %80 = getelementptr i8, ptr %9, i64 %.idx309
  %81 = getelementptr double, ptr %33, i64 %75
  %82 = shl i64 %30, 3
  %83 = add i64 %15, -8
  %84 = sub i64 %83, %14
  %85 = shl i64 %30, 3
  br label %86

86:                                               ; preds = %.lr.ph380, %._crit_edge359
  %.0269378 = phi double [ undef, %.lr.ph380 ], [ %.1, %._crit_edge359 ]
  %.0270377 = phi double [ undef, %.lr.ph380 ], [ %.2, %._crit_edge359 ]
  %.0273376 = phi double [ undef, %.lr.ph380 ], [ %.1274, %._crit_edge359 ]
  %.0275375 = phi i64 [ undef, %.lr.ph380 ], [ %.2277.lcssa, %._crit_edge359 ]
  %.0278374 = phi i64 [ 1, %.lr.ph380 ], [ %357, %._crit_edge359 ]
  %.0280373 = phi double [ undef, %.lr.ph380 ], [ %.1281.lcssa, %._crit_edge359 ]
  %.0283372 = phi i64 [ 1, %.lr.ph380 ], [ %.1284, %._crit_edge359 ]
  %87 = icmp eq i64 %.0278374, 1
  br i1 %87, label %91, label %88

88:                                               ; preds = %86
  %gep368 = getelementptr i64, ptr %invariant.gep367, i64 %.0278374
  %89 = load i64, ptr %gep368, align 8, !tbaa !5
  %90 = add nsw i64 %89, 1
  br label %91

91:                                               ; preds = %86, %88
  %.0285 = phi i64 [ %90, %88 ], [ 1, %86 ]
  %92 = getelementptr inbounds i64, ptr %29, i64 %.0278374
  %93 = load i64, ptr %92, align 8, !tbaa !5
  %94 = sub nsw i64 %93, %.0285
  %95 = add nsw i64 %94, 1
  store i64 %95, ptr %24, align 8, !tbaa !5
  %96 = icmp eq i64 %93, %.0285
  br i1 %96, label %145, label %97

97:                                               ; preds = %91
  %98 = getelementptr inbounds double, ptr %25, i64 %.0285
  %99 = load double, ptr %98, align 8, !tbaa !9
  %100 = getelementptr inbounds double, ptr %26, i64 %.0285
  %101 = load double, ptr %100, align 8, !tbaa !9
  %102 = getelementptr inbounds double, ptr %25, i64 %93
  %103 = load double, ptr %102, align 8, !tbaa !9
  %104 = add nsw i64 %93, -1
  %105 = getelementptr inbounds double, ptr %26, i64 %104
  %106 = load double, ptr %105, align 8, !tbaa !9
  %107 = insertelement <2 x double> poison, double %99, i64 0
  %108 = insertelement <2 x double> %107, double %103, i64 1
  %109 = fcmp oge <2 x double> %108, zeroinitializer
  %110 = fneg <2 x double> %108
  %111 = select <2 x i1> %109, <2 x double> %108, <2 x double> %110
  %112 = insertelement <2 x double> poison, double %101, i64 0
  %113 = insertelement <2 x double> %112, double %106, i64 1
  %114 = fcmp oge <2 x double> %113, zeroinitializer
  %115 = fneg <2 x double> %113
  %116 = select <2 x i1> %114, <2 x double> %113, <2 x double> %115
  %117 = fadd <2 x double> %111, %116
  %118 = extractelement <2 x double> %117, i64 0
  %119 = extractelement <2 x double> %117, i64 1
  %120 = fcmp oge double %118, %119
  %121 = select i1 %120, double %118, double %119
  %.not305.not327 = icmp slt i64 %.0285, %104
  br i1 %.not305.not327, label %.lr.ph331, label %._crit_edge332

.lr.ph331:                                        ; preds = %97, %.lr.ph331
  %.1271329 = phi double [ %140, %.lr.ph331 ], [ %121, %97 ]
  %.2290.in328 = phi i64 [ %.2290, %.lr.ph331 ], [ %.0285, %97 ]
  %.2290 = add nsw i64 %.2290.in328, 1
  %122 = getelementptr double, ptr %1, i64 %.2290.in328
  %123 = load double, ptr %122, align 8, !tbaa !9
  %124 = fcmp oge double %123, 0.000000e+00
  %125 = fneg double %123
  %126 = select i1 %124, double %123, double %125
  %127 = getelementptr inbounds double, ptr %26, i64 %.2290.in328
  %128 = load double, ptr %127, align 8, !tbaa !9
  %129 = fcmp oge double %128, 0.000000e+00
  %130 = fneg double %128
  %131 = select i1 %129, double %128, double %130
  %132 = fadd double %126, %131
  %133 = getelementptr double, ptr %2, i64 %.2290.in328
  %134 = load double, ptr %133, align 8, !tbaa !9
  %135 = fcmp oge double %134, 0.000000e+00
  %136 = fneg double %134
  %137 = select i1 %135, double %134, double %136
  %138 = fadd double %132, %137
  %139 = fcmp oge double %.1271329, %138
  %140 = select i1 %139, double %.1271329, double %138
  %exitcond385.not = icmp eq i64 %.2290, %104
  br i1 %exitcond385.not, label %._crit_edge332, label %.lr.ph331, !llvm.loop !13

._crit_edge332:                                   ; preds = %.lr.ph331, %97
  %.1271.lcssa = phi double [ %121, %97 ], [ %140, %.lr.ph331 ]
  %141 = fmul double %.1271.lcssa, 1.000000e-03
  %142 = sitofp i64 %95 to double
  %143 = fdiv double 1.000000e-01, %142
  %144 = call double @sqrt(double noundef %143) #6
  br label %145

145:                                              ; preds = %91, %._crit_edge332
  %.1276 = phi i64 [ %.0275375, %91 ], [ %.0285, %._crit_edge332 ]
  %.1274 = phi double [ %.0273376, %91 ], [ %141, %._crit_edge332 ]
  %.2 = phi double [ %.0270377, %91 ], [ %.1271.lcssa, %._crit_edge332 ]
  %.1 = phi double [ %.0269378, %91 ], [ %144, %._crit_edge332 ]
  %146 = load i64, ptr %3, align 8, !tbaa !5
  %.not306351 = icmp sgt i64 %.0283372, %146
  br i1 %.not306351, label %._crit_edge359, label %.lr.ph358

.lr.ph358:                                        ; preds = %145
  %147 = getelementptr inbounds double, ptr %25, i64 %.0285
  %148 = getelementptr inbounds double, ptr %26, i64 %.0285
  %149 = getelementptr double, ptr %32, i64 %.0285
  %gep370 = getelementptr double, ptr %invariant.gep369, i64 %.0285
  %150 = shl i64 %.0283372, 3
  %151 = add i64 %150, -8
  %152 = mul i64 %30, %151
  %153 = add i64 %146, 1
  %154 = sub i64 %153, %.0283372
  %155 = getelementptr i8, ptr %7, i64 %152
  %156 = add i64 %84, %152
  %157 = shl i64 %.0285, 3
  %158 = add i64 %156, %157
  br label %159

159:                                              ; preds = %.lr.ph358, %._crit_edge346
  %.2277356 = phi i64 [ %.1276, %.lr.ph358 ], [ %.7, %._crit_edge346 ]
  %.0279355 = phi i64 [ 0, %.lr.ph358 ], [ %166, %._crit_edge346 ]
  %.1281354 = phi double [ %.0280373, %.lr.ph358 ], [ %355, %._crit_edge346 ]
  %.1287352 = phi i64 [ %.0283372, %.lr.ph358 ], [ %356, %._crit_edge346 ]
  %160 = mul i64 %85, %.0279355
  %161 = add i64 %158, %160
  %162 = mul i64 %82, %.0279355
  %scevgep = getelementptr i8, ptr %155, i64 %162
  %163 = getelementptr inbounds i64, ptr %28, i64 %.1287352
  %164 = load i64, ptr %163, align 8, !tbaa !5
  %.not307 = icmp eq i64 %164, %.0278374
  br i1 %.not307, label %165, label %._crit_edge359

165:                                              ; preds = %159
  %166 = add nuw i64 %.0279355, 1
  %167 = getelementptr inbounds double, ptr %27, i64 %.1287352
  %168 = load double, ptr %167, align 8, !tbaa !9
  store double %168, ptr %18, align 8, !tbaa !9
  %169 = load i64, ptr %24, align 8, !tbaa !5
  %170 = icmp eq i64 %169, 1
  br i1 %170, label %171, label %172

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

172:                                              ; preds = %165
  %.not308 = icmp eq i64 %.0279355, 0
  br i1 %.not308, label %.outer, label %173

173:                                              ; preds = %172
  %174 = fmul double %67, %168
  %175 = fcmp oge double %174, 0.000000e+00
  %176 = fneg double %174
  %177 = select i1 %175, double %174, double %176
  %178 = fmul double %177, 1.000000e+01
  %179 = fsub double %168, %.1281354
  %180 = fcmp olt double %179, %178
  br i1 %180, label %181, label %.outer

181:                                              ; preds = %173
  %182 = fadd double %.1281354, %178
  store double %182, ptr %18, align 8, !tbaa !9
  br label %.outer

.outer:                                           ; preds = %173, %181, %172
  %183 = call i32 @dlarnv_(ptr noundef nonnull @c__2, ptr noundef nonnull %22, ptr noundef nonnull %24, ptr noundef %9) #6
  %184 = call i32 @f2c_dcopy(ptr noundef nonnull %24, ptr noundef nonnull %147, ptr noundef nonnull @c__1, ptr noundef %76, ptr noundef nonnull @c__1) #6
  %185 = load i64, ptr %24, align 8, !tbaa !5
  %186 = add nsw i64 %185, -1
  store i64 %186, ptr %17, align 8, !tbaa !5
  %187 = call i32 @f2c_dcopy(ptr noundef nonnull %17, ptr noundef nonnull %148, ptr noundef nonnull @c__1, ptr noundef %78, ptr noundef nonnull @c__1) #6
  %188 = load i64, ptr %24, align 8, !tbaa !5
  %189 = add nsw i64 %188, -1
  store i64 %189, ptr %17, align 8, !tbaa !5
  %190 = call i32 @f2c_dcopy(ptr noundef nonnull %17, ptr noundef nonnull %148, ptr noundef nonnull @c__1, ptr noundef %79, ptr noundef nonnull @c__1) #6
  store double 0.000000e+00, ptr %20, align 8, !tbaa !9
  %191 = call i32 @dlagtf_(ptr noundef nonnull %24, ptr noundef %76, ptr noundef nonnull %18, ptr noundef %78, ptr noundef %79, ptr noundef nonnull %20, ptr noundef %80, ptr noundef %10, ptr noundef nonnull %23) #6
  %192 = add nsw i64 %.1287352, -1
  br label %193

193:                                              ; preds = %.outer, %.loopexit
  %.0282 = phi i64 [ %194, %.loopexit ], [ 0, %.outer ]
  %.3 = phi i64 [ %.5, %.loopexit ], [ %.2277356, %.outer ]
  %194 = add nuw nsw i64 %.0282, 1
  %exitcond392 = icmp eq i64 %.0282, 5
  br i1 %exitcond392, label %.loopexit387, label %195

195:                                              ; preds = %193
  %196 = load i64, ptr %24, align 8, !tbaa !5
  %197 = getelementptr double, ptr %81, i64 %196
  %198 = load double, ptr %197, align 8, !tbaa !9
  %199 = fcmp oge double %198, 0.000000e+00
  %200 = fneg double %198
  %201 = select i1 %199, double %198, double %200
  %202 = sitofp i64 %196 to double
  %203 = fmul double %.2, %202
  %204 = fcmp oge double %67, %201
  %205 = select i1 %204, double %67, double %201
  %206 = fmul double %203, %205
  %207 = call double @f2c_dasum(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %208 = fdiv double %206, %207
  store double %208, ptr %19, align 8, !tbaa !9
  %209 = call i32 @f2c_dscal(ptr noundef nonnull %24, ptr noundef nonnull %19, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %210 = call i32 @dlagts_(ptr noundef nonnull @c_n1, ptr noundef nonnull %24, ptr noundef %76, ptr noundef %78, ptr noundef %79, ptr noundef %80, ptr noundef %10, ptr noundef %9, ptr noundef nonnull %20, ptr noundef nonnull %23) #6
  br i1 %.not308, label %.loopexit, label %211

211:                                              ; preds = %195
  %212 = load double, ptr %18, align 8, !tbaa !9
  %213 = fsub double %212, %.1281354
  %214 = fcmp oge double %213, 0.000000e+00
  %215 = fneg double %213
  %216 = select i1 %214, double %213, double %215
  %217 = fcmp ogt double %216, %.1274
  %.4 = select i1 %217, i64 %.1287352, i64 %.3
  %.not310 = icmp eq i64 %.4, %.1287352
  br i1 %.not310, label %.loopexit, label %218

218:                                              ; preds = %211
  store i64 %192, ptr %17, align 8, !tbaa !5
  %.not311333.not = icmp slt i64 %.4, %.1287352
  br i1 %.not311333.not, label %.lr.ph336, label %.loopexit

.lr.ph336:                                        ; preds = %218, %.lr.ph336
  %.3291334 = phi i64 [ %224, %.lr.ph336 ], [ %.4, %218 ]
  %219 = mul nsw i64 %.3291334, %30
  %220 = getelementptr double, ptr %149, i64 %219
  %221 = call double @f2c_ddot(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1, ptr noundef %220, ptr noundef nonnull @c__1) #6
  %222 = fneg double %221
  store double %222, ptr %21, align 8, !tbaa !9
  %223 = call i32 @f2c_daxpy(ptr noundef nonnull %24, ptr noundef nonnull %21, ptr noundef %220, ptr noundef nonnull @c__1, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %224 = add nsw i64 %.3291334, 1
  %225 = load i64, ptr %17, align 8, !tbaa !5
  %.not311.not = icmp slt i64 %.3291334, %225
  br i1 %.not311.not, label %.lr.ph336, label %.loopexit, !llvm.loop !14

.loopexit:                                        ; preds = %.lr.ph336, %218, %211, %195
  %.5 = phi i64 [ %.3, %195 ], [ %.1287352, %211 ], [ %.4, %218 ], [ %.4, %.lr.ph336 ]
  %226 = call i64 @f2c_idamax(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %227 = getelementptr inbounds double, ptr %33, i64 %226
  %228 = load double, ptr %227, align 8, !tbaa !9
  %229 = fcmp oge double %228, 0.000000e+00
  %230 = fneg double %228
  %231 = select i1 %229, double %228, double %230
  %232 = fcmp olt double %231, %.1
  br i1 %232, label %193, label %.outer.1

.outer.1:                                         ; preds = %.loopexit, %.loopexit.1
  %.0282.1 = phi i64 [ %233, %.loopexit.1 ], [ %194, %.loopexit ]
  %.3.1 = phi i64 [ %.5.1, %.loopexit.1 ], [ %.5, %.loopexit ]
  %233 = add nuw nsw i64 %.0282.1, 1
  %234 = icmp ugt i64 %.0282.1, 4
  br i1 %234, label %.loopexit387, label %235

235:                                              ; preds = %.outer.1
  %236 = load i64, ptr %24, align 8, !tbaa !5
  %237 = getelementptr double, ptr %81, i64 %236
  %238 = load double, ptr %237, align 8, !tbaa !9
  %239 = fcmp oge double %238, 0.000000e+00
  %240 = fneg double %238
  %241 = select i1 %239, double %238, double %240
  %242 = sitofp i64 %236 to double
  %243 = fmul double %.2, %242
  %244 = fcmp oge double %67, %241
  %245 = select i1 %244, double %67, double %241
  %246 = fmul double %243, %245
  %247 = call double @f2c_dasum(ptr noundef nonnull %24, ptr noundef nonnull %9, ptr noundef nonnull @c__1) #6
  %248 = fdiv double %246, %247
  store double %248, ptr %19, align 8, !tbaa !9
  %249 = call i32 @f2c_dscal(ptr noundef nonnull %24, ptr noundef nonnull %19, ptr noundef nonnull %9, ptr noundef nonnull @c__1) #6
  %250 = call i32 @dlagts_(ptr noundef nonnull @c_n1, ptr noundef nonnull %24, ptr noundef %76, ptr noundef %78, ptr noundef %79, ptr noundef %80, ptr noundef %10, ptr noundef nonnull %9, ptr noundef nonnull %20, ptr noundef nonnull %23) #6
  br i1 %.not308, label %.loopexit.1, label %251

251:                                              ; preds = %235
  %252 = load double, ptr %18, align 8, !tbaa !9
  %253 = fsub double %252, %.1281354
  %254 = fcmp oge double %253, 0.000000e+00
  %255 = fneg double %253
  %256 = select i1 %254, double %253, double %255
  %257 = fcmp ogt double %256, %.1274
  %.4.1 = select i1 %257, i64 %.1287352, i64 %.3.1
  %.not310.1 = icmp eq i64 %.4.1, %.1287352
  br i1 %.not310.1, label %.loopexit.1, label %258

258:                                              ; preds = %251
  store i64 %192, ptr %17, align 8, !tbaa !5
  %.not311333.not.1 = icmp slt i64 %.4.1, %.1287352
  br i1 %.not311333.not.1, label %.lr.ph336.1, label %.loopexit.1

.lr.ph336.1:                                      ; preds = %258, %.lr.ph336.1
  %.3291334.1 = phi i64 [ %264, %.lr.ph336.1 ], [ %.4.1, %258 ]
  %259 = mul nsw i64 %.3291334.1, %30
  %260 = getelementptr double, ptr %149, i64 %259
  %261 = call double @f2c_ddot(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1, ptr noundef %260, ptr noundef nonnull @c__1) #6
  %262 = fneg double %261
  store double %262, ptr %21, align 8, !tbaa !9
  %263 = call i32 @f2c_daxpy(ptr noundef nonnull %24, ptr noundef nonnull %21, ptr noundef %260, ptr noundef nonnull @c__1, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %264 = add nsw i64 %.3291334.1, 1
  %265 = load i64, ptr %17, align 8, !tbaa !5
  %.not311.not.1 = icmp slt i64 %.3291334.1, %265
  br i1 %.not311.not.1, label %.lr.ph336.1, label %.loopexit.1, !llvm.loop !14

.loopexit.1:                                      ; preds = %.lr.ph336.1, %258, %251, %235
  %.5.1 = phi i64 [ %.3.1, %235 ], [ %.1287352, %251 ], [ %.4.1, %258 ], [ %.4.1, %.lr.ph336.1 ]
  %266 = call i64 @f2c_idamax(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %267 = getelementptr inbounds double, ptr %33, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !9
  %269 = fcmp oge double %268, 0.000000e+00
  %270 = fneg double %268
  %271 = select i1 %269, double %268, double %270
  %272 = fcmp olt double %271, %.1
  br i1 %272, label %.outer.1, label %.outer.2

.outer.2:                                         ; preds = %.loopexit.1, %.loopexit.2
  %.0282.2 = phi i64 [ %273, %.loopexit.2 ], [ %233, %.loopexit.1 ]
  %.3.2 = phi i64 [ %.5.2, %.loopexit.2 ], [ %.5.1, %.loopexit.1 ]
  %273 = add nuw nsw i64 %.0282.2, 1
  %274 = icmp ugt i64 %.0282.2, 4
  br i1 %274, label %.loopexit387, label %275

275:                                              ; preds = %.outer.2
  %276 = load i64, ptr %24, align 8, !tbaa !5
  %277 = getelementptr double, ptr %81, i64 %276
  %278 = load double, ptr %277, align 8, !tbaa !9
  %279 = fcmp oge double %278, 0.000000e+00
  %280 = fneg double %278
  %281 = select i1 %279, double %278, double %280
  %282 = sitofp i64 %276 to double
  %283 = fmul double %.2, %282
  %284 = fcmp oge double %67, %281
  %285 = select i1 %284, double %67, double %281
  %286 = fmul double %283, %285
  %287 = call double @f2c_dasum(ptr noundef nonnull %24, ptr noundef nonnull %9, ptr noundef nonnull @c__1) #6
  %288 = fdiv double %286, %287
  store double %288, ptr %19, align 8, !tbaa !9
  %289 = call i32 @f2c_dscal(ptr noundef nonnull %24, ptr noundef nonnull %19, ptr noundef nonnull %9, ptr noundef nonnull @c__1) #6
  %290 = call i32 @dlagts_(ptr noundef nonnull @c_n1, ptr noundef nonnull %24, ptr noundef %76, ptr noundef %78, ptr noundef %79, ptr noundef %80, ptr noundef %10, ptr noundef nonnull %9, ptr noundef nonnull %20, ptr noundef nonnull %23) #6
  br i1 %.not308, label %.loopexit.2, label %291

291:                                              ; preds = %275
  %292 = load double, ptr %18, align 8, !tbaa !9
  %293 = fsub double %292, %.1281354
  %294 = fcmp oge double %293, 0.000000e+00
  %295 = fneg double %293
  %296 = select i1 %294, double %293, double %295
  %297 = fcmp ogt double %296, %.1274
  %.4.2 = select i1 %297, i64 %.1287352, i64 %.3.2
  %.not310.2 = icmp eq i64 %.4.2, %.1287352
  br i1 %.not310.2, label %.loopexit.2, label %298

298:                                              ; preds = %291
  store i64 %192, ptr %17, align 8, !tbaa !5
  %.not311333.not.2 = icmp slt i64 %.4.2, %.1287352
  br i1 %.not311333.not.2, label %.lr.ph336.2, label %.loopexit.2

.lr.ph336.2:                                      ; preds = %298, %.lr.ph336.2
  %.3291334.2 = phi i64 [ %304, %.lr.ph336.2 ], [ %.4.2, %298 ]
  %299 = mul nsw i64 %.3291334.2, %30
  %300 = getelementptr double, ptr %149, i64 %299
  %301 = call double @f2c_ddot(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1, ptr noundef %300, ptr noundef nonnull @c__1) #6
  %302 = fneg double %301
  store double %302, ptr %21, align 8, !tbaa !9
  %303 = call i32 @f2c_daxpy(ptr noundef nonnull %24, ptr noundef nonnull %21, ptr noundef %300, ptr noundef nonnull @c__1, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %304 = add nsw i64 %.3291334.2, 1
  %305 = load i64, ptr %17, align 8, !tbaa !5
  %.not311.not.2 = icmp slt i64 %.3291334.2, %305
  br i1 %.not311.not.2, label %.lr.ph336.2, label %.loopexit.2, !llvm.loop !14

.loopexit.2:                                      ; preds = %.lr.ph336.2, %298, %291, %275
  %.5.2 = phi i64 [ %.3.2, %275 ], [ %.1287352, %291 ], [ %.4.2, %298 ], [ %.4.2, %.lr.ph336.2 ]
  %306 = call i64 @f2c_idamax(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %307 = getelementptr inbounds double, ptr %33, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !9
  %309 = fcmp oge double %308, 0.000000e+00
  %310 = fneg double %308
  %311 = select i1 %309, double %308, double %310
  %312 = fcmp olt double %311, %.1
  br i1 %312, label %.outer.2, label %.loopexit315

.loopexit387:                                     ; preds = %193, %.outer.1, %.outer.2
  %.3.lcssa = phi i64 [ %.3.2, %.outer.2 ], [ %.3.1, %.outer.1 ], [ %.3, %193 ]
  %313 = load i64, ptr %12, align 8, !tbaa !5
  %314 = add nsw i64 %313, 1
  store i64 %314, ptr %12, align 8, !tbaa !5
  %315 = getelementptr i64, ptr %11, i64 %313
  store i64 %.1287352, ptr %315, align 8, !tbaa !5
  br label %.loopexit315

.loopexit315:                                     ; preds = %.loopexit.2, %.loopexit387
  %.6 = phi i64 [ %.3.lcssa, %.loopexit387 ], [ %.5.2, %.loopexit.2 ]
  %316 = call double @f2c_dnrm2(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %317 = fdiv double 1.000000e+00, %316
  store double %317, ptr %19, align 8, !tbaa !9
  %318 = call i64 @f2c_idamax(ptr noundef nonnull %24, ptr noundef %9, ptr noundef nonnull @c__1) #6
  %319 = getelementptr inbounds double, ptr %33, i64 %318
  %320 = load double, ptr %319, align 8, !tbaa !9
  %321 = fcmp olt double %320, 0.000000e+00
  br i1 %321, label %322, label %325

322:                                              ; preds = %.loopexit315
  %323 = load double, ptr %19, align 8, !tbaa !9
  %324 = fneg double %323
  store double %324, ptr %19, align 8, !tbaa !9
  br label %325

325:                                              ; preds = %322, %.loopexit315
  %326 = call i32 @f2c_dscal(ptr noundef nonnull %24, ptr noundef nonnull %19, ptr noundef nonnull %9, ptr noundef nonnull @c__1) #6
  br label %327

327:                                              ; preds = %325, %171
  %.7 = phi i64 [ %.2277356, %171 ], [ %.6, %325 ]
  %328 = load i64, ptr %0, align 8, !tbaa !5
  %.not312337 = icmp slt i64 %328, 1
  br i1 %.not312337, label %._crit_edge341, label %.lr.ph340

.lr.ph340:                                        ; preds = %327
  %329 = shl nuw i64 %328, 3
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %329, i1 false), !tbaa !9
  br label %._crit_edge341

._crit_edge341:                                   ; preds = %.lr.ph340, %327
  %330 = load i64, ptr %24, align 8, !tbaa !5
  store i64 %330, ptr %17, align 8, !tbaa !5
  %.not313342 = icmp slt i64 %330, 1
  br i1 %.not313342, label %._crit_edge346, label %.lr.ph345

.lr.ph345:                                        ; preds = %._crit_edge341
  %331 = mul nsw i64 %.1287352, %30
  %invariant.gep349 = getelementptr double, ptr %gep370, i64 %331
  %min.iters.check = icmp ult i64 %330, 4
  %diff.check = icmp ult i64 %161, 32
  %or.cond418 = select i1 %min.iters.check, i1 true, i1 %diff.check
  br i1 %or.cond418, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph345
  %n.vec = and i64 %330, 9223372036854775804
  %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
  %332 = getelementptr double, ptr %9, i64 %index
  %333 = getelementptr inbounds i8, ptr %332, i64 16
  %wide.load = load <2 x double>, ptr %332, align 8, !tbaa !9
  %wide.load417 = load <2 x double>, ptr %333, align 8, !tbaa !9
  %334 = getelementptr double, ptr %invariant.gep349, i64 %offset.idx
  %335 = getelementptr i8, ptr %334, i64 16
  store <2 x double> %wide.load, ptr %334, align 8, !tbaa !9
  store <2 x double> %wide.load417, ptr %335, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %336 = icmp eq i64 %index.next, %n.vec
  br i1 %336, label %middle.block, label %vector.body, !llvm.loop !15

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

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph345
  %.5293343.ph = phi i64 [ 1, %.lr.ph345 ], [ %ind.end, %middle.block ]
  %337 = add nuw i64 %330, 1
  %338 = sub i64 %337, %.5293343.ph
  %339 = sub i64 %330, %.5293343.ph
  %xtraiter = and i64 %338, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %.5293343.prol = phi i64 [ %342, %scalar.ph.prol ], [ %.5293343.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %340 = getelementptr inbounds double, ptr %33, i64 %.5293343.prol
  %341 = load double, ptr %340, align 8, !tbaa !9
  %gep350.prol = getelementptr double, ptr %invariant.gep349, i64 %.5293343.prol
  store double %341, ptr %gep350.prol, align 8, !tbaa !9
  %342 = add nuw i64 %.5293343.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !18

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.5293343.unr = phi i64 [ %.5293343.ph, %scalar.ph.preheader ], [ %342, %scalar.ph.prol ]
  %343 = icmp ult i64 %339, 3
  br i1 %343, label %._crit_edge346, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %invariant.gep438 = getelementptr i8, ptr %invariant.gep349, i64 8
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %.5293343 = phi i64 [ %.5293343.unr, %scalar.ph.preheader.new ], [ %354, %scalar.ph ]
  %344 = getelementptr inbounds double, ptr %33, i64 %.5293343
  %345 = load double, ptr %344, align 8, !tbaa !9
  %gep350 = getelementptr double, ptr %invariant.gep349, i64 %.5293343
  store double %345, ptr %gep350, align 8, !tbaa !9
  %346 = getelementptr double, ptr %9, i64 %.5293343
  %347 = load double, ptr %346, align 8, !tbaa !9
  %gep439 = getelementptr double, ptr %invariant.gep438, i64 %.5293343
  store double %347, ptr %gep439, align 8, !tbaa !9
  %348 = add nuw i64 %.5293343, 2
  %349 = getelementptr inbounds double, ptr %33, i64 %348
  %350 = load double, ptr %349, align 8, !tbaa !9
  %gep350.2 = getelementptr double, ptr %invariant.gep349, i64 %348
  store double %350, ptr %gep350.2, align 8, !tbaa !9
  %351 = add nuw i64 %.5293343, 3
  %352 = getelementptr inbounds double, ptr %33, i64 %351
  %353 = load double, ptr %352, align 8, !tbaa !9
  %gep350.3 = getelementptr double, ptr %invariant.gep349, i64 %351
  store double %353, ptr %gep350.3, align 8, !tbaa !9
  %354 = add nuw i64 %.5293343, 4
  %exitcond394.not.3 = icmp eq i64 %351, %330
  br i1 %exitcond394.not.3, label %._crit_edge346, label %scalar.ph, !llvm.loop !20

._crit_edge346:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %._crit_edge341
  %355 = load double, ptr %18, align 8, !tbaa !9
  %356 = add nsw i64 %.1287352, 1
  %exitcond395.not = icmp eq i64 %166, %154
  br i1 %exitcond395.not, label %._crit_edge359, label %159, !llvm.loop !21

._crit_edge359:                                   ; preds = %._crit_edge346, %159, %145
  %.1281.lcssa = phi double [ %.0280373, %145 ], [ %.1281354, %159 ], [ %355, %._crit_edge346 ]
  %.2277.lcssa = phi i64 [ %.1276, %145 ], [ %.2277356, %159 ], [ %.7, %._crit_edge346 ]
  %.1284 = phi i64 [ %.0283372, %145 ], [ %.1287352, %159 ], [ %.0283372, %._crit_edge346 ]
  %357 = add nuw nsw i64 %.0278374, 1
  %.not304.not = icmp slt i64 %.0278374, %73
  br i1 %.not304.not, label %86, label %.loopexit316, !llvm.loop !22

.loopexit316:                                     ; preds = %._crit_edge359, %66, %60, %65, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  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

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

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

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) #4

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = distinct !{!14, !12}
!15 = distinct !{!15, !12, !16, !17}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = distinct !{!20, !12, !16}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}


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