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

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

%struct.doublecomplex = type { double, double }

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

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

86:                                               ; preds = %14
  %87 = load ptr, ptr %16, align 8, !tbaa !5
  %88 = call i32 @lsame_(ptr noundef %87, ptr noundef @.str.1)
  %89 = icmp ne i32 %88, 0
  br i1 %89, label %96, label %90

90:                                               ; preds = %86
  %91 = load ptr, ptr %16, align 8, !tbaa !5
  %92 = call i32 @lsame_(ptr noundef %91, ptr noundef @.str.2)
  %93 = icmp ne i32 %92, 0
  br i1 %93, label %96, label %94

94:                                               ; preds = %90
  %95 = load ptr, ptr %27, align 8, !tbaa !5
  store i32 -1, ptr %95, align 4, !tbaa !9
  br label %158

96:                                               ; preds = %90, %86, %14
  %97 = load ptr, ptr %17, align 8, !tbaa !5
  %98 = load i32, ptr %97, align 4, !tbaa !9
  %99 = icmp slt i32 %98, 0
  br i1 %99, label %100, label %102

100:                                              ; preds = %96
  %101 = load ptr, ptr %27, align 8, !tbaa !5
  store i32 -2, ptr %101, align 4, !tbaa !9
  br label %157

102:                                              ; preds = %96
  %103 = load ptr, ptr %18, align 8, !tbaa !5
  %104 = load i32, ptr %103, align 4, !tbaa !9
  %105 = icmp slt i32 %104, 0
  br i1 %105, label %113, label %106

106:                                              ; preds = %102
  %107 = load ptr, ptr %18, align 8, !tbaa !5
  %108 = load i32, ptr %107, align 4, !tbaa !9
  %109 = load ptr, ptr %17, align 8, !tbaa !5
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = sub nsw i32 %110, 1
  %112 = icmp sgt i32 %108, %111
  br i1 %112, label %113, label %115

113:                                              ; preds = %106, %102
  %114 = load ptr, ptr %27, align 8, !tbaa !5
  store i32 -3, ptr %114, align 4, !tbaa !9
  br label %156

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

119:                                              ; preds = %115
  %120 = load ptr, ptr %19, align 8, !tbaa !5
  %121 = load i32, ptr %120, align 4, !tbaa !9
  %122 = load ptr, ptr %17, align 8, !tbaa !5
  %123 = load i32, ptr %122, align 4, !tbaa !9
  %124 = sub nsw i32 %123, 1
  %125 = icmp sgt i32 %121, %124
  br i1 %125, label %126, label %128

126:                                              ; preds = %119, %115
  %127 = load ptr, ptr %27, align 8, !tbaa !5
  store i32 -4, ptr %127, align 4, !tbaa !9
  br label %155

128:                                              ; preds = %119
  %129 = load ptr, ptr %21, align 8, !tbaa !5
  %130 = load i32, ptr %129, align 4, !tbaa !9
  %131 = load ptr, ptr %18, align 8, !tbaa !5
  %132 = load i32, ptr %131, align 4, !tbaa !9
  %133 = load ptr, ptr %19, align 8, !tbaa !5
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = add nsw i32 %132, %134
  %136 = add nsw i32 %135, 1
  %137 = icmp slt i32 %130, %136
  br i1 %137, label %138, label %140

138:                                              ; preds = %128
  %139 = load ptr, ptr %27, align 8, !tbaa !5
  store i32 -6, ptr %139, align 4, !tbaa !9
  br label %154

140:                                              ; preds = %128
  %141 = load ptr, ptr %23, align 8, !tbaa !5
  %142 = load i32, ptr %141, align 4, !tbaa !9
  %143 = load ptr, ptr %18, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 4, !tbaa !9
  %145 = shl i32 %144, 1
  %146 = load ptr, ptr %19, align 8, !tbaa !5
  %147 = load i32, ptr %146, align 4, !tbaa !9
  %148 = add nsw i32 %145, %147
  %149 = add nsw i32 %148, 1
  %150 = icmp slt i32 %142, %149
  br i1 %150, label %151, label %153

151:                                              ; preds = %140
  %152 = load ptr, ptr %27, align 8, !tbaa !5
  store i32 -8, ptr %152, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %151, %140
  br label %154

154:                                              ; preds = %153, %138
  br label %155

155:                                              ; preds = %154, %126
  br label %156

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

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

158:                                              ; preds = %157, %94
  %159 = load ptr, ptr %27, align 8, !tbaa !5
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = icmp ne i32 %160, 0
  br i1 %161, label %162, label %168

162:                                              ; preds = %158
  %163 = load ptr, ptr %27, align 8, !tbaa !5
  %164 = load i32, ptr %163, align 4, !tbaa !9
  %165 = sub nsw i32 0, %164
  store i32 %165, ptr %34, align 4, !tbaa !9
  %166 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %34, i32 noundef 13)
  %167 = load double, ptr %38, align 8, !tbaa !11
  store double %167, ptr %15, align 8
  store i32 1, ptr %52, align 4
  br label %929

168:                                              ; preds = %158
  store double 0.000000e+00, ptr %46, align 8, !tbaa !11
  %169 = load ptr, ptr %19, align 8, !tbaa !5
  %170 = load i32, ptr %169, align 4, !tbaa !9
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %47, align 4, !tbaa !9
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = load i32, ptr %172, align 4, !tbaa !9
  %174 = add nsw i32 %173, 1
  store i32 %174, ptr %48, align 4, !tbaa !9
  %175 = load i32, ptr %51, align 4, !tbaa !9
  %176 = icmp ne i32 %175, 0
  br i1 %176, label %177, label %387

177:                                              ; preds = %168
  %178 = load ptr, ptr %17, align 8, !tbaa !5
  %179 = load i32, ptr %178, align 4, !tbaa !9
  store i32 %179, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %383, %177
  %181 = load i32, ptr %43, align 4, !tbaa !9
  %182 = load i32, ptr %34, align 4, !tbaa !9
  %183 = icmp sle i32 %181, %182
  br i1 %183, label %184, label %386

184:                                              ; preds = %180
  store double 0.000000e+00, ptr %50, align 8, !tbaa !11
  %185 = load ptr, ptr %26, align 8, !tbaa !5
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %281

188:                                              ; preds = %184
  %189 = load i32, ptr %43, align 4, !tbaa !9
  %190 = load ptr, ptr %18, align 8, !tbaa !5
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = sub nsw i32 %189, %191
  store i32 %192, ptr %35, align 4, !tbaa !9
  %193 = load i32, ptr %43, align 4, !tbaa !9
  %194 = load ptr, ptr %19, align 8, !tbaa !5
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = add nsw i32 %193, %195
  store i32 %196, ptr %37, align 4, !tbaa !9
  %197 = load i32, ptr %37, align 4, !tbaa !9
  %198 = load ptr, ptr %17, align 8, !tbaa !5
  %199 = load i32, ptr %198, align 4, !tbaa !9
  %200 = icmp sle i32 %197, %199
  br i1 %200, label %201, label %203

201:                                              ; preds = %188
  %202 = load i32, ptr %37, align 4, !tbaa !9
  br label %206

203:                                              ; preds = %188
  %204 = load ptr, ptr %17, align 8, !tbaa !5
  %205 = load i32, ptr %204, align 4, !tbaa !9
  br label %206

206:                                              ; preds = %203, %201
  %207 = phi i32 [ %202, %201 ], [ %205, %203 ]
  store i32 %207, ptr %36, align 4, !tbaa !9
  %208 = load i32, ptr %35, align 4, !tbaa !9
  %209 = icmp sge i32 %208, 1
  br i1 %209, label %210, label %212

210:                                              ; preds = %206
  %211 = load i32, ptr %35, align 4, !tbaa !9
  br label %213

212:                                              ; preds = %206
  br label %213

213:                                              ; preds = %212, %210
  %214 = phi i32 [ %211, %210 ], [ 1, %212 ]
  store i32 %214, ptr %44, align 4, !tbaa !9
  br label %215

215:                                              ; preds = %277, %213
  %216 = load i32, ptr %44, align 4, !tbaa !9
  %217 = load i32, ptr %36, align 4, !tbaa !9
  %218 = icmp sle i32 %216, %217
  br i1 %218, label %219, label %280

219:                                              ; preds = %215
  %220 = load i32, ptr %47, align 4, !tbaa !9
  %221 = load i32, ptr %43, align 4, !tbaa !9
  %222 = add nsw i32 %220, %221
  %223 = load i32, ptr %44, align 4, !tbaa !9
  %224 = sub nsw i32 %222, %223
  %225 = load i32, ptr %44, align 4, !tbaa !9
  %226 = load i32, ptr %30, align 4, !tbaa !9
  %227 = mul nsw i32 %225, %226
  %228 = add nsw i32 %224, %227
  store i32 %228, ptr %35, align 4, !tbaa !9
  %229 = load ptr, ptr %20, align 8, !tbaa !5
  %230 = load i32, ptr %35, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.doublecomplex, ptr %229, i64 %231
  %233 = getelementptr inbounds %struct.doublecomplex, ptr %232, i32 0, i32 0
  %234 = load double, ptr %233, align 8, !tbaa !13
  store double %234, ptr %39, align 8, !tbaa !11
  %235 = load double, ptr %39, align 8, !tbaa !11
  %236 = fcmp oge double %235, 0.000000e+00
  br i1 %236, label %237, label %239

237:                                              ; preds = %219
  %238 = load double, ptr %39, align 8, !tbaa !11
  br label %242

239:                                              ; preds = %219
  %240 = load double, ptr %39, align 8, !tbaa !11
  %241 = fneg double %240
  br label %242

242:                                              ; preds = %239, %237
  %243 = phi double [ %238, %237 ], [ %241, %239 ]
  %244 = load ptr, ptr %20, align 8, !tbaa !5
  %245 = load i32, ptr %47, align 4, !tbaa !9
  %246 = load i32, ptr %43, align 4, !tbaa !9
  %247 = add nsw i32 %245, %246
  %248 = load i32, ptr %44, align 4, !tbaa !9
  %249 = sub nsw i32 %247, %248
  %250 = load i32, ptr %44, align 4, !tbaa !9
  %251 = load i32, ptr %30, align 4, !tbaa !9
  %252 = mul nsw i32 %250, %251
  %253 = add nsw i32 %249, %252
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds %struct.doublecomplex, ptr %244, i64 %254
  %256 = call { double, double } @Cd(ptr noundef %255)
  %257 = extractvalue { double, double } %256, 0
  %258 = extractvalue { double, double } %256, 1
  store double %258, ptr %40, align 8, !tbaa !11
  %259 = load double, ptr %40, align 8, !tbaa !11
  %260 = fcmp oge double %259, 0.000000e+00
  br i1 %260, label %261, label %263

261:                                              ; preds = %242
  %262 = load double, ptr %40, align 8, !tbaa !11
  br label %266

263:                                              ; preds = %242
  %264 = load double, ptr %40, align 8, !tbaa !11
  %265 = fneg double %264
  br label %266

266:                                              ; preds = %263, %261
  %267 = phi double [ %262, %261 ], [ %265, %263 ]
  %268 = fadd double %243, %267
  %269 = load ptr, ptr %25, align 8, !tbaa !5
  %270 = load i32, ptr %44, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds double, ptr %269, i64 %271
  %273 = load double, ptr %272, align 8, !tbaa !11
  %274 = fdiv double %268, %273
  %275 = load double, ptr %50, align 8, !tbaa !11
  %276 = fadd double %275, %274
  store double %276, ptr %50, align 8, !tbaa !11
  br label %277

277:                                              ; preds = %266
  %278 = load i32, ptr %44, align 4, !tbaa !9
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %44, align 4, !tbaa !9
  br label %215, !llvm.loop !15

280:                                              ; preds = %215
  br label %368

281:                                              ; preds = %184
  %282 = load i32, ptr %43, align 4, !tbaa !9
  %283 = load ptr, ptr %18, align 8, !tbaa !5
  %284 = load i32, ptr %283, align 4, !tbaa !9
  %285 = sub nsw i32 %282, %284
  store i32 %285, ptr %36, align 4, !tbaa !9
  %286 = load i32, ptr %43, align 4, !tbaa !9
  %287 = load ptr, ptr %19, align 8, !tbaa !5
  %288 = load i32, ptr %287, align 4, !tbaa !9
  %289 = add nsw i32 %286, %288
  store i32 %289, ptr %37, align 4, !tbaa !9
  %290 = load i32, ptr %37, align 4, !tbaa !9
  %291 = load ptr, ptr %17, align 8, !tbaa !5
  %292 = load i32, ptr %291, align 4, !tbaa !9
  %293 = icmp sle i32 %290, %292
  br i1 %293, label %294, label %296

294:                                              ; preds = %281
  %295 = load i32, ptr %37, align 4, !tbaa !9
  br label %299

296:                                              ; preds = %281
  %297 = load ptr, ptr %17, align 8, !tbaa !5
  %298 = load i32, ptr %297, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %296, %294
  %300 = phi i32 [ %295, %294 ], [ %298, %296 ]
  store i32 %300, ptr %35, align 4, !tbaa !9
  %301 = load i32, ptr %36, align 4, !tbaa !9
  %302 = icmp sge i32 %301, 1
  br i1 %302, label %303, label %305

303:                                              ; preds = %299
  %304 = load i32, ptr %36, align 4, !tbaa !9
  br label %306

305:                                              ; preds = %299
  br label %306

306:                                              ; preds = %305, %303
  %307 = phi i32 [ %304, %303 ], [ 1, %305 ]
  store i32 %307, ptr %44, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %364, %306
  %309 = load i32, ptr %44, align 4, !tbaa !9
  %310 = load i32, ptr %35, align 4, !tbaa !9
  %311 = icmp sle i32 %309, %310
  br i1 %311, label %312, label %367

312:                                              ; preds = %308
  %313 = load i32, ptr %47, align 4, !tbaa !9
  %314 = load i32, ptr %43, align 4, !tbaa !9
  %315 = add nsw i32 %313, %314
  %316 = load i32, ptr %44, align 4, !tbaa !9
  %317 = sub nsw i32 %315, %316
  %318 = load i32, ptr %44, align 4, !tbaa !9
  %319 = load i32, ptr %30, align 4, !tbaa !9
  %320 = mul nsw i32 %318, %319
  %321 = add nsw i32 %317, %320
  store i32 %321, ptr %36, align 4, !tbaa !9
  %322 = load ptr, ptr %20, align 8, !tbaa !5
  %323 = load i32, ptr %36, align 4, !tbaa !9
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds %struct.doublecomplex, ptr %322, i64 %324
  %326 = getelementptr inbounds %struct.doublecomplex, ptr %325, i32 0, i32 0
  %327 = load double, ptr %326, align 8, !tbaa !13
  store double %327, ptr %39, align 8, !tbaa !11
  %328 = load double, ptr %39, align 8, !tbaa !11
  %329 = fcmp oge double %328, 0.000000e+00
  br i1 %329, label %330, label %332

330:                                              ; preds = %312
  %331 = load double, ptr %39, align 8, !tbaa !11
  br label %335

332:                                              ; preds = %312
  %333 = load double, ptr %39, align 8, !tbaa !11
  %334 = fneg double %333
  br label %335

335:                                              ; preds = %332, %330
  %336 = phi double [ %331, %330 ], [ %334, %332 ]
  %337 = load ptr, ptr %20, align 8, !tbaa !5
  %338 = load i32, ptr %47, align 4, !tbaa !9
  %339 = load i32, ptr %43, align 4, !tbaa !9
  %340 = add nsw i32 %338, %339
  %341 = load i32, ptr %44, align 4, !tbaa !9
  %342 = sub nsw i32 %340, %341
  %343 = load i32, ptr %44, align 4, !tbaa !9
  %344 = load i32, ptr %30, align 4, !tbaa !9
  %345 = mul nsw i32 %343, %344
  %346 = add nsw i32 %342, %345
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds %struct.doublecomplex, ptr %337, i64 %347
  %349 = call { double, double } @Cd(ptr noundef %348)
  %350 = extractvalue { double, double } %349, 0
  %351 = extractvalue { double, double } %349, 1
  store double %351, ptr %40, align 8, !tbaa !11
  %352 = load double, ptr %40, align 8, !tbaa !11
  %353 = fcmp oge double %352, 0.000000e+00
  br i1 %353, label %354, label %356

354:                                              ; preds = %335
  %355 = load double, ptr %40, align 8, !tbaa !11
  br label %359

356:                                              ; preds = %335
  %357 = load double, ptr %40, align 8, !tbaa !11
  %358 = fneg double %357
  br label %359

359:                                              ; preds = %356, %354
  %360 = phi double [ %355, %354 ], [ %358, %356 ]
  %361 = fadd double %336, %360
  %362 = load double, ptr %50, align 8, !tbaa !11
  %363 = fadd double %362, %361
  store double %363, ptr %50, align 8, !tbaa !11
  br label %364

364:                                              ; preds = %359
  %365 = load i32, ptr %44, align 4, !tbaa !9
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %44, align 4, !tbaa !9
  br label %308, !llvm.loop !17

367:                                              ; preds = %308
  br label %368

368:                                              ; preds = %367, %280
  %369 = load double, ptr %50, align 8, !tbaa !11
  %370 = load ptr, ptr %29, align 8, !tbaa !5
  %371 = load i32, ptr %43, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %370, i64 %372
  store double %369, ptr %373, align 8, !tbaa !11
  %374 = load double, ptr %46, align 8, !tbaa !11
  %375 = load double, ptr %50, align 8, !tbaa !11
  %376 = fcmp oge double %374, %375
  br i1 %376, label %377, label %379

377:                                              ; preds = %368
  %378 = load double, ptr %46, align 8, !tbaa !11
  br label %381

379:                                              ; preds = %368
  %380 = load double, ptr %50, align 8, !tbaa !11
  br label %381

381:                                              ; preds = %379, %377
  %382 = phi double [ %378, %377 ], [ %380, %379 ]
  store double %382, ptr %46, align 8, !tbaa !11
  br label %383

383:                                              ; preds = %381
  %384 = load i32, ptr %43, align 4, !tbaa !9
  %385 = add nsw i32 %384, 1
  store i32 %385, ptr %43, align 4, !tbaa !9
  br label %180, !llvm.loop !18

386:                                              ; preds = %180
  br label %597

387:                                              ; preds = %168
  %388 = load ptr, ptr %17, align 8, !tbaa !5
  %389 = load i32, ptr %388, align 4, !tbaa !9
  store i32 %389, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %390

390:                                              ; preds = %593, %387
  %391 = load i32, ptr %43, align 4, !tbaa !9
  %392 = load i32, ptr %34, align 4, !tbaa !9
  %393 = icmp sle i32 %391, %392
  br i1 %393, label %394, label %596

394:                                              ; preds = %390
  store double 0.000000e+00, ptr %50, align 8, !tbaa !11
  %395 = load ptr, ptr %26, align 8, !tbaa !5
  %396 = load i32, ptr %395, align 4, !tbaa !9
  %397 = icmp ne i32 %396, 0
  br i1 %397, label %398, label %491

398:                                              ; preds = %394
  %399 = load i32, ptr %43, align 4, !tbaa !9
  %400 = load ptr, ptr %18, align 8, !tbaa !5
  %401 = load i32, ptr %400, align 4, !tbaa !9
  %402 = sub nsw i32 %399, %401
  store i32 %402, ptr %35, align 4, !tbaa !9
  %403 = load i32, ptr %43, align 4, !tbaa !9
  %404 = load ptr, ptr %19, align 8, !tbaa !5
  %405 = load i32, ptr %404, align 4, !tbaa !9
  %406 = add nsw i32 %403, %405
  store i32 %406, ptr %37, align 4, !tbaa !9
  %407 = load i32, ptr %37, align 4, !tbaa !9
  %408 = load ptr, ptr %17, align 8, !tbaa !5
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = icmp sle i32 %407, %409
  br i1 %410, label %411, label %413

411:                                              ; preds = %398
  %412 = load i32, ptr %37, align 4, !tbaa !9
  br label %416

413:                                              ; preds = %398
  %414 = load ptr, ptr %17, align 8, !tbaa !5
  %415 = load i32, ptr %414, align 4, !tbaa !9
  br label %416

416:                                              ; preds = %413, %411
  %417 = phi i32 [ %412, %411 ], [ %415, %413 ]
  store i32 %417, ptr %36, align 4, !tbaa !9
  %418 = load i32, ptr %35, align 4, !tbaa !9
  %419 = icmp sge i32 %418, 1
  br i1 %419, label %420, label %422

420:                                              ; preds = %416
  %421 = load i32, ptr %35, align 4, !tbaa !9
  br label %423

422:                                              ; preds = %416
  br label %423

423:                                              ; preds = %422, %420
  %424 = phi i32 [ %421, %420 ], [ 1, %422 ]
  store i32 %424, ptr %44, align 4, !tbaa !9
  br label %425

425:                                              ; preds = %487, %423
  %426 = load i32, ptr %44, align 4, !tbaa !9
  %427 = load i32, ptr %36, align 4, !tbaa !9
  %428 = icmp sle i32 %426, %427
  br i1 %428, label %429, label %490

429:                                              ; preds = %425
  %430 = load i32, ptr %48, align 4, !tbaa !9
  %431 = load i32, ptr %43, align 4, !tbaa !9
  %432 = sub nsw i32 %430, %431
  %433 = load i32, ptr %44, align 4, !tbaa !9
  %434 = add nsw i32 %432, %433
  %435 = load i32, ptr %43, align 4, !tbaa !9
  %436 = load i32, ptr %30, align 4, !tbaa !9
  %437 = mul nsw i32 %435, %436
  %438 = add nsw i32 %434, %437
  store i32 %438, ptr %35, align 4, !tbaa !9
  %439 = load ptr, ptr %20, align 8, !tbaa !5
  %440 = load i32, ptr %35, align 4, !tbaa !9
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds %struct.doublecomplex, ptr %439, i64 %441
  %443 = getelementptr inbounds %struct.doublecomplex, ptr %442, i32 0, i32 0
  %444 = load double, ptr %443, align 8, !tbaa !13
  store double %444, ptr %39, align 8, !tbaa !11
  %445 = load double, ptr %39, align 8, !tbaa !11
  %446 = fcmp oge double %445, 0.000000e+00
  br i1 %446, label %447, label %449

447:                                              ; preds = %429
  %448 = load double, ptr %39, align 8, !tbaa !11
  br label %452

449:                                              ; preds = %429
  %450 = load double, ptr %39, align 8, !tbaa !11
  %451 = fneg double %450
  br label %452

452:                                              ; preds = %449, %447
  %453 = phi double [ %448, %447 ], [ %451, %449 ]
  %454 = load ptr, ptr %20, align 8, !tbaa !5
  %455 = load i32, ptr %48, align 4, !tbaa !9
  %456 = load i32, ptr %43, align 4, !tbaa !9
  %457 = sub nsw i32 %455, %456
  %458 = load i32, ptr %44, align 4, !tbaa !9
  %459 = add nsw i32 %457, %458
  %460 = load i32, ptr %43, align 4, !tbaa !9
  %461 = load i32, ptr %30, align 4, !tbaa !9
  %462 = mul nsw i32 %460, %461
  %463 = add nsw i32 %459, %462
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds %struct.doublecomplex, ptr %454, i64 %464
  %466 = call { double, double } @Cd(ptr noundef %465)
  %467 = extractvalue { double, double } %466, 0
  %468 = extractvalue { double, double } %466, 1
  store double %468, ptr %40, align 8, !tbaa !11
  %469 = load double, ptr %40, align 8, !tbaa !11
  %470 = fcmp oge double %469, 0.000000e+00
  br i1 %470, label %471, label %473

471:                                              ; preds = %452
  %472 = load double, ptr %40, align 8, !tbaa !11
  br label %476

473:                                              ; preds = %452
  %474 = load double, ptr %40, align 8, !tbaa !11
  %475 = fneg double %474
  br label %476

476:                                              ; preds = %473, %471
  %477 = phi double [ %472, %471 ], [ %475, %473 ]
  %478 = fadd double %453, %477
  %479 = load ptr, ptr %25, align 8, !tbaa !5
  %480 = load i32, ptr %44, align 4, !tbaa !9
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %479, i64 %481
  %483 = load double, ptr %482, align 8, !tbaa !11
  %484 = fdiv double %478, %483
  %485 = load double, ptr %50, align 8, !tbaa !11
  %486 = fadd double %485, %484
  store double %486, ptr %50, align 8, !tbaa !11
  br label %487

487:                                              ; preds = %476
  %488 = load i32, ptr %44, align 4, !tbaa !9
  %489 = add nsw i32 %488, 1
  store i32 %489, ptr %44, align 4, !tbaa !9
  br label %425, !llvm.loop !19

490:                                              ; preds = %425
  br label %578

491:                                              ; preds = %394
  %492 = load i32, ptr %43, align 4, !tbaa !9
  %493 = load ptr, ptr %18, align 8, !tbaa !5
  %494 = load i32, ptr %493, align 4, !tbaa !9
  %495 = sub nsw i32 %492, %494
  store i32 %495, ptr %36, align 4, !tbaa !9
  %496 = load i32, ptr %43, align 4, !tbaa !9
  %497 = load ptr, ptr %19, align 8, !tbaa !5
  %498 = load i32, ptr %497, align 4, !tbaa !9
  %499 = add nsw i32 %496, %498
  store i32 %499, ptr %37, align 4, !tbaa !9
  %500 = load i32, ptr %37, align 4, !tbaa !9
  %501 = load ptr, ptr %17, align 8, !tbaa !5
  %502 = load i32, ptr %501, align 4, !tbaa !9
  %503 = icmp sle i32 %500, %502
  br i1 %503, label %504, label %506

504:                                              ; preds = %491
  %505 = load i32, ptr %37, align 4, !tbaa !9
  br label %509

506:                                              ; preds = %491
  %507 = load ptr, ptr %17, align 8, !tbaa !5
  %508 = load i32, ptr %507, align 4, !tbaa !9
  br label %509

509:                                              ; preds = %506, %504
  %510 = phi i32 [ %505, %504 ], [ %508, %506 ]
  store i32 %510, ptr %35, align 4, !tbaa !9
  %511 = load i32, ptr %36, align 4, !tbaa !9
  %512 = icmp sge i32 %511, 1
  br i1 %512, label %513, label %515

513:                                              ; preds = %509
  %514 = load i32, ptr %36, align 4, !tbaa !9
  br label %516

515:                                              ; preds = %509
  br label %516

516:                                              ; preds = %515, %513
  %517 = phi i32 [ %514, %513 ], [ 1, %515 ]
  store i32 %517, ptr %44, align 4, !tbaa !9
  br label %518

518:                                              ; preds = %574, %516
  %519 = load i32, ptr %44, align 4, !tbaa !9
  %520 = load i32, ptr %35, align 4, !tbaa !9
  %521 = icmp sle i32 %519, %520
  br i1 %521, label %522, label %577

522:                                              ; preds = %518
  %523 = load i32, ptr %48, align 4, !tbaa !9
  %524 = load i32, ptr %43, align 4, !tbaa !9
  %525 = sub nsw i32 %523, %524
  %526 = load i32, ptr %44, align 4, !tbaa !9
  %527 = add nsw i32 %525, %526
  %528 = load i32, ptr %43, align 4, !tbaa !9
  %529 = load i32, ptr %30, align 4, !tbaa !9
  %530 = mul nsw i32 %528, %529
  %531 = add nsw i32 %527, %530
  store i32 %531, ptr %36, align 4, !tbaa !9
  %532 = load ptr, ptr %20, align 8, !tbaa !5
  %533 = load i32, ptr %36, align 4, !tbaa !9
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds %struct.doublecomplex, ptr %532, i64 %534
  %536 = getelementptr inbounds %struct.doublecomplex, ptr %535, i32 0, i32 0
  %537 = load double, ptr %536, align 8, !tbaa !13
  store double %537, ptr %39, align 8, !tbaa !11
  %538 = load double, ptr %39, align 8, !tbaa !11
  %539 = fcmp oge double %538, 0.000000e+00
  br i1 %539, label %540, label %542

540:                                              ; preds = %522
  %541 = load double, ptr %39, align 8, !tbaa !11
  br label %545

542:                                              ; preds = %522
  %543 = load double, ptr %39, align 8, !tbaa !11
  %544 = fneg double %543
  br label %545

545:                                              ; preds = %542, %540
  %546 = phi double [ %541, %540 ], [ %544, %542 ]
  %547 = load ptr, ptr %20, align 8, !tbaa !5
  %548 = load i32, ptr %48, align 4, !tbaa !9
  %549 = load i32, ptr %43, align 4, !tbaa !9
  %550 = sub nsw i32 %548, %549
  %551 = load i32, ptr %44, align 4, !tbaa !9
  %552 = add nsw i32 %550, %551
  %553 = load i32, ptr %43, align 4, !tbaa !9
  %554 = load i32, ptr %30, align 4, !tbaa !9
  %555 = mul nsw i32 %553, %554
  %556 = add nsw i32 %552, %555
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds %struct.doublecomplex, ptr %547, i64 %557
  %559 = call { double, double } @Cd(ptr noundef %558)
  %560 = extractvalue { double, double } %559, 0
  %561 = extractvalue { double, double } %559, 1
  store double %561, ptr %40, align 8, !tbaa !11
  %562 = load double, ptr %40, align 8, !tbaa !11
  %563 = fcmp oge double %562, 0.000000e+00
  br i1 %563, label %564, label %566

564:                                              ; preds = %545
  %565 = load double, ptr %40, align 8, !tbaa !11
  br label %569

566:                                              ; preds = %545
  %567 = load double, ptr %40, align 8, !tbaa !11
  %568 = fneg double %567
  br label %569

569:                                              ; preds = %566, %564
  %570 = phi double [ %565, %564 ], [ %568, %566 ]
  %571 = fadd double %546, %570
  %572 = load double, ptr %50, align 8, !tbaa !11
  %573 = fadd double %572, %571
  store double %573, ptr %50, align 8, !tbaa !11
  br label %574

574:                                              ; preds = %569
  %575 = load i32, ptr %44, align 4, !tbaa !9
  %576 = add nsw i32 %575, 1
  store i32 %576, ptr %44, align 4, !tbaa !9
  br label %518, !llvm.loop !20

577:                                              ; preds = %518
  br label %578

578:                                              ; preds = %577, %490
  %579 = load double, ptr %50, align 8, !tbaa !11
  %580 = load ptr, ptr %29, align 8, !tbaa !5
  %581 = load i32, ptr %43, align 4, !tbaa !9
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds double, ptr %580, i64 %582
  store double %579, ptr %583, align 8, !tbaa !11
  %584 = load double, ptr %46, align 8, !tbaa !11
  %585 = load double, ptr %50, align 8, !tbaa !11
  %586 = fcmp oge double %584, %585
  br i1 %586, label %587, label %589

587:                                              ; preds = %578
  %588 = load double, ptr %46, align 8, !tbaa !11
  br label %591

589:                                              ; preds = %578
  %590 = load double, ptr %50, align 8, !tbaa !11
  br label %591

591:                                              ; preds = %589, %587
  %592 = phi double [ %588, %587 ], [ %590, %589 ]
  store double %592, ptr %46, align 8, !tbaa !11
  br label %593

593:                                              ; preds = %591
  %594 = load i32, ptr %43, align 4, !tbaa !9
  %595 = add nsw i32 %594, 1
  store i32 %595, ptr %43, align 4, !tbaa !9
  br label %390, !llvm.loop !21

596:                                              ; preds = %390
  br label %597

597:                                              ; preds = %596, %386
  %598 = load ptr, ptr %17, align 8, !tbaa !5
  %599 = load i32, ptr %598, align 4, !tbaa !9
  %600 = icmp eq i32 %599, 0
  br i1 %600, label %601, label %603

601:                                              ; preds = %597
  store double 1.000000e+00, ptr %38, align 8, !tbaa !11
  %602 = load double, ptr %38, align 8, !tbaa !11
  store double %602, ptr %15, align 8
  store i32 1, ptr %52, align 4
  br label %929

603:                                              ; preds = %597
  %604 = load double, ptr %46, align 8, !tbaa !11
  %605 = fcmp oeq double %604, 0.000000e+00
  br i1 %605, label %606, label %608

606:                                              ; preds = %603
  %607 = load double, ptr %38, align 8, !tbaa !11
  store double %607, ptr %15, align 8
  store i32 1, ptr %52, align 4
  br label %929

608:                                              ; preds = %603
  br label %609

609:                                              ; preds = %608
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %610

610:                                              ; preds = %920, %609
  %611 = load ptr, ptr %17, align 8, !tbaa !5
  %612 = load ptr, ptr %28, align 8, !tbaa !5
  %613 = load ptr, ptr %17, align 8, !tbaa !5
  %614 = load i32, ptr %613, align 4, !tbaa !9
  %615 = add nsw i32 %614, 1
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds %struct.doublecomplex, ptr %612, i64 %616
  %618 = load ptr, ptr %28, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.doublecomplex, ptr %618, i64 1
  %620 = getelementptr inbounds [3 x i32], ptr %45, i64 0, i64 0
  call void @zlacn2_(ptr noundef %611, ptr noundef %617, ptr noundef %619, ptr noundef %49, ptr noundef %42, ptr noundef %620)
  %621 = load i32, ptr %42, align 4, !tbaa !9
  %622 = icmp ne i32 %621, 0
  br i1 %622, label %623, label %921

623:                                              ; preds = %610
  %624 = load i32, ptr %42, align 4, !tbaa !9
  %625 = icmp eq i32 %624, 2
  br i1 %625, label %626, label %773

626:                                              ; preds = %623
  %627 = load ptr, ptr %17, align 8, !tbaa !5
  %628 = load i32, ptr %627, align 4, !tbaa !9
  store i32 %628, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %629

629:                                              ; preds = %677, %626
  %630 = load i32, ptr %43, align 4, !tbaa !9
  %631 = load i32, ptr %34, align 4, !tbaa !9
  %632 = icmp sle i32 %630, %631
  br i1 %632, label %633, label %680

633:                                              ; preds = %629
  %634 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %634, ptr %35, align 4, !tbaa !9
  %635 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %635, ptr %36, align 4, !tbaa !9
  %636 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %636, ptr %37, align 4, !tbaa !9
  %637 = load ptr, ptr %29, align 8, !tbaa !5
  %638 = load i32, ptr %37, align 4, !tbaa !9
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds double, ptr %637, i64 %639
  %641 = load double, ptr %640, align 8, !tbaa !11
  %642 = load ptr, ptr %28, align 8, !tbaa !5
  %643 = load i32, ptr %36, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds %struct.doublecomplex, ptr %642, i64 %644
  %646 = getelementptr inbounds %struct.doublecomplex, ptr %645, i32 0, i32 0
  %647 = load double, ptr %646, align 8, !tbaa !13
  %648 = fmul double %641, %647
  %649 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %648, ptr %649, align 8, !tbaa !13
  %650 = load ptr, ptr %29, align 8, !tbaa !5
  %651 = load i32, ptr %37, align 4, !tbaa !9
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds double, ptr %650, i64 %652
  %654 = load double, ptr %653, align 8, !tbaa !11
  %655 = load ptr, ptr %28, align 8, !tbaa !5
  %656 = load i32, ptr %36, align 4, !tbaa !9
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds %struct.doublecomplex, ptr %655, i64 %657
  %659 = getelementptr inbounds %struct.doublecomplex, ptr %658, i32 0, i32 1
  %660 = load double, ptr %659, align 8, !tbaa !22
  %661 = fmul double %654, %660
  %662 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %661, ptr %662, align 8, !tbaa !22
  %663 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %664 = load double, ptr %663, align 8, !tbaa !13
  %665 = load ptr, ptr %28, align 8, !tbaa !5
  %666 = load i32, ptr %35, align 4, !tbaa !9
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds %struct.doublecomplex, ptr %665, i64 %667
  %669 = getelementptr inbounds %struct.doublecomplex, ptr %668, i32 0, i32 0
  store double %664, ptr %669, align 8, !tbaa !13
  %670 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %671 = load double, ptr %670, align 8, !tbaa !22
  %672 = load ptr, ptr %28, align 8, !tbaa !5
  %673 = load i32, ptr %35, align 4, !tbaa !9
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds %struct.doublecomplex, ptr %672, i64 %674
  %676 = getelementptr inbounds %struct.doublecomplex, ptr %675, i32 0, i32 1
  store double %671, ptr %676, align 8, !tbaa !22
  br label %677

677:                                              ; preds = %633
  %678 = load i32, ptr %43, align 4, !tbaa !9
  %679 = add nsw i32 %678, 1
  store i32 %679, ptr %43, align 4, !tbaa !9
  br label %629, !llvm.loop !23

680:                                              ; preds = %629
  %681 = load i32, ptr %51, align 4, !tbaa !9
  %682 = icmp ne i32 %681, 0
  br i1 %682, label %683, label %698

683:                                              ; preds = %680
  %684 = load ptr, ptr %17, align 8, !tbaa !5
  %685 = load ptr, ptr %18, align 8, !tbaa !5
  %686 = load ptr, ptr %19, align 8, !tbaa !5
  %687 = load ptr, ptr %22, align 8, !tbaa !5
  %688 = load i32, ptr %33, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds %struct.doublecomplex, ptr %687, i64 %689
  %691 = load ptr, ptr %23, align 8, !tbaa !5
  %692 = load ptr, ptr %24, align 8, !tbaa !5
  %693 = getelementptr inbounds i32, ptr %692, i64 1
  %694 = load ptr, ptr %28, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.doublecomplex, ptr %694, i64 1
  %696 = load ptr, ptr %17, align 8, !tbaa !5
  %697 = load ptr, ptr %27, align 8, !tbaa !5
  call void @zgbtrs_(ptr noundef @.str.4, ptr noundef %684, ptr noundef %685, ptr noundef %686, ptr noundef @c__1, ptr noundef %690, ptr noundef %691, ptr noundef %693, ptr noundef %695, ptr noundef %696, ptr noundef %697)
  br label %713

698:                                              ; preds = %680
  %699 = load ptr, ptr %17, align 8, !tbaa !5
  %700 = load ptr, ptr %18, align 8, !tbaa !5
  %701 = load ptr, ptr %19, align 8, !tbaa !5
  %702 = load ptr, ptr %22, align 8, !tbaa !5
  %703 = load i32, ptr %33, align 4, !tbaa !9
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds %struct.doublecomplex, ptr %702, i64 %704
  %706 = load ptr, ptr %23, align 8, !tbaa !5
  %707 = load ptr, ptr %24, align 8, !tbaa !5
  %708 = getelementptr inbounds i32, ptr %707, i64 1
  %709 = load ptr, ptr %28, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.doublecomplex, ptr %709, i64 1
  %711 = load ptr, ptr %17, align 8, !tbaa !5
  %712 = load ptr, ptr %27, align 8, !tbaa !5
  call void @zgbtrs_(ptr noundef @.str.5, ptr noundef %699, ptr noundef %700, ptr noundef %701, ptr noundef @c__1, ptr noundef %705, ptr noundef %706, ptr noundef %708, ptr noundef %710, ptr noundef %711, ptr noundef %712)
  br label %713

713:                                              ; preds = %698, %683
  %714 = load ptr, ptr %26, align 8, !tbaa !5
  %715 = load i32, ptr %714, align 4, !tbaa !9
  %716 = icmp ne i32 %715, 0
  br i1 %716, label %717, label %772

717:                                              ; preds = %713
  %718 = load ptr, ptr %17, align 8, !tbaa !5
  %719 = load i32, ptr %718, align 4, !tbaa !9
  store i32 %719, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %720

720:                                              ; preds = %768, %717
  %721 = load i32, ptr %43, align 4, !tbaa !9
  %722 = load i32, ptr %34, align 4, !tbaa !9
  %723 = icmp sle i32 %721, %722
  br i1 %723, label %724, label %771

724:                                              ; preds = %720
  %725 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %725, ptr %35, align 4, !tbaa !9
  %726 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %726, ptr %36, align 4, !tbaa !9
  %727 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %727, ptr %37, align 4, !tbaa !9
  %728 = load ptr, ptr %25, align 8, !tbaa !5
  %729 = load i32, ptr %37, align 4, !tbaa !9
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds double, ptr %728, i64 %730
  %732 = load double, ptr %731, align 8, !tbaa !11
  %733 = load ptr, ptr %28, align 8, !tbaa !5
  %734 = load i32, ptr %36, align 4, !tbaa !9
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds %struct.doublecomplex, ptr %733, i64 %735
  %737 = getelementptr inbounds %struct.doublecomplex, ptr %736, i32 0, i32 0
  %738 = load double, ptr %737, align 8, !tbaa !13
  %739 = fmul double %732, %738
  %740 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %739, ptr %740, align 8, !tbaa !13
  %741 = load ptr, ptr %25, align 8, !tbaa !5
  %742 = load i32, ptr %37, align 4, !tbaa !9
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds double, ptr %741, i64 %743
  %745 = load double, ptr %744, align 8, !tbaa !11
  %746 = load ptr, ptr %28, align 8, !tbaa !5
  %747 = load i32, ptr %36, align 4, !tbaa !9
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds %struct.doublecomplex, ptr %746, i64 %748
  %750 = getelementptr inbounds %struct.doublecomplex, ptr %749, i32 0, i32 1
  %751 = load double, ptr %750, align 8, !tbaa !22
  %752 = fmul double %745, %751
  %753 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %752, ptr %753, align 8, !tbaa !22
  %754 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %755 = load double, ptr %754, align 8, !tbaa !13
  %756 = load ptr, ptr %28, align 8, !tbaa !5
  %757 = load i32, ptr %35, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds %struct.doublecomplex, ptr %756, i64 %758
  %760 = getelementptr inbounds %struct.doublecomplex, ptr %759, i32 0, i32 0
  store double %755, ptr %760, align 8, !tbaa !13
  %761 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %762 = load double, ptr %761, align 8, !tbaa !22
  %763 = load ptr, ptr %28, align 8, !tbaa !5
  %764 = load i32, ptr %35, align 4, !tbaa !9
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds %struct.doublecomplex, ptr %763, i64 %765
  %767 = getelementptr inbounds %struct.doublecomplex, ptr %766, i32 0, i32 1
  store double %762, ptr %767, align 8, !tbaa !22
  br label %768

768:                                              ; preds = %724
  %769 = load i32, ptr %43, align 4, !tbaa !9
  %770 = add nsw i32 %769, 1
  store i32 %770, ptr %43, align 4, !tbaa !9
  br label %720, !llvm.loop !24

771:                                              ; preds = %720
  br label %772

772:                                              ; preds = %771, %713
  br label %920

773:                                              ; preds = %623
  %774 = load ptr, ptr %26, align 8, !tbaa !5
  %775 = load i32, ptr %774, align 4, !tbaa !9
  %776 = icmp ne i32 %775, 0
  br i1 %776, label %777, label %832

777:                                              ; preds = %773
  %778 = load ptr, ptr %17, align 8, !tbaa !5
  %779 = load i32, ptr %778, align 4, !tbaa !9
  store i32 %779, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %780

780:                                              ; preds = %828, %777
  %781 = load i32, ptr %43, align 4, !tbaa !9
  %782 = load i32, ptr %34, align 4, !tbaa !9
  %783 = icmp sle i32 %781, %782
  br i1 %783, label %784, label %831

784:                                              ; preds = %780
  %785 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %785, ptr %35, align 4, !tbaa !9
  %786 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %786, ptr %36, align 4, !tbaa !9
  %787 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %787, ptr %37, align 4, !tbaa !9
  %788 = load ptr, ptr %25, align 8, !tbaa !5
  %789 = load i32, ptr %37, align 4, !tbaa !9
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds double, ptr %788, i64 %790
  %792 = load double, ptr %791, align 8, !tbaa !11
  %793 = load ptr, ptr %28, align 8, !tbaa !5
  %794 = load i32, ptr %36, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds %struct.doublecomplex, ptr %793, i64 %795
  %797 = getelementptr inbounds %struct.doublecomplex, ptr %796, i32 0, i32 0
  %798 = load double, ptr %797, align 8, !tbaa !13
  %799 = fmul double %792, %798
  %800 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %799, ptr %800, align 8, !tbaa !13
  %801 = load ptr, ptr %25, align 8, !tbaa !5
  %802 = load i32, ptr %37, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds double, ptr %801, i64 %803
  %805 = load double, ptr %804, align 8, !tbaa !11
  %806 = load ptr, ptr %28, align 8, !tbaa !5
  %807 = load i32, ptr %36, align 4, !tbaa !9
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds %struct.doublecomplex, ptr %806, i64 %808
  %810 = getelementptr inbounds %struct.doublecomplex, ptr %809, i32 0, i32 1
  %811 = load double, ptr %810, align 8, !tbaa !22
  %812 = fmul double %805, %811
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %812, ptr %813, align 8, !tbaa !22
  %814 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %815 = load double, ptr %814, align 8, !tbaa !13
  %816 = load ptr, ptr %28, align 8, !tbaa !5
  %817 = load i32, ptr %35, align 4, !tbaa !9
  %818 = sext i32 %817 to i64
  %819 = getelementptr inbounds %struct.doublecomplex, ptr %816, i64 %818
  %820 = getelementptr inbounds %struct.doublecomplex, ptr %819, i32 0, i32 0
  store double %815, ptr %820, align 8, !tbaa !13
  %821 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %822 = load double, ptr %821, align 8, !tbaa !22
  %823 = load ptr, ptr %28, align 8, !tbaa !5
  %824 = load i32, ptr %35, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds %struct.doublecomplex, ptr %823, i64 %825
  %827 = getelementptr inbounds %struct.doublecomplex, ptr %826, i32 0, i32 1
  store double %822, ptr %827, align 8, !tbaa !22
  br label %828

828:                                              ; preds = %784
  %829 = load i32, ptr %43, align 4, !tbaa !9
  %830 = add nsw i32 %829, 1
  store i32 %830, ptr %43, align 4, !tbaa !9
  br label %780, !llvm.loop !25

831:                                              ; preds = %780
  br label %832

832:                                              ; preds = %831, %773
  %833 = load i32, ptr %51, align 4, !tbaa !9
  %834 = icmp ne i32 %833, 0
  br i1 %834, label %835, label %850

835:                                              ; preds = %832
  %836 = load ptr, ptr %17, align 8, !tbaa !5
  %837 = load ptr, ptr %18, align 8, !tbaa !5
  %838 = load ptr, ptr %19, align 8, !tbaa !5
  %839 = load ptr, ptr %22, align 8, !tbaa !5
  %840 = load i32, ptr %33, align 4, !tbaa !9
  %841 = sext i32 %840 to i64
  %842 = getelementptr inbounds %struct.doublecomplex, ptr %839, i64 %841
  %843 = load ptr, ptr %23, align 8, !tbaa !5
  %844 = load ptr, ptr %24, align 8, !tbaa !5
  %845 = getelementptr inbounds i32, ptr %844, i64 1
  %846 = load ptr, ptr %28, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.doublecomplex, ptr %846, i64 1
  %848 = load ptr, ptr %17, align 8, !tbaa !5
  %849 = load ptr, ptr %27, align 8, !tbaa !5
  call void @zgbtrs_(ptr noundef @.str.5, ptr noundef %836, ptr noundef %837, ptr noundef %838, ptr noundef @c__1, ptr noundef %842, ptr noundef %843, ptr noundef %845, ptr noundef %847, ptr noundef %848, ptr noundef %849)
  br label %865

850:                                              ; preds = %832
  %851 = load ptr, ptr %17, align 8, !tbaa !5
  %852 = load ptr, ptr %18, align 8, !tbaa !5
  %853 = load ptr, ptr %19, align 8, !tbaa !5
  %854 = load ptr, ptr %22, align 8, !tbaa !5
  %855 = load i32, ptr %33, align 4, !tbaa !9
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds %struct.doublecomplex, ptr %854, i64 %856
  %858 = load ptr, ptr %23, align 8, !tbaa !5
  %859 = load ptr, ptr %24, align 8, !tbaa !5
  %860 = getelementptr inbounds i32, ptr %859, i64 1
  %861 = load ptr, ptr %28, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.doublecomplex, ptr %861, i64 1
  %863 = load ptr, ptr %17, align 8, !tbaa !5
  %864 = load ptr, ptr %27, align 8, !tbaa !5
  call void @zgbtrs_(ptr noundef @.str.4, ptr noundef %851, ptr noundef %852, ptr noundef %853, ptr noundef @c__1, ptr noundef %857, ptr noundef %858, ptr noundef %860, ptr noundef %862, ptr noundef %863, ptr noundef %864)
  br label %865

865:                                              ; preds = %850, %835
  %866 = load ptr, ptr %17, align 8, !tbaa !5
  %867 = load i32, ptr %866, align 4, !tbaa !9
  store i32 %867, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %868

868:                                              ; preds = %916, %865
  %869 = load i32, ptr %43, align 4, !tbaa !9
  %870 = load i32, ptr %34, align 4, !tbaa !9
  %871 = icmp sle i32 %869, %870
  br i1 %871, label %872, label %919

872:                                              ; preds = %868
  %873 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %873, ptr %35, align 4, !tbaa !9
  %874 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %874, ptr %36, align 4, !tbaa !9
  %875 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %875, ptr %37, align 4, !tbaa !9
  %876 = load ptr, ptr %29, align 8, !tbaa !5
  %877 = load i32, ptr %37, align 4, !tbaa !9
  %878 = sext i32 %877 to i64
  %879 = getelementptr inbounds double, ptr %876, i64 %878
  %880 = load double, ptr %879, align 8, !tbaa !11
  %881 = load ptr, ptr %28, align 8, !tbaa !5
  %882 = load i32, ptr %36, align 4, !tbaa !9
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds %struct.doublecomplex, ptr %881, i64 %883
  %885 = getelementptr inbounds %struct.doublecomplex, ptr %884, i32 0, i32 0
  %886 = load double, ptr %885, align 8, !tbaa !13
  %887 = fmul double %880, %886
  %888 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  store double %887, ptr %888, align 8, !tbaa !13
  %889 = load ptr, ptr %29, align 8, !tbaa !5
  %890 = load i32, ptr %37, align 4, !tbaa !9
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds double, ptr %889, i64 %891
  %893 = load double, ptr %892, align 8, !tbaa !11
  %894 = load ptr, ptr %28, align 8, !tbaa !5
  %895 = load i32, ptr %36, align 4, !tbaa !9
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds %struct.doublecomplex, ptr %894, i64 %896
  %898 = getelementptr inbounds %struct.doublecomplex, ptr %897, i32 0, i32 1
  %899 = load double, ptr %898, align 8, !tbaa !22
  %900 = fmul double %893, %899
  %901 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  store double %900, ptr %901, align 8, !tbaa !22
  %902 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 0
  %903 = load double, ptr %902, align 8, !tbaa !13
  %904 = load ptr, ptr %28, align 8, !tbaa !5
  %905 = load i32, ptr %35, align 4, !tbaa !9
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds %struct.doublecomplex, ptr %904, i64 %906
  %908 = getelementptr inbounds %struct.doublecomplex, ptr %907, i32 0, i32 0
  store double %903, ptr %908, align 8, !tbaa !13
  %909 = getelementptr inbounds %struct.doublecomplex, ptr %41, i32 0, i32 1
  %910 = load double, ptr %909, align 8, !tbaa !22
  %911 = load ptr, ptr %28, align 8, !tbaa !5
  %912 = load i32, ptr %35, align 4, !tbaa !9
  %913 = sext i32 %912 to i64
  %914 = getelementptr inbounds %struct.doublecomplex, ptr %911, i64 %913
  %915 = getelementptr inbounds %struct.doublecomplex, ptr %914, i32 0, i32 1
  store double %910, ptr %915, align 8, !tbaa !22
  br label %916

916:                                              ; preds = %872
  %917 = load i32, ptr %43, align 4, !tbaa !9
  %918 = add nsw i32 %917, 1
  store i32 %918, ptr %43, align 4, !tbaa !9
  br label %868, !llvm.loop !26

919:                                              ; preds = %868
  br label %920

920:                                              ; preds = %919, %772
  br label %610

921:                                              ; preds = %610
  %922 = load double, ptr %49, align 8, !tbaa !11
  %923 = fcmp une double %922, 0.000000e+00
  br i1 %923, label %924, label %927

924:                                              ; preds = %921
  %925 = load double, ptr %49, align 8, !tbaa !11
  %926 = fdiv double 1.000000e+00, %925
  store double %926, ptr %38, align 8, !tbaa !11
  br label %927

927:                                              ; preds = %924, %921
  %928 = load double, ptr %38, align 8, !tbaa !11
  store double %928, ptr %15, align 8
  store i32 1, ptr %52, align 4
  br label %929

929:                                              ; preds = %927, %606, %601, %162
  call void @llvm.lifetime.end.p0(i64 4, 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 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 12, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 16, 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 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  %930 = load double, ptr %15, align 8
  ret double %930
}

; 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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) #3

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

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

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

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

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

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


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

%struct.doublecomplex = type { double, double }

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

; Function Attrs: nounwind uwtable
define dso_local double @zla_gbrcond_c_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr nocapture noundef readonly %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr nocapture noundef readonly %9, ptr nocapture noundef readonly %10, ptr noundef %11, ptr noundef %12, ptr nocapture noundef %13) local_unnamed_addr #0 {
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca [3 x i32], align 4
  %18 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #5
  %19 = load i32, ptr %5, align 4, !tbaa !5
  %narrow = xor i32 %19, -1
  %20 = sext i32 %narrow to i64
  %21 = getelementptr inbounds %struct.doublecomplex, ptr %4, i64 %20
  %22 = getelementptr inbounds i8, ptr %9, i64 -8
  %23 = getelementptr inbounds i8, ptr %12, i64 -16
  %24 = getelementptr inbounds i8, ptr %13, i64 -8
  store i32 0, ptr %11, align 4, !tbaa !5
  %25 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %.not = icmp eq i32 %25, 0
  br i1 %.not, label %26, label %30

26:                                               ; preds = %14
  %27 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not361 = icmp eq i32 %27, 0
  br i1 %.not361, label %28, label %30

28:                                               ; preds = %26
  %29 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not362 = icmp eq i32 %29, 0
  br i1 %.not362, label %.thread.sink.split, label %30

30:                                               ; preds = %28, %26, %14
  %31 = load i32, ptr %1, align 4, !tbaa !5
  %32 = icmp slt i32 %31, 0
  br i1 %32, label %.thread.sink.split, label %33

33:                                               ; preds = %30
  %34 = load i32, ptr %2, align 4, !tbaa !5
  %or.cond = icmp ult i32 %34, %31
  br i1 %or.cond, label %35, label %.thread.sink.split

35:                                               ; preds = %33
  %36 = load i32, ptr %3, align 4, !tbaa !5
  %or.cond387 = icmp ult i32 %36, %31
  br i1 %or.cond387, label %37, label %.thread.sink.split

37:                                               ; preds = %35
  %38 = load i32, ptr %5, align 4, !tbaa !5
  %39 = add nuw nsw i32 %36, %34
  %.not365 = icmp sgt i32 %38, %39
  br i1 %.not365, label %40, label %.thread.sink.split

40:                                               ; preds = %37
  %41 = load i32, ptr %7, align 4, !tbaa !5
  %42 = shl nuw i32 %34, 1
  %43 = add nsw i32 %36, %42
  %.not366 = icmp sgt i32 %41, %43
  br i1 %.not366, label %44, label %.thread.sink.split

44:                                               ; preds = %40
  %.pr = load i32, ptr %11, align 4, !tbaa !5
  %.not367 = icmp eq i32 %.pr, 0
  br i1 %.not367, label %48, label %.thread

.thread.sink.split:                               ; preds = %40, %37, %35, %33, %30, %28
  %.sink = phi i32 [ -1, %28 ], [ -2, %30 ], [ -3, %33 ], [ -4, %35 ], [ -6, %37 ], [ -8, %40 ]
  store i32 %.sink, ptr %11, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %44
  %45 = phi i32 [ %.pr, %44 ], [ %.sink, %.thread.sink.split ]
  %46 = sub nsw i32 0, %45
  store i32 %46, ptr %15, align 4, !tbaa !5
  %47 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %15, i32 noundef 13) #5
  br label %326

48:                                               ; preds = %44
  %49 = add nuw nsw i32 %36, 1
  %50 = add nuw nsw i32 %34, 1
  br i1 %.not, label %.lr.ph427.preheader, label %.lr.ph411.preheader

.lr.ph411.preheader:                              ; preds = %48
  %51 = sext i32 %19 to i64
  %52 = add nuw i32 %31, 1
  %wide.trip.count = zext i32 %52 to i64
  br label %.lr.ph411

.lr.ph411:                                        ; preds = %.lr.ph411.preheader, %.loopexit397
  %indvars.iv458 = phi i64 [ 1, %.lr.ph411.preheader ], [ %indvars.iv.next459, %.loopexit397 ]
  %.0332410 = phi double [ 0.000000e+00, %.lr.ph411.preheader ], [ %112, %.loopexit397 ]
  %53 = load i32, ptr %10, align 4, !tbaa !5
  %.not382 = icmp eq i32 %53, 0
  %54 = load i32, ptr %2, align 4, !tbaa !5
  %55 = trunc nuw nsw i64 %indvars.iv458 to i32
  %56 = sub i32 %55, %54
  %57 = load i32, ptr %3, align 4, !tbaa !5
  %58 = add nsw i32 %57, %55
  %59 = load i32, ptr %1, align 4, !tbaa !5
  %.388 = tail call i32 @llvm.smin.i32(i32 %58, i32 %59)
  %60 = tail call i32 @llvm.smax.i32(i32 %56, i32 1)
  %.not384403 = icmp sgt i32 %60, %.388
  br i1 %.not382, label %87, label %61

61:                                               ; preds = %.lr.ph411
  br i1 %.not384403, label %.loopexit397, label %.lr.ph

.lr.ph:                                           ; preds = %61
  %62 = zext nneg i32 %60 to i64
  %63 = zext nneg i32 %.388 to i64
  %64 = trunc i64 %indvars.iv458 to i32
  %65 = add i32 %49, %64
  br label %66

66:                                               ; preds = %.lr.ph, %66
  %indvars.iv = phi i64 [ %62, %.lr.ph ], [ %indvars.iv.next, %66 ]
  %.0331402 = phi double [ 0.000000e+00, %.lr.ph ], [ %86, %66 ]
  %67 = trunc nuw nsw i64 %indvars.iv to i32
  %68 = sub i32 %65, %67
  %69 = mul nsw i64 %indvars.iv, %51
  %70 = sext i32 %68 to i64
  %71 = getelementptr %struct.doublecomplex, ptr %21, i64 %69
  %72 = getelementptr %struct.doublecomplex, ptr %71, i64 %70
  %73 = load double, ptr %72, align 8, !tbaa !9
  %74 = tail call { double, double } @Cd(ptr noundef nonnull %72)
  %75 = extractvalue { double, double } %74, 1
  %76 = insertelement <2 x double> poison, double %73, i64 0
  %77 = insertelement <2 x double> %76, double %75, i64 1
  %78 = fcmp oge <2 x double> %77, zeroinitializer
  %79 = fneg <2 x double> %77
  %80 = select <2 x i1> %78, <2 x double> %77, <2 x double> %79
  %shift = shufflevector <2 x double> %80, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %81 = fadd <2 x double> %80, %shift
  %82 = extractelement <2 x double> %81, i64 0
  %83 = getelementptr inbounds double, ptr %22, i64 %indvars.iv
  %84 = load double, ptr %83, align 8, !tbaa !12
  %85 = fdiv double %82, %84
  %86 = fadd double %.0331402, %85
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %.not386.not = icmp ult i64 %indvars.iv, %63
  br i1 %.not386.not, label %66, label %.loopexit397, !llvm.loop !13

87:                                               ; preds = %.lr.ph411
  br i1 %.not384403, label %.loopexit397, label %.lr.ph406

.lr.ph406:                                        ; preds = %87
  %88 = zext nneg i32 %60 to i64
  %89 = zext nneg i32 %.388 to i64
  %90 = trunc i64 %indvars.iv458 to i32
  %91 = add i32 %49, %90
  br label %92

92:                                               ; preds = %.lr.ph406, %92
  %indvars.iv455 = phi i64 [ %88, %.lr.ph406 ], [ %indvars.iv.next456, %92 ]
  %.1405 = phi double [ 0.000000e+00, %.lr.ph406 ], [ %109, %92 ]
  %93 = trunc nuw nsw i64 %indvars.iv455 to i32
  %94 = sub i32 %91, %93
  %95 = mul nsw i64 %indvars.iv455, %51
  %96 = sext i32 %94 to i64
  %97 = getelementptr %struct.doublecomplex, ptr %21, i64 %95
  %98 = getelementptr %struct.doublecomplex, ptr %97, i64 %96
  %99 = load double, ptr %98, align 8, !tbaa !9
  %100 = tail call { double, double } @Cd(ptr noundef nonnull %98)
  %101 = extractvalue { double, double } %100, 1
  %102 = insertelement <2 x double> poison, double %99, i64 0
  %103 = insertelement <2 x double> %102, double %101, i64 1
  %104 = fcmp oge <2 x double> %103, zeroinitializer
  %105 = fneg <2 x double> %103
  %106 = select <2 x i1> %104, <2 x double> %103, <2 x double> %105
  %shift597 = shufflevector <2 x double> %106, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %107 = fadd <2 x double> %106, %shift597
  %108 = extractelement <2 x double> %107, i64 0
  %109 = fadd double %.1405, %108
  %indvars.iv.next456 = add nuw nsw i64 %indvars.iv455, 1
  %.not384.not = icmp ult i64 %indvars.iv455, %89
  br i1 %.not384.not, label %92, label %.loopexit397, !llvm.loop !15

.loopexit397:                                     ; preds = %66, %92, %61, %87
  %.2 = phi double [ 0.000000e+00, %87 ], [ 0.000000e+00, %61 ], [ %109, %92 ], [ %86, %66 ]
  %110 = getelementptr inbounds double, ptr %24, i64 %indvars.iv458
  store double %.2, ptr %110, align 8, !tbaa !12
  %111 = fcmp oge double %.0332410, %.2
  %112 = select i1 %111, double %.0332410, double %.2
  %indvars.iv.next459 = add nuw nsw i64 %indvars.iv458, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next459, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit396, label %.lr.ph411, !llvm.loop !16

.lr.ph427.preheader:                              ; preds = %48
  %113 = add nuw i32 %31, 1
  %wide.trip.count473 = zext i32 %113 to i64
  br label %.lr.ph427

.lr.ph427:                                        ; preds = %.lr.ph427.preheader, %.loopexit394
  %indvars.iv469 = phi i64 [ 1, %.lr.ph427.preheader ], [ %indvars.iv.next470, %.loopexit394 ]
  %.1340.neg426 = phi i32 [ -1, %.lr.ph427.preheader ], [ %.1340.neg, %.loopexit394 ]
  %.1333425 = phi double [ 0.000000e+00, %.lr.ph427.preheader ], [ %173, %.loopexit394 ]
  %114 = load i32, ptr %10, align 4, !tbaa !5
  %.not369 = icmp eq i32 %114, 0
  %115 = load i32, ptr %2, align 4, !tbaa !5
  %116 = trunc nuw nsw i64 %indvars.iv469 to i32
  %117 = sub i32 %116, %115
  %118 = load i32, ptr %3, align 4, !tbaa !5
  %119 = add nsw i32 %118, %116
  %120 = load i32, ptr %1, align 4, !tbaa !5
  %.390 = tail call i32 @llvm.smin.i32(i32 %119, i32 %120)
  %121 = tail call i32 @llvm.smax.i32(i32 %117, i32 1)
  %.not371418 = icmp sgt i32 %121, %.390
  br i1 %.not369, label %148, label %122

122:                                              ; preds = %.lr.ph427
  br i1 %.not371418, label %.loopexit394, label %.lr.ph416

.lr.ph416:                                        ; preds = %122
  %123 = add i32 %.1340.neg426, %50
  %124 = trunc i64 %indvars.iv469 to i32
  %125 = mul i32 %19, %124
  %126 = add i32 %123, %125
  %127 = zext nneg i32 %121 to i64
  %128 = zext nneg i32 %.390 to i64
  br label %129

129:                                              ; preds = %.lr.ph416, %129
  %indvars.iv462 = phi i64 [ %127, %.lr.ph416 ], [ %indvars.iv.next463, %129 ]
  %.3415 = phi double [ 0.000000e+00, %.lr.ph416 ], [ %147, %129 ]
  %130 = trunc nuw nsw i64 %indvars.iv462 to i32
  %131 = add i32 %126, %130
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %132
  %134 = load double, ptr %133, align 8, !tbaa !9
  %135 = tail call { double, double } @Cd(ptr noundef nonnull %133)
  %136 = extractvalue { double, double } %135, 1
  %137 = insertelement <2 x double> poison, double %134, i64 0
  %138 = insertelement <2 x double> %137, double %136, i64 1
  %139 = fcmp oge <2 x double> %138, zeroinitializer
  %140 = fneg <2 x double> %138
  %141 = select <2 x i1> %139, <2 x double> %138, <2 x double> %140
  %shift598 = shufflevector <2 x double> %141, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %142 = fadd <2 x double> %141, %shift598
  %143 = extractelement <2 x double> %142, i64 0
  %144 = getelementptr inbounds double, ptr %22, i64 %indvars.iv462
  %145 = load double, ptr %144, align 8, !tbaa !12
  %146 = fdiv double %143, %145
  %147 = fadd double %.3415, %146
  %indvars.iv.next463 = add nuw nsw i64 %indvars.iv462, 1
  %.not373.not = icmp ult i64 %indvars.iv462, %128
  br i1 %.not373.not, label %129, label %.loopexit394, !llvm.loop !17

148:                                              ; preds = %.lr.ph427
  br i1 %.not371418, label %.loopexit394, label %.lr.ph421

.lr.ph421:                                        ; preds = %148
  %149 = add i32 %.1340.neg426, %50
  %150 = trunc i64 %indvars.iv469 to i32
  %151 = mul i32 %19, %150
  %152 = add i32 %149, %151
  %153 = zext nneg i32 %121 to i64
  %154 = zext nneg i32 %.390 to i64
  br label %155

155:                                              ; preds = %.lr.ph421, %155
  %indvars.iv466 = phi i64 [ %153, %.lr.ph421 ], [ %indvars.iv.next467, %155 ]
  %.4420 = phi double [ 0.000000e+00, %.lr.ph421 ], [ %170, %155 ]
  %156 = trunc nuw nsw i64 %indvars.iv466 to i32
  %157 = add i32 %152, %156
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds %struct.doublecomplex, ptr %21, i64 %158
  %160 = load double, ptr %159, align 8, !tbaa !9
  %161 = tail call { double, double } @Cd(ptr noundef nonnull %159)
  %162 = extractvalue { double, double } %161, 1
  %163 = insertelement <2 x double> poison, double %160, i64 0
  %164 = insertelement <2 x double> %163, double %162, i64 1
  %165 = fcmp oge <2 x double> %164, zeroinitializer
  %166 = fneg <2 x double> %164
  %167 = select <2 x i1> %165, <2 x double> %164, <2 x double> %166
  %shift599 = shufflevector <2 x double> %167, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %168 = fadd <2 x double> %167, %shift599
  %169 = extractelement <2 x double> %168, i64 0
  %170 = fadd double %.4420, %169
  %indvars.iv.next467 = add nuw nsw i64 %indvars.iv466, 1
  %.not371.not = icmp ult i64 %indvars.iv466, %154
  br i1 %.not371.not, label %155, label %.loopexit394, !llvm.loop !18

.loopexit394:                                     ; preds = %129, %155, %122, %148
  %.5 = phi double [ 0.000000e+00, %122 ], [ 0.000000e+00, %148 ], [ %170, %155 ], [ %147, %129 ]
  %171 = getelementptr inbounds double, ptr %24, i64 %indvars.iv469
  store double %.5, ptr %171, align 8, !tbaa !12
  %172 = fcmp oge double %.1333425, %.5
  %173 = select i1 %172, double %.1333425, double %.5
  %indvars.iv.next470 = add nuw nsw i64 %indvars.iv469, 1
  %.1340.neg = xor i32 %116, -1
  %exitcond474.not = icmp eq i64 %indvars.iv.next470, %wide.trip.count473
  br i1 %exitcond474.not, label %.loopexit396, label %.lr.ph427, !llvm.loop !19

.loopexit396:                                     ; preds = %.loopexit397, %.loopexit394
  %.2334 = phi double [ %173, %.loopexit394 ], [ %112, %.loopexit397 ]
  %174 = load i32, ptr %1, align 4, !tbaa !5
  %175 = icmp eq i32 %174, 0
  br i1 %175, label %326, label %176

176:                                              ; preds = %.loopexit396
  %177 = fcmp oeq double %.2334, 0.000000e+00
  br i1 %177, label %326, label %178

178:                                              ; preds = %176
  store double 0.000000e+00, ptr %18, align 8, !tbaa !12
  store i32 0, ptr %16, align 4, !tbaa !5
  %scevgep = getelementptr i8, ptr %12, i64 -16
  %scevgep516 = getelementptr i8, ptr %13, i64 -8
  %scevgep520 = getelementptr i8, ptr %12, i64 -16
  %scevgep522 = getelementptr i8, ptr %9, i64 -8
  %scevgep546 = getelementptr i8, ptr %12, i64 -16
  %scevgep548 = getelementptr i8, ptr %9, i64 -8
  %scevgep572 = getelementptr i8, ptr %12, i64 -16
  %scevgep574 = getelementptr i8, ptr %13, i64 -8
  %.str.5..str.4 = select i1 %.not, ptr @.str.5, ptr @.str.4
  %.str.4..str.5 = select i1 %.not, ptr @.str.4, ptr @.str.5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.backedge, %178
  %179 = phi i32 [ %174, %178 ], [ %.be, %.loopexit.backedge ]
  %180 = sext i32 %179 to i64
  %gep = getelementptr %struct.doublecomplex, ptr %12, i64 %180
  call void @zlacn2_(ptr noundef nonnull %1, ptr noundef %gep, ptr noundef %12, ptr noundef nonnull %18, ptr noundef nonnull %16, ptr noundef nonnull %17) #5
  %181 = load i32, ptr %16, align 4, !tbaa !5
  switch i32 %181, label %251 [
    i32 0, label %322
    i32 2, label %182
  ]

182:                                              ; preds = %.loopexit
  %183 = load i32, ptr %1, align 4, !tbaa !5
  %.not379429 = icmp slt i32 %183, 1
  br i1 %.not379429, label %._crit_edge, label %.lr.ph431.preheader

.lr.ph431.preheader:                              ; preds = %182
  %184 = add nuw i32 %183, 1
  %wide.trip.count478 = zext i32 %184 to i64
  %185 = zext nneg i32 %183 to i64
  %min.iters.check581 = icmp eq i32 %183, 1
  br i1 %min.iters.check581, label %.lr.ph431.preheader604, label %vector.memcheck571

vector.memcheck571:                               ; preds = %.lr.ph431.preheader
  %186 = shl nuw nsw i64 %wide.trip.count478, 4
  %scevgep573 = getelementptr i8, ptr %scevgep572, i64 %186
  %187 = shl nuw nsw i64 %wide.trip.count478, 3
  %scevgep575 = getelementptr i8, ptr %scevgep574, i64 %187
  %bound0576 = icmp ugt ptr %scevgep575, %12
  %bound1577 = icmp ugt ptr %scevgep573, %13
  %found.conflict578 = and i1 %bound0576, %bound1577
  br i1 %found.conflict578, label %.lr.ph431.preheader604, label %vector.ph582

vector.ph582:                                     ; preds = %vector.memcheck571
  %n.vec584 = and i64 %185, 2147483646
  %ind.end585 = or i64 %185, 1
  br label %vector.body587

vector.body587:                                   ; preds = %vector.body587, %vector.ph582
  %index588 = phi i64 [ 0, %vector.ph582 ], [ %index.next595, %vector.body587 ]
  %188 = getelementptr double, ptr %13, i64 %index588
  %wide.load590 = load <2 x double>, ptr %188, align 8, !tbaa !12, !alias.scope !20
  %189 = getelementptr %struct.doublecomplex, ptr %12, i64 %index588
  %wide.vec591 = load <4 x double>, ptr %189, align 8, !tbaa !12
  %strided.vec592 = shufflevector <4 x double> %wide.vec591, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec593 = shufflevector <4 x double> %wide.vec591, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %190 = fmul <2 x double> %wide.load590, %strided.vec592
  %191 = fmul <2 x double> %wide.load590, %strided.vec593
  %interleaved.vec594 = shufflevector <2 x double> %190, <2 x double> %191, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec594, ptr %189, align 8, !tbaa !12
  %index.next595 = add nuw i64 %index588, 2
  %192 = icmp eq i64 %index.next595, %n.vec584
  br i1 %192, label %middle.block579, label %vector.body587, !llvm.loop !23

middle.block579:                                  ; preds = %vector.body587
  %cmp.n596 = icmp eq i64 %n.vec584, %185
  br i1 %cmp.n596, label %._crit_edge, label %.lr.ph431.preheader604

.lr.ph431.preheader604:                           ; preds = %middle.block579, %vector.memcheck571, %.lr.ph431.preheader
  %indvars.iv475.ph = phi i64 [ 1, %vector.memcheck571 ], [ 1, %.lr.ph431.preheader ], [ %ind.end585, %middle.block579 ]
  %193 = zext nneg i32 %183 to i64
  %194 = and i32 %183, 1
  %lcmp.mod.not = icmp eq i32 %194, 0
  br i1 %lcmp.mod.not, label %.lr.ph431.prol.loopexit, label %.lr.ph431.prol

.lr.ph431.prol:                                   ; preds = %.lr.ph431.preheader604
  %195 = getelementptr inbounds double, ptr %24, i64 %indvars.iv475.ph
  %196 = load double, ptr %195, align 8, !tbaa !12
  %197 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv475.ph
  %198 = load <2 x double>, ptr %197, align 8, !tbaa !12
  %199 = insertelement <2 x double> poison, double %196, i64 0
  %200 = shufflevector <2 x double> %199, <2 x double> poison, <2 x i32> zeroinitializer
  %201 = fmul <2 x double> %200, %198
  store <2 x double> %201, ptr %197, align 8, !tbaa !12
  %indvars.iv.next476.prol = add nuw nsw i64 %indvars.iv475.ph, 1
  br label %.lr.ph431.prol.loopexit

.lr.ph431.prol.loopexit:                          ; preds = %.lr.ph431.prol, %.lr.ph431.preheader604
  %indvars.iv475.unr = phi i64 [ %indvars.iv475.ph, %.lr.ph431.preheader604 ], [ %indvars.iv.next476.prol, %.lr.ph431.prol ]
  %202 = icmp eq i64 %indvars.iv475.ph, %193
  br i1 %202, label %._crit_edge, label %.lr.ph431

.lr.ph431:                                        ; preds = %.lr.ph431.prol.loopexit, %.lr.ph431
  %indvars.iv475 = phi i64 [ %indvars.iv.next476.1, %.lr.ph431 ], [ %indvars.iv475.unr, %.lr.ph431.prol.loopexit ]
  %203 = getelementptr inbounds double, ptr %24, i64 %indvars.iv475
  %204 = load double, ptr %203, align 8, !tbaa !12
  %205 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv475
  %206 = load <2 x double>, ptr %205, align 8, !tbaa !12
  %207 = insertelement <2 x double> poison, double %204, i64 0
  %208 = shufflevector <2 x double> %207, <2 x double> poison, <2 x i32> zeroinitializer
  %209 = fmul <2 x double> %208, %206
  store <2 x double> %209, ptr %205, align 8, !tbaa !12
  %210 = getelementptr double, ptr %13, i64 %indvars.iv475
  %211 = load double, ptr %210, align 8, !tbaa !12
  %212 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv475
  %213 = load <2 x double>, ptr %212, align 8, !tbaa !12
  %214 = insertelement <2 x double> poison, double %211, i64 0
  %215 = shufflevector <2 x double> %214, <2 x double> poison, <2 x i32> zeroinitializer
  %216 = fmul <2 x double> %215, %213
  store <2 x double> %216, ptr %212, align 8, !tbaa !12
  %indvars.iv.next476.1 = add nuw nsw i64 %indvars.iv475, 2
  %exitcond479.not.1 = icmp eq i64 %indvars.iv.next476.1, %wide.trip.count478
  br i1 %exitcond479.not.1, label %._crit_edge, label %.lr.ph431, !llvm.loop !26

._crit_edge:                                      ; preds = %.lr.ph431.prol.loopexit, %.lr.ph431, %middle.block579, %182
  call void @zgbtrs_(ptr noundef nonnull %.str.5..str.4, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %12, ptr noundef nonnull %1, ptr noundef nonnull %11) #5
  %217 = load i32, ptr %10, align 4, !tbaa !5
  %.not380 = icmp eq i32 %217, 0
  %.pre.pre = load i32, ptr %1, align 4, !tbaa !5
  %.not381432 = icmp slt i32 %.pre.pre, 1
  %or.cond505 = select i1 %.not380, i1 true, i1 %.not381432
  br i1 %or.cond505, label %.loopexit.backedge, label %.lr.ph435.preheader

.lr.ph435.preheader:                              ; preds = %._crit_edge
  %218 = add nuw i32 %.pre.pre, 1
  %wide.trip.count483 = zext i32 %218 to i64
  %219 = zext nneg i32 %.pre.pre to i64
  %min.iters.check555 = icmp ult i32 %.pre.pre, 2
  br i1 %min.iters.check555, label %.lr.ph435.preheader602, label %vector.memcheck545

vector.memcheck545:                               ; preds = %.lr.ph435.preheader
  %220 = shl nuw nsw i64 %wide.trip.count483, 4
  %scevgep547 = getelementptr i8, ptr %scevgep546, i64 %220
  %221 = shl nuw nsw i64 %wide.trip.count483, 3
  %scevgep549 = getelementptr i8, ptr %scevgep548, i64 %221
  %bound0550 = icmp ugt ptr %scevgep549, %12
  %bound1551 = icmp ugt ptr %scevgep547, %9
  %found.conflict552 = and i1 %bound0550, %bound1551
  br i1 %found.conflict552, label %.lr.ph435.preheader602, label %vector.ph556

vector.ph556:                                     ; preds = %vector.memcheck545
  %n.vec558 = and i64 %219, 2147483646
  %ind.end559 = or i64 %219, 1
  br label %vector.body561

vector.body561:                                   ; preds = %vector.body561, %vector.ph556
  %index562 = phi i64 [ 0, %vector.ph556 ], [ %index.next569, %vector.body561 ]
  %222 = getelementptr double, ptr %9, i64 %index562
  %wide.load564 = load <2 x double>, ptr %222, align 8, !tbaa !12, !alias.scope !27
  %223 = getelementptr %struct.doublecomplex, ptr %12, i64 %index562
  %wide.vec565 = load <4 x double>, ptr %223, align 8, !tbaa !12
  %strided.vec566 = shufflevector <4 x double> %wide.vec565, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec567 = shufflevector <4 x double> %wide.vec565, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %224 = fmul <2 x double> %wide.load564, %strided.vec566
  %225 = fmul <2 x double> %wide.load564, %strided.vec567
  %interleaved.vec568 = shufflevector <2 x double> %224, <2 x double> %225, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec568, ptr %223, align 8, !tbaa !12
  %index.next569 = add nuw i64 %index562, 2
  %226 = icmp eq i64 %index.next569, %n.vec558
  br i1 %226, label %middle.block553, label %vector.body561, !llvm.loop !30

middle.block553:                                  ; preds = %vector.body561
  %cmp.n570 = icmp eq i64 %n.vec558, %219
  br i1 %cmp.n570, label %.loopexit.backedge, label %.lr.ph435.preheader602

.loopexit.backedge:                               ; preds = %.lr.ph435.prol.loopexit, %.lr.ph435, %.lr.ph443.prol.loopexit, %.lr.ph443, %middle.block553, %middle.block, %.loopexit392, %._crit_edge
  %.be = phi i32 [ %288, %.loopexit392 ], [ %.pre.pre, %._crit_edge ], [ %288, %middle.block ], [ %.pre.pre, %middle.block553 ], [ %288, %.lr.ph443 ], [ %288, %.lr.ph443.prol.loopexit ], [ %.pre.pre, %.lr.ph435 ], [ %.pre.pre, %.lr.ph435.prol.loopexit ]
  br label %.loopexit

.lr.ph435.preheader602:                           ; preds = %middle.block553, %vector.memcheck545, %.lr.ph435.preheader
  %indvars.iv480.ph = phi i64 [ 1, %vector.memcheck545 ], [ 1, %.lr.ph435.preheader ], [ %ind.end559, %middle.block553 ]
  %227 = zext nneg i32 %.pre.pre to i64
  %228 = and i32 %.pre.pre, 1
  %lcmp.mod614.not = icmp eq i32 %228, 0
  br i1 %lcmp.mod614.not, label %.lr.ph435.prol.loopexit, label %.lr.ph435.prol

.lr.ph435.prol:                                   ; preds = %.lr.ph435.preheader602
  %229 = getelementptr inbounds double, ptr %22, i64 %indvars.iv480.ph
  %230 = load double, ptr %229, align 8, !tbaa !12
  %231 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv480.ph
  %232 = load <2 x double>, ptr %231, align 8, !tbaa !12
  %233 = insertelement <2 x double> poison, double %230, i64 0
  %234 = shufflevector <2 x double> %233, <2 x double> poison, <2 x i32> zeroinitializer
  %235 = fmul <2 x double> %234, %232
  store <2 x double> %235, ptr %231, align 8, !tbaa !12
  %indvars.iv.next481.prol = add nuw nsw i64 %indvars.iv480.ph, 1
  br label %.lr.ph435.prol.loopexit

.lr.ph435.prol.loopexit:                          ; preds = %.lr.ph435.prol, %.lr.ph435.preheader602
  %indvars.iv480.unr = phi i64 [ %indvars.iv480.ph, %.lr.ph435.preheader602 ], [ %indvars.iv.next481.prol, %.lr.ph435.prol ]
  %236 = icmp eq i64 %indvars.iv480.ph, %227
  br i1 %236, label %.loopexit.backedge, label %.lr.ph435

.lr.ph435:                                        ; preds = %.lr.ph435.prol.loopexit, %.lr.ph435
  %indvars.iv480 = phi i64 [ %indvars.iv.next481.1, %.lr.ph435 ], [ %indvars.iv480.unr, %.lr.ph435.prol.loopexit ]
  %237 = getelementptr inbounds double, ptr %22, i64 %indvars.iv480
  %238 = load double, ptr %237, align 8, !tbaa !12
  %239 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv480
  %240 = load <2 x double>, ptr %239, align 8, !tbaa !12
  %241 = insertelement <2 x double> poison, double %238, i64 0
  %242 = shufflevector <2 x double> %241, <2 x double> poison, <2 x i32> zeroinitializer
  %243 = fmul <2 x double> %242, %240
  store <2 x double> %243, ptr %239, align 8, !tbaa !12
  %244 = getelementptr double, ptr %9, i64 %indvars.iv480
  %245 = load double, ptr %244, align 8, !tbaa !12
  %246 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv480
  %247 = load <2 x double>, ptr %246, align 8, !tbaa !12
  %248 = insertelement <2 x double> poison, double %245, i64 0
  %249 = shufflevector <2 x double> %248, <2 x double> poison, <2 x i32> zeroinitializer
  %250 = fmul <2 x double> %249, %247
  store <2 x double> %250, ptr %246, align 8, !tbaa !12
  %indvars.iv.next481.1 = add nuw nsw i64 %indvars.iv480, 2
  %exitcond484.not.1 = icmp eq i64 %indvars.iv.next481.1, %wide.trip.count483
  br i1 %exitcond484.not.1, label %.loopexit.backedge, label %.lr.ph435, !llvm.loop !31

251:                                              ; preds = %.loopexit
  %252 = load i32, ptr %10, align 4, !tbaa !5
  %.not376 = icmp eq i32 %252, 0
  br i1 %.not376, label %.loopexit392, label %253

253:                                              ; preds = %251
  %254 = load i32, ptr %1, align 4, !tbaa !5
  %.not377436 = icmp slt i32 %254, 1
  br i1 %.not377436, label %.loopexit392, label %.lr.ph439.preheader

.lr.ph439.preheader:                              ; preds = %253
  %255 = add nuw i32 %254, 1
  %wide.trip.count488 = zext i32 %255 to i64
  %256 = zext nneg i32 %254 to i64
  %min.iters.check529 = icmp eq i32 %254, 1
  br i1 %min.iters.check529, label %.lr.ph439.preheader601, label %vector.memcheck519

vector.memcheck519:                               ; preds = %.lr.ph439.preheader
  %257 = shl nuw nsw i64 %wide.trip.count488, 4
  %scevgep521 = getelementptr i8, ptr %scevgep520, i64 %257
  %258 = shl nuw nsw i64 %wide.trip.count488, 3
  %scevgep523 = getelementptr i8, ptr %scevgep522, i64 %258
  %bound0524 = icmp ugt ptr %scevgep523, %12
  %bound1525 = icmp ugt ptr %scevgep521, %9
  %found.conflict526 = and i1 %bound0524, %bound1525
  br i1 %found.conflict526, label %.lr.ph439.preheader601, label %vector.ph530

vector.ph530:                                     ; preds = %vector.memcheck519
  %n.vec532 = and i64 %256, 2147483646
  %ind.end533 = or i64 %256, 1
  br label %vector.body535

vector.body535:                                   ; preds = %vector.body535, %vector.ph530
  %index536 = phi i64 [ 0, %vector.ph530 ], [ %index.next543, %vector.body535 ]
  %259 = getelementptr double, ptr %9, i64 %index536
  %wide.load538 = load <2 x double>, ptr %259, align 8, !tbaa !12, !alias.scope !32
  %260 = getelementptr %struct.doublecomplex, ptr %12, i64 %index536
  %wide.vec539 = load <4 x double>, ptr %260, align 8, !tbaa !12
  %strided.vec540 = shufflevector <4 x double> %wide.vec539, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec541 = shufflevector <4 x double> %wide.vec539, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %261 = fmul <2 x double> %wide.load538, %strided.vec540
  %262 = fmul <2 x double> %wide.load538, %strided.vec541
  %interleaved.vec542 = shufflevector <2 x double> %261, <2 x double> %262, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec542, ptr %260, align 8, !tbaa !12
  %index.next543 = add nuw i64 %index536, 2
  %263 = icmp eq i64 %index.next543, %n.vec532
  br i1 %263, label %middle.block527, label %vector.body535, !llvm.loop !35

middle.block527:                                  ; preds = %vector.body535
  %cmp.n544 = icmp eq i64 %n.vec532, %256
  br i1 %cmp.n544, label %.loopexit392, label %.lr.ph439.preheader601

.lr.ph439.preheader601:                           ; preds = %middle.block527, %vector.memcheck519, %.lr.ph439.preheader
  %indvars.iv485.ph = phi i64 [ 1, %vector.memcheck519 ], [ 1, %.lr.ph439.preheader ], [ %ind.end533, %middle.block527 ]
  %264 = zext nneg i32 %254 to i64
  %265 = and i32 %254, 1
  %lcmp.mod616.not = icmp eq i32 %265, 0
  br i1 %lcmp.mod616.not, label %.lr.ph439.prol.loopexit, label %.lr.ph439.prol

.lr.ph439.prol:                                   ; preds = %.lr.ph439.preheader601
  %266 = getelementptr inbounds double, ptr %22, i64 %indvars.iv485.ph
  %267 = load double, ptr %266, align 8, !tbaa !12
  %268 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv485.ph
  %269 = load <2 x double>, ptr %268, align 8, !tbaa !12
  %270 = insertelement <2 x double> poison, double %267, i64 0
  %271 = shufflevector <2 x double> %270, <2 x double> poison, <2 x i32> zeroinitializer
  %272 = fmul <2 x double> %271, %269
  store <2 x double> %272, ptr %268, align 8, !tbaa !12
  %indvars.iv.next486.prol = add nuw nsw i64 %indvars.iv485.ph, 1
  br label %.lr.ph439.prol.loopexit

.lr.ph439.prol.loopexit:                          ; preds = %.lr.ph439.prol, %.lr.ph439.preheader601
  %indvars.iv485.unr = phi i64 [ %indvars.iv485.ph, %.lr.ph439.preheader601 ], [ %indvars.iv.next486.prol, %.lr.ph439.prol ]
  %273 = icmp eq i64 %indvars.iv485.ph, %264
  br i1 %273, label %.loopexit392, label %.lr.ph439

.lr.ph439:                                        ; preds = %.lr.ph439.prol.loopexit, %.lr.ph439
  %indvars.iv485 = phi i64 [ %indvars.iv.next486.1, %.lr.ph439 ], [ %indvars.iv485.unr, %.lr.ph439.prol.loopexit ]
  %274 = getelementptr inbounds double, ptr %22, i64 %indvars.iv485
  %275 = load double, ptr %274, align 8, !tbaa !12
  %276 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv485
  %277 = load <2 x double>, ptr %276, align 8, !tbaa !12
  %278 = insertelement <2 x double> poison, double %275, i64 0
  %279 = shufflevector <2 x double> %278, <2 x double> poison, <2 x i32> zeroinitializer
  %280 = fmul <2 x double> %279, %277
  store <2 x double> %280, ptr %276, align 8, !tbaa !12
  %281 = getelementptr double, ptr %9, i64 %indvars.iv485
  %282 = load double, ptr %281, align 8, !tbaa !12
  %283 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv485
  %284 = load <2 x double>, ptr %283, align 8, !tbaa !12
  %285 = insertelement <2 x double> poison, double %282, i64 0
  %286 = shufflevector <2 x double> %285, <2 x double> poison, <2 x i32> zeroinitializer
  %287 = fmul <2 x double> %286, %284
  store <2 x double> %287, ptr %283, align 8, !tbaa !12
  %indvars.iv.next486.1 = add nuw nsw i64 %indvars.iv485, 2
  %exitcond489.not.1 = icmp eq i64 %indvars.iv.next486.1, %wide.trip.count488
  br i1 %exitcond489.not.1, label %.loopexit392, label %.lr.ph439, !llvm.loop !36

.loopexit392:                                     ; preds = %.lr.ph439.prol.loopexit, %.lr.ph439, %middle.block527, %253, %251
  call void @zgbtrs_(ptr noundef nonnull %.str.4..str.5, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull @c__1, ptr noundef %6, ptr noundef nonnull %7, ptr noundef %8, ptr noundef %12, ptr noundef nonnull %1, ptr noundef nonnull %11) #5
  %288 = load i32, ptr %1, align 4, !tbaa !5
  %.not378440 = icmp slt i32 %288, 1
  br i1 %.not378440, label %.loopexit.backedge, label %.lr.ph443.preheader

.lr.ph443.preheader:                              ; preds = %.loopexit392
  %289 = add nuw i32 %288, 1
  %wide.trip.count493 = zext i32 %289 to i64
  %290 = zext nneg i32 %288 to i64
  %min.iters.check = icmp eq i32 %288, 1
  br i1 %min.iters.check, label %.lr.ph443.preheader600, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph443.preheader
  %291 = shl nuw nsw i64 %wide.trip.count493, 4
  %scevgep515 = getelementptr i8, ptr %scevgep, i64 %291
  %292 = shl nuw nsw i64 %wide.trip.count493, 3
  %scevgep517 = getelementptr i8, ptr %scevgep516, i64 %292
  %bound0 = icmp ugt ptr %scevgep517, %12
  %bound1 = icmp ugt ptr %scevgep515, %13
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph443.preheader600, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %293 = getelementptr double, ptr %13, i64 %index
  %wide.load = load <2 x double>, ptr %293, align 8, !tbaa !12, !alias.scope !37
  %294 = getelementptr %struct.doublecomplex, ptr %12, i64 %index
  %wide.vec = load <4 x double>, ptr %294, align 8, !tbaa !12
  %strided.vec = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec518 = shufflevector <4 x double> %wide.vec, <4 x double> poison, <2 x i32> <i32 1, i32 3>
  %295 = fmul <2 x double> %wide.load, %strided.vec
  %296 = fmul <2 x double> %wide.load, %strided.vec518
  %interleaved.vec = shufflevector <2 x double> %295, <2 x double> %296, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
  store <4 x double> %interleaved.vec, ptr %294, align 8, !tbaa !12
  %index.next = add nuw i64 %index, 2
  %297 = icmp eq i64 %index.next, %n.vec
  br i1 %297, label %middle.block, label %vector.body, !llvm.loop !40

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %290
  br i1 %cmp.n, label %.loopexit.backedge, label %.lr.ph443.preheader600

.lr.ph443.preheader600:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph443.preheader
  %indvars.iv490.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph443.preheader ], [ %ind.end, %middle.block ]
  %298 = zext nneg i32 %288 to i64
  %299 = and i32 %288, 1
  %lcmp.mod618.not = icmp eq i32 %299, 0
  br i1 %lcmp.mod618.not, label %.lr.ph443.prol.loopexit, label %.lr.ph443.prol

.lr.ph443.prol:                                   ; preds = %.lr.ph443.preheader600
  %300 = getelementptr inbounds double, ptr %24, i64 %indvars.iv490.ph
  %301 = load double, ptr %300, align 8, !tbaa !12
  %302 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv490.ph
  %303 = load <2 x double>, ptr %302, align 8, !tbaa !12
  %304 = insertelement <2 x double> poison, double %301, i64 0
  %305 = shufflevector <2 x double> %304, <2 x double> poison, <2 x i32> zeroinitializer
  %306 = fmul <2 x double> %305, %303
  store <2 x double> %306, ptr %302, align 8, !tbaa !12
  %indvars.iv.next491.prol = add nuw nsw i64 %indvars.iv490.ph, 1
  br label %.lr.ph443.prol.loopexit

.lr.ph443.prol.loopexit:                          ; preds = %.lr.ph443.prol, %.lr.ph443.preheader600
  %indvars.iv490.unr = phi i64 [ %indvars.iv490.ph, %.lr.ph443.preheader600 ], [ %indvars.iv.next491.prol, %.lr.ph443.prol ]
  %307 = icmp eq i64 %indvars.iv490.ph, %298
  br i1 %307, label %.loopexit.backedge, label %.lr.ph443

.lr.ph443:                                        ; preds = %.lr.ph443.prol.loopexit, %.lr.ph443
  %indvars.iv490 = phi i64 [ %indvars.iv.next491.1, %.lr.ph443 ], [ %indvars.iv490.unr, %.lr.ph443.prol.loopexit ]
  %308 = getelementptr inbounds double, ptr %24, i64 %indvars.iv490
  %309 = load double, ptr %308, align 8, !tbaa !12
  %310 = getelementptr inbounds %struct.doublecomplex, ptr %23, i64 %indvars.iv490
  %311 = load <2 x double>, ptr %310, align 8, !tbaa !12
  %312 = insertelement <2 x double> poison, double %309, i64 0
  %313 = shufflevector <2 x double> %312, <2 x double> poison, <2 x i32> zeroinitializer
  %314 = fmul <2 x double> %313, %311
  store <2 x double> %314, ptr %310, align 8, !tbaa !12
  %315 = getelementptr double, ptr %13, i64 %indvars.iv490
  %316 = load double, ptr %315, align 8, !tbaa !12
  %317 = getelementptr %struct.doublecomplex, ptr %12, i64 %indvars.iv490
  %318 = load <2 x double>, ptr %317, align 8, !tbaa !12
  %319 = insertelement <2 x double> poison, double %316, i64 0
  %320 = shufflevector <2 x double> %319, <2 x double> poison, <2 x i32> zeroinitializer
  %321 = fmul <2 x double> %320, %318
  store <2 x double> %321, ptr %317, align 8, !tbaa !12
  %indvars.iv.next491.1 = add nuw nsw i64 %indvars.iv490, 2
  %exitcond494.not.1 = icmp eq i64 %indvars.iv.next491.1, %wide.trip.count493
  br i1 %exitcond494.not.1, label %.loopexit.backedge, label %.lr.ph443, !llvm.loop !41

322:                                              ; preds = %.loopexit
  %323 = load double, ptr %18, align 8, !tbaa !12
  %324 = fcmp une double %323, 0.000000e+00
  %325 = fdiv double 1.000000e+00, %323
  %.0345 = select i1 %324, double %325, double 0.000000e+00
  br label %326

326:                                              ; preds = %176, %.loopexit396, %322, %.thread
  %.0 = phi double [ 0.000000e+00, %.thread ], [ %.0345, %322 ], [ 1.000000e+00, %.loopexit396 ], [ 0.000000e+00, %176 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #5
  ret double %.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 @lsame_(ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden { double, double } @Cd(ptr noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = !{!21}
!21 = distinct !{!21, !22}
!22 = distinct !{!22, !"LVerDomain"}
!23 = distinct !{!23, !14, !24, !25}
!24 = !{!"llvm.loop.isvectorized", i32 1}
!25 = !{!"llvm.loop.unroll.runtime.disable"}
!26 = distinct !{!26, !14, !24}
!27 = !{!28}
!28 = distinct !{!28, !29}
!29 = distinct !{!29, !"LVerDomain"}
!30 = distinct !{!30, !14, !24, !25}
!31 = distinct !{!31, !14, !24}
!32 = !{!33}
!33 = distinct !{!33, !34}
!34 = distinct !{!34, !"LVerDomain"}
!35 = distinct !{!35, !14, !24, !25}
!36 = distinct !{!36, !14, !24}
!37 = !{!38}
!38 = distinct !{!38, !39}
!39 = distinct !{!39, !"LVerDomain"}
!40 = distinct !{!40, !14, !24, !25}
!41 = distinct !{!41, !14, !24}


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