; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/BLAS/SRC (dgbmv)

; 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 [7 x i8], align 1

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

66:                                               ; preds = %13
  %67 = load ptr, ptr %15, align 8, !tbaa !5
  %68 = call i64 @lsame_(ptr noundef %67, ptr noundef @.str.1)
  %69 = icmp ne i64 %68, 0
  br i1 %69, label %75, label %70

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

74:                                               ; preds = %70
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %123

75:                                               ; preds = %70, %66, %13
  %76 = load ptr, ptr %16, align 8, !tbaa !5
  %77 = load i64, ptr %76, align 8, !tbaa !9
  %78 = icmp slt i64 %77, 0
  br i1 %78, label %79, label %80

79:                                               ; preds = %75
  store i64 2, ptr %46, align 8, !tbaa !9
  br label %122

80:                                               ; preds = %75
  %81 = load ptr, ptr %17, align 8, !tbaa !5
  %82 = load i64, ptr %81, align 8, !tbaa !9
  %83 = icmp slt i64 %82, 0
  br i1 %83, label %84, label %85

84:                                               ; preds = %80
  store i64 3, ptr %46, align 8, !tbaa !9
  br label %121

85:                                               ; preds = %80
  %86 = load ptr, ptr %18, align 8, !tbaa !5
  %87 = load i64, ptr %86, align 8, !tbaa !9
  %88 = icmp slt i64 %87, 0
  br i1 %88, label %89, label %90

89:                                               ; preds = %85
  store i64 4, ptr %46, align 8, !tbaa !9
  br label %120

90:                                               ; preds = %85
  %91 = load ptr, ptr %19, align 8, !tbaa !5
  %92 = load i64, ptr %91, align 8, !tbaa !9
  %93 = icmp slt i64 %92, 0
  br i1 %93, label %94, label %95

94:                                               ; preds = %90
  store i64 5, ptr %46, align 8, !tbaa !9
  br label %119

95:                                               ; preds = %90
  %96 = load ptr, ptr %22, align 8, !tbaa !5
  %97 = load i64, ptr %96, align 8, !tbaa !9
  %98 = load ptr, ptr %18, align 8, !tbaa !5
  %99 = load i64, ptr %98, align 8, !tbaa !9
  %100 = load ptr, ptr %19, align 8, !tbaa !5
  %101 = load i64, ptr %100, align 8, !tbaa !9
  %102 = add nsw i64 %99, %101
  %103 = add nsw i64 %102, 1
  %104 = icmp slt i64 %97, %103
  br i1 %104, label %105, label %106

105:                                              ; preds = %95
  store i64 8, ptr %46, align 8, !tbaa !9
  br label %118

106:                                              ; preds = %95
  %107 = load ptr, ptr %24, align 8, !tbaa !5
  %108 = load i64, ptr %107, align 8, !tbaa !9
  %109 = icmp eq i64 %108, 0
  br i1 %109, label %110, label %111

110:                                              ; preds = %106
  store i64 10, ptr %46, align 8, !tbaa !9
  br label %117

111:                                              ; preds = %106
  %112 = load ptr, ptr %27, align 8, !tbaa !5
  %113 = load i64, ptr %112, align 8, !tbaa !9
  %114 = icmp eq i64 %113, 0
  br i1 %114, label %115, label %116

115:                                              ; preds = %111
  store i64 13, ptr %46, align 8, !tbaa !9
  br label %116

116:                                              ; preds = %115, %111
  br label %117

117:                                              ; preds = %116, %110
  br label %118

118:                                              ; preds = %117, %105
  br label %119

119:                                              ; preds = %118, %94
  br label %120

120:                                              ; preds = %119, %89
  br label %121

121:                                              ; preds = %120, %84
  br label %122

122:                                              ; preds = %121, %79
  br label %123

123:                                              ; preds = %122, %74
  %124 = load i64, ptr %46, align 8, !tbaa !9
  %125 = icmp ne i64 %124, 0
  br i1 %125, label %126, label %128

126:                                              ; preds = %123
  %127 = call i32 @xerbla_(ptr noundef @.str.3, ptr noundef %46)
  store i32 0, ptr %14, align 4
  store i32 1, ptr %50, align 4
  br label %668

128:                                              ; preds = %123
  %129 = load ptr, ptr %16, align 8, !tbaa !5
  %130 = load i64, ptr %129, align 8, !tbaa !9
  %131 = icmp eq i64 %130, 0
  br i1 %131, label %144, label %132

132:                                              ; preds = %128
  %133 = load ptr, ptr %17, align 8, !tbaa !5
  %134 = load i64, ptr %133, align 8, !tbaa !9
  %135 = icmp eq i64 %134, 0
  br i1 %135, label %144, label %136

136:                                              ; preds = %132
  %137 = load ptr, ptr %20, align 8, !tbaa !5
  %138 = load double, ptr %137, align 8, !tbaa !11
  %139 = fcmp oeq double %138, 0.000000e+00
  br i1 %139, label %140, label %145

140:                                              ; preds = %136
  %141 = load ptr, ptr %25, align 8, !tbaa !5
  %142 = load double, ptr %141, align 8, !tbaa !11
  %143 = fcmp oeq double %142, 1.000000e+00
  br i1 %143, label %144, label %145

144:                                              ; preds = %140, %132, %128
  store i32 0, ptr %14, align 4
  store i32 1, ptr %50, align 4
  br label %668

145:                                              ; preds = %140, %136
  %146 = load ptr, ptr %15, align 8, !tbaa !5
  %147 = call i64 @lsame_(ptr noundef %146, ptr noundef @.str)
  %148 = icmp ne i64 %147, 0
  br i1 %148, label %149, label %154

149:                                              ; preds = %145
  %150 = load ptr, ptr %17, align 8, !tbaa !5
  %151 = load i64, ptr %150, align 8, !tbaa !9
  store i64 %151, ptr %48, align 8, !tbaa !9
  %152 = load ptr, ptr %16, align 8, !tbaa !5
  %153 = load i64, ptr %152, align 8, !tbaa !9
  store i64 %153, ptr %49, align 8, !tbaa !9
  br label %159

154:                                              ; preds = %145
  %155 = load ptr, ptr %16, align 8, !tbaa !5
  %156 = load i64, ptr %155, align 8, !tbaa !9
  store i64 %156, ptr %48, align 8, !tbaa !9
  %157 = load ptr, ptr %17, align 8, !tbaa !5
  %158 = load i64, ptr %157, align 8, !tbaa !9
  store i64 %158, ptr %49, align 8, !tbaa !9
  br label %159

159:                                              ; preds = %154, %149
  %160 = load ptr, ptr %24, align 8, !tbaa !5
  %161 = load i64, ptr %160, align 8, !tbaa !9
  %162 = icmp sgt i64 %161, 0
  br i1 %162, label %163, label %164

163:                                              ; preds = %159
  store i64 1, ptr %43, align 8, !tbaa !9
  br label %171

164:                                              ; preds = %159
  %165 = load i64, ptr %48, align 8, !tbaa !9
  %166 = sub nsw i64 %165, 1
  %167 = load ptr, ptr %24, align 8, !tbaa !5
  %168 = load i64, ptr %167, align 8, !tbaa !9
  %169 = mul nsw i64 %166, %168
  %170 = sub nsw i64 1, %169
  store i64 %170, ptr %43, align 8, !tbaa !9
  br label %171

171:                                              ; preds = %164, %163
  %172 = load ptr, ptr %27, align 8, !tbaa !5
  %173 = load i64, ptr %172, align 8, !tbaa !9
  %174 = icmp sgt i64 %173, 0
  br i1 %174, label %175, label %176

175:                                              ; preds = %171
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %183

176:                                              ; preds = %171
  %177 = load i64, ptr %49, align 8, !tbaa !9
  %178 = sub nsw i64 %177, 1
  %179 = load ptr, ptr %27, align 8, !tbaa !5
  %180 = load i64, ptr %179, align 8, !tbaa !9
  %181 = mul nsw i64 %178, %180
  %182 = sub nsw i64 1, %181
  store i64 %182, ptr %44, align 8, !tbaa !9
  br label %183

183:                                              ; preds = %176, %175
  %184 = load ptr, ptr %25, align 8, !tbaa !5
  %185 = load double, ptr %184, align 8, !tbaa !11
  %186 = fcmp une double %185, 1.000000e+00
  br i1 %186, label %187, label %281

187:                                              ; preds = %183
  %188 = load ptr, ptr %27, align 8, !tbaa !5
  %189 = load i64, ptr %188, align 8, !tbaa !9
  %190 = icmp eq i64 %189, 1
  br i1 %190, label %191, label %231

191:                                              ; preds = %187
  %192 = load ptr, ptr %25, align 8, !tbaa !5
  %193 = load double, ptr %192, align 8, !tbaa !11
  %194 = fcmp oeq double %193, 0.000000e+00
  br i1 %194, label %195, label %209

195:                                              ; preds = %191
  %196 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %196, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %197

197:                                              ; preds = %205, %195
  %198 = load i64, ptr %36, align 8, !tbaa !9
  %199 = load i64, ptr %30, align 8, !tbaa !9
  %200 = icmp sle i64 %198, %199
  br i1 %200, label %201, label %208

201:                                              ; preds = %197
  %202 = load ptr, ptr %26, align 8, !tbaa !5
  %203 = load i64, ptr %36, align 8, !tbaa !9
  %204 = getelementptr inbounds double, ptr %202, i64 %203
  store double 0.000000e+00, ptr %204, align 8, !tbaa !11
  br label %205

205:                                              ; preds = %201
  %206 = load i64, ptr %36, align 8, !tbaa !9
  %207 = add nsw i64 %206, 1
  store i64 %207, ptr %36, align 8, !tbaa !9
  br label %197, !llvm.loop !13

208:                                              ; preds = %197
  br label %230

209:                                              ; preds = %191
  %210 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %210, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %211

211:                                              ; preds = %226, %209
  %212 = load i64, ptr %36, align 8, !tbaa !9
  %213 = load i64, ptr %30, align 8, !tbaa !9
  %214 = icmp sle i64 %212, %213
  br i1 %214, label %215, label %229

215:                                              ; preds = %211
  %216 = load ptr, ptr %25, align 8, !tbaa !5
  %217 = load double, ptr %216, align 8, !tbaa !11
  %218 = load ptr, ptr %26, align 8, !tbaa !5
  %219 = load i64, ptr %36, align 8, !tbaa !9
  %220 = getelementptr inbounds double, ptr %218, i64 %219
  %221 = load double, ptr %220, align 8, !tbaa !11
  %222 = fmul double %217, %221
  %223 = load ptr, ptr %26, align 8, !tbaa !5
  %224 = load i64, ptr %36, align 8, !tbaa !9
  %225 = getelementptr inbounds double, ptr %223, i64 %224
  store double %222, ptr %225, align 8, !tbaa !11
  br label %226

226:                                              ; preds = %215
  %227 = load i64, ptr %36, align 8, !tbaa !9
  %228 = add nsw i64 %227, 1
  store i64 %228, ptr %36, align 8, !tbaa !9
  br label %211, !llvm.loop !15

229:                                              ; preds = %211
  br label %230

230:                                              ; preds = %229, %208
  br label %280

231:                                              ; preds = %187
  %232 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %232, ptr %40, align 8, !tbaa !9
  %233 = load ptr, ptr %25, align 8, !tbaa !5
  %234 = load double, ptr %233, align 8, !tbaa !11
  %235 = fcmp oeq double %234, 0.000000e+00
  br i1 %235, label %236, label %254

236:                                              ; preds = %231
  %237 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %237, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %238

238:                                              ; preds = %250, %236
  %239 = load i64, ptr %36, align 8, !tbaa !9
  %240 = load i64, ptr %30, align 8, !tbaa !9
  %241 = icmp sle i64 %239, %240
  br i1 %241, label %242, label %253

242:                                              ; preds = %238
  %243 = load ptr, ptr %26, align 8, !tbaa !5
  %244 = load i64, ptr %40, align 8, !tbaa !9
  %245 = getelementptr inbounds double, ptr %243, i64 %244
  store double 0.000000e+00, ptr %245, align 8, !tbaa !11
  %246 = load ptr, ptr %27, align 8, !tbaa !5
  %247 = load i64, ptr %246, align 8, !tbaa !9
  %248 = load i64, ptr %40, align 8, !tbaa !9
  %249 = add nsw i64 %248, %247
  store i64 %249, ptr %40, align 8, !tbaa !9
  br label %250

250:                                              ; preds = %242
  %251 = load i64, ptr %36, align 8, !tbaa !9
  %252 = add nsw i64 %251, 1
  store i64 %252, ptr %36, align 8, !tbaa !9
  br label %238, !llvm.loop !16

253:                                              ; preds = %238
  br label %279

254:                                              ; preds = %231
  %255 = load i64, ptr %49, align 8, !tbaa !9
  store i64 %255, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %36, align 8, !tbaa !9
  br label %256

256:                                              ; preds = %275, %254
  %257 = load i64, ptr %36, align 8, !tbaa !9
  %258 = load i64, ptr %30, align 8, !tbaa !9
  %259 = icmp sle i64 %257, %258
  br i1 %259, label %260, label %278

260:                                              ; preds = %256
  %261 = load ptr, ptr %25, align 8, !tbaa !5
  %262 = load double, ptr %261, align 8, !tbaa !11
  %263 = load ptr, ptr %26, align 8, !tbaa !5
  %264 = load i64, ptr %40, align 8, !tbaa !9
  %265 = getelementptr inbounds double, ptr %263, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !11
  %267 = fmul double %262, %266
  %268 = load ptr, ptr %26, align 8, !tbaa !5
  %269 = load i64, ptr %40, align 8, !tbaa !9
  %270 = getelementptr inbounds double, ptr %268, i64 %269
  store double %267, ptr %270, align 8, !tbaa !11
  %271 = load ptr, ptr %27, align 8, !tbaa !5
  %272 = load i64, ptr %271, align 8, !tbaa !9
  %273 = load i64, ptr %40, align 8, !tbaa !9
  %274 = add nsw i64 %273, %272
  store i64 %274, ptr %40, align 8, !tbaa !9
  br label %275

275:                                              ; preds = %260
  %276 = load i64, ptr %36, align 8, !tbaa !9
  %277 = add nsw i64 %276, 1
  store i64 %277, ptr %36, align 8, !tbaa !9
  br label %256, !llvm.loop !17

278:                                              ; preds = %256
  br label %279

279:                                              ; preds = %278, %253
  br label %280

280:                                              ; preds = %279, %230
  br label %281

281:                                              ; preds = %280, %183
  %282 = load ptr, ptr %20, align 8, !tbaa !5
  %283 = load double, ptr %282, align 8, !tbaa !11
  %284 = fcmp oeq double %283, 0.000000e+00
  br i1 %284, label %285, label %286

285:                                              ; preds = %281
  store i32 0, ptr %14, align 4
  store i32 1, ptr %50, align 4
  br label %668

286:                                              ; preds = %281
  %287 = load ptr, ptr %19, align 8, !tbaa !5
  %288 = load i64, ptr %287, align 8, !tbaa !9
  %289 = add nsw i64 %288, 1
  store i64 %289, ptr %45, align 8, !tbaa !9
  %290 = load ptr, ptr %15, align 8, !tbaa !5
  %291 = call i64 @lsame_(ptr noundef %290, ptr noundef @.str)
  %292 = icmp ne i64 %291, 0
  br i1 %292, label %293, label %486

293:                                              ; preds = %286
  %294 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %294, ptr %41, align 8, !tbaa !9
  %295 = load ptr, ptr %27, align 8, !tbaa !5
  %296 = load i64, ptr %295, align 8, !tbaa !9
  %297 = icmp eq i64 %296, 1
  br i1 %297, label %298, label %384

298:                                              ; preds = %293
  %299 = load ptr, ptr %17, align 8, !tbaa !5
  %300 = load i64, ptr %299, align 8, !tbaa !9
  store i64 %300, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %301

301:                                              ; preds = %380, %298
  %302 = load i64, ptr %37, align 8, !tbaa !9
  %303 = load i64, ptr %30, align 8, !tbaa !9
  %304 = icmp sle i64 %302, %303
  br i1 %304, label %305, label %383

305:                                              ; preds = %301
  %306 = load ptr, ptr %23, align 8, !tbaa !5
  %307 = load i64, ptr %41, align 8, !tbaa !9
  %308 = getelementptr inbounds double, ptr %306, i64 %307
  %309 = load double, ptr %308, align 8, !tbaa !11
  %310 = fcmp une double %309, 0.000000e+00
  br i1 %310, label %311, label %375

311:                                              ; preds = %305
  %312 = load ptr, ptr %20, align 8, !tbaa !5
  %313 = load double, ptr %312, align 8, !tbaa !11
  %314 = load ptr, ptr %23, align 8, !tbaa !5
  %315 = load i64, ptr %41, align 8, !tbaa !9
  %316 = getelementptr inbounds double, ptr %314, i64 %315
  %317 = load double, ptr %316, align 8, !tbaa !11
  %318 = fmul double %313, %317
  store double %318, ptr %47, align 8, !tbaa !11
  %319 = load i64, ptr %45, align 8, !tbaa !9
  %320 = load i64, ptr %37, align 8, !tbaa !9
  %321 = sub nsw i64 %319, %320
  store i64 %321, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  %322 = load i64, ptr %37, align 8, !tbaa !9
  %323 = load ptr, ptr %19, align 8, !tbaa !5
  %324 = load i64, ptr %323, align 8, !tbaa !9
  %325 = sub nsw i64 %322, %324
  store i64 %325, ptr %32, align 8, !tbaa !9
  %326 = load ptr, ptr %16, align 8, !tbaa !5
  %327 = load i64, ptr %326, align 8, !tbaa !9
  store i64 %327, ptr %34, align 8, !tbaa !9
  %328 = load i64, ptr %37, align 8, !tbaa !9
  %329 = load ptr, ptr %18, align 8, !tbaa !5
  %330 = load i64, ptr %329, align 8, !tbaa !9
  %331 = add nsw i64 %328, %330
  store i64 %331, ptr %35, align 8, !tbaa !9
  %332 = load i64, ptr %34, align 8, !tbaa !9
  %333 = load i64, ptr %35, align 8, !tbaa !9
  %334 = icmp sle i64 %332, %333
  br i1 %334, label %335, label %337

335:                                              ; preds = %311
  %336 = load i64, ptr %34, align 8, !tbaa !9
  br label %339

337:                                              ; preds = %311
  %338 = load i64, ptr %35, align 8, !tbaa !9
  br label %339

339:                                              ; preds = %337, %335
  %340 = phi i64 [ %336, %335 ], [ %338, %337 ]
  store i64 %340, ptr %33, align 8, !tbaa !9
  %341 = load i64, ptr %31, align 8, !tbaa !9
  %342 = load i64, ptr %32, align 8, !tbaa !9
  %343 = icmp sge i64 %341, %342
  br i1 %343, label %344, label %346

344:                                              ; preds = %339
  %345 = load i64, ptr %31, align 8, !tbaa !9
  br label %348

346:                                              ; preds = %339
  %347 = load i64, ptr %32, align 8, !tbaa !9
  br label %348

348:                                              ; preds = %346, %344
  %349 = phi i64 [ %345, %344 ], [ %347, %346 ]
  store i64 %349, ptr %36, align 8, !tbaa !9
  br label %350

350:                                              ; preds = %371, %348
  %351 = load i64, ptr %36, align 8, !tbaa !9
  %352 = load i64, ptr %33, align 8, !tbaa !9
  %353 = icmp sle i64 %351, %352
  br i1 %353, label %354, label %374

354:                                              ; preds = %350
  %355 = load double, ptr %47, align 8, !tbaa !11
  %356 = load ptr, ptr %21, align 8, !tbaa !5
  %357 = load i64, ptr %38, align 8, !tbaa !9
  %358 = load i64, ptr %36, align 8, !tbaa !9
  %359 = add nsw i64 %357, %358
  %360 = load i64, ptr %37, align 8, !tbaa !9
  %361 = load i64, ptr %28, align 8, !tbaa !9
  %362 = mul nsw i64 %360, %361
  %363 = add nsw i64 %359, %362
  %364 = getelementptr inbounds double, ptr %356, i64 %363
  %365 = load double, ptr %364, align 8, !tbaa !11
  %366 = load ptr, ptr %26, align 8, !tbaa !5
  %367 = load i64, ptr %36, align 8, !tbaa !9
  %368 = getelementptr inbounds double, ptr %366, i64 %367
  %369 = load double, ptr %368, align 8, !tbaa !11
  %370 = call double @llvm.fmuladd.f64(double %355, double %365, double %369)
  store double %370, ptr %368, align 8, !tbaa !11
  br label %371

371:                                              ; preds = %354
  %372 = load i64, ptr %36, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  store i64 %373, ptr %36, align 8, !tbaa !9
  br label %350, !llvm.loop !18

374:                                              ; preds = %350
  br label %375

375:                                              ; preds = %374, %305
  %376 = load ptr, ptr %24, align 8, !tbaa !5
  %377 = load i64, ptr %376, align 8, !tbaa !9
  %378 = load i64, ptr %41, align 8, !tbaa !9
  %379 = add nsw i64 %378, %377
  store i64 %379, ptr %41, align 8, !tbaa !9
  br label %380

380:                                              ; preds = %375
  %381 = load i64, ptr %37, align 8, !tbaa !9
  %382 = add nsw i64 %381, 1
  store i64 %382, ptr %37, align 8, !tbaa !9
  br label %301, !llvm.loop !19

383:                                              ; preds = %301
  br label %485

384:                                              ; preds = %293
  %385 = load ptr, ptr %17, align 8, !tbaa !5
  %386 = load i64, ptr %385, align 8, !tbaa !9
  store i64 %386, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %387

387:                                              ; preds = %481, %384
  %388 = load i64, ptr %37, align 8, !tbaa !9
  %389 = load i64, ptr %30, align 8, !tbaa !9
  %390 = icmp sle i64 %388, %389
  br i1 %390, label %391, label %484

391:                                              ; preds = %387
  %392 = load ptr, ptr %23, align 8, !tbaa !5
  %393 = load i64, ptr %41, align 8, !tbaa !9
  %394 = getelementptr inbounds double, ptr %392, i64 %393
  %395 = load double, ptr %394, align 8, !tbaa !11
  %396 = fcmp une double %395, 0.000000e+00
  br i1 %396, label %397, label %466

397:                                              ; preds = %391
  %398 = load ptr, ptr %20, align 8, !tbaa !5
  %399 = load double, ptr %398, align 8, !tbaa !11
  %400 = load ptr, ptr %23, align 8, !tbaa !5
  %401 = load i64, ptr %41, align 8, !tbaa !9
  %402 = getelementptr inbounds double, ptr %400, i64 %401
  %403 = load double, ptr %402, align 8, !tbaa !11
  %404 = fmul double %399, %403
  store double %404, ptr %47, align 8, !tbaa !11
  %405 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %405, ptr %40, align 8, !tbaa !9
  %406 = load i64, ptr %45, align 8, !tbaa !9
  %407 = load i64, ptr %37, align 8, !tbaa !9
  %408 = sub nsw i64 %406, %407
  store i64 %408, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %33, align 8, !tbaa !9
  %409 = load i64, ptr %37, align 8, !tbaa !9
  %410 = load ptr, ptr %19, align 8, !tbaa !5
  %411 = load i64, ptr %410, align 8, !tbaa !9
  %412 = sub nsw i64 %409, %411
  store i64 %412, ptr %31, align 8, !tbaa !9
  %413 = load ptr, ptr %16, align 8, !tbaa !5
  %414 = load i64, ptr %413, align 8, !tbaa !9
  store i64 %414, ptr %34, align 8, !tbaa !9
  %415 = load i64, ptr %37, align 8, !tbaa !9
  %416 = load ptr, ptr %18, align 8, !tbaa !5
  %417 = load i64, ptr %416, align 8, !tbaa !9
  %418 = add nsw i64 %415, %417
  store i64 %418, ptr %35, align 8, !tbaa !9
  %419 = load i64, ptr %34, align 8, !tbaa !9
  %420 = load i64, ptr %35, align 8, !tbaa !9
  %421 = icmp sle i64 %419, %420
  br i1 %421, label %422, label %424

422:                                              ; preds = %397
  %423 = load i64, ptr %34, align 8, !tbaa !9
  br label %426

424:                                              ; preds = %397
  %425 = load i64, ptr %35, align 8, !tbaa !9
  br label %426

426:                                              ; preds = %424, %422
  %427 = phi i64 [ %423, %422 ], [ %425, %424 ]
  store i64 %427, ptr %32, align 8, !tbaa !9
  %428 = load i64, ptr %33, align 8, !tbaa !9
  %429 = load i64, ptr %31, align 8, !tbaa !9
  %430 = icmp sge i64 %428, %429
  br i1 %430, label %431, label %433

431:                                              ; preds = %426
  %432 = load i64, ptr %33, align 8, !tbaa !9
  br label %435

433:                                              ; preds = %426
  %434 = load i64, ptr %31, align 8, !tbaa !9
  br label %435

435:                                              ; preds = %433, %431
  %436 = phi i64 [ %432, %431 ], [ %434, %433 ]
  store i64 %436, ptr %36, align 8, !tbaa !9
  br label %437

437:                                              ; preds = %462, %435
  %438 = load i64, ptr %36, align 8, !tbaa !9
  %439 = load i64, ptr %32, align 8, !tbaa !9
  %440 = icmp sle i64 %438, %439
  br i1 %440, label %441, label %465

441:                                              ; preds = %437
  %442 = load double, ptr %47, align 8, !tbaa !11
  %443 = load ptr, ptr %21, align 8, !tbaa !5
  %444 = load i64, ptr %38, align 8, !tbaa !9
  %445 = load i64, ptr %36, align 8, !tbaa !9
  %446 = add nsw i64 %444, %445
  %447 = load i64, ptr %37, align 8, !tbaa !9
  %448 = load i64, ptr %28, align 8, !tbaa !9
  %449 = mul nsw i64 %447, %448
  %450 = add nsw i64 %446, %449
  %451 = getelementptr inbounds double, ptr %443, i64 %450
  %452 = load double, ptr %451, align 8, !tbaa !11
  %453 = load ptr, ptr %26, align 8, !tbaa !5
  %454 = load i64, ptr %40, align 8, !tbaa !9
  %455 = getelementptr inbounds double, ptr %453, i64 %454
  %456 = load double, ptr %455, align 8, !tbaa !11
  %457 = call double @llvm.fmuladd.f64(double %442, double %452, double %456)
  store double %457, ptr %455, align 8, !tbaa !11
  %458 = load ptr, ptr %27, align 8, !tbaa !5
  %459 = load i64, ptr %458, align 8, !tbaa !9
  %460 = load i64, ptr %40, align 8, !tbaa !9
  %461 = add nsw i64 %460, %459
  store i64 %461, ptr %40, align 8, !tbaa !9
  br label %462

462:                                              ; preds = %441
  %463 = load i64, ptr %36, align 8, !tbaa !9
  %464 = add nsw i64 %463, 1
  store i64 %464, ptr %36, align 8, !tbaa !9
  br label %437, !llvm.loop !20

465:                                              ; preds = %437
  br label %466

466:                                              ; preds = %465, %391
  %467 = load ptr, ptr %24, align 8, !tbaa !5
  %468 = load i64, ptr %467, align 8, !tbaa !9
  %469 = load i64, ptr %41, align 8, !tbaa !9
  %470 = add nsw i64 %469, %468
  store i64 %470, ptr %41, align 8, !tbaa !9
  %471 = load i64, ptr %37, align 8, !tbaa !9
  %472 = load ptr, ptr %19, align 8, !tbaa !5
  %473 = load i64, ptr %472, align 8, !tbaa !9
  %474 = icmp sgt i64 %471, %473
  br i1 %474, label %475, label %480

475:                                              ; preds = %466
  %476 = load ptr, ptr %27, align 8, !tbaa !5
  %477 = load i64, ptr %476, align 8, !tbaa !9
  %478 = load i64, ptr %44, align 8, !tbaa !9
  %479 = add nsw i64 %478, %477
  store i64 %479, ptr %44, align 8, !tbaa !9
  br label %480

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

481:                                              ; preds = %480
  %482 = load i64, ptr %37, align 8, !tbaa !9
  %483 = add nsw i64 %482, 1
  store i64 %483, ptr %37, align 8, !tbaa !9
  br label %387, !llvm.loop !21

484:                                              ; preds = %387
  br label %485

485:                                              ; preds = %484, %383
  br label %667

486:                                              ; preds = %286
  %487 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %487, ptr %42, align 8, !tbaa !9
  %488 = load ptr, ptr %24, align 8, !tbaa !5
  %489 = load i64, ptr %488, align 8, !tbaa !9
  %490 = icmp eq i64 %489, 1
  br i1 %490, label %491, label %571

491:                                              ; preds = %486
  %492 = load ptr, ptr %17, align 8, !tbaa !5
  %493 = load i64, ptr %492, align 8, !tbaa !9
  store i64 %493, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %494

494:                                              ; preds = %567, %491
  %495 = load i64, ptr %37, align 8, !tbaa !9
  %496 = load i64, ptr %30, align 8, !tbaa !9
  %497 = icmp sle i64 %495, %496
  br i1 %497, label %498, label %570

498:                                              ; preds = %494
  store double 0.000000e+00, ptr %47, align 8, !tbaa !11
  %499 = load i64, ptr %45, align 8, !tbaa !9
  %500 = load i64, ptr %37, align 8, !tbaa !9
  %501 = sub nsw i64 %499, %500
  store i64 %501, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  %502 = load i64, ptr %37, align 8, !tbaa !9
  %503 = load ptr, ptr %19, align 8, !tbaa !5
  %504 = load i64, ptr %503, align 8, !tbaa !9
  %505 = sub nsw i64 %502, %504
  store i64 %505, ptr %33, align 8, !tbaa !9
  %506 = load ptr, ptr %16, align 8, !tbaa !5
  %507 = load i64, ptr %506, align 8, !tbaa !9
  store i64 %507, ptr %34, align 8, !tbaa !9
  %508 = load i64, ptr %37, align 8, !tbaa !9
  %509 = load ptr, ptr %18, align 8, !tbaa !5
  %510 = load i64, ptr %509, align 8, !tbaa !9
  %511 = add nsw i64 %508, %510
  store i64 %511, ptr %35, align 8, !tbaa !9
  %512 = load i64, ptr %34, align 8, !tbaa !9
  %513 = load i64, ptr %35, align 8, !tbaa !9
  %514 = icmp sle i64 %512, %513
  br i1 %514, label %515, label %517

515:                                              ; preds = %498
  %516 = load i64, ptr %34, align 8, !tbaa !9
  br label %519

517:                                              ; preds = %498
  %518 = load i64, ptr %35, align 8, !tbaa !9
  br label %519

519:                                              ; preds = %517, %515
  %520 = phi i64 [ %516, %515 ], [ %518, %517 ]
  store i64 %520, ptr %31, align 8, !tbaa !9
  %521 = load i64, ptr %32, align 8, !tbaa !9
  %522 = load i64, ptr %33, align 8, !tbaa !9
  %523 = icmp sge i64 %521, %522
  br i1 %523, label %524, label %526

524:                                              ; preds = %519
  %525 = load i64, ptr %32, align 8, !tbaa !9
  br label %528

526:                                              ; preds = %519
  %527 = load i64, ptr %33, align 8, !tbaa !9
  br label %528

528:                                              ; preds = %526, %524
  %529 = phi i64 [ %525, %524 ], [ %527, %526 ]
  store i64 %529, ptr %36, align 8, !tbaa !9
  br label %530

530:                                              ; preds = %551, %528
  %531 = load i64, ptr %36, align 8, !tbaa !9
  %532 = load i64, ptr %31, align 8, !tbaa !9
  %533 = icmp sle i64 %531, %532
  br i1 %533, label %534, label %554

534:                                              ; preds = %530
  %535 = load ptr, ptr %21, align 8, !tbaa !5
  %536 = load i64, ptr %38, align 8, !tbaa !9
  %537 = load i64, ptr %36, align 8, !tbaa !9
  %538 = add nsw i64 %536, %537
  %539 = load i64, ptr %37, align 8, !tbaa !9
  %540 = load i64, ptr %28, align 8, !tbaa !9
  %541 = mul nsw i64 %539, %540
  %542 = add nsw i64 %538, %541
  %543 = getelementptr inbounds double, ptr %535, i64 %542
  %544 = load double, ptr %543, align 8, !tbaa !11
  %545 = load ptr, ptr %23, align 8, !tbaa !5
  %546 = load i64, ptr %36, align 8, !tbaa !9
  %547 = getelementptr inbounds double, ptr %545, i64 %546
  %548 = load double, ptr %547, align 8, !tbaa !11
  %549 = load double, ptr %47, align 8, !tbaa !11
  %550 = call double @llvm.fmuladd.f64(double %544, double %548, double %549)
  store double %550, ptr %47, align 8, !tbaa !11
  br label %551

551:                                              ; preds = %534
  %552 = load i64, ptr %36, align 8, !tbaa !9
  %553 = add nsw i64 %552, 1
  store i64 %553, ptr %36, align 8, !tbaa !9
  br label %530, !llvm.loop !22

554:                                              ; preds = %530
  %555 = load ptr, ptr %20, align 8, !tbaa !5
  %556 = load double, ptr %555, align 8, !tbaa !11
  %557 = load double, ptr %47, align 8, !tbaa !11
  %558 = load ptr, ptr %26, align 8, !tbaa !5
  %559 = load i64, ptr %42, align 8, !tbaa !9
  %560 = getelementptr inbounds double, ptr %558, i64 %559
  %561 = load double, ptr %560, align 8, !tbaa !11
  %562 = call double @llvm.fmuladd.f64(double %556, double %557, double %561)
  store double %562, ptr %560, align 8, !tbaa !11
  %563 = load ptr, ptr %27, align 8, !tbaa !5
  %564 = load i64, ptr %563, align 8, !tbaa !9
  %565 = load i64, ptr %42, align 8, !tbaa !9
  %566 = add nsw i64 %565, %564
  store i64 %566, ptr %42, align 8, !tbaa !9
  br label %567

567:                                              ; preds = %554
  %568 = load i64, ptr %37, align 8, !tbaa !9
  %569 = add nsw i64 %568, 1
  store i64 %569, ptr %37, align 8, !tbaa !9
  br label %494, !llvm.loop !23

570:                                              ; preds = %494
  br label %666

571:                                              ; preds = %486
  %572 = load ptr, ptr %17, align 8, !tbaa !5
  %573 = load i64, ptr %572, align 8, !tbaa !9
  store i64 %573, ptr %30, align 8, !tbaa !9
  store i64 1, ptr %37, align 8, !tbaa !9
  br label %574

574:                                              ; preds = %662, %571
  %575 = load i64, ptr %37, align 8, !tbaa !9
  %576 = load i64, ptr %30, align 8, !tbaa !9
  %577 = icmp sle i64 %575, %576
  br i1 %577, label %578, label %665

578:                                              ; preds = %574
  store double 0.000000e+00, ptr %47, align 8, !tbaa !11
  %579 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %579, ptr %39, align 8, !tbaa !9
  %580 = load i64, ptr %45, align 8, !tbaa !9
  %581 = load i64, ptr %37, align 8, !tbaa !9
  %582 = sub nsw i64 %580, %581
  store i64 %582, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %31, align 8, !tbaa !9
  %583 = load i64, ptr %37, align 8, !tbaa !9
  %584 = load ptr, ptr %19, align 8, !tbaa !5
  %585 = load i64, ptr %584, align 8, !tbaa !9
  %586 = sub nsw i64 %583, %585
  store i64 %586, ptr %32, align 8, !tbaa !9
  %587 = load ptr, ptr %16, align 8, !tbaa !5
  %588 = load i64, ptr %587, align 8, !tbaa !9
  store i64 %588, ptr %34, align 8, !tbaa !9
  %589 = load i64, ptr %37, align 8, !tbaa !9
  %590 = load ptr, ptr %18, align 8, !tbaa !5
  %591 = load i64, ptr %590, align 8, !tbaa !9
  %592 = add nsw i64 %589, %591
  store i64 %592, ptr %35, align 8, !tbaa !9
  %593 = load i64, ptr %34, align 8, !tbaa !9
  %594 = load i64, ptr %35, align 8, !tbaa !9
  %595 = icmp sle i64 %593, %594
  br i1 %595, label %596, label %598

596:                                              ; preds = %578
  %597 = load i64, ptr %34, align 8, !tbaa !9
  br label %600

598:                                              ; preds = %578
  %599 = load i64, ptr %35, align 8, !tbaa !9
  br label %600

600:                                              ; preds = %598, %596
  %601 = phi i64 [ %597, %596 ], [ %599, %598 ]
  store i64 %601, ptr %33, align 8, !tbaa !9
  %602 = load i64, ptr %31, align 8, !tbaa !9
  %603 = load i64, ptr %32, align 8, !tbaa !9
  %604 = icmp sge i64 %602, %603
  br i1 %604, label %605, label %607

605:                                              ; preds = %600
  %606 = load i64, ptr %31, align 8, !tbaa !9
  br label %609

607:                                              ; preds = %600
  %608 = load i64, ptr %32, align 8, !tbaa !9
  br label %609

609:                                              ; preds = %607, %605
  %610 = phi i64 [ %606, %605 ], [ %608, %607 ]
  store i64 %610, ptr %36, align 8, !tbaa !9
  br label %611

611:                                              ; preds = %636, %609
  %612 = load i64, ptr %36, align 8, !tbaa !9
  %613 = load i64, ptr %33, align 8, !tbaa !9
  %614 = icmp sle i64 %612, %613
  br i1 %614, label %615, label %639

615:                                              ; preds = %611
  %616 = load ptr, ptr %21, align 8, !tbaa !5
  %617 = load i64, ptr %38, align 8, !tbaa !9
  %618 = load i64, ptr %36, align 8, !tbaa !9
  %619 = add nsw i64 %617, %618
  %620 = load i64, ptr %37, align 8, !tbaa !9
  %621 = load i64, ptr %28, align 8, !tbaa !9
  %622 = mul nsw i64 %620, %621
  %623 = add nsw i64 %619, %622
  %624 = getelementptr inbounds double, ptr %616, i64 %623
  %625 = load double, ptr %624, align 8, !tbaa !11
  %626 = load ptr, ptr %23, align 8, !tbaa !5
  %627 = load i64, ptr %39, align 8, !tbaa !9
  %628 = getelementptr inbounds double, ptr %626, i64 %627
  %629 = load double, ptr %628, align 8, !tbaa !11
  %630 = load double, ptr %47, align 8, !tbaa !11
  %631 = call double @llvm.fmuladd.f64(double %625, double %629, double %630)
  store double %631, ptr %47, align 8, !tbaa !11
  %632 = load ptr, ptr %24, align 8, !tbaa !5
  %633 = load i64, ptr %632, align 8, !tbaa !9
  %634 = load i64, ptr %39, align 8, !tbaa !9
  %635 = add nsw i64 %634, %633
  store i64 %635, ptr %39, align 8, !tbaa !9
  br label %636

636:                                              ; preds = %615
  %637 = load i64, ptr %36, align 8, !tbaa !9
  %638 = add nsw i64 %637, 1
  store i64 %638, ptr %36, align 8, !tbaa !9
  br label %611, !llvm.loop !24

639:                                              ; preds = %611
  %640 = load ptr, ptr %20, align 8, !tbaa !5
  %641 = load double, ptr %640, align 8, !tbaa !11
  %642 = load double, ptr %47, align 8, !tbaa !11
  %643 = load ptr, ptr %26, align 8, !tbaa !5
  %644 = load i64, ptr %42, align 8, !tbaa !9
  %645 = getelementptr inbounds double, ptr %643, i64 %644
  %646 = load double, ptr %645, align 8, !tbaa !11
  %647 = call double @llvm.fmuladd.f64(double %641, double %642, double %646)
  store double %647, ptr %645, align 8, !tbaa !11
  %648 = load ptr, ptr %27, align 8, !tbaa !5
  %649 = load i64, ptr %648, align 8, !tbaa !9
  %650 = load i64, ptr %42, align 8, !tbaa !9
  %651 = add nsw i64 %650, %649
  store i64 %651, ptr %42, align 8, !tbaa !9
  %652 = load i64, ptr %37, align 8, !tbaa !9
  %653 = load ptr, ptr %19, align 8, !tbaa !5
  %654 = load i64, ptr %653, align 8, !tbaa !9
  %655 = icmp sgt i64 %652, %654
  br i1 %655, label %656, label %661

656:                                              ; preds = %639
  %657 = load ptr, ptr %24, align 8, !tbaa !5
  %658 = load i64, ptr %657, align 8, !tbaa !9
  %659 = load i64, ptr %43, align 8, !tbaa !9
  %660 = add nsw i64 %659, %658
  store i64 %660, ptr %43, align 8, !tbaa !9
  br label %661

661:                                              ; preds = %656, %639
  br label %662

662:                                              ; preds = %661
  %663 = load i64, ptr %37, align 8, !tbaa !9
  %664 = add nsw i64 %663, 1
  store i64 %664, ptr %37, align 8, !tbaa !9
  br label %574, !llvm.loop !25

665:                                              ; preds = %574
  br label %666

666:                                              ; preds = %665, %570
  br label %667

667:                                              ; preds = %666, %485
  store i32 0, ptr %14, align 4
  store i32 1, ptr %50, align 4
  br label %668

668:                                              ; preds = %667, %285, %144, %126
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  %669 = load i32, ptr %14, align 4
  ret i32 %669
}

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!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}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !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 [7 x i8], align 1

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

21:                                               ; preds = %13
  %22 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #6
  %.not269 = icmp eq i64 %22, 0
  br i1 %.not269, label %23, label %26

23:                                               ; preds = %21
  %24 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #6
  %.not270 = icmp eq i64 %24, 0
  br i1 %.not270, label %25, label %26

25:                                               ; preds = %23
  store i64 1, ptr %14, align 8, !tbaa !5
  br label %.thread

26:                                               ; preds = %23, %21, %13
  %27 = load i64, ptr %1, align 8, !tbaa !5
  %28 = icmp slt i64 %27, 0
  br i1 %28, label %29, label %30

29:                                               ; preds = %26
  store i64 2, ptr %14, align 8, !tbaa !5
  br label %.thread

30:                                               ; preds = %26
  %31 = load i64, ptr %2, align 8, !tbaa !5
  %32 = icmp slt i64 %31, 0
  br i1 %32, label %33, label %34

33:                                               ; preds = %30
  store i64 3, ptr %14, align 8, !tbaa !5
  br label %.thread

34:                                               ; preds = %30
  %35 = load i64, ptr %3, align 8, !tbaa !5
  %36 = icmp slt i64 %35, 0
  br i1 %36, label %37, label %38

37:                                               ; preds = %34
  store i64 4, ptr %14, align 8, !tbaa !5
  br label %.thread

38:                                               ; preds = %34
  %39 = load i64, ptr %4, align 8, !tbaa !5
  %40 = icmp slt i64 %39, 0
  br i1 %40, label %41, label %42

41:                                               ; preds = %38
  store i64 5, ptr %14, align 8, !tbaa !5
  br label %.thread

42:                                               ; preds = %38
  %43 = load i64, ptr %7, align 8, !tbaa !5
  %44 = add nuw nsw i64 %39, %35
  %.not271 = icmp sgt i64 %43, %44
  br i1 %.not271, label %46, label %45

45:                                               ; preds = %42
  store i64 8, ptr %14, align 8, !tbaa !5
  br label %.thread

46:                                               ; preds = %42
  %47 = load i64, ptr %9, align 8, !tbaa !5
  %48 = icmp eq i64 %47, 0
  br i1 %48, label %49, label %50

49:                                               ; preds = %46
  store i64 10, ptr %14, align 8, !tbaa !5
  br label %.thread

50:                                               ; preds = %46
  %51 = load i64, ptr %12, align 8, !tbaa !5
  %52 = icmp eq i64 %51, 0
  br i1 %52, label %53, label %55

53:                                               ; preds = %50
  store i64 13, ptr %14, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %25, %33, %41, %49, %53, %45, %37, %29
  %54 = call i32 @xerbla_(ptr noundef nonnull @.str.3, ptr noundef nonnull %14) #6
  br label %.loopexit

55:                                               ; preds = %50
  %56 = icmp eq i64 %27, 0
  %57 = icmp eq i64 %31, 0
  %or.cond = or i1 %56, %57
  br i1 %or.cond, label %.loopexit, label %58

58:                                               ; preds = %55
  %59 = load double, ptr %5, align 8, !tbaa !9
  %60 = fcmp oeq double %59, 0.000000e+00
  br i1 %60, label %61, label %64

61:                                               ; preds = %58
  %62 = load double, ptr %10, align 8, !tbaa !9
  %63 = fcmp oeq double %62, 1.000000e+00
  br i1 %63, label %.loopexit, label %64

64:                                               ; preds = %61, %58
  %65 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not273 = icmp eq i64 %65, 0
  %.291 = select i1 %.not273, ptr %2, ptr %1
  %.0 = load i64, ptr %.291, align 8, !tbaa !5
  %66 = load i64, ptr %9, align 8, !tbaa !5
  %67 = icmp sgt i64 %66, 0
  br i1 %67, label %72, label %68

68:                                               ; preds = %64
  %. = select i1 %.not273, ptr %1, ptr %2
  %.0239 = load i64, ptr %., align 8, !tbaa !5
  %69 = add nsw i64 %.0239, -1
  %70 = mul nsw i64 %69, %66
  %71 = sub nsw i64 1, %70
  br label %72

72:                                               ; preds = %64, %68
  %.0244 = phi i64 [ %71, %68 ], [ 1, %64 ]
  %73 = load i64, ptr %12, align 8, !tbaa !5
  %74 = add i64 %.0, -1
  %75 = mul nsw i64 %73, %74
  %76 = sub nsw i64 1, %75
  %.inv = icmp slt i64 %73, 1
  %.0242 = select i1 %.inv, i64 %76, i64 1
  %77 = load double, ptr %10, align 8, !tbaa !9
  %78 = fcmp une double %77, 1.000000e+00
  br i1 %78, label %79, label %.loopexit299

79:                                               ; preds = %72
  %80 = icmp eq i64 %73, 1
  %81 = fcmp oeq double %77, 0.000000e+00
  %.not277316 = icmp slt i64 %.0, 1
  br i1 %80, label %82, label %117

82:                                               ; preds = %79
  br i1 %81, label %.preheader, label %.preheader300

.preheader300:                                    ; preds = %82
  br i1 %.not277316, label %.loopexit299, label %.lr.ph315.preheader

.lr.ph315.preheader:                              ; preds = %.preheader300
  %min.iters.check424 = icmp ult i64 %.0, 6
  br i1 %min.iters.check424, label %.lr.ph315.preheader509, label %vector.memcheck416

.lr.ph315.preheader509:                           ; preds = %middle.block422, %vector.memcheck416, %.lr.ph315.preheader
  %.1259314.ph = phi i64 [ 1, %vector.memcheck416 ], [ 1, %.lr.ph315.preheader ], [ %ind.end428, %middle.block422 ]
  %83 = add nuw i64 %.0, 1
  %84 = sub i64 %83, %.1259314.ph
  %85 = sub i64 %.0, %.1259314.ph
  %xtraiter516 = and i64 %84, 3
  %lcmp.mod517.not = icmp eq i64 %xtraiter516, 0
  br i1 %lcmp.mod517.not, label %.lr.ph315.prol.loopexit, label %.lr.ph315.prol

.lr.ph315.prol:                                   ; preds = %.lr.ph315.preheader509, %.lr.ph315.prol
  %.1259314.prol = phi i64 [ %90, %.lr.ph315.prol ], [ %.1259314.ph, %.lr.ph315.preheader509 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph315.prol ], [ 0, %.lr.ph315.preheader509 ]
  %86 = load double, ptr %10, align 8, !tbaa !9
  %87 = getelementptr inbounds double, ptr %19, i64 %.1259314.prol
  %88 = load double, ptr %87, align 8, !tbaa !9
  %89 = fmul double %86, %88
  store double %89, ptr %87, align 8, !tbaa !9
  %90 = add nuw i64 %.1259314.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter516
  br i1 %prol.iter.cmp.not, label %.lr.ph315.prol.loopexit, label %.lr.ph315.prol, !llvm.loop !11

.lr.ph315.prol.loopexit:                          ; preds = %.lr.ph315.prol, %.lr.ph315.preheader509
  %.1259314.unr = phi i64 [ %.1259314.ph, %.lr.ph315.preheader509 ], [ %90, %.lr.ph315.prol ]
  %91 = icmp ult i64 %85, 3
  br i1 %91, label %.loopexit299, label %.lr.ph315.preheader509.new

.lr.ph315.preheader509.new:                       ; preds = %.lr.ph315.prol.loopexit
  %invariant.gep550 = getelementptr i8, ptr %19, i64 16
  br label %.lr.ph315

vector.memcheck416:                               ; preds = %.lr.ph315.preheader
  %92 = shl i64 %.0, 3
  %scevgep417 = getelementptr i8, ptr %11, i64 %92
  %scevgep418 = getelementptr i8, ptr %10, i64 8
  %bound0419 = icmp ugt ptr %scevgep418, %11
  %bound1420 = icmp ugt ptr %scevgep417, %10
  %found.conflict421 = and i1 %bound0419, %bound1420
  br i1 %found.conflict421, label %.lr.ph315.preheader509, label %vector.ph425

vector.ph425:                                     ; preds = %vector.memcheck416
  %n.vec427 = and i64 %.0, 9223372036854775804
  %ind.end428 = or disjoint i64 %n.vec427, 1
  %93 = load double, ptr %10, align 8, !tbaa !9, !alias.scope !13
  %broadcast.splatinsert435 = insertelement <2 x double> poison, double %93, i64 0
  %broadcast.splat436 = shufflevector <2 x double> %broadcast.splatinsert435, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body430

vector.body430:                                   ; preds = %vector.body430, %vector.ph425
  %index431 = phi i64 [ 0, %vector.ph425 ], [ %index.next437, %vector.body430 ]
  %94 = getelementptr double, ptr %11, i64 %index431
  %95 = getelementptr inbounds i8, ptr %94, i64 16
  %wide.load433 = load <2 x double>, ptr %94, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %wide.load434 = load <2 x double>, ptr %95, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %96 = fmul <2 x double> %broadcast.splat436, %wide.load433
  %97 = fmul <2 x double> %broadcast.splat436, %wide.load434
  store <2 x double> %96, ptr %94, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  store <2 x double> %97, ptr %95, align 8, !tbaa !9, !alias.scope !16, !noalias !13
  %index.next437 = add nuw i64 %index431, 4
  %98 = icmp eq i64 %index.next437, %n.vec427
  br i1 %98, label %middle.block422, label %vector.body430, !llvm.loop !18

middle.block422:                                  ; preds = %vector.body430
  %cmp.n438 = icmp eq i64 %.0, %n.vec427
  br i1 %cmp.n438, label %.loopexit299, label %.lr.ph315.preheader509

.preheader:                                       ; preds = %82
  br i1 %.not277316, label %.loopexit299, label %.lr.ph318.preheader

.lr.ph318.preheader:                              ; preds = %.preheader
  %99 = shl nuw i64 %.0, 3
  tail call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 %99, i1 false), !tbaa !9
  br label %.loopexit299

.lr.ph315:                                        ; preds = %.lr.ph315, %.lr.ph315.preheader509.new
  %.1259314 = phi i64 [ %.1259314.unr, %.lr.ph315.preheader509.new ], [ %116, %.lr.ph315 ]
  %100 = load double, ptr %10, align 8, !tbaa !9
  %101 = getelementptr inbounds double, ptr %19, i64 %.1259314
  %102 = load double, ptr %101, align 8, !tbaa !9
  %103 = fmul double %100, %102
  store double %103, ptr %101, align 8, !tbaa !9
  %104 = load double, ptr %10, align 8, !tbaa !9
  %105 = getelementptr double, ptr %11, i64 %.1259314
  %106 = load double, ptr %105, align 8, !tbaa !9
  %107 = fmul double %104, %106
  store double %107, ptr %105, align 8, !tbaa !9
  %108 = load double, ptr %10, align 8, !tbaa !9
  %gep551 = getelementptr double, ptr %invariant.gep550, i64 %.1259314
  %109 = load double, ptr %gep551, align 8, !tbaa !9
  %110 = fmul double %108, %109
  store double %110, ptr %gep551, align 8, !tbaa !9
  %111 = add nuw i64 %.1259314, 3
  %112 = load double, ptr %10, align 8, !tbaa !9
  %113 = getelementptr inbounds double, ptr %19, i64 %111
  %114 = load double, ptr %113, align 8, !tbaa !9
  %115 = fmul double %112, %114
  store double %115, ptr %113, align 8, !tbaa !9
  %116 = add nuw i64 %.1259314, 4
  %exitcond375.not.3 = icmp eq i64 %111, %.0
  br i1 %exitcond375.not.3, label %.loopexit299, label %.lr.ph315, !llvm.loop !22

117:                                              ; preds = %79
  br i1 %81, label %.preheader302, label %.preheader304

.preheader304:                                    ; preds = %117
  br i1 %.not277316, label %.loopexit299, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader304
  %xtraiter = and i64 %.0, 1
  %118 = icmp eq i64 %.0, 1
  br i1 %118, label %.loopexit299.loopexit511.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %.0, 9223372036854775806
  br label %.lr.ph

.preheader302:                                    ; preds = %117
  br i1 %.not277316, label %.loopexit299, label %.lr.ph312.preheader

.lr.ph312.preheader:                              ; preds = %.preheader302
  %xtraiter512 = and i64 %.0, 3
  %119 = icmp ult i64 %.0, 4
  br i1 %119, label %.loopexit299.loopexit510.unr-lcssa, label %.lr.ph312.preheader.new

.lr.ph312.preheader.new:                          ; preds = %.lr.ph312.preheader
  %unroll_iter514 = and i64 %.0, 9223372036854775804
  br label %.lr.ph312

.lr.ph312:                                        ; preds = %.lr.ph312, %.lr.ph312.preheader.new
  %.0251311 = phi i64 [ %.0242, %.lr.ph312.preheader.new ], [ %127, %.lr.ph312 ]
  %niter515 = phi i64 [ 0, %.lr.ph312.preheader.new ], [ %niter515.next.3, %.lr.ph312 ]
  %120 = getelementptr inbounds double, ptr %19, i64 %.0251311
  store double 0.000000e+00, ptr %120, align 8, !tbaa !9
  %121 = add nsw i64 %.0251311, %73
  %122 = getelementptr inbounds double, ptr %19, i64 %121
  store double 0.000000e+00, ptr %122, align 8, !tbaa !9
  %123 = add nsw i64 %121, %73
  %124 = getelementptr inbounds double, ptr %19, i64 %123
  store double 0.000000e+00, ptr %124, align 8, !tbaa !9
  %125 = add nsw i64 %123, %73
  %126 = getelementptr inbounds double, ptr %19, i64 %125
  store double 0.000000e+00, ptr %126, align 8, !tbaa !9
  %127 = add nsw i64 %125, %73
  %niter515.next.3 = add i64 %niter515, 4
  %niter515.ncmp.3 = icmp eq i64 %niter515.next.3, %unroll_iter514
  br i1 %niter515.ncmp.3, label %.loopexit299.loopexit510.unr-lcssa, label %.lr.ph312, !llvm.loop !23

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.1252308 = phi i64 [ %.0242, %.lr.ph.preheader.new ], [ %137, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.1, %.lr.ph ]
  %128 = load double, ptr %10, align 8, !tbaa !9
  %129 = getelementptr inbounds double, ptr %19, i64 %.1252308
  %130 = load double, ptr %129, align 8, !tbaa !9
  %131 = fmul double %128, %130
  store double %131, ptr %129, align 8, !tbaa !9
  %132 = add nsw i64 %.1252308, %73
  %133 = load double, ptr %10, align 8, !tbaa !9
  %134 = getelementptr inbounds double, ptr %19, i64 %132
  %135 = load double, ptr %134, align 8, !tbaa !9
  %136 = fmul double %133, %135
  store double %136, ptr %134, align 8, !tbaa !9
  %137 = add nsw i64 %132, %73
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit299.loopexit511.unr-lcssa, label %.lr.ph, !llvm.loop !24

.loopexit299.loopexit510.unr-lcssa:               ; preds = %.lr.ph312, %.lr.ph312.preheader
  %.0251311.unr = phi i64 [ %.0242, %.lr.ph312.preheader ], [ %127, %.lr.ph312 ]
  %lcmp.mod513.not = icmp eq i64 %xtraiter512, 0
  br i1 %lcmp.mod513.not, label %.loopexit299, label %.lr.ph312.epil

.lr.ph312.epil:                                   ; preds = %.loopexit299.loopexit510.unr-lcssa, %.lr.ph312.epil
  %.0251311.epil = phi i64 [ %139, %.lr.ph312.epil ], [ %.0251311.unr, %.loopexit299.loopexit510.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph312.epil ], [ 0, %.loopexit299.loopexit510.unr-lcssa ]
  %138 = getelementptr inbounds double, ptr %19, i64 %.0251311.epil
  store double 0.000000e+00, ptr %138, align 8, !tbaa !9
  %139 = add nsw i64 %.0251311.epil, %73
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter512
  br i1 %epil.iter.cmp.not, label %.loopexit299, label %.lr.ph312.epil, !llvm.loop !25

.loopexit299.loopexit511.unr-lcssa:               ; preds = %.lr.ph, %.lr.ph.preheader
  %.1252308.unr = phi i64 [ %.0242, %.lr.ph.preheader ], [ %137, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit299, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.loopexit299.loopexit511.unr-lcssa
  %140 = load double, ptr %10, align 8, !tbaa !9
  %141 = getelementptr inbounds double, ptr %19, i64 %.1252308.unr
  %142 = load double, ptr %141, align 8, !tbaa !9
  %143 = fmul double %140, %142
  store double %143, ptr %141, align 8, !tbaa !9
  br label %.loopexit299

.loopexit299:                                     ; preds = %.lr.ph.epil, %.loopexit299.loopexit511.unr-lcssa, %.loopexit299.loopexit510.unr-lcssa, %.lr.ph312.epil, %.lr.ph315.prol.loopexit, %.lr.ph315, %middle.block422, %.lr.ph318.preheader, %.preheader304, %.preheader302, %.preheader300, %.preheader, %72
  %144 = load double, ptr %5, align 8, !tbaa !9
  %145 = fcmp oeq double %144, 0.000000e+00
  br i1 %145, label %.loopexit, label %146

146:                                              ; preds = %.loopexit299
  %147 = load i64, ptr %4, align 8, !tbaa !5
  %148 = add nsw i64 %147, 1
  %149 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #6
  %.not278 = icmp eq i64 %149, 0
  %150 = load i64, ptr %2, align 8, !tbaa !5
  %.not282362 = icmp slt i64 %150, 1
  br i1 %.not278, label %243, label %151

151:                                              ; preds = %146
  %152 = load i64, ptr %12, align 8, !tbaa !5
  %153 = icmp eq i64 %152, 1
  br i1 %153, label %154, label %198

154:                                              ; preds = %151
  br i1 %.not282362, label %.loopexit, label %.lr.ph339

.lr.ph339:                                        ; preds = %154
  %155 = load i64, ptr %9, align 8, !tbaa !5
  %scevgep474 = getelementptr i8, ptr %11, i64 -8
  %156 = shl i64 %147, 3
  %157 = shl i64 %15, 3
  %158 = add i64 %157, -8
  %159 = getelementptr i8, ptr %6, i64 %156
  %160 = getelementptr i8, ptr %159, i64 -8
  %161 = getelementptr i8, ptr %6, i64 %156
  br label %162

162:                                              ; preds = %.lr.ph339, %.loopexit295
  %indvar477 = phi i64 [ 0, %.lr.ph339 ], [ %indvar.next478, %.loopexit295 ]
  %.0249338 = phi i64 [ %.0244, %.lr.ph339 ], [ %196, %.loopexit295 ]
  %.0255336 = phi i64 [ 1, %.lr.ph339 ], [ %197, %.loopexit295 ]
  %163 = mul i64 %158, %indvar477
  %scevgep479 = getelementptr i8, ptr %160, i64 %163
  %scevgep481 = getelementptr i8, ptr %161, i64 %163
  %164 = getelementptr inbounds double, ptr %18, i64 %.0249338
  %165 = load double, ptr %164, align 8, !tbaa !9
  %166 = fcmp une double %165, 0.000000e+00
  br i1 %166, label %167, label %.loopexit295

167:                                              ; preds = %162
  %168 = load double, ptr %5, align 8, !tbaa !9
  %169 = fmul double %165, %168
  %170 = load i64, ptr %4, align 8, !tbaa !5
  %171 = sub nsw i64 %.0255336, %170
  %172 = load i64, ptr %1, align 8, !tbaa !5
  %173 = load i64, ptr %3, align 8, !tbaa !5
  %174 = add nsw i64 %173, %.0255336
  %175 = tail call i64 @llvm.smin.i64(i64 %172, i64 %174)
  %176 = tail call i64 @llvm.smax.i64(i64 %171, i64 1)
  %.not290330 = icmp sgt i64 %176, %175
  br i1 %.not290330, label %.loopexit295, label %.lr.ph332

.lr.ph332:                                        ; preds = %167
  %177 = sub nsw i64 %148, %.0255336
  %178 = mul nsw i64 %.0255336, %15
  %179 = getelementptr double, ptr %17, i64 %177
  %invariant.gep333 = getelementptr double, ptr %179, i64 %178
  %180 = add i64 %175, 1
  %181 = sub i64 %180, %176
  %min.iters.check488 = icmp ult i64 %181, 4
  br i1 %min.iters.check488, label %scalar.ph487.preheader, label %vector.memcheck473

vector.memcheck473:                               ; preds = %.lr.ph332
  %182 = shl i64 %176, 3
  %scevgep475 = getelementptr i8, ptr %scevgep474, i64 %182
  %183 = shl i64 %175, 3
  %scevgep476 = getelementptr i8, ptr %11, i64 %183
  %scevgep480 = getelementptr i8, ptr %scevgep479, i64 %182
  %scevgep482 = getelementptr i8, ptr %scevgep481, i64 %183
  %bound0483 = icmp ult ptr %scevgep475, %scevgep482
  %bound1484 = icmp ult ptr %scevgep480, %scevgep476
  %found.conflict485 = and i1 %bound0483, %bound1484
  br i1 %found.conflict485, label %scalar.ph487.preheader, label %vector.ph489

vector.ph489:                                     ; preds = %vector.memcheck473
  %n.vec491 = and i64 %181, -4
  %ind.end492 = add i64 %176, %n.vec491
  %broadcast.splatinsert501 = insertelement <2 x double> poison, double %169, i64 0
  %broadcast.splat502 = shufflevector <2 x double> %broadcast.splatinsert501, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body494

vector.body494:                                   ; preds = %vector.body494, %vector.ph489
  %index495 = phi i64 [ 0, %vector.ph489 ], [ %index.next503, %vector.body494 ]
  %offset.idx496 = add i64 %176, %index495
  %184 = getelementptr double, ptr %invariant.gep333, i64 %offset.idx496
  %185 = getelementptr i8, ptr %184, i64 16
  %wide.load497 = load <2 x double>, ptr %184, align 8, !tbaa !9, !alias.scope !26
  %wide.load498 = load <2 x double>, ptr %185, align 8, !tbaa !9, !alias.scope !26
  %186 = getelementptr inbounds double, ptr %19, i64 %offset.idx496
  %187 = getelementptr inbounds i8, ptr %186, i64 16
  %wide.load499 = load <2 x double>, ptr %186, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %wide.load500 = load <2 x double>, ptr %187, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %188 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat502, <2 x double> %wide.load497, <2 x double> %wide.load499)
  %189 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat502, <2 x double> %wide.load498, <2 x double> %wide.load500)
  store <2 x double> %188, ptr %186, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  store <2 x double> %189, ptr %187, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %index.next503 = add nuw i64 %index495, 4
  %190 = icmp eq i64 %index.next503, %n.vec491
  br i1 %190, label %middle.block486, label %vector.body494, !llvm.loop !31

middle.block486:                                  ; preds = %vector.body494
  %cmp.n504 = icmp eq i64 %181, %n.vec491
  br i1 %cmp.n504, label %.loopexit295, label %scalar.ph487.preheader

scalar.ph487.preheader:                           ; preds = %middle.block486, %vector.memcheck473, %.lr.ph332
  %.4331.ph = phi i64 [ %176, %vector.memcheck473 ], [ %176, %.lr.ph332 ], [ %ind.end492, %middle.block486 ]
  br label %scalar.ph487

scalar.ph487:                                     ; preds = %scalar.ph487.preheader, %scalar.ph487
  %.4331 = phi i64 [ %195, %scalar.ph487 ], [ %.4331.ph, %scalar.ph487.preheader ]
  %gep334 = getelementptr double, ptr %invariant.gep333, i64 %.4331
  %191 = load double, ptr %gep334, align 8, !tbaa !9
  %192 = getelementptr inbounds double, ptr %19, i64 %.4331
  %193 = load double, ptr %192, align 8, !tbaa !9
  %194 = tail call double @llvm.fmuladd.f64(double %169, double %191, double %193)
  store double %194, ptr %192, align 8, !tbaa !9
  %195 = add nuw nsw i64 %.4331, 1
  %.not290.not = icmp slt i64 %.4331, %175
  br i1 %.not290.not, label %scalar.ph487, label %.loopexit295, !llvm.loop !32

.loopexit295:                                     ; preds = %scalar.ph487, %middle.block486, %167, %162
  %196 = add nsw i64 %155, %.0249338
  %197 = add nuw i64 %.0255336, 1
  %exitcond377.not = icmp eq i64 %.0255336, %150
  %indvar.next478 = add i64 %indvar477, 1
  br i1 %exitcond377.not, label %.loopexit, label %162, !llvm.loop !33

198:                                              ; preds = %151
  br i1 %.not282362, label %.loopexit, label %.lr.ph329

.lr.ph329:                                        ; preds = %198
  %199 = load i64, ptr %9, align 8, !tbaa !5
  %200 = load i64, ptr %4, align 8, !tbaa !5
  br label %201

201:                                              ; preds = %.lr.ph329, %.loopexit297
  %indvar = phi i64 [ 0, %.lr.ph329 ], [ %indvar.next, %.loopexit297 ]
  %.1243327 = phi i64 [ %.0242, %.lr.ph329 ], [ %spec.select, %.loopexit297 ]
  %.1250326 = phi i64 [ %.0244, %.lr.ph329 ], [ %239, %.loopexit297 ]
  %.1256324 = phi i64 [ 1, %.lr.ph329 ], [ %242, %.loopexit297 ]
  %reass.sub = sub i64 %indvar, %200
  %202 = add i64 %reass.sub, 1
  %smax = tail call i64 @llvm.smax.i64(i64 %202, i64 1)
  %203 = getelementptr inbounds double, ptr %18, i64 %.1250326
  %204 = load double, ptr %203, align 8, !tbaa !9
  %205 = fcmp une double %204, 0.000000e+00
  br i1 %205, label %206, label %.loopexit297

206:                                              ; preds = %201
  %207 = load double, ptr %5, align 8, !tbaa !9
  %208 = fmul double %204, %207
  %209 = sub nsw i64 %.1256324, %200
  %210 = load i64, ptr %1, align 8, !tbaa !5
  %211 = load i64, ptr %3, align 8, !tbaa !5
  %212 = add nsw i64 %211, %.1256324
  %213 = tail call i64 @llvm.smin.i64(i64 %210, i64 %212)
  %214 = tail call i64 @llvm.smax.i64(i64 %209, i64 1)
  %.not287319 = icmp sgt i64 %214, %213
  br i1 %.not287319, label %.loopexit297, label %.lr.ph322

.lr.ph322:                                        ; preds = %206
  %215 = sub nsw i64 %148, %.1256324
  %216 = mul nsw i64 %.1256324, %15
  %217 = getelementptr double, ptr %17, i64 %215
  %invariant.gep = getelementptr double, ptr %217, i64 %216
  %218 = add i64 %213, %smax
  %219 = and i64 %218, 1
  %lcmp.mod519.not.not = icmp eq i64 %219, 0
  br i1 %lcmp.mod519.not.not, label %.prol.loopexit.unr-lcssa, label %.prol.loopexit

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph322
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %214
  %220 = load double, ptr %gep.prol, align 8, !tbaa !9
  %221 = getelementptr inbounds double, ptr %19, i64 %.1243327
  %222 = load double, ptr %221, align 8, !tbaa !9
  %223 = tail call double @llvm.fmuladd.f64(double %208, double %220, double %222)
  store double %223, ptr %221, align 8, !tbaa !9
  %224 = add nsw i64 %.1243327, %152
  %225 = add nuw nsw i64 %214, 1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph322
  %.2253321.unr = phi i64 [ %.1243327, %.lr.ph322 ], [ %224, %.prol.loopexit.unr-lcssa ]
  %.5320.unr = phi i64 [ %214, %.lr.ph322 ], [ %225, %.prol.loopexit.unr-lcssa ]
  %226 = icmp eq i64 %213, %smax
  br i1 %226, label %.loopexit297, label %.lr.ph322.new

.lr.ph322.new:                                    ; preds = %.prol.loopexit, %.lr.ph322.new
  %.2253321 = phi i64 [ %237, %.lr.ph322.new ], [ %.2253321.unr, %.prol.loopexit ]
  %.5320 = phi i64 [ %238, %.lr.ph322.new ], [ %.5320.unr, %.prol.loopexit ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %.5320
  %227 = load double, ptr %gep, align 8, !tbaa !9
  %228 = getelementptr inbounds double, ptr %19, i64 %.2253321
  %229 = load double, ptr %228, align 8, !tbaa !9
  %230 = tail call double @llvm.fmuladd.f64(double %208, double %227, double %229)
  store double %230, ptr %228, align 8, !tbaa !9
  %231 = add nsw i64 %.2253321, %152
  %232 = add nuw nsw i64 %.5320, 1
  %gep.1 = getelementptr double, ptr %invariant.gep, i64 %232
  %233 = load double, ptr %gep.1, align 8, !tbaa !9
  %234 = getelementptr inbounds double, ptr %19, i64 %231
  %235 = load double, ptr %234, align 8, !tbaa !9
  %236 = tail call double @llvm.fmuladd.f64(double %208, double %233, double %235)
  store double %236, ptr %234, align 8, !tbaa !9
  %237 = add nsw i64 %231, %152
  %238 = add nuw nsw i64 %.5320, 2
  %.not287.not.1 = icmp slt i64 %232, %213
  br i1 %.not287.not.1, label %.lr.ph322.new, label %.loopexit297, !llvm.loop !34

.loopexit297:                                     ; preds = %.prol.loopexit, %.lr.ph322.new, %206, %201
  %239 = add nsw i64 %199, %.1250326
  %240 = icmp sgt i64 %.1256324, %200
  %241 = select i1 %240, i64 %152, i64 0
  %spec.select = add nsw i64 %241, %.1243327
  %242 = add nuw i64 %.1256324, 1
  %exitcond376.not = icmp eq i64 %.1256324, %150
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond376.not, label %.loopexit, label %201, !llvm.loop !35

243:                                              ; preds = %146
  %244 = load i64, ptr %9, align 8, !tbaa !5
  %245 = icmp eq i64 %244, 1
  br i1 %245, label %246, label %297

246:                                              ; preds = %243
  br i1 %.not282362, label %.loopexit, label %.lr.ph366

.lr.ph366:                                        ; preds = %246
  %247 = load i64, ptr %4, align 8, !tbaa !5
  %248 = load i64, ptr %1, align 8, !tbaa !5
  %249 = load i64, ptr %3, align 8, !tbaa !5
  %250 = load i64, ptr %12, align 8, !tbaa !5
  %251 = add nsw i64 %249, 1
  br label %252

252:                                              ; preds = %.lr.ph366, %._crit_edge358
  %indvar531 = phi i64 [ 0, %.lr.ph366 ], [ %indvar.next532, %._crit_edge358 ]
  %.0247364 = phi i64 [ %.0242, %.lr.ph366 ], [ %295, %._crit_edge358 ]
  %.2257363 = phi i64 [ 1, %.lr.ph366 ], [ %296, %._crit_edge358 ]
  %253 = add i64 %251, %indvar531
  %smin533 = tail call i64 @llvm.smin.i64(i64 %248, i64 %253)
  %reass.sub539 = sub i64 %indvar531, %247
  %254 = add i64 %reass.sub539, 1
  %smax534 = tail call i64 @llvm.smax.i64(i64 %254, i64 1)
  %255 = sub i64 %smin533, %smax534
  %256 = sub nsw i64 %.2257363, %247
  %257 = add nsw i64 %249, %.2257363
  %258 = tail call i64 @llvm.smin.i64(i64 %248, i64 %257)
  %259 = tail call i64 @llvm.smax.i64(i64 %256, i64 1)
  %.not284353 = icmp sgt i64 %259, %258
  br i1 %.not284353, label %._crit_edge358, label %.lr.ph357

.lr.ph357:                                        ; preds = %252
  %260 = add i64 %smin533, 1
  %261 = sub i64 %260, %smax534
  %262 = sub nsw i64 %148, %.2257363
  %263 = mul nsw i64 %.2257363, %15
  %264 = getelementptr double, ptr %17, i64 %262
  %invariant.gep360 = getelementptr double, ptr %264, i64 %263
  %xtraiter535 = and i64 %261, 3
  %lcmp.mod536.not = icmp eq i64 %xtraiter535, 0
  br i1 %lcmp.mod536.not, label %.prol.loopexit530, label %.prol.preheader529

.prol.preheader529:                               ; preds = %.lr.ph357, %.prol.preheader529
  %.0240355.prol = phi double [ %268, %.prol.preheader529 ], [ 0.000000e+00, %.lr.ph357 ]
  %.6354.prol = phi i64 [ %269, %.prol.preheader529 ], [ %259, %.lr.ph357 ]
  %prol.iter537 = phi i64 [ %prol.iter537.next, %.prol.preheader529 ], [ 0, %.lr.ph357 ]
  %gep361.prol = getelementptr double, ptr %invariant.gep360, i64 %.6354.prol
  %265 = load double, ptr %gep361.prol, align 8, !tbaa !9
  %266 = getelementptr inbounds double, ptr %18, i64 %.6354.prol
  %267 = load double, ptr %266, align 8, !tbaa !9
  %268 = tail call double @llvm.fmuladd.f64(double %265, double %267, double %.0240355.prol)
  %269 = add nuw nsw i64 %.6354.prol, 1
  %prol.iter537.next = add i64 %prol.iter537, 1
  %prol.iter537.cmp.not = icmp eq i64 %prol.iter537.next, %xtraiter535
  br i1 %prol.iter537.cmp.not, label %.prol.loopexit530, label %.prol.preheader529, !llvm.loop !36

.prol.loopexit530:                                ; preds = %.prol.preheader529, %.lr.ph357
  %.0240355.unr = phi double [ 0.000000e+00, %.lr.ph357 ], [ %268, %.prol.preheader529 ]
  %.6354.unr = phi i64 [ %259, %.lr.ph357 ], [ %269, %.prol.preheader529 ]
  %.lcssa.unr = phi double [ poison, %.lr.ph357 ], [ %268, %.prol.preheader529 ]
  %270 = icmp ult i64 %255, 3
  br i1 %270, label %._crit_edge358, label %.lr.ph357.new

.lr.ph357.new:                                    ; preds = %.prol.loopexit530
  %invariant.gep556 = getelementptr i8, ptr %invariant.gep360, i64 8
  br label %271

271:                                              ; preds = %271, %.lr.ph357.new
  %.0240355 = phi double [ %.0240355.unr, %.lr.ph357.new ], [ %289, %271 ]
  %.6354 = phi i64 [ %.6354.unr, %.lr.ph357.new ], [ %290, %271 ]
  %gep361 = getelementptr double, ptr %invariant.gep360, i64 %.6354
  %272 = load double, ptr %gep361, align 8, !tbaa !9
  %273 = getelementptr inbounds double, ptr %18, i64 %.6354
  %274 = load double, ptr %273, align 8, !tbaa !9
  %275 = tail call double @llvm.fmuladd.f64(double %272, double %274, double %.0240355)
  %gep557 = getelementptr double, ptr %invariant.gep556, i64 %.6354
  %276 = load double, ptr %gep557, align 8, !tbaa !9
  %277 = getelementptr double, ptr %8, i64 %.6354
  %278 = load double, ptr %277, align 8, !tbaa !9
  %279 = tail call double @llvm.fmuladd.f64(double %276, double %278, double %275)
  %280 = add nuw nsw i64 %.6354, 2
  %gep361.2 = getelementptr double, ptr %invariant.gep360, i64 %280
  %281 = load double, ptr %gep361.2, align 8, !tbaa !9
  %282 = getelementptr inbounds double, ptr %18, i64 %280
  %283 = load double, ptr %282, align 8, !tbaa !9
  %284 = tail call double @llvm.fmuladd.f64(double %281, double %283, double %279)
  %285 = add nuw nsw i64 %.6354, 3
  %gep361.3 = getelementptr double, ptr %invariant.gep360, i64 %285
  %286 = load double, ptr %gep361.3, align 8, !tbaa !9
  %287 = getelementptr inbounds double, ptr %18, i64 %285
  %288 = load double, ptr %287, align 8, !tbaa !9
  %289 = tail call double @llvm.fmuladd.f64(double %286, double %288, double %284)
  %290 = add nuw nsw i64 %.6354, 4
  %.not284.not.3 = icmp slt i64 %285, %258
  br i1 %.not284.not.3, label %271, label %._crit_edge358, !llvm.loop !37

._crit_edge358:                                   ; preds = %.prol.loopexit530, %271, %252
  %.0240.lcssa = phi double [ 0.000000e+00, %252 ], [ %.lcssa.unr, %.prol.loopexit530 ], [ %289, %271 ]
  %291 = load double, ptr %5, align 8, !tbaa !9
  %292 = getelementptr inbounds double, ptr %19, i64 %.0247364
  %293 = load double, ptr %292, align 8, !tbaa !9
  %294 = tail call double @llvm.fmuladd.f64(double %291, double %.0240.lcssa, double %293)
  store double %294, ptr %292, align 8, !tbaa !9
  %295 = add nsw i64 %250, %.0247364
  %296 = add nuw i64 %.2257363, 1
  %exitcond379.not = icmp eq i64 %.2257363, %150
  %indvar.next532 = add i64 %indvar531, 1
  br i1 %exitcond379.not, label %.loopexit, label %252, !llvm.loop !38

297:                                              ; preds = %243
  br i1 %.not282362, label %.loopexit, label %.lr.ph352

.lr.ph352:                                        ; preds = %297
  %298 = load i64, ptr %4, align 8, !tbaa !5
  %299 = load i64, ptr %1, align 8, !tbaa !5
  %300 = load i64, ptr %3, align 8, !tbaa !5
  %301 = load i64, ptr %12, align 8, !tbaa !5
  %302 = add nsw i64 %300, 1
  br label %303

303:                                              ; preds = %.lr.ph352, %._crit_edge
  %indvar523 = phi i64 [ 0, %.lr.ph352 ], [ %indvar.next524, %._crit_edge ]
  %.1245350 = phi i64 [ %.0244, %.lr.ph352 ], [ %spec.select293, %._crit_edge ]
  %.1248349 = phi i64 [ %.0242, %.lr.ph352 ], [ %350, %._crit_edge ]
  %.3348 = phi i64 [ 1, %.lr.ph352 ], [ %353, %._crit_edge ]
  %304 = add i64 %302, %indvar523
  %smin = tail call i64 @llvm.smin.i64(i64 %299, i64 %304)
  %reass.sub538 = sub i64 %indvar523, %298
  %305 = add i64 %reass.sub538, 1
  %smax525 = tail call i64 @llvm.smax.i64(i64 %305, i64 1)
  %306 = sub i64 %smin, %smax525
  %307 = sub nsw i64 %.3348, %298
  %308 = add nsw i64 %300, %.3348
  %309 = tail call i64 @llvm.smin.i64(i64 %299, i64 %308)
  %310 = tail call i64 @llvm.smax.i64(i64 %307, i64 1)
  %.not281340 = icmp sgt i64 %310, %309
  br i1 %.not281340, label %._crit_edge, label %.lr.ph344

.lr.ph344:                                        ; preds = %303
  %311 = add i64 %smin, 1
  %312 = sub i64 %311, %smax525
  %313 = sub nsw i64 %148, %.3348
  %314 = mul nsw i64 %.3348, %15
  %315 = getelementptr double, ptr %17, i64 %313
  %invariant.gep345 = getelementptr double, ptr %315, i64 %314
  %xtraiter526 = and i64 %312, 3
  %lcmp.mod527.not = icmp eq i64 %xtraiter526, 0
  br i1 %lcmp.mod527.not, label %.prol.loopexit522, label %.prol.preheader521

.prol.preheader521:                               ; preds = %.lr.ph344, %.prol.preheader521
  %.1343.prol = phi double [ %319, %.prol.preheader521 ], [ 0.000000e+00, %.lr.ph344 ]
  %.0254342.prol = phi i64 [ %320, %.prol.preheader521 ], [ %.1245350, %.lr.ph344 ]
  %.7341.prol = phi i64 [ %321, %.prol.preheader521 ], [ %310, %.lr.ph344 ]
  %prol.iter528 = phi i64 [ %prol.iter528.next, %.prol.preheader521 ], [ 0, %.lr.ph344 ]
  %gep346.prol = getelementptr double, ptr %invariant.gep345, i64 %.7341.prol
  %316 = load double, ptr %gep346.prol, align 8, !tbaa !9
  %317 = getelementptr inbounds double, ptr %18, i64 %.0254342.prol
  %318 = load double, ptr %317, align 8, !tbaa !9
  %319 = tail call double @llvm.fmuladd.f64(double %316, double %318, double %.1343.prol)
  %320 = add nsw i64 %.0254342.prol, %244
  %321 = add nuw nsw i64 %.7341.prol, 1
  %prol.iter528.next = add i64 %prol.iter528, 1
  %prol.iter528.cmp.not = icmp eq i64 %prol.iter528.next, %xtraiter526
  br i1 %prol.iter528.cmp.not, label %.prol.loopexit522, label %.prol.preheader521, !llvm.loop !39

.prol.loopexit522:                                ; preds = %.prol.preheader521, %.lr.ph344
  %.1343.unr = phi double [ 0.000000e+00, %.lr.ph344 ], [ %319, %.prol.preheader521 ]
  %.0254342.unr = phi i64 [ %.1245350, %.lr.ph344 ], [ %320, %.prol.preheader521 ]
  %.7341.unr = phi i64 [ %310, %.lr.ph344 ], [ %321, %.prol.preheader521 ]
  %.lcssa506.unr = phi double [ poison, %.lr.ph344 ], [ %319, %.prol.preheader521 ]
  %322 = icmp ult i64 %306, 3
  br i1 %322, label %._crit_edge, label %.lr.ph344.new

.lr.ph344.new:                                    ; preds = %.prol.loopexit522
  %invariant.gep552 = getelementptr i8, ptr %invariant.gep345, i64 8
  %invariant.gep554 = getelementptr i8, ptr %invariant.gep345, i64 16
  br label %323

323:                                              ; preds = %323, %.lr.ph344.new
  %.1343 = phi double [ %.1343.unr, %.lr.ph344.new ], [ %343, %323 ]
  %.0254342 = phi i64 [ %.0254342.unr, %.lr.ph344.new ], [ %344, %323 ]
  %.7341 = phi i64 [ %.7341.unr, %.lr.ph344.new ], [ %345, %323 ]
  %gep346 = getelementptr double, ptr %invariant.gep345, i64 %.7341
  %324 = load double, ptr %gep346, align 8, !tbaa !9
  %325 = getelementptr inbounds double, ptr %18, i64 %.0254342
  %326 = load double, ptr %325, align 8, !tbaa !9
  %327 = tail call double @llvm.fmuladd.f64(double %324, double %326, double %.1343)
  %328 = add nsw i64 %.0254342, %244
  %gep553 = getelementptr double, ptr %invariant.gep552, i64 %.7341
  %329 = load double, ptr %gep553, align 8, !tbaa !9
  %330 = getelementptr inbounds double, ptr %18, i64 %328
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = tail call double @llvm.fmuladd.f64(double %329, double %331, double %327)
  %333 = add nsw i64 %328, %244
  %gep555 = getelementptr double, ptr %invariant.gep554, i64 %.7341
  %334 = load double, ptr %gep555, align 8, !tbaa !9
  %335 = getelementptr inbounds double, ptr %18, i64 %333
  %336 = load double, ptr %335, align 8, !tbaa !9
  %337 = tail call double @llvm.fmuladd.f64(double %334, double %336, double %332)
  %338 = add nsw i64 %333, %244
  %339 = add nuw nsw i64 %.7341, 3
  %gep346.3 = getelementptr double, ptr %invariant.gep345, i64 %339
  %340 = load double, ptr %gep346.3, align 8, !tbaa !9
  %341 = getelementptr inbounds double, ptr %18, i64 %338
  %342 = load double, ptr %341, align 8, !tbaa !9
  %343 = tail call double @llvm.fmuladd.f64(double %340, double %342, double %337)
  %344 = add nsw i64 %338, %244
  %345 = add nuw nsw i64 %.7341, 4
  %.not281.not.3 = icmp slt i64 %339, %309
  br i1 %.not281.not.3, label %323, label %._crit_edge, !llvm.loop !40

._crit_edge:                                      ; preds = %.prol.loopexit522, %323, %303
  %.1.lcssa = phi double [ 0.000000e+00, %303 ], [ %.lcssa506.unr, %.prol.loopexit522 ], [ %343, %323 ]
  %346 = load double, ptr %5, align 8, !tbaa !9
  %347 = getelementptr inbounds double, ptr %19, i64 %.1248349
  %348 = load double, ptr %347, align 8, !tbaa !9
  %349 = tail call double @llvm.fmuladd.f64(double %346, double %.1.lcssa, double %348)
  store double %349, ptr %347, align 8, !tbaa !9
  %350 = add nsw i64 %301, %.1248349
  %351 = icmp sgt i64 %.3348, %298
  %352 = select i1 %351, i64 %244, i64 0
  %spec.select293 = add nsw i64 %352, %.1245350
  %353 = add nuw i64 %.3348, 1
  %exitcond378.not = icmp eq i64 %.3348, %150
  %indvar.next524 = add i64 %indvar523, 1
  br i1 %exitcond378.not, label %.loopexit, label %303, !llvm.loop !41

.loopexit:                                        ; preds = %.loopexit297, %.loopexit295, %._crit_edge, %._crit_edge358, %198, %154, %297, %246, %.loopexit299, %55, %61, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  ret i32 0
}

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

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

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }

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

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


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