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

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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i32, align 4
@c_b12 = external hidden global double, align 8
@c_b14 = external hidden global double, align 8

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

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

98:                                               ; preds = %94
  %99 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -1, ptr %99, align 4, !tbaa !9
  br label %146

100:                                              ; preds = %94, %14
  %101 = load ptr, ptr %16, align 8, !tbaa !5
  %102 = load i32, ptr %101, align 4, !tbaa !9
  %103 = icmp slt i32 %102, 0
  br i1 %103, label %104, label %106

104:                                              ; preds = %100
  %105 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -2, ptr %105, align 4, !tbaa !9
  br label %145

106:                                              ; preds = %100
  %107 = load ptr, ptr %17, align 8, !tbaa !5
  %108 = load i32, ptr %107, align 4, !tbaa !9
  %109 = icmp slt i32 %108, 0
  br i1 %109, label %110, label %112

110:                                              ; preds = %106
  %111 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -3, ptr %111, align 4, !tbaa !9
  br label %144

112:                                              ; preds = %106
  %113 = load ptr, ptr %21, align 8, !tbaa !5
  %114 = load i32, ptr %113, align 4, !tbaa !9
  %115 = load ptr, ptr %16, align 8, !tbaa !5
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = icmp sge i32 1, %116
  br i1 %117, label %118, label %119

118:                                              ; preds = %112
  br label %122

119:                                              ; preds = %112
  %120 = load ptr, ptr %16, align 8, !tbaa !5
  %121 = load i32, ptr %120, align 4, !tbaa !9
  br label %122

122:                                              ; preds = %119, %118
  %123 = phi i32 [ 1, %118 ], [ %121, %119 ]
  %124 = icmp slt i32 %114, %123
  br i1 %124, label %125, label %127

125:                                              ; preds = %122
  %126 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -7, ptr %126, align 4, !tbaa !9
  br label %143

127:                                              ; preds = %122
  %128 = load ptr, ptr %23, align 8, !tbaa !5
  %129 = load i32, ptr %128, align 4, !tbaa !9
  %130 = load ptr, ptr %16, align 8, !tbaa !5
  %131 = load i32, ptr %130, align 4, !tbaa !9
  %132 = icmp sge i32 1, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %127
  br label %137

134:                                              ; preds = %127
  %135 = load ptr, ptr %16, align 8, !tbaa !5
  %136 = load i32, ptr %135, align 4, !tbaa !9
  br label %137

137:                                              ; preds = %134, %133
  %138 = phi i32 [ 1, %133 ], [ %136, %134 ]
  %139 = icmp slt i32 %129, %138
  br i1 %139, label %140, label %142

140:                                              ; preds = %137
  %141 = load ptr, ptr %28, align 8, !tbaa !5
  store i32 -9, ptr %141, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %140, %137
  br label %143

143:                                              ; preds = %142, %125
  br label %144

144:                                              ; preds = %143, %110
  br label %145

145:                                              ; preds = %144, %104
  br label %146

146:                                              ; preds = %145, %98
  %147 = load ptr, ptr %28, align 8, !tbaa !5
  %148 = load i32, ptr %147, align 4, !tbaa !9
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %150, label %155

150:                                              ; preds = %146
  %151 = load ptr, ptr %28, align 8, !tbaa !5
  %152 = load i32, ptr %151, align 4, !tbaa !9
  %153 = sub nsw i32 0, %152
  store i32 %153, ptr %33, align 4, !tbaa !9
  %154 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %33, i32 noundef 6)
  store i32 1, ptr %56, align 4
  br label %952

155:                                              ; preds = %146
  %156 = load ptr, ptr %16, align 8, !tbaa !5
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %163, label %159

159:                                              ; preds = %155
  %160 = load ptr, ptr %17, align 8, !tbaa !5
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = icmp eq i32 %161, 0
  br i1 %162, label %163, label %183

163:                                              ; preds = %159, %155
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  %165 = load i32, ptr %164, align 4, !tbaa !9
  store i32 %165, ptr %33, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %166

166:                                              ; preds = %179, %163
  %167 = load i32, ptr %43, align 4, !tbaa !9
  %168 = load i32, ptr %33, align 4, !tbaa !9
  %169 = icmp sle i32 %167, %168
  br i1 %169, label %170, label %182

170:                                              ; preds = %166
  %171 = load ptr, ptr %24, align 8, !tbaa !5
  %172 = load i32, ptr %43, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds double, ptr %171, i64 %173
  store double 0.000000e+00, ptr %174, align 8, !tbaa !11
  %175 = load ptr, ptr %25, align 8, !tbaa !5
  %176 = load i32, ptr %43, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %175, i64 %177
  store double 0.000000e+00, ptr %178, align 8, !tbaa !11
  br label %179

179:                                              ; preds = %170
  %180 = load i32, ptr %43, align 4, !tbaa !9
  %181 = add nsw i32 %180, 1
  store i32 %181, ptr %43, align 4, !tbaa !9
  br label %166, !llvm.loop !13

182:                                              ; preds = %166
  store i32 1, ptr %56, align 4
  br label %952

183:                                              ; preds = %159
  %184 = load ptr, ptr %16, align 8, !tbaa !5
  %185 = load i32, ptr %184, align 4, !tbaa !9
  %186 = add nsw i32 %185, 1
  store i32 %186, ptr %52, align 4, !tbaa !9
  %187 = call double @dlamch_(ptr noundef @.str.3)
  store double %187, ptr %55, align 8, !tbaa !11
  %188 = call double @dlamch_(ptr noundef @.str.4)
  store double %188, ptr %53, align 8, !tbaa !11
  %189 = load i32, ptr %52, align 4, !tbaa !9
  %190 = sitofp i32 %189 to double
  %191 = load double, ptr %53, align 8, !tbaa !11
  %192 = fmul double %190, %191
  store double %192, ptr %40, align 8, !tbaa !11
  %193 = load double, ptr %40, align 8, !tbaa !11
  %194 = load double, ptr %55, align 8, !tbaa !11
  %195 = fdiv double %193, %194
  store double %195, ptr %41, align 8, !tbaa !11
  %196 = load ptr, ptr %17, align 8, !tbaa !5
  %197 = load i32, ptr %196, align 4, !tbaa !9
  store i32 %197, ptr %33, align 4, !tbaa !9
  store i32 1, ptr %43, align 4, !tbaa !9
  br label %198

198:                                              ; preds = %948, %183
  %199 = load i32, ptr %43, align 4, !tbaa !9
  %200 = load i32, ptr %33, align 4, !tbaa !9
  %201 = icmp sle i32 %199, %200
  br i1 %201, label %202, label %951

202:                                              ; preds = %198
  store i32 1, ptr %47, align 4, !tbaa !9
  store double 3.000000e+00, ptr %54, align 8, !tbaa !11
  br label %203

203:                                              ; preds = %655, %202
  %204 = load ptr, ptr %16, align 8, !tbaa !5
  %205 = load ptr, ptr %20, align 8, !tbaa !5
  %206 = load i32, ptr %43, align 4, !tbaa !9
  %207 = load i32, ptr %29, align 4, !tbaa !9
  %208 = mul nsw i32 %206, %207
  %209 = add nsw i32 %208, 1
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds double, ptr %205, i64 %210
  %212 = load ptr, ptr %26, align 8, !tbaa !5
  %213 = load ptr, ptr %16, align 8, !tbaa !5
  %214 = load i32, ptr %213, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds double, ptr %212, i64 %216
  call void @dcopy_(ptr noundef %204, ptr noundef %211, ptr noundef @c__1, ptr noundef %217, ptr noundef @c__1)
  %218 = load ptr, ptr %15, align 8, !tbaa !5
  %219 = load ptr, ptr %16, align 8, !tbaa !5
  %220 = load ptr, ptr %18, align 8, !tbaa !5
  %221 = getelementptr inbounds double, ptr %220, i64 1
  %222 = load ptr, ptr %22, align 8, !tbaa !5
  %223 = load i32, ptr %43, align 4, !tbaa !9
  %224 = load i32, ptr %31, align 4, !tbaa !9
  %225 = mul nsw i32 %223, %224
  %226 = add nsw i32 %225, 1
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds double, ptr %222, i64 %227
  %229 = load ptr, ptr %26, align 8, !tbaa !5
  %230 = load ptr, ptr %16, align 8, !tbaa !5
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = add nsw i32 %231, 1
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds double, ptr %229, i64 %233
  call void @dspmv_(ptr noundef %218, ptr noundef %219, ptr noundef @c_b12, ptr noundef %221, ptr noundef %228, ptr noundef @c__1, ptr noundef @c_b14, ptr noundef %234, ptr noundef @c__1)
  %235 = load ptr, ptr %16, align 8, !tbaa !5
  %236 = load i32, ptr %235, align 4, !tbaa !9
  store i32 %236, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %237

237:                                              ; preds = %264, %203
  %238 = load i32, ptr %42, align 4, !tbaa !9
  %239 = load i32, ptr %34, align 4, !tbaa !9
  %240 = icmp sle i32 %238, %239
  br i1 %240, label %241, label %267

241:                                              ; preds = %237
  %242 = load ptr, ptr %20, align 8, !tbaa !5
  %243 = load i32, ptr %42, align 4, !tbaa !9
  %244 = load i32, ptr %43, align 4, !tbaa !9
  %245 = load i32, ptr %29, align 4, !tbaa !9
  %246 = mul nsw i32 %244, %245
  %247 = add nsw i32 %243, %246
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds double, ptr %242, i64 %248
  %250 = load double, ptr %249, align 8, !tbaa !11
  store double %250, ptr %36, align 8, !tbaa !11
  %251 = load double, ptr %36, align 8, !tbaa !11
  %252 = fcmp oge double %251, 0.000000e+00
  br i1 %252, label %253, label %255

253:                                              ; preds = %241
  %254 = load double, ptr %36, align 8, !tbaa !11
  br label %258

255:                                              ; preds = %241
  %256 = load double, ptr %36, align 8, !tbaa !11
  %257 = fneg double %256
  br label %258

258:                                              ; preds = %255, %253
  %259 = phi double [ %254, %253 ], [ %257, %255 ]
  %260 = load ptr, ptr %26, align 8, !tbaa !5
  %261 = load i32, ptr %42, align 4, !tbaa !9
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds double, ptr %260, i64 %262
  store double %259, ptr %263, align 8, !tbaa !11
  br label %264

264:                                              ; preds = %258
  %265 = load i32, ptr %42, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %42, align 4, !tbaa !9
  br label %237, !llvm.loop !15

267:                                              ; preds = %237
  store i32 1, ptr %50, align 4, !tbaa !9
  %268 = load i32, ptr %48, align 4, !tbaa !9
  %269 = icmp ne i32 %268, 0
  br i1 %269, label %270, label %402

270:                                              ; preds = %267
  %271 = load ptr, ptr %16, align 8, !tbaa !5
  %272 = load i32, ptr %271, align 4, !tbaa !9
  store i32 %272, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %398, %270
  %274 = load i32, ptr %44, align 4, !tbaa !9
  %275 = load i32, ptr %34, align 4, !tbaa !9
  %276 = icmp sle i32 %274, %275
  br i1 %276, label %277, label %401

277:                                              ; preds = %273
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %278 = load ptr, ptr %22, align 8, !tbaa !5
  %279 = load i32, ptr %44, align 4, !tbaa !9
  %280 = load i32, ptr %43, align 4, !tbaa !9
  %281 = load i32, ptr %31, align 4, !tbaa !9
  %282 = mul nsw i32 %280, %281
  %283 = add nsw i32 %279, %282
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds double, ptr %278, i64 %284
  %286 = load double, ptr %285, align 8, !tbaa !11
  store double %286, ptr %36, align 8, !tbaa !11
  %287 = load double, ptr %36, align 8, !tbaa !11
  %288 = fcmp oge double %287, 0.000000e+00
  br i1 %288, label %289, label %291

289:                                              ; preds = %277
  %290 = load double, ptr %36, align 8, !tbaa !11
  br label %294

291:                                              ; preds = %277
  %292 = load double, ptr %36, align 8, !tbaa !11
  %293 = fneg double %292
  br label %294

294:                                              ; preds = %291, %289
  %295 = phi double [ %290, %289 ], [ %293, %291 ]
  store double %295, ptr %51, align 8, !tbaa !11
  %296 = load i32, ptr %50, align 4, !tbaa !9
  store i32 %296, ptr %49, align 4, !tbaa !9
  %297 = load i32, ptr %44, align 4, !tbaa !9
  %298 = sub nsw i32 %297, 1
  store i32 %298, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %361, %294
  %300 = load i32, ptr %42, align 4, !tbaa !9
  %301 = load i32, ptr %35, align 4, !tbaa !9
  %302 = icmp sle i32 %300, %301
  br i1 %302, label %303, label %364

303:                                              ; preds = %299
  %304 = load ptr, ptr %18, align 8, !tbaa !5
  %305 = load i32, ptr %49, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds double, ptr %304, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !11
  store double %308, ptr %36, align 8, !tbaa !11
  %309 = load double, ptr %36, align 8, !tbaa !11
  %310 = fcmp oge double %309, 0.000000e+00
  br i1 %310, label %311, label %313

311:                                              ; preds = %303
  %312 = load double, ptr %36, align 8, !tbaa !11
  br label %316

313:                                              ; preds = %303
  %314 = load double, ptr %36, align 8, !tbaa !11
  %315 = fneg double %314
  br label %316

316:                                              ; preds = %313, %311
  %317 = phi double [ %312, %311 ], [ %315, %313 ]
  %318 = load double, ptr %51, align 8, !tbaa !11
  %319 = load ptr, ptr %26, align 8, !tbaa !5
  %320 = load i32, ptr %42, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds double, ptr %319, i64 %321
  %323 = load double, ptr %322, align 8, !tbaa !11
  %324 = call double @llvm.fmuladd.f64(double %317, double %318, double %323)
  store double %324, ptr %322, align 8, !tbaa !11
  %325 = load ptr, ptr %18, align 8, !tbaa !5
  %326 = load i32, ptr %49, align 4, !tbaa !9
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds double, ptr %325, i64 %327
  %329 = load double, ptr %328, align 8, !tbaa !11
  store double %329, ptr %36, align 8, !tbaa !11
  %330 = load double, ptr %36, align 8, !tbaa !11
  %331 = fcmp oge double %330, 0.000000e+00
  br i1 %331, label %332, label %334

332:                                              ; preds = %316
  %333 = load double, ptr %36, align 8, !tbaa !11
  br label %337

334:                                              ; preds = %316
  %335 = load double, ptr %36, align 8, !tbaa !11
  %336 = fneg double %335
  br label %337

337:                                              ; preds = %334, %332
  %338 = phi double [ %333, %332 ], [ %336, %334 ]
  %339 = load ptr, ptr %22, align 8, !tbaa !5
  %340 = load i32, ptr %42, align 4, !tbaa !9
  %341 = load i32, ptr %43, align 4, !tbaa !9
  %342 = load i32, ptr %31, align 4, !tbaa !9
  %343 = mul nsw i32 %341, %342
  %344 = add nsw i32 %340, %343
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds double, ptr %339, i64 %345
  %347 = load double, ptr %346, align 8, !tbaa !11
  store double %347, ptr %37, align 8, !tbaa !11
  %348 = load double, ptr %37, align 8, !tbaa !11
  %349 = fcmp oge double %348, 0.000000e+00
  br i1 %349, label %350, label %352

350:                                              ; preds = %337
  %351 = load double, ptr %37, align 8, !tbaa !11
  br label %355

352:                                              ; preds = %337
  %353 = load double, ptr %37, align 8, !tbaa !11
  %354 = fneg double %353
  br label %355

355:                                              ; preds = %352, %350
  %356 = phi double [ %351, %350 ], [ %354, %352 ]
  %357 = load double, ptr %45, align 8, !tbaa !11
  %358 = call double @llvm.fmuladd.f64(double %338, double %356, double %357)
  store double %358, ptr %45, align 8, !tbaa !11
  %359 = load i32, ptr %49, align 4, !tbaa !9
  %360 = add nsw i32 %359, 1
  store i32 %360, ptr %49, align 4, !tbaa !9
  br label %361

361:                                              ; preds = %355
  %362 = load i32, ptr %42, align 4, !tbaa !9
  %363 = add nsw i32 %362, 1
  store i32 %363, ptr %42, align 4, !tbaa !9
  br label %299, !llvm.loop !16

364:                                              ; preds = %299
  %365 = load ptr, ptr %26, align 8, !tbaa !5
  %366 = load i32, ptr %44, align 4, !tbaa !9
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds double, ptr %365, i64 %367
  %369 = load double, ptr %368, align 8, !tbaa !11
  %370 = load ptr, ptr %18, align 8, !tbaa !5
  %371 = load i32, ptr %50, align 4, !tbaa !9
  %372 = load i32, ptr %44, align 4, !tbaa !9
  %373 = add nsw i32 %371, %372
  %374 = sub nsw i32 %373, 1
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds double, ptr %370, i64 %375
  %377 = load double, ptr %376, align 8, !tbaa !11
  store double %377, ptr %36, align 8, !tbaa !11
  %378 = load double, ptr %36, align 8, !tbaa !11
  %379 = fcmp oge double %378, 0.000000e+00
  br i1 %379, label %380, label %382

380:                                              ; preds = %364
  %381 = load double, ptr %36, align 8, !tbaa !11
  br label %385

382:                                              ; preds = %364
  %383 = load double, ptr %36, align 8, !tbaa !11
  %384 = fneg double %383
  br label %385

385:                                              ; preds = %382, %380
  %386 = phi double [ %381, %380 ], [ %384, %382 ]
  %387 = load double, ptr %51, align 8, !tbaa !11
  %388 = call double @llvm.fmuladd.f64(double %386, double %387, double %369)
  %389 = load double, ptr %45, align 8, !tbaa !11
  %390 = fadd double %388, %389
  %391 = load ptr, ptr %26, align 8, !tbaa !5
  %392 = load i32, ptr %44, align 4, !tbaa !9
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds double, ptr %391, i64 %393
  store double %390, ptr %394, align 8, !tbaa !11
  %395 = load i32, ptr %44, align 4, !tbaa !9
  %396 = load i32, ptr %50, align 4, !tbaa !9
  %397 = add nsw i32 %396, %395
  store i32 %397, ptr %50, align 4, !tbaa !9
  br label %398

398:                                              ; preds = %385
  %399 = load i32, ptr %44, align 4, !tbaa !9
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %44, align 4, !tbaa !9
  br label %273, !llvm.loop !17

401:                                              ; preds = %273
  br label %539

402:                                              ; preds = %267
  %403 = load ptr, ptr %16, align 8, !tbaa !5
  %404 = load i32, ptr %403, align 4, !tbaa !9
  store i32 %404, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %405

405:                                              ; preds = %535, %402
  %406 = load i32, ptr %44, align 4, !tbaa !9
  %407 = load i32, ptr %34, align 4, !tbaa !9
  %408 = icmp sle i32 %406, %407
  br i1 %408, label %409, label %538

409:                                              ; preds = %405
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %410 = load ptr, ptr %22, align 8, !tbaa !5
  %411 = load i32, ptr %44, align 4, !tbaa !9
  %412 = load i32, ptr %43, align 4, !tbaa !9
  %413 = load i32, ptr %31, align 4, !tbaa !9
  %414 = mul nsw i32 %412, %413
  %415 = add nsw i32 %411, %414
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds double, ptr %410, i64 %416
  %418 = load double, ptr %417, align 8, !tbaa !11
  store double %418, ptr %36, align 8, !tbaa !11
  %419 = load double, ptr %36, align 8, !tbaa !11
  %420 = fcmp oge double %419, 0.000000e+00
  br i1 %420, label %421, label %423

421:                                              ; preds = %409
  %422 = load double, ptr %36, align 8, !tbaa !11
  br label %426

423:                                              ; preds = %409
  %424 = load double, ptr %36, align 8, !tbaa !11
  %425 = fneg double %424
  br label %426

426:                                              ; preds = %423, %421
  %427 = phi double [ %422, %421 ], [ %425, %423 ]
  store double %427, ptr %51, align 8, !tbaa !11
  %428 = load ptr, ptr %18, align 8, !tbaa !5
  %429 = load i32, ptr %50, align 4, !tbaa !9
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds double, ptr %428, i64 %430
  %432 = load double, ptr %431, align 8, !tbaa !11
  store double %432, ptr %36, align 8, !tbaa !11
  %433 = load double, ptr %36, align 8, !tbaa !11
  %434 = fcmp oge double %433, 0.000000e+00
  br i1 %434, label %435, label %437

435:                                              ; preds = %426
  %436 = load double, ptr %36, align 8, !tbaa !11
  br label %440

437:                                              ; preds = %426
  %438 = load double, ptr %36, align 8, !tbaa !11
  %439 = fneg double %438
  br label %440

440:                                              ; preds = %437, %435
  %441 = phi double [ %436, %435 ], [ %439, %437 ]
  %442 = load double, ptr %51, align 8, !tbaa !11
  %443 = load ptr, ptr %26, align 8, !tbaa !5
  %444 = load i32, ptr %44, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds double, ptr %443, i64 %445
  %447 = load double, ptr %446, align 8, !tbaa !11
  %448 = call double @llvm.fmuladd.f64(double %441, double %442, double %447)
  store double %448, ptr %446, align 8, !tbaa !11
  %449 = load i32, ptr %50, align 4, !tbaa !9
  %450 = add nsw i32 %449, 1
  store i32 %450, ptr %49, align 4, !tbaa !9
  %451 = load ptr, ptr %16, align 8, !tbaa !5
  %452 = load i32, ptr %451, align 4, !tbaa !9
  store i32 %452, ptr %35, align 4, !tbaa !9
  %453 = load i32, ptr %44, align 4, !tbaa !9
  %454 = add nsw i32 %453, 1
  store i32 %454, ptr %42, align 4, !tbaa !9
  br label %455

455:                                              ; preds = %517, %440
  %456 = load i32, ptr %42, align 4, !tbaa !9
  %457 = load i32, ptr %35, align 4, !tbaa !9
  %458 = icmp sle i32 %456, %457
  br i1 %458, label %459, label %520

459:                                              ; preds = %455
  %460 = load ptr, ptr %18, align 8, !tbaa !5
  %461 = load i32, ptr %49, align 4, !tbaa !9
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds double, ptr %460, i64 %462
  %464 = load double, ptr %463, align 8, !tbaa !11
  store double %464, ptr %36, align 8, !tbaa !11
  %465 = load double, ptr %36, align 8, !tbaa !11
  %466 = fcmp oge double %465, 0.000000e+00
  br i1 %466, label %467, label %469

467:                                              ; preds = %459
  %468 = load double, ptr %36, align 8, !tbaa !11
  br label %472

469:                                              ; preds = %459
  %470 = load double, ptr %36, align 8, !tbaa !11
  %471 = fneg double %470
  br label %472

472:                                              ; preds = %469, %467
  %473 = phi double [ %468, %467 ], [ %471, %469 ]
  %474 = load double, ptr %51, align 8, !tbaa !11
  %475 = load ptr, ptr %26, align 8, !tbaa !5
  %476 = load i32, ptr %42, align 4, !tbaa !9
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds double, ptr %475, i64 %477
  %479 = load double, ptr %478, align 8, !tbaa !11
  %480 = call double @llvm.fmuladd.f64(double %473, double %474, double %479)
  store double %480, ptr %478, align 8, !tbaa !11
  %481 = load ptr, ptr %18, align 8, !tbaa !5
  %482 = load i32, ptr %49, align 4, !tbaa !9
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds double, ptr %481, i64 %483
  %485 = load double, ptr %484, align 8, !tbaa !11
  store double %485, ptr %36, align 8, !tbaa !11
  %486 = load double, ptr %36, align 8, !tbaa !11
  %487 = fcmp oge double %486, 0.000000e+00
  br i1 %487, label %488, label %490

488:                                              ; preds = %472
  %489 = load double, ptr %36, align 8, !tbaa !11
  br label %493

490:                                              ; preds = %472
  %491 = load double, ptr %36, align 8, !tbaa !11
  %492 = fneg double %491
  br label %493

493:                                              ; preds = %490, %488
  %494 = phi double [ %489, %488 ], [ %492, %490 ]
  %495 = load ptr, ptr %22, align 8, !tbaa !5
  %496 = load i32, ptr %42, align 4, !tbaa !9
  %497 = load i32, ptr %43, align 4, !tbaa !9
  %498 = load i32, ptr %31, align 4, !tbaa !9
  %499 = mul nsw i32 %497, %498
  %500 = add nsw i32 %496, %499
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds double, ptr %495, i64 %501
  %503 = load double, ptr %502, align 8, !tbaa !11
  store double %503, ptr %37, align 8, !tbaa !11
  %504 = load double, ptr %37, align 8, !tbaa !11
  %505 = fcmp oge double %504, 0.000000e+00
  br i1 %505, label %506, label %508

506:                                              ; preds = %493
  %507 = load double, ptr %37, align 8, !tbaa !11
  br label %511

508:                                              ; preds = %493
  %509 = load double, ptr %37, align 8, !tbaa !11
  %510 = fneg double %509
  br label %511

511:                                              ; preds = %508, %506
  %512 = phi double [ %507, %506 ], [ %510, %508 ]
  %513 = load double, ptr %45, align 8, !tbaa !11
  %514 = call double @llvm.fmuladd.f64(double %494, double %512, double %513)
  store double %514, ptr %45, align 8, !tbaa !11
  %515 = load i32, ptr %49, align 4, !tbaa !9
  %516 = add nsw i32 %515, 1
  store i32 %516, ptr %49, align 4, !tbaa !9
  br label %517

517:                                              ; preds = %511
  %518 = load i32, ptr %42, align 4, !tbaa !9
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr %42, align 4, !tbaa !9
  br label %455, !llvm.loop !18

520:                                              ; preds = %455
  %521 = load double, ptr %45, align 8, !tbaa !11
  %522 = load ptr, ptr %26, align 8, !tbaa !5
  %523 = load i32, ptr %44, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds double, ptr %522, i64 %524
  %526 = load double, ptr %525, align 8, !tbaa !11
  %527 = fadd double %526, %521
  store double %527, ptr %525, align 8, !tbaa !11
  %528 = load ptr, ptr %16, align 8, !tbaa !5
  %529 = load i32, ptr %528, align 4, !tbaa !9
  %530 = load i32, ptr %44, align 4, !tbaa !9
  %531 = sub nsw i32 %529, %530
  %532 = add nsw i32 %531, 1
  %533 = load i32, ptr %50, align 4, !tbaa !9
  %534 = add nsw i32 %533, %532
  store i32 %534, ptr %50, align 4, !tbaa !9
  br label %535

535:                                              ; preds = %520
  %536 = load i32, ptr %44, align 4, !tbaa !9
  %537 = add nsw i32 %536, 1
  store i32 %537, ptr %44, align 4, !tbaa !9
  br label %405, !llvm.loop !19

538:                                              ; preds = %405
  br label %539

539:                                              ; preds = %538, %401
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %540 = load ptr, ptr %16, align 8, !tbaa !5
  %541 = load i32, ptr %540, align 4, !tbaa !9
  store i32 %541, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %542

542:                                              ; preds = %627, %539
  %543 = load i32, ptr %42, align 4, !tbaa !9
  %544 = load i32, ptr %34, align 4, !tbaa !9
  %545 = icmp sle i32 %543, %544
  br i1 %545, label %546, label %630

546:                                              ; preds = %542
  %547 = load ptr, ptr %26, align 8, !tbaa !5
  %548 = load i32, ptr %42, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds double, ptr %547, i64 %549
  %551 = load double, ptr %550, align 8, !tbaa !11
  %552 = load double, ptr %41, align 8, !tbaa !11
  %553 = fcmp ogt double %551, %552
  br i1 %553, label %554, label %588

554:                                              ; preds = %546
  %555 = load double, ptr %45, align 8, !tbaa !11
  store double %555, ptr %37, align 8, !tbaa !11
  %556 = load ptr, ptr %26, align 8, !tbaa !5
  %557 = load ptr, ptr %16, align 8, !tbaa !5
  %558 = load i32, ptr %557, align 4, !tbaa !9
  %559 = load i32, ptr %42, align 4, !tbaa !9
  %560 = add nsw i32 %558, %559
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds double, ptr %556, i64 %561
  %563 = load double, ptr %562, align 8, !tbaa !11
  store double %563, ptr %36, align 8, !tbaa !11
  %564 = load double, ptr %36, align 8, !tbaa !11
  %565 = fcmp oge double %564, 0.000000e+00
  br i1 %565, label %566, label %568

566:                                              ; preds = %554
  %567 = load double, ptr %36, align 8, !tbaa !11
  br label %571

568:                                              ; preds = %554
  %569 = load double, ptr %36, align 8, !tbaa !11
  %570 = fneg double %569
  br label %571

571:                                              ; preds = %568, %566
  %572 = phi double [ %567, %566 ], [ %570, %568 ]
  %573 = load ptr, ptr %26, align 8, !tbaa !5
  %574 = load i32, ptr %42, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds double, ptr %573, i64 %575
  %577 = load double, ptr %576, align 8, !tbaa !11
  %578 = fdiv double %572, %577
  store double %578, ptr %38, align 8, !tbaa !11
  %579 = load double, ptr %37, align 8, !tbaa !11
  %580 = load double, ptr %38, align 8, !tbaa !11
  %581 = fcmp oge double %579, %580
  br i1 %581, label %582, label %584

582:                                              ; preds = %571
  %583 = load double, ptr %37, align 8, !tbaa !11
  br label %586

584:                                              ; preds = %571
  %585 = load double, ptr %38, align 8, !tbaa !11
  br label %586

586:                                              ; preds = %584, %582
  %587 = phi double [ %583, %582 ], [ %585, %584 ]
  store double %587, ptr %45, align 8, !tbaa !11
  br label %626

588:                                              ; preds = %546
  %589 = load double, ptr %45, align 8, !tbaa !11
  store double %589, ptr %37, align 8, !tbaa !11
  %590 = load ptr, ptr %26, align 8, !tbaa !5
  %591 = load ptr, ptr %16, align 8, !tbaa !5
  %592 = load i32, ptr %591, align 4, !tbaa !9
  %593 = load i32, ptr %42, align 4, !tbaa !9
  %594 = add nsw i32 %592, %593
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds double, ptr %590, i64 %595
  %597 = load double, ptr %596, align 8, !tbaa !11
  store double %597, ptr %36, align 8, !tbaa !11
  %598 = load double, ptr %36, align 8, !tbaa !11
  %599 = fcmp oge double %598, 0.000000e+00
  br i1 %599, label %600, label %602

600:                                              ; preds = %588
  %601 = load double, ptr %36, align 8, !tbaa !11
  br label %605

602:                                              ; preds = %588
  %603 = load double, ptr %36, align 8, !tbaa !11
  %604 = fneg double %603
  br label %605

605:                                              ; preds = %602, %600
  %606 = phi double [ %601, %600 ], [ %604, %602 ]
  %607 = load double, ptr %40, align 8, !tbaa !11
  %608 = fadd double %606, %607
  %609 = load ptr, ptr %26, align 8, !tbaa !5
  %610 = load i32, ptr %42, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds double, ptr %609, i64 %611
  %613 = load double, ptr %612, align 8, !tbaa !11
  %614 = load double, ptr %40, align 8, !tbaa !11
  %615 = fadd double %613, %614
  %616 = fdiv double %608, %615
  store double %616, ptr %38, align 8, !tbaa !11
  %617 = load double, ptr %37, align 8, !tbaa !11
  %618 = load double, ptr %38, align 8, !tbaa !11
  %619 = fcmp oge double %617, %618
  br i1 %619, label %620, label %622

620:                                              ; preds = %605
  %621 = load double, ptr %37, align 8, !tbaa !11
  br label %624

622:                                              ; preds = %605
  %623 = load double, ptr %38, align 8, !tbaa !11
  br label %624

624:                                              ; preds = %622, %620
  %625 = phi double [ %621, %620 ], [ %623, %622 ]
  store double %625, ptr %45, align 8, !tbaa !11
  br label %626

626:                                              ; preds = %624, %586
  br label %627

627:                                              ; preds = %626
  %628 = load i32, ptr %42, align 4, !tbaa !9
  %629 = add nsw i32 %628, 1
  store i32 %629, ptr %42, align 4, !tbaa !9
  br label %542, !llvm.loop !20

630:                                              ; preds = %542
  %631 = load double, ptr %45, align 8, !tbaa !11
  %632 = load ptr, ptr %25, align 8, !tbaa !5
  %633 = load i32, ptr %43, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds double, ptr %632, i64 %634
  store double %631, ptr %635, align 8, !tbaa !11
  %636 = load ptr, ptr %25, align 8, !tbaa !5
  %637 = load i32, ptr %43, align 4, !tbaa !9
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds double, ptr %636, i64 %638
  %640 = load double, ptr %639, align 8, !tbaa !11
  %641 = load double, ptr %55, align 8, !tbaa !11
  %642 = fcmp ogt double %640, %641
  br i1 %642, label %643, label %689

643:                                              ; preds = %630
  %644 = load ptr, ptr %25, align 8, !tbaa !5
  %645 = load i32, ptr %43, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds double, ptr %644, i64 %646
  %648 = load double, ptr %647, align 8, !tbaa !11
  %649 = fmul double %648, 2.000000e+00
  %650 = load double, ptr %54, align 8, !tbaa !11
  %651 = fcmp ole double %649, %650
  br i1 %651, label %652, label %689

652:                                              ; preds = %643
  %653 = load i32, ptr %47, align 4, !tbaa !9
  %654 = icmp sle i32 %653, 5
  br i1 %654, label %655, label %689

655:                                              ; preds = %652
  %656 = load ptr, ptr %15, align 8, !tbaa !5
  %657 = load ptr, ptr %16, align 8, !tbaa !5
  %658 = load ptr, ptr %19, align 8, !tbaa !5
  %659 = getelementptr inbounds double, ptr %658, i64 1
  %660 = load ptr, ptr %26, align 8, !tbaa !5
  %661 = load ptr, ptr %16, align 8, !tbaa !5
  %662 = load i32, ptr %661, align 4, !tbaa !9
  %663 = add nsw i32 %662, 1
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds double, ptr %660, i64 %664
  %666 = load ptr, ptr %16, align 8, !tbaa !5
  %667 = load ptr, ptr %28, align 8, !tbaa !5
  call void @dpptrs_(ptr noundef %656, ptr noundef %657, ptr noundef @c__1, ptr noundef %659, ptr noundef %665, ptr noundef %666, ptr noundef %667)
  %668 = load ptr, ptr %16, align 8, !tbaa !5
  %669 = load ptr, ptr %26, align 8, !tbaa !5
  %670 = load ptr, ptr %16, align 8, !tbaa !5
  %671 = load i32, ptr %670, align 4, !tbaa !9
  %672 = add nsw i32 %671, 1
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds double, ptr %669, i64 %673
  %675 = load ptr, ptr %22, align 8, !tbaa !5
  %676 = load i32, ptr %43, align 4, !tbaa !9
  %677 = load i32, ptr %31, align 4, !tbaa !9
  %678 = mul nsw i32 %676, %677
  %679 = add nsw i32 %678, 1
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds double, ptr %675, i64 %680
  call void @daxpy_(ptr noundef %668, ptr noundef @c_b14, ptr noundef %674, ptr noundef @c__1, ptr noundef %681, ptr noundef @c__1)
  %682 = load ptr, ptr %25, align 8, !tbaa !5
  %683 = load i32, ptr %43, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds double, ptr %682, i64 %684
  %686 = load double, ptr %685, align 8, !tbaa !11
  store double %686, ptr %54, align 8, !tbaa !11
  %687 = load i32, ptr %47, align 4, !tbaa !9
  %688 = add nsw i32 %687, 1
  store i32 %688, ptr %47, align 4, !tbaa !9
  br label %203

689:                                              ; preds = %652, %643, %630
  %690 = load ptr, ptr %16, align 8, !tbaa !5
  %691 = load i32, ptr %690, align 4, !tbaa !9
  store i32 %691, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %692

692:                                              ; preds = %771, %689
  %693 = load i32, ptr %42, align 4, !tbaa !9
  %694 = load i32, ptr %34, align 4, !tbaa !9
  %695 = icmp sle i32 %693, %694
  br i1 %695, label %696, label %774

696:                                              ; preds = %692
  %697 = load ptr, ptr %26, align 8, !tbaa !5
  %698 = load i32, ptr %42, align 4, !tbaa !9
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds double, ptr %697, i64 %699
  %701 = load double, ptr %700, align 8, !tbaa !11
  %702 = load double, ptr %41, align 8, !tbaa !11
  %703 = fcmp ogt double %701, %702
  br i1 %703, label %704, label %736

704:                                              ; preds = %696
  %705 = load ptr, ptr %26, align 8, !tbaa !5
  %706 = load ptr, ptr %16, align 8, !tbaa !5
  %707 = load i32, ptr %706, align 4, !tbaa !9
  %708 = load i32, ptr %42, align 4, !tbaa !9
  %709 = add nsw i32 %707, %708
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds double, ptr %705, i64 %710
  %712 = load double, ptr %711, align 8, !tbaa !11
  store double %712, ptr %36, align 8, !tbaa !11
  %713 = load double, ptr %36, align 8, !tbaa !11
  %714 = fcmp oge double %713, 0.000000e+00
  br i1 %714, label %715, label %717

715:                                              ; preds = %704
  %716 = load double, ptr %36, align 8, !tbaa !11
  br label %720

717:                                              ; preds = %704
  %718 = load double, ptr %36, align 8, !tbaa !11
  %719 = fneg double %718
  br label %720

720:                                              ; preds = %717, %715
  %721 = phi double [ %716, %715 ], [ %719, %717 ]
  %722 = load i32, ptr %52, align 4, !tbaa !9
  %723 = sitofp i32 %722 to double
  %724 = load double, ptr %55, align 8, !tbaa !11
  %725 = fmul double %723, %724
  %726 = load ptr, ptr %26, align 8, !tbaa !5
  %727 = load i32, ptr %42, align 4, !tbaa !9
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds double, ptr %726, i64 %728
  %730 = load double, ptr %729, align 8, !tbaa !11
  %731 = call double @llvm.fmuladd.f64(double %725, double %730, double %721)
  %732 = load ptr, ptr %26, align 8, !tbaa !5
  %733 = load i32, ptr %42, align 4, !tbaa !9
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds double, ptr %732, i64 %734
  store double %731, ptr %735, align 8, !tbaa !11
  br label %770

736:                                              ; preds = %696
  %737 = load ptr, ptr %26, align 8, !tbaa !5
  %738 = load ptr, ptr %16, align 8, !tbaa !5
  %739 = load i32, ptr %738, align 4, !tbaa !9
  %740 = load i32, ptr %42, align 4, !tbaa !9
  %741 = add nsw i32 %739, %740
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds double, ptr %737, i64 %742
  %744 = load double, ptr %743, align 8, !tbaa !11
  store double %744, ptr %36, align 8, !tbaa !11
  %745 = load double, ptr %36, align 8, !tbaa !11
  %746 = fcmp oge double %745, 0.000000e+00
  br i1 %746, label %747, label %749

747:                                              ; preds = %736
  %748 = load double, ptr %36, align 8, !tbaa !11
  br label %752

749:                                              ; preds = %736
  %750 = load double, ptr %36, align 8, !tbaa !11
  %751 = fneg double %750
  br label %752

752:                                              ; preds = %749, %747
  %753 = phi double [ %748, %747 ], [ %751, %749 ]
  %754 = load i32, ptr %52, align 4, !tbaa !9
  %755 = sitofp i32 %754 to double
  %756 = load double, ptr %55, align 8, !tbaa !11
  %757 = fmul double %755, %756
  %758 = load ptr, ptr %26, align 8, !tbaa !5
  %759 = load i32, ptr %42, align 4, !tbaa !9
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds double, ptr %758, i64 %760
  %762 = load double, ptr %761, align 8, !tbaa !11
  %763 = call double @llvm.fmuladd.f64(double %757, double %762, double %753)
  %764 = load double, ptr %40, align 8, !tbaa !11
  %765 = fadd double %763, %764
  %766 = load ptr, ptr %26, align 8, !tbaa !5
  %767 = load i32, ptr %42, align 4, !tbaa !9
  %768 = sext i32 %767 to i64
  %769 = getelementptr inbounds double, ptr %766, i64 %768
  store double %765, ptr %769, align 8, !tbaa !11
  br label %770

770:                                              ; preds = %752, %720
  br label %771

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

774:                                              ; preds = %692
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %775

775:                                              ; preds = %896, %774
  %776 = load ptr, ptr %16, align 8, !tbaa !5
  %777 = load ptr, ptr %26, align 8, !tbaa !5
  %778 = load ptr, ptr %16, align 8, !tbaa !5
  %779 = load i32, ptr %778, align 4, !tbaa !9
  %780 = shl i32 %779, 1
  %781 = add nsw i32 %780, 1
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds double, ptr %777, i64 %782
  %784 = load ptr, ptr %26, align 8, !tbaa !5
  %785 = load ptr, ptr %16, align 8, !tbaa !5
  %786 = load i32, ptr %785, align 4, !tbaa !9
  %787 = add nsw i32 %786, 1
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds double, ptr %784, i64 %788
  %790 = load ptr, ptr %27, align 8, !tbaa !5
  %791 = getelementptr inbounds i32, ptr %790, i64 1
  %792 = load ptr, ptr %24, align 8, !tbaa !5
  %793 = load i32, ptr %43, align 4, !tbaa !9
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds double, ptr %792, i64 %794
  %796 = getelementptr inbounds [3 x i32], ptr %46, i64 0, i64 0
  call void @dlacn2_(ptr noundef %776, ptr noundef %783, ptr noundef %789, ptr noundef %791, ptr noundef %795, ptr noundef %39, ptr noundef %796)
  %797 = load i32, ptr %39, align 4, !tbaa !9
  %798 = icmp ne i32 %797, 0
  br i1 %798, label %799, label %897

799:                                              ; preds = %775
  %800 = load i32, ptr %39, align 4, !tbaa !9
  %801 = icmp eq i32 %800, 1
  br i1 %801, label %802, label %847

802:                                              ; preds = %799
  %803 = load ptr, ptr %15, align 8, !tbaa !5
  %804 = load ptr, ptr %16, align 8, !tbaa !5
  %805 = load ptr, ptr %19, align 8, !tbaa !5
  %806 = getelementptr inbounds double, ptr %805, i64 1
  %807 = load ptr, ptr %26, align 8, !tbaa !5
  %808 = load ptr, ptr %16, align 8, !tbaa !5
  %809 = load i32, ptr %808, align 4, !tbaa !9
  %810 = add nsw i32 %809, 1
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds double, ptr %807, i64 %811
  %813 = load ptr, ptr %16, align 8, !tbaa !5
  %814 = load ptr, ptr %28, align 8, !tbaa !5
  call void @dpptrs_(ptr noundef %803, ptr noundef %804, ptr noundef @c__1, ptr noundef %806, ptr noundef %812, ptr noundef %813, ptr noundef %814)
  %815 = load ptr, ptr %16, align 8, !tbaa !5
  %816 = load i32, ptr %815, align 4, !tbaa !9
  store i32 %816, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %817

817:                                              ; preds = %843, %802
  %818 = load i32, ptr %42, align 4, !tbaa !9
  %819 = load i32, ptr %34, align 4, !tbaa !9
  %820 = icmp sle i32 %818, %819
  br i1 %820, label %821, label %846

821:                                              ; preds = %817
  %822 = load ptr, ptr %26, align 8, !tbaa !5
  %823 = load i32, ptr %42, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds double, ptr %822, i64 %824
  %826 = load double, ptr %825, align 8, !tbaa !11
  %827 = load ptr, ptr %26, align 8, !tbaa !5
  %828 = load ptr, ptr %16, align 8, !tbaa !5
  %829 = load i32, ptr %828, align 4, !tbaa !9
  %830 = load i32, ptr %42, align 4, !tbaa !9
  %831 = add nsw i32 %829, %830
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds double, ptr %827, i64 %832
  %834 = load double, ptr %833, align 8, !tbaa !11
  %835 = fmul double %826, %834
  %836 = load ptr, ptr %26, align 8, !tbaa !5
  %837 = load ptr, ptr %16, align 8, !tbaa !5
  %838 = load i32, ptr %837, align 4, !tbaa !9
  %839 = load i32, ptr %42, align 4, !tbaa !9
  %840 = add nsw i32 %838, %839
  %841 = sext i32 %840 to i64
  %842 = getelementptr inbounds double, ptr %836, i64 %841
  store double %835, ptr %842, align 8, !tbaa !11
  br label %843

843:                                              ; preds = %821
  %844 = load i32, ptr %42, align 4, !tbaa !9
  %845 = add nsw i32 %844, 1
  store i32 %845, ptr %42, align 4, !tbaa !9
  br label %817, !llvm.loop !22

846:                                              ; preds = %817
  br label %896

847:                                              ; preds = %799
  %848 = load i32, ptr %39, align 4, !tbaa !9
  %849 = icmp eq i32 %848, 2
  br i1 %849, label %850, label %895

850:                                              ; preds = %847
  %851 = load ptr, ptr %16, align 8, !tbaa !5
  %852 = load i32, ptr %851, align 4, !tbaa !9
  store i32 %852, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %853

853:                                              ; preds = %879, %850
  %854 = load i32, ptr %42, align 4, !tbaa !9
  %855 = load i32, ptr %34, align 4, !tbaa !9
  %856 = icmp sle i32 %854, %855
  br i1 %856, label %857, label %882

857:                                              ; preds = %853
  %858 = load ptr, ptr %26, align 8, !tbaa !5
  %859 = load i32, ptr %42, align 4, !tbaa !9
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds double, ptr %858, i64 %860
  %862 = load double, ptr %861, align 8, !tbaa !11
  %863 = load ptr, ptr %26, align 8, !tbaa !5
  %864 = load ptr, ptr %16, align 8, !tbaa !5
  %865 = load i32, ptr %864, align 4, !tbaa !9
  %866 = load i32, ptr %42, align 4, !tbaa !9
  %867 = add nsw i32 %865, %866
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds double, ptr %863, i64 %868
  %870 = load double, ptr %869, align 8, !tbaa !11
  %871 = fmul double %862, %870
  %872 = load ptr, ptr %26, align 8, !tbaa !5
  %873 = load ptr, ptr %16, align 8, !tbaa !5
  %874 = load i32, ptr %873, align 4, !tbaa !9
  %875 = load i32, ptr %42, align 4, !tbaa !9
  %876 = add nsw i32 %874, %875
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds double, ptr %872, i64 %877
  store double %871, ptr %878, align 8, !tbaa !11
  br label %879

879:                                              ; preds = %857
  %880 = load i32, ptr %42, align 4, !tbaa !9
  %881 = add nsw i32 %880, 1
  store i32 %881, ptr %42, align 4, !tbaa !9
  br label %853, !llvm.loop !23

882:                                              ; preds = %853
  %883 = load ptr, ptr %15, align 8, !tbaa !5
  %884 = load ptr, ptr %16, align 8, !tbaa !5
  %885 = load ptr, ptr %19, align 8, !tbaa !5
  %886 = getelementptr inbounds double, ptr %885, i64 1
  %887 = load ptr, ptr %26, align 8, !tbaa !5
  %888 = load ptr, ptr %16, align 8, !tbaa !5
  %889 = load i32, ptr %888, align 4, !tbaa !9
  %890 = add nsw i32 %889, 1
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds double, ptr %887, i64 %891
  %893 = load ptr, ptr %16, align 8, !tbaa !5
  %894 = load ptr, ptr %28, align 8, !tbaa !5
  call void @dpptrs_(ptr noundef %883, ptr noundef %884, ptr noundef @c__1, ptr noundef %886, ptr noundef %892, ptr noundef %893, ptr noundef %894)
  br label %895

895:                                              ; preds = %882, %847
  br label %896

896:                                              ; preds = %895, %846
  br label %775

897:                                              ; preds = %775
  store double 0.000000e+00, ptr %54, align 8, !tbaa !11
  %898 = load ptr, ptr %16, align 8, !tbaa !5
  %899 = load i32, ptr %898, align 4, !tbaa !9
  store i32 %899, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %42, align 4, !tbaa !9
  br label %900

900:                                              ; preds = %933, %897
  %901 = load i32, ptr %42, align 4, !tbaa !9
  %902 = load i32, ptr %34, align 4, !tbaa !9
  %903 = icmp sle i32 %901, %902
  br i1 %903, label %904, label %936

904:                                              ; preds = %900
  %905 = load double, ptr %54, align 8, !tbaa !11
  store double %905, ptr %37, align 8, !tbaa !11
  %906 = load ptr, ptr %22, align 8, !tbaa !5
  %907 = load i32, ptr %42, align 4, !tbaa !9
  %908 = load i32, ptr %43, align 4, !tbaa !9
  %909 = load i32, ptr %31, align 4, !tbaa !9
  %910 = mul nsw i32 %908, %909
  %911 = add nsw i32 %907, %910
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds double, ptr %906, i64 %912
  %914 = load double, ptr %913, align 8, !tbaa !11
  store double %914, ptr %36, align 8, !tbaa !11
  %915 = load double, ptr %36, align 8, !tbaa !11
  %916 = fcmp oge double %915, 0.000000e+00
  br i1 %916, label %917, label %919

917:                                              ; preds = %904
  %918 = load double, ptr %36, align 8, !tbaa !11
  br label %922

919:                                              ; preds = %904
  %920 = load double, ptr %36, align 8, !tbaa !11
  %921 = fneg double %920
  br label %922

922:                                              ; preds = %919, %917
  %923 = phi double [ %918, %917 ], [ %921, %919 ]
  store double %923, ptr %38, align 8, !tbaa !11
  %924 = load double, ptr %37, align 8, !tbaa !11
  %925 = load double, ptr %38, align 8, !tbaa !11
  %926 = fcmp oge double %924, %925
  br i1 %926, label %927, label %929

927:                                              ; preds = %922
  %928 = load double, ptr %37, align 8, !tbaa !11
  br label %931

929:                                              ; preds = %922
  %930 = load double, ptr %38, align 8, !tbaa !11
  br label %931

931:                                              ; preds = %929, %927
  %932 = phi double [ %928, %927 ], [ %930, %929 ]
  store double %932, ptr %54, align 8, !tbaa !11
  br label %933

933:                                              ; preds = %931
  %934 = load i32, ptr %42, align 4, !tbaa !9
  %935 = add nsw i32 %934, 1
  store i32 %935, ptr %42, align 4, !tbaa !9
  br label %900, !llvm.loop !24

936:                                              ; preds = %900
  %937 = load double, ptr %54, align 8, !tbaa !11
  %938 = fcmp une double %937, 0.000000e+00
  br i1 %938, label %939, label %947

939:                                              ; preds = %936
  %940 = load double, ptr %54, align 8, !tbaa !11
  %941 = load ptr, ptr %24, align 8, !tbaa !5
  %942 = load i32, ptr %43, align 4, !tbaa !9
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds double, ptr %941, i64 %943
  %945 = load double, ptr %944, align 8, !tbaa !11
  %946 = fdiv double %945, %940
  store double %946, ptr %944, align 8, !tbaa !11
  br label %947

947:                                              ; preds = %939, %936
  br label %948

948:                                              ; preds = %947
  %949 = load i32, ptr %43, align 4, !tbaa !9
  %950 = add nsw i32 %949, 1
  store i32 %950, ptr %43, align 4, !tbaa !9
  br label %198, !llvm.loop !25

951:                                              ; preds = %198
  store i32 1, ptr %56, align 4
  br label %952

952:                                              ; preds = %951, %182, %150
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 12, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, 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 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  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 void @dcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dspmv_(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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

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

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

declare void @dlacn2_(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 = { 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 = !{!"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}
!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 [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i32, align 4
@c_b12 = external hidden global double, align 8
@c_b14 = external hidden global double, align 8

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

33:                                               ; preds = %14
  %34 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5
  %.not367 = icmp eq i32 %34, 0
  br i1 %.not367, label %.thread.sink.split, label %35

35:                                               ; preds = %33, %14
  %36 = load i32, ptr %1, align 4, !tbaa !5
  %37 = icmp slt i32 %36, 0
  br i1 %37, label %.thread.sink.split, label %38

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

41:                                               ; preds = %38
  %42 = load i32, ptr %6, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %36, i32 1)
  %43 = icmp slt i32 %42, %spec.select
  br i1 %43, label %.thread.sink.split, label %44

44:                                               ; preds = %41
  %45 = load i32, ptr %8, align 4, !tbaa !5
  %46 = icmp slt i32 %45, %spec.select
  br i1 %46, label %.thread.sink.split, label %47

47:                                               ; preds = %44
  %.pr = load i32, ptr %13, align 4, !tbaa !5
  %.not368 = icmp eq i32 %.pr, 0
  br i1 %.not368, label %51, label %.thread

.thread.sink.split:                               ; preds = %44, %41, %38, %35, %33
  %.sink = phi i32 [ -1, %33 ], [ -2, %35 ], [ -3, %38 ], [ -7, %41 ], [ -9, %44 ]
  store i32 %.sink, ptr %13, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %47
  %48 = phi i32 [ %.pr, %47 ], [ %.sink, %.thread.sink.split ]
  %49 = sub nsw i32 0, %48
  store i32 %49, ptr %19, align 4, !tbaa !5
  %50 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %19, i32 noundef 6) #5
  br label %.loopexit

51:                                               ; preds = %47
  %52 = icmp eq i32 %36, 0
  %.not381465 = icmp eq i32 %39, 0
  br i1 %52, label %54, label %53

53:                                               ; preds = %51
  br i1 %.not381465, label %.loopexit, label %77

54:                                               ; preds = %51
  br i1 %.not381465, label %.loopexit, label %.lr.ph468.preheader

.lr.ph468.preheader:                              ; preds = %54
  %55 = add nuw i32 %39, 1
  %wide.trip.count539 = zext i32 %55 to i64
  %56 = zext nneg i32 %39 to i64
  %min.iters.check636 = icmp ult i32 %39, 4
  %57 = sub i64 %16, %15
  %diff.check633 = icmp ult i64 %57, 32
  %or.cond647 = or i1 %min.iters.check636, %diff.check633
  br i1 %or.cond647, label %.lr.ph468.preheader649, label %vector.ph637

vector.ph637:                                     ; preds = %.lr.ph468.preheader
  %n.vec639 = and i64 %56, 2147483644
  %ind.end640 = or disjoint i64 %n.vec639, 1
  br label %vector.body642

vector.body642:                                   ; preds = %vector.body642, %vector.ph637
  %index643 = phi i64 [ 0, %vector.ph637 ], [ %index.next645, %vector.body642 ]
  %58 = getelementptr double, ptr %9, i64 %index643
  %59 = getelementptr inbounds i8, ptr %58, i64 16
  store <2 x double> zeroinitializer, ptr %58, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %59, align 8, !tbaa !9
  %60 = getelementptr double, ptr %10, i64 %index643
  %61 = getelementptr inbounds i8, ptr %60, i64 16
  store <2 x double> zeroinitializer, ptr %60, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %61, align 8, !tbaa !9
  %index.next645 = add nuw i64 %index643, 4
  %62 = icmp eq i64 %index.next645, %n.vec639
  br i1 %62, label %middle.block634, label %vector.body642, !llvm.loop !11

middle.block634:                                  ; preds = %vector.body642
  %cmp.n646 = icmp eq i64 %n.vec639, %56
  br i1 %cmp.n646, label %.loopexit, label %.lr.ph468.preheader649

.lr.ph468.preheader649:                           ; preds = %middle.block634, %.lr.ph468.preheader
  %indvars.iv536.ph = phi i64 [ 1, %.lr.ph468.preheader ], [ %ind.end640, %middle.block634 ]
  %63 = sub nsw i64 %wide.trip.count539, %indvars.iv536.ph
  %64 = zext nneg i32 %39 to i64
  %65 = sub nsw i64 %64, %indvars.iv536.ph
  %xtraiter667 = and i64 %63, 3
  %lcmp.mod668.not = icmp eq i64 %xtraiter667, 0
  br i1 %lcmp.mod668.not, label %.lr.ph468.prol.loopexit, label %.lr.ph468.prol

.lr.ph468.prol:                                   ; preds = %.lr.ph468.preheader649, %.lr.ph468.prol
  %indvars.iv536.prol = phi i64 [ %indvars.iv.next537.prol, %.lr.ph468.prol ], [ %indvars.iv536.ph, %.lr.ph468.preheader649 ]
  %prol.iter669 = phi i64 [ %prol.iter669.next, %.lr.ph468.prol ], [ 0, %.lr.ph468.preheader649 ]
  %66 = getelementptr inbounds double, ptr %29, i64 %indvars.iv536.prol
  store double 0.000000e+00, ptr %66, align 8, !tbaa !9
  %67 = getelementptr inbounds double, ptr %30, i64 %indvars.iv536.prol
  store double 0.000000e+00, ptr %67, align 8, !tbaa !9
  %indvars.iv.next537.prol = add nuw nsw i64 %indvars.iv536.prol, 1
  %prol.iter669.next = add i64 %prol.iter669, 1
  %prol.iter669.cmp.not = icmp eq i64 %prol.iter669.next, %xtraiter667
  br i1 %prol.iter669.cmp.not, label %.lr.ph468.prol.loopexit, label %.lr.ph468.prol, !llvm.loop !15

.lr.ph468.prol.loopexit:                          ; preds = %.lr.ph468.prol, %.lr.ph468.preheader649
  %indvars.iv536.unr = phi i64 [ %indvars.iv536.ph, %.lr.ph468.preheader649 ], [ %indvars.iv.next537.prol, %.lr.ph468.prol ]
  %68 = icmp ult i64 %65, 3
  br i1 %68, label %.loopexit, label %.lr.ph468

.lr.ph468:                                        ; preds = %.lr.ph468.prol.loopexit, %.lr.ph468
  %indvars.iv536 = phi i64 [ %indvars.iv.next537.3, %.lr.ph468 ], [ %indvars.iv536.unr, %.lr.ph468.prol.loopexit ]
  %69 = getelementptr inbounds double, ptr %29, i64 %indvars.iv536
  store double 0.000000e+00, ptr %69, align 8, !tbaa !9
  %70 = getelementptr inbounds double, ptr %30, i64 %indvars.iv536
  store double 0.000000e+00, ptr %70, align 8, !tbaa !9
  %71 = getelementptr double, ptr %9, i64 %indvars.iv536
  store double 0.000000e+00, ptr %71, align 8, !tbaa !9
  %72 = getelementptr double, ptr %10, i64 %indvars.iv536
  store double 0.000000e+00, ptr %72, align 8, !tbaa !9
  %indvars.iv.next537.1 = add nuw nsw i64 %indvars.iv536, 2
  %73 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next537.1
  store double 0.000000e+00, ptr %73, align 8, !tbaa !9
  %74 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next537.1
  store double 0.000000e+00, ptr %74, align 8, !tbaa !9
  %indvars.iv.next537.2 = add nuw nsw i64 %indvars.iv536, 3
  %75 = getelementptr inbounds double, ptr %29, i64 %indvars.iv.next537.2
  store double 0.000000e+00, ptr %75, align 8, !tbaa !9
  %76 = getelementptr inbounds double, ptr %30, i64 %indvars.iv.next537.2
  store double 0.000000e+00, ptr %76, align 8, !tbaa !9
  %indvars.iv.next537.3 = add nuw nsw i64 %indvars.iv536, 4
  %exitcond540.not.3 = icmp eq i64 %indvars.iv.next537.3, %wide.trip.count539
  br i1 %exitcond540.not.3, label %.loopexit, label %.lr.ph468, !llvm.loop !17

77:                                               ; preds = %53
  %78 = add nuw nsw i32 %36, 1
  %79 = tail call double @dlamch_(ptr noundef nonnull @.str.3) #5
  %80 = tail call double @dlamch_(ptr noundef nonnull @.str.4) #5
  %81 = uitofp nneg i32 %78 to double
  %82 = fmul double %80, %81
  %83 = fdiv double %82, %79
  %84 = load i32, ptr %2, align 4, !tbaa !5
  %invariant.gep461 = getelementptr i8, ptr %25, i64 8
  %.not369463 = icmp slt i32 %84, 1
  br i1 %.not369463, label %.loopexit, label %.preheader388.lr.ph

.preheader388.lr.ph:                              ; preds = %77
  %invariant.gep426 = getelementptr i8, ptr %28, i64 8
  %invariant.gep = getelementptr i8, ptr %3, i64 -16
  %85 = fmul double %79, %81
  %86 = sext i32 %23 to i64
  %87 = sext i32 %26 to i64
  %88 = zext nneg i32 %84 to i64
  %scevgep583 = getelementptr i8, ptr %11, i64 -8
  %scevgep585 = getelementptr i8, ptr %11, i64 -8
  %scevgep592 = getelementptr i8, ptr %11, i64 -8
  %scevgep594 = getelementptr i8, ptr %11, i64 -8
  %89 = add i64 %18, -8
  %90 = add nsw i64 %86, %24
  %91 = shl nsw i64 %90, 3
  %92 = add i64 %91, %17
  %93 = sub i64 %89, %92
  %94 = mul nsw i64 %86, -8
  br label %.preheader388

.preheader388:                                    ; preds = %.preheader388.lr.ph, %._crit_edge459.thread
  %indvar = phi i64 [ 0, %.preheader388.lr.ph ], [ %indvar.next, %._crit_edge459.thread ]
  %indvars.iv533 = phi i64 [ 1, %.preheader388.lr.ph ], [ %indvars.iv.next534, %._crit_edge459.thread ]
  %95 = mul i64 %94, %indvar
  %96 = add i64 %93, %95
  %97 = getelementptr inbounds double, ptr %30, i64 %indvars.iv533
  %98 = mul nsw i64 %indvars.iv533, %86
  %gep462 = getelementptr double, ptr %invariant.gep461, i64 %98
  %99 = mul nsw i64 %indvars.iv533, %87
  %gep427 = getelementptr double, ptr %invariant.gep426, i64 %99
  %invariant.gep550 = getelementptr double, ptr %25, i64 %98
  %invariant.gep554 = getelementptr double, ptr %28, i64 %99
  %invariant.gep552 = getelementptr double, ptr %28, i64 %99
  %invariant.gep558 = getelementptr double, ptr %28, i64 %99
  %invariant.gep556 = getelementptr double, ptr %28, i64 %99
  %diff.check = icmp ult i64 %96, 32
  %invariant.gep674 = getelementptr i8, ptr %invariant.gep550, i64 8
  br label %100

100:                                              ; preds = %.preheader388, %234
  %.0346 = phi i32 [ %239, %234 ], [ 1, %.preheader388 ]
  %.0 = phi double [ %238, %234 ], [ 3.000000e+00, %.preheader388 ]
  %101 = load i32, ptr %1, align 4, !tbaa !5
  %102 = sext i32 %101 to i64
  %gep425 = getelementptr double, ptr %11, i64 %102
  call void @dcopy_(ptr noundef nonnull %1, ptr noundef %gep462, ptr noundef nonnull @c__1, ptr noundef %gep425, ptr noundef nonnull @c__1) #5
  %103 = load i32, ptr %1, align 4, !tbaa !5
  %104 = sext i32 %103 to i64
  %gep429 = getelementptr double, ptr %11, i64 %104
  call void @dspmv_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c_b12, ptr noundef %3, ptr noundef %gep427, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b14, ptr noundef %gep429, ptr noundef nonnull @c__1) #5
  %105 = load i32, ptr %1, align 4, !tbaa !5
  %.not370392 = icmp slt i32 %105, 1
  br i1 %.not370392, label %._crit_edge422, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %100
  %106 = add nuw i32 %105, 1
  %wide.trip.count = zext i32 %106 to i64
  %107 = zext nneg i32 %105 to i64
  %min.iters.check619 = icmp ult i32 %105, 4
  %or.cond648 = select i1 %min.iters.check619, i1 true, i1 %diff.check
  br i1 %or.cond648, label %.lr.ph.preheader653, label %vector.ph620

vector.ph620:                                     ; preds = %.lr.ph.preheader
  %n.vec622 = and i64 %107, 2147483644
  %ind.end623 = or disjoint i64 %n.vec622, 1
  br label %vector.body625

vector.body625:                                   ; preds = %vector.body625, %vector.ph620
  %index626 = phi i64 [ 0, %vector.ph620 ], [ %index.next630, %vector.body625 ]
  %offset.idx627 = or disjoint i64 %index626, 1
  %108 = getelementptr double, ptr %invariant.gep550, i64 %offset.idx627
  %109 = getelementptr i8, ptr %108, i64 16
  %wide.load628 = load <2 x double>, ptr %108, align 8, !tbaa !9
  %wide.load629 = load <2 x double>, ptr %109, align 8, !tbaa !9
  %110 = fcmp oge <2 x double> %wide.load628, zeroinitializer
  %111 = fcmp oge <2 x double> %wide.load629, zeroinitializer
  %112 = fneg <2 x double> %wide.load628
  %113 = fneg <2 x double> %wide.load629
  %114 = select <2 x i1> %110, <2 x double> %wide.load628, <2 x double> %112
  %115 = select <2 x i1> %111, <2 x double> %wide.load629, <2 x double> %113
  %116 = getelementptr double, ptr %11, i64 %index626
  %117 = getelementptr inbounds i8, ptr %116, i64 16
  store <2 x double> %114, ptr %116, align 8, !tbaa !9
  store <2 x double> %115, ptr %117, align 8, !tbaa !9
  %index.next630 = add nuw i64 %index626, 4
  %118 = icmp eq i64 %index.next630, %n.vec622
  br i1 %118, label %middle.block617, label %vector.body625, !llvm.loop !18

middle.block617:                                  ; preds = %vector.body625
  %cmp.n631 = icmp eq i64 %n.vec622, %107
  br i1 %cmp.n631, label %._crit_edge, label %.lr.ph.preheader653

.lr.ph.preheader653:                              ; preds = %middle.block617, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end623, %middle.block617 ]
  %119 = zext nneg i32 %105 to i64
  %120 = and i32 %105, 1
  %lcmp.mod.not = icmp eq i32 %120, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader653
  %gep551.prol = getelementptr double, ptr %invariant.gep550, i64 %indvars.iv.ph
  %121 = load double, ptr %gep551.prol, align 8, !tbaa !9
  %122 = fcmp oge double %121, 0.000000e+00
  %123 = fneg double %121
  %124 = select i1 %122, double %121, double %123
  %125 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.ph
  store double %124, ptr %125, align 8, !tbaa !9
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader653
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader653 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %126 = icmp eq i64 %indvars.iv.ph, %119
  br i1 %126, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.lr.ph ], [ %indvars.iv.unr, %.lr.ph.prol.loopexit ]
  %gep551 = getelementptr double, ptr %invariant.gep550, i64 %indvars.iv
  %127 = load double, ptr %gep551, align 8, !tbaa !9
  %128 = fcmp oge double %127, 0.000000e+00
  %129 = fneg double %127
  %130 = select i1 %128, double %127, double %129
  %131 = getelementptr inbounds double, ptr %31, i64 %indvars.iv
  store double %130, ptr %131, align 8, !tbaa !9
  %gep675 = getelementptr double, ptr %invariant.gep674, i64 %indvars.iv
  %132 = load double, ptr %gep675, align 8, !tbaa !9
  %133 = fcmp oge double %132, 0.000000e+00
  %134 = fneg double %132
  %135 = select i1 %133, double %132, double %134
  %136 = getelementptr double, ptr %11, i64 %indvars.iv
  store double %135, ptr %136, align 8, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond.not.1, label %._crit_edge, label %.lr.ph, !llvm.loop !19

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block617
  br i1 %.not, label %.preheader, label %.preheader386

.preheader386:                                    ; preds = %._crit_edge
  br i1 %.not370392, label %._crit_edge422, label %.lr.ph404.preheader

.lr.ph404.preheader:                              ; preds = %.preheader386
  %137 = add nuw i32 %105, 1
  %wide.trip.count487 = zext i32 %137 to i64
  br label %.lr.ph404

.preheader:                                       ; preds = %._crit_edge
  br i1 %.not370392, label %._crit_edge422, label %.lr.ph416

.lr.ph416:                                        ; preds = %.preheader
  %138 = add nuw i32 %105, 1
  %139 = zext nneg i32 %105 to i64
  %wide.trip.count506 = zext i32 %138 to i64
  br label %173

.lr.ph404:                                        ; preds = %.lr.ph404.preheader, %._crit_edge400
  %indvars.iv484 = phi i64 [ 1, %.lr.ph404.preheader ], [ %indvars.iv.next485, %._crit_edge400 ]
  %.0342403 = phi i32 [ 1, %.lr.ph404.preheader ], [ %165, %._crit_edge400 ]
  %gep555 = getelementptr double, ptr %invariant.gep554, i64 %indvars.iv484
  %140 = load double, ptr %gep555, align 8, !tbaa !9
  %141 = fcmp oge double %140, 0.000000e+00
  %142 = fneg double %140
  %143 = select i1 %141, double %140, double %142
  %.not380.not394 = icmp ugt i64 %indvars.iv484, 1
  br i1 %.not380.not394, label %.lr.ph399.preheader, label %._crit_edge400

.lr.ph399.preheader:                              ; preds = %.lr.ph404
  %144 = zext i32 %.0342403 to i64
  br label %.lr.ph399

.lr.ph399:                                        ; preds = %.lr.ph399.preheader, %.lr.ph399
  %indvars.iv477 = phi i64 [ 1, %.lr.ph399.preheader ], [ %indvars.iv.next478, %.lr.ph399 ]
  %indvars.iv475 = phi i64 [ %144, %.lr.ph399.preheader ], [ %indvars.iv.next476, %.lr.ph399 ]
  %.0347396 = phi double [ 0.000000e+00, %.lr.ph399.preheader ], [ %161, %.lr.ph399 ]
  %145 = getelementptr inbounds double, ptr %22, i64 %indvars.iv475
  %146 = load double, ptr %145, align 8, !tbaa !9
  %147 = fcmp oge double %146, 0.000000e+00
  %148 = fneg double %146
  %149 = select i1 %147, double %146, double %148
  %150 = getelementptr inbounds double, ptr %31, i64 %indvars.iv477
  %151 = load double, ptr %150, align 8, !tbaa !9
  %152 = call double @llvm.fmuladd.f64(double %149, double %143, double %151)
  store double %152, ptr %150, align 8, !tbaa !9
  %153 = load double, ptr %145, align 8, !tbaa !9
  %154 = fcmp oge double %153, 0.000000e+00
  %155 = fneg double %153
  %156 = select i1 %154, double %153, double %155
  %gep553 = getelementptr double, ptr %invariant.gep552, i64 %indvars.iv477
  %157 = load double, ptr %gep553, align 8, !tbaa !9
  %158 = fcmp oge double %157, 0.000000e+00
  %159 = fneg double %157
  %160 = select i1 %158, double %157, double %159
  %161 = call double @llvm.fmuladd.f64(double %156, double %160, double %.0347396)
  %indvars.iv.next476 = add nuw nsw i64 %indvars.iv475, 1
  %indvars.iv.next478 = add nuw nsw i64 %indvars.iv477, 1
  %exitcond483.not = icmp eq i64 %indvars.iv.next478, %indvars.iv484
  br i1 %exitcond483.not, label %._crit_edge400, label %.lr.ph399, !llvm.loop !20

._crit_edge400:                                   ; preds = %.lr.ph399, %.lr.ph404
  %.0347.lcssa = phi double [ 0.000000e+00, %.lr.ph404 ], [ %161, %.lr.ph399 ]
  %162 = getelementptr inbounds double, ptr %31, i64 %indvars.iv484
  %163 = load double, ptr %162, align 8, !tbaa !9
  %164 = trunc nuw nsw i64 %indvars.iv484 to i32
  %165 = add nuw nsw i32 %.0342403, %164
  %166 = zext nneg i32 %165 to i64
  %gep = getelementptr double, ptr %invariant.gep, i64 %166
  %167 = load double, ptr %gep, align 8, !tbaa !9
  %168 = fcmp oge double %167, 0.000000e+00
  %169 = fneg double %167
  %170 = select i1 %168, double %167, double %169
  %171 = call double @llvm.fmuladd.f64(double %170, double %143, double %163)
  %172 = fadd double %.0347.lcssa, %171
  store double %172, ptr %162, align 8, !tbaa !9
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %exitcond488.not = icmp eq i64 %indvars.iv.next485, %wide.trip.count487
  br i1 %exitcond488.not, label %.loopexit385, label %.lr.ph404, !llvm.loop !21

173:                                              ; preds = %.lr.ph416, %._crit_edge411
  %indvars.iv503 = phi i64 [ 1, %.lr.ph416 ], [ %indvars.iv.next504, %._crit_edge411 ]
  %indvars.iv495 = phi i32 [ 2, %.lr.ph416 ], [ %indvars.iv.next496, %._crit_edge411 ]
  %indvars.iv491 = phi i32 [ 1, %.lr.ph416 ], [ %indvars.iv.next492, %._crit_edge411 ]
  %indvars.iv489 = phi i32 [ %105, %.lr.ph416 ], [ %indvars.iv.next490, %._crit_edge411 ]
  %174 = sext i32 %indvars.iv491 to i64
  %gep559 = getelementptr double, ptr %invariant.gep558, i64 %indvars.iv503
  %175 = load double, ptr %gep559, align 8, !tbaa !9
  %176 = fcmp oge double %175, 0.000000e+00
  %177 = fneg double %175
  %178 = select i1 %176, double %175, double %177
  %179 = getelementptr inbounds double, ptr %22, i64 %174
  %180 = load double, ptr %179, align 8, !tbaa !9
  %181 = fcmp oge double %180, 0.000000e+00
  %182 = fneg double %180
  %183 = select i1 %181, double %180, double %182
  %184 = getelementptr inbounds double, ptr %31, i64 %indvars.iv503
  %185 = load double, ptr %184, align 8, !tbaa !9
  %186 = call double @llvm.fmuladd.f64(double %183, double %178, double %185)
  store double %186, ptr %184, align 8, !tbaa !9
  %indvars.iv.next504 = add nuw nsw i64 %indvars.iv503, 1
  %.not372405.not = icmp ult i64 %indvars.iv503, %139
  br i1 %.not372405.not, label %.lr.ph410.preheader, label %._crit_edge411

.lr.ph410.preheader:                              ; preds = %173
  %187 = sext i32 %indvars.iv495 to i64
  br label %.lr.ph410

.lr.ph410:                                        ; preds = %.lr.ph410.preheader, %.lr.ph410
  %indvars.iv497 = phi i64 [ %187, %.lr.ph410.preheader ], [ %indvars.iv.next498, %.lr.ph410 ]
  %indvars.iv493 = phi i64 [ %174, %.lr.ph410.preheader ], [ %indvars.iv.next494, %.lr.ph410 ]
  %.1348407 = phi double [ 0.000000e+00, %.lr.ph410.preheader ], [ %204, %.lr.ph410 ]
  %indvars.iv.next494 = add nsw i64 %indvars.iv493, 1
  %188 = getelementptr double, ptr %3, i64 %indvars.iv493
  %189 = load double, ptr %188, align 8, !tbaa !9
  %190 = fcmp oge double %189, 0.000000e+00
  %191 = fneg double %189
  %192 = select i1 %190, double %189, double %191
  %193 = getelementptr inbounds double, ptr %31, i64 %indvars.iv497
  %194 = load double, ptr %193, align 8, !tbaa !9
  %195 = call double @llvm.fmuladd.f64(double %192, double %178, double %194)
  store double %195, ptr %193, align 8, !tbaa !9
  %196 = load double, ptr %188, align 8, !tbaa !9
  %197 = fcmp oge double %196, 0.000000e+00
  %198 = fneg double %196
  %199 = select i1 %197, double %196, double %198
  %gep557 = getelementptr double, ptr %invariant.gep556, i64 %indvars.iv497
  %200 = load double, ptr %gep557, align 8, !tbaa !9
  %201 = fcmp oge double %200, 0.000000e+00
  %202 = fneg double %200
  %203 = select i1 %201, double %200, double %202
  %204 = call double @llvm.fmuladd.f64(double %199, double %203, double %.1348407)
  %indvars.iv.next498 = add nsw i64 %indvars.iv497, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next498 to i32
  %exitcond502.not = icmp eq i32 %138, %lftr.wideiv
  br i1 %exitcond502.not, label %._crit_edge411.loopexit, label %.lr.ph410, !llvm.loop !22

._crit_edge411.loopexit:                          ; preds = %.lr.ph410
  %.pre = load double, ptr %184, align 8, !tbaa !9
  br label %._crit_edge411

._crit_edge411:                                   ; preds = %._crit_edge411.loopexit, %173
  %205 = phi double [ %186, %173 ], [ %.pre, %._crit_edge411.loopexit ]
  %.1348.lcssa = phi double [ 0.000000e+00, %173 ], [ %204, %._crit_edge411.loopexit ]
  %206 = fadd double %.1348.lcssa, %205
  store double %206, ptr %184, align 8, !tbaa !9
  %indvars.iv.next492 = add i32 %indvars.iv491, %indvars.iv489
  %indvars.iv.next490 = add i32 %indvars.iv489, -1
  %indvars.iv.next496 = add nuw i32 %indvars.iv495, 1
  %exitcond507.not = icmp eq i64 %indvars.iv.next504, %wide.trip.count506
  br i1 %exitcond507.not, label %.loopexit385, label %173, !llvm.loop !23

.loopexit385:                                     ; preds = %._crit_edge400, %._crit_edge411
  br i1 %.not370392, label %._crit_edge422, label %.lr.ph421.preheader

.lr.ph421.preheader:                              ; preds = %.loopexit385
  %207 = zext nneg i32 %105 to i64
  %208 = add nuw i32 %105, 1
  %wide.trip.count511 = zext i32 %208 to i64
  %invariant.gep560 = getelementptr inbounds double, ptr %31, i64 %207
  %invariant.gep562 = getelementptr inbounds double, ptr %31, i64 %207
  br label %.lr.ph421

.lr.ph421:                                        ; preds = %.lr.ph421.preheader, %226
  %indvars.iv508 = phi i64 [ 1, %.lr.ph421.preheader ], [ %indvars.iv.next509, %226 ]
  %.2419 = phi double [ 0.000000e+00, %.lr.ph421.preheader ], [ %228, %226 ]
  %209 = getelementptr inbounds double, ptr %31, i64 %indvars.iv508
  %210 = load double, ptr %209, align 8, !tbaa !9
  %211 = fcmp ogt double %210, %83
  br i1 %211, label %212, label %218

212:                                              ; preds = %.lr.ph421
  %gep563 = getelementptr inbounds double, ptr %invariant.gep562, i64 %indvars.iv508
  %213 = load double, ptr %gep563, align 8, !tbaa !9
  %214 = fcmp oge double %213, 0.000000e+00
  %215 = fneg double %213
  %216 = select i1 %214, double %213, double %215
  %217 = fdiv double %216, %210
  br label %226

218:                                              ; preds = %.lr.ph421
  %gep561 = getelementptr inbounds double, ptr %invariant.gep560, i64 %indvars.iv508
  %219 = load double, ptr %gep561, align 8, !tbaa !9
  %220 = fcmp oge double %219, 0.000000e+00
  %221 = fneg double %219
  %222 = select i1 %220, double %219, double %221
  %223 = fadd double %82, %222
  %224 = fadd double %82, %210
  %225 = fdiv double %223, %224
  br label %226

226:                                              ; preds = %212, %218
  %.sink576 = phi double [ %217, %212 ], [ %225, %218 ]
  %227 = fcmp oge double %.2419, %.sink576
  %228 = select i1 %227, double %.2419, double %.sink576
  %indvars.iv.next509 = add nuw nsw i64 %indvars.iv508, 1
  %exitcond512.not = icmp eq i64 %indvars.iv.next509, %wide.trip.count511
  br i1 %exitcond512.not, label %._crit_edge422, label %.lr.ph421, !llvm.loop !24

._crit_edge422:                                   ; preds = %226, %100, %.preheader, %.preheader386, %.loopexit385
  %.2.lcssa = phi double [ 0.000000e+00, %.loopexit385 ], [ 0.000000e+00, %.preheader386 ], [ 0.000000e+00, %.preheader ], [ 0.000000e+00, %100 ], [ %228, %226 ]
  store double %.2.lcssa, ptr %97, align 8, !tbaa !9
  %229 = fcmp ogt double %.2.lcssa, %79
  br i1 %229, label %230, label %240

230:                                              ; preds = %._crit_edge422
  %231 = fmul double %.2.lcssa, 2.000000e+00
  %232 = fcmp ole double %231, %.0
  %233 = icmp ult i32 %.0346, 6
  %or.cond = select i1 %232, i1 %233, i1 false
  br i1 %or.cond, label %234, label %240

234:                                              ; preds = %230
  %235 = sext i32 %105 to i64
  %gep431 = getelementptr double, ptr %11, i64 %235
  call void @dpptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %gep431, ptr noundef nonnull %1, ptr noundef nonnull %13) #5
  %236 = load i32, ptr %1, align 4, !tbaa !5
  %237 = sext i32 %236 to i64
  %gep433 = getelementptr double, ptr %11, i64 %237
  call void @daxpy_(ptr noundef nonnull %1, ptr noundef nonnull @c_b14, ptr noundef %gep433, ptr noundef nonnull @c__1, ptr noundef %gep427, ptr noundef nonnull @c__1) #5
  %238 = load double, ptr %97, align 8, !tbaa !9
  %239 = add nuw nsw i32 %.0346, 1
  br label %100

240:                                              ; preds = %230, %._crit_edge422
  br i1 %.not370392, label %._crit_edge438, label %.lr.ph437.preheader

.lr.ph437.preheader:                              ; preds = %240
  %241 = zext nneg i32 %105 to i64
  %242 = add nuw i32 %105, 1
  %wide.trip.count516 = zext i32 %242 to i64
  %invariant.gep564 = getelementptr inbounds double, ptr %31, i64 %241
  %invariant.gep566 = getelementptr inbounds double, ptr %31, i64 %241
  br label %.lr.ph437

.lr.ph437:                                        ; preds = %.lr.ph437.preheader, %259
  %indvars.iv513 = phi i64 [ 1, %.lr.ph437.preheader ], [ %indvars.iv.next514, %259 ]
  %243 = getelementptr inbounds double, ptr %31, i64 %indvars.iv513
  %244 = load double, ptr %243, align 8, !tbaa !9
  %245 = fcmp ogt double %244, %83
  br i1 %245, label %246, label %252

246:                                              ; preds = %.lr.ph437
  %gep567 = getelementptr inbounds double, ptr %invariant.gep566, i64 %indvars.iv513
  %247 = load double, ptr %gep567, align 8, !tbaa !9
  %248 = fcmp oge double %247, 0.000000e+00
  %249 = fneg double %247
  %250 = select i1 %248, double %247, double %249
  %251 = call double @llvm.fmuladd.f64(double %85, double %244, double %250)
  br label %259

252:                                              ; preds = %.lr.ph437
  %gep565 = getelementptr inbounds double, ptr %invariant.gep564, i64 %indvars.iv513
  %253 = load double, ptr %gep565, align 8, !tbaa !9
  %254 = fcmp oge double %253, 0.000000e+00
  %255 = fneg double %253
  %256 = select i1 %254, double %253, double %255
  %257 = call double @llvm.fmuladd.f64(double %85, double %244, double %256)
  %258 = fadd double %82, %257
  br label %259

259:                                              ; preds = %246, %252
  %storemerge = phi double [ %258, %252 ], [ %251, %246 ]
  store double %storemerge, ptr %243, align 8, !tbaa !9
  %indvars.iv.next514 = add nuw nsw i64 %indvars.iv513, 1
  %exitcond517.not = icmp eq i64 %indvars.iv.next514, %wide.trip.count516
  br i1 %exitcond517.not, label %._crit_edge438, label %.lr.ph437, !llvm.loop !25

._crit_edge438:                                   ; preds = %259, %240
  store i32 0, ptr %20, align 4, !tbaa !5
  %260 = getelementptr inbounds double, ptr %29, i64 %indvars.iv533
  br label %261

261:                                              ; preds = %.loopexit384, %._crit_edge438
  %262 = phi i32 [ %.pre541, %.loopexit384 ], [ %105, %._crit_edge438 ]
  %263 = shl i32 %262, 1
  %264 = or disjoint i32 %263, 1
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds double, ptr %31, i64 %265
  %267 = sext i32 %262 to i64
  %gep449 = getelementptr double, ptr %11, i64 %267
  call void @dlacn2_(ptr noundef nonnull %1, ptr noundef nonnull %266, ptr noundef %gep449, ptr noundef %12, ptr noundef nonnull %260, ptr noundef nonnull %20, ptr noundef nonnull %21) #5
  %268 = load i32, ptr %20, align 4, !tbaa !5
  switch i32 %268, label %.loopexit384 [
    i32 0, label %350
    i32 1, label %269
    i32 2, label %310
  ]

269:                                              ; preds = %261
  %270 = load i32, ptr %1, align 4, !tbaa !5
  %271 = sext i32 %270 to i64
  %gep453 = getelementptr double, ptr %11, i64 %271
  call void @dpptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %gep453, ptr noundef nonnull %1, ptr noundef nonnull %13) #5
  %272 = load i32, ptr %1, align 4, !tbaa !5
  %.not379444 = icmp slt i32 %272, 1
  br i1 %.not379444, label %.loopexit384, label %.lr.ph447.preheader

.lr.ph447.preheader:                              ; preds = %269
  %273 = zext nneg i32 %272 to i64
  %274 = add nuw i32 %272, 1
  %wide.trip.count526 = zext i32 %274 to i64
  %invariant.gep570 = getelementptr inbounds double, ptr %31, i64 %273
  %275 = zext nneg i32 %272 to i64
  %min.iters.check = icmp ult i32 %272, 6
  br i1 %min.iters.check, label %.lr.ph447.preheader650, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph447.preheader
  %276 = shl nuw nsw i64 %273, 3
  %scevgep = getelementptr i8, ptr %11, i64 %276
  %277 = shl nuw nsw i64 %wide.trip.count526, 3
  %278 = getelementptr i8, ptr %scevgep583, i64 %276
  %scevgep584 = getelementptr i8, ptr %278, i64 %277
  %scevgep586 = getelementptr i8, ptr %scevgep585, i64 %277
  %bound0 = icmp ult ptr %scevgep, %scevgep586
  %bound1 = icmp ugt ptr %scevgep584, %11
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph447.preheader650, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %279 = getelementptr double, ptr %11, i64 %index
  %280 = getelementptr inbounds i8, ptr %279, i64 16
  %wide.load = load <2 x double>, ptr %279, align 8, !tbaa !9, !alias.scope !26
  %wide.load587 = load <2 x double>, ptr %280, align 8, !tbaa !9, !alias.scope !26
  %281 = getelementptr inbounds double, ptr %invariant.gep570, i64 %offset.idx
  %282 = getelementptr inbounds i8, ptr %281, i64 16
  %wide.load588 = load <2 x double>, ptr %281, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %wide.load589 = load <2 x double>, ptr %282, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %283 = fmul <2 x double> %wide.load, %wide.load588
  %284 = fmul <2 x double> %wide.load587, %wide.load589
  store <2 x double> %283, ptr %281, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  store <2 x double> %284, ptr %282, align 8, !tbaa !9, !alias.scope !29, !noalias !26
  %index.next = add nuw i64 %index, 4
  %285 = icmp eq i64 %index.next, %n.vec
  br i1 %285, label %middle.block, label %vector.body, !llvm.loop !31

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %275
  br i1 %cmp.n, label %.loopexit384, label %.lr.ph447.preheader650

.lr.ph447.preheader650:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph447.preheader
  %indvars.iv523.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph447.preheader ], [ %ind.end, %middle.block ]
  %286 = sub nsw i64 %wide.trip.count526, %indvars.iv523.ph
  %287 = zext nneg i32 %272 to i64
  %288 = sub nsw i64 %287, %indvars.iv523.ph
  %xtraiter661 = and i64 %286, 3
  %lcmp.mod662.not = icmp eq i64 %xtraiter661, 0
  br i1 %lcmp.mod662.not, label %.lr.ph447.prol.loopexit, label %.lr.ph447.prol

.lr.ph447.prol:                                   ; preds = %.lr.ph447.preheader650, %.lr.ph447.prol
  %indvars.iv523.prol = phi i64 [ %indvars.iv.next524.prol, %.lr.ph447.prol ], [ %indvars.iv523.ph, %.lr.ph447.preheader650 ]
  %prol.iter663 = phi i64 [ %prol.iter663.next, %.lr.ph447.prol ], [ 0, %.lr.ph447.preheader650 ]
  %289 = getelementptr inbounds double, ptr %31, i64 %indvars.iv523.prol
  %290 = load double, ptr %289, align 8, !tbaa !9
  %gep571.prol = getelementptr inbounds double, ptr %invariant.gep570, i64 %indvars.iv523.prol
  %291 = load double, ptr %gep571.prol, align 8, !tbaa !9
  %292 = fmul double %290, %291
  store double %292, ptr %gep571.prol, align 8, !tbaa !9
  %indvars.iv.next524.prol = add nuw nsw i64 %indvars.iv523.prol, 1
  %prol.iter663.next = add i64 %prol.iter663, 1
  %prol.iter663.cmp.not = icmp eq i64 %prol.iter663.next, %xtraiter661
  br i1 %prol.iter663.cmp.not, label %.lr.ph447.prol.loopexit, label %.lr.ph447.prol, !llvm.loop !32

.lr.ph447.prol.loopexit:                          ; preds = %.lr.ph447.prol, %.lr.ph447.preheader650
  %indvars.iv523.unr = phi i64 [ %indvars.iv523.ph, %.lr.ph447.preheader650 ], [ %indvars.iv.next524.prol, %.lr.ph447.prol ]
  %293 = icmp ult i64 %288, 3
  br i1 %293, label %.loopexit384, label %.lr.ph447.preheader650.new

.lr.ph447.preheader650.new:                       ; preds = %.lr.ph447.prol.loopexit
  %invariant.gep678 = getelementptr i8, ptr %invariant.gep570, i64 8
  br label %.lr.ph447

.lr.ph447:                                        ; preds = %.lr.ph447, %.lr.ph447.preheader650.new
  %indvars.iv523 = phi i64 [ %indvars.iv523.unr, %.lr.ph447.preheader650.new ], [ %indvars.iv.next524.3, %.lr.ph447 ]
  %294 = getelementptr inbounds double, ptr %31, i64 %indvars.iv523
  %295 = load double, ptr %294, align 8, !tbaa !9
  %gep571 = getelementptr inbounds double, ptr %invariant.gep570, i64 %indvars.iv523
  %296 = load double, ptr %gep571, align 8, !tbaa !9
  %297 = fmul double %295, %296
  store double %297, ptr %gep571, align 8, !tbaa !9
  %298 = getelementptr double, ptr %11, i64 %indvars.iv523
  %299 = load double, ptr %298, align 8, !tbaa !9
  %gep679 = getelementptr double, ptr %invariant.gep678, i64 %indvars.iv523
  %300 = load double, ptr %gep679, align 8, !tbaa !9
  %301 = fmul double %299, %300
  store double %301, ptr %gep679, align 8, !tbaa !9
  %indvars.iv.next524.1 = add nuw nsw i64 %indvars.iv523, 2
  %302 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next524.1
  %303 = load double, ptr %302, align 8, !tbaa !9
  %gep571.2 = getelementptr inbounds double, ptr %invariant.gep570, i64 %indvars.iv.next524.1
  %304 = load double, ptr %gep571.2, align 8, !tbaa !9
  %305 = fmul double %303, %304
  store double %305, ptr %gep571.2, align 8, !tbaa !9
  %indvars.iv.next524.2 = add nuw nsw i64 %indvars.iv523, 3
  %306 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next524.2
  %307 = load double, ptr %306, align 8, !tbaa !9
  %gep571.3 = getelementptr inbounds double, ptr %invariant.gep570, i64 %indvars.iv.next524.2
  %308 = load double, ptr %gep571.3, align 8, !tbaa !9
  %309 = fmul double %307, %308
  store double %309, ptr %gep571.3, align 8, !tbaa !9
  %indvars.iv.next524.3 = add nuw nsw i64 %indvars.iv523, 4
  %exitcond527.not.3 = icmp eq i64 %indvars.iv.next524.3, %wide.trip.count526
  br i1 %exitcond527.not.3, label %.loopexit384, label %.lr.ph447, !llvm.loop !33

310:                                              ; preds = %261
  %311 = load i32, ptr %1, align 4, !tbaa !5
  %.not378439 = icmp slt i32 %311, 1
  br i1 %.not378439, label %._crit_edge443, label %.lr.ph442.preheader

.lr.ph442.preheader:                              ; preds = %310
  %312 = zext nneg i32 %311 to i64
  %313 = add nuw i32 %311, 1
  %wide.trip.count521 = zext i32 %313 to i64
  %invariant.gep568 = getelementptr inbounds double, ptr %31, i64 %312
  %314 = zext nneg i32 %311 to i64
  %min.iters.check601 = icmp ult i32 %311, 6
  br i1 %min.iters.check601, label %.lr.ph442.preheader651, label %vector.memcheck590

vector.memcheck590:                               ; preds = %.lr.ph442.preheader
  %315 = shl nuw nsw i64 %312, 3
  %scevgep591 = getelementptr i8, ptr %11, i64 %315
  %316 = shl nuw nsw i64 %wide.trip.count521, 3
  %317 = getelementptr i8, ptr %scevgep592, i64 %315
  %scevgep593 = getelementptr i8, ptr %317, i64 %316
  %scevgep595 = getelementptr i8, ptr %scevgep594, i64 %316
  %bound0596 = icmp ult ptr %scevgep591, %scevgep595
  %bound1597 = icmp ugt ptr %scevgep593, %11
  %found.conflict598 = and i1 %bound0596, %bound1597
  br i1 %found.conflict598, label %.lr.ph442.preheader651, label %vector.ph602

vector.ph602:                                     ; preds = %vector.memcheck590
  %n.vec604 = and i64 %314, 2147483644
  %ind.end605 = or disjoint i64 %n.vec604, 1
  br label %vector.body607

vector.body607:                                   ; preds = %vector.body607, %vector.ph602
  %index608 = phi i64 [ 0, %vector.ph602 ], [ %index.next614, %vector.body607 ]
  %offset.idx609 = or disjoint i64 %index608, 1
  %318 = getelementptr double, ptr %11, i64 %index608
  %319 = getelementptr inbounds i8, ptr %318, i64 16
  %wide.load610 = load <2 x double>, ptr %318, align 8, !tbaa !9, !alias.scope !34
  %wide.load611 = load <2 x double>, ptr %319, align 8, !tbaa !9, !alias.scope !34
  %320 = getelementptr inbounds double, ptr %invariant.gep568, i64 %offset.idx609
  %321 = getelementptr inbounds i8, ptr %320, i64 16
  %wide.load612 = load <2 x double>, ptr %320, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  %wide.load613 = load <2 x double>, ptr %321, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  %322 = fmul <2 x double> %wide.load610, %wide.load612
  %323 = fmul <2 x double> %wide.load611, %wide.load613
  store <2 x double> %322, ptr %320, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  store <2 x double> %323, ptr %321, align 8, !tbaa !9, !alias.scope !37, !noalias !34
  %index.next614 = add nuw i64 %index608, 4
  %324 = icmp eq i64 %index.next614, %n.vec604
  br i1 %324, label %middle.block599, label %vector.body607, !llvm.loop !39

middle.block599:                                  ; preds = %vector.body607
  %cmp.n615 = icmp eq i64 %n.vec604, %314
  br i1 %cmp.n615, label %._crit_edge443, label %.lr.ph442.preheader651

.lr.ph442.preheader651:                           ; preds = %middle.block599, %vector.memcheck590, %.lr.ph442.preheader
  %indvars.iv518.ph = phi i64 [ 1, %vector.memcheck590 ], [ 1, %.lr.ph442.preheader ], [ %ind.end605, %middle.block599 ]
  %325 = sub nsw i64 %wide.trip.count521, %indvars.iv518.ph
  %326 = zext nneg i32 %311 to i64
  %327 = sub nsw i64 %326, %indvars.iv518.ph
  %xtraiter659 = and i64 %325, 3
  %lcmp.mod660.not = icmp eq i64 %xtraiter659, 0
  br i1 %lcmp.mod660.not, label %.lr.ph442.prol.loopexit, label %.lr.ph442.prol

.lr.ph442.prol:                                   ; preds = %.lr.ph442.preheader651, %.lr.ph442.prol
  %indvars.iv518.prol = phi i64 [ %indvars.iv.next519.prol, %.lr.ph442.prol ], [ %indvars.iv518.ph, %.lr.ph442.preheader651 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph442.prol ], [ 0, %.lr.ph442.preheader651 ]
  %328 = getelementptr inbounds double, ptr %31, i64 %indvars.iv518.prol
  %329 = load double, ptr %328, align 8, !tbaa !9
  %gep569.prol = getelementptr inbounds double, ptr %invariant.gep568, i64 %indvars.iv518.prol
  %330 = load double, ptr %gep569.prol, align 8, !tbaa !9
  %331 = fmul double %329, %330
  store double %331, ptr %gep569.prol, align 8, !tbaa !9
  %indvars.iv.next519.prol = add nuw nsw i64 %indvars.iv518.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter659
  br i1 %prol.iter.cmp.not, label %.lr.ph442.prol.loopexit, label %.lr.ph442.prol, !llvm.loop !40

.lr.ph442.prol.loopexit:                          ; preds = %.lr.ph442.prol, %.lr.ph442.preheader651
  %indvars.iv518.unr = phi i64 [ %indvars.iv518.ph, %.lr.ph442.preheader651 ], [ %indvars.iv.next519.prol, %.lr.ph442.prol ]
  %332 = icmp ult i64 %327, 3
  br i1 %332, label %._crit_edge443, label %.lr.ph442.preheader651.new

.lr.ph442.preheader651.new:                       ; preds = %.lr.ph442.prol.loopexit
  %invariant.gep676 = getelementptr i8, ptr %invariant.gep568, i64 8
  br label %.lr.ph442

.lr.ph442:                                        ; preds = %.lr.ph442, %.lr.ph442.preheader651.new
  %indvars.iv518 = phi i64 [ %indvars.iv518.unr, %.lr.ph442.preheader651.new ], [ %indvars.iv.next519.3, %.lr.ph442 ]
  %333 = getelementptr inbounds double, ptr %31, i64 %indvars.iv518
  %334 = load double, ptr %333, align 8, !tbaa !9
  %gep569 = getelementptr inbounds double, ptr %invariant.gep568, i64 %indvars.iv518
  %335 = load double, ptr %gep569, align 8, !tbaa !9
  %336 = fmul double %334, %335
  store double %336, ptr %gep569, align 8, !tbaa !9
  %337 = getelementptr double, ptr %11, i64 %indvars.iv518
  %338 = load double, ptr %337, align 8, !tbaa !9
  %gep677 = getelementptr double, ptr %invariant.gep676, i64 %indvars.iv518
  %339 = load double, ptr %gep677, align 8, !tbaa !9
  %340 = fmul double %338, %339
  store double %340, ptr %gep677, align 8, !tbaa !9
  %indvars.iv.next519.1 = add nuw nsw i64 %indvars.iv518, 2
  %341 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next519.1
  %342 = load double, ptr %341, align 8, !tbaa !9
  %gep569.2 = getelementptr inbounds double, ptr %invariant.gep568, i64 %indvars.iv.next519.1
  %343 = load double, ptr %gep569.2, align 8, !tbaa !9
  %344 = fmul double %342, %343
  store double %344, ptr %gep569.2, align 8, !tbaa !9
  %indvars.iv.next519.2 = add nuw nsw i64 %indvars.iv518, 3
  %345 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next519.2
  %346 = load double, ptr %345, align 8, !tbaa !9
  %gep569.3 = getelementptr inbounds double, ptr %invariant.gep568, i64 %indvars.iv.next519.2
  %347 = load double, ptr %gep569.3, align 8, !tbaa !9
  %348 = fmul double %346, %347
  store double %348, ptr %gep569.3, align 8, !tbaa !9
  %indvars.iv.next519.3 = add nuw nsw i64 %indvars.iv518, 4
  %exitcond522.not.3 = icmp eq i64 %indvars.iv.next519.3, %wide.trip.count521
  br i1 %exitcond522.not.3, label %._crit_edge443, label %.lr.ph442, !llvm.loop !41

._crit_edge443:                                   ; preds = %.lr.ph442.prol.loopexit, %.lr.ph442, %middle.block599, %310
  %349 = sext i32 %311 to i64
  %gep451 = getelementptr double, ptr %11, i64 %349
  call void @dpptrs_(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull @c__1, ptr noundef %4, ptr noundef %gep451, ptr noundef nonnull %1, ptr noundef nonnull %13) #5
  br label %.loopexit384

.loopexit384:                                     ; preds = %.lr.ph447.prol.loopexit, %.lr.ph447, %middle.block, %269, %261, %._crit_edge443
  %.pre541 = load i32, ptr %1, align 4, !tbaa !5
  br label %261

350:                                              ; preds = %261
  %351 = load i32, ptr %1, align 4, !tbaa !5
  %.not377454 = icmp slt i32 %351, 1
  br i1 %.not377454, label %._crit_edge459.thread, label %.lr.ph458.preheader

.lr.ph458.preheader:                              ; preds = %350
  %invariant.gep572 = getelementptr double, ptr %28, i64 %99
  %352 = zext nneg i32 %351 to i64
  %xtraiter664 = and i64 %352, 1
  %353 = icmp eq i32 %351, 1
  br i1 %353, label %._crit_edge459.unr-lcssa, label %.lr.ph458.preheader.new

.lr.ph458.preheader.new:                          ; preds = %.lr.ph458.preheader
  %unroll_iter = and i64 %352, 2147483646
  %invariant.gep680 = getelementptr i8, ptr %invariant.gep572, i64 8
  br label %.lr.ph458

.lr.ph458:                                        ; preds = %.lr.ph458, %.lr.ph458.preheader.new
  %indvars.iv528 = phi i64 [ 1, %.lr.ph458.preheader.new ], [ %indvars.iv.next529.1, %.lr.ph458 ]
  %.1456 = phi double [ 0.000000e+00, %.lr.ph458.preheader.new ], [ %365, %.lr.ph458 ]
  %niter = phi i64 [ 0, %.lr.ph458.preheader.new ], [ %niter.next.1, %.lr.ph458 ]
  %gep573 = getelementptr double, ptr %invariant.gep572, i64 %indvars.iv528
  %354 = load double, ptr %gep573, align 8, !tbaa !9
  %355 = fcmp oge double %354, 0.000000e+00
  %356 = fneg double %354
  %357 = select i1 %355, double %354, double %356
  %358 = fcmp oge double %.1456, %357
  %359 = select i1 %358, double %.1456, double %357
  %gep681 = getelementptr double, ptr %invariant.gep680, i64 %indvars.iv528
  %360 = load double, ptr %gep681, align 8, !tbaa !9
  %361 = fcmp oge double %360, 0.000000e+00
  %362 = fneg double %360
  %363 = select i1 %361, double %360, double %362
  %364 = fcmp oge double %359, %363
  %365 = select i1 %364, double %359, double %363
  %indvars.iv.next529.1 = add nuw nsw i64 %indvars.iv528, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge459.unr-lcssa, label %.lr.ph458, !llvm.loop !42

._crit_edge459.unr-lcssa:                         ; preds = %.lr.ph458, %.lr.ph458.preheader
  %.lcssa658.ph = phi double [ poison, %.lr.ph458.preheader ], [ %365, %.lr.ph458 ]
  %indvars.iv528.unr = phi i64 [ 1, %.lr.ph458.preheader ], [ %indvars.iv.next529.1, %.lr.ph458 ]
  %.1456.unr = phi double [ 0.000000e+00, %.lr.ph458.preheader ], [ %365, %.lr.ph458 ]
  %lcmp.mod665.not = icmp eq i64 %xtraiter664, 0
  br i1 %lcmp.mod665.not, label %._crit_edge459, label %.lr.ph458.epil

.lr.ph458.epil:                                   ; preds = %._crit_edge459.unr-lcssa
  %gep573.epil = getelementptr double, ptr %invariant.gep572, i64 %indvars.iv528.unr
  %366 = load double, ptr %gep573.epil, align 8, !tbaa !9
  %367 = fcmp oge double %366, 0.000000e+00
  %368 = fneg double %366
  %369 = select i1 %367, double %366, double %368
  %370 = fcmp oge double %.1456.unr, %369
  %371 = select i1 %370, double %.1456.unr, double %369
  br label %._crit_edge459

._crit_edge459:                                   ; preds = %._crit_edge459.unr-lcssa, %.lr.ph458.epil
  %.lcssa658 = phi double [ %.lcssa658.ph, %._crit_edge459.unr-lcssa ], [ %371, %.lr.ph458.epil ]
  %372 = fcmp une double %.lcssa658, 0.000000e+00
  br i1 %372, label %373, label %._crit_edge459.thread

373:                                              ; preds = %._crit_edge459
  %374 = load double, ptr %260, align 8, !tbaa !9
  %375 = fdiv double %374, %.lcssa658
  store double %375, ptr %260, align 8, !tbaa !9
  br label %._crit_edge459.thread

._crit_edge459.thread:                            ; preds = %350, %._crit_edge459, %373
  %indvars.iv.next534 = add nuw nsw i64 %indvars.iv533, 1
  %.not369.not = icmp ult i64 %indvars.iv533, %88
  %indvar.next = add i64 %indvar, 1
  br i1 %.not369.not, label %.preheader388, label %.loopexit, !llvm.loop !43

.loopexit:                                        ; preds = %._crit_edge459.thread, %.lr.ph468.prol.loopexit, %.lr.ph468, %middle.block634, %53, %77, %54, %.thread
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #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 void @dcopy_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dspmv_(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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

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

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

declare void @dlacn2_(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) #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 = { 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, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.unroll.disable"}
!17 = distinct !{!17, !12, !13}
!18 = distinct !{!18, !12, !13, !14}
!19 = distinct !{!19, !12, !13}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !12, !13, !14}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !12, !13}
!34 = !{!35}
!35 = distinct !{!35, !36}
!36 = distinct !{!36, !"LVerDomain"}
!37 = !{!38}
!38 = distinct !{!38, !36}
!39 = distinct !{!39, !12, !13, !14}
!40 = distinct !{!40, !16}
!41 = distinct !{!41, !12, !13}
!42 = distinct !{!42, !12}
!43 = distinct !{!43, !12}


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