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

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

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

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

93:                                               ; preds = %16
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %94

94:                                               ; preds = %93, %16
  %95 = load ptr, ptr %17, align 8, !tbaa !5
  %96 = call i32 @lsame_(ptr noundef %95, ptr noundef @.str.1)
  %97 = icmp ne i32 %96, 0
  br i1 %97, label %98, label %99

98:                                               ; preds = %94
  store i32 2, ptr %47, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %98, %94
  %100 = load i32, ptr %47, align 4, !tbaa !9
  %101 = icmp eq i32 %100, 0
  br i1 %101, label %102, label %104

102:                                              ; preds = %99
  %103 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -1, ptr %103, align 4, !tbaa !9
  br label %215

104:                                              ; preds = %99
  %105 = load ptr, ptr %18, align 8, !tbaa !5
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = icmp slt i32 %106, 0
  br i1 %107, label %112, label %108

108:                                              ; preds = %104
  %109 = load ptr, ptr %18, align 8, !tbaa !5
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = icmp sgt i32 %110, 1
  br i1 %111, label %112, label %114

112:                                              ; preds = %108, %104
  %113 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -2, ptr %113, align 4, !tbaa !9
  br label %214

114:                                              ; preds = %108
  %115 = load ptr, ptr %19, align 8, !tbaa !5
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = icmp slt i32 %116, 0
  br i1 %117, label %118, label %120

118:                                              ; preds = %114
  %119 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -3, ptr %119, align 4, !tbaa !9
  br label %213

120:                                              ; preds = %114
  %121 = load ptr, ptr %20, align 8, !tbaa !5
  %122 = load i32, ptr %121, align 4, !tbaa !9
  %123 = icmp slt i32 %122, 0
  br i1 %123, label %124, label %126

124:                                              ; preds = %120
  %125 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -4, ptr %125, align 4, !tbaa !9
  br label %212

126:                                              ; preds = %120
  %127 = load ptr, ptr %21, align 8, !tbaa !5
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = icmp slt i32 %128, 0
  br i1 %129, label %130, label %132

130:                                              ; preds = %126
  %131 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -5, ptr %131, align 4, !tbaa !9
  br label %211

132:                                              ; preds = %126
  %133 = load ptr, ptr %22, align 8, !tbaa !5
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = icmp slt i32 %134, 0
  br i1 %135, label %136, label %138

136:                                              ; preds = %132
  %137 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -6, ptr %137, align 4, !tbaa !9
  br label %210

138:                                              ; preds = %132
  %139 = load ptr, ptr %20, align 8, !tbaa !5
  %140 = load i32, ptr %139, align 4, !tbaa !9
  %141 = icmp eq i32 %140, 0
  br i1 %141, label %142, label %146

142:                                              ; preds = %138
  %143 = load ptr, ptr %26, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 4, !tbaa !9
  %145 = icmp slt i32 %144, 1
  br i1 %145, label %163, label %146

146:                                              ; preds = %142, %138
  %147 = load ptr, ptr %20, align 8, !tbaa !5
  %148 = load i32, ptr %147, align 4, !tbaa !9
  %149 = icmp sgt i32 %148, 0
  br i1 %149, label %150, label %165

150:                                              ; preds = %146
  %151 = load ptr, ptr %26, align 8, !tbaa !5
  %152 = load i32, ptr %151, align 4, !tbaa !9
  %153 = load ptr, ptr %19, align 8, !tbaa !5
  %154 = load i32, ptr %153, align 4, !tbaa !9
  %155 = icmp sge i32 1, %154
  br i1 %155, label %156, label %157

156:                                              ; preds = %150
  br label %160

157:                                              ; preds = %150
  %158 = load ptr, ptr %19, align 8, !tbaa !5
  %159 = load i32, ptr %158, align 4, !tbaa !9
  br label %160

160:                                              ; preds = %157, %156
  %161 = phi i32 [ 1, %156 ], [ %159, %157 ]
  %162 = icmp slt i32 %152, %161
  br i1 %162, label %163, label %165

163:                                              ; preds = %160, %142
  %164 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -10, ptr %164, align 4, !tbaa !9
  br label %209

165:                                              ; preds = %160, %146
  %166 = load ptr, ptr %28, align 8, !tbaa !5
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = load ptr, ptr %21, align 8, !tbaa !5
  %169 = load i32, ptr %168, align 4, !tbaa !9
  %170 = icmp sge i32 1, %169
  br i1 %170, label %171, label %172

171:                                              ; preds = %165
  br label %175

172:                                              ; preds = %165
  %173 = load ptr, ptr %21, align 8, !tbaa !5
  %174 = load i32, ptr %173, align 4, !tbaa !9
  br label %175

175:                                              ; preds = %172, %171
  %176 = phi i32 [ 1, %171 ], [ %174, %172 ]
  %177 = icmp slt i32 %167, %176
  br i1 %177, label %178, label %180

178:                                              ; preds = %175
  %179 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -12, ptr %179, align 4, !tbaa !9
  br label %208

180:                                              ; preds = %175
  %181 = load ptr, ptr %22, align 8, !tbaa !5
  %182 = load i32, ptr %181, align 4, !tbaa !9
  %183 = icmp eq i32 %182, 0
  br i1 %183, label %184, label %188

184:                                              ; preds = %180
  %185 = load ptr, ptr %30, align 8, !tbaa !5
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp slt i32 %186, 1
  br i1 %187, label %205, label %188

188:                                              ; preds = %184, %180
  %189 = load ptr, ptr %22, align 8, !tbaa !5
  %190 = load i32, ptr %189, align 4, !tbaa !9
  %191 = icmp sgt i32 %190, 0
  br i1 %191, label %192, label %207

192:                                              ; preds = %188
  %193 = load ptr, ptr %30, align 8, !tbaa !5
  %194 = load i32, ptr %193, align 4, !tbaa !9
  %195 = load ptr, ptr %19, align 8, !tbaa !5
  %196 = load i32, ptr %195, align 4, !tbaa !9
  %197 = icmp sge i32 1, %196
  br i1 %197, label %198, label %199

198:                                              ; preds = %192
  br label %202

199:                                              ; preds = %192
  %200 = load ptr, ptr %19, align 8, !tbaa !5
  %201 = load i32, ptr %200, align 4, !tbaa !9
  br label %202

202:                                              ; preds = %199, %198
  %203 = phi i32 [ 1, %198 ], [ %201, %199 ]
  %204 = icmp slt i32 %194, %203
  br i1 %204, label %205, label %207

205:                                              ; preds = %202, %184
  %206 = load ptr, ptr %32, align 8, !tbaa !5
  store i32 -14, ptr %206, align 4, !tbaa !9
  br label %207

207:                                              ; preds = %205, %202, %188
  br label %208

208:                                              ; preds = %207, %178
  br label %209

209:                                              ; preds = %208, %163
  br label %210

210:                                              ; preds = %209, %136
  br label %211

211:                                              ; preds = %210, %130
  br label %212

212:                                              ; preds = %211, %124
  br label %213

213:                                              ; preds = %212, %118
  br label %214

214:                                              ; preds = %213, %112
  br label %215

215:                                              ; preds = %214, %102
  %216 = load ptr, ptr %32, align 8, !tbaa !5
  %217 = load i32, ptr %216, align 4, !tbaa !9
  %218 = icmp ne i32 %217, 0
  br i1 %218, label %219, label %224

219:                                              ; preds = %215
  %220 = load ptr, ptr %32, align 8, !tbaa !5
  %221 = load i32, ptr %220, align 4, !tbaa !9
  %222 = sub nsw i32 0, %221
  store i32 %222, ptr %39, align 4, !tbaa !9
  %223 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %39, i32 noundef 6)
  store i32 1, ptr %52, align 4
  br label %710

224:                                              ; preds = %215
  %225 = load ptr, ptr %19, align 8, !tbaa !5
  %226 = load i32, ptr %225, align 4, !tbaa !9
  %227 = icmp eq i32 %226, 0
  br i1 %227, label %228, label %229

228:                                              ; preds = %224
  store i32 1, ptr %52, align 4
  br label %710

229:                                              ; preds = %224
  %230 = load ptr, ptr %20, align 8, !tbaa !5
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = icmp sgt i32 %231, 0
  br i1 %232, label %241, label %233

233:                                              ; preds = %229
  %234 = load ptr, ptr %21, align 8, !tbaa !5
  %235 = load i32, ptr %234, align 4, !tbaa !9
  %236 = icmp sgt i32 %235, 0
  br i1 %236, label %241, label %237

237:                                              ; preds = %233
  %238 = load ptr, ptr %22, align 8, !tbaa !5
  %239 = load i32, ptr %238, align 4, !tbaa !9
  %240 = icmp sgt i32 %239, 0
  br label %241

241:                                              ; preds = %237, %233, %229
  %242 = phi i1 [ true, %233 ], [ true, %229 ], [ %240, %237 ]
  %243 = zext i1 %242 to i32
  store i32 %243, ptr %50, align 4, !tbaa !9
  %244 = load ptr, ptr %19, align 8, !tbaa !5
  %245 = load i32, ptr %244, align 4, !tbaa !9
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr %51, align 4, !tbaa !9
  %247 = load ptr, ptr %18, align 8, !tbaa !5
  %248 = load i32, ptr %247, align 4, !tbaa !9
  store i32 %248, ptr %43, align 4, !tbaa !9
  %249 = load i32, ptr %47, align 4, !tbaa !9
  %250 = icmp eq i32 %249, 1
  br i1 %250, label %251, label %379

251:                                              ; preds = %241
  %252 = load i32, ptr %43, align 4, !tbaa !9
  %253 = icmp eq i32 %252, 1
  br i1 %253, label %254, label %379

254:                                              ; preds = %251
  %255 = load ptr, ptr %19, align 8, !tbaa !5
  %256 = load i32, ptr %255, align 4, !tbaa !9
  %257 = sub nsw i32 %256, 1
  store i32 %257, ptr %39, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %318, %254
  %259 = load i32, ptr %44, align 4, !tbaa !9
  %260 = load i32, ptr %39, align 4, !tbaa !9
  %261 = icmp sle i32 %259, %260
  br i1 %261, label %262, label %321

262:                                              ; preds = %258
  %263 = load ptr, ptr %23, align 8, !tbaa !5
  %264 = load i32, ptr %44, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds double, ptr %263, i64 %265
  %267 = load ptr, ptr %24, align 8, !tbaa !5
  %268 = load i32, ptr %44, align 4, !tbaa !9
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds double, ptr %267, i64 %269
  call void @dlartg_(ptr noundef %266, ptr noundef %270, ptr noundef %48, ptr noundef %49, ptr noundef %46)
  %271 = load double, ptr %46, align 8, !tbaa !11
  %272 = load ptr, ptr %23, align 8, !tbaa !5
  %273 = load i32, ptr %44, align 4, !tbaa !9
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds double, ptr %272, i64 %274
  store double %271, ptr %275, align 8, !tbaa !11
  %276 = load double, ptr %49, align 8, !tbaa !11
  %277 = load ptr, ptr %23, align 8, !tbaa !5
  %278 = load i32, ptr %44, align 4, !tbaa !9
  %279 = add nsw i32 %278, 1
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds double, ptr %277, i64 %280
  %282 = load double, ptr %281, align 8, !tbaa !11
  %283 = fmul double %276, %282
  %284 = load ptr, ptr %24, align 8, !tbaa !5
  %285 = load i32, ptr %44, align 4, !tbaa !9
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds double, ptr %284, i64 %286
  store double %283, ptr %287, align 8, !tbaa !11
  %288 = load double, ptr %48, align 8, !tbaa !11
  %289 = load ptr, ptr %23, align 8, !tbaa !5
  %290 = load i32, ptr %44, align 4, !tbaa !9
  %291 = add nsw i32 %290, 1
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %289, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !11
  %295 = fmul double %288, %294
  %296 = load ptr, ptr %23, align 8, !tbaa !5
  %297 = load i32, ptr %44, align 4, !tbaa !9
  %298 = add nsw i32 %297, 1
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds double, ptr %296, i64 %299
  store double %295, ptr %300, align 8, !tbaa !11
  %301 = load i32, ptr %50, align 4, !tbaa !9
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %317

303:                                              ; preds = %262
  %304 = load double, ptr %48, align 8, !tbaa !11
  %305 = load ptr, ptr %31, align 8, !tbaa !5
  %306 = load i32, ptr %44, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds double, ptr %305, i64 %307
  store double %304, ptr %308, align 8, !tbaa !11
  %309 = load double, ptr %49, align 8, !tbaa !11
  %310 = load ptr, ptr %31, align 8, !tbaa !5
  %311 = load ptr, ptr %19, align 8, !tbaa !5
  %312 = load i32, ptr %311, align 4, !tbaa !9
  %313 = load i32, ptr %44, align 4, !tbaa !9
  %314 = add nsw i32 %312, %313
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds double, ptr %310, i64 %315
  store double %309, ptr %316, align 8, !tbaa !11
  br label %317

317:                                              ; preds = %303, %262
  br label %318

318:                                              ; preds = %317
  %319 = load i32, ptr %44, align 4, !tbaa !9
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %44, align 4, !tbaa !9
  br label %258, !llvm.loop !13

321:                                              ; preds = %258
  %322 = load ptr, ptr %23, align 8, !tbaa !5
  %323 = load ptr, ptr %19, align 8, !tbaa !5
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds double, ptr %322, i64 %325
  %327 = load ptr, ptr %24, align 8, !tbaa !5
  %328 = load ptr, ptr %19, align 8, !tbaa !5
  %329 = load i32, ptr %328, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds double, ptr %327, i64 %330
  call void @dlartg_(ptr noundef %326, ptr noundef %331, ptr noundef %48, ptr noundef %49, ptr noundef %46)
  %332 = load double, ptr %46, align 8, !tbaa !11
  %333 = load ptr, ptr %23, align 8, !tbaa !5
  %334 = load ptr, ptr %19, align 8, !tbaa !5
  %335 = load i32, ptr %334, align 4, !tbaa !9
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds double, ptr %333, i64 %336
  store double %332, ptr %337, align 8, !tbaa !11
  %338 = load ptr, ptr %24, align 8, !tbaa !5
  %339 = load ptr, ptr %19, align 8, !tbaa !5
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds double, ptr %338, i64 %341
  store double 0.000000e+00, ptr %342, align 8, !tbaa !11
  %343 = load i32, ptr %50, align 4, !tbaa !9
  %344 = icmp ne i32 %343, 0
  br i1 %344, label %345, label %361

345:                                              ; preds = %321
  %346 = load double, ptr %48, align 8, !tbaa !11
  %347 = load ptr, ptr %31, align 8, !tbaa !5
  %348 = load ptr, ptr %19, align 8, !tbaa !5
  %349 = load i32, ptr %348, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds double, ptr %347, i64 %350
  store double %346, ptr %351, align 8, !tbaa !11
  %352 = load double, ptr %49, align 8, !tbaa !11
  %353 = load ptr, ptr %31, align 8, !tbaa !5
  %354 = load ptr, ptr %19, align 8, !tbaa !5
  %355 = load i32, ptr %354, align 4, !tbaa !9
  %356 = load ptr, ptr %19, align 8, !tbaa !5
  %357 = load i32, ptr %356, align 4, !tbaa !9
  %358 = add nsw i32 %355, %357
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds double, ptr %353, i64 %359
  store double %352, ptr %360, align 8, !tbaa !11
  br label %361

361:                                              ; preds = %345, %321
  store i32 2, ptr %47, align 4, !tbaa !9
  store i32 0, ptr %43, align 4, !tbaa !9
  %362 = load ptr, ptr %20, align 8, !tbaa !5
  %363 = load i32, ptr %362, align 4, !tbaa !9
  %364 = icmp sgt i32 %363, 0
  br i1 %364, label %365, label %378

365:                                              ; preds = %361
  %366 = load ptr, ptr %20, align 8, !tbaa !5
  %367 = load ptr, ptr %31, align 8, !tbaa !5
  %368 = getelementptr inbounds double, ptr %367, i64 1
  %369 = load ptr, ptr %31, align 8, !tbaa !5
  %370 = load i32, ptr %51, align 4, !tbaa !9
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds double, ptr %369, i64 %371
  %373 = load ptr, ptr %25, align 8, !tbaa !5
  %374 = load i32, ptr %38, align 4, !tbaa !9
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds double, ptr %373, i64 %375
  %377 = load ptr, ptr %26, align 8, !tbaa !5
  call void @dlasr_(ptr noundef @.str.1, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %51, ptr noundef %366, ptr noundef %368, ptr noundef %372, ptr noundef %376, ptr noundef %377)
  br label %378

378:                                              ; preds = %365, %361
  br label %379

379:                                              ; preds = %378, %251, %241
  %380 = load i32, ptr %47, align 4, !tbaa !9
  %381 = icmp eq i32 %380, 2
  br i1 %381, label %382, label %559

382:                                              ; preds = %379
  %383 = load ptr, ptr %19, align 8, !tbaa !5
  %384 = load i32, ptr %383, align 4, !tbaa !9
  %385 = sub nsw i32 %384, 1
  store i32 %385, ptr %39, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %386

386:                                              ; preds = %446, %382
  %387 = load i32, ptr %44, align 4, !tbaa !9
  %388 = load i32, ptr %39, align 4, !tbaa !9
  %389 = icmp sle i32 %387, %388
  br i1 %389, label %390, label %449

390:                                              ; preds = %386
  %391 = load ptr, ptr %23, align 8, !tbaa !5
  %392 = load i32, ptr %44, align 4, !tbaa !9
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds double, ptr %391, i64 %393
  %395 = load ptr, ptr %24, align 8, !tbaa !5
  %396 = load i32, ptr %44, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds double, ptr %395, i64 %397
  call void @dlartg_(ptr noundef %394, ptr noundef %398, ptr noundef %48, ptr noundef %49, ptr noundef %46)
  %399 = load double, ptr %46, align 8, !tbaa !11
  %400 = load ptr, ptr %23, align 8, !tbaa !5
  %401 = load i32, ptr %44, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds double, ptr %400, i64 %402
  store double %399, ptr %403, align 8, !tbaa !11
  %404 = load double, ptr %49, align 8, !tbaa !11
  %405 = load ptr, ptr %23, align 8, !tbaa !5
  %406 = load i32, ptr %44, align 4, !tbaa !9
  %407 = add nsw i32 %406, 1
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds double, ptr %405, i64 %408
  %410 = load double, ptr %409, align 8, !tbaa !11
  %411 = fmul double %404, %410
  %412 = load ptr, ptr %24, align 8, !tbaa !5
  %413 = load i32, ptr %44, align 4, !tbaa !9
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds double, ptr %412, i64 %414
  store double %411, ptr %415, align 8, !tbaa !11
  %416 = load double, ptr %48, align 8, !tbaa !11
  %417 = load ptr, ptr %23, align 8, !tbaa !5
  %418 = load i32, ptr %44, align 4, !tbaa !9
  %419 = add nsw i32 %418, 1
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds double, ptr %417, i64 %420
  %422 = load double, ptr %421, align 8, !tbaa !11
  %423 = fmul double %416, %422
  %424 = load ptr, ptr %23, align 8, !tbaa !5
  %425 = load i32, ptr %44, align 4, !tbaa !9
  %426 = add nsw i32 %425, 1
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds double, ptr %424, i64 %427
  store double %423, ptr %428, align 8, !tbaa !11
  %429 = load i32, ptr %50, align 4, !tbaa !9
  %430 = icmp ne i32 %429, 0
  br i1 %430, label %431, label %445

431:                                              ; preds = %390
  %432 = load double, ptr %48, align 8, !tbaa !11
  %433 = load ptr, ptr %31, align 8, !tbaa !5
  %434 = load i32, ptr %44, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds double, ptr %433, i64 %435
  store double %432, ptr %436, align 8, !tbaa !11
  %437 = load double, ptr %49, align 8, !tbaa !11
  %438 = load ptr, ptr %31, align 8, !tbaa !5
  %439 = load ptr, ptr %19, align 8, !tbaa !5
  %440 = load i32, ptr %439, align 4, !tbaa !9
  %441 = load i32, ptr %44, align 4, !tbaa !9
  %442 = add nsw i32 %440, %441
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds double, ptr %438, i64 %443
  store double %437, ptr %444, align 8, !tbaa !11
  br label %445

445:                                              ; preds = %431, %390
  br label %446

446:                                              ; preds = %445
  %447 = load i32, ptr %44, align 4, !tbaa !9
  %448 = add nsw i32 %447, 1
  store i32 %448, ptr %44, align 4, !tbaa !9
  br label %386, !llvm.loop !15

449:                                              ; preds = %386
  %450 = load i32, ptr %43, align 4, !tbaa !9
  %451 = icmp eq i32 %450, 1
  br i1 %451, label %452, label %488

452:                                              ; preds = %449
  %453 = load ptr, ptr %23, align 8, !tbaa !5
  %454 = load ptr, ptr %19, align 8, !tbaa !5
  %455 = load i32, ptr %454, align 4, !tbaa !9
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %453, i64 %456
  %458 = load ptr, ptr %24, align 8, !tbaa !5
  %459 = load ptr, ptr %19, align 8, !tbaa !5
  %460 = load i32, ptr %459, align 4, !tbaa !9
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds double, ptr %458, i64 %461
  call void @dlartg_(ptr noundef %457, ptr noundef %462, ptr noundef %48, ptr noundef %49, ptr noundef %46)
  %463 = load double, ptr %46, align 8, !tbaa !11
  %464 = load ptr, ptr %23, align 8, !tbaa !5
  %465 = load ptr, ptr %19, align 8, !tbaa !5
  %466 = load i32, ptr %465, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds double, ptr %464, i64 %467
  store double %463, ptr %468, align 8, !tbaa !11
  %469 = load i32, ptr %50, align 4, !tbaa !9
  %470 = icmp ne i32 %469, 0
  br i1 %470, label %471, label %487

471:                                              ; preds = %452
  %472 = load double, ptr %48, align 8, !tbaa !11
  %473 = load ptr, ptr %31, align 8, !tbaa !5
  %474 = load ptr, ptr %19, align 8, !tbaa !5
  %475 = load i32, ptr %474, align 4, !tbaa !9
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds double, ptr %473, i64 %476
  store double %472, ptr %477, align 8, !tbaa !11
  %478 = load double, ptr %49, align 8, !tbaa !11
  %479 = load ptr, ptr %31, align 8, !tbaa !5
  %480 = load ptr, ptr %19, align 8, !tbaa !5
  %481 = load i32, ptr %480, align 4, !tbaa !9
  %482 = load ptr, ptr %19, align 8, !tbaa !5
  %483 = load i32, ptr %482, align 4, !tbaa !9
  %484 = add nsw i32 %481, %483
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds double, ptr %479, i64 %485
  store double %478, ptr %486, align 8, !tbaa !11
  br label %487

487:                                              ; preds = %471, %452
  br label %488

488:                                              ; preds = %487, %449
  %489 = load ptr, ptr %21, align 8, !tbaa !5
  %490 = load i32, ptr %489, align 4, !tbaa !9
  %491 = icmp sgt i32 %490, 0
  br i1 %491, label %492, label %523

492:                                              ; preds = %488
  %493 = load i32, ptr %43, align 4, !tbaa !9
  %494 = icmp eq i32 %493, 0
  br i1 %494, label %495, label %509

495:                                              ; preds = %492
  %496 = load ptr, ptr %21, align 8, !tbaa !5
  %497 = load ptr, ptr %19, align 8, !tbaa !5
  %498 = load ptr, ptr %31, align 8, !tbaa !5
  %499 = getelementptr inbounds double, ptr %498, i64 1
  %500 = load ptr, ptr %31, align 8, !tbaa !5
  %501 = load i32, ptr %51, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds double, ptr %500, i64 %502
  %504 = load ptr, ptr %27, align 8, !tbaa !5
  %505 = load i32, ptr %36, align 4, !tbaa !9
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %504, i64 %506
  %508 = load ptr, ptr %28, align 8, !tbaa !5
  call void @dlasr_(ptr noundef @.str.5, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %496, ptr noundef %497, ptr noundef %499, ptr noundef %503, ptr noundef %507, ptr noundef %508)
  br label %522

509:                                              ; preds = %492
  %510 = load ptr, ptr %21, align 8, !tbaa !5
  %511 = load ptr, ptr %31, align 8, !tbaa !5
  %512 = getelementptr inbounds double, ptr %511, i64 1
  %513 = load ptr, ptr %31, align 8, !tbaa !5
  %514 = load i32, ptr %51, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds double, ptr %513, i64 %515
  %517 = load ptr, ptr %27, align 8, !tbaa !5
  %518 = load i32, ptr %36, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds double, ptr %517, i64 %519
  %521 = load ptr, ptr %28, align 8, !tbaa !5
  call void @dlasr_(ptr noundef @.str.5, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %510, ptr noundef %51, ptr noundef %512, ptr noundef %516, ptr noundef %520, ptr noundef %521)
  br label %522

522:                                              ; preds = %509, %495
  br label %523

523:                                              ; preds = %522, %488
  %524 = load ptr, ptr %22, align 8, !tbaa !5
  %525 = load i32, ptr %524, align 4, !tbaa !9
  %526 = icmp sgt i32 %525, 0
  br i1 %526, label %527, label %558

527:                                              ; preds = %523
  %528 = load i32, ptr %43, align 4, !tbaa !9
  %529 = icmp eq i32 %528, 0
  br i1 %529, label %530, label %544

530:                                              ; preds = %527
  %531 = load ptr, ptr %19, align 8, !tbaa !5
  %532 = load ptr, ptr %22, align 8, !tbaa !5
  %533 = load ptr, ptr %31, align 8, !tbaa !5
  %534 = getelementptr inbounds double, ptr %533, i64 1
  %535 = load ptr, ptr %31, align 8, !tbaa !5
  %536 = load i32, ptr %51, align 4, !tbaa !9
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds double, ptr %535, i64 %537
  %539 = load ptr, ptr %29, align 8, !tbaa !5
  %540 = load i32, ptr %34, align 4, !tbaa !9
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds double, ptr %539, i64 %541
  %543 = load ptr, ptr %30, align 8, !tbaa !5
  call void @dlasr_(ptr noundef @.str.1, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %531, ptr noundef %532, ptr noundef %534, ptr noundef %538, ptr noundef %542, ptr noundef %543)
  br label %557

544:                                              ; preds = %527
  %545 = load ptr, ptr %22, align 8, !tbaa !5
  %546 = load ptr, ptr %31, align 8, !tbaa !5
  %547 = getelementptr inbounds double, ptr %546, i64 1
  %548 = load ptr, ptr %31, align 8, !tbaa !5
  %549 = load i32, ptr %51, align 4, !tbaa !9
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds double, ptr %548, i64 %550
  %552 = load ptr, ptr %29, align 8, !tbaa !5
  %553 = load i32, ptr %34, align 4, !tbaa !9
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds double, ptr %552, i64 %554
  %556 = load ptr, ptr %30, align 8, !tbaa !5
  call void @dlasr_(ptr noundef @.str.1, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %51, ptr noundef %545, ptr noundef %547, ptr noundef %551, ptr noundef %555, ptr noundef %556)
  br label %557

557:                                              ; preds = %544, %530
  br label %558

558:                                              ; preds = %557, %523
  br label %559

559:                                              ; preds = %558, %379
  %560 = load ptr, ptr %19, align 8, !tbaa !5
  %561 = load ptr, ptr %20, align 8, !tbaa !5
  %562 = load ptr, ptr %21, align 8, !tbaa !5
  %563 = load ptr, ptr %22, align 8, !tbaa !5
  %564 = load ptr, ptr %23, align 8, !tbaa !5
  %565 = getelementptr inbounds double, ptr %564, i64 1
  %566 = load ptr, ptr %24, align 8, !tbaa !5
  %567 = getelementptr inbounds double, ptr %566, i64 1
  %568 = load ptr, ptr %25, align 8, !tbaa !5
  %569 = load i32, ptr %38, align 4, !tbaa !9
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds double, ptr %568, i64 %570
  %572 = load ptr, ptr %26, align 8, !tbaa !5
  %573 = load ptr, ptr %27, align 8, !tbaa !5
  %574 = load i32, ptr %36, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds double, ptr %573, i64 %575
  %577 = load ptr, ptr %28, align 8, !tbaa !5
  %578 = load ptr, ptr %29, align 8, !tbaa !5
  %579 = load i32, ptr %34, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds double, ptr %578, i64 %580
  %582 = load ptr, ptr %30, align 8, !tbaa !5
  %583 = load ptr, ptr %31, align 8, !tbaa !5
  %584 = getelementptr inbounds double, ptr %583, i64 1
  %585 = load ptr, ptr %32, align 8, !tbaa !5
  call void @dbdsqr_(ptr noundef @.str, ptr noundef %560, ptr noundef %561, ptr noundef %562, ptr noundef %563, ptr noundef %565, ptr noundef %567, ptr noundef %571, ptr noundef %572, ptr noundef %576, ptr noundef %577, ptr noundef %581, ptr noundef %582, ptr noundef %584, ptr noundef %585)
  %586 = load ptr, ptr %19, align 8, !tbaa !5
  %587 = load i32, ptr %586, align 4, !tbaa !9
  store i32 %587, ptr %39, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %588

588:                                              ; preds = %706, %559
  %589 = load i32, ptr %44, align 4, !tbaa !9
  %590 = load i32, ptr %39, align 4, !tbaa !9
  %591 = icmp sle i32 %589, %590
  br i1 %591, label %592, label %709

592:                                              ; preds = %588
  %593 = load i32, ptr %44, align 4, !tbaa !9
  store i32 %593, ptr %41, align 4, !tbaa !9
  %594 = load ptr, ptr %23, align 8, !tbaa !5
  %595 = load i32, ptr %44, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds double, ptr %594, i64 %596
  %598 = load double, ptr %597, align 8, !tbaa !11
  store double %598, ptr %42, align 8, !tbaa !11
  %599 = load ptr, ptr %19, align 8, !tbaa !5
  %600 = load i32, ptr %599, align 4, !tbaa !9
  store i32 %600, ptr %40, align 4, !tbaa !9
  %601 = load i32, ptr %44, align 4, !tbaa !9
  %602 = add nsw i32 %601, 1
  store i32 %602, ptr %45, align 4, !tbaa !9
  br label %603

603:                                              ; preds = %623, %592
  %604 = load i32, ptr %45, align 4, !tbaa !9
  %605 = load i32, ptr %40, align 4, !tbaa !9
  %606 = icmp sle i32 %604, %605
  br i1 %606, label %607, label %626

607:                                              ; preds = %603
  %608 = load ptr, ptr %23, align 8, !tbaa !5
  %609 = load i32, ptr %45, align 4, !tbaa !9
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds double, ptr %608, i64 %610
  %612 = load double, ptr %611, align 8, !tbaa !11
  %613 = load double, ptr %42, align 8, !tbaa !11
  %614 = fcmp olt double %612, %613
  br i1 %614, label %615, label %622

615:                                              ; preds = %607
  %616 = load i32, ptr %45, align 4, !tbaa !9
  store i32 %616, ptr %41, align 4, !tbaa !9
  %617 = load ptr, ptr %23, align 8, !tbaa !5
  %618 = load i32, ptr %45, align 4, !tbaa !9
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds double, ptr %617, i64 %619
  %621 = load double, ptr %620, align 8, !tbaa !11
  store double %621, ptr %42, align 8, !tbaa !11
  br label %622

622:                                              ; preds = %615, %607
  br label %623

623:                                              ; preds = %622
  %624 = load i32, ptr %45, align 4, !tbaa !9
  %625 = add nsw i32 %624, 1
  store i32 %625, ptr %45, align 4, !tbaa !9
  br label %603, !llvm.loop !16

626:                                              ; preds = %603
  %627 = load i32, ptr %41, align 4, !tbaa !9
  %628 = load i32, ptr %44, align 4, !tbaa !9
  %629 = icmp ne i32 %627, %628
  br i1 %629, label %630, label %705

630:                                              ; preds = %626
  %631 = load ptr, ptr %23, align 8, !tbaa !5
  %632 = load i32, ptr %44, align 4, !tbaa !9
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds double, ptr %631, i64 %633
  %635 = load double, ptr %634, align 8, !tbaa !11
  %636 = load ptr, ptr %23, align 8, !tbaa !5
  %637 = load i32, ptr %41, align 4, !tbaa !9
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds double, ptr %636, i64 %638
  store double %635, ptr %639, align 8, !tbaa !11
  %640 = load double, ptr %42, align 8, !tbaa !11
  %641 = load ptr, ptr %23, align 8, !tbaa !5
  %642 = load i32, ptr %44, align 4, !tbaa !9
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds double, ptr %641, i64 %643
  store double %640, ptr %644, align 8, !tbaa !11
  %645 = load ptr, ptr %20, align 8, !tbaa !5
  %646 = load i32, ptr %645, align 4, !tbaa !9
  %647 = icmp sgt i32 %646, 0
  br i1 %647, label %648, label %664

648:                                              ; preds = %630
  %649 = load ptr, ptr %20, align 8, !tbaa !5
  %650 = load ptr, ptr %25, align 8, !tbaa !5
  %651 = load i32, ptr %41, align 4, !tbaa !9
  %652 = load i32, ptr %37, align 4, !tbaa !9
  %653 = add nsw i32 %651, %652
  %654 = sext i32 %653 to i64
  %655 = getelementptr inbounds double, ptr %650, i64 %654
  %656 = load ptr, ptr %26, align 8, !tbaa !5
  %657 = load ptr, ptr %25, align 8, !tbaa !5
  %658 = load i32, ptr %44, align 4, !tbaa !9
  %659 = load i32, ptr %37, align 4, !tbaa !9
  %660 = add nsw i32 %658, %659
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds double, ptr %657, i64 %661
  %663 = load ptr, ptr %26, align 8, !tbaa !5
  call void @dswap_(ptr noundef %649, ptr noundef %655, ptr noundef %656, ptr noundef %662, ptr noundef %663)
  br label %664

664:                                              ; preds = %648, %630
  %665 = load ptr, ptr %21, align 8, !tbaa !5
  %666 = load i32, ptr %665, align 4, !tbaa !9
  %667 = icmp sgt i32 %666, 0
  br i1 %667, label %668, label %684

668:                                              ; preds = %664
  %669 = load ptr, ptr %21, align 8, !tbaa !5
  %670 = load ptr, ptr %27, align 8, !tbaa !5
  %671 = load i32, ptr %41, align 4, !tbaa !9
  %672 = load i32, ptr %35, align 4, !tbaa !9
  %673 = mul nsw i32 %671, %672
  %674 = add nsw i32 %673, 1
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds double, ptr %670, i64 %675
  %677 = load ptr, ptr %27, align 8, !tbaa !5
  %678 = load i32, ptr %44, align 4, !tbaa !9
  %679 = load i32, ptr %35, align 4, !tbaa !9
  %680 = mul nsw i32 %678, %679
  %681 = add nsw i32 %680, 1
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds double, ptr %677, i64 %682
  call void @dswap_(ptr noundef %669, ptr noundef %676, ptr noundef @c__1, ptr noundef %683, ptr noundef @c__1)
  br label %684

684:                                              ; preds = %668, %664
  %685 = load ptr, ptr %22, align 8, !tbaa !5
  %686 = load i32, ptr %685, align 4, !tbaa !9
  %687 = icmp sgt i32 %686, 0
  br i1 %687, label %688, label %704

688:                                              ; preds = %684
  %689 = load ptr, ptr %22, align 8, !tbaa !5
  %690 = load ptr, ptr %29, align 8, !tbaa !5
  %691 = load i32, ptr %41, align 4, !tbaa !9
  %692 = load i32, ptr %33, align 4, !tbaa !9
  %693 = add nsw i32 %691, %692
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds double, ptr %690, i64 %694
  %696 = load ptr, ptr %30, align 8, !tbaa !5
  %697 = load ptr, ptr %29, align 8, !tbaa !5
  %698 = load i32, ptr %44, align 4, !tbaa !9
  %699 = load i32, ptr %33, align 4, !tbaa !9
  %700 = add nsw i32 %698, %699
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds double, ptr %697, i64 %701
  %703 = load ptr, ptr %30, align 8, !tbaa !5
  call void @dswap_(ptr noundef %689, ptr noundef %695, ptr noundef %696, ptr noundef %702, ptr noundef %703)
  br label %704

704:                                              ; preds = %688, %684
  br label %705

705:                                              ; preds = %704, %626
  br label %706

706:                                              ; preds = %705
  %707 = load i32, ptr %44, align 4, !tbaa !9
  %708 = add nsw i32 %707, 1
  store i32 %708, ptr %44, align 4, !tbaa !9
  br label %588, !llvm.loop !17

709:                                              ; preds = %588
  store i32 1, ptr %52, align 4
  br label %710

710:                                              ; preds = %709, %228, %219
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  ret void
}

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

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

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

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

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

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

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

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

; Function Attrs: nounwind uwtable
define dso_local void @dlasdq_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) local_unnamed_addr #0 {
  %17 = alloca i32, align 4
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #4
  %22 = getelementptr inbounds i8, ptr %6, i64 -8
  %23 = getelementptr inbounds i8, ptr %7, i64 -8
  %24 = load i32, ptr %9, align 4, !tbaa !5
  %narrow = xor i32 %24, -1
  %25 = sext i32 %narrow to i64
  %26 = getelementptr inbounds double, ptr %8, i64 %25
  %27 = load i32, ptr %11, align 4, !tbaa !5
  %narrow261 = xor i32 %27, -1
  %28 = sext i32 %narrow261 to i64
  %29 = getelementptr inbounds double, ptr %10, i64 %28
  %30 = load i32, ptr %13, align 4, !tbaa !5
  %narrow262 = xor i32 %30, -1
  %31 = sext i32 %narrow262 to i64
  %32 = getelementptr inbounds double, ptr %12, i64 %31
  %33 = getelementptr inbounds i8, ptr %14, i64 -8
  store i32 0, ptr %15, align 4, !tbaa !5
  %34 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #4
  %.not = icmp ne i32 %34, 0
  %35 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #4
  %.not257 = icmp eq i32 %35, 0
  %not..not257 = xor i1 %.not257, true
  %36 = select i1 %not..not257, i1 true, i1 %.not
  br i1 %36, label %37, label %.thread271.sink.split

37:                                               ; preds = %16
  %38 = load i32, ptr %1, align 4, !tbaa !5
  %or.cond266 = icmp ugt i32 %38, 1
  br i1 %or.cond266, label %.thread271.sink.split, label %39

39:                                               ; preds = %37
  %40 = load i32, ptr %2, align 4, !tbaa !5
  %41 = icmp slt i32 %40, 0
  br i1 %41, label %.thread271.sink.split, label %42

42:                                               ; preds = %39
  %43 = load i32, ptr %3, align 4, !tbaa !5
  %44 = icmp slt i32 %43, 0
  br i1 %44, label %.thread271.sink.split, label %45

45:                                               ; preds = %42
  %46 = load i32, ptr %4, align 4, !tbaa !5
  %47 = icmp slt i32 %46, 0
  br i1 %47, label %.thread271.sink.split, label %48

48:                                               ; preds = %45
  %49 = load i32, ptr %5, align 4, !tbaa !5
  %50 = icmp slt i32 %49, 0
  br i1 %50, label %.thread271.sink.split, label %51

51:                                               ; preds = %48
  %52 = icmp eq i32 %43, 0
  %53 = load i32, ptr %9, align 4, !tbaa !5
  br i1 %52, label %54, label %56

54:                                               ; preds = %51
  %55 = icmp slt i32 %53, 1
  br i1 %55, label %.thread271.sink.split, label %58

56:                                               ; preds = %51
  %spec.select267 = tail call i32 @llvm.umax.i32(i32 %40, i32 1)
  %57 = icmp slt i32 %53, %spec.select267
  br i1 %57, label %.thread271.sink.split, label %58

58:                                               ; preds = %54, %56
  %59 = load i32, ptr %11, align 4, !tbaa !5
  %spec.select268 = tail call i32 @llvm.umax.i32(i32 %46, i32 1)
  %60 = icmp slt i32 %59, %spec.select268
  br i1 %60, label %.thread271.sink.split, label %61

61:                                               ; preds = %58
  %62 = icmp eq i32 %49, 0
  %63 = load i32, ptr %13, align 4, !tbaa !5
  br i1 %62, label %64, label %66

64:                                               ; preds = %61
  %65 = icmp slt i32 %63, 1
  br i1 %65, label %.thread271.sink.split, label %68

66:                                               ; preds = %61
  %spec.select269 = tail call i32 @llvm.umax.i32(i32 %40, i32 1)
  %67 = icmp slt i32 %63, %spec.select269
  br i1 %67, label %.thread271.sink.split, label %68

68:                                               ; preds = %64, %66
  %.pr = load i32, ptr %15, align 4, !tbaa !5
  %.not258 = icmp eq i32 %.pr, 0
  br i1 %.not258, label %72, label %.thread271

.thread271.sink.split:                            ; preds = %64, %66, %58, %54, %56, %48, %45, %42, %39, %37, %16
  %.sink = phi i32 [ -1, %16 ], [ -2, %37 ], [ -3, %39 ], [ -4, %42 ], [ -5, %45 ], [ -6, %48 ], [ -10, %56 ], [ -10, %54 ], [ -12, %58 ], [ -14, %66 ], [ -14, %64 ]
  store i32 %.sink, ptr %15, align 4, !tbaa !5
  br label %.thread271

.thread271:                                       ; preds = %.thread271.sink.split, %68
  %69 = phi i32 [ %.pr, %68 ], [ %.sink, %.thread271.sink.split ]
  %70 = sub nsw i32 0, %69
  store i32 %70, ptr %17, align 4, !tbaa !5
  %71 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, i32 noundef 6) #4
  br label %.loopexit

72:                                               ; preds = %68
  %73 = icmp eq i32 %40, 0
  br i1 %73, label %.loopexit, label %74

74:                                               ; preds = %72
  %75 = or i32 %43, %46
  %76 = or i32 %75, %49
  %.fr337 = freeze i32 %76
  %spec.select.not = icmp eq i32 %.fr337, 0
  %77 = add nuw nsw i32 %40, 1
  store i32 %77, ptr %21, align 4, !tbaa !5
  %78 = select i1 %.not257, i1 %.not, i1 false
  %79 = icmp eq i32 %38, 1
  %or.cond = and i1 %78, %79
  br i1 %or.cond, label %80, label %132

80:                                               ; preds = %74
  %.not259281 = icmp eq i32 %40, 1
  br i1 %.not259281, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %80
  %81 = add nsw i32 %40, -1
  %82 = sext i32 %81 to i64
  br i1 %spec.select.not, label %.lr.ph.split, label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.lr.ph.split.us
  %indvars.iv305 = phi i64 [ %indvars.iv.next306, %.lr.ph.split.us ], [ 1, %.lr.ph ]
  %83 = getelementptr inbounds double, ptr %22, i64 %indvars.iv305
  %84 = getelementptr inbounds double, ptr %23, i64 %indvars.iv305
  call void @dlartg_(ptr noundef nonnull %83, ptr noundef nonnull %84, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18) #4
  %85 = load double, ptr %18, align 8, !tbaa !9
  store double %85, ptr %83, align 8, !tbaa !9
  %86 = load double, ptr %20, align 8, !tbaa !9
  %indvars.iv.next306 = add nuw nsw i64 %indvars.iv305, 1
  %87 = getelementptr double, ptr %6, i64 %indvars.iv305
  %88 = load double, ptr %87, align 8, !tbaa !9
  %89 = fmul double %86, %88
  store double %89, ptr %84, align 8, !tbaa !9
  %90 = load double, ptr %19, align 8, !tbaa !9
  %91 = load double, ptr %87, align 8, !tbaa !9
  %92 = fmul double %90, %91
  store double %92, ptr %87, align 8, !tbaa !9
  %93 = getelementptr inbounds double, ptr %33, i64 %indvars.iv305
  store double %90, ptr %93, align 8, !tbaa !9
  %94 = load i32, ptr %2, align 4, !tbaa !5
  %95 = trunc nuw nsw i64 %indvars.iv305 to i32
  %96 = add nsw i32 %94, %95
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds double, ptr %33, i64 %97
  store double %86, ptr %98, align 8, !tbaa !9
  %.not259.us.not = icmp slt i64 %indvars.iv305, %82
  br i1 %.not259.us.not, label %.lr.ph.split.us, label %._crit_edge, !llvm.loop !11

.lr.ph.split:                                     ; preds = %.lr.ph, %.lr.ph.split
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph.split ], [ 1, %.lr.ph ]
  %99 = getelementptr inbounds double, ptr %22, i64 %indvars.iv
  %100 = getelementptr inbounds double, ptr %23, i64 %indvars.iv
  call void @dlartg_(ptr noundef nonnull %99, ptr noundef nonnull %100, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18) #4
  %101 = load double, ptr %18, align 8, !tbaa !9
  store double %101, ptr %99, align 8, !tbaa !9
  %102 = load double, ptr %20, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %103 = getelementptr double, ptr %6, i64 %indvars.iv
  %104 = load double, ptr %103, align 8, !tbaa !9
  %105 = fmul double %102, %104
  store double %105, ptr %100, align 8, !tbaa !9
  %106 = load double, ptr %19, align 8, !tbaa !9
  %107 = load double, ptr %103, align 8, !tbaa !9
  %108 = fmul double %106, %107
  store double %108, ptr %103, align 8, !tbaa !9
  %.not259.not = icmp slt i64 %indvars.iv, %82
  br i1 %.not259.not, label %.lr.ph.split, label %._crit_edge.loopexit303, !llvm.loop !11

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

._crit_edge:                                      ; preds = %.lr.ph.split.us, %._crit_edge.loopexit303, %80
  %109 = phi i32 [ %.pre, %._crit_edge.loopexit303 ], [ 1, %80 ], [ %94, %.lr.ph.split.us ]
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds double, ptr %22, i64 %110
  %112 = getelementptr inbounds double, ptr %23, i64 %110
  call void @dlartg_(ptr noundef nonnull %111, ptr noundef nonnull %112, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18) #4
  %113 = load double, ptr %18, align 8, !tbaa !9
  %114 = load i32, ptr %2, align 4, !tbaa !5
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds double, ptr %22, i64 %115
  store double %113, ptr %116, align 8, !tbaa !9
  %117 = getelementptr inbounds double, ptr %23, i64 %115
  store double 0.000000e+00, ptr %117, align 8, !tbaa !9
  br i1 %spec.select.not, label %125, label %118

118:                                              ; preds = %._crit_edge
  %119 = load double, ptr %19, align 8, !tbaa !9
  %120 = getelementptr inbounds double, ptr %33, i64 %115
  store double %119, ptr %120, align 8, !tbaa !9
  %121 = load double, ptr %20, align 8, !tbaa !9
  %122 = shl nsw i32 %114, 1
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %33, i64 %123
  store double %121, ptr %124, align 8, !tbaa !9
  br label %125

125:                                              ; preds = %118, %._crit_edge
  %126 = load i32, ptr %3, align 4, !tbaa !5
  %127 = icmp sgt i32 %126, 0
  br i1 %127, label %128, label %.thread274

128:                                              ; preds = %125
  %129 = load i32, ptr %21, align 4, !tbaa !5
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds double, ptr %33, i64 %130
  call void @dlasr_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %21, ptr noundef nonnull %3, ptr noundef %14, ptr noundef nonnull %131, ptr noundef %8, ptr noundef nonnull %9) #4
  %.pre322 = load i32, ptr %2, align 4, !tbaa !5
  br label %.thread274

132:                                              ; preds = %74
  br i1 %.not257, label %197, label %.thread274

.thread274:                                       ; preds = %125, %128, %132
  %133 = phi i32 [ %40, %132 ], [ %.pre322, %128 ], [ %114, %125 ]
  %.0245277 = phi i32 [ %38, %132 ], [ 0, %128 ], [ 0, %125 ]
  %.not260283 = icmp slt i32 %133, 2
  br i1 %.not260283, label %._crit_edge286, label %.lr.ph285

.lr.ph285:                                        ; preds = %.thread274
  %134 = add nsw i32 %133, -1
  %135 = sext i32 %134 to i64
  br i1 %spec.select.not, label %.lr.ph285.split, label %.lr.ph285.split.us

.lr.ph285.split.us:                               ; preds = %.lr.ph285, %.lr.ph285.split.us
  %indvars.iv311 = phi i64 [ %indvars.iv.next312, %.lr.ph285.split.us ], [ 1, %.lr.ph285 ]
  %136 = getelementptr inbounds double, ptr %22, i64 %indvars.iv311
  %137 = getelementptr inbounds double, ptr %23, i64 %indvars.iv311
  call void @dlartg_(ptr noundef nonnull %136, ptr noundef nonnull %137, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18) #4
  %138 = load double, ptr %18, align 8, !tbaa !9
  store double %138, ptr %136, align 8, !tbaa !9
  %139 = load double, ptr %20, align 8, !tbaa !9
  %indvars.iv.next312 = add nuw nsw i64 %indvars.iv311, 1
  %140 = getelementptr double, ptr %6, i64 %indvars.iv311
  %141 = load double, ptr %140, align 8, !tbaa !9
  %142 = fmul double %139, %141
  store double %142, ptr %137, align 8, !tbaa !9
  %143 = load double, ptr %19, align 8, !tbaa !9
  %144 = load double, ptr %140, align 8, !tbaa !9
  %145 = fmul double %143, %144
  store double %145, ptr %140, align 8, !tbaa !9
  %146 = getelementptr inbounds double, ptr %33, i64 %indvars.iv311
  store double %143, ptr %146, align 8, !tbaa !9
  %147 = load i32, ptr %2, align 4, !tbaa !5
  %148 = trunc nuw nsw i64 %indvars.iv311 to i32
  %149 = add nsw i32 %147, %148
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds double, ptr %33, i64 %150
  store double %139, ptr %151, align 8, !tbaa !9
  %.not260.us.not = icmp slt i64 %indvars.iv311, %135
  br i1 %.not260.us.not, label %.lr.ph285.split.us, label %._crit_edge286, !llvm.loop !13

.lr.ph285.split:                                  ; preds = %.lr.ph285, %.lr.ph285.split
  %indvars.iv308 = phi i64 [ %indvars.iv.next309, %.lr.ph285.split ], [ 1, %.lr.ph285 ]
  %152 = getelementptr inbounds double, ptr %22, i64 %indvars.iv308
  %153 = getelementptr inbounds double, ptr %23, i64 %indvars.iv308
  call void @dlartg_(ptr noundef nonnull %152, ptr noundef nonnull %153, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18) #4
  %154 = load double, ptr %18, align 8, !tbaa !9
  store double %154, ptr %152, align 8, !tbaa !9
  %155 = load double, ptr %20, align 8, !tbaa !9
  %indvars.iv.next309 = add nuw nsw i64 %indvars.iv308, 1
  %156 = getelementptr double, ptr %6, i64 %indvars.iv308
  %157 = load double, ptr %156, align 8, !tbaa !9
  %158 = fmul double %155, %157
  store double %158, ptr %153, align 8, !tbaa !9
  %159 = load double, ptr %19, align 8, !tbaa !9
  %160 = load double, ptr %156, align 8, !tbaa !9
  %161 = fmul double %159, %160
  store double %161, ptr %156, align 8, !tbaa !9
  %.not260.not = icmp slt i64 %indvars.iv308, %135
  br i1 %.not260.not, label %.lr.ph285.split, label %._crit_edge286, !llvm.loop !13

._crit_edge286:                                   ; preds = %.lr.ph285.split.us, %.lr.ph285.split, %.thread274
  %162 = icmp eq i32 %.0245277, 1
  br i1 %162, label %163, label %179

163:                                              ; preds = %._crit_edge286
  %164 = load i32, ptr %2, align 4, !tbaa !5
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds double, ptr %22, i64 %165
  %167 = getelementptr inbounds double, ptr %23, i64 %165
  call void @dlartg_(ptr noundef nonnull %166, ptr noundef nonnull %167, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %18) #4
  %168 = load double, ptr %18, align 8, !tbaa !9
  %169 = load i32, ptr %2, align 4, !tbaa !5
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds double, ptr %22, i64 %170
  store double %168, ptr %171, align 8, !tbaa !9
  br i1 %spec.select.not, label %179, label %172

172:                                              ; preds = %163
  %173 = load double, ptr %19, align 8, !tbaa !9
  %174 = getelementptr inbounds double, ptr %33, i64 %170
  store double %173, ptr %174, align 8, !tbaa !9
  %175 = load double, ptr %20, align 8, !tbaa !9
  %176 = shl nsw i32 %169, 1
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %33, i64 %177
  store double %175, ptr %178, align 8, !tbaa !9
  br label %179

179:                                              ; preds = %163, %172, %._crit_edge286
  %180 = load i32, ptr %4, align 4, !tbaa !5
  %181 = icmp sgt i32 %180, 0
  br i1 %181, label %182, label %188

182:                                              ; preds = %179
  %183 = icmp eq i32 %.0245277, 0
  %184 = load i32, ptr %21, align 4, !tbaa !5
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %33, i64 %185
  br i1 %183, label %.thread278, label %187

187:                                              ; preds = %182
  call void @dlasr_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %4, ptr noundef nonnull %21, ptr noundef %14, ptr noundef nonnull %186, ptr noundef %10, ptr noundef nonnull %11) #4
  br label %188

188:                                              ; preds = %187, %179
  %189 = load i32, ptr %5, align 4, !tbaa !5
  %190 = icmp sgt i32 %189, 0
  br i1 %190, label %193, label %197

.thread278:                                       ; preds = %182
  call void @dlasr_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %4, ptr noundef nonnull %2, ptr noundef %14, ptr noundef nonnull %186, ptr noundef %10, ptr noundef nonnull %11) #4
  %191 = load i32, ptr %5, align 4, !tbaa !5
  %192 = icmp sgt i32 %191, 0
  br i1 %192, label %.sink.split, label %197

193:                                              ; preds = %188
  %194 = icmp eq i32 %.0245277, 0
  %spec.select336 = select i1 %194, ptr %2, ptr %21
  br label %.sink.split

.sink.split:                                      ; preds = %.thread278, %193
  %.sink333 = phi ptr [ %spec.select336, %193 ], [ %2, %.thread278 ]
  %.pre324.sink = load i32, ptr %21, align 4, !tbaa !5
  %195 = sext i32 %.pre324.sink to i64
  %196 = getelementptr inbounds double, ptr %33, i64 %195
  call void @dlasr_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull %.sink333, ptr noundef nonnull %5, ptr noundef %14, ptr noundef nonnull %196, ptr noundef %12, ptr noundef nonnull %13) #4
  br label %197

197:                                              ; preds = %.sink.split, %.thread278, %188, %132
  call void @dbdsqr_(ptr noundef nonnull @.str, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %12, ptr noundef nonnull %13, ptr noundef %14, ptr noundef nonnull %15) #4
  %198 = load i32, ptr %2, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %29, i64 8
  %.not263298 = icmp slt i32 %198, 1
  br i1 %.not263298, label %.loopexit, label %.lr.ph301.preheader

.lr.ph301.preheader:                              ; preds = %197
  %199 = sext i32 %24 to i64
  %200 = sext i32 %27 to i64
  %201 = sext i32 %30 to i64
  %invariant.gep328 = getelementptr double, ptr %26, i64 %199
  %invariant.gep330 = getelementptr double, ptr %32, i64 %201
  %202 = zext nneg i32 %198 to i64
  br label %.lr.ph301

.lr.ph301:                                        ; preds = %.lr.ph301.preheader, %249
  %indvar = phi i32 [ 0, %.lr.ph301.preheader ], [ %indvar.next, %249 ]
  %indvars.iv319 = phi i64 [ 1, %.lr.ph301.preheader ], [ %indvars.iv.next320, %249 ]
  %indvars.iv314 = phi i64 [ 2, %.lr.ph301.preheader ], [ %indvars.iv.next315, %249 ]
  %203 = getelementptr inbounds double, ptr %22, i64 %indvars.iv319
  %204 = load double, ptr %203, align 8, !tbaa !9
  %205 = load i32, ptr %2, align 4, !tbaa !5
  %indvars.iv.next320 = add nuw nsw i64 %indvars.iv319, 1
  %206 = sext i32 %205 to i64
  %.not264288.not = icmp slt i64 %indvars.iv319, %206
  %207 = trunc nuw nsw i64 %indvars.iv319 to i32
  br i1 %.not264288.not, label %.lr.ph293.preheader, label %._crit_edge294

.lr.ph293.preheader:                              ; preds = %.lr.ph301
  %208 = add i32 %205, 1
  %reass.sub = sub i32 %205, %indvar
  %209 = sub i32 %indvar, %205
  %210 = and i32 %209, 1
  %lcmp.mod.not.not = icmp eq i32 %210, 0
  br i1 %lcmp.mod.not.not, label %.lr.ph293.prol, label %.lr.ph293.prol.loopexit

.lr.ph293.prol:                                   ; preds = %.lr.ph293.preheader
  %211 = getelementptr inbounds double, ptr %22, i64 %indvars.iv314
  %212 = load double, ptr %211, align 8, !tbaa !9
  %213 = fcmp olt double %212, %204
  %214 = trunc nuw i64 %indvars.iv314 to i32
  %.1249.prol = select i1 %213, i32 %214, i32 %207
  %.1247.prol = select i1 %213, double %212, double %204
  %indvars.iv.next317.prol = add nuw nsw i64 %indvars.iv314, 1
  br label %.lr.ph293.prol.loopexit

.lr.ph293.prol.loopexit:                          ; preds = %.lr.ph293.prol, %.lr.ph293.preheader
  %.1249.lcssa.unr = phi i32 [ poison, %.lr.ph293.preheader ], [ %.1249.prol, %.lr.ph293.prol ]
  %.1247.lcssa.unr = phi double [ poison, %.lr.ph293.preheader ], [ %.1247.prol, %.lr.ph293.prol ]
  %indvars.iv316.unr = phi i64 [ %indvars.iv314, %.lr.ph293.preheader ], [ %indvars.iv.next317.prol, %.lr.ph293.prol ]
  %.0246290.unr = phi double [ %204, %.lr.ph293.preheader ], [ %.1247.prol, %.lr.ph293.prol ]
  %.0248289.unr = phi i32 [ %207, %.lr.ph293.preheader ], [ %.1249.prol, %.lr.ph293.prol ]
  %215 = icmp eq i32 %reass.sub, 2
  br i1 %215, label %._crit_edge294, label %.lr.ph293

.lr.ph293:                                        ; preds = %.lr.ph293.prol.loopexit, %.lr.ph293
  %indvars.iv316 = phi i64 [ %indvars.iv.next317.1, %.lr.ph293 ], [ %indvars.iv316.unr, %.lr.ph293.prol.loopexit ]
  %.0246290 = phi double [ %.1247.1, %.lr.ph293 ], [ %.0246290.unr, %.lr.ph293.prol.loopexit ]
  %.0248289 = phi i32 [ %.1249.1, %.lr.ph293 ], [ %.0248289.unr, %.lr.ph293.prol.loopexit ]
  %216 = getelementptr inbounds double, ptr %22, i64 %indvars.iv316
  %217 = load double, ptr %216, align 8, !tbaa !9
  %218 = fcmp olt double %217, %.0246290
  %219 = trunc nuw i64 %indvars.iv316 to i32
  %.1249 = select i1 %218, i32 %219, i32 %.0248289
  %.1247 = select i1 %218, double %217, double %.0246290
  %220 = getelementptr double, ptr %6, i64 %indvars.iv316
  %221 = load double, ptr %220, align 8, !tbaa !9
  %222 = fcmp olt double %221, %.1247
  %223 = trunc i64 %indvars.iv316 to i32
  %224 = add i32 %223, 1
  %.1249.1 = select i1 %222, i32 %224, i32 %.1249
  %.1247.1 = select i1 %222, double %221, double %.1247
  %indvars.iv.next317.1 = add nuw nsw i64 %indvars.iv316, 2
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next317.1 to i32
  %exitcond.not.1 = icmp eq i32 %208, %lftr.wideiv.1
  br i1 %exitcond.not.1, label %._crit_edge294, label %.lr.ph293, !llvm.loop !14

._crit_edge294:                                   ; preds = %.lr.ph293.prol.loopexit, %.lr.ph293, %.lr.ph301
  %.0248.lcssa = phi i32 [ %207, %.lr.ph301 ], [ %.1249.lcssa.unr, %.lr.ph293.prol.loopexit ], [ %.1249.1, %.lr.ph293 ]
  %.0246.lcssa = phi double [ %204, %.lr.ph301 ], [ %.1247.lcssa.unr, %.lr.ph293.prol.loopexit ], [ %.1247.1, %.lr.ph293 ]
  %225 = zext i32 %.0248.lcssa to i64
  %.not265 = icmp eq i64 %indvars.iv319, %225
  br i1 %.not265, label %249, label %226

226:                                              ; preds = %._crit_edge294
  %227 = sext i32 %.0248.lcssa to i64
  %228 = getelementptr inbounds double, ptr %22, i64 %227
  store double %204, ptr %228, align 8, !tbaa !9
  store double %.0246.lcssa, ptr %203, align 8, !tbaa !9
  %229 = load i32, ptr %3, align 4, !tbaa !5
  %230 = icmp sgt i32 %229, 0
  br i1 %230, label %231, label %235

231:                                              ; preds = %226
  %232 = add nsw i32 %.0248.lcssa, %24
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds double, ptr %26, i64 %233
  %gep329 = getelementptr double, ptr %invariant.gep328, i64 %indvars.iv319
  call void @dswap_(ptr noundef nonnull %3, ptr noundef %234, ptr noundef nonnull %9, ptr noundef %gep329, ptr noundef nonnull %9) #4
  br label %235

235:                                              ; preds = %231, %226
  %236 = load i32, ptr %4, align 4, !tbaa !5
  %237 = icmp sgt i32 %236, 0
  br i1 %237, label %238, label %242

238:                                              ; preds = %235
  %239 = mul nsw i32 %.0248.lcssa, %27
  %240 = sext i32 %239 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %240
  %241 = mul nsw i64 %indvars.iv319, %200
  %gep297 = getelementptr double, ptr %invariant.gep, i64 %241
  call void @dswap_(ptr noundef nonnull %4, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef %gep297, ptr noundef nonnull @c__1) #4
  br label %242

242:                                              ; preds = %238, %235
  %243 = load i32, ptr %5, align 4, !tbaa !5
  %244 = icmp sgt i32 %243, 0
  br i1 %244, label %245, label %249

245:                                              ; preds = %242
  %246 = add nsw i32 %.0248.lcssa, %30
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds double, ptr %32, i64 %247
  %gep331 = getelementptr double, ptr %invariant.gep330, i64 %indvars.iv319
  call void @dswap_(ptr noundef nonnull %5, ptr noundef %248, ptr noundef nonnull %13, ptr noundef %gep331, ptr noundef nonnull %13) #4
  br label %249

249:                                              ; preds = %._crit_edge294, %245, %242
  %.not263.not = icmp ult i64 %indvars.iv319, %202
  %indvars.iv.next315 = add nuw nsw i64 %indvars.iv314, 1
  %indvar.next = add i32 %indvar, 1
  br i1 %.not263.not, label %.lr.ph301, label %.loopexit, !llvm.loop !15

.loopexit:                                        ; preds = %249, %197, %72, %.thread271
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #4
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

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


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