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

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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [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
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@c_false = external hidden global i32, align 4
@c_true = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dhsein_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18) #0 {
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca i32, align 4
  %50 = alloca double, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca double, align 8
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca double, align 8
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca double, align 8
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca double, align 8
  %68 = alloca i32, align 4
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca i32, align 4
  store ptr %0, ptr %20, align 8, !tbaa !5
  store ptr %1, ptr %21, align 8, !tbaa !5
  store ptr %2, ptr %22, align 8, !tbaa !5
  store ptr %3, ptr %23, align 8, !tbaa !5
  store ptr %4, ptr %24, align 8, !tbaa !5
  store ptr %5, ptr %25, align 8, !tbaa !5
  store ptr %6, ptr %26, align 8, !tbaa !5
  store ptr %7, ptr %27, align 8, !tbaa !5
  store ptr %8, ptr %28, align 8, !tbaa !5
  store ptr %9, ptr %29, align 8, !tbaa !5
  store ptr %10, ptr %30, align 8, !tbaa !5
  store ptr %11, ptr %31, align 8, !tbaa !5
  store ptr %12, ptr %32, align 8, !tbaa !5
  store ptr %13, ptr %33, align 8, !tbaa !5
  store ptr %14, ptr %34, align 8, !tbaa !5
  store ptr %15, ptr %35, align 8, !tbaa !5
  store ptr %16, ptr %36, align 8, !tbaa !5
  store ptr %17, ptr %37, align 8, !tbaa !5
  store ptr %18, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #3
  %73 = load ptr, ptr %23, align 8, !tbaa !5
  %74 = getelementptr inbounds i32, ptr %73, i32 -1
  store ptr %74, ptr %23, align 8, !tbaa !5
  %75 = load ptr, ptr %26, align 8, !tbaa !5
  %76 = load i32, ptr %75, align 4, !tbaa !9
  store i32 %76, ptr %39, align 4, !tbaa !9
  %77 = load i32, ptr %39, align 4, !tbaa !9
  %78 = mul nsw i32 %77, 1
  %79 = add nsw i32 1, %78
  store i32 %79, ptr %40, align 4, !tbaa !9
  %80 = load i32, ptr %40, align 4, !tbaa !9
  %81 = load ptr, ptr %25, align 8, !tbaa !5
  %82 = sext i32 %80 to i64
  %83 = sub i64 0, %82
  %84 = getelementptr inbounds double, ptr %81, i64 %83
  store ptr %84, ptr %25, align 8, !tbaa !5
  %85 = load ptr, ptr %27, align 8, !tbaa !5
  %86 = getelementptr inbounds double, ptr %85, i32 -1
  store ptr %86, ptr %27, align 8, !tbaa !5
  %87 = load ptr, ptr %28, align 8, !tbaa !5
  %88 = getelementptr inbounds double, ptr %87, i32 -1
  store ptr %88, ptr %28, align 8, !tbaa !5
  %89 = load ptr, ptr %30, align 8, !tbaa !5
  %90 = load i32, ptr %89, align 4, !tbaa !9
  store i32 %90, ptr %41, align 4, !tbaa !9
  %91 = load i32, ptr %41, align 4, !tbaa !9
  %92 = mul nsw i32 %91, 1
  %93 = add nsw i32 1, %92
  store i32 %93, ptr %42, align 4, !tbaa !9
  %94 = load i32, ptr %42, align 4, !tbaa !9
  %95 = load ptr, ptr %29, align 8, !tbaa !5
  %96 = sext i32 %94 to i64
  %97 = sub i64 0, %96
  %98 = getelementptr inbounds double, ptr %95, i64 %97
  store ptr %98, ptr %29, align 8, !tbaa !5
  %99 = load ptr, ptr %32, align 8, !tbaa !5
  %100 = load i32, ptr %99, align 4, !tbaa !9
  store i32 %100, ptr %43, align 4, !tbaa !9
  %101 = load i32, ptr %43, align 4, !tbaa !9
  %102 = mul nsw i32 %101, 1
  %103 = add nsw i32 1, %102
  store i32 %103, ptr %44, align 4, !tbaa !9
  %104 = load i32, ptr %44, align 4, !tbaa !9
  %105 = load ptr, ptr %31, align 8, !tbaa !5
  %106 = sext i32 %104 to i64
  %107 = sub i64 0, %106
  %108 = getelementptr inbounds double, ptr %105, i64 %107
  store ptr %108, ptr %31, align 8, !tbaa !5
  %109 = load ptr, ptr %35, align 8, !tbaa !5
  %110 = getelementptr inbounds double, ptr %109, i32 -1
  store ptr %110, ptr %35, align 8, !tbaa !5
  %111 = load ptr, ptr %36, align 8, !tbaa !5
  %112 = getelementptr inbounds i32, ptr %111, i32 -1
  store ptr %112, ptr %36, align 8, !tbaa !5
  %113 = load ptr, ptr %37, align 8, !tbaa !5
  %114 = getelementptr inbounds i32, ptr %113, i32 -1
  store ptr %114, ptr %37, align 8, !tbaa !5
  %115 = load ptr, ptr %20, align 8, !tbaa !5
  %116 = call i32 @lsame_(ptr noundef %115, ptr noundef @.str)
  store i32 %116, ptr %55, align 4, !tbaa !9
  %117 = load ptr, ptr %20, align 8, !tbaa !5
  %118 = call i32 @lsame_(ptr noundef %117, ptr noundef @.str.1)
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %123, label %120

120:                                              ; preds = %19
  %121 = load i32, ptr %55, align 4, !tbaa !9
  %122 = icmp ne i32 %121, 0
  br label %123

123:                                              ; preds = %120, %19
  %124 = phi i1 [ true, %19 ], [ %122, %120 ]
  %125 = zext i1 %124 to i32
  store i32 %125, ptr %62, align 4, !tbaa !9
  %126 = load ptr, ptr %20, align 8, !tbaa !5
  %127 = call i32 @lsame_(ptr noundef %126, ptr noundef @.str.2)
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %132, label %129

129:                                              ; preds = %123
  %130 = load i32, ptr %55, align 4, !tbaa !9
  %131 = icmp ne i32 %130, 0
  br label %132

132:                                              ; preds = %129, %123
  %133 = phi i1 [ true, %123 ], [ %131, %129 ]
  %134 = zext i1 %133 to i32
  store i32 %134, ptr %54, align 4, !tbaa !9
  %135 = load ptr, ptr %21, align 8, !tbaa !5
  %136 = call i32 @lsame_(ptr noundef %135, ptr noundef @.str.3)
  store i32 %136, ptr %63, align 4, !tbaa !9
  %137 = load ptr, ptr %22, align 8, !tbaa !5
  %138 = call i32 @lsame_(ptr noundef %137, ptr noundef @.str.4)
  store i32 %138, ptr %60, align 4, !tbaa !9
  %139 = load ptr, ptr %34, align 8, !tbaa !5
  store i32 0, ptr %139, align 4, !tbaa !9
  store i32 0, ptr %49, align 4, !tbaa !9
  %140 = load ptr, ptr %24, align 8, !tbaa !5
  %141 = load i32, ptr %140, align 4, !tbaa !9
  store i32 %141, ptr %45, align 4, !tbaa !9
  store i32 1, ptr %52, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %199, %132
  %143 = load i32, ptr %52, align 4, !tbaa !9
  %144 = load i32, ptr %45, align 4, !tbaa !9
  %145 = icmp sle i32 %143, %144
  br i1 %145, label %146, label %202

146:                                              ; preds = %142
  %147 = load i32, ptr %49, align 4, !tbaa !9
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %149, label %154

149:                                              ; preds = %146
  store i32 0, ptr %49, align 4, !tbaa !9
  %150 = load ptr, ptr %23, align 8, !tbaa !5
  %151 = load i32, ptr %52, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds i32, ptr %150, i64 %152
  store i32 0, ptr %153, align 4, !tbaa !9
  br label %198

154:                                              ; preds = %146
  %155 = load ptr, ptr %28, align 8, !tbaa !5
  %156 = load i32, ptr %52, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds double, ptr %155, i64 %157
  %159 = load double, ptr %158, align 8, !tbaa !11
  %160 = fcmp oeq double %159, 0.000000e+00
  br i1 %160, label %161, label %173

161:                                              ; preds = %154
  %162 = load ptr, ptr %23, align 8, !tbaa !5
  %163 = load i32, ptr %52, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i32, ptr %162, i64 %164
  %166 = load i32, ptr %165, align 4, !tbaa !9
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %168, label %172

168:                                              ; preds = %161
  %169 = load ptr, ptr %34, align 8, !tbaa !5
  %170 = load i32, ptr %169, align 4, !tbaa !9
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %169, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %168, %161
  br label %197

173:                                              ; preds = %154
  store i32 1, ptr %49, align 4, !tbaa !9
  %174 = load ptr, ptr %23, align 8, !tbaa !5
  %175 = load i32, ptr %52, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i32, ptr %174, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %188, label %180

180:                                              ; preds = %173
  %181 = load ptr, ptr %23, align 8, !tbaa !5
  %182 = load i32, ptr %52, align 4, !tbaa !9
  %183 = add nsw i32 %182, 1
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds i32, ptr %181, i64 %184
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %196

188:                                              ; preds = %180, %173
  %189 = load ptr, ptr %23, align 8, !tbaa !5
  %190 = load i32, ptr %52, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %189, i64 %191
  store i32 1, ptr %192, align 4, !tbaa !9
  %193 = load ptr, ptr %34, align 8, !tbaa !5
  %194 = load i32, ptr %193, align 4, !tbaa !9
  %195 = add nsw i32 %194, 2
  store i32 %195, ptr %193, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %188, %180
  br label %197

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

198:                                              ; preds = %197, %149
  br label %199

199:                                              ; preds = %198
  %200 = load i32, ptr %52, align 4, !tbaa !9
  %201 = add nsw i32 %200, 1
  store i32 %201, ptr %52, align 4, !tbaa !9
  br label %142, !llvm.loop !13

202:                                              ; preds = %142
  %203 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 0, ptr %203, align 4, !tbaa !9
  %204 = load i32, ptr %62, align 4, !tbaa !9
  %205 = icmp ne i32 %204, 0
  br i1 %205, label %211, label %206

206:                                              ; preds = %202
  %207 = load i32, ptr %54, align 4, !tbaa !9
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %211, label %209

209:                                              ; preds = %206
  %210 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -1, ptr %210, align 4, !tbaa !9
  br label %295

211:                                              ; preds = %206, %202
  %212 = load i32, ptr %63, align 4, !tbaa !9
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %220, label %214

214:                                              ; preds = %211
  %215 = load ptr, ptr %21, align 8, !tbaa !5
  %216 = call i32 @lsame_(ptr noundef %215, ptr noundef @.str.4)
  %217 = icmp ne i32 %216, 0
  br i1 %217, label %220, label %218

218:                                              ; preds = %214
  %219 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -2, ptr %219, align 4, !tbaa !9
  br label %294

220:                                              ; preds = %214, %211
  %221 = load i32, ptr %60, align 4, !tbaa !9
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %229, label %223

223:                                              ; preds = %220
  %224 = load ptr, ptr %22, align 8, !tbaa !5
  %225 = call i32 @lsame_(ptr noundef %224, ptr noundef @.str.5)
  %226 = icmp ne i32 %225, 0
  br i1 %226, label %229, label %227

227:                                              ; preds = %223
  %228 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -3, ptr %228, align 4, !tbaa !9
  br label %293

229:                                              ; preds = %223, %220
  %230 = load ptr, ptr %24, align 8, !tbaa !5
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = icmp slt i32 %231, 0
  br i1 %232, label %233, label %235

233:                                              ; preds = %229
  %234 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -5, ptr %234, align 4, !tbaa !9
  br label %292

235:                                              ; preds = %229
  %236 = load ptr, ptr %26, align 8, !tbaa !5
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = load ptr, ptr %24, align 8, !tbaa !5
  %239 = load i32, ptr %238, align 4, !tbaa !9
  %240 = icmp sge i32 1, %239
  br i1 %240, label %241, label %242

241:                                              ; preds = %235
  br label %245

242:                                              ; preds = %235
  %243 = load ptr, ptr %24, align 8, !tbaa !5
  %244 = load i32, ptr %243, align 4, !tbaa !9
  br label %245

245:                                              ; preds = %242, %241
  %246 = phi i32 [ 1, %241 ], [ %244, %242 ]
  %247 = icmp slt i32 %237, %246
  br i1 %247, label %248, label %250

248:                                              ; preds = %245
  %249 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -7, ptr %249, align 4, !tbaa !9
  br label %291

250:                                              ; preds = %245
  %251 = load ptr, ptr %30, align 8, !tbaa !5
  %252 = load i32, ptr %251, align 4, !tbaa !9
  %253 = icmp slt i32 %252, 1
  br i1 %253, label %263, label %254

254:                                              ; preds = %250
  %255 = load i32, ptr %54, align 4, !tbaa !9
  %256 = icmp ne i32 %255, 0
  br i1 %256, label %257, label %265

257:                                              ; preds = %254
  %258 = load ptr, ptr %30, align 8, !tbaa !5
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = load ptr, ptr %24, align 8, !tbaa !5
  %261 = load i32, ptr %260, align 4, !tbaa !9
  %262 = icmp slt i32 %259, %261
  br i1 %262, label %263, label %265

263:                                              ; preds = %257, %250
  %264 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -11, ptr %264, align 4, !tbaa !9
  br label %290

265:                                              ; preds = %257, %254
  %266 = load ptr, ptr %32, align 8, !tbaa !5
  %267 = load i32, ptr %266, align 4, !tbaa !9
  %268 = icmp slt i32 %267, 1
  br i1 %268, label %278, label %269

269:                                              ; preds = %265
  %270 = load i32, ptr %62, align 4, !tbaa !9
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %280

272:                                              ; preds = %269
  %273 = load ptr, ptr %32, align 8, !tbaa !5
  %274 = load i32, ptr %273, align 4, !tbaa !9
  %275 = load ptr, ptr %24, align 8, !tbaa !5
  %276 = load i32, ptr %275, align 4, !tbaa !9
  %277 = icmp slt i32 %274, %276
  br i1 %277, label %278, label %280

278:                                              ; preds = %272, %265
  %279 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -13, ptr %279, align 4, !tbaa !9
  br label %289

280:                                              ; preds = %272, %269
  %281 = load ptr, ptr %33, align 8, !tbaa !5
  %282 = load i32, ptr %281, align 4, !tbaa !9
  %283 = load ptr, ptr %34, align 8, !tbaa !5
  %284 = load i32, ptr %283, align 4, !tbaa !9
  %285 = icmp slt i32 %282, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %280
  %287 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -14, ptr %287, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %286, %280
  br label %289

289:                                              ; preds = %288, %278
  br label %290

290:                                              ; preds = %289, %263
  br label %291

291:                                              ; preds = %290, %248
  br label %292

292:                                              ; preds = %291, %233
  br label %293

293:                                              ; preds = %292, %227
  br label %294

294:                                              ; preds = %293, %218
  br label %295

295:                                              ; preds = %294, %209
  %296 = load ptr, ptr %38, align 8, !tbaa !5
  %297 = load i32, ptr %296, align 4, !tbaa !9
  %298 = icmp ne i32 %297, 0
  br i1 %298, label %299, label %304

299:                                              ; preds = %295
  %300 = load ptr, ptr %38, align 8, !tbaa !5
  %301 = load i32, ptr %300, align 4, !tbaa !9
  %302 = sub nsw i32 0, %301
  store i32 %302, ptr %45, align 4, !tbaa !9
  %303 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %45, i32 noundef 6)
  store i32 1, ptr %72, align 4
  br label %789

304:                                              ; preds = %295
  %305 = load ptr, ptr %24, align 8, !tbaa !5
  %306 = load i32, ptr %305, align 4, !tbaa !9
  %307 = icmp eq i32 %306, 0
  br i1 %307, label %308, label %309

308:                                              ; preds = %304
  store i32 1, ptr %72, align 4
  br label %789

309:                                              ; preds = %304
  %310 = call double @dlamch_(ptr noundef @.str.7)
  store double %310, ptr %50, align 8, !tbaa !11
  %311 = call double @dlamch_(ptr noundef @.str.8)
  store double %311, ptr %69, align 8, !tbaa !11
  %312 = load double, ptr %50, align 8, !tbaa !11
  %313 = load ptr, ptr %24, align 8, !tbaa !5
  %314 = load i32, ptr %313, align 4, !tbaa !9
  %315 = sitofp i32 %314 to double
  %316 = load double, ptr %69, align 8, !tbaa !11
  %317 = fdiv double %315, %316
  %318 = fmul double %312, %317
  store double %318, ptr %64, align 8, !tbaa !11
  %319 = load double, ptr %69, align 8, !tbaa !11
  %320 = fsub double 1.000000e+00, %319
  %321 = load double, ptr %64, align 8, !tbaa !11
  %322 = fdiv double %320, %321
  store double %322, ptr %59, align 8, !tbaa !11
  %323 = load ptr, ptr %24, align 8, !tbaa !5
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %61, align 4, !tbaa !9
  store i32 1, ptr %57, align 4, !tbaa !9
  store i32 0, ptr %65, align 4, !tbaa !9
  %326 = load i32, ptr %63, align 4, !tbaa !9
  %327 = icmp ne i32 %326, 0
  br i1 %327, label %328, label %329

328:                                              ; preds = %309
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %332

329:                                              ; preds = %309
  %330 = load ptr, ptr %24, align 8, !tbaa !5
  %331 = load i32, ptr %330, align 4, !tbaa !9
  store i32 %331, ptr %58, align 4, !tbaa !9
  br label %332

332:                                              ; preds = %329, %328
  store i32 1, ptr %68, align 4, !tbaa !9
  %333 = load ptr, ptr %24, align 8, !tbaa !5
  %334 = load i32, ptr %333, align 4, !tbaa !9
  store i32 %334, ptr %45, align 4, !tbaa !9
  store i32 1, ptr %52, align 4, !tbaa !9
  br label %335

335:                                              ; preds = %785, %332
  %336 = load i32, ptr %52, align 4, !tbaa !9
  %337 = load i32, ptr %45, align 4, !tbaa !9
  %338 = icmp sle i32 %336, %337
  br i1 %338, label %339, label %788

339:                                              ; preds = %335
  %340 = load ptr, ptr %23, align 8, !tbaa !5
  %341 = load i32, ptr %52, align 4, !tbaa !9
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %340, i64 %342
  %344 = load i32, ptr %343, align 4, !tbaa !9
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %346, label %784

346:                                              ; preds = %339
  %347 = load i32, ptr %63, align 4, !tbaa !9
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %349, label %410

349:                                              ; preds = %346
  %350 = load i32, ptr %57, align 4, !tbaa !9
  %351 = add nsw i32 %350, 1
  store i32 %351, ptr %46, align 4, !tbaa !9
  %352 = load i32, ptr %52, align 4, !tbaa !9
  store i32 %352, ptr %51, align 4, !tbaa !9
  br label %353

353:                                              ; preds = %371, %349
  %354 = load i32, ptr %51, align 4, !tbaa !9
  %355 = load i32, ptr %46, align 4, !tbaa !9
  %356 = icmp sge i32 %354, %355
  br i1 %356, label %357, label %374

357:                                              ; preds = %353
  %358 = load ptr, ptr %25, align 8, !tbaa !5
  %359 = load i32, ptr %51, align 4, !tbaa !9
  %360 = load i32, ptr %51, align 4, !tbaa !9
  %361 = sub nsw i32 %360, 1
  %362 = load i32, ptr %39, align 4, !tbaa !9
  %363 = mul nsw i32 %361, %362
  %364 = add nsw i32 %359, %363
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds double, ptr %358, i64 %365
  %367 = load double, ptr %366, align 8, !tbaa !11
  %368 = fcmp oeq double %367, 0.000000e+00
  br i1 %368, label %369, label %370

369:                                              ; preds = %357
  br label %375

370:                                              ; preds = %357
  br label %371

371:                                              ; preds = %370
  %372 = load i32, ptr %51, align 4, !tbaa !9
  %373 = add nsw i32 %372, -1
  store i32 %373, ptr %51, align 4, !tbaa !9
  br label %353, !llvm.loop !15

374:                                              ; preds = %353
  br label %375

375:                                              ; preds = %374, %369
  %376 = load i32, ptr %51, align 4, !tbaa !9
  store i32 %376, ptr %57, align 4, !tbaa !9
  %377 = load i32, ptr %52, align 4, !tbaa !9
  %378 = load i32, ptr %58, align 4, !tbaa !9
  %379 = icmp sgt i32 %377, %378
  br i1 %379, label %380, label %409

380:                                              ; preds = %375
  %381 = load ptr, ptr %24, align 8, !tbaa !5
  %382 = load i32, ptr %381, align 4, !tbaa !9
  %383 = sub nsw i32 %382, 1
  store i32 %383, ptr %46, align 4, !tbaa !9
  %384 = load i32, ptr %52, align 4, !tbaa !9
  store i32 %384, ptr %51, align 4, !tbaa !9
  br label %385

385:                                              ; preds = %403, %380
  %386 = load i32, ptr %51, align 4, !tbaa !9
  %387 = load i32, ptr %46, align 4, !tbaa !9
  %388 = icmp sle i32 %386, %387
  br i1 %388, label %389, label %406

389:                                              ; preds = %385
  %390 = load ptr, ptr %25, align 8, !tbaa !5
  %391 = load i32, ptr %51, align 4, !tbaa !9
  %392 = add nsw i32 %391, 1
  %393 = load i32, ptr %51, align 4, !tbaa !9
  %394 = load i32, ptr %39, 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 double, ptr %390, i64 %397
  %399 = load double, ptr %398, align 8, !tbaa !11
  %400 = fcmp oeq double %399, 0.000000e+00
  br i1 %400, label %401, label %402

401:                                              ; preds = %389
  br label %407

402:                                              ; preds = %389
  br label %403

403:                                              ; preds = %402
  %404 = load i32, ptr %51, align 4, !tbaa !9
  %405 = add nsw i32 %404, 1
  store i32 %405, ptr %51, align 4, !tbaa !9
  br label %385, !llvm.loop !16

406:                                              ; preds = %385
  br label %407

407:                                              ; preds = %406, %401
  %408 = load i32, ptr %51, align 4, !tbaa !9
  store i32 %408, ptr %58, align 4, !tbaa !9
  br label %409

409:                                              ; preds = %407, %375
  br label %410

410:                                              ; preds = %409, %346
  %411 = load i32, ptr %57, align 4, !tbaa !9
  %412 = load i32, ptr %65, align 4, !tbaa !9
  %413 = icmp ne i32 %411, %412
  br i1 %413, label %414, label %447

414:                                              ; preds = %410
  %415 = load i32, ptr %57, align 4, !tbaa !9
  store i32 %415, ptr %65, align 4, !tbaa !9
  %416 = load i32, ptr %58, align 4, !tbaa !9
  %417 = load i32, ptr %57, align 4, !tbaa !9
  %418 = sub nsw i32 %416, %417
  %419 = add nsw i32 %418, 1
  store i32 %419, ptr %46, align 4, !tbaa !9
  %420 = load ptr, ptr %25, align 8, !tbaa !5
  %421 = load i32, ptr %57, align 4, !tbaa !9
  %422 = load i32, ptr %57, align 4, !tbaa !9
  %423 = load i32, ptr %39, align 4, !tbaa !9
  %424 = mul nsw i32 %422, %423
  %425 = add nsw i32 %421, %424
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %420, i64 %426
  %428 = load ptr, ptr %26, align 8, !tbaa !5
  %429 = load ptr, ptr %35, align 8, !tbaa !5
  %430 = getelementptr inbounds double, ptr %429, i64 1
  %431 = call double @dlanhs_(ptr noundef @.str.9, ptr noundef %46, ptr noundef %427, ptr noundef %428, ptr noundef %430)
  store double %431, ptr %56, align 8, !tbaa !11
  %432 = call i32 @disnan_(ptr noundef %56)
  %433 = icmp ne i32 %432, 0
  br i1 %433, label %434, label %436

434:                                              ; preds = %414
  %435 = load ptr, ptr %38, align 8, !tbaa !5
  store i32 -6, ptr %435, align 4, !tbaa !9
  store i32 1, ptr %72, align 4
  br label %789

436:                                              ; preds = %414
  %437 = load double, ptr %56, align 8, !tbaa !11
  %438 = fcmp ogt double %437, 0.000000e+00
  br i1 %438, label %439, label %443

439:                                              ; preds = %436
  %440 = load double, ptr %56, align 8, !tbaa !11
  %441 = load double, ptr %69, align 8, !tbaa !11
  %442 = fmul double %440, %441
  store double %442, ptr %71, align 8, !tbaa !11
  br label %445

443:                                              ; preds = %436
  %444 = load double, ptr %64, align 8, !tbaa !11
  store double %444, ptr %71, align 8, !tbaa !11
  br label %445

445:                                              ; preds = %443, %439
  br label %446

446:                                              ; preds = %445
  br label %447

447:                                              ; preds = %446, %410
  %448 = load ptr, ptr %27, align 8, !tbaa !5
  %449 = load i32, ptr %52, align 4, !tbaa !9
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds double, ptr %448, i64 %450
  %452 = load double, ptr %451, align 8, !tbaa !11
  store double %452, ptr %70, align 8, !tbaa !11
  %453 = load ptr, ptr %28, align 8, !tbaa !5
  %454 = load i32, ptr %52, align 4, !tbaa !9
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds double, ptr %453, i64 %455
  %457 = load double, ptr %456, align 8, !tbaa !11
  store double %457, ptr %67, align 8, !tbaa !11
  br label %458

458:                                              ; preds = %509, %447
  %459 = load i32, ptr %57, align 4, !tbaa !9
  store i32 %459, ptr %46, align 4, !tbaa !9
  %460 = load i32, ptr %52, align 4, !tbaa !9
  %461 = sub nsw i32 %460, 1
  store i32 %461, ptr %51, align 4, !tbaa !9
  br label %462

462:                                              ; preds = %514, %458
  %463 = load i32, ptr %51, align 4, !tbaa !9
  %464 = load i32, ptr %46, align 4, !tbaa !9
  %465 = icmp sge i32 %463, %464
  br i1 %465, label %466, label %517

466:                                              ; preds = %462
  %467 = load ptr, ptr %23, align 8, !tbaa !5
  %468 = load i32, ptr %51, align 4, !tbaa !9
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds i32, ptr %467, i64 %469
  %471 = load i32, ptr %470, align 4, !tbaa !9
  %472 = icmp ne i32 %471, 0
  br i1 %472, label %473, label %513

473:                                              ; preds = %466
  %474 = load ptr, ptr %27, align 8, !tbaa !5
  %475 = load i32, ptr %51, align 4, !tbaa !9
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds double, ptr %474, i64 %476
  %478 = load double, ptr %477, align 8, !tbaa !11
  %479 = load double, ptr %70, align 8, !tbaa !11
  %480 = fsub double %478, %479
  store double %480, ptr %47, align 8, !tbaa !11
  %481 = load double, ptr %47, align 8, !tbaa !11
  %482 = fcmp oge double %481, 0.000000e+00
  br i1 %482, label %483, label %485

483:                                              ; preds = %473
  %484 = load double, ptr %47, align 8, !tbaa !11
  br label %488

485:                                              ; preds = %473
  %486 = load double, ptr %47, align 8, !tbaa !11
  %487 = fneg double %486
  br label %488

488:                                              ; preds = %485, %483
  %489 = phi double [ %484, %483 ], [ %487, %485 ]
  %490 = load ptr, ptr %28, align 8, !tbaa !5
  %491 = load i32, ptr %51, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds double, ptr %490, i64 %492
  %494 = load double, ptr %493, align 8, !tbaa !11
  %495 = load double, ptr %67, align 8, !tbaa !11
  %496 = fsub double %494, %495
  store double %496, ptr %48, align 8, !tbaa !11
  %497 = load double, ptr %48, align 8, !tbaa !11
  %498 = fcmp oge double %497, 0.000000e+00
  br i1 %498, label %499, label %501

499:                                              ; preds = %488
  %500 = load double, ptr %48, align 8, !tbaa !11
  br label %504

501:                                              ; preds = %488
  %502 = load double, ptr %48, align 8, !tbaa !11
  %503 = fneg double %502
  br label %504

504:                                              ; preds = %501, %499
  %505 = phi double [ %500, %499 ], [ %503, %501 ]
  %506 = fadd double %489, %505
  %507 = load double, ptr %71, align 8, !tbaa !11
  %508 = fcmp olt double %506, %507
  br i1 %508, label %509, label %513

509:                                              ; preds = %504
  %510 = load double, ptr %71, align 8, !tbaa !11
  %511 = load double, ptr %70, align 8, !tbaa !11
  %512 = fadd double %511, %510
  store double %512, ptr %70, align 8, !tbaa !11
  br label %458

513:                                              ; preds = %504, %466
  br label %514

514:                                              ; preds = %513
  %515 = load i32, ptr %51, align 4, !tbaa !9
  %516 = add nsw i32 %515, -1
  store i32 %516, ptr %51, align 4, !tbaa !9
  br label %462, !llvm.loop !17

517:                                              ; preds = %462
  %518 = load double, ptr %70, align 8, !tbaa !11
  %519 = load ptr, ptr %27, align 8, !tbaa !5
  %520 = load i32, ptr %52, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds double, ptr %519, i64 %521
  store double %518, ptr %522, align 8, !tbaa !11
  %523 = load double, ptr %67, align 8, !tbaa !11
  %524 = fcmp une double %523, 0.000000e+00
  %525 = zext i1 %524 to i32
  store i32 %525, ptr %49, align 4, !tbaa !9
  %526 = load i32, ptr %49, align 4, !tbaa !9
  %527 = icmp ne i32 %526, 0
  br i1 %527, label %528, label %531

528:                                              ; preds = %517
  %529 = load i32, ptr %68, align 4, !tbaa !9
  %530 = add nsw i32 %529, 1
  store i32 %530, ptr %66, align 4, !tbaa !9
  br label %533

531:                                              ; preds = %517
  %532 = load i32, ptr %68, align 4, !tbaa !9
  store i32 %532, ptr %66, align 4, !tbaa !9
  br label %533

533:                                              ; preds = %531, %528
  %534 = load i32, ptr %54, align 4, !tbaa !9
  %535 = icmp ne i32 %534, 0
  br i1 %535, label %536, label %657

536:                                              ; preds = %533
  %537 = load ptr, ptr %24, align 8, !tbaa !5
  %538 = load i32, ptr %537, align 4, !tbaa !9
  %539 = load i32, ptr %57, align 4, !tbaa !9
  %540 = sub nsw i32 %538, %539
  %541 = add nsw i32 %540, 1
  store i32 %541, ptr %46, align 4, !tbaa !9
  %542 = load ptr, ptr %25, align 8, !tbaa !5
  %543 = load i32, ptr %57, align 4, !tbaa !9
  %544 = load i32, ptr %57, align 4, !tbaa !9
  %545 = load i32, ptr %39, align 4, !tbaa !9
  %546 = mul nsw i32 %544, %545
  %547 = add nsw i32 %543, %546
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds double, ptr %542, i64 %548
  %550 = load ptr, ptr %26, align 8, !tbaa !5
  %551 = load ptr, ptr %29, align 8, !tbaa !5
  %552 = load i32, ptr %57, align 4, !tbaa !9
  %553 = load i32, ptr %68, align 4, !tbaa !9
  %554 = load i32, ptr %41, align 4, !tbaa !9
  %555 = mul nsw i32 %553, %554
  %556 = add nsw i32 %552, %555
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds double, ptr %551, i64 %557
  %559 = load ptr, ptr %29, align 8, !tbaa !5
  %560 = load i32, ptr %57, align 4, !tbaa !9
  %561 = load i32, ptr %66, align 4, !tbaa !9
  %562 = load i32, ptr %41, align 4, !tbaa !9
  %563 = mul nsw i32 %561, %562
  %564 = add nsw i32 %560, %563
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds double, ptr %559, i64 %565
  %567 = load ptr, ptr %35, align 8, !tbaa !5
  %568 = getelementptr inbounds double, ptr %567, i64 1
  %569 = load ptr, ptr %35, align 8, !tbaa !5
  %570 = load ptr, ptr %24, align 8, !tbaa !5
  %571 = load i32, ptr %570, align 4, !tbaa !9
  %572 = load ptr, ptr %24, align 8, !tbaa !5
  %573 = load i32, ptr %572, align 4, !tbaa !9
  %574 = mul nsw i32 %571, %573
  %575 = load ptr, ptr %24, align 8, !tbaa !5
  %576 = load i32, ptr %575, align 4, !tbaa !9
  %577 = add nsw i32 %574, %576
  %578 = add nsw i32 %577, 1
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds double, ptr %569, i64 %579
  call void @dlaein_(ptr noundef @c_false, ptr noundef %60, ptr noundef %46, ptr noundef %549, ptr noundef %550, ptr noundef %70, ptr noundef %67, ptr noundef %558, ptr noundef %566, ptr noundef %568, ptr noundef %61, ptr noundef %580, ptr noundef %71, ptr noundef %64, ptr noundef %59, ptr noundef %53)
  %581 = load i32, ptr %53, align 4, !tbaa !9
  %582 = icmp sgt i32 %581, 0
  br i1 %582, label %583, label %605

583:                                              ; preds = %536
  %584 = load i32, ptr %49, align 4, !tbaa !9
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %586, label %590

586:                                              ; preds = %583
  %587 = load ptr, ptr %38, align 8, !tbaa !5
  %588 = load i32, ptr %587, align 4, !tbaa !9
  %589 = add nsw i32 %588, 2
  store i32 %589, ptr %587, align 4, !tbaa !9
  br label %594

590:                                              ; preds = %583
  %591 = load ptr, ptr %38, align 8, !tbaa !5
  %592 = load i32, ptr %591, align 4, !tbaa !9
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %591, align 4, !tbaa !9
  br label %594

594:                                              ; preds = %590, %586
  %595 = load i32, ptr %52, align 4, !tbaa !9
  %596 = load ptr, ptr %36, align 8, !tbaa !5
  %597 = load i32, ptr %68, align 4, !tbaa !9
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds i32, ptr %596, i64 %598
  store i32 %595, ptr %599, align 4, !tbaa !9
  %600 = load i32, ptr %52, align 4, !tbaa !9
  %601 = load ptr, ptr %36, align 8, !tbaa !5
  %602 = load i32, ptr %66, align 4, !tbaa !9
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds i32, ptr %601, i64 %603
  store i32 %600, ptr %604, align 4, !tbaa !9
  br label %614

605:                                              ; preds = %536
  %606 = load ptr, ptr %36, align 8, !tbaa !5
  %607 = load i32, ptr %68, align 4, !tbaa !9
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds i32, ptr %606, i64 %608
  store i32 0, ptr %609, align 4, !tbaa !9
  %610 = load ptr, ptr %36, align 8, !tbaa !5
  %611 = load i32, ptr %66, align 4, !tbaa !9
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds i32, ptr %610, i64 %612
  store i32 0, ptr %613, align 4, !tbaa !9
  br label %614

614:                                              ; preds = %605, %594
  %615 = load i32, ptr %57, align 4, !tbaa !9
  %616 = sub nsw i32 %615, 1
  store i32 %616, ptr %46, align 4, !tbaa !9
  store i32 1, ptr %51, align 4, !tbaa !9
  br label %617

617:                                              ; preds = %630, %614
  %618 = load i32, ptr %51, align 4, !tbaa !9
  %619 = load i32, ptr %46, align 4, !tbaa !9
  %620 = icmp sle i32 %618, %619
  br i1 %620, label %621, label %633

621:                                              ; preds = %617
  %622 = load ptr, ptr %29, align 8, !tbaa !5
  %623 = load i32, ptr %51, align 4, !tbaa !9
  %624 = load i32, ptr %68, align 4, !tbaa !9
  %625 = load i32, ptr %41, align 4, !tbaa !9
  %626 = mul nsw i32 %624, %625
  %627 = add nsw i32 %623, %626
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds double, ptr %622, i64 %628
  store double 0.000000e+00, ptr %629, align 8, !tbaa !11
  br label %630

630:                                              ; preds = %621
  %631 = load i32, ptr %51, align 4, !tbaa !9
  %632 = add nsw i32 %631, 1
  store i32 %632, ptr %51, align 4, !tbaa !9
  br label %617, !llvm.loop !18

633:                                              ; preds = %617
  %634 = load i32, ptr %49, align 4, !tbaa !9
  %635 = icmp ne i32 %634, 0
  br i1 %635, label %636, label %656

636:                                              ; preds = %633
  %637 = load i32, ptr %57, align 4, !tbaa !9
  %638 = sub nsw i32 %637, 1
  store i32 %638, ptr %46, align 4, !tbaa !9
  store i32 1, ptr %51, align 4, !tbaa !9
  br label %639

639:                                              ; preds = %652, %636
  %640 = load i32, ptr %51, align 4, !tbaa !9
  %641 = load i32, ptr %46, align 4, !tbaa !9
  %642 = icmp sle i32 %640, %641
  br i1 %642, label %643, label %655

643:                                              ; preds = %639
  %644 = load ptr, ptr %29, align 8, !tbaa !5
  %645 = load i32, ptr %51, align 4, !tbaa !9
  %646 = load i32, ptr %66, align 4, !tbaa !9
  %647 = load i32, ptr %41, align 4, !tbaa !9
  %648 = mul nsw i32 %646, %647
  %649 = add nsw i32 %645, %648
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds double, ptr %644, i64 %650
  store double 0.000000e+00, ptr %651, align 8, !tbaa !11
  br label %652

652:                                              ; preds = %643
  %653 = load i32, ptr %51, align 4, !tbaa !9
  %654 = add nsw i32 %653, 1
  store i32 %654, ptr %51, align 4, !tbaa !9
  br label %639, !llvm.loop !19

655:                                              ; preds = %639
  br label %656

656:                                              ; preds = %655, %633
  br label %657

657:                                              ; preds = %656, %533
  %658 = load i32, ptr %62, align 4, !tbaa !9
  %659 = icmp ne i32 %658, 0
  br i1 %659, label %660, label %774

660:                                              ; preds = %657
  %661 = load ptr, ptr %25, align 8, !tbaa !5
  %662 = load i32, ptr %40, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds double, ptr %661, i64 %663
  %665 = load ptr, ptr %26, align 8, !tbaa !5
  %666 = load ptr, ptr %31, align 8, !tbaa !5
  %667 = load i32, ptr %68, align 4, !tbaa !9
  %668 = load i32, ptr %43, align 4, !tbaa !9
  %669 = mul nsw i32 %667, %668
  %670 = add nsw i32 %669, 1
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds double, ptr %666, i64 %671
  %673 = load ptr, ptr %31, align 8, !tbaa !5
  %674 = load i32, ptr %66, align 4, !tbaa !9
  %675 = load i32, ptr %43, align 4, !tbaa !9
  %676 = mul nsw i32 %674, %675
  %677 = add nsw i32 %676, 1
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds double, ptr %673, i64 %678
  %680 = load ptr, ptr %35, align 8, !tbaa !5
  %681 = getelementptr inbounds double, ptr %680, i64 1
  %682 = load ptr, ptr %35, align 8, !tbaa !5
  %683 = load ptr, ptr %24, align 8, !tbaa !5
  %684 = load i32, ptr %683, align 4, !tbaa !9
  %685 = load ptr, ptr %24, align 8, !tbaa !5
  %686 = load i32, ptr %685, align 4, !tbaa !9
  %687 = mul nsw i32 %684, %686
  %688 = load ptr, ptr %24, align 8, !tbaa !5
  %689 = load i32, ptr %688, align 4, !tbaa !9
  %690 = add nsw i32 %687, %689
  %691 = add nsw i32 %690, 1
  %692 = sext i32 %691 to i64
  %693 = getelementptr inbounds double, ptr %682, i64 %692
  call void @dlaein_(ptr noundef @c_true, ptr noundef %60, ptr noundef %58, ptr noundef %664, ptr noundef %665, ptr noundef %70, ptr noundef %67, ptr noundef %672, ptr noundef %679, ptr noundef %681, ptr noundef %61, ptr noundef %693, ptr noundef %71, ptr noundef %64, ptr noundef %59, ptr noundef %53)
  %694 = load i32, ptr %53, align 4, !tbaa !9
  %695 = icmp sgt i32 %694, 0
  br i1 %695, label %696, label %718

696:                                              ; preds = %660
  %697 = load i32, ptr %49, align 4, !tbaa !9
  %698 = icmp ne i32 %697, 0
  br i1 %698, label %699, label %703

699:                                              ; preds = %696
  %700 = load ptr, ptr %38, align 8, !tbaa !5
  %701 = load i32, ptr %700, align 4, !tbaa !9
  %702 = add nsw i32 %701, 2
  store i32 %702, ptr %700, align 4, !tbaa !9
  br label %707

703:                                              ; preds = %696
  %704 = load ptr, ptr %38, align 8, !tbaa !5
  %705 = load i32, ptr %704, align 4, !tbaa !9
  %706 = add nsw i32 %705, 1
  store i32 %706, ptr %704, align 4, !tbaa !9
  br label %707

707:                                              ; preds = %703, %699
  %708 = load i32, ptr %52, align 4, !tbaa !9
  %709 = load ptr, ptr %37, align 8, !tbaa !5
  %710 = load i32, ptr %68, align 4, !tbaa !9
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds i32, ptr %709, i64 %711
  store i32 %708, ptr %712, align 4, !tbaa !9
  %713 = load i32, ptr %52, align 4, !tbaa !9
  %714 = load ptr, ptr %37, align 8, !tbaa !5
  %715 = load i32, ptr %66, align 4, !tbaa !9
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds i32, ptr %714, i64 %716
  store i32 %713, ptr %717, align 4, !tbaa !9
  br label %727

718:                                              ; preds = %660
  %719 = load ptr, ptr %37, align 8, !tbaa !5
  %720 = load i32, ptr %68, align 4, !tbaa !9
  %721 = sext i32 %720 to i64
  %722 = getelementptr inbounds i32, ptr %719, i64 %721
  store i32 0, ptr %722, align 4, !tbaa !9
  %723 = load ptr, ptr %37, align 8, !tbaa !5
  %724 = load i32, ptr %66, align 4, !tbaa !9
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds i32, ptr %723, i64 %725
  store i32 0, ptr %726, align 4, !tbaa !9
  br label %727

727:                                              ; preds = %718, %707
  %728 = load ptr, ptr %24, align 8, !tbaa !5
  %729 = load i32, ptr %728, align 4, !tbaa !9
  store i32 %729, ptr %46, align 4, !tbaa !9
  %730 = load i32, ptr %58, align 4, !tbaa !9
  %731 = add nsw i32 %730, 1
  store i32 %731, ptr %51, align 4, !tbaa !9
  br label %732

732:                                              ; preds = %745, %727
  %733 = load i32, ptr %51, align 4, !tbaa !9
  %734 = load i32, ptr %46, align 4, !tbaa !9
  %735 = icmp sle i32 %733, %734
  br i1 %735, label %736, label %748

736:                                              ; preds = %732
  %737 = load ptr, ptr %31, align 8, !tbaa !5
  %738 = load i32, ptr %51, align 4, !tbaa !9
  %739 = load i32, ptr %68, align 4, !tbaa !9
  %740 = load i32, ptr %43, align 4, !tbaa !9
  %741 = mul nsw i32 %739, %740
  %742 = add nsw i32 %738, %741
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds double, ptr %737, i64 %743
  store double 0.000000e+00, ptr %744, align 8, !tbaa !11
  br label %745

745:                                              ; preds = %736
  %746 = load i32, ptr %51, align 4, !tbaa !9
  %747 = add nsw i32 %746, 1
  store i32 %747, ptr %51, align 4, !tbaa !9
  br label %732, !llvm.loop !20

748:                                              ; preds = %732
  %749 = load i32, ptr %49, align 4, !tbaa !9
  %750 = icmp ne i32 %749, 0
  br i1 %750, label %751, label %773

751:                                              ; preds = %748
  %752 = load ptr, ptr %24, align 8, !tbaa !5
  %753 = load i32, ptr %752, align 4, !tbaa !9
  store i32 %753, ptr %46, align 4, !tbaa !9
  %754 = load i32, ptr %58, align 4, !tbaa !9
  %755 = add nsw i32 %754, 1
  store i32 %755, ptr %51, align 4, !tbaa !9
  br label %756

756:                                              ; preds = %769, %751
  %757 = load i32, ptr %51, align 4, !tbaa !9
  %758 = load i32, ptr %46, align 4, !tbaa !9
  %759 = icmp sle i32 %757, %758
  br i1 %759, label %760, label %772

760:                                              ; preds = %756
  %761 = load ptr, ptr %31, align 8, !tbaa !5
  %762 = load i32, ptr %51, align 4, !tbaa !9
  %763 = load i32, ptr %66, align 4, !tbaa !9
  %764 = load i32, ptr %43, align 4, !tbaa !9
  %765 = mul nsw i32 %763, %764
  %766 = add nsw i32 %762, %765
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds double, ptr %761, i64 %767
  store double 0.000000e+00, ptr %768, align 8, !tbaa !11
  br label %769

769:                                              ; preds = %760
  %770 = load i32, ptr %51, align 4, !tbaa !9
  %771 = add nsw i32 %770, 1
  store i32 %771, ptr %51, align 4, !tbaa !9
  br label %756, !llvm.loop !21

772:                                              ; preds = %756
  br label %773

773:                                              ; preds = %772, %748
  br label %774

774:                                              ; preds = %773, %657
  %775 = load i32, ptr %49, align 4, !tbaa !9
  %776 = icmp ne i32 %775, 0
  br i1 %776, label %777, label %780

777:                                              ; preds = %774
  %778 = load i32, ptr %68, align 4, !tbaa !9
  %779 = add nsw i32 %778, 2
  store i32 %779, ptr %68, align 4, !tbaa !9
  br label %783

780:                                              ; preds = %774
  %781 = load i32, ptr %68, align 4, !tbaa !9
  %782 = add nsw i32 %781, 1
  store i32 %782, ptr %68, align 4, !tbaa !9
  br label %783

783:                                              ; preds = %780, %777
  br label %784

784:                                              ; preds = %783, %339
  br label %785

785:                                              ; preds = %784
  %786 = load i32, ptr %52, align 4, !tbaa !9
  %787 = add nsw i32 %786, 1
  store i32 %787, ptr %52, align 4, !tbaa !9
  br label %335, !llvm.loop !22

788:                                              ; preds = %335
  store i32 1, ptr %72, align 4
  br label %789

789:                                              ; preds = %788, %434, %308, %299
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) #2

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

declare i32 @disnan_(ptr noundef) #2

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

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

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

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

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


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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [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
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@c_false = external hidden global i32, align 4
@c_true = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dhsein_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr nocapture noundef %3, ptr nocapture noundef readonly %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef %7, ptr nocapture noundef readonly %8, ptr noundef %9, ptr nocapture noundef readonly %10, ptr noundef %11, ptr nocapture noundef readonly %12, ptr nocapture noundef readonly %13, ptr nocapture noundef %14, ptr noundef %15, ptr nocapture noundef writeonly %16, ptr nocapture noundef writeonly %17, ptr nocapture noundef %18) local_unnamed_addr #0 {
  %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 double, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #5
  %32 = getelementptr inbounds i8, ptr %3, i64 -4
  %33 = load i32, ptr %6, align 4, !tbaa !5
  %narrow275 = xor i32 %33, -1
  %34 = sext i32 %narrow275 to i64
  %35 = getelementptr inbounds double, ptr %5, i64 %34
  %36 = getelementptr inbounds i8, ptr %7, i64 -8
  %37 = getelementptr inbounds i8, ptr %8, i64 -8
  %38 = load i32, ptr %10, align 4, !tbaa !5
  %narrow = xor i32 %38, -1
  %39 = sext i32 %narrow to i64
  %40 = getelementptr inbounds double, ptr %9, i64 %39
  %41 = load i32, ptr %12, align 4, !tbaa !5
  %narrow258 = xor i32 %41, -1
  %42 = sext i32 %narrow258 to i64
  %43 = getelementptr inbounds double, ptr %11, i64 %42
  %44 = getelementptr inbounds i8, ptr %16, i64 -4
  %45 = getelementptr inbounds i8, ptr %17, i64 -4
  %46 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %47 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %48 = icmp ne i32 %47, 0
  %49 = icmp ne i32 %46, 0
  %50 = select i1 %48, i1 true, i1 %49
  %51 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %52 = icmp ne i32 %51, 0
  %53 = select i1 %52, i1 true, i1 %49
  %54 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5
  %55 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5
  store i32 %55, ptr %26, align 4, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !5
  %56 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %56, ptr %20, align 4, !tbaa !5
  %.not293 = icmp slt i32 %56, 1
  br i1 %.not293, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %19
  %57 = add nuw i32 %56, 1
  %wide.trip.count = zext i32 %57 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %77
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %77 ]
  %.0250294 = phi i32 [ 0, %.lr.ph.preheader ], [ %.1251, %77 ]
  %.not280 = icmp eq i32 %.0250294, 0
  br i1 %.not280, label %60, label %58

58:                                               ; preds = %.lr.ph
  %59 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv
  store i32 0, ptr %59, align 4, !tbaa !5
  br label %77

60:                                               ; preds = %.lr.ph
  %61 = getelementptr inbounds double, ptr %37, i64 %indvars.iv
  %62 = load double, ptr %61, align 8, !tbaa !9
  %63 = fcmp oeq double %62, 0.000000e+00
  %64 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv
  %65 = load i32, ptr %64, align 4, !tbaa !5
  %.not283 = icmp eq i32 %65, 0
  br i1 %63, label %66, label %70

66:                                               ; preds = %60
  br i1 %.not283, label %77, label %67

67:                                               ; preds = %66
  %68 = load i32, ptr %14, align 4, !tbaa !5
  %69 = add nsw i32 %68, 1
  store i32 %69, ptr %14, align 4, !tbaa !5
  br label %77

70:                                               ; preds = %60
  br i1 %.not283, label %71, label %74

71:                                               ; preds = %70
  %72 = getelementptr inbounds i8, ptr %64, i64 4
  %73 = load i32, ptr %72, align 4, !tbaa !5
  %.not282 = icmp eq i32 %73, 0
  br i1 %.not282, label %77, label %74

74:                                               ; preds = %71, %70
  store i32 1, ptr %64, align 4, !tbaa !5
  %75 = load i32, ptr %14, align 4, !tbaa !5
  %76 = add nsw i32 %75, 2
  store i32 %76, ptr %14, align 4, !tbaa !5
  br label %77

77:                                               ; preds = %58, %71, %74, %66, %67
  %.1251 = phi i32 [ 0, %58 ], [ 0, %67 ], [ 0, %66 ], [ 1, %74 ], [ 1, %71 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !11

._crit_edge:                                      ; preds = %77, %19
  store i32 0, ptr %18, align 4, !tbaa !5
  %or.cond = select i1 %50, i1 true, i1 %53
  br i1 %or.cond, label %78, label %.thread.sink.split

78:                                               ; preds = %._crit_edge
  %.not259 = icmp eq i32 %54, 0
  br i1 %.not259, label %79, label %81

79:                                               ; preds = %78
  %80 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5
  %.not260 = icmp eq i32 %80, 0
  br i1 %.not260, label %.thread.sink.split, label %81

81:                                               ; preds = %79, %78
  %.not261 = icmp eq i32 %55, 0
  br i1 %.not261, label %82, label %84

82:                                               ; preds = %81
  %83 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5
  %.not262 = icmp eq i32 %83, 0
  br i1 %.not262, label %.thread.sink.split, label %84

84:                                               ; preds = %82, %81
  %85 = load i32, ptr %4, align 4, !tbaa !5
  %86 = icmp slt i32 %85, 0
  br i1 %86, label %.thread.sink.split, label %87

87:                                               ; preds = %84
  %88 = load i32, ptr %6, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %85, i32 1)
  %89 = icmp slt i32 %88, %spec.select
  br i1 %89, label %.thread.sink.split, label %90

90:                                               ; preds = %87
  %91 = load i32, ptr %10, align 4, !tbaa !5
  %92 = icmp slt i32 %91, 1
  %93 = icmp ult i32 %91, %85
  %or.cond285 = and i1 %53, %93
  %or.cond288 = select i1 %92, i1 true, i1 %or.cond285
  br i1 %or.cond288, label %.thread.sink.split, label %94

94:                                               ; preds = %90
  %95 = load i32, ptr %12, align 4, !tbaa !5
  %96 = icmp slt i32 %95, 1
  %97 = icmp ult i32 %95, %85
  %or.cond286 = and i1 %50, %97
  %or.cond289 = select i1 %96, i1 true, i1 %or.cond286
  br i1 %or.cond289, label %.thread.sink.split, label %98

98:                                               ; preds = %94
  %99 = load i32, ptr %13, align 4, !tbaa !5
  %100 = load i32, ptr %14, align 4, !tbaa !5
  %101 = icmp slt i32 %99, %100
  br i1 %101, label %.thread.sink.split, label %102

102:                                              ; preds = %98
  %.pr = load i32, ptr %18, align 4, !tbaa !5
  %.not263 = icmp eq i32 %.pr, 0
  br i1 %.not263, label %106, label %.thread

.thread.sink.split:                               ; preds = %98, %94, %90, %87, %84, %82, %79, %._crit_edge
  %.sink = phi i32 [ -1, %._crit_edge ], [ -2, %79 ], [ -3, %82 ], [ -5, %84 ], [ -7, %87 ], [ -11, %90 ], [ -13, %94 ], [ -14, %98 ]
  store i32 %.sink, ptr %18, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %102
  %103 = phi i32 [ %.pr, %102 ], [ %.sink, %.thread.sink.split ]
  %104 = sub nsw i32 0, %103
  store i32 %104, ptr %20, align 4, !tbaa !5
  %105 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %20, i32 noundef 6) #5
  br label %.loopexit291

106:                                              ; preds = %102
  %107 = icmp eq i32 %85, 0
  br i1 %107, label %.loopexit291, label %108

108:                                              ; preds = %106
  %109 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #5
  %110 = tail call double @dlamch_(ptr noundef nonnull @.str.8) #5
  %111 = load i32, ptr %4, align 4, !tbaa !5
  %112 = sitofp i32 %111 to double
  %113 = fdiv double %112, %110
  %114 = fmul double %109, %113
  store double %114, ptr %28, align 8, !tbaa !9
  %115 = fsub double 1.000000e+00, %110
  %116 = fdiv double %115, %114
  store double %116, ptr %25, align 8, !tbaa !9
  %117 = add nsw i32 %111, 1
  store i32 %117, ptr %27, align 4, !tbaa !5
  %spec.select287 = select i1 %.not259, i32 %111, i32 0
  store i32 %spec.select287, ptr %24, align 4, !tbaa !5
  %invariant.gep321 = getelementptr i8, ptr %43, i64 8
  %.not265327 = icmp slt i32 %111, 1
  br i1 %.not265327, label %.loopexit291, label %.lr.ph338

.lr.ph338:                                        ; preds = %108
  %118 = add i32 %33, 1
  %119 = sext i32 %33 to i64
  %120 = shl nsw i64 %39, 3
  %scevgep = getelementptr i8, ptr %9, i64 %120
  %121 = shl nsw i64 %42, 3
  %scevgep361 = getelementptr i8, ptr %11, i64 %121
  %122 = zext nneg i32 %111 to i64
  br label %123

123:                                              ; preds = %.lr.ph338, %.critedge
  %indvars.iv341 = phi i64 [ 1, %.lr.ph338 ], [ %indvars.iv.next342, %.critedge ]
  %.0334 = phi i32 [ 1, %.lr.ph338 ], [ %.1, %.critedge ]
  %.0240333 = phi i32 [ 0, %.lr.ph338 ], [ %.2, %.critedge ]
  %.0242332 = phi i32 [ 1, %.lr.ph338 ], [ %.2244, %.critedge ]
  %124 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv341
  %125 = load i32, ptr %124, align 4, !tbaa !5
  %.not266 = icmp eq i32 %125, 0
  br i1 %.not266, label %.critedge, label %126

126:                                              ; preds = %123
  br i1 %.not259, label %152, label %127

127:                                              ; preds = %126
  %128 = sext i32 %.0242332 to i64
  %129 = trunc nuw nsw i64 %indvars.iv341 to i32
  %smin = call i32 @llvm.smin.i32(i32 %.0242332, i32 %129)
  br label %130

130:                                              ; preds = %131, %127
  %indvars.iv343 = phi i64 [ %indvars.iv.next344, %131 ], [ %indvars.iv341, %127 ]
  %.not267.not = icmp sgt i64 %indvars.iv343, %128
  br i1 %.not267.not, label %131, label %.split.loop.exit

131:                                              ; preds = %130
  %indvars.iv.next344 = add nsw i64 %indvars.iv343, -1
  %132 = mul nsw i64 %indvars.iv.next344, %119
  %133 = getelementptr double, ptr %35, i64 %132
  %134 = getelementptr double, ptr %133, i64 %indvars.iv343
  %135 = load double, ptr %134, align 8, !tbaa !9
  %136 = fcmp oeq double %135, 0.000000e+00
  br i1 %136, label %.split.loop.exit374, label %130, !llvm.loop !13

.split.loop.exit374:                              ; preds = %131
  %137 = trunc nsw i64 %indvars.iv343 to i32
  br label %.split.loop.exit

.split.loop.exit:                                 ; preds = %130, %.split.loop.exit374
  %.0247.lcssa = phi i32 [ %137, %.split.loop.exit374 ], [ %smin, %130 ]
  %138 = load i32, ptr %24, align 4, !tbaa !5
  %139 = sext i32 %138 to i64
  %140 = icmp sgt i64 %indvars.iv341, %139
  br i1 %140, label %141, label %152

141:                                              ; preds = %.split.loop.exit
  %142 = load i32, ptr %4, align 4, !tbaa !5
  %143 = sext i32 %142 to i64
  %smax = call i32 @llvm.smax.i32(i32 %142, i32 %129)
  br label %144

144:                                              ; preds = %145, %141
  %indvars.iv346 = phi i64 [ %indvars.iv.next347, %145 ], [ %indvars.iv341, %141 ]
  %.not268.not = icmp slt i64 %indvars.iv346, %143
  br i1 %.not268.not, label %145, label %.split.loop.exit376

145:                                              ; preds = %144
  %indvars.iv.next347 = add nuw nsw i64 %indvars.iv346, 1
  %146 = mul nsw i64 %indvars.iv346, %119
  %147 = getelementptr double, ptr %35, i64 %indvars.iv.next347
  %148 = getelementptr double, ptr %147, i64 %146
  %149 = load double, ptr %148, align 8, !tbaa !9
  %150 = fcmp oeq double %149, 0.000000e+00
  br i1 %150, label %.split.loop.exit377, label %144, !llvm.loop !14

.split.loop.exit377:                              ; preds = %145
  %151 = trunc nuw nsw i64 %indvars.iv346 to i32
  br label %.split.loop.exit376

.split.loop.exit376:                              ; preds = %144, %.split.loop.exit377
  %.1248.lcssa = phi i32 [ %151, %.split.loop.exit377 ], [ %smax, %144 ]
  store i32 %.1248.lcssa, ptr %24, align 4, !tbaa !5
  br label %152

152:                                              ; preds = %.split.loop.exit, %.split.loop.exit376, %126
  %.1243 = phi i32 [ %.0247.lcssa, %.split.loop.exit376 ], [ %.0247.lcssa, %.split.loop.exit ], [ %.0242332, %126 ]
  %.not269 = icmp eq i32 %.1243, %.0240333
  br i1 %.not269, label %169, label %153

153:                                              ; preds = %152
  %154 = load i32, ptr %24, align 4, !tbaa !5
  %reass.sub = sub i32 %154, %.1243
  %155 = add i32 %reass.sub, 1
  store i32 %155, ptr %21, align 4, !tbaa !5
  %156 = mul i32 %.1243, %118
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds double, ptr %35, i64 %157
  %159 = call double @dlanhs_(ptr noundef nonnull @.str.9, ptr noundef nonnull %21, ptr noundef %158, ptr noundef nonnull %6, ptr noundef %15) #5
  store double %159, ptr %23, align 8, !tbaa !9
  %160 = call i32 @disnan_(ptr noundef nonnull %23) #5
  %.not270 = icmp eq i32 %160, 0
  br i1 %.not270, label %162, label %161

161:                                              ; preds = %153
  store i32 -6, ptr %18, align 4, !tbaa !5
  br label %.loopexit291

162:                                              ; preds = %153
  %163 = load double, ptr %23, align 8, !tbaa !9
  %164 = fcmp ogt double %163, 0.000000e+00
  br i1 %164, label %165, label %167

165:                                              ; preds = %162
  %166 = fmul double %110, %163
  store double %166, ptr %31, align 8, !tbaa !9
  br label %169

167:                                              ; preds = %162
  %168 = load double, ptr %28, align 8, !tbaa !9
  store double %168, ptr %31, align 8, !tbaa !9
  br label %169

169:                                              ; preds = %167, %165, %152
  %.1241 = phi i32 [ %.1243, %165 ], [ %.1243, %167 ], [ %.0240333, %152 ]
  %170 = getelementptr inbounds double, ptr %36, i64 %indvars.iv341
  %171 = load double, ptr %170, align 8, !tbaa !9
  store double %171, ptr %30, align 8, !tbaa !9
  %172 = getelementptr inbounds double, ptr %37, i64 %indvars.iv341
  %173 = load double, ptr %172, align 8, !tbaa !9
  store double %173, ptr %29, align 8, !tbaa !9
  %174 = sext i32 %.1243 to i64
  %.not271.not297 = icmp sgt i64 %indvars.iv341, %174
  br i1 %.not271.not297, label %.lr.ph300.lr.ph, label %._crit_edge301

.lr.ph300.lr.ph:                                  ; preds = %169
  %175 = load double, ptr %31, align 8
  br label %.lr.ph300.us

.lr.ph300.us:                                     ; preds = %196, %.lr.ph300.lr.ph
  %176 = phi double [ %171, %.lr.ph300.lr.ph ], [ %197, %196 ]
  %177 = insertelement <2 x double> poison, double %176, i64 0
  %178 = insertelement <2 x double> %177, double %173, i64 1
  br label %179

179:                                              ; preds = %198, %.lr.ph300.us
  %indvars.iv349 = phi i64 [ %indvars.iv.next350, %198 ], [ %indvars.iv341, %.lr.ph300.us ]
  %indvars.iv.next350 = add nsw i64 %indvars.iv349, -1
  %180 = getelementptr inbounds i32, ptr %32, i64 %indvars.iv.next350
  %181 = load i32, ptr %180, align 4, !tbaa !5
  %.not279.us = icmp eq i32 %181, 0
  br i1 %.not279.us, label %198, label %182

182:                                              ; preds = %179
  %183 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next350
  %184 = load double, ptr %183, align 8, !tbaa !9
  %185 = getelementptr inbounds double, ptr %37, i64 %indvars.iv.next350
  %186 = load double, ptr %185, align 8, !tbaa !9
  %187 = insertelement <2 x double> poison, double %184, i64 0
  %188 = insertelement <2 x double> %187, double %186, i64 1
  %189 = fsub <2 x double> %188, %178
  %190 = fcmp oge <2 x double> %189, zeroinitializer
  %191 = fneg <2 x double> %189
  %192 = select <2 x i1> %190, <2 x double> %189, <2 x double> %191
  %shift = shufflevector <2 x double> %192, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %193 = fadd <2 x double> %192, %shift
  %194 = extractelement <2 x double> %193, i64 0
  %195 = fcmp olt double %194, %175
  br i1 %195, label %196, label %198

196:                                              ; preds = %182
  %197 = fadd double %176, %175
  store double %197, ptr %30, align 8, !tbaa !9
  br label %.lr.ph300.us

198:                                              ; preds = %182, %179
  %.not271.not.us = icmp sgt i64 %indvars.iv.next350, %174
  br i1 %.not271.not.us, label %179, label %._crit_edge301, !llvm.loop !15

._crit_edge301:                                   ; preds = %198, %169
  %199 = phi double [ %171, %169 ], [ %176, %198 ]
  store i32 %.1243, ptr %21, align 4, !tbaa !5
  store double %199, ptr %170, align 8, !tbaa !9
  %200 = fcmp une double %173, 0.000000e+00
  %201 = add nsw i32 %.0334, 1
  %.0239 = select i1 %200, i32 %201, i32 %.0334
  br i1 %53, label %202, label %.loopexit290

202:                                              ; preds = %._crit_edge301
  %203 = load i32, ptr %4, align 4, !tbaa !5
  %reass.sub339 = sub i32 %203, %.1243
  %204 = add i32 %reass.sub339, 1
  store i32 %204, ptr %21, align 4, !tbaa !5
  %205 = mul i32 %.1243, %118
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds double, ptr %35, i64 %206
  %208 = mul nsw i32 %.0334, %38
  %209 = add nsw i32 %.1243, %208
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds double, ptr %40, i64 %210
  %212 = mul nsw i32 %.0239, %38
  %213 = add nsw i32 %212, %.1243
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds double, ptr %40, i64 %214
  %216 = add i32 %203, 1
  %217 = mul i32 %216, %203
  %218 = sext i32 %217 to i64
  %gep = getelementptr double, ptr %15, i64 %218
  call void @dlaein_(ptr noundef nonnull @c_false, ptr noundef nonnull %26, ptr noundef nonnull %21, ptr noundef %207, ptr noundef nonnull %6, ptr noundef nonnull %30, ptr noundef nonnull %29, ptr noundef %211, ptr noundef %215, ptr noundef %15, ptr noundef nonnull %27, ptr noundef %gep, ptr noundef nonnull %31, ptr noundef nonnull %28, ptr noundef nonnull %25, ptr noundef nonnull %22) #5
  %219 = load i32, ptr %22, align 4, !tbaa !5
  %220 = icmp sgt i32 %219, 0
  br i1 %220, label %221, label %227

221:                                              ; preds = %202
  %222 = load i32, ptr %18, align 4, !tbaa !5
  %. = select i1 %200, i32 2, i32 1
  %223 = add nsw i32 %222, %.
  store i32 %223, ptr %18, align 4, !tbaa !5
  %224 = sext i32 %.0334 to i64
  %225 = getelementptr inbounds i32, ptr %44, i64 %224
  %226 = trunc nuw nsw i64 %indvars.iv341 to i32
  store i32 %226, ptr %225, align 4, !tbaa !5
  br label %230

227:                                              ; preds = %202
  %228 = sext i32 %.0334 to i64
  %229 = getelementptr inbounds i32, ptr %44, i64 %228
  store i32 0, ptr %229, align 4, !tbaa !5
  br label %230

230:                                              ; preds = %227, %221
  %.sink380 = phi i32 [ 0, %227 ], [ %226, %221 ]
  %231 = sext i32 %.0239 to i64
  %232 = getelementptr inbounds i32, ptr %44, i64 %231
  store i32 %.sink380, ptr %232, align 4, !tbaa !5
  %233 = add i32 %.1243, -1
  store i32 %233, ptr %21, align 4, !tbaa !5
  %.not273.not303 = icmp sgt i32 %.1243, 1
  br i1 %.not273.not303, label %._crit_edge307, label %.loopexit290

._crit_edge307:                                   ; preds = %230
  %234 = add i32 %208, 1
  %235 = sext i32 %234 to i64
  %236 = shl nsw i64 %235, 3
  %scevgep352 = getelementptr i8, ptr %scevgep, i64 %236
  %237 = zext nneg i32 %233 to i64
  %238 = shl nuw nsw i64 %237, 3
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep352, i8 0, i64 %238, i1 false), !tbaa !9
  br i1 %200, label %.lr.ph311.preheader, label %.loopexit290

.lr.ph311.preheader:                              ; preds = %._crit_edge307
  store i32 %233, ptr %21, align 4, !tbaa !5
  %239 = add i32 %212, 1
  %240 = sext i32 %239 to i64
  %241 = shl nsw i64 %240, 3
  %scevgep357 = getelementptr i8, ptr %scevgep, i64 %241
  %242 = zext nneg i32 %233 to i64
  %243 = shl nuw nsw i64 %242, 3
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep357, i8 0, i64 %243, i1 false), !tbaa !9
  br label %.loopexit290

.loopexit290:                                     ; preds = %230, %.lr.ph311.preheader, %._crit_edge307, %._crit_edge301
  br i1 %50, label %244, label %.loopexit

244:                                              ; preds = %.loopexit290
  %245 = mul nsw i32 %.0334, %41
  %246 = sext i32 %245 to i64
  %gep322 = getelementptr double, ptr %invariant.gep321, i64 %246
  %247 = mul nsw i32 %.0239, %41
  %248 = sext i32 %247 to i64
  %gep324 = getelementptr double, ptr %invariant.gep321, i64 %248
  %249 = load i32, ptr %4, align 4, !tbaa !5
  %250 = add i32 %249, 1
  %251 = mul i32 %250, %249
  %252 = sext i32 %251 to i64
  %gep326 = getelementptr double, ptr %15, i64 %252
  call void @dlaein_(ptr noundef nonnull @c_true, ptr noundef nonnull %26, ptr noundef nonnull %24, ptr noundef %5, ptr noundef nonnull %6, ptr noundef nonnull %30, ptr noundef nonnull %29, ptr noundef %gep322, ptr noundef %gep324, ptr noundef %15, ptr noundef nonnull %27, ptr noundef %gep326, ptr noundef nonnull %31, ptr noundef nonnull %28, ptr noundef nonnull %25, ptr noundef nonnull %22) #5
  %253 = load i32, ptr %22, align 4, !tbaa !5
  %254 = icmp sgt i32 %253, 0
  br i1 %254, label %255, label %261

255:                                              ; preds = %244
  %256 = load i32, ptr %18, align 4, !tbaa !5
  %.387 = select i1 %200, i32 2, i32 1
  %257 = add nsw i32 %256, %.387
  store i32 %257, ptr %18, align 4, !tbaa !5
  %258 = sext i32 %.0334 to i64
  %259 = getelementptr inbounds i32, ptr %45, i64 %258
  %260 = trunc nuw nsw i64 %indvars.iv341 to i32
  store i32 %260, ptr %259, align 4, !tbaa !5
  br label %264

261:                                              ; preds = %244
  %262 = sext i32 %.0334 to i64
  %263 = getelementptr inbounds i32, ptr %45, i64 %262
  store i32 0, ptr %263, align 4, !tbaa !5
  br label %264

264:                                              ; preds = %261, %255
  %.sink384 = phi i32 [ 0, %261 ], [ %260, %255 ]
  %265 = sext i32 %.0239 to i64
  %266 = getelementptr inbounds i32, ptr %45, i64 %265
  store i32 %.sink384, ptr %266, align 4, !tbaa !5
  %267 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %267, ptr %21, align 4, !tbaa !5
  %268 = load i32, ptr %24, align 4, !tbaa !5
  %.not277.not312 = icmp slt i32 %268, %267
  br i1 %.not277.not312, label %._crit_edge316, label %._crit_edge316.thread

._crit_edge316:                                   ; preds = %264
  %269 = add nsw i32 %268, 1
  %270 = add i32 %269, %245
  %271 = sext i32 %270 to i64
  %272 = shl nsw i64 %271, 3
  %scevgep362 = getelementptr i8, ptr %scevgep361, i64 %272
  %273 = xor i32 %268, -1
  %274 = add i32 %267, %273
  %275 = zext i32 %274 to i64
  %276 = shl nuw nsw i64 %275, 3
  %277 = add nuw nsw i64 %276, 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep362, i8 0, i64 %277, i1 false), !tbaa !9
  br i1 %200, label %.lr.ph320.preheader, label %.critedge

._crit_edge316.thread:                            ; preds = %264
  br i1 %200, label %.loopexit.thread, label %.critedge

.lr.ph320.preheader:                              ; preds = %._crit_edge316
  store i32 %267, ptr %21, align 4, !tbaa !5
  %278 = add nsw i32 %268, 1
  %279 = add i32 %278, %247
  %280 = sext i32 %279 to i64
  %281 = shl nsw i64 %280, 3
  %scevgep367 = getelementptr i8, ptr %scevgep361, i64 %281
  %282 = xor i32 %268, -1
  %283 = add i32 %267, %282
  %284 = zext i32 %283 to i64
  %285 = shl nuw nsw i64 %284, 3
  %286 = add nuw nsw i64 %285, 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep367, i8 0, i64 %286, i1 false), !tbaa !9
  br label %.loopexit.thread

.loopexit:                                        ; preds = %.loopexit290
  br i1 %200, label %.loopexit.thread, label %.critedge

.loopexit.thread:                                 ; preds = %._crit_edge316.thread, %.lr.ph320.preheader, %.loopexit
  %287 = add nsw i32 %.0334, 2
  br label %.critedge

.critedge:                                        ; preds = %._crit_edge316.thread, %.loopexit, %._crit_edge316, %123, %.loopexit.thread
  %.2244 = phi i32 [ %.1243, %.loopexit.thread ], [ %.0242332, %123 ], [ %.1243, %._crit_edge316 ], [ %.1243, %.loopexit ], [ %.1243, %._crit_edge316.thread ]
  %.2 = phi i32 [ %.1241, %.loopexit.thread ], [ %.0240333, %123 ], [ %.1241, %._crit_edge316 ], [ %.1241, %.loopexit ], [ %.1241, %._crit_edge316.thread ]
  %.1 = phi i32 [ %287, %.loopexit.thread ], [ %.0334, %123 ], [ %201, %._crit_edge316 ], [ %201, %.loopexit ], [ %201, %._crit_edge316.thread ]
  %indvars.iv.next342 = add nuw nsw i64 %indvars.iv341, 1
  %.not265.not = icmp ult i64 %indvars.iv341, %122
  br i1 %.not265.not, label %123, label %.loopexit291, !llvm.loop !16

.loopexit291:                                     ; preds = %.critedge, %108, %106, %161, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #5
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

declare i32 @disnan_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !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}


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