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

; 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 [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local double @zlantr_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) #0 {
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca [2 x double], align 16
  %29 = alloca double, align 8
  %30 = alloca [2 x double], align 16
  %31 = alloca { double, double }, align 8
  %32 = alloca { double, double }, align 8
  %33 = alloca { double, double }, align 8
  %34 = alloca { double, double }, align 8
  %35 = alloca { double, double }, align 8
  %36 = alloca { double, double }, align 8
  %37 = alloca { double, double }, align 8
  %38 = alloca { double, double }, align 8
  %39 = alloca { double, double }, align 8
  %40 = alloca { double, double }, align 8
  %41 = alloca { double, double }, align 8
  %42 = alloca { double, double }, align 8
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store ptr %6, ptr %15, align 8, !tbaa !5
  store ptr %7, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #5
  %43 = load ptr, ptr %15, align 8, !tbaa !5
  %44 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %44, ptr %17, align 4, !tbaa !9
  %45 = load i32, ptr %17, align 4, !tbaa !9
  %46 = mul nsw i32 %45, 1
  %47 = add nsw i32 1, %46
  store i32 %47, ptr %18, align 4, !tbaa !9
  %48 = load i32, ptr %18, align 4, !tbaa !9
  %49 = load ptr, ptr %14, align 8, !tbaa !5
  %50 = sext i32 %48 to i64
  %51 = sub i64 0, %50
  %52 = getelementptr inbounds %struct.doublecomplex, ptr %49, i64 %51
  store ptr %52, ptr %14, align 8, !tbaa !5
  %53 = load ptr, ptr %16, align 8, !tbaa !5
  %54 = getelementptr inbounds double, ptr %53, i32 -1
  store ptr %54, ptr %16, align 8, !tbaa !5
  %55 = load ptr, ptr %12, align 8, !tbaa !5
  %56 = load i32, ptr %55, align 4, !tbaa !9
  %57 = load ptr, ptr %13, align 8, !tbaa !5
  %58 = load i32, ptr %57, align 4, !tbaa !9
  %59 = icmp sle i32 %56, %58
  br i1 %59, label %60, label %63

60:                                               ; preds = %8
  %61 = load ptr, ptr %12, align 8, !tbaa !5
  %62 = load i32, ptr %61, align 4, !tbaa !9
  br label %66

63:                                               ; preds = %8
  %64 = load ptr, ptr %13, align 8, !tbaa !5
  %65 = load i32, ptr %64, align 4, !tbaa !9
  br label %66

66:                                               ; preds = %63, %60
  %67 = phi i32 [ %62, %60 ], [ %65, %63 ]
  %68 = icmp eq i32 %67, 0
  br i1 %68, label %69, label %70

69:                                               ; preds = %66
  store double 0.000000e+00, ptr %27, align 8, !tbaa !11
  br label %1081

70:                                               ; preds = %66
  %71 = load ptr, ptr %9, align 8, !tbaa !5
  %72 = call i32 @lsame_(ptr noundef %71, ptr noundef @.str)
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %312

74:                                               ; preds = %70
  %75 = load ptr, ptr %11, align 8, !tbaa !5
  %76 = call i32 @lsame_(ptr noundef %75, ptr noundef @.str.1)
  %77 = icmp ne i32 %76, 0
  br i1 %77, label %78, label %196

78:                                               ; preds = %74
  store double 1.000000e+00, ptr %27, align 8, !tbaa !11
  %79 = load ptr, ptr %10, align 8, !tbaa !5
  %80 = call i32 @lsame_(ptr noundef %79, ptr noundef @.str.1)
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %143

82:                                               ; preds = %78
  %83 = load ptr, ptr %13, align 8, !tbaa !5
  %84 = load i32, ptr %83, align 4, !tbaa !9
  store i32 %84, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %139, %82
  %86 = load i32, ptr %25, align 4, !tbaa !9
  %87 = load i32, ptr %19, align 4, !tbaa !9
  %88 = icmp sle i32 %86, %87
  br i1 %88, label %89, label %142

89:                                               ; preds = %85
  %90 = load ptr, ptr %12, align 8, !tbaa !5
  %91 = load i32, ptr %90, align 4, !tbaa !9
  store i32 %91, ptr %21, align 4, !tbaa !9
  %92 = load i32, ptr %25, align 4, !tbaa !9
  %93 = sub nsw i32 %92, 1
  store i32 %93, ptr %22, align 4, !tbaa !9
  %94 = load i32, ptr %21, align 4, !tbaa !9
  %95 = load i32, ptr %22, align 4, !tbaa !9
  %96 = icmp sle i32 %94, %95
  br i1 %96, label %97, label %99

97:                                               ; preds = %89
  %98 = load i32, ptr %21, align 4, !tbaa !9
  br label %101

99:                                               ; preds = %89
  %100 = load i32, ptr %22, align 4, !tbaa !9
  br label %101

101:                                              ; preds = %99, %97
  %102 = phi i32 [ %98, %97 ], [ %100, %99 ]
  store i32 %102, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %135, %101
  %104 = load i32, ptr %24, align 4, !tbaa !9
  %105 = load i32, ptr %20, align 4, !tbaa !9
  %106 = icmp sle i32 %104, %105
  br i1 %106, label %107, label %138

107:                                              ; preds = %103
  %108 = load ptr, ptr %14, align 8, !tbaa !5
  %109 = load i32, ptr %24, align 4, !tbaa !9
  %110 = load i32, ptr %25, align 4, !tbaa !9
  %111 = load i32, ptr %17, align 4, !tbaa !9
  %112 = mul nsw i32 %110, %111
  %113 = add nsw i32 %109, %112
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds %struct.doublecomplex, ptr %108, i64 %114
  %116 = call { double, double } @Cd(ptr noundef %115)
  %117 = extractvalue { double, double } %116, 0
  %118 = extractvalue { double, double } %116, 1
  %119 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %120 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  store double %117, ptr %119, align 8
  store double %118, ptr %120, align 8
  %121 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %122 = load double, ptr %121, align 8
  %123 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %124 = load double, ptr %123, align 8
  %125 = call double @cabs(double noundef %122, double noundef %124) #5
  store double %125, ptr %29, align 8, !tbaa !11
  %126 = load double, ptr %27, align 8, !tbaa !11
  %127 = load double, ptr %29, align 8, !tbaa !11
  %128 = fcmp olt double %126, %127
  br i1 %128, label %132, label %129

129:                                              ; preds = %107
  %130 = call i32 @disnan_(ptr noundef %29)
  %131 = icmp ne i32 %130, 0
  br i1 %131, label %132, label %134

132:                                              ; preds = %129, %107
  %133 = load double, ptr %29, align 8, !tbaa !11
  store double %133, ptr %27, align 8, !tbaa !11
  br label %134

134:                                              ; preds = %132, %129
  br label %135

135:                                              ; preds = %134
  %136 = load i32, ptr %24, align 4, !tbaa !9
  %137 = add nsw i32 %136, 1
  store i32 %137, ptr %24, align 4, !tbaa !9
  br label %103, !llvm.loop !13

138:                                              ; preds = %103
  br label %139

139:                                              ; preds = %138
  %140 = load i32, ptr %25, align 4, !tbaa !9
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %25, align 4, !tbaa !9
  br label %85, !llvm.loop !15

142:                                              ; preds = %85
  br label %195

143:                                              ; preds = %78
  %144 = load ptr, ptr %13, align 8, !tbaa !5
  %145 = load i32, ptr %144, align 4, !tbaa !9
  store i32 %145, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %146

146:                                              ; preds = %191, %143
  %147 = load i32, ptr %25, align 4, !tbaa !9
  %148 = load i32, ptr %19, align 4, !tbaa !9
  %149 = icmp sle i32 %147, %148
  br i1 %149, label %150, label %194

150:                                              ; preds = %146
  %151 = load ptr, ptr %12, align 8, !tbaa !5
  %152 = load i32, ptr %151, align 4, !tbaa !9
  store i32 %152, ptr %20, align 4, !tbaa !9
  %153 = load i32, ptr %25, align 4, !tbaa !9
  %154 = add nsw i32 %153, 1
  store i32 %154, ptr %24, align 4, !tbaa !9
  br label %155

155:                                              ; preds = %187, %150
  %156 = load i32, ptr %24, align 4, !tbaa !9
  %157 = load i32, ptr %20, align 4, !tbaa !9
  %158 = icmp sle i32 %156, %157
  br i1 %158, label %159, label %190

159:                                              ; preds = %155
  %160 = load ptr, ptr %14, align 8, !tbaa !5
  %161 = load i32, ptr %24, align 4, !tbaa !9
  %162 = load i32, ptr %25, align 4, !tbaa !9
  %163 = load i32, ptr %17, align 4, !tbaa !9
  %164 = mul nsw i32 %162, %163
  %165 = add nsw i32 %161, %164
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds %struct.doublecomplex, ptr %160, i64 %166
  %168 = call { double, double } @Cd(ptr noundef %167)
  %169 = extractvalue { double, double } %168, 0
  %170 = extractvalue { double, double } %168, 1
  %171 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %172 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  store double %169, ptr %171, align 8
  store double %170, ptr %172, align 8
  %173 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %174 = load double, ptr %173, align 8
  %175 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %176 = load double, ptr %175, align 8
  %177 = call double @cabs(double noundef %174, double noundef %176) #5
  store double %177, ptr %29, align 8, !tbaa !11
  %178 = load double, ptr %27, align 8, !tbaa !11
  %179 = load double, ptr %29, align 8, !tbaa !11
  %180 = fcmp olt double %178, %179
  br i1 %180, label %184, label %181

181:                                              ; preds = %159
  %182 = call i32 @disnan_(ptr noundef %29)
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %184, label %186

184:                                              ; preds = %181, %159
  %185 = load double, ptr %29, align 8, !tbaa !11
  store double %185, ptr %27, align 8, !tbaa !11
  br label %186

186:                                              ; preds = %184, %181
  br label %187

187:                                              ; preds = %186
  %188 = load i32, ptr %24, align 4, !tbaa !9
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %24, align 4, !tbaa !9
  br label %155, !llvm.loop !16

190:                                              ; preds = %155
  br label %191

191:                                              ; preds = %190
  %192 = load i32, ptr %25, align 4, !tbaa !9
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %25, align 4, !tbaa !9
  br label %146, !llvm.loop !17

194:                                              ; preds = %146
  br label %195

195:                                              ; preds = %194, %142
  br label %311

196:                                              ; preds = %74
  store double 0.000000e+00, ptr %27, align 8, !tbaa !11
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = call i32 @lsame_(ptr noundef %197, ptr noundef @.str.1)
  %199 = icmp ne i32 %198, 0
  br i1 %199, label %200, label %259

200:                                              ; preds = %196
  %201 = load ptr, ptr %13, align 8, !tbaa !5
  %202 = load i32, ptr %201, align 4, !tbaa !9
  store i32 %202, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %203

203:                                              ; preds = %255, %200
  %204 = load i32, ptr %25, align 4, !tbaa !9
  %205 = load i32, ptr %19, align 4, !tbaa !9
  %206 = icmp sle i32 %204, %205
  br i1 %206, label %207, label %258

207:                                              ; preds = %203
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = load i32, ptr %25, align 4, !tbaa !9
  %211 = icmp sle i32 %209, %210
  br i1 %211, label %212, label %215

212:                                              ; preds = %207
  %213 = load ptr, ptr %12, align 8, !tbaa !5
  %214 = load i32, ptr %213, align 4, !tbaa !9
  br label %217

215:                                              ; preds = %207
  %216 = load i32, ptr %25, align 4, !tbaa !9
  br label %217

217:                                              ; preds = %215, %212
  %218 = phi i32 [ %214, %212 ], [ %216, %215 ]
  store i32 %218, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %219

219:                                              ; preds = %251, %217
  %220 = load i32, ptr %24, align 4, !tbaa !9
  %221 = load i32, ptr %20, align 4, !tbaa !9
  %222 = icmp sle i32 %220, %221
  br i1 %222, label %223, label %254

223:                                              ; preds = %219
  %224 = load ptr, ptr %14, align 8, !tbaa !5
  %225 = load i32, ptr %24, align 4, !tbaa !9
  %226 = load i32, ptr %25, align 4, !tbaa !9
  %227 = load i32, ptr %17, align 4, !tbaa !9
  %228 = mul nsw i32 %226, %227
  %229 = add nsw i32 %225, %228
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds %struct.doublecomplex, ptr %224, i64 %230
  %232 = call { double, double } @Cd(ptr noundef %231)
  %233 = extractvalue { double, double } %232, 0
  %234 = extractvalue { double, double } %232, 1
  %235 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %236 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  store double %233, ptr %235, align 8
  store double %234, ptr %236, align 8
  %237 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 0
  %238 = load double, ptr %237, align 8
  %239 = getelementptr inbounds { double, double }, ptr %33, i32 0, i32 1
  %240 = load double, ptr %239, align 8
  %241 = call double @cabs(double noundef %238, double noundef %240) #5
  store double %241, ptr %29, align 8, !tbaa !11
  %242 = load double, ptr %27, align 8, !tbaa !11
  %243 = load double, ptr %29, align 8, !tbaa !11
  %244 = fcmp olt double %242, %243
  br i1 %244, label %248, label %245

245:                                              ; preds = %223
  %246 = call i32 @disnan_(ptr noundef %29)
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %248, label %250

248:                                              ; preds = %245, %223
  %249 = load double, ptr %29, align 8, !tbaa !11
  store double %249, ptr %27, align 8, !tbaa !11
  br label %250

250:                                              ; preds = %248, %245
  br label %251

251:                                              ; preds = %250
  %252 = load i32, ptr %24, align 4, !tbaa !9
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %24, align 4, !tbaa !9
  br label %219, !llvm.loop !18

254:                                              ; preds = %219
  br label %255

255:                                              ; preds = %254
  %256 = load i32, ptr %25, align 4, !tbaa !9
  %257 = add nsw i32 %256, 1
  store i32 %257, ptr %25, align 4, !tbaa !9
  br label %203, !llvm.loop !19

258:                                              ; preds = %203
  br label %310

259:                                              ; preds = %196
  %260 = load ptr, ptr %13, align 8, !tbaa !5
  %261 = load i32, ptr %260, align 4, !tbaa !9
  store i32 %261, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %262

262:                                              ; preds = %306, %259
  %263 = load i32, ptr %25, align 4, !tbaa !9
  %264 = load i32, ptr %19, align 4, !tbaa !9
  %265 = icmp sle i32 %263, %264
  br i1 %265, label %266, label %309

266:                                              ; preds = %262
  %267 = load ptr, ptr %12, align 8, !tbaa !5
  %268 = load i32, ptr %267, align 4, !tbaa !9
  store i32 %268, ptr %20, align 4, !tbaa !9
  %269 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %269, ptr %24, align 4, !tbaa !9
  br label %270

270:                                              ; preds = %302, %266
  %271 = load i32, ptr %24, align 4, !tbaa !9
  %272 = load i32, ptr %20, align 4, !tbaa !9
  %273 = icmp sle i32 %271, %272
  br i1 %273, label %274, label %305

274:                                              ; preds = %270
  %275 = load ptr, ptr %14, align 8, !tbaa !5
  %276 = load i32, ptr %24, align 4, !tbaa !9
  %277 = load i32, ptr %25, align 4, !tbaa !9
  %278 = load i32, ptr %17, align 4, !tbaa !9
  %279 = mul nsw i32 %277, %278
  %280 = add nsw i32 %276, %279
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds %struct.doublecomplex, ptr %275, i64 %281
  %283 = call { double, double } @Cd(ptr noundef %282)
  %284 = extractvalue { double, double } %283, 0
  %285 = extractvalue { double, double } %283, 1
  %286 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %287 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  store double %284, ptr %286, align 8
  store double %285, ptr %287, align 8
  %288 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %289 = load double, ptr %288, align 8
  %290 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %291 = load double, ptr %290, align 8
  %292 = call double @cabs(double noundef %289, double noundef %291) #5
  store double %292, ptr %29, align 8, !tbaa !11
  %293 = load double, ptr %27, align 8, !tbaa !11
  %294 = load double, ptr %29, align 8, !tbaa !11
  %295 = fcmp olt double %293, %294
  br i1 %295, label %299, label %296

296:                                              ; preds = %274
  %297 = call i32 @disnan_(ptr noundef %29)
  %298 = icmp ne i32 %297, 0
  br i1 %298, label %299, label %301

299:                                              ; preds = %296, %274
  %300 = load double, ptr %29, align 8, !tbaa !11
  store double %300, ptr %27, align 8, !tbaa !11
  br label %301

301:                                              ; preds = %299, %296
  br label %302

302:                                              ; preds = %301
  %303 = load i32, ptr %24, align 4, !tbaa !9
  %304 = add nsw i32 %303, 1
  store i32 %304, ptr %24, align 4, !tbaa !9
  br label %270, !llvm.loop !20

305:                                              ; preds = %270
  br label %306

306:                                              ; preds = %305
  %307 = load i32, ptr %25, align 4, !tbaa !9
  %308 = add nsw i32 %307, 1
  store i32 %308, ptr %25, align 4, !tbaa !9
  br label %262, !llvm.loop !21

309:                                              ; preds = %262
  br label %310

310:                                              ; preds = %309, %258
  br label %311

311:                                              ; preds = %310, %195
  br label %1080

312:                                              ; preds = %70
  %313 = load ptr, ptr %9, align 8, !tbaa !5
  %314 = call i32 @lsame_(ptr noundef %313, ptr noundef @.str.2)
  %315 = icmp ne i32 %314, 0
  br i1 %315, label %321, label %316

316:                                              ; preds = %312
  %317 = load ptr, ptr %9, align 8, !tbaa !5
  %318 = load i8, ptr %317, align 1, !tbaa !22
  %319 = zext i8 %318 to i32
  %320 = icmp eq i32 %319, 49
  br i1 %320, label %321, label %521

321:                                              ; preds = %316, %312
  store double 0.000000e+00, ptr %27, align 8, !tbaa !11
  %322 = load ptr, ptr %11, align 8, !tbaa !5
  %323 = call i32 @lsame_(ptr noundef %322, ptr noundef @.str.1)
  store i32 %323, ptr %26, align 4, !tbaa !9
  %324 = load ptr, ptr %10, align 8, !tbaa !5
  %325 = call i32 @lsame_(ptr noundef %324, ptr noundef @.str.1)
  %326 = icmp ne i32 %325, 0
  br i1 %326, label %327, label %429

327:                                              ; preds = %321
  %328 = load ptr, ptr %13, align 8, !tbaa !5
  %329 = load i32, ptr %328, align 4, !tbaa !9
  store i32 %329, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %330

330:                                              ; preds = %425, %327
  %331 = load i32, ptr %25, align 4, !tbaa !9
  %332 = load i32, ptr %19, align 4, !tbaa !9
  %333 = icmp sle i32 %331, %332
  br i1 %333, label %334, label %428

334:                                              ; preds = %330
  %335 = load i32, ptr %26, align 4, !tbaa !9
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %337, label %374

337:                                              ; preds = %334
  %338 = load i32, ptr %25, align 4, !tbaa !9
  %339 = load ptr, ptr %12, align 8, !tbaa !5
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = icmp sle i32 %338, %340
  br i1 %341, label %342, label %374

342:                                              ; preds = %337
  store double 1.000000e+00, ptr %29, align 8, !tbaa !11
  %343 = load i32, ptr %25, align 4, !tbaa !9
  %344 = sub nsw i32 %343, 1
  store i32 %344, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %345

345:                                              ; preds = %370, %342
  %346 = load i32, ptr %24, align 4, !tbaa !9
  %347 = load i32, ptr %20, align 4, !tbaa !9
  %348 = icmp sle i32 %346, %347
  br i1 %348, label %349, label %373

349:                                              ; preds = %345
  %350 = load ptr, ptr %14, align 8, !tbaa !5
  %351 = load i32, ptr %24, align 4, !tbaa !9
  %352 = load i32, ptr %25, align 4, !tbaa !9
  %353 = load i32, ptr %17, align 4, !tbaa !9
  %354 = mul nsw i32 %352, %353
  %355 = add nsw i32 %351, %354
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds %struct.doublecomplex, ptr %350, i64 %356
  %358 = call { double, double } @Cd(ptr noundef %357)
  %359 = extractvalue { double, double } %358, 0
  %360 = extractvalue { double, double } %358, 1
  %361 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %362 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  store double %359, ptr %361, align 8
  store double %360, ptr %362, align 8
  %363 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %364 = load double, ptr %363, align 8
  %365 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %366 = load double, ptr %365, align 8
  %367 = call double @cabs(double noundef %364, double noundef %366) #5
  %368 = load double, ptr %29, align 8, !tbaa !11
  %369 = fadd double %368, %367
  store double %369, ptr %29, align 8, !tbaa !11
  br label %370

370:                                              ; preds = %349
  %371 = load i32, ptr %24, align 4, !tbaa !9
  %372 = add nsw i32 %371, 1
  store i32 %372, ptr %24, align 4, !tbaa !9
  br label %345, !llvm.loop !23

373:                                              ; preds = %345
  br label %415

374:                                              ; preds = %337, %334
  store double 0.000000e+00, ptr %29, align 8, !tbaa !11
  %375 = load ptr, ptr %12, align 8, !tbaa !5
  %376 = load i32, ptr %375, align 4, !tbaa !9
  %377 = load i32, ptr %25, align 4, !tbaa !9
  %378 = icmp sle i32 %376, %377
  br i1 %378, label %379, label %382

379:                                              ; preds = %374
  %380 = load ptr, ptr %12, align 8, !tbaa !5
  %381 = load i32, ptr %380, align 4, !tbaa !9
  br label %384

382:                                              ; preds = %374
  %383 = load i32, ptr %25, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %382, %379
  %385 = phi i32 [ %381, %379 ], [ %383, %382 ]
  store i32 %385, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %386

386:                                              ; preds = %411, %384
  %387 = load i32, ptr %24, align 4, !tbaa !9
  %388 = load i32, ptr %20, align 4, !tbaa !9
  %389 = icmp sle i32 %387, %388
  br i1 %389, label %390, label %414

390:                                              ; preds = %386
  %391 = load ptr, ptr %14, align 8, !tbaa !5
  %392 = load i32, ptr %24, align 4, !tbaa !9
  %393 = load i32, ptr %25, align 4, !tbaa !9
  %394 = load i32, ptr %17, align 4, !tbaa !9
  %395 = mul nsw i32 %393, %394
  %396 = add nsw i32 %392, %395
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds %struct.doublecomplex, ptr %391, i64 %397
  %399 = call { double, double } @Cd(ptr noundef %398)
  %400 = extractvalue { double, double } %399, 0
  %401 = extractvalue { double, double } %399, 1
  %402 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %403 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  store double %400, ptr %402, align 8
  store double %401, ptr %403, align 8
  %404 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %405 = load double, ptr %404, align 8
  %406 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %407 = load double, ptr %406, align 8
  %408 = call double @cabs(double noundef %405, double noundef %407) #5
  %409 = load double, ptr %29, align 8, !tbaa !11
  %410 = fadd double %409, %408
  store double %410, ptr %29, align 8, !tbaa !11
  br label %411

411:                                              ; preds = %390
  %412 = load i32, ptr %24, align 4, !tbaa !9
  %413 = add nsw i32 %412, 1
  store i32 %413, ptr %24, align 4, !tbaa !9
  br label %386, !llvm.loop !24

414:                                              ; preds = %386
  br label %415

415:                                              ; preds = %414, %373
  %416 = load double, ptr %27, align 8, !tbaa !11
  %417 = load double, ptr %29, align 8, !tbaa !11
  %418 = fcmp olt double %416, %417
  br i1 %418, label %422, label %419

419:                                              ; preds = %415
  %420 = call i32 @disnan_(ptr noundef %29)
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %422, label %424

422:                                              ; preds = %419, %415
  %423 = load double, ptr %29, align 8, !tbaa !11
  store double %423, ptr %27, align 8, !tbaa !11
  br label %424

424:                                              ; preds = %422, %419
  br label %425

425:                                              ; preds = %424
  %426 = load i32, ptr %25, align 4, !tbaa !9
  %427 = add nsw i32 %426, 1
  store i32 %427, ptr %25, align 4, !tbaa !9
  br label %330, !llvm.loop !25

428:                                              ; preds = %330
  br label %520

429:                                              ; preds = %321
  %430 = load ptr, ptr %13, align 8, !tbaa !5
  %431 = load i32, ptr %430, align 4, !tbaa !9
  store i32 %431, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %432

432:                                              ; preds = %516, %429
  %433 = load i32, ptr %25, align 4, !tbaa !9
  %434 = load i32, ptr %19, align 4, !tbaa !9
  %435 = icmp sle i32 %433, %434
  br i1 %435, label %436, label %519

436:                                              ; preds = %432
  %437 = load i32, ptr %26, align 4, !tbaa !9
  %438 = icmp ne i32 %437, 0
  br i1 %438, label %439, label %473

439:                                              ; preds = %436
  store double 1.000000e+00, ptr %29, align 8, !tbaa !11
  %440 = load ptr, ptr %12, align 8, !tbaa !5
  %441 = load i32, ptr %440, align 4, !tbaa !9
  store i32 %441, ptr %20, align 4, !tbaa !9
  %442 = load i32, ptr %25, align 4, !tbaa !9
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %24, align 4, !tbaa !9
  br label %444

444:                                              ; preds = %469, %439
  %445 = load i32, ptr %24, align 4, !tbaa !9
  %446 = load i32, ptr %20, align 4, !tbaa !9
  %447 = icmp sle i32 %445, %446
  br i1 %447, label %448, label %472

448:                                              ; preds = %444
  %449 = load ptr, ptr %14, align 8, !tbaa !5
  %450 = load i32, ptr %24, align 4, !tbaa !9
  %451 = load i32, ptr %25, align 4, !tbaa !9
  %452 = load i32, ptr %17, align 4, !tbaa !9
  %453 = mul nsw i32 %451, %452
  %454 = add nsw i32 %450, %453
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds %struct.doublecomplex, ptr %449, i64 %455
  %457 = call { double, double } @Cd(ptr noundef %456)
  %458 = extractvalue { double, double } %457, 0
  %459 = extractvalue { double, double } %457, 1
  %460 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %461 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  store double %458, ptr %460, align 8
  store double %459, ptr %461, align 8
  %462 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 0
  %463 = load double, ptr %462, align 8
  %464 = getelementptr inbounds { double, double }, ptr %37, i32 0, i32 1
  %465 = load double, ptr %464, align 8
  %466 = call double @cabs(double noundef %463, double noundef %465) #5
  %467 = load double, ptr %29, align 8, !tbaa !11
  %468 = fadd double %467, %466
  store double %468, ptr %29, align 8, !tbaa !11
  br label %469

469:                                              ; preds = %448
  %470 = load i32, ptr %24, align 4, !tbaa !9
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %24, align 4, !tbaa !9
  br label %444, !llvm.loop !26

472:                                              ; preds = %444
  br label %506

473:                                              ; preds = %436
  store double 0.000000e+00, ptr %29, align 8, !tbaa !11
  %474 = load ptr, ptr %12, align 8, !tbaa !5
  %475 = load i32, ptr %474, align 4, !tbaa !9
  store i32 %475, ptr %20, align 4, !tbaa !9
  %476 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %476, ptr %24, align 4, !tbaa !9
  br label %477

477:                                              ; preds = %502, %473
  %478 = load i32, ptr %24, align 4, !tbaa !9
  %479 = load i32, ptr %20, align 4, !tbaa !9
  %480 = icmp sle i32 %478, %479
  br i1 %480, label %481, label %505

481:                                              ; preds = %477
  %482 = load ptr, ptr %14, align 8, !tbaa !5
  %483 = load i32, ptr %24, align 4, !tbaa !9
  %484 = load i32, ptr %25, align 4, !tbaa !9
  %485 = load i32, ptr %17, align 4, !tbaa !9
  %486 = mul nsw i32 %484, %485
  %487 = add nsw i32 %483, %486
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds %struct.doublecomplex, ptr %482, i64 %488
  %490 = call { double, double } @Cd(ptr noundef %489)
  %491 = extractvalue { double, double } %490, 0
  %492 = extractvalue { double, double } %490, 1
  %493 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %494 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  store double %491, ptr %493, align 8
  store double %492, ptr %494, align 8
  %495 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %496 = load double, ptr %495, align 8
  %497 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %498 = load double, ptr %497, align 8
  %499 = call double @cabs(double noundef %496, double noundef %498) #5
  %500 = load double, ptr %29, align 8, !tbaa !11
  %501 = fadd double %500, %499
  store double %501, ptr %29, align 8, !tbaa !11
  br label %502

502:                                              ; preds = %481
  %503 = load i32, ptr %24, align 4, !tbaa !9
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %24, align 4, !tbaa !9
  br label %477, !llvm.loop !27

505:                                              ; preds = %477
  br label %506

506:                                              ; preds = %505, %472
  %507 = load double, ptr %27, align 8, !tbaa !11
  %508 = load double, ptr %29, align 8, !tbaa !11
  %509 = fcmp olt double %507, %508
  br i1 %509, label %513, label %510

510:                                              ; preds = %506
  %511 = call i32 @disnan_(ptr noundef %29)
  %512 = icmp ne i32 %511, 0
  br i1 %512, label %513, label %515

513:                                              ; preds = %510, %506
  %514 = load double, ptr %29, align 8, !tbaa !11
  store double %514, ptr %27, align 8, !tbaa !11
  br label %515

515:                                              ; preds = %513, %510
  br label %516

516:                                              ; preds = %515
  %517 = load i32, ptr %25, align 4, !tbaa !9
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %25, align 4, !tbaa !9
  br label %432, !llvm.loop !28

519:                                              ; preds = %432
  br label %520

520:                                              ; preds = %519, %428
  br label %1079

521:                                              ; preds = %316
  %522 = load ptr, ptr %9, align 8, !tbaa !5
  %523 = call i32 @lsame_(ptr noundef %522, ptr noundef @.str.3)
  %524 = icmp ne i32 %523, 0
  br i1 %524, label %525, label %865

525:                                              ; preds = %521
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = call i32 @lsame_(ptr noundef %526, ptr noundef @.str.1)
  %528 = icmp ne i32 %527, 0
  br i1 %528, label %529, label %678

529:                                              ; preds = %525
  %530 = load ptr, ptr %11, align 8, !tbaa !5
  %531 = call i32 @lsame_(ptr noundef %530, ptr noundef @.str.1)
  %532 = icmp ne i32 %531, 0
  br i1 %532, label %533, label %606

533:                                              ; preds = %529
  %534 = load ptr, ptr %12, align 8, !tbaa !5
  %535 = load i32, ptr %534, align 4, !tbaa !9
  store i32 %535, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %536

536:                                              ; preds = %545, %533
  %537 = load i32, ptr %24, align 4, !tbaa !9
  %538 = load i32, ptr %19, align 4, !tbaa !9
  %539 = icmp sle i32 %537, %538
  br i1 %539, label %540, label %548

540:                                              ; preds = %536
  %541 = load ptr, ptr %16, align 8, !tbaa !5
  %542 = load i32, ptr %24, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds double, ptr %541, i64 %543
  store double 1.000000e+00, ptr %544, align 8, !tbaa !11
  br label %545

545:                                              ; preds = %540
  %546 = load i32, ptr %24, align 4, !tbaa !9
  %547 = add nsw i32 %546, 1
  store i32 %547, ptr %24, align 4, !tbaa !9
  br label %536, !llvm.loop !29

548:                                              ; preds = %536
  %549 = load ptr, ptr %13, align 8, !tbaa !5
  %550 = load i32, ptr %549, align 4, !tbaa !9
  store i32 %550, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %551

551:                                              ; preds = %602, %548
  %552 = load i32, ptr %25, align 4, !tbaa !9
  %553 = load i32, ptr %19, align 4, !tbaa !9
  %554 = icmp sle i32 %552, %553
  br i1 %554, label %555, label %605

555:                                              ; preds = %551
  %556 = load ptr, ptr %12, align 8, !tbaa !5
  %557 = load i32, ptr %556, align 4, !tbaa !9
  store i32 %557, ptr %21, align 4, !tbaa !9
  %558 = load i32, ptr %25, align 4, !tbaa !9
  %559 = sub nsw i32 %558, 1
  store i32 %559, ptr %22, align 4, !tbaa !9
  %560 = load i32, ptr %21, align 4, !tbaa !9
  %561 = load i32, ptr %22, align 4, !tbaa !9
  %562 = icmp sle i32 %560, %561
  br i1 %562, label %563, label %565

563:                                              ; preds = %555
  %564 = load i32, ptr %21, align 4, !tbaa !9
  br label %567

565:                                              ; preds = %555
  %566 = load i32, ptr %22, align 4, !tbaa !9
  br label %567

567:                                              ; preds = %565, %563
  %568 = phi i32 [ %564, %563 ], [ %566, %565 ]
  store i32 %568, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %569

569:                                              ; preds = %598, %567
  %570 = load i32, ptr %24, align 4, !tbaa !9
  %571 = load i32, ptr %20, align 4, !tbaa !9
  %572 = icmp sle i32 %570, %571
  br i1 %572, label %573, label %601

573:                                              ; preds = %569
  %574 = load ptr, ptr %14, align 8, !tbaa !5
  %575 = load i32, ptr %24, align 4, !tbaa !9
  %576 = load i32, ptr %25, align 4, !tbaa !9
  %577 = load i32, ptr %17, align 4, !tbaa !9
  %578 = mul nsw i32 %576, %577
  %579 = add nsw i32 %575, %578
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds %struct.doublecomplex, ptr %574, i64 %580
  %582 = call { double, double } @Cd(ptr noundef %581)
  %583 = extractvalue { double, double } %582, 0
  %584 = extractvalue { double, double } %582, 1
  %585 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %586 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  store double %583, ptr %585, align 8
  store double %584, ptr %586, align 8
  %587 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %588 = load double, ptr %587, align 8
  %589 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %590 = load double, ptr %589, align 8
  %591 = call double @cabs(double noundef %588, double noundef %590) #5
  %592 = load ptr, ptr %16, align 8, !tbaa !5
  %593 = load i32, ptr %24, align 4, !tbaa !9
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds double, ptr %592, i64 %594
  %596 = load double, ptr %595, align 8, !tbaa !11
  %597 = fadd double %596, %591
  store double %597, ptr %595, align 8, !tbaa !11
  br label %598

598:                                              ; preds = %573
  %599 = load i32, ptr %24, align 4, !tbaa !9
  %600 = add nsw i32 %599, 1
  store i32 %600, ptr %24, align 4, !tbaa !9
  br label %569, !llvm.loop !30

601:                                              ; preds = %569
  br label %602

602:                                              ; preds = %601
  %603 = load i32, ptr %25, align 4, !tbaa !9
  %604 = add nsw i32 %603, 1
  store i32 %604, ptr %25, align 4, !tbaa !9
  br label %551, !llvm.loop !31

605:                                              ; preds = %551
  br label %677

606:                                              ; preds = %529
  %607 = load ptr, ptr %12, align 8, !tbaa !5
  %608 = load i32, ptr %607, align 4, !tbaa !9
  store i32 %608, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %609

609:                                              ; preds = %618, %606
  %610 = load i32, ptr %24, align 4, !tbaa !9
  %611 = load i32, ptr %19, align 4, !tbaa !9
  %612 = icmp sle i32 %610, %611
  br i1 %612, label %613, label %621

613:                                              ; preds = %609
  %614 = load ptr, ptr %16, align 8, !tbaa !5
  %615 = load i32, ptr %24, align 4, !tbaa !9
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds double, ptr %614, i64 %616
  store double 0.000000e+00, ptr %617, align 8, !tbaa !11
  br label %618

618:                                              ; preds = %613
  %619 = load i32, ptr %24, align 4, !tbaa !9
  %620 = add nsw i32 %619, 1
  store i32 %620, ptr %24, align 4, !tbaa !9
  br label %609, !llvm.loop !32

621:                                              ; preds = %609
  %622 = load ptr, ptr %13, align 8, !tbaa !5
  %623 = load i32, ptr %622, align 4, !tbaa !9
  store i32 %623, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %624

624:                                              ; preds = %673, %621
  %625 = load i32, ptr %25, align 4, !tbaa !9
  %626 = load i32, ptr %19, align 4, !tbaa !9
  %627 = icmp sle i32 %625, %626
  br i1 %627, label %628, label %676

628:                                              ; preds = %624
  %629 = load ptr, ptr %12, align 8, !tbaa !5
  %630 = load i32, ptr %629, align 4, !tbaa !9
  %631 = load i32, ptr %25, align 4, !tbaa !9
  %632 = icmp sle i32 %630, %631
  br i1 %632, label %633, label %636

633:                                              ; preds = %628
  %634 = load ptr, ptr %12, align 8, !tbaa !5
  %635 = load i32, ptr %634, align 4, !tbaa !9
  br label %638

636:                                              ; preds = %628
  %637 = load i32, ptr %25, align 4, !tbaa !9
  br label %638

638:                                              ; preds = %636, %633
  %639 = phi i32 [ %635, %633 ], [ %637, %636 ]
  store i32 %639, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %640

640:                                              ; preds = %669, %638
  %641 = load i32, ptr %24, align 4, !tbaa !9
  %642 = load i32, ptr %20, align 4, !tbaa !9
  %643 = icmp sle i32 %641, %642
  br i1 %643, label %644, label %672

644:                                              ; preds = %640
  %645 = load ptr, ptr %14, align 8, !tbaa !5
  %646 = load i32, ptr %24, align 4, !tbaa !9
  %647 = load i32, ptr %25, align 4, !tbaa !9
  %648 = load i32, ptr %17, align 4, !tbaa !9
  %649 = mul nsw i32 %647, %648
  %650 = add nsw i32 %646, %649
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds %struct.doublecomplex, ptr %645, i64 %651
  %653 = call { double, double } @Cd(ptr noundef %652)
  %654 = extractvalue { double, double } %653, 0
  %655 = extractvalue { double, double } %653, 1
  %656 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %657 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  store double %654, ptr %656, align 8
  store double %655, ptr %657, align 8
  %658 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %659 = load double, ptr %658, align 8
  %660 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %661 = load double, ptr %660, align 8
  %662 = call double @cabs(double noundef %659, double noundef %661) #5
  %663 = load ptr, ptr %16, align 8, !tbaa !5
  %664 = load i32, ptr %24, align 4, !tbaa !9
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds double, ptr %663, i64 %665
  %667 = load double, ptr %666, align 8, !tbaa !11
  %668 = fadd double %667, %662
  store double %668, ptr %666, align 8, !tbaa !11
  br label %669

669:                                              ; preds = %644
  %670 = load i32, ptr %24, align 4, !tbaa !9
  %671 = add nsw i32 %670, 1
  store i32 %671, ptr %24, align 4, !tbaa !9
  br label %640, !llvm.loop !33

672:                                              ; preds = %640
  br label %673

673:                                              ; preds = %672
  %674 = load i32, ptr %25, align 4, !tbaa !9
  %675 = add nsw i32 %674, 1
  store i32 %675, ptr %25, align 4, !tbaa !9
  br label %624, !llvm.loop !34

676:                                              ; preds = %624
  br label %677

677:                                              ; preds = %676, %605
  br label %839

678:                                              ; preds = %525
  %679 = load ptr, ptr %11, align 8, !tbaa !5
  %680 = call i32 @lsame_(ptr noundef %679, ptr noundef @.str.1)
  %681 = icmp ne i32 %680, 0
  br i1 %681, label %682, label %775

682:                                              ; preds = %678
  %683 = load ptr, ptr %12, align 8, !tbaa !5
  %684 = load i32, ptr %683, align 4, !tbaa !9
  %685 = load ptr, ptr %13, align 8, !tbaa !5
  %686 = load i32, ptr %685, align 4, !tbaa !9
  %687 = icmp sle i32 %684, %686
  br i1 %687, label %688, label %691

688:                                              ; preds = %682
  %689 = load ptr, ptr %12, align 8, !tbaa !5
  %690 = load i32, ptr %689, align 4, !tbaa !9
  br label %694

691:                                              ; preds = %682
  %692 = load ptr, ptr %13, align 8, !tbaa !5
  %693 = load i32, ptr %692, align 4, !tbaa !9
  br label %694

694:                                              ; preds = %691, %688
  %695 = phi i32 [ %690, %688 ], [ %693, %691 ]
  store i32 %695, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %696

696:                                              ; preds = %705, %694
  %697 = load i32, ptr %24, align 4, !tbaa !9
  %698 = load i32, ptr %19, align 4, !tbaa !9
  %699 = icmp sle i32 %697, %698
  br i1 %699, label %700, label %708

700:                                              ; preds = %696
  %701 = load ptr, ptr %16, align 8, !tbaa !5
  %702 = load i32, ptr %24, align 4, !tbaa !9
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds double, ptr %701, i64 %703
  store double 1.000000e+00, ptr %704, align 8, !tbaa !11
  br label %705

705:                                              ; preds = %700
  %706 = load i32, ptr %24, align 4, !tbaa !9
  %707 = add nsw i32 %706, 1
  store i32 %707, ptr %24, align 4, !tbaa !9
  br label %696, !llvm.loop !35

708:                                              ; preds = %696
  %709 = load ptr, ptr %12, align 8, !tbaa !5
  %710 = load i32, ptr %709, align 4, !tbaa !9
  store i32 %710, ptr %19, align 4, !tbaa !9
  %711 = load ptr, ptr %13, align 8, !tbaa !5
  %712 = load i32, ptr %711, align 4, !tbaa !9
  %713 = add nsw i32 %712, 1
  store i32 %713, ptr %24, align 4, !tbaa !9
  br label %714

714:                                              ; preds = %723, %708
  %715 = load i32, ptr %24, align 4, !tbaa !9
  %716 = load i32, ptr %19, align 4, !tbaa !9
  %717 = icmp sle i32 %715, %716
  br i1 %717, label %718, label %726

718:                                              ; preds = %714
  %719 = load ptr, ptr %16, align 8, !tbaa !5
  %720 = load i32, ptr %24, align 4, !tbaa !9
  %721 = sext i32 %720 to i64
  %722 = getelementptr inbounds double, ptr %719, i64 %721
  store double 0.000000e+00, ptr %722, align 8, !tbaa !11
  br label %723

723:                                              ; preds = %718
  %724 = load i32, ptr %24, align 4, !tbaa !9
  %725 = add nsw i32 %724, 1
  store i32 %725, ptr %24, align 4, !tbaa !9
  br label %714, !llvm.loop !36

726:                                              ; preds = %714
  %727 = load ptr, ptr %13, align 8, !tbaa !5
  %728 = load i32, ptr %727, align 4, !tbaa !9
  store i32 %728, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %729

729:                                              ; preds = %771, %726
  %730 = load i32, ptr %25, align 4, !tbaa !9
  %731 = load i32, ptr %19, align 4, !tbaa !9
  %732 = icmp sle i32 %730, %731
  br i1 %732, label %733, label %774

733:                                              ; preds = %729
  %734 = load ptr, ptr %12, align 8, !tbaa !5
  %735 = load i32, ptr %734, align 4, !tbaa !9
  store i32 %735, ptr %20, align 4, !tbaa !9
  %736 = load i32, ptr %25, align 4, !tbaa !9
  %737 = add nsw i32 %736, 1
  store i32 %737, ptr %24, align 4, !tbaa !9
  br label %738

738:                                              ; preds = %767, %733
  %739 = load i32, ptr %24, align 4, !tbaa !9
  %740 = load i32, ptr %20, align 4, !tbaa !9
  %741 = icmp sle i32 %739, %740
  br i1 %741, label %742, label %770

742:                                              ; preds = %738
  %743 = load ptr, ptr %14, align 8, !tbaa !5
  %744 = load i32, ptr %24, align 4, !tbaa !9
  %745 = load i32, ptr %25, align 4, !tbaa !9
  %746 = load i32, ptr %17, align 4, !tbaa !9
  %747 = mul nsw i32 %745, %746
  %748 = add nsw i32 %744, %747
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds %struct.doublecomplex, ptr %743, i64 %749
  %751 = call { double, double } @Cd(ptr noundef %750)
  %752 = extractvalue { double, double } %751, 0
  %753 = extractvalue { double, double } %751, 1
  %754 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %755 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  store double %752, ptr %754, align 8
  store double %753, ptr %755, align 8
  %756 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %757 = load double, ptr %756, align 8
  %758 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %759 = load double, ptr %758, align 8
  %760 = call double @cabs(double noundef %757, double noundef %759) #5
  %761 = load ptr, ptr %16, align 8, !tbaa !5
  %762 = load i32, ptr %24, align 4, !tbaa !9
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds double, ptr %761, i64 %763
  %765 = load double, ptr %764, align 8, !tbaa !11
  %766 = fadd double %765, %760
  store double %766, ptr %764, align 8, !tbaa !11
  br label %767

767:                                              ; preds = %742
  %768 = load i32, ptr %24, align 4, !tbaa !9
  %769 = add nsw i32 %768, 1
  store i32 %769, ptr %24, align 4, !tbaa !9
  br label %738, !llvm.loop !37

770:                                              ; preds = %738
  br label %771

771:                                              ; preds = %770
  %772 = load i32, ptr %25, align 4, !tbaa !9
  %773 = add nsw i32 %772, 1
  store i32 %773, ptr %25, align 4, !tbaa !9
  br label %729, !llvm.loop !38

774:                                              ; preds = %729
  br label %838

775:                                              ; preds = %678
  %776 = load ptr, ptr %12, align 8, !tbaa !5
  %777 = load i32, ptr %776, align 4, !tbaa !9
  store i32 %777, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %778

778:                                              ; preds = %787, %775
  %779 = load i32, ptr %24, align 4, !tbaa !9
  %780 = load i32, ptr %19, align 4, !tbaa !9
  %781 = icmp sle i32 %779, %780
  br i1 %781, label %782, label %790

782:                                              ; preds = %778
  %783 = load ptr, ptr %16, align 8, !tbaa !5
  %784 = load i32, ptr %24, align 4, !tbaa !9
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds double, ptr %783, i64 %785
  store double 0.000000e+00, ptr %786, align 8, !tbaa !11
  br label %787

787:                                              ; preds = %782
  %788 = load i32, ptr %24, align 4, !tbaa !9
  %789 = add nsw i32 %788, 1
  store i32 %789, ptr %24, align 4, !tbaa !9
  br label %778, !llvm.loop !39

790:                                              ; preds = %778
  %791 = load ptr, ptr %13, align 8, !tbaa !5
  %792 = load i32, ptr %791, align 4, !tbaa !9
  store i32 %792, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %793

793:                                              ; preds = %834, %790
  %794 = load i32, ptr %25, align 4, !tbaa !9
  %795 = load i32, ptr %19, align 4, !tbaa !9
  %796 = icmp sle i32 %794, %795
  br i1 %796, label %797, label %837

797:                                              ; preds = %793
  %798 = load ptr, ptr %12, align 8, !tbaa !5
  %799 = load i32, ptr %798, align 4, !tbaa !9
  store i32 %799, ptr %20, align 4, !tbaa !9
  %800 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %800, ptr %24, align 4, !tbaa !9
  br label %801

801:                                              ; preds = %830, %797
  %802 = load i32, ptr %24, align 4, !tbaa !9
  %803 = load i32, ptr %20, align 4, !tbaa !9
  %804 = icmp sle i32 %802, %803
  br i1 %804, label %805, label %833

805:                                              ; preds = %801
  %806 = load ptr, ptr %14, align 8, !tbaa !5
  %807 = load i32, ptr %24, align 4, !tbaa !9
  %808 = load i32, ptr %25, align 4, !tbaa !9
  %809 = load i32, ptr %17, align 4, !tbaa !9
  %810 = mul nsw i32 %808, %809
  %811 = add nsw i32 %807, %810
  %812 = sext i32 %811 to i64
  %813 = getelementptr inbounds %struct.doublecomplex, ptr %806, i64 %812
  %814 = call { double, double } @Cd(ptr noundef %813)
  %815 = extractvalue { double, double } %814, 0
  %816 = extractvalue { double, double } %814, 1
  %817 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %818 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  store double %815, ptr %817, align 8
  store double %816, ptr %818, align 8
  %819 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %820 = load double, ptr %819, align 8
  %821 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %822 = load double, ptr %821, align 8
  %823 = call double @cabs(double noundef %820, double noundef %822) #5
  %824 = load ptr, ptr %16, align 8, !tbaa !5
  %825 = load i32, ptr %24, align 4, !tbaa !9
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds double, ptr %824, i64 %826
  %828 = load double, ptr %827, align 8, !tbaa !11
  %829 = fadd double %828, %823
  store double %829, ptr %827, align 8, !tbaa !11
  br label %830

830:                                              ; preds = %805
  %831 = load i32, ptr %24, align 4, !tbaa !9
  %832 = add nsw i32 %831, 1
  store i32 %832, ptr %24, align 4, !tbaa !9
  br label %801, !llvm.loop !40

833:                                              ; preds = %801
  br label %834

834:                                              ; preds = %833
  %835 = load i32, ptr %25, align 4, !tbaa !9
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %25, align 4, !tbaa !9
  br label %793, !llvm.loop !41

837:                                              ; preds = %793
  br label %838

838:                                              ; preds = %837, %774
  br label %839

839:                                              ; preds = %838, %677
  store double 0.000000e+00, ptr %27, align 8, !tbaa !11
  %840 = load ptr, ptr %12, align 8, !tbaa !5
  %841 = load i32, ptr %840, align 4, !tbaa !9
  store i32 %841, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %842

842:                                              ; preds = %861, %839
  %843 = load i32, ptr %24, align 4, !tbaa !9
  %844 = load i32, ptr %19, align 4, !tbaa !9
  %845 = icmp sle i32 %843, %844
  br i1 %845, label %846, label %864

846:                                              ; preds = %842
  %847 = load ptr, ptr %16, align 8, !tbaa !5
  %848 = load i32, ptr %24, align 4, !tbaa !9
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %847, i64 %849
  %851 = load double, ptr %850, align 8, !tbaa !11
  store double %851, ptr %29, align 8, !tbaa !11
  %852 = load double, ptr %27, align 8, !tbaa !11
  %853 = load double, ptr %29, align 8, !tbaa !11
  %854 = fcmp olt double %852, %853
  br i1 %854, label %858, label %855

855:                                              ; preds = %846
  %856 = call i32 @disnan_(ptr noundef %29)
  %857 = icmp ne i32 %856, 0
  br i1 %857, label %858, label %860

858:                                              ; preds = %855, %846
  %859 = load double, ptr %29, align 8, !tbaa !11
  store double %859, ptr %27, align 8, !tbaa !11
  br label %860

860:                                              ; preds = %858, %855
  br label %861

861:                                              ; preds = %860
  %862 = load i32, ptr %24, align 4, !tbaa !9
  %863 = add nsw i32 %862, 1
  store i32 %863, ptr %24, align 4, !tbaa !9
  br label %842, !llvm.loop !42

864:                                              ; preds = %842
  br label %1078

865:                                              ; preds = %521
  %866 = load ptr, ptr %9, align 8, !tbaa !5
  %867 = call i32 @lsame_(ptr noundef %866, ptr noundef @.str.4)
  %868 = icmp ne i32 %867, 0
  br i1 %868, label %873, label %869

869:                                              ; preds = %865
  %870 = load ptr, ptr %9, align 8, !tbaa !5
  %871 = call i32 @lsame_(ptr noundef %870, ptr noundef @.str.5)
  %872 = icmp ne i32 %871, 0
  br i1 %872, label %873, label %1077

873:                                              ; preds = %869, %865
  %874 = load ptr, ptr %10, align 8, !tbaa !5
  %875 = call i32 @lsame_(ptr noundef %874, ptr noundef @.str.1)
  %876 = icmp ne i32 %875, 0
  br i1 %876, label %877, label %974

877:                                              ; preds = %873
  %878 = load ptr, ptr %11, align 8, !tbaa !5
  %879 = call i32 @lsame_(ptr noundef %878, ptr noundef @.str.1)
  %880 = icmp ne i32 %879, 0
  br i1 %880, label %881, label %935

881:                                              ; preds = %877
  %882 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  store double 1.000000e+00, ptr %882, align 16, !tbaa !11
  %883 = load ptr, ptr %12, align 8, !tbaa !5
  %884 = load i32, ptr %883, align 4, !tbaa !9
  %885 = load ptr, ptr %13, align 8, !tbaa !5
  %886 = load i32, ptr %885, align 4, !tbaa !9
  %887 = icmp sle i32 %884, %886
  br i1 %887, label %888, label %891

888:                                              ; preds = %881
  %889 = load ptr, ptr %12, align 8, !tbaa !5
  %890 = load i32, ptr %889, align 4, !tbaa !9
  br label %894

891:                                              ; preds = %881
  %892 = load ptr, ptr %13, align 8, !tbaa !5
  %893 = load i32, ptr %892, align 4, !tbaa !9
  br label %894

894:                                              ; preds = %891, %888
  %895 = phi i32 [ %890, %888 ], [ %893, %891 ]
  %896 = sitofp i32 %895 to double
  %897 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 1
  store double %896, ptr %897, align 8, !tbaa !11
  %898 = load ptr, ptr %13, align 8, !tbaa !5
  %899 = load i32, ptr %898, align 4, !tbaa !9
  store i32 %899, ptr %19, align 4, !tbaa !9
  store i32 2, ptr %25, align 4, !tbaa !9
  br label %900

900:                                              ; preds = %931, %894
  %901 = load i32, ptr %25, align 4, !tbaa !9
  %902 = load i32, ptr %19, align 4, !tbaa !9
  %903 = icmp sle i32 %901, %902
  br i1 %903, label %904, label %934

904:                                              ; preds = %900
  %905 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  store double 0.000000e+00, ptr %905, align 16, !tbaa !11
  %906 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  store double 1.000000e+00, ptr %906, align 8, !tbaa !11
  %907 = load ptr, ptr %12, align 8, !tbaa !5
  %908 = load i32, ptr %907, align 4, !tbaa !9
  store i32 %908, ptr %21, align 4, !tbaa !9
  %909 = load i32, ptr %25, align 4, !tbaa !9
  %910 = sub nsw i32 %909, 1
  store i32 %910, ptr %22, align 4, !tbaa !9
  %911 = load i32, ptr %21, align 4, !tbaa !9
  %912 = load i32, ptr %22, align 4, !tbaa !9
  %913 = icmp sle i32 %911, %912
  br i1 %913, label %914, label %916

914:                                              ; preds = %904
  %915 = load i32, ptr %21, align 4, !tbaa !9
  br label %918

916:                                              ; preds = %904
  %917 = load i32, ptr %22, align 4, !tbaa !9
  br label %918

918:                                              ; preds = %916, %914
  %919 = phi i32 [ %915, %914 ], [ %917, %916 ]
  store i32 %919, ptr %20, align 4, !tbaa !9
  %920 = load ptr, ptr %14, align 8, !tbaa !5
  %921 = load i32, ptr %25, align 4, !tbaa !9
  %922 = load i32, ptr %17, align 4, !tbaa !9
  %923 = mul nsw i32 %921, %922
  %924 = add nsw i32 %923, 1
  %925 = sext i32 %924 to i64
  %926 = getelementptr inbounds %struct.doublecomplex, ptr %920, i64 %925
  %927 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  %928 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  call void @zlassq_(ptr noundef %20, ptr noundef %926, ptr noundef @c__1, ptr noundef %927, ptr noundef %928)
  %929 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  %930 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  call void @dcombssq_(ptr noundef %929, ptr noundef %930)
  br label %931

931:                                              ; preds = %918
  %932 = load i32, ptr %25, align 4, !tbaa !9
  %933 = add nsw i32 %932, 1
  store i32 %933, ptr %25, align 4, !tbaa !9
  br label %900, !llvm.loop !43

934:                                              ; preds = %900
  br label %973

935:                                              ; preds = %877
  %936 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  store double 0.000000e+00, ptr %936, align 16, !tbaa !11
  %937 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 1
  store double 1.000000e+00, ptr %937, align 8, !tbaa !11
  %938 = load ptr, ptr %13, align 8, !tbaa !5
  %939 = load i32, ptr %938, align 4, !tbaa !9
  store i32 %939, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %940

940:                                              ; preds = %969, %935
  %941 = load i32, ptr %25, align 4, !tbaa !9
  %942 = load i32, ptr %19, align 4, !tbaa !9
  %943 = icmp sle i32 %941, %942
  br i1 %943, label %944, label %972

944:                                              ; preds = %940
  %945 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  store double 0.000000e+00, ptr %945, align 16, !tbaa !11
  %946 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  store double 1.000000e+00, ptr %946, align 8, !tbaa !11
  %947 = load ptr, ptr %12, align 8, !tbaa !5
  %948 = load i32, ptr %947, align 4, !tbaa !9
  %949 = load i32, ptr %25, align 4, !tbaa !9
  %950 = icmp sle i32 %948, %949
  br i1 %950, label %951, label %954

951:                                              ; preds = %944
  %952 = load ptr, ptr %12, align 8, !tbaa !5
  %953 = load i32, ptr %952, align 4, !tbaa !9
  br label %956

954:                                              ; preds = %944
  %955 = load i32, ptr %25, align 4, !tbaa !9
  br label %956

956:                                              ; preds = %954, %951
  %957 = phi i32 [ %953, %951 ], [ %955, %954 ]
  store i32 %957, ptr %20, align 4, !tbaa !9
  %958 = load ptr, ptr %14, align 8, !tbaa !5
  %959 = load i32, ptr %25, align 4, !tbaa !9
  %960 = load i32, ptr %17, align 4, !tbaa !9
  %961 = mul nsw i32 %959, %960
  %962 = add nsw i32 %961, 1
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds %struct.doublecomplex, ptr %958, i64 %963
  %965 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  %966 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  call void @zlassq_(ptr noundef %20, ptr noundef %964, ptr noundef @c__1, ptr noundef %965, ptr noundef %966)
  %967 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  %968 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  call void @dcombssq_(ptr noundef %967, ptr noundef %968)
  br label %969

969:                                              ; preds = %956
  %970 = load i32, ptr %25, align 4, !tbaa !9
  %971 = add nsw i32 %970, 1
  store i32 %971, ptr %25, align 4, !tbaa !9
  br label %940, !llvm.loop !44

972:                                              ; preds = %940
  br label %973

973:                                              ; preds = %972, %934
  br label %1070

974:                                              ; preds = %873
  %975 = load ptr, ptr %11, align 8, !tbaa !5
  %976 = call i32 @lsame_(ptr noundef %975, ptr noundef @.str.1)
  %977 = icmp ne i32 %976, 0
  br i1 %977, label %978, label %1036

978:                                              ; preds = %974
  %979 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  store double 1.000000e+00, ptr %979, align 16, !tbaa !11
  %980 = load ptr, ptr %12, align 8, !tbaa !5
  %981 = load i32, ptr %980, align 4, !tbaa !9
  %982 = load ptr, ptr %13, align 8, !tbaa !5
  %983 = load i32, ptr %982, align 4, !tbaa !9
  %984 = icmp sle i32 %981, %983
  br i1 %984, label %985, label %988

985:                                              ; preds = %978
  %986 = load ptr, ptr %12, align 8, !tbaa !5
  %987 = load i32, ptr %986, align 4, !tbaa !9
  br label %991

988:                                              ; preds = %978
  %989 = load ptr, ptr %13, align 8, !tbaa !5
  %990 = load i32, ptr %989, align 4, !tbaa !9
  br label %991

991:                                              ; preds = %988, %985
  %992 = phi i32 [ %987, %985 ], [ %990, %988 ]
  %993 = sitofp i32 %992 to double
  %994 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 1
  store double %993, ptr %994, align 8, !tbaa !11
  %995 = load ptr, ptr %13, align 8, !tbaa !5
  %996 = load i32, ptr %995, align 4, !tbaa !9
  store i32 %996, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %997

997:                                              ; preds = %1032, %991
  %998 = load i32, ptr %25, align 4, !tbaa !9
  %999 = load i32, ptr %19, align 4, !tbaa !9
  %1000 = icmp sle i32 %998, %999
  br i1 %1000, label %1001, label %1035

1001:                                             ; preds = %997
  %1002 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  store double 0.000000e+00, ptr %1002, align 16, !tbaa !11
  %1003 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  store double 1.000000e+00, ptr %1003, align 8, !tbaa !11
  %1004 = load ptr, ptr %12, align 8, !tbaa !5
  %1005 = load i32, ptr %1004, align 4, !tbaa !9
  %1006 = load i32, ptr %25, align 4, !tbaa !9
  %1007 = sub nsw i32 %1005, %1006
  store i32 %1007, ptr %20, align 4, !tbaa !9
  %1008 = load ptr, ptr %12, align 8, !tbaa !5
  %1009 = load i32, ptr %1008, align 4, !tbaa !9
  store i32 %1009, ptr %21, align 4, !tbaa !9
  %1010 = load i32, ptr %25, align 4, !tbaa !9
  %1011 = add nsw i32 %1010, 1
  store i32 %1011, ptr %22, align 4, !tbaa !9
  %1012 = load ptr, ptr %14, align 8, !tbaa !5
  %1013 = load i32, ptr %21, align 4, !tbaa !9
  %1014 = load i32, ptr %22, align 4, !tbaa !9
  %1015 = icmp sle i32 %1013, %1014
  br i1 %1015, label %1016, label %1018

1016:                                             ; preds = %1001
  %1017 = load i32, ptr %21, align 4, !tbaa !9
  br label %1020

1018:                                             ; preds = %1001
  %1019 = load i32, ptr %22, align 4, !tbaa !9
  br label %1020

1020:                                             ; preds = %1018, %1016
  %1021 = phi i32 [ %1017, %1016 ], [ %1019, %1018 ]
  %1022 = load i32, ptr %25, align 4, !tbaa !9
  %1023 = load i32, ptr %17, align 4, !tbaa !9
  %1024 = mul nsw i32 %1022, %1023
  %1025 = add nsw i32 %1021, %1024
  %1026 = sext i32 %1025 to i64
  %1027 = getelementptr inbounds %struct.doublecomplex, ptr %1012, i64 %1026
  %1028 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  %1029 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  call void @zlassq_(ptr noundef %20, ptr noundef %1027, ptr noundef @c__1, ptr noundef %1028, ptr noundef %1029)
  %1030 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  %1031 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  call void @dcombssq_(ptr noundef %1030, ptr noundef %1031)
  br label %1032

1032:                                             ; preds = %1020
  %1033 = load i32, ptr %25, align 4, !tbaa !9
  %1034 = add nsw i32 %1033, 1
  store i32 %1034, ptr %25, align 4, !tbaa !9
  br label %997, !llvm.loop !45

1035:                                             ; preds = %997
  br label %1069

1036:                                             ; preds = %974
  %1037 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  store double 0.000000e+00, ptr %1037, align 16, !tbaa !11
  %1038 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 1
  store double 1.000000e+00, ptr %1038, align 8, !tbaa !11
  %1039 = load ptr, ptr %13, align 8, !tbaa !5
  %1040 = load i32, ptr %1039, align 4, !tbaa !9
  store i32 %1040, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %1041

1041:                                             ; preds = %1065, %1036
  %1042 = load i32, ptr %25, align 4, !tbaa !9
  %1043 = load i32, ptr %19, align 4, !tbaa !9
  %1044 = icmp sle i32 %1042, %1043
  br i1 %1044, label %1045, label %1068

1045:                                             ; preds = %1041
  %1046 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  store double 0.000000e+00, ptr %1046, align 16, !tbaa !11
  %1047 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  store double 1.000000e+00, ptr %1047, align 8, !tbaa !11
  %1048 = load ptr, ptr %12, align 8, !tbaa !5
  %1049 = load i32, ptr %1048, align 4, !tbaa !9
  %1050 = load i32, ptr %25, align 4, !tbaa !9
  %1051 = sub nsw i32 %1049, %1050
  %1052 = add nsw i32 %1051, 1
  store i32 %1052, ptr %20, align 4, !tbaa !9
  %1053 = load ptr, ptr %14, align 8, !tbaa !5
  %1054 = load i32, ptr %25, align 4, !tbaa !9
  %1055 = load i32, ptr %25, align 4, !tbaa !9
  %1056 = load i32, ptr %17, align 4, !tbaa !9
  %1057 = mul nsw i32 %1055, %1056
  %1058 = add nsw i32 %1054, %1057
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds %struct.doublecomplex, ptr %1053, i64 %1059
  %1061 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  %1062 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 1
  call void @zlassq_(ptr noundef %20, ptr noundef %1060, ptr noundef @c__1, ptr noundef %1061, ptr noundef %1062)
  %1063 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  %1064 = getelementptr inbounds [2 x double], ptr %28, i64 0, i64 0
  call void @dcombssq_(ptr noundef %1063, ptr noundef %1064)
  br label %1065

1065:                                             ; preds = %1045
  %1066 = load i32, ptr %25, align 4, !tbaa !9
  %1067 = add nsw i32 %1066, 1
  store i32 %1067, ptr %25, align 4, !tbaa !9
  br label %1041, !llvm.loop !46

1068:                                             ; preds = %1041
  br label %1069

1069:                                             ; preds = %1068, %1035
  br label %1070

1070:                                             ; preds = %1069, %973
  %1071 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 0
  %1072 = load double, ptr %1071, align 16, !tbaa !11
  %1073 = getelementptr inbounds [2 x double], ptr %30, i64 0, i64 1
  %1074 = load double, ptr %1073, align 8, !tbaa !11
  %1075 = call double @sqrt(double noundef %1074) #5
  %1076 = fmul double %1072, %1075
  store double %1076, ptr %27, align 8, !tbaa !11
  br label %1077

1077:                                             ; preds = %1070, %869
  br label %1078

1078:                                             ; preds = %1077, %864
  br label %1079

1079:                                             ; preds = %1078, %520
  br label %1080

1080:                                             ; preds = %1079, %311
  br label %1081

1081:                                             ; preds = %1080, %69
  %1082 = load double, ptr %27, align 8, !tbaa !11
  store double %1082, ptr %23, align 8, !tbaa !11
  %1083 = load double, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  ret double %1083
}

; 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

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

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

declare i32 @disnan_(ptr noundef) #2

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

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

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

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

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

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

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


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

%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 [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4

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

20:                                               ; preds = %8
  %21 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #8
  %.not358 = icmp eq i32 %21, 0
  br i1 %.not358, label %93, label %22

22:                                               ; preds = %20
  %23 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #8
  %.not409 = icmp eq i32 %23, 0
  %24 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #8
  %.not410 = icmp eq i32 %24, 0
  %25 = load i32, ptr %4, align 4, !tbaa !5
  %.not411491 = icmp slt i32 %25, 1
  br i1 %.not409, label %61, label %26

26:                                               ; preds = %22
  br i1 %.not410, label %45, label %27

27:                                               ; preds = %26
  br i1 %.not411491, label %.loopexit430, label %.lr.ph457.preheader

.lr.ph457.preheader:                              ; preds = %27
  %28 = sext i32 %13 to i64
  %29 = add nuw i32 %25, 1
  %wide.trip.count = zext i32 %29 to i64
  br label %.lr.ph457

.lr.ph457:                                        ; preds = %.lr.ph457.preheader, %._crit_edge
  %indvars.iv632 = phi i64 [ 1, %.lr.ph457.preheader ], [ %indvars.iv.next633, %._crit_edge ]
  %.0328454 = phi double [ 1.000000e+00, %.lr.ph457.preheader ], [ %.1329.lcssa, %._crit_edge ]
  %30 = load i32, ptr %3, align 4, !tbaa !5
  %31 = trunc i64 %indvars.iv632 to i32
  %32 = add i32 %31, -1
  %33 = call i32 @llvm.smin.i32(i32 %30, i32 %32)
  %.not424450 = icmp slt i32 %33, 1
  br i1 %.not424450, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph457
  %34 = mul nsw i64 %indvars.iv632, %28
  %invariant.gep794 = getelementptr %struct.doublecomplex, ptr %15, i64 %34
  %35 = zext nneg i32 %33 to i64
  br label %36

36:                                               ; preds = %.lr.ph, %44
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %44 ]
  %.1329451 = phi double [ %.0328454, %.lr.ph ], [ %.2330, %44 ]
  %gep795 = getelementptr %struct.doublecomplex, ptr %invariant.gep794, i64 %indvars.iv
  %37 = call { double, double } @Cd(ptr noundef %gep795)
  %38 = extractvalue { double, double } %37, 0
  %39 = extractvalue { double, double } %37, 1
  %40 = call double @cabs(double noundef %38, double noundef %39) #8
  store double %40, ptr %11, align 8, !tbaa !9
  %41 = fcmp olt double %.1329451, %40
  br i1 %41, label %44, label %42

42:                                               ; preds = %36
  %43 = call i32 @disnan_(ptr noundef nonnull %11) #8
  %.not425 = icmp eq i32 %43, 0
  br i1 %.not425, label %44, label %._crit_edge766

._crit_edge766:                                   ; preds = %42
  %.pre = load double, ptr %11, align 8, !tbaa !9
  br label %44

44:                                               ; preds = %36, %._crit_edge766, %42
  %.2330 = phi double [ %.1329451, %42 ], [ %.pre, %._crit_edge766 ], [ %40, %36 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %.not424.not = icmp ult i64 %indvars.iv, %35
  br i1 %.not424.not, label %36, label %._crit_edge, !llvm.loop !11

._crit_edge:                                      ; preds = %44, %.lr.ph457
  %.1329.lcssa = phi double [ %.0328454, %.lr.ph457 ], [ %.2330, %44 ]
  %indvars.iv.next633 = add nuw nsw i64 %indvars.iv632, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next633, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit430, label %.lr.ph457, !llvm.loop !13

45:                                               ; preds = %26
  br i1 %.not411491, label %.loopexit430, label %.lr.ph469.preheader

.lr.ph469.preheader:                              ; preds = %45
  %46 = sext i32 %13 to i64
  %47 = add nuw i32 %25, 1
  %wide.trip.count643 = zext i32 %47 to i64
  br label %.lr.ph469

.loopexit447:                                     ; preds = %60, %.lr.ph469
  %.4332.lcssa = phi double [ %.3331466, %.lr.ph469 ], [ %.5333, %60 ]
  %indvars.iv.next636 = add nuw i32 %indvars.iv635, 1
  %exitcond644.not = icmp eq i64 %indvars.iv.next641, %wide.trip.count643
  br i1 %exitcond644.not, label %.loopexit430, label %.lr.ph469, !llvm.loop !14

.lr.ph469:                                        ; preds = %.lr.ph469.preheader, %.loopexit447
  %indvars.iv640 = phi i64 [ 1, %.lr.ph469.preheader ], [ %indvars.iv.next641, %.loopexit447 ]
  %indvars.iv635 = phi i32 [ 2, %.lr.ph469.preheader ], [ %indvars.iv.next636, %.loopexit447 ]
  %.3331466 = phi double [ 1.000000e+00, %.lr.ph469.preheader ], [ %.4332.lcssa, %.loopexit447 ]
  %48 = load i32, ptr %3, align 4, !tbaa !5
  %indvars.iv.next641 = add nuw nsw i64 %indvars.iv640, 1
  %49 = sext i32 %48 to i64
  %.not420459.not = icmp slt i64 %indvars.iv640, %49
  br i1 %.not420459.not, label %.lr.ph463, label %.loopexit447

.lr.ph463:                                        ; preds = %.lr.ph469
  %50 = sext i32 %indvars.iv635 to i64
  %51 = mul nsw i64 %indvars.iv640, %46
  %invariant.gep796 = getelementptr %struct.doublecomplex, ptr %15, i64 %51
  br label %52

52:                                               ; preds = %.lr.ph463, %60
  %indvars.iv637 = phi i64 [ %50, %.lr.ph463 ], [ %indvars.iv.next638, %60 ]
  %.4332460 = phi double [ %.3331466, %.lr.ph463 ], [ %.5333, %60 ]
  %gep797 = getelementptr %struct.doublecomplex, ptr %invariant.gep796, i64 %indvars.iv637
  %53 = call { double, double } @Cd(ptr noundef %gep797)
  %54 = extractvalue { double, double } %53, 0
  %55 = extractvalue { double, double } %53, 1
  %56 = call double @cabs(double noundef %54, double noundef %55) #8
  store double %56, ptr %11, align 8, !tbaa !9
  %57 = fcmp olt double %.4332460, %56
  br i1 %57, label %60, label %58

58:                                               ; preds = %52
  %59 = call i32 @disnan_(ptr noundef nonnull %11) #8
  %.not421 = icmp eq i32 %59, 0
  br i1 %.not421, label %60, label %._crit_edge767

._crit_edge767:                                   ; preds = %58
  %.pre768 = load double, ptr %11, align 8, !tbaa !9
  br label %60

60:                                               ; preds = %52, %._crit_edge767, %58
  %.5333 = phi double [ %.4332460, %58 ], [ %.pre768, %._crit_edge767 ], [ %56, %52 ]
  %indvars.iv.next638 = add nuw nsw i64 %indvars.iv637, 1
  %.not420.not = icmp slt i64 %indvars.iv637, %49
  br i1 %.not420.not, label %52, label %.loopexit447, !llvm.loop !15

61:                                               ; preds = %22
  br i1 %.not410, label %78, label %62

62:                                               ; preds = %61
  br i1 %.not411491, label %.loopexit430, label %.lr.ph482.preheader

.lr.ph482.preheader:                              ; preds = %62
  %63 = sext i32 %13 to i64
  %64 = add nuw i32 %25, 1
  %wide.trip.count651 = zext i32 %64 to i64
  br label %.lr.ph482

.lr.ph482:                                        ; preds = %.lr.ph482.preheader, %._crit_edge476
  %indvars.iv648 = phi i64 [ 1, %.lr.ph482.preheader ], [ %indvars.iv.next649, %._crit_edge476 ]
  %.6334479 = phi double [ 0.000000e+00, %.lr.ph482.preheader ], [ %.7335.lcssa, %._crit_edge476 ]
  %65 = load i32, ptr %3, align 4, !tbaa !5
  %.not416471 = icmp slt i32 %65, 1
  br i1 %.not416471, label %._crit_edge476, label %.lr.ph475

.lr.ph475:                                        ; preds = %.lr.ph482
  %66 = trunc nuw nsw i64 %indvars.iv648 to i32
  %.2316. = call i32 @llvm.smin.i32(i32 %65, i32 %66)
  %67 = mul nsw i64 %indvars.iv648, %63
  %invariant.gep798 = getelementptr %struct.doublecomplex, ptr %15, i64 %67
  %68 = sext i32 %.2316. to i64
  br label %69

69:                                               ; preds = %.lr.ph475, %77
  %indvars.iv645 = phi i64 [ 1, %.lr.ph475 ], [ %indvars.iv.next646, %77 ]
  %.7335472 = phi double [ %.6334479, %.lr.ph475 ], [ %.8336, %77 ]
  %gep799 = getelementptr %struct.doublecomplex, ptr %invariant.gep798, i64 %indvars.iv645
  %70 = call { double, double } @Cd(ptr noundef %gep799)
  %71 = extractvalue { double, double } %70, 0
  %72 = extractvalue { double, double } %70, 1
  %73 = call double @cabs(double noundef %71, double noundef %72) #8
  store double %73, ptr %11, align 8, !tbaa !9
  %74 = fcmp olt double %.7335472, %73
  br i1 %74, label %77, label %75

75:                                               ; preds = %69
  %76 = call i32 @disnan_(ptr noundef nonnull %11) #8
  %.not417 = icmp eq i32 %76, 0
  br i1 %.not417, label %77, label %._crit_edge769

._crit_edge769:                                   ; preds = %75
  %.pre770 = load double, ptr %11, align 8, !tbaa !9
  br label %77

77:                                               ; preds = %69, %._crit_edge769, %75
  %.8336 = phi double [ %.7335472, %75 ], [ %.pre770, %._crit_edge769 ], [ %73, %69 ]
  %indvars.iv.next646 = add nuw nsw i64 %indvars.iv645, 1
  %.not416.not = icmp slt i64 %indvars.iv645, %68
  br i1 %.not416.not, label %69, label %._crit_edge476, !llvm.loop !16

._crit_edge476:                                   ; preds = %77, %.lr.ph482
  %.7335.lcssa = phi double [ %.6334479, %.lr.ph482 ], [ %.8336, %77 ]
  %indvars.iv.next649 = add nuw nsw i64 %indvars.iv648, 1
  %exitcond652.not = icmp eq i64 %indvars.iv.next649, %wide.trip.count651
  br i1 %exitcond652.not, label %.loopexit430, label %.lr.ph482, !llvm.loop !17

78:                                               ; preds = %61
  br i1 %.not411491, label %.loopexit430, label %.lr.ph495.preheader

.lr.ph495.preheader:                              ; preds = %78
  %79 = sext i32 %13 to i64
  %80 = add nuw i32 %25, 1
  %wide.trip.count659 = zext i32 %80 to i64
  br label %.lr.ph495

.lr.ph495:                                        ; preds = %.lr.ph495.preheader, %._crit_edge489
  %indvars.iv653 = phi i64 [ 1, %.lr.ph495.preheader ], [ %indvars.iv.next654, %._crit_edge489 ]
  %.9337492 = phi double [ 0.000000e+00, %.lr.ph495.preheader ], [ %.10338.lcssa, %._crit_edge489 ]
  %81 = load i32, ptr %3, align 4, !tbaa !5
  %82 = sext i32 %81 to i64
  %.not412484 = icmp sgt i64 %indvars.iv653, %82
  br i1 %.not412484, label %._crit_edge489, label %.lr.ph488

.lr.ph488:                                        ; preds = %.lr.ph495
  %83 = mul nsw i64 %indvars.iv653, %79
  %invariant.gep800 = getelementptr %struct.doublecomplex, ptr %15, i64 %83
  br label %84

84:                                               ; preds = %.lr.ph488, %92
  %indvars.iv655 = phi i64 [ %indvars.iv653, %.lr.ph488 ], [ %indvars.iv.next656, %92 ]
  %.10338485 = phi double [ %.9337492, %.lr.ph488 ], [ %.11339, %92 ]
  %gep801 = getelementptr %struct.doublecomplex, ptr %invariant.gep800, i64 %indvars.iv655
  %85 = call { double, double } @Cd(ptr noundef %gep801)
  %86 = extractvalue { double, double } %85, 0
  %87 = extractvalue { double, double } %85, 1
  %88 = call double @cabs(double noundef %86, double noundef %87) #8
  store double %88, ptr %11, align 8, !tbaa !9
  %89 = fcmp olt double %.10338485, %88
  br i1 %89, label %92, label %90

90:                                               ; preds = %84
  %91 = call i32 @disnan_(ptr noundef nonnull %11) #8
  %.not413 = icmp eq i32 %91, 0
  br i1 %.not413, label %92, label %._crit_edge771

._crit_edge771:                                   ; preds = %90
  %.pre772 = load double, ptr %11, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %84, %._crit_edge771, %90
  %.11339 = phi double [ %.10338485, %90 ], [ %.pre772, %._crit_edge771 ], [ %88, %84 ]
  %indvars.iv.next656 = add nuw nsw i64 %indvars.iv655, 1
  %.not412.not = icmp slt i64 %indvars.iv655, %82
  br i1 %.not412.not, label %84, label %._crit_edge489, !llvm.loop !18

._crit_edge489:                                   ; preds = %92, %.lr.ph495
  %.10338.lcssa = phi double [ %.9337492, %.lr.ph495 ], [ %.11339, %92 ]
  %indvars.iv.next654 = add nuw nsw i64 %indvars.iv653, 1
  %exitcond660.not = icmp eq i64 %indvars.iv.next654, %wide.trip.count659
  br i1 %exitcond660.not, label %.loopexit430, label %.lr.ph495, !llvm.loop !19

93:                                               ; preds = %20
  %94 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #8
  %.not359 = icmp eq i32 %94, 0
  br i1 %.not359, label %95, label %98

95:                                               ; preds = %93
  %96 = load i8, ptr %0, align 1, !tbaa !20
  %97 = icmp eq i8 %96, 49
  br i1 %97, label %98, label %165

98:                                               ; preds = %95, %93
  %99 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #8
  %100 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #8
  %.not396 = icmp eq i32 %100, 0
  %101 = load i32, ptr %4, align 4, !tbaa !5
  %.not397610 = icmp slt i32 %101, 1
  br i1 %.not396, label %134, label %102

102:                                              ; preds = %98
  br i1 %.not397610, label %.loopexit430, label %.lr.ph600

.lr.ph600:                                        ; preds = %102
  %.not403 = icmp eq i32 %99, 0
  %103 = sext i32 %13 to i64
  %104 = add nuw i32 %101, 1
  %wide.trip.count753 = zext i32 %104 to i64
  br label %105

105:                                              ; preds = %.lr.ph600, %133
  %indvars.iv750 = phi i64 [ 1, %.lr.ph600 ], [ %indvars.iv.next751, %133 ]
  %.12340596 = phi double [ 0.000000e+00, %.lr.ph600 ], [ %.13341, %133 ]
  %.pre775 = load i32, ptr %3, align 4, !tbaa !5
  %106 = sext i32 %.pre775 to i64
  %.not404 = icmp sgt i64 %indvars.iv750, %106
  %or.cond = select i1 %.not403, i1 true, i1 %.not404
  br i1 %or.cond, label %118, label %107

107:                                              ; preds = %105
  store double 1.000000e+00, ptr %11, align 8, !tbaa !9
  %.not407587 = icmp ult i64 %indvars.iv750, 2
  br i1 %.not407587, label %.loopexit431, label %.lr.ph590

.lr.ph590:                                        ; preds = %107
  %108 = mul nsw i64 %indvars.iv750, %103
  %invariant.gep810 = getelementptr %struct.doublecomplex, ptr %15, i64 %108
  %109 = shl i64 %indvars.iv750, 32
  %sext = add i64 %109, -4294967296
  %110 = ashr exact i64 %sext, 32
  br label %111

111:                                              ; preds = %.lr.ph590, %111
  %indvars.iv744 = phi i64 [ 1, %.lr.ph590 ], [ %indvars.iv.next745, %111 ]
  %gep811 = getelementptr %struct.doublecomplex, ptr %invariant.gep810, i64 %indvars.iv744
  %112 = call { double, double } @Cd(ptr noundef %gep811)
  %113 = extractvalue { double, double } %112, 0
  %114 = extractvalue { double, double } %112, 1
  %115 = call double @cabs(double noundef %113, double noundef %114) #8
  %116 = load double, ptr %11, align 8, !tbaa !9
  %117 = fadd double %115, %116
  store double %117, ptr %11, align 8, !tbaa !9
  %indvars.iv.next745 = add nuw nsw i64 %indvars.iv744, 1
  %.not407.not = icmp slt i64 %indvars.iv744, %110
  br i1 %.not407.not, label %111, label %.loopexit431, !llvm.loop !21

118:                                              ; preds = %105
  %119 = trunc i64 %indvars.iv750 to i32
  store double 0.000000e+00, ptr %11, align 8, !tbaa !9
  %.4318. = call i32 @llvm.smin.i32(i32 %.pre775, i32 %119)
  %.not406591 = icmp slt i32 %.4318., 1
  br i1 %.not406591, label %.loopexit431, label %.lr.ph594

.lr.ph594:                                        ; preds = %118
  %120 = mul nsw i64 %indvars.iv750, %103
  %invariant.gep812 = getelementptr %struct.doublecomplex, ptr %15, i64 %120
  %121 = zext nneg i32 %.4318. to i64
  br label %122

122:                                              ; preds = %.lr.ph594, %122
  %indvars.iv747 = phi i64 [ 1, %.lr.ph594 ], [ %indvars.iv.next748, %122 ]
  %gep813 = getelementptr %struct.doublecomplex, ptr %invariant.gep812, i64 %indvars.iv747
  %123 = call { double, double } @Cd(ptr noundef %gep813)
  %124 = extractvalue { double, double } %123, 0
  %125 = extractvalue { double, double } %123, 1
  %126 = call double @cabs(double noundef %124, double noundef %125) #8
  %127 = load double, ptr %11, align 8, !tbaa !9
  %128 = fadd double %126, %127
  store double %128, ptr %11, align 8, !tbaa !9
  %indvars.iv.next748 = add nuw nsw i64 %indvars.iv747, 1
  %.not406.not = icmp ult i64 %indvars.iv747, %121
  br i1 %.not406.not, label %122, label %.loopexit431, !llvm.loop !22

.loopexit431:                                     ; preds = %111, %122, %107, %118
  %129 = phi double [ 1.000000e+00, %107 ], [ 0.000000e+00, %118 ], [ %128, %122 ], [ %117, %111 ]
  %130 = fcmp olt double %.12340596, %129
  br i1 %130, label %133, label %131

131:                                              ; preds = %.loopexit431
  %132 = call i32 @disnan_(ptr noundef nonnull %11) #8
  %.not408 = icmp eq i32 %132, 0
  br i1 %.not408, label %133, label %._crit_edge776

._crit_edge776:                                   ; preds = %131
  %.pre777 = load double, ptr %11, align 8, !tbaa !9
  br label %133

133:                                              ; preds = %.loopexit431, %._crit_edge776, %131
  %.13341 = phi double [ %.12340596, %131 ], [ %.pre777, %._crit_edge776 ], [ %129, %.loopexit431 ]
  %indvars.iv.next751 = add nuw nsw i64 %indvars.iv750, 1
  %exitcond754.not = icmp eq i64 %indvars.iv.next751, %wide.trip.count753
  br i1 %exitcond754.not, label %.loopexit430, label %105, !llvm.loop !23

134:                                              ; preds = %98
  br i1 %.not397610, label %.loopexit430, label %.lr.ph615

.lr.ph615:                                        ; preds = %134
  %.not398 = icmp eq i32 %99, 0
  %135 = sext i32 %13 to i64
  %136 = add nuw i32 %101, 1
  %wide.trip.count764 = zext i32 %136 to i64
  br label %137

137:                                              ; preds = %.lr.ph615, %164
  %indvars.iv755 = phi i64 [ 1, %.lr.ph615 ], [ %indvars.iv.next756, %164 ]
  %.14342611 = phi double [ 0.000000e+00, %.lr.ph615 ], [ %.15343, %164 ]
  br i1 %.not398, label %149, label %138

138:                                              ; preds = %137
  store double 1.000000e+00, ptr %11, align 8, !tbaa !9
  %139 = load i32, ptr %3, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %.not400.not602 = icmp slt i64 %indvars.iv755, %140
  br i1 %.not400.not602, label %.lr.ph605, label %.loopexit

.lr.ph605:                                        ; preds = %138
  %141 = mul nsw i64 %indvars.iv755, %135
  %invariant.gep814 = getelementptr %struct.doublecomplex, ptr %15, i64 %141
  br label %142

142:                                              ; preds = %.lr.ph605, %142
  %indvars.iv757 = phi i64 [ %indvars.iv755, %.lr.ph605 ], [ %indvars.iv.next758, %142 ]
  %indvars.iv.next758 = add nuw nsw i64 %indvars.iv757, 1
  %gep815 = getelementptr %struct.doublecomplex, ptr %invariant.gep814, i64 %indvars.iv.next758
  %143 = call { double, double } @Cd(ptr noundef %gep815)
  %144 = extractvalue { double, double } %143, 0
  %145 = extractvalue { double, double } %143, 1
  %146 = call double @cabs(double noundef %144, double noundef %145) #8
  %147 = load double, ptr %11, align 8, !tbaa !9
  %148 = fadd double %146, %147
  store double %148, ptr %11, align 8, !tbaa !9
  %.not400.not = icmp slt i64 %indvars.iv.next758, %140
  br i1 %.not400.not, label %142, label %.loopexit, !llvm.loop !24

149:                                              ; preds = %137
  store double 0.000000e+00, ptr %11, align 8, !tbaa !9
  %150 = load i32, ptr %3, align 4, !tbaa !5
  %151 = sext i32 %150 to i64
  %.not399606 = icmp sgt i64 %indvars.iv755, %151
  br i1 %.not399606, label %.loopexit, label %.lr.ph609

.lr.ph609:                                        ; preds = %149
  %152 = mul nsw i64 %indvars.iv755, %135
  %invariant.gep816 = getelementptr %struct.doublecomplex, ptr %15, i64 %152
  br label %153

153:                                              ; preds = %.lr.ph609, %153
  %indvars.iv760 = phi i64 [ %indvars.iv755, %.lr.ph609 ], [ %indvars.iv.next761, %153 ]
  %gep817 = getelementptr %struct.doublecomplex, ptr %invariant.gep816, i64 %indvars.iv760
  %154 = call { double, double } @Cd(ptr noundef %gep817)
  %155 = extractvalue { double, double } %154, 0
  %156 = extractvalue { double, double } %154, 1
  %157 = call double @cabs(double noundef %155, double noundef %156) #8
  %158 = load double, ptr %11, align 8, !tbaa !9
  %159 = fadd double %157, %158
  store double %159, ptr %11, align 8, !tbaa !9
  %indvars.iv.next761 = add nuw nsw i64 %indvars.iv760, 1
  %.not399.not = icmp slt i64 %indvars.iv760, %151
  br i1 %.not399.not, label %153, label %.loopexit, !llvm.loop !25

.loopexit:                                        ; preds = %142, %153, %138, %149
  %160 = phi double [ 1.000000e+00, %138 ], [ 0.000000e+00, %149 ], [ %159, %153 ], [ %148, %142 ]
  %161 = fcmp olt double %.14342611, %160
  br i1 %161, label %164, label %162

162:                                              ; preds = %.loopexit
  %163 = call i32 @disnan_(ptr noundef nonnull %11) #8
  %.not401 = icmp eq i32 %163, 0
  br i1 %.not401, label %164, label %._crit_edge778

._crit_edge778:                                   ; preds = %162
  %.pre779 = load double, ptr %11, align 8, !tbaa !9
  br label %164

164:                                              ; preds = %.loopexit, %._crit_edge778, %162
  %.15343 = phi double [ %.14342611, %162 ], [ %.pre779, %._crit_edge778 ], [ %160, %.loopexit ]
  %indvars.iv.next756 = add nuw nsw i64 %indvars.iv755, 1
  %exitcond765.not = icmp eq i64 %indvars.iv.next756, %wide.trip.count764
  br i1 %exitcond765.not, label %.loopexit430, label %137, !llvm.loop !26

165:                                              ; preds = %95
  %166 = tail call i32 @lsame_(ptr noundef nonnull %0, ptr noundef nonnull @.str.3) #8
  %.not360 = icmp eq i32 %166, 0
  br i1 %.not360, label %270, label %167

167:                                              ; preds = %165
  %168 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #8
  %.not375 = icmp eq i32 %168, 0
  %169 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #8
  %.not376 = icmp eq i32 %169, 0
  %170 = load i32, ptr %3, align 4, !tbaa !5
  br i1 %.not375, label %213, label %171

171:                                              ; preds = %167
  %.not386512 = icmp slt i32 %170, 1
  br i1 %.not376, label %195, label %172

172:                                              ; preds = %171
  br i1 %.not386512, label %._crit_edge501, label %.lr.ph500.preheader

.lr.ph500.preheader:                              ; preds = %172
  %173 = add nuw i32 %170, 1
  %wide.trip.count664 = zext i32 %173 to i64
  %174 = zext nneg i32 %170 to i64
  %min.iters.check = icmp ult i32 %170, 4
  br i1 %min.iters.check, label %.lr.ph500.preheader862, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph500.preheader
  %n.vec = and i64 %174, 2147483644
  %ind.end = or disjoint i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %175 = getelementptr double, ptr %7, i64 %index
  %176 = getelementptr inbounds i8, ptr %175, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %175, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %176, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %177 = icmp eq i64 %index.next, %n.vec
  br i1 %177, label %middle.block, label %vector.body, !llvm.loop !27

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %174
  br i1 %cmp.n, label %._crit_edge501, label %.lr.ph500.preheader862

.lr.ph500.preheader862:                           ; preds = %middle.block, %.lr.ph500.preheader
  %indvars.iv661.ph = phi i64 [ 1, %.lr.ph500.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph500

.lr.ph500:                                        ; preds = %.lr.ph500.preheader862, %.lr.ph500
  %indvars.iv661 = phi i64 [ %indvars.iv.next662, %.lr.ph500 ], [ %indvars.iv661.ph, %.lr.ph500.preheader862 ]
  %178 = getelementptr inbounds double, ptr %16, i64 %indvars.iv661
  store double 1.000000e+00, ptr %178, align 8, !tbaa !9
  %indvars.iv.next662 = add nuw nsw i64 %indvars.iv661, 1
  %exitcond665.not = icmp eq i64 %indvars.iv.next662, %wide.trip.count664
  br i1 %exitcond665.not, label %._crit_edge501, label %.lr.ph500, !llvm.loop !30

._crit_edge501:                                   ; preds = %.lr.ph500, %middle.block, %172
  %179 = load i32, ptr %4, align 4, !tbaa !5
  %.not391507 = icmp slt i32 %179, 1
  br i1 %.not391507, label %.loopexit439, label %.lr.ph510.preheader

.lr.ph510.preheader:                              ; preds = %._crit_edge501
  %180 = sext i32 %13 to i64
  br label %.lr.ph510

.lr.ph510:                                        ; preds = %.lr.ph510.preheader, %._crit_edge506
  %indvars.iv673 = phi i64 [ 1, %.lr.ph510.preheader ], [ %indvars.iv.next674, %._crit_edge506 ]
  %indvars.iv669 = phi i32 [ 0, %.lr.ph510.preheader ], [ %indvars.iv.next670, %._crit_edge506 ]
  %181 = load i32, ptr %3, align 4, !tbaa !5
  %182 = trunc i64 %indvars.iv673 to i32
  %183 = add i32 %182, -1
  %184 = tail call i32 @llvm.smin.i32(i32 %181, i32 %183)
  %.not395502 = icmp slt i32 %184, 1
  br i1 %.not395502, label %._crit_edge506, label %.lr.ph505

.lr.ph505:                                        ; preds = %.lr.ph510
  %185 = mul nsw i64 %indvars.iv673, %180
  %smin = tail call i32 @llvm.smin.i32(i32 %181, i32 %indvars.iv669)
  %186 = add nsw i32 %smin, 1
  %wide.trip.count671 = zext i32 %186 to i64
  %invariant.gep802 = getelementptr %struct.doublecomplex, ptr %15, i64 %185
  br label %187

187:                                              ; preds = %.lr.ph505, %187
  %indvars.iv666 = phi i64 [ 1, %.lr.ph505 ], [ %indvars.iv.next667, %187 ]
  %gep803 = getelementptr %struct.doublecomplex, ptr %invariant.gep802, i64 %indvars.iv666
  %188 = tail call { double, double } @Cd(ptr noundef %gep803)
  %189 = extractvalue { double, double } %188, 0
  %190 = extractvalue { double, double } %188, 1
  %191 = tail call double @cabs(double noundef %189, double noundef %190) #8
  %192 = getelementptr inbounds double, ptr %16, i64 %indvars.iv666
  %193 = load double, ptr %192, align 8, !tbaa !9
  %194 = fadd double %191, %193
  store double %194, ptr %192, align 8, !tbaa !9
  %indvars.iv.next667 = add nuw nsw i64 %indvars.iv666, 1
  %exitcond672.not = icmp eq i64 %indvars.iv.next667, %wide.trip.count671
  br i1 %exitcond672.not, label %._crit_edge506, label %187, !llvm.loop !31

._crit_edge506:                                   ; preds = %187, %.lr.ph510
  %indvars.iv.next674 = add nuw nsw i64 %indvars.iv673, 1
  %indvars.iv.next670 = add nuw nsw i32 %indvars.iv669, 1
  %exitcond676.not = icmp eq i32 %indvars.iv.next670, %179
  br i1 %exitcond676.not, label %.loopexit439, label %.lr.ph510, !llvm.loop !32

195:                                              ; preds = %171
  br i1 %.not386512, label %._crit_edge516, label %.lr.ph515.preheader

.lr.ph515.preheader:                              ; preds = %195
  %196 = zext nneg i32 %170 to i64
  %197 = shl nuw nsw i64 %196, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %7, i8 0, i64 %197, i1 false), !tbaa !9
  br label %._crit_edge516

._crit_edge516:                                   ; preds = %.lr.ph515.preheader, %195
  %198 = load i32, ptr %4, align 4, !tbaa !5
  %.not387524 = icmp slt i32 %198, 1
  br i1 %.not387524, label %.loopexit439, label %.lr.ph527.preheader

.lr.ph527.preheader:                              ; preds = %._crit_edge516
  %199 = sext i32 %13 to i64
  %200 = add nuw i32 %198, 1
  %wide.trip.count689 = zext i32 %200 to i64
  br label %.lr.ph527

.lr.ph527:                                        ; preds = %.lr.ph527.preheader, %._crit_edge521
  %indvars.iv686 = phi i64 [ 1, %.lr.ph527.preheader ], [ %indvars.iv.next687, %._crit_edge521 ]
  %201 = load i32, ptr %3, align 4, !tbaa !5
  %.not389517 = icmp slt i32 %201, 1
  br i1 %.not389517, label %._crit_edge521, label %.lr.ph520

.lr.ph520:                                        ; preds = %.lr.ph527
  %202 = trunc nuw nsw i64 %indvars.iv686 to i32
  %.7321. = tail call i32 @llvm.smin.i32(i32 %201, i32 %202)
  %203 = mul nsw i64 %indvars.iv686, %199
  %204 = add i32 %.7321., 1
  %wide.trip.count684 = zext i32 %204 to i64
  %invariant.gep804 = getelementptr %struct.doublecomplex, ptr %15, i64 %203
  br label %205

205:                                              ; preds = %.lr.ph520, %205
  %indvars.iv680 = phi i64 [ 1, %.lr.ph520 ], [ %indvars.iv.next681, %205 ]
  %gep805 = getelementptr %struct.doublecomplex, ptr %invariant.gep804, i64 %indvars.iv680
  %206 = tail call { double, double } @Cd(ptr noundef %gep805)
  %207 = extractvalue { double, double } %206, 0
  %208 = extractvalue { double, double } %206, 1
  %209 = tail call double @cabs(double noundef %207, double noundef %208) #8
  %210 = getelementptr inbounds double, ptr %16, i64 %indvars.iv680
  %211 = load double, ptr %210, align 8, !tbaa !9
  %212 = fadd double %209, %211
  store double %212, ptr %210, align 8, !tbaa !9
  %indvars.iv.next681 = add nuw nsw i64 %indvars.iv680, 1
  %exitcond685.not = icmp eq i64 %indvars.iv.next681, %wide.trip.count684
  br i1 %exitcond685.not, label %._crit_edge521, label %205, !llvm.loop !33

._crit_edge521:                                   ; preds = %205, %.lr.ph527
  %indvars.iv.next687 = add nuw nsw i64 %indvars.iv686, 1
  %exitcond690.not = icmp eq i64 %indvars.iv.next687, %wide.trip.count689
  br i1 %exitcond690.not, label %.loopexit439, label %.lr.ph527, !llvm.loop !34

213:                                              ; preds = %167
  br i1 %.not376, label %244, label %214

214:                                              ; preds = %213
  %215 = load i32, ptr %4, align 4, !tbaa !5
  %.426 = tail call i32 @llvm.smin.i32(i32 %170, i32 %215)
  %.not381529 = icmp slt i32 %.426, 1
  br i1 %.not381529, label %.preheader442, label %.lr.ph532.preheader

.lr.ph532.preheader:                              ; preds = %214
  %216 = add nuw i32 %.426, 1
  %wide.trip.count694 = zext i32 %216 to i64
  %217 = zext nneg i32 %.426 to i64
  %min.iters.check837 = icmp ult i32 %.426, 4
  br i1 %min.iters.check837, label %.lr.ph532.preheader859, label %vector.ph838

.lr.ph532.preheader859:                           ; preds = %middle.block835, %.lr.ph532.preheader
  %indvars.iv691.ph = phi i64 [ 1, %.lr.ph532.preheader ], [ %ind.end841, %middle.block835 ]
  br label %.lr.ph532

vector.ph838:                                     ; preds = %.lr.ph532.preheader
  %n.vec840 = and i64 %217, 2147483644
  %ind.end841 = or disjoint i64 %n.vec840, 1
  br label %vector.body843

vector.body843:                                   ; preds = %vector.body843, %vector.ph838
  %index844 = phi i64 [ 0, %vector.ph838 ], [ %index.next846, %vector.body843 ]
  %218 = getelementptr double, ptr %7, i64 %index844
  %219 = getelementptr inbounds i8, ptr %218, i64 16
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %218, align 8, !tbaa !9
  store <2 x double> <double 1.000000e+00, double 1.000000e+00>, ptr %219, align 8, !tbaa !9
  %index.next846 = add nuw i64 %index844, 4
  %220 = icmp eq i64 %index.next846, %n.vec840
  br i1 %220, label %middle.block835, label %vector.body843, !llvm.loop !35

middle.block835:                                  ; preds = %vector.body843
  %cmp.n847 = icmp eq i64 %n.vec840, %217
  br i1 %cmp.n847, label %.preheader442, label %.lr.ph532.preheader859

.preheader442:                                    ; preds = %.lr.ph532, %middle.block835, %214
  %.not382.not533 = icmp slt i32 %215, %170
  br i1 %.not382.not533, label %.lr.ph535.preheader, label %.preheader

.lr.ph535.preheader:                              ; preds = %.preheader442
  %221 = sext i32 %215 to i64
  %222 = shl nsw i64 %221, 3
  %scevgep = getelementptr i8, ptr %7, i64 %222
  %223 = xor i32 %215, -1
  %224 = add i32 %170, %223
  %225 = zext i32 %224 to i64
  %226 = shl nuw nsw i64 %225, 3
  %227 = add nuw nsw i64 %226, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep, i8 0, i64 %227, i1 false), !tbaa !9
  br label %.preheader

.lr.ph532:                                        ; preds = %.lr.ph532.preheader859, %.lr.ph532
  %indvars.iv691 = phi i64 [ %indvars.iv.next692, %.lr.ph532 ], [ %indvars.iv691.ph, %.lr.ph532.preheader859 ]
  %228 = getelementptr inbounds double, ptr %16, i64 %indvars.iv691
  store double 1.000000e+00, ptr %228, align 8, !tbaa !9
  %indvars.iv.next692 = add nuw nsw i64 %indvars.iv691, 1
  %exitcond695.not = icmp eq i64 %indvars.iv.next692, %wide.trip.count694
  br i1 %exitcond695.not, label %.preheader442, label %.lr.ph532, !llvm.loop !36

.preheader:                                       ; preds = %.lr.ph535.preheader, %.preheader442
  %.not383542 = icmp slt i32 %215, 1
  br i1 %.not383542, label %.loopexit439, label %.lr.ph544.preheader

.lr.ph544.preheader:                              ; preds = %.preheader
  %229 = sext i32 %13 to i64
  %230 = add nuw i32 %215, 1
  %wide.trip.count708 = zext i32 %230 to i64
  br label %.lr.ph544

.loopexit440:                                     ; preds = %236, %.lr.ph544
  %indvars.iv.next700 = add nuw i32 %indvars.iv699, 1
  %exitcond709.not = icmp eq i64 %indvars.iv.next706, %wide.trip.count708
  br i1 %exitcond709.not, label %.loopexit439, label %.lr.ph544, !llvm.loop !37

.lr.ph544:                                        ; preds = %.lr.ph544.preheader, %.loopexit440
  %indvars.iv705 = phi i64 [ 1, %.lr.ph544.preheader ], [ %indvars.iv.next706, %.loopexit440 ]
  %indvars.iv699 = phi i32 [ 2, %.lr.ph544.preheader ], [ %indvars.iv.next700, %.loopexit440 ]
  %231 = load i32, ptr %3, align 4, !tbaa !5
  %indvars.iv.next706 = add nuw nsw i64 %indvars.iv705, 1
  %232 = sext i32 %231 to i64
  %.not384536.not = icmp slt i64 %indvars.iv705, %232
  br i1 %.not384536.not, label %.lr.ph539, label %.loopexit440

.lr.ph539:                                        ; preds = %.lr.ph544
  %233 = sext i32 %indvars.iv699 to i64
  %234 = mul nsw i64 %indvars.iv705, %229
  %235 = add i32 %231, 1
  %invariant.gep806 = getelementptr %struct.doublecomplex, ptr %15, i64 %234
  br label %236

236:                                              ; preds = %.lr.ph539, %236
  %indvars.iv701 = phi i64 [ %233, %.lr.ph539 ], [ %indvars.iv.next702, %236 ]
  %gep807 = getelementptr %struct.doublecomplex, ptr %invariant.gep806, i64 %indvars.iv701
  %237 = tail call { double, double } @Cd(ptr noundef %gep807)
  %238 = extractvalue { double, double } %237, 0
  %239 = extractvalue { double, double } %237, 1
  %240 = tail call double @cabs(double noundef %238, double noundef %239) #8
  %241 = getelementptr inbounds double, ptr %16, i64 %indvars.iv701
  %242 = load double, ptr %241, align 8, !tbaa !9
  %243 = fadd double %240, %242
  store double %243, ptr %241, align 8, !tbaa !9
  %indvars.iv.next702 = add nsw i64 %indvars.iv701, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next702 to i32
  %exitcond704.not = icmp eq i32 %235, %lftr.wideiv
  br i1 %exitcond704.not, label %.loopexit440, label %236, !llvm.loop !38

244:                                              ; preds = %213
  %.not377546 = icmp slt i32 %170, 1
  br i1 %.not377546, label %._crit_edge550, label %.lr.ph549.preheader

.lr.ph549.preheader:                              ; preds = %244
  %245 = zext nneg i32 %170 to i64
  %246 = shl nuw nsw i64 %245, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %7, i8 0, i64 %246, i1 false), !tbaa !9
  br label %._crit_edge550

._crit_edge550:                                   ; preds = %.lr.ph549.preheader, %244
  %247 = load i32, ptr %4, align 4, !tbaa !5
  %.not378558 = icmp slt i32 %247, 1
  br i1 %.not378558, label %.loopexit439, label %.lr.ph561.preheader

.lr.ph561.preheader:                              ; preds = %._crit_edge550
  %248 = sext i32 %13 to i64
  %249 = add nuw i32 %247, 1
  %wide.trip.count721 = zext i32 %249 to i64
  br label %.lr.ph561

.lr.ph561:                                        ; preds = %.lr.ph561.preheader, %._crit_edge555
  %indvars.iv713 = phi i64 [ 1, %.lr.ph561.preheader ], [ %indvars.iv.next714, %._crit_edge555 ]
  %250 = load i32, ptr %3, align 4, !tbaa !5
  %251 = sext i32 %250 to i64
  %.not379551 = icmp sgt i64 %indvars.iv713, %251
  br i1 %.not379551, label %._crit_edge555, label %.lr.ph554

.lr.ph554:                                        ; preds = %.lr.ph561
  %252 = mul nsw i64 %indvars.iv713, %248
  %253 = add i32 %250, 1
  %wide.trip.count718 = zext i32 %253 to i64
  %invariant.gep808 = getelementptr %struct.doublecomplex, ptr %15, i64 %252
  br label %254

254:                                              ; preds = %.lr.ph554, %254
  %indvars.iv715 = phi i64 [ %indvars.iv713, %.lr.ph554 ], [ %indvars.iv.next716, %254 ]
  %gep809 = getelementptr %struct.doublecomplex, ptr %invariant.gep808, i64 %indvars.iv715
  %255 = tail call { double, double } @Cd(ptr noundef %gep809)
  %256 = extractvalue { double, double } %255, 0
  %257 = extractvalue { double, double } %255, 1
  %258 = tail call double @cabs(double noundef %256, double noundef %257) #8
  %259 = getelementptr inbounds double, ptr %16, i64 %indvars.iv715
  %260 = load double, ptr %259, align 8, !tbaa !9
  %261 = fadd double %258, %260
  store double %261, ptr %259, align 8, !tbaa !9
  %indvars.iv.next716 = add nuw nsw i64 %indvars.iv715, 1
  %exitcond719.not = icmp eq i64 %indvars.iv.next716, %wide.trip.count718
  br i1 %exitcond719.not, label %._crit_edge555, label %254, !llvm.loop !39

._crit_edge555:                                   ; preds = %254, %.lr.ph561
  %indvars.iv.next714 = add nuw nsw i64 %indvars.iv713, 1
  %exitcond722.not = icmp eq i64 %indvars.iv.next714, %wide.trip.count721
  br i1 %exitcond722.not, label %.loopexit439, label %.lr.ph561, !llvm.loop !40

.loopexit439:                                     ; preds = %._crit_edge506, %._crit_edge521, %.loopexit440, %._crit_edge555, %._crit_edge501, %._crit_edge516, %.preheader, %._crit_edge550
  %262 = load i32, ptr %3, align 4, !tbaa !5
  %.not392563 = icmp slt i32 %262, 1
  br i1 %.not392563, label %.loopexit430, label %.lr.ph567.preheader

.lr.ph567.preheader:                              ; preds = %.loopexit439
  %263 = add nuw i32 %262, 1
  %wide.trip.count726 = zext i32 %263 to i64
  br label %.lr.ph567

.lr.ph567:                                        ; preds = %.lr.ph567.preheader, %269
  %indvars.iv723 = phi i64 [ 1, %.lr.ph567.preheader ], [ %indvars.iv.next724, %269 ]
  %.16344564 = phi double [ 0.000000e+00, %.lr.ph567.preheader ], [ %.17345, %269 ]
  %264 = getelementptr inbounds double, ptr %16, i64 %indvars.iv723
  %265 = load double, ptr %264, align 8, !tbaa !9
  store double %265, ptr %11, align 8, !tbaa !9
  %266 = fcmp olt double %.16344564, %265
  br i1 %266, label %269, label %267

267:                                              ; preds = %.lr.ph567
  %268 = call i32 @disnan_(ptr noundef nonnull %11) #8
  %.not393 = icmp eq i32 %268, 0
  br i1 %.not393, label %269, label %._crit_edge773

._crit_edge773:                                   ; preds = %267
  %.pre774 = load double, ptr %11, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %.lr.ph567, %._crit_edge773, %267
  %.17345 = phi double [ %.16344564, %267 ], [ %.pre774, %._crit_edge773 ], [ %265, %.lr.ph567 ]
  %indvars.iv.next724 = add nuw nsw i64 %indvars.iv723, 1
  %exitcond727.not = icmp eq i64 %indvars.iv.next724, %wide.trip.count726
  br i1 %exitcond727.not, label %.loopexit430, label %.lr.ph567, !llvm.loop !41

270:                                              ; preds = %165
  %271 = tail call i32 @lsame_(ptr noundef nonnull %0, ptr noundef nonnull @.str.4) #8
  %.not361 = icmp eq i32 %271, 0
  br i1 %.not361, label %272, label %274

272:                                              ; preds = %270
  %273 = tail call i32 @lsame_(ptr noundef nonnull %0, ptr noundef nonnull @.str.5) #8
  %.not362 = icmp eq i32 %273, 0
  br i1 %.not362, label %.loopexit430, label %274

274:                                              ; preds = %272, %270
  %275 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #8
  %.not363 = icmp eq i32 %275, 0
  %276 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #8
  %.not364 = icmp eq i32 %276, 0
  br i1 %.not363, label %301, label %277

277:                                              ; preds = %274
  br i1 %.not364, label %292, label %278

278:                                              ; preds = %277
  store double 1.000000e+00, ptr %12, align 16, !tbaa !9
  %279 = load i32, ptr %3, align 4, !tbaa !5
  %280 = load i32, ptr %4, align 4, !tbaa !5
  %.427 = tail call i32 @llvm.smin.i32(i32 %279, i32 %280)
  %281 = sitofp i32 %.427 to double
  %282 = getelementptr inbounds i8, ptr %12, i64 8
  store double %281, ptr %282, align 8, !tbaa !9
  %invariant.gep = getelementptr i8, ptr %15, i64 16
  %.not373569 = icmp slt i32 %280, 2
  br i1 %.not373569, label %.loopexit434, label %.lr.ph572

.lr.ph572:                                        ; preds = %278
  %283 = getelementptr inbounds i8, ptr %10, i64 8
  %284 = sext i32 %13 to i64
  %285 = add nuw i32 %280, 1
  %wide.trip.count731 = zext i32 %285 to i64
  br label %286

286:                                              ; preds = %.lr.ph572, %286
  %indvars.iv728 = phi i64 [ 2, %.lr.ph572 ], [ %indvars.iv.next729, %286 ]
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %10, align 16, !tbaa !9
  %287 = load i32, ptr %3, align 4, !tbaa !5
  %288 = trunc i64 %indvars.iv728 to i32
  %289 = add i32 %288, -1
  %290 = call i32 @llvm.smin.i32(i32 %287, i32 %289)
  store i32 %290, ptr %9, align 4, !tbaa !5
  %291 = mul nsw i64 %indvars.iv728, %284
  %gep = getelementptr %struct.doublecomplex, ptr %invariant.gep, i64 %291
  call void @zlassq_(ptr noundef nonnull %9, ptr noundef %gep, ptr noundef nonnull @c__1, ptr noundef nonnull %10, ptr noundef nonnull %283) #8
  call void @dcombssq_(ptr noundef nonnull %12, ptr noundef nonnull %10) #8
  %indvars.iv.next729 = add nuw nsw i64 %indvars.iv728, 1
  %exitcond732.not = icmp eq i64 %indvars.iv.next729, %wide.trip.count731
  br i1 %exitcond732.not, label %.loopexit434, label %286, !llvm.loop !42

292:                                              ; preds = %277
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %12, align 16, !tbaa !9
  %293 = load i32, ptr %4, align 4, !tbaa !5
  %invariant.gep573 = getelementptr i8, ptr %15, i64 16
  %.not370575 = icmp slt i32 %293, 1
  br i1 %.not370575, label %.loopexit434, label %.lr.ph578

.lr.ph578:                                        ; preds = %292
  %294 = getelementptr inbounds i8, ptr %10, i64 8
  %295 = sext i32 %13 to i64
  %296 = add nuw i32 %293, 1
  %wide.trip.count736 = zext i32 %296 to i64
  br label %297

297:                                              ; preds = %.lr.ph578, %297
  %indvars.iv733 = phi i64 [ 1, %.lr.ph578 ], [ %indvars.iv.next734, %297 ]
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %10, align 16, !tbaa !9
  %298 = load i32, ptr %3, align 4, !tbaa !5
  %299 = trunc nuw nsw i64 %indvars.iv733 to i32
  %.11325. = call i32 @llvm.smin.i32(i32 %298, i32 %299)
  store i32 %.11325., ptr %9, align 4, !tbaa !5
  %300 = mul nsw i64 %indvars.iv733, %295
  %gep574 = getelementptr %struct.doublecomplex, ptr %invariant.gep573, i64 %300
  call void @zlassq_(ptr noundef nonnull %9, ptr noundef %gep574, ptr noundef nonnull @c__1, ptr noundef nonnull %10, ptr noundef nonnull %294) #8
  call void @dcombssq_(ptr noundef nonnull %12, ptr noundef nonnull %10) #8
  %indvars.iv.next734 = add nuw nsw i64 %indvars.iv733, 1
  %exitcond737.not = icmp eq i64 %indvars.iv.next734, %wide.trip.count736
  br i1 %exitcond737.not, label %.loopexit434, label %297, !llvm.loop !43

301:                                              ; preds = %274
  br i1 %.not364, label %317, label %302

302:                                              ; preds = %301
  store double 1.000000e+00, ptr %12, align 16, !tbaa !9
  %303 = load i32, ptr %3, align 4, !tbaa !5
  %304 = load i32, ptr %4, align 4, !tbaa !5
  %.428 = tail call i32 @llvm.smin.i32(i32 %303, i32 %304)
  %305 = sitofp i32 %.428 to double
  %306 = getelementptr inbounds i8, ptr %12, i64 8
  store double %305, ptr %306, align 8, !tbaa !9
  %.not367579 = icmp slt i32 %304, 1
  br i1 %.not367579, label %.loopexit434, label %.lr.ph582

.lr.ph582:                                        ; preds = %302
  %307 = getelementptr inbounds i8, ptr %10, i64 8
  br label %308

308:                                              ; preds = %.lr.ph582, %308
  %.12326580 = phi i32 [ 1, %.lr.ph582 ], [ %311, %308 ]
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %10, align 16, !tbaa !9
  %309 = load i32, ptr %3, align 4, !tbaa !5
  %310 = sub nsw i32 %309, %.12326580
  store i32 %310, ptr %9, align 4, !tbaa !5
  %311 = add nuw nsw i32 %.12326580, 1
  %312 = call i32 @llvm.smin.i32(i32 %309, i32 %311)
  %313 = mul nsw i32 %.12326580, %13
  %314 = add nsw i32 %312, %313
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds %struct.doublecomplex, ptr %15, i64 %315
  call void @zlassq_(ptr noundef nonnull %9, ptr noundef %316, ptr noundef nonnull @c__1, ptr noundef nonnull %10, ptr noundef nonnull %307) #8
  call void @dcombssq_(ptr noundef nonnull %12, ptr noundef nonnull %10) #8
  %exitcond738.not = icmp eq i32 %.12326580, %304
  br i1 %exitcond738.not, label %.loopexit434, label %308, !llvm.loop !44

317:                                              ; preds = %301
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %12, align 16, !tbaa !9
  %318 = load i32, ptr %4, align 4, !tbaa !5
  %.not365583 = icmp slt i32 %318, 1
  br i1 %.not365583, label %.loopexit434, label %.lr.ph586

.lr.ph586:                                        ; preds = %317
  %319 = getelementptr inbounds i8, ptr %10, i64 8
  %320 = add i32 %13, 1
  %321 = add nuw i32 %318, 1
  %wide.trip.count742 = zext i32 %321 to i64
  br label %322

322:                                              ; preds = %.lr.ph586, %322
  %indvars.iv739 = phi i64 [ 1, %.lr.ph586 ], [ %indvars.iv.next740, %322 ]
  store <2 x double> <double 0.000000e+00, double 1.000000e+00>, ptr %10, align 16, !tbaa !9
  %323 = load i32, ptr %3, align 4, !tbaa !5
  %324 = trunc nuw nsw i64 %indvars.iv739 to i32
  %reass.sub = sub i32 %323, %324
  %325 = add i32 %reass.sub, 1
  store i32 %325, ptr %9, align 4, !tbaa !5
  %326 = mul i32 %320, %324
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds %struct.doublecomplex, ptr %15, i64 %327
  call void @zlassq_(ptr noundef nonnull %9, ptr noundef %328, ptr noundef nonnull @c__1, ptr noundef nonnull %10, ptr noundef nonnull %319) #8
  call void @dcombssq_(ptr noundef nonnull %12, ptr noundef nonnull %10) #8
  %indvars.iv.next740 = add nuw nsw i64 %indvars.iv739, 1
  %exitcond743.not = icmp eq i64 %indvars.iv.next740, %wide.trip.count742
  br i1 %exitcond743.not, label %.loopexit434, label %322, !llvm.loop !45

.loopexit434:                                     ; preds = %286, %297, %308, %322, %278, %292, %302, %317
  %329 = load double, ptr %12, align 16, !tbaa !9
  %330 = getelementptr inbounds i8, ptr %12, i64 8
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = call double @sqrt(double noundef %331) #8
  %333 = fmul double %329, %332
  br label %.loopexit430

.loopexit430:                                     ; preds = %._crit_edge, %.loopexit447, %._crit_edge476, %._crit_edge489, %269, %133, %164, %27, %45, %62, %78, %.loopexit439, %102, %134, %8, %.loopexit434, %272
  %.18 = phi double [ %333, %.loopexit434 ], [ undef, %272 ], [ 0.000000e+00, %8 ], [ 0.000000e+00, %134 ], [ 0.000000e+00, %102 ], [ 0.000000e+00, %.loopexit439 ], [ 0.000000e+00, %78 ], [ 0.000000e+00, %62 ], [ 1.000000e+00, %45 ], [ 1.000000e+00, %27 ], [ %.15343, %164 ], [ %.13341, %133 ], [ %.17345, %269 ], [ %.10338.lcssa, %._crit_edge489 ], [ %.7335.lcssa, %._crit_edge476 ], [ %.4332.lcssa, %.loopexit447 ], [ %.1329.lcssa, %._crit_edge ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  ret double %.18
}

; 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

; Function Attrs: nofree nounwind
declare double @cabs(double noundef, double noundef) local_unnamed_addr #3

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

declare i32 @disnan_(ptr noundef) local_unnamed_addr #2

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

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

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

; 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.smin.i32(i32, i32) #6

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

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

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

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


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