; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (dtprfs)

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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b19 = external hidden global double, align 8

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

96:                                               ; preds = %15
  %97 = load ptr, ptr %17, align 8, !tbaa !5
  %98 = call i64 @lsame_(ptr noundef %97, ptr noundef @.str.2)
  %99 = icmp ne i64 %98, 0
  br i1 %99, label %102, label %100

100:                                              ; preds = %96
  %101 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -1, ptr %101, align 8, !tbaa !9
  br label %172

102:                                              ; preds = %96, %15
  %103 = load i64, ptr %56, align 8, !tbaa !9
  %104 = icmp ne i64 %103, 0
  br i1 %104, label %115, label %105

105:                                              ; preds = %102
  %106 = load ptr, ptr %18, align 8, !tbaa !5
  %107 = call i64 @lsame_(ptr noundef %106, ptr noundef @.str.3)
  %108 = icmp ne i64 %107, 0
  br i1 %108, label %115, label %109

109:                                              ; preds = %105
  %110 = load ptr, ptr %18, align 8, !tbaa !5
  %111 = call i64 @lsame_(ptr noundef %110, ptr noundef @.str.4)
  %112 = icmp ne i64 %111, 0
  br i1 %112, label %115, label %113

113:                                              ; preds = %109
  %114 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -2, ptr %114, align 8, !tbaa !9
  br label %171

115:                                              ; preds = %109, %105, %102
  %116 = load i64, ptr %58, align 8, !tbaa !9
  %117 = icmp ne i64 %116, 0
  br i1 %117, label %124, label %118

118:                                              ; preds = %115
  %119 = load ptr, ptr %19, align 8, !tbaa !5
  %120 = call i64 @lsame_(ptr noundef %119, ptr noundef @.str)
  %121 = icmp ne i64 %120, 0
  br i1 %121, label %124, label %122

122:                                              ; preds = %118
  %123 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -3, ptr %123, align 8, !tbaa !9
  br label %170

124:                                              ; preds = %118, %115
  %125 = load ptr, ptr %20, align 8, !tbaa !5
  %126 = load i64, ptr %125, align 8, !tbaa !9
  %127 = icmp slt i64 %126, 0
  br i1 %127, label %128, label %130

128:                                              ; preds = %124
  %129 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -4, ptr %129, align 8, !tbaa !9
  br label %169

130:                                              ; preds = %124
  %131 = load ptr, ptr %21, align 8, !tbaa !5
  %132 = load i64, ptr %131, align 8, !tbaa !9
  %133 = icmp slt i64 %132, 0
  br i1 %133, label %134, label %136

134:                                              ; preds = %130
  %135 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -5, ptr %135, align 8, !tbaa !9
  br label %168

136:                                              ; preds = %130
  %137 = load ptr, ptr %24, align 8, !tbaa !5
  %138 = load i64, ptr %137, align 8, !tbaa !9
  %139 = load ptr, ptr %20, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !9
  %141 = icmp sge i64 1, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %136
  br label %146

143:                                              ; preds = %136
  %144 = load ptr, ptr %20, align 8, !tbaa !5
  %145 = load i64, ptr %144, align 8, !tbaa !9
  br label %146

146:                                              ; preds = %143, %142
  %147 = phi i64 [ 1, %142 ], [ %145, %143 ]
  %148 = icmp slt i64 %138, %147
  br i1 %148, label %149, label %151

149:                                              ; preds = %146
  %150 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -8, ptr %150, align 8, !tbaa !9
  br label %167

151:                                              ; preds = %146
  %152 = load ptr, ptr %26, align 8, !tbaa !5
  %153 = load i64, ptr %152, align 8, !tbaa !9
  %154 = load ptr, ptr %20, align 8, !tbaa !5
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = icmp sge i64 1, %155
  br i1 %156, label %157, label %158

157:                                              ; preds = %151
  br label %161

158:                                              ; preds = %151
  %159 = load ptr, ptr %20, align 8, !tbaa !5
  %160 = load i64, ptr %159, align 8, !tbaa !9
  br label %161

161:                                              ; preds = %158, %157
  %162 = phi i64 [ 1, %157 ], [ %160, %158 ]
  %163 = icmp slt i64 %153, %162
  br i1 %163, label %164, label %166

164:                                              ; preds = %161
  %165 = load ptr, ptr %31, align 8, !tbaa !5
  store i64 -10, ptr %165, align 8, !tbaa !9
  br label %166

166:                                              ; preds = %164, %161
  br label %167

167:                                              ; preds = %166, %149
  br label %168

168:                                              ; preds = %167, %134
  br label %169

169:                                              ; preds = %168, %128
  br label %170

170:                                              ; preds = %169, %122
  br label %171

171:                                              ; preds = %170, %113
  br label %172

172:                                              ; preds = %171, %100
  %173 = load ptr, ptr %31, align 8, !tbaa !5
  %174 = load i64, ptr %173, align 8, !tbaa !9
  %175 = icmp ne i64 %174, 0
  br i1 %175, label %176, label %181

176:                                              ; preds = %172
  %177 = load ptr, ptr %31, align 8, !tbaa !5
  %178 = load i64, ptr %177, align 8, !tbaa !9
  %179 = sub nsw i64 0, %178
  store i64 %179, ptr %36, align 8, !tbaa !9
  %180 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %36)
  store i32 0, ptr %16, align 4
  store i32 1, ptr %60, align 4
  br label %1259

181:                                              ; preds = %172
  %182 = load ptr, ptr %20, align 8, !tbaa !5
  %183 = load i64, ptr %182, align 8, !tbaa !9
  %184 = icmp eq i64 %183, 0
  br i1 %184, label %189, label %185

185:                                              ; preds = %181
  %186 = load ptr, ptr %21, align 8, !tbaa !5
  %187 = load i64, ptr %186, align 8, !tbaa !9
  %188 = icmp eq i64 %187, 0
  br i1 %188, label %189, label %207

189:                                              ; preds = %185, %181
  %190 = load ptr, ptr %21, align 8, !tbaa !5
  %191 = load i64, ptr %190, align 8, !tbaa !9
  store i64 %191, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %43, align 8, !tbaa !9
  br label %192

192:                                              ; preds = %203, %189
  %193 = load i64, ptr %43, align 8, !tbaa !9
  %194 = load i64, ptr %36, align 8, !tbaa !9
  %195 = icmp sle i64 %193, %194
  br i1 %195, label %196, label %206

196:                                              ; preds = %192
  %197 = load ptr, ptr %27, align 8, !tbaa !5
  %198 = load i64, ptr %43, align 8, !tbaa !9
  %199 = getelementptr inbounds double, ptr %197, i64 %198
  store double 0.000000e+00, ptr %199, align 8, !tbaa !11
  %200 = load ptr, ptr %28, align 8, !tbaa !5
  %201 = load i64, ptr %43, align 8, !tbaa !9
  %202 = getelementptr inbounds double, ptr %200, i64 %201
  store double 0.000000e+00, ptr %202, align 8, !tbaa !11
  br label %203

203:                                              ; preds = %196
  %204 = load i64, ptr %43, align 8, !tbaa !9
  %205 = add nsw i64 %204, 1
  store i64 %205, ptr %43, align 8, !tbaa !9
  br label %192, !llvm.loop !13

206:                                              ; preds = %192
  store i32 0, ptr %16, align 4
  store i32 1, ptr %60, align 4
  br label %1259

207:                                              ; preds = %185
  %208 = load i64, ptr %56, align 8, !tbaa !9
  %209 = icmp ne i64 %208, 0
  br i1 %209, label %210, label %212

210:                                              ; preds = %207
  %211 = getelementptr inbounds [1 x i8], ptr %57, i64 0, i64 0
  store i8 84, ptr %211, align 1, !tbaa !15
  br label %214

212:                                              ; preds = %207
  %213 = getelementptr inbounds [1 x i8], ptr %57, i64 0, i64 0
  store i8 78, ptr %213, align 1, !tbaa !15
  br label %214

214:                                              ; preds = %212, %210
  %215 = load ptr, ptr %20, align 8, !tbaa !5
  %216 = load i64, ptr %215, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  store i64 %217, ptr %48, align 8, !tbaa !9
  %218 = call double @dlamch_(ptr noundef @.str.6)
  store double %218, ptr %49, align 8, !tbaa !11
  %219 = call double @dlamch_(ptr noundef @.str.7)
  store double %219, ptr %55, align 8, !tbaa !11
  %220 = load i64, ptr %48, align 8, !tbaa !9
  %221 = sitofp i64 %220 to double
  %222 = load double, ptr %55, align 8, !tbaa !11
  %223 = fmul double %221, %222
  store double %223, ptr %51, align 8, !tbaa !11
  %224 = load double, ptr %51, align 8, !tbaa !11
  %225 = load double, ptr %49, align 8, !tbaa !11
  %226 = fdiv double %224, %225
  store double %226, ptr %52, align 8, !tbaa !11
  %227 = load ptr, ptr %21, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !9
  store i64 %228, ptr %36, align 8, !tbaa !9
  store i64 1, ptr %43, align 8, !tbaa !9
  br label %229

229:                                              ; preds = %1255, %214
  %230 = load i64, ptr %43, align 8, !tbaa !9
  %231 = load i64, ptr %36, align 8, !tbaa !9
  %232 = icmp sle i64 %230, %231
  br i1 %232, label %233, label %1258

233:                                              ; preds = %229
  %234 = load ptr, ptr %20, align 8, !tbaa !5
  %235 = load ptr, ptr %25, align 8, !tbaa !5
  %236 = load i64, ptr %43, align 8, !tbaa !9
  %237 = load i64, ptr %34, align 8, !tbaa !9
  %238 = mul nsw i64 %236, %237
  %239 = add nsw i64 %238, 1
  %240 = getelementptr inbounds double, ptr %235, i64 %239
  %241 = load ptr, ptr %29, align 8, !tbaa !5
  %242 = load ptr, ptr %20, align 8, !tbaa !5
  %243 = load i64, ptr %242, align 8, !tbaa !9
  %244 = add nsw i64 %243, 1
  %245 = getelementptr inbounds double, ptr %241, i64 %244
  %246 = call i32 @f2c_dcopy(ptr noundef %234, ptr noundef %240, ptr noundef @c__1, ptr noundef %245, ptr noundef @c__1)
  %247 = load ptr, ptr %17, align 8, !tbaa !5
  %248 = load ptr, ptr %18, align 8, !tbaa !5
  %249 = load ptr, ptr %19, align 8, !tbaa !5
  %250 = load ptr, ptr %20, align 8, !tbaa !5
  %251 = load ptr, ptr %22, align 8, !tbaa !5
  %252 = getelementptr inbounds double, ptr %251, i64 1
  %253 = load ptr, ptr %29, align 8, !tbaa !5
  %254 = load ptr, ptr %20, align 8, !tbaa !5
  %255 = load i64, ptr %254, align 8, !tbaa !9
  %256 = add nsw i64 %255, 1
  %257 = getelementptr inbounds double, ptr %253, i64 %256
  %258 = call i32 @f2c_dtpmv(ptr noundef %247, ptr noundef %248, ptr noundef %249, ptr noundef %250, ptr noundef %252, ptr noundef %257, ptr noundef @c__1)
  %259 = load ptr, ptr %20, align 8, !tbaa !5
  %260 = load ptr, ptr %23, align 8, !tbaa !5
  %261 = load i64, ptr %43, align 8, !tbaa !9
  %262 = load i64, ptr %32, align 8, !tbaa !9
  %263 = mul nsw i64 %261, %262
  %264 = add nsw i64 %263, 1
  %265 = getelementptr inbounds double, ptr %260, i64 %264
  %266 = load ptr, ptr %29, align 8, !tbaa !5
  %267 = load ptr, ptr %20, align 8, !tbaa !5
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = add nsw i64 %268, 1
  %270 = getelementptr inbounds double, ptr %266, i64 %269
  %271 = call i32 @f2c_daxpy(ptr noundef %259, ptr noundef @c_b19, ptr noundef %265, ptr noundef @c__1, ptr noundef %270, ptr noundef @c__1)
  %272 = load ptr, ptr %20, align 8, !tbaa !5
  %273 = load i64, ptr %272, align 8, !tbaa !9
  store i64 %273, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %274

274:                                              ; preds = %299, %233
  %275 = load i64, ptr %42, align 8, !tbaa !9
  %276 = load i64, ptr %37, align 8, !tbaa !9
  %277 = icmp sle i64 %275, %276
  br i1 %277, label %278, label %302

278:                                              ; preds = %274
  %279 = load ptr, ptr %23, align 8, !tbaa !5
  %280 = load i64, ptr %42, align 8, !tbaa !9
  %281 = load i64, ptr %43, align 8, !tbaa !9
  %282 = load i64, ptr %32, align 8, !tbaa !9
  %283 = mul nsw i64 %281, %282
  %284 = add nsw i64 %280, %283
  %285 = getelementptr inbounds double, ptr %279, i64 %284
  %286 = load double, ptr %285, align 8, !tbaa !11
  store double %286, ptr %39, align 8, !tbaa !11
  %287 = load double, ptr %39, align 8, !tbaa !11
  %288 = fcmp oge double %287, 0.000000e+00
  br i1 %288, label %289, label %291

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

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

294:                                              ; preds = %291, %289
  %295 = phi double [ %290, %289 ], [ %293, %291 ]
  %296 = load ptr, ptr %29, align 8, !tbaa !5
  %297 = load i64, ptr %42, align 8, !tbaa !9
  %298 = getelementptr inbounds double, ptr %296, i64 %297
  store double %295, ptr %298, align 8, !tbaa !11
  br label %299

299:                                              ; preds = %294
  %300 = load i64, ptr %42, align 8, !tbaa !9
  %301 = add nsw i64 %300, 1
  store i64 %301, ptr %42, align 8, !tbaa !9
  br label %274, !llvm.loop !16

302:                                              ; preds = %274
  %303 = load i64, ptr %56, align 8, !tbaa !9
  %304 = icmp ne i64 %303, 0
  br i1 %304, label %305, label %601

305:                                              ; preds = %302
  %306 = load i64, ptr %54, align 8, !tbaa !9
  %307 = icmp ne i64 %306, 0
  br i1 %307, label %308, label %447

308:                                              ; preds = %305
  store i64 1, ptr %46, align 8, !tbaa !9
  %309 = load i64, ptr %58, align 8, !tbaa !9
  %310 = icmp ne i64 %309, 0
  br i1 %310, label %311, label %375

311:                                              ; preds = %308
  %312 = load ptr, ptr %20, align 8, !tbaa !5
  %313 = load i64, ptr %312, align 8, !tbaa !9
  store i64 %313, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %314

314:                                              ; preds = %371, %311
  %315 = load i64, ptr %44, align 8, !tbaa !9
  %316 = load i64, ptr %37, align 8, !tbaa !9
  %317 = icmp sle i64 %315, %316
  br i1 %317, label %318, label %374

318:                                              ; preds = %314
  %319 = load ptr, ptr %25, align 8, !tbaa !5
  %320 = load i64, ptr %44, align 8, !tbaa !9
  %321 = load i64, ptr %43, align 8, !tbaa !9
  %322 = load i64, ptr %34, align 8, !tbaa !9
  %323 = mul nsw i64 %321, %322
  %324 = add nsw i64 %320, %323
  %325 = getelementptr inbounds double, ptr %319, i64 %324
  %326 = load double, ptr %325, align 8, !tbaa !11
  store double %326, ptr %39, align 8, !tbaa !11
  %327 = load double, ptr %39, align 8, !tbaa !11
  %328 = fcmp oge double %327, 0.000000e+00
  br i1 %328, label %329, label %331

329:                                              ; preds = %318
  %330 = load double, ptr %39, align 8, !tbaa !11
  br label %334

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

334:                                              ; preds = %331, %329
  %335 = phi double [ %330, %329 ], [ %333, %331 ]
  store double %335, ptr %47, align 8, !tbaa !11
  %336 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %336, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %337

337:                                              ; preds = %364, %334
  %338 = load i64, ptr %42, align 8, !tbaa !9
  %339 = load i64, ptr %38, align 8, !tbaa !9
  %340 = icmp sle i64 %338, %339
  br i1 %340, label %341, label %367

341:                                              ; preds = %337
  %342 = load ptr, ptr %22, align 8, !tbaa !5
  %343 = load i64, ptr %46, align 8, !tbaa !9
  %344 = load i64, ptr %42, align 8, !tbaa !9
  %345 = add nsw i64 %343, %344
  %346 = sub nsw i64 %345, 1
  %347 = getelementptr inbounds double, ptr %342, i64 %346
  %348 = load double, ptr %347, align 8, !tbaa !11
  store double %348, ptr %39, align 8, !tbaa !11
  %349 = load double, ptr %39, align 8, !tbaa !11
  %350 = fcmp oge double %349, 0.000000e+00
  br i1 %350, label %351, label %353

351:                                              ; preds = %341
  %352 = load double, ptr %39, align 8, !tbaa !11
  br label %356

353:                                              ; preds = %341
  %354 = load double, ptr %39, align 8, !tbaa !11
  %355 = fneg double %354
  br label %356

356:                                              ; preds = %353, %351
  %357 = phi double [ %352, %351 ], [ %355, %353 ]
  %358 = load double, ptr %47, align 8, !tbaa !11
  %359 = load ptr, ptr %29, align 8, !tbaa !5
  %360 = load i64, ptr %42, align 8, !tbaa !9
  %361 = getelementptr inbounds double, ptr %359, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !11
  %363 = call double @llvm.fmuladd.f64(double %357, double %358, double %362)
  store double %363, ptr %361, align 8, !tbaa !11
  br label %364

364:                                              ; preds = %356
  %365 = load i64, ptr %42, align 8, !tbaa !9
  %366 = add nsw i64 %365, 1
  store i64 %366, ptr %42, align 8, !tbaa !9
  br label %337, !llvm.loop !17

367:                                              ; preds = %337
  %368 = load i64, ptr %44, align 8, !tbaa !9
  %369 = load i64, ptr %46, align 8, !tbaa !9
  %370 = add nsw i64 %369, %368
  store i64 %370, ptr %46, align 8, !tbaa !9
  br label %371

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

374:                                              ; preds = %314
  br label %446

375:                                              ; preds = %308
  %376 = load ptr, ptr %20, align 8, !tbaa !5
  %377 = load i64, ptr %376, align 8, !tbaa !9
  store i64 %377, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %378

378:                                              ; preds = %442, %375
  %379 = load i64, ptr %44, align 8, !tbaa !9
  %380 = load i64, ptr %37, align 8, !tbaa !9
  %381 = icmp sle i64 %379, %380
  br i1 %381, label %382, label %445

382:                                              ; preds = %378
  %383 = load ptr, ptr %25, align 8, !tbaa !5
  %384 = load i64, ptr %44, align 8, !tbaa !9
  %385 = load i64, ptr %43, align 8, !tbaa !9
  %386 = load i64, ptr %34, align 8, !tbaa !9
  %387 = mul nsw i64 %385, %386
  %388 = add nsw i64 %384, %387
  %389 = getelementptr inbounds double, ptr %383, i64 %388
  %390 = load double, ptr %389, align 8, !tbaa !11
  store double %390, ptr %39, align 8, !tbaa !11
  %391 = load double, ptr %39, align 8, !tbaa !11
  %392 = fcmp oge double %391, 0.000000e+00
  br i1 %392, label %393, label %395

393:                                              ; preds = %382
  %394 = load double, ptr %39, align 8, !tbaa !11
  br label %398

395:                                              ; preds = %382
  %396 = load double, ptr %39, align 8, !tbaa !11
  %397 = fneg double %396
  br label %398

398:                                              ; preds = %395, %393
  %399 = phi double [ %394, %393 ], [ %397, %395 ]
  store double %399, ptr %47, align 8, !tbaa !11
  %400 = load i64, ptr %44, align 8, !tbaa !9
  %401 = sub nsw i64 %400, 1
  store i64 %401, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %402

402:                                              ; preds = %429, %398
  %403 = load i64, ptr %42, align 8, !tbaa !9
  %404 = load i64, ptr %38, align 8, !tbaa !9
  %405 = icmp sle i64 %403, %404
  br i1 %405, label %406, label %432

406:                                              ; preds = %402
  %407 = load ptr, ptr %22, align 8, !tbaa !5
  %408 = load i64, ptr %46, align 8, !tbaa !9
  %409 = load i64, ptr %42, align 8, !tbaa !9
  %410 = add nsw i64 %408, %409
  %411 = sub nsw i64 %410, 1
  %412 = getelementptr inbounds double, ptr %407, i64 %411
  %413 = load double, ptr %412, align 8, !tbaa !11
  store double %413, ptr %39, align 8, !tbaa !11
  %414 = load double, ptr %39, align 8, !tbaa !11
  %415 = fcmp oge double %414, 0.000000e+00
  br i1 %415, label %416, label %418

416:                                              ; preds = %406
  %417 = load double, ptr %39, align 8, !tbaa !11
  br label %421

418:                                              ; preds = %406
  %419 = load double, ptr %39, align 8, !tbaa !11
  %420 = fneg double %419
  br label %421

421:                                              ; preds = %418, %416
  %422 = phi double [ %417, %416 ], [ %420, %418 ]
  %423 = load double, ptr %47, align 8, !tbaa !11
  %424 = load ptr, ptr %29, align 8, !tbaa !5
  %425 = load i64, ptr %42, align 8, !tbaa !9
  %426 = getelementptr inbounds double, ptr %424, i64 %425
  %427 = load double, ptr %426, align 8, !tbaa !11
  %428 = call double @llvm.fmuladd.f64(double %422, double %423, double %427)
  store double %428, ptr %426, align 8, !tbaa !11
  br label %429

429:                                              ; preds = %421
  %430 = load i64, ptr %42, align 8, !tbaa !9
  %431 = add nsw i64 %430, 1
  store i64 %431, ptr %42, align 8, !tbaa !9
  br label %402, !llvm.loop !19

432:                                              ; preds = %402
  %433 = load double, ptr %47, align 8, !tbaa !11
  %434 = load ptr, ptr %29, align 8, !tbaa !5
  %435 = load i64, ptr %44, align 8, !tbaa !9
  %436 = getelementptr inbounds double, ptr %434, i64 %435
  %437 = load double, ptr %436, align 8, !tbaa !11
  %438 = fadd double %437, %433
  store double %438, ptr %436, align 8, !tbaa !11
  %439 = load i64, ptr %44, align 8, !tbaa !9
  %440 = load i64, ptr %46, align 8, !tbaa !9
  %441 = add nsw i64 %440, %439
  store i64 %441, ptr %46, align 8, !tbaa !9
  br label %442

442:                                              ; preds = %432
  %443 = load i64, ptr %44, align 8, !tbaa !9
  %444 = add nsw i64 %443, 1
  store i64 %444, ptr %44, align 8, !tbaa !9
  br label %378, !llvm.loop !20

445:                                              ; preds = %378
  br label %446

446:                                              ; preds = %445, %374
  br label %600

447:                                              ; preds = %305
  store i64 1, ptr %46, align 8, !tbaa !9
  %448 = load i64, ptr %58, align 8, !tbaa !9
  %449 = icmp ne i64 %448, 0
  br i1 %449, label %450, label %521

450:                                              ; preds = %447
  %451 = load ptr, ptr %20, align 8, !tbaa !5
  %452 = load i64, ptr %451, align 8, !tbaa !9
  store i64 %452, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %453

453:                                              ; preds = %517, %450
  %454 = load i64, ptr %44, align 8, !tbaa !9
  %455 = load i64, ptr %37, align 8, !tbaa !9
  %456 = icmp sle i64 %454, %455
  br i1 %456, label %457, label %520

457:                                              ; preds = %453
  %458 = load ptr, ptr %25, align 8, !tbaa !5
  %459 = load i64, ptr %44, align 8, !tbaa !9
  %460 = load i64, ptr %43, align 8, !tbaa !9
  %461 = load i64, ptr %34, align 8, !tbaa !9
  %462 = mul nsw i64 %460, %461
  %463 = add nsw i64 %459, %462
  %464 = getelementptr inbounds double, ptr %458, i64 %463
  %465 = load double, ptr %464, align 8, !tbaa !11
  store double %465, ptr %39, align 8, !tbaa !11
  %466 = load double, ptr %39, align 8, !tbaa !11
  %467 = fcmp oge double %466, 0.000000e+00
  br i1 %467, label %468, label %470

468:                                              ; preds = %457
  %469 = load double, ptr %39, align 8, !tbaa !11
  br label %473

470:                                              ; preds = %457
  %471 = load double, ptr %39, align 8, !tbaa !11
  %472 = fneg double %471
  br label %473

473:                                              ; preds = %470, %468
  %474 = phi double [ %469, %468 ], [ %472, %470 ]
  store double %474, ptr %47, align 8, !tbaa !11
  %475 = load ptr, ptr %20, align 8, !tbaa !5
  %476 = load i64, ptr %475, align 8, !tbaa !9
  store i64 %476, ptr %38, align 8, !tbaa !9
  %477 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %477, ptr %42, align 8, !tbaa !9
  br label %478

478:                                              ; preds = %506, %473
  %479 = load i64, ptr %42, align 8, !tbaa !9
  %480 = load i64, ptr %38, align 8, !tbaa !9
  %481 = icmp sle i64 %479, %480
  br i1 %481, label %482, label %509

482:                                              ; preds = %478
  %483 = load ptr, ptr %22, align 8, !tbaa !5
  %484 = load i64, ptr %46, align 8, !tbaa !9
  %485 = load i64, ptr %42, align 8, !tbaa !9
  %486 = add nsw i64 %484, %485
  %487 = load i64, ptr %44, align 8, !tbaa !9
  %488 = sub nsw i64 %486, %487
  %489 = getelementptr inbounds double, ptr %483, i64 %488
  %490 = load double, ptr %489, align 8, !tbaa !11
  store double %490, ptr %39, align 8, !tbaa !11
  %491 = load double, ptr %39, align 8, !tbaa !11
  %492 = fcmp oge double %491, 0.000000e+00
  br i1 %492, label %493, label %495

493:                                              ; preds = %482
  %494 = load double, ptr %39, align 8, !tbaa !11
  br label %498

495:                                              ; preds = %482
  %496 = load double, ptr %39, align 8, !tbaa !11
  %497 = fneg double %496
  br label %498

498:                                              ; preds = %495, %493
  %499 = phi double [ %494, %493 ], [ %497, %495 ]
  %500 = load double, ptr %47, align 8, !tbaa !11
  %501 = load ptr, ptr %29, align 8, !tbaa !5
  %502 = load i64, ptr %42, align 8, !tbaa !9
  %503 = getelementptr inbounds double, ptr %501, i64 %502
  %504 = load double, ptr %503, align 8, !tbaa !11
  %505 = call double @llvm.fmuladd.f64(double %499, double %500, double %504)
  store double %505, ptr %503, align 8, !tbaa !11
  br label %506

506:                                              ; preds = %498
  %507 = load i64, ptr %42, align 8, !tbaa !9
  %508 = add nsw i64 %507, 1
  store i64 %508, ptr %42, align 8, !tbaa !9
  br label %478, !llvm.loop !21

509:                                              ; preds = %478
  %510 = load i64, ptr %46, align 8, !tbaa !9
  %511 = load ptr, ptr %20, align 8, !tbaa !5
  %512 = load i64, ptr %511, align 8, !tbaa !9
  %513 = add nsw i64 %510, %512
  %514 = load i64, ptr %44, align 8, !tbaa !9
  %515 = sub nsw i64 %513, %514
  %516 = add nsw i64 %515, 1
  store i64 %516, ptr %46, align 8, !tbaa !9
  br label %517

517:                                              ; preds = %509
  %518 = load i64, ptr %44, align 8, !tbaa !9
  %519 = add nsw i64 %518, 1
  store i64 %519, ptr %44, align 8, !tbaa !9
  br label %453, !llvm.loop !22

520:                                              ; preds = %453
  br label %599

521:                                              ; preds = %447
  %522 = load ptr, ptr %20, align 8, !tbaa !5
  %523 = load i64, ptr %522, align 8, !tbaa !9
  store i64 %523, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %524

524:                                              ; preds = %595, %521
  %525 = load i64, ptr %44, align 8, !tbaa !9
  %526 = load i64, ptr %37, align 8, !tbaa !9
  %527 = icmp sle i64 %525, %526
  br i1 %527, label %528, label %598

528:                                              ; preds = %524
  %529 = load ptr, ptr %25, align 8, !tbaa !5
  %530 = load i64, ptr %44, align 8, !tbaa !9
  %531 = load i64, ptr %43, align 8, !tbaa !9
  %532 = load i64, ptr %34, align 8, !tbaa !9
  %533 = mul nsw i64 %531, %532
  %534 = add nsw i64 %530, %533
  %535 = getelementptr inbounds double, ptr %529, i64 %534
  %536 = load double, ptr %535, align 8, !tbaa !11
  store double %536, ptr %39, align 8, !tbaa !11
  %537 = load double, ptr %39, align 8, !tbaa !11
  %538 = fcmp oge double %537, 0.000000e+00
  br i1 %538, label %539, label %541

539:                                              ; preds = %528
  %540 = load double, ptr %39, align 8, !tbaa !11
  br label %544

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

544:                                              ; preds = %541, %539
  %545 = phi double [ %540, %539 ], [ %543, %541 ]
  store double %545, ptr %47, align 8, !tbaa !11
  %546 = load ptr, ptr %20, align 8, !tbaa !5
  %547 = load i64, ptr %546, align 8, !tbaa !9
  store i64 %547, ptr %38, align 8, !tbaa !9
  %548 = load i64, ptr %44, align 8, !tbaa !9
  %549 = add nsw i64 %548, 1
  store i64 %549, ptr %42, align 8, !tbaa !9
  br label %550

550:                                              ; preds = %578, %544
  %551 = load i64, ptr %42, align 8, !tbaa !9
  %552 = load i64, ptr %38, align 8, !tbaa !9
  %553 = icmp sle i64 %551, %552
  br i1 %553, label %554, label %581

554:                                              ; preds = %550
  %555 = load ptr, ptr %22, align 8, !tbaa !5
  %556 = load i64, ptr %46, align 8, !tbaa !9
  %557 = load i64, ptr %42, align 8, !tbaa !9
  %558 = add nsw i64 %556, %557
  %559 = load i64, ptr %44, align 8, !tbaa !9
  %560 = sub nsw i64 %558, %559
  %561 = getelementptr inbounds double, ptr %555, i64 %560
  %562 = load double, ptr %561, align 8, !tbaa !11
  store double %562, ptr %39, align 8, !tbaa !11
  %563 = load double, ptr %39, align 8, !tbaa !11
  %564 = fcmp oge double %563, 0.000000e+00
  br i1 %564, label %565, label %567

565:                                              ; preds = %554
  %566 = load double, ptr %39, align 8, !tbaa !11
  br label %570

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

570:                                              ; preds = %567, %565
  %571 = phi double [ %566, %565 ], [ %569, %567 ]
  %572 = load double, ptr %47, align 8, !tbaa !11
  %573 = load ptr, ptr %29, align 8, !tbaa !5
  %574 = load i64, ptr %42, align 8, !tbaa !9
  %575 = getelementptr inbounds double, ptr %573, i64 %574
  %576 = load double, ptr %575, align 8, !tbaa !11
  %577 = call double @llvm.fmuladd.f64(double %571, double %572, double %576)
  store double %577, ptr %575, align 8, !tbaa !11
  br label %578

578:                                              ; preds = %570
  %579 = load i64, ptr %42, align 8, !tbaa !9
  %580 = add nsw i64 %579, 1
  store i64 %580, ptr %42, align 8, !tbaa !9
  br label %550, !llvm.loop !23

581:                                              ; preds = %550
  %582 = load double, ptr %47, align 8, !tbaa !11
  %583 = load ptr, ptr %29, align 8, !tbaa !5
  %584 = load i64, ptr %44, align 8, !tbaa !9
  %585 = getelementptr inbounds double, ptr %583, i64 %584
  %586 = load double, ptr %585, align 8, !tbaa !11
  %587 = fadd double %586, %582
  store double %587, ptr %585, align 8, !tbaa !11
  %588 = load i64, ptr %46, align 8, !tbaa !9
  %589 = load ptr, ptr %20, align 8, !tbaa !5
  %590 = load i64, ptr %589, align 8, !tbaa !9
  %591 = add nsw i64 %588, %590
  %592 = load i64, ptr %44, align 8, !tbaa !9
  %593 = sub nsw i64 %591, %592
  %594 = add nsw i64 %593, 1
  store i64 %594, ptr %46, align 8, !tbaa !9
  br label %595

595:                                              ; preds = %581
  %596 = load i64, ptr %44, align 8, !tbaa !9
  %597 = add nsw i64 %596, 1
  store i64 %597, ptr %44, align 8, !tbaa !9
  br label %524, !llvm.loop !24

598:                                              ; preds = %524
  br label %599

599:                                              ; preds = %598, %520
  br label %600

600:                                              ; preds = %599, %446
  br label %927

601:                                              ; preds = %302
  %602 = load i64, ptr %54, align 8, !tbaa !9
  %603 = icmp ne i64 %602, 0
  br i1 %603, label %604, label %758

604:                                              ; preds = %601
  store i64 1, ptr %46, align 8, !tbaa !9
  %605 = load i64, ptr %58, align 8, !tbaa !9
  %606 = icmp ne i64 %605, 0
  br i1 %606, label %607, label %673

607:                                              ; preds = %604
  %608 = load ptr, ptr %20, align 8, !tbaa !5
  %609 = load i64, ptr %608, align 8, !tbaa !9
  store i64 %609, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %610

610:                                              ; preds = %669, %607
  %611 = load i64, ptr %44, align 8, !tbaa !9
  %612 = load i64, ptr %37, align 8, !tbaa !9
  %613 = icmp sle i64 %611, %612
  br i1 %613, label %614, label %672

614:                                              ; preds = %610
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %615 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %615, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %616

616:                                              ; preds = %656, %614
  %617 = load i64, ptr %42, align 8, !tbaa !9
  %618 = load i64, ptr %38, align 8, !tbaa !9
  %619 = icmp sle i64 %617, %618
  br i1 %619, label %620, label %659

620:                                              ; preds = %616
  %621 = load ptr, ptr %22, align 8, !tbaa !5
  %622 = load i64, ptr %46, align 8, !tbaa !9
  %623 = load i64, ptr %42, align 8, !tbaa !9
  %624 = add nsw i64 %622, %623
  %625 = sub nsw i64 %624, 1
  %626 = getelementptr inbounds double, ptr %621, i64 %625
  %627 = load double, ptr %626, align 8, !tbaa !11
  store double %627, ptr %39, align 8, !tbaa !11
  %628 = load double, ptr %39, align 8, !tbaa !11
  %629 = fcmp oge double %628, 0.000000e+00
  br i1 %629, label %630, label %632

630:                                              ; preds = %620
  %631 = load double, ptr %39, align 8, !tbaa !11
  br label %635

632:                                              ; preds = %620
  %633 = load double, ptr %39, align 8, !tbaa !11
  %634 = fneg double %633
  br label %635

635:                                              ; preds = %632, %630
  %636 = phi double [ %631, %630 ], [ %634, %632 ]
  %637 = load ptr, ptr %25, align 8, !tbaa !5
  %638 = load i64, ptr %42, align 8, !tbaa !9
  %639 = load i64, ptr %43, align 8, !tbaa !9
  %640 = load i64, ptr %34, align 8, !tbaa !9
  %641 = mul nsw i64 %639, %640
  %642 = add nsw i64 %638, %641
  %643 = getelementptr inbounds double, ptr %637, i64 %642
  %644 = load double, ptr %643, align 8, !tbaa !11
  store double %644, ptr %40, align 8, !tbaa !11
  %645 = load double, ptr %40, align 8, !tbaa !11
  %646 = fcmp oge double %645, 0.000000e+00
  br i1 %646, label %647, label %649

647:                                              ; preds = %635
  %648 = load double, ptr %40, align 8, !tbaa !11
  br label %652

649:                                              ; preds = %635
  %650 = load double, ptr %40, align 8, !tbaa !11
  %651 = fneg double %650
  br label %652

652:                                              ; preds = %649, %647
  %653 = phi double [ %648, %647 ], [ %651, %649 ]
  %654 = load double, ptr %45, align 8, !tbaa !11
  %655 = call double @llvm.fmuladd.f64(double %636, double %653, double %654)
  store double %655, ptr %45, align 8, !tbaa !11
  br label %656

656:                                              ; preds = %652
  %657 = load i64, ptr %42, align 8, !tbaa !9
  %658 = add nsw i64 %657, 1
  store i64 %658, ptr %42, align 8, !tbaa !9
  br label %616, !llvm.loop !25

659:                                              ; preds = %616
  %660 = load double, ptr %45, align 8, !tbaa !11
  %661 = load ptr, ptr %29, align 8, !tbaa !5
  %662 = load i64, ptr %44, align 8, !tbaa !9
  %663 = getelementptr inbounds double, ptr %661, i64 %662
  %664 = load double, ptr %663, align 8, !tbaa !11
  %665 = fadd double %664, %660
  store double %665, ptr %663, align 8, !tbaa !11
  %666 = load i64, ptr %44, align 8, !tbaa !9
  %667 = load i64, ptr %46, align 8, !tbaa !9
  %668 = add nsw i64 %667, %666
  store i64 %668, ptr %46, align 8, !tbaa !9
  br label %669

669:                                              ; preds = %659
  %670 = load i64, ptr %44, align 8, !tbaa !9
  %671 = add nsw i64 %670, 1
  store i64 %671, ptr %44, align 8, !tbaa !9
  br label %610, !llvm.loop !26

672:                                              ; preds = %610
  br label %757

673:                                              ; preds = %604
  %674 = load ptr, ptr %20, align 8, !tbaa !5
  %675 = load i64, ptr %674, align 8, !tbaa !9
  store i64 %675, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %676

676:                                              ; preds = %753, %673
  %677 = load i64, ptr %44, align 8, !tbaa !9
  %678 = load i64, ptr %37, align 8, !tbaa !9
  %679 = icmp sle i64 %677, %678
  br i1 %679, label %680, label %756

680:                                              ; preds = %676
  %681 = load ptr, ptr %25, align 8, !tbaa !5
  %682 = load i64, ptr %44, align 8, !tbaa !9
  %683 = load i64, ptr %43, align 8, !tbaa !9
  %684 = load i64, ptr %34, align 8, !tbaa !9
  %685 = mul nsw i64 %683, %684
  %686 = add nsw i64 %682, %685
  %687 = getelementptr inbounds double, ptr %681, i64 %686
  %688 = load double, ptr %687, align 8, !tbaa !11
  store double %688, ptr %39, align 8, !tbaa !11
  %689 = load double, ptr %39, align 8, !tbaa !11
  %690 = fcmp oge double %689, 0.000000e+00
  br i1 %690, label %691, label %693

691:                                              ; preds = %680
  %692 = load double, ptr %39, align 8, !tbaa !11
  br label %696

693:                                              ; preds = %680
  %694 = load double, ptr %39, align 8, !tbaa !11
  %695 = fneg double %694
  br label %696

696:                                              ; preds = %693, %691
  %697 = phi double [ %692, %691 ], [ %695, %693 ]
  store double %697, ptr %45, align 8, !tbaa !11
  %698 = load i64, ptr %44, align 8, !tbaa !9
  %699 = sub nsw i64 %698, 1
  store i64 %699, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %700

700:                                              ; preds = %740, %696
  %701 = load i64, ptr %42, align 8, !tbaa !9
  %702 = load i64, ptr %38, align 8, !tbaa !9
  %703 = icmp sle i64 %701, %702
  br i1 %703, label %704, label %743

704:                                              ; preds = %700
  %705 = load ptr, ptr %22, align 8, !tbaa !5
  %706 = load i64, ptr %46, align 8, !tbaa !9
  %707 = load i64, ptr %42, align 8, !tbaa !9
  %708 = add nsw i64 %706, %707
  %709 = sub nsw i64 %708, 1
  %710 = getelementptr inbounds double, ptr %705, i64 %709
  %711 = load double, ptr %710, align 8, !tbaa !11
  store double %711, ptr %39, align 8, !tbaa !11
  %712 = load double, ptr %39, align 8, !tbaa !11
  %713 = fcmp oge double %712, 0.000000e+00
  br i1 %713, label %714, label %716

714:                                              ; preds = %704
  %715 = load double, ptr %39, align 8, !tbaa !11
  br label %719

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

719:                                              ; preds = %716, %714
  %720 = phi double [ %715, %714 ], [ %718, %716 ]
  %721 = load ptr, ptr %25, align 8, !tbaa !5
  %722 = load i64, ptr %42, align 8, !tbaa !9
  %723 = load i64, ptr %43, align 8, !tbaa !9
  %724 = load i64, ptr %34, align 8, !tbaa !9
  %725 = mul nsw i64 %723, %724
  %726 = add nsw i64 %722, %725
  %727 = getelementptr inbounds double, ptr %721, i64 %726
  %728 = load double, ptr %727, align 8, !tbaa !11
  store double %728, ptr %40, align 8, !tbaa !11
  %729 = load double, ptr %40, align 8, !tbaa !11
  %730 = fcmp oge double %729, 0.000000e+00
  br i1 %730, label %731, label %733

731:                                              ; preds = %719
  %732 = load double, ptr %40, align 8, !tbaa !11
  br label %736

733:                                              ; preds = %719
  %734 = load double, ptr %40, align 8, !tbaa !11
  %735 = fneg double %734
  br label %736

736:                                              ; preds = %733, %731
  %737 = phi double [ %732, %731 ], [ %735, %733 ]
  %738 = load double, ptr %45, align 8, !tbaa !11
  %739 = call double @llvm.fmuladd.f64(double %720, double %737, double %738)
  store double %739, ptr %45, align 8, !tbaa !11
  br label %740

740:                                              ; preds = %736
  %741 = load i64, ptr %42, align 8, !tbaa !9
  %742 = add nsw i64 %741, 1
  store i64 %742, ptr %42, align 8, !tbaa !9
  br label %700, !llvm.loop !27

743:                                              ; preds = %700
  %744 = load double, ptr %45, align 8, !tbaa !11
  %745 = load ptr, ptr %29, align 8, !tbaa !5
  %746 = load i64, ptr %44, align 8, !tbaa !9
  %747 = getelementptr inbounds double, ptr %745, i64 %746
  %748 = load double, ptr %747, align 8, !tbaa !11
  %749 = fadd double %748, %744
  store double %749, ptr %747, align 8, !tbaa !11
  %750 = load i64, ptr %44, align 8, !tbaa !9
  %751 = load i64, ptr %46, align 8, !tbaa !9
  %752 = add nsw i64 %751, %750
  store i64 %752, ptr %46, align 8, !tbaa !9
  br label %753

753:                                              ; preds = %743
  %754 = load i64, ptr %44, align 8, !tbaa !9
  %755 = add nsw i64 %754, 1
  store i64 %755, ptr %44, align 8, !tbaa !9
  br label %676, !llvm.loop !28

756:                                              ; preds = %676
  br label %757

757:                                              ; preds = %756, %672
  br label %926

758:                                              ; preds = %601
  store i64 1, ptr %46, align 8, !tbaa !9
  %759 = load i64, ptr %58, align 8, !tbaa !9
  %760 = icmp ne i64 %759, 0
  br i1 %760, label %761, label %834

761:                                              ; preds = %758
  %762 = load ptr, ptr %20, align 8, !tbaa !5
  %763 = load i64, ptr %762, align 8, !tbaa !9
  store i64 %763, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %764

764:                                              ; preds = %830, %761
  %765 = load i64, ptr %44, align 8, !tbaa !9
  %766 = load i64, ptr %37, align 8, !tbaa !9
  %767 = icmp sle i64 %765, %766
  br i1 %767, label %768, label %833

768:                                              ; preds = %764
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %769 = load ptr, ptr %20, align 8, !tbaa !5
  %770 = load i64, ptr %769, align 8, !tbaa !9
  store i64 %770, ptr %38, align 8, !tbaa !9
  %771 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %771, ptr %42, align 8, !tbaa !9
  br label %772

772:                                              ; preds = %813, %768
  %773 = load i64, ptr %42, align 8, !tbaa !9
  %774 = load i64, ptr %38, align 8, !tbaa !9
  %775 = icmp sle i64 %773, %774
  br i1 %775, label %776, label %816

776:                                              ; preds = %772
  %777 = load ptr, ptr %22, align 8, !tbaa !5
  %778 = load i64, ptr %46, align 8, !tbaa !9
  %779 = load i64, ptr %42, align 8, !tbaa !9
  %780 = add nsw i64 %778, %779
  %781 = load i64, ptr %44, align 8, !tbaa !9
  %782 = sub nsw i64 %780, %781
  %783 = getelementptr inbounds double, ptr %777, i64 %782
  %784 = load double, ptr %783, align 8, !tbaa !11
  store double %784, ptr %39, align 8, !tbaa !11
  %785 = load double, ptr %39, align 8, !tbaa !11
  %786 = fcmp oge double %785, 0.000000e+00
  br i1 %786, label %787, label %789

787:                                              ; preds = %776
  %788 = load double, ptr %39, align 8, !tbaa !11
  br label %792

789:                                              ; preds = %776
  %790 = load double, ptr %39, align 8, !tbaa !11
  %791 = fneg double %790
  br label %792

792:                                              ; preds = %789, %787
  %793 = phi double [ %788, %787 ], [ %791, %789 ]
  %794 = load ptr, ptr %25, align 8, !tbaa !5
  %795 = load i64, ptr %42, align 8, !tbaa !9
  %796 = load i64, ptr %43, align 8, !tbaa !9
  %797 = load i64, ptr %34, align 8, !tbaa !9
  %798 = mul nsw i64 %796, %797
  %799 = add nsw i64 %795, %798
  %800 = getelementptr inbounds double, ptr %794, i64 %799
  %801 = load double, ptr %800, align 8, !tbaa !11
  store double %801, ptr %40, align 8, !tbaa !11
  %802 = load double, ptr %40, align 8, !tbaa !11
  %803 = fcmp oge double %802, 0.000000e+00
  br i1 %803, label %804, label %806

804:                                              ; preds = %792
  %805 = load double, ptr %40, align 8, !tbaa !11
  br label %809

806:                                              ; preds = %792
  %807 = load double, ptr %40, align 8, !tbaa !11
  %808 = fneg double %807
  br label %809

809:                                              ; preds = %806, %804
  %810 = phi double [ %805, %804 ], [ %808, %806 ]
  %811 = load double, ptr %45, align 8, !tbaa !11
  %812 = call double @llvm.fmuladd.f64(double %793, double %810, double %811)
  store double %812, ptr %45, align 8, !tbaa !11
  br label %813

813:                                              ; preds = %809
  %814 = load i64, ptr %42, align 8, !tbaa !9
  %815 = add nsw i64 %814, 1
  store i64 %815, ptr %42, align 8, !tbaa !9
  br label %772, !llvm.loop !29

816:                                              ; preds = %772
  %817 = load double, ptr %45, align 8, !tbaa !11
  %818 = load ptr, ptr %29, align 8, !tbaa !5
  %819 = load i64, ptr %44, align 8, !tbaa !9
  %820 = getelementptr inbounds double, ptr %818, i64 %819
  %821 = load double, ptr %820, align 8, !tbaa !11
  %822 = fadd double %821, %817
  store double %822, ptr %820, align 8, !tbaa !11
  %823 = load i64, ptr %46, align 8, !tbaa !9
  %824 = load ptr, ptr %20, align 8, !tbaa !5
  %825 = load i64, ptr %824, align 8, !tbaa !9
  %826 = add nsw i64 %823, %825
  %827 = load i64, ptr %44, align 8, !tbaa !9
  %828 = sub nsw i64 %826, %827
  %829 = add nsw i64 %828, 1
  store i64 %829, ptr %46, align 8, !tbaa !9
  br label %830

830:                                              ; preds = %816
  %831 = load i64, ptr %44, align 8, !tbaa !9
  %832 = add nsw i64 %831, 1
  store i64 %832, ptr %44, align 8, !tbaa !9
  br label %764, !llvm.loop !30

833:                                              ; preds = %764
  br label %925

834:                                              ; preds = %758
  %835 = load ptr, ptr %20, align 8, !tbaa !5
  %836 = load i64, ptr %835, align 8, !tbaa !9
  store i64 %836, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %837

837:                                              ; preds = %921, %834
  %838 = load i64, ptr %44, align 8, !tbaa !9
  %839 = load i64, ptr %37, align 8, !tbaa !9
  %840 = icmp sle i64 %838, %839
  br i1 %840, label %841, label %924

841:                                              ; preds = %837
  %842 = load ptr, ptr %25, align 8, !tbaa !5
  %843 = load i64, ptr %44, align 8, !tbaa !9
  %844 = load i64, ptr %43, align 8, !tbaa !9
  %845 = load i64, ptr %34, align 8, !tbaa !9
  %846 = mul nsw i64 %844, %845
  %847 = add nsw i64 %843, %846
  %848 = getelementptr inbounds double, ptr %842, i64 %847
  %849 = load double, ptr %848, align 8, !tbaa !11
  store double %849, ptr %39, align 8, !tbaa !11
  %850 = load double, ptr %39, align 8, !tbaa !11
  %851 = fcmp oge double %850, 0.000000e+00
  br i1 %851, label %852, label %854

852:                                              ; preds = %841
  %853 = load double, ptr %39, align 8, !tbaa !11
  br label %857

854:                                              ; preds = %841
  %855 = load double, ptr %39, align 8, !tbaa !11
  %856 = fneg double %855
  br label %857

857:                                              ; preds = %854, %852
  %858 = phi double [ %853, %852 ], [ %856, %854 ]
  store double %858, ptr %45, align 8, !tbaa !11
  %859 = load ptr, ptr %20, align 8, !tbaa !5
  %860 = load i64, ptr %859, align 8, !tbaa !9
  store i64 %860, ptr %38, align 8, !tbaa !9
  %861 = load i64, ptr %44, align 8, !tbaa !9
  %862 = add nsw i64 %861, 1
  store i64 %862, ptr %42, align 8, !tbaa !9
  br label %863

863:                                              ; preds = %904, %857
  %864 = load i64, ptr %42, align 8, !tbaa !9
  %865 = load i64, ptr %38, align 8, !tbaa !9
  %866 = icmp sle i64 %864, %865
  br i1 %866, label %867, label %907

867:                                              ; preds = %863
  %868 = load ptr, ptr %22, align 8, !tbaa !5
  %869 = load i64, ptr %46, align 8, !tbaa !9
  %870 = load i64, ptr %42, align 8, !tbaa !9
  %871 = add nsw i64 %869, %870
  %872 = load i64, ptr %44, align 8, !tbaa !9
  %873 = sub nsw i64 %871, %872
  %874 = getelementptr inbounds double, ptr %868, i64 %873
  %875 = load double, ptr %874, align 8, !tbaa !11
  store double %875, ptr %39, align 8, !tbaa !11
  %876 = load double, ptr %39, align 8, !tbaa !11
  %877 = fcmp oge double %876, 0.000000e+00
  br i1 %877, label %878, label %880

878:                                              ; preds = %867
  %879 = load double, ptr %39, align 8, !tbaa !11
  br label %883

880:                                              ; preds = %867
  %881 = load double, ptr %39, align 8, !tbaa !11
  %882 = fneg double %881
  br label %883

883:                                              ; preds = %880, %878
  %884 = phi double [ %879, %878 ], [ %882, %880 ]
  %885 = load ptr, ptr %25, align 8, !tbaa !5
  %886 = load i64, ptr %42, align 8, !tbaa !9
  %887 = load i64, ptr %43, align 8, !tbaa !9
  %888 = load i64, ptr %34, align 8, !tbaa !9
  %889 = mul nsw i64 %887, %888
  %890 = add nsw i64 %886, %889
  %891 = getelementptr inbounds double, ptr %885, i64 %890
  %892 = load double, ptr %891, align 8, !tbaa !11
  store double %892, ptr %40, align 8, !tbaa !11
  %893 = load double, ptr %40, align 8, !tbaa !11
  %894 = fcmp oge double %893, 0.000000e+00
  br i1 %894, label %895, label %897

895:                                              ; preds = %883
  %896 = load double, ptr %40, align 8, !tbaa !11
  br label %900

897:                                              ; preds = %883
  %898 = load double, ptr %40, align 8, !tbaa !11
  %899 = fneg double %898
  br label %900

900:                                              ; preds = %897, %895
  %901 = phi double [ %896, %895 ], [ %899, %897 ]
  %902 = load double, ptr %45, align 8, !tbaa !11
  %903 = call double @llvm.fmuladd.f64(double %884, double %901, double %902)
  store double %903, ptr %45, align 8, !tbaa !11
  br label %904

904:                                              ; preds = %900
  %905 = load i64, ptr %42, align 8, !tbaa !9
  %906 = add nsw i64 %905, 1
  store i64 %906, ptr %42, align 8, !tbaa !9
  br label %863, !llvm.loop !31

907:                                              ; preds = %863
  %908 = load double, ptr %45, align 8, !tbaa !11
  %909 = load ptr, ptr %29, align 8, !tbaa !5
  %910 = load i64, ptr %44, align 8, !tbaa !9
  %911 = getelementptr inbounds double, ptr %909, i64 %910
  %912 = load double, ptr %911, align 8, !tbaa !11
  %913 = fadd double %912, %908
  store double %913, ptr %911, align 8, !tbaa !11
  %914 = load i64, ptr %46, align 8, !tbaa !9
  %915 = load ptr, ptr %20, align 8, !tbaa !5
  %916 = load i64, ptr %915, align 8, !tbaa !9
  %917 = add nsw i64 %914, %916
  %918 = load i64, ptr %44, align 8, !tbaa !9
  %919 = sub nsw i64 %917, %918
  %920 = add nsw i64 %919, 1
  store i64 %920, ptr %46, align 8, !tbaa !9
  br label %921

921:                                              ; preds = %907
  %922 = load i64, ptr %44, align 8, !tbaa !9
  %923 = add nsw i64 %922, 1
  store i64 %923, ptr %44, align 8, !tbaa !9
  br label %837, !llvm.loop !32

924:                                              ; preds = %837
  br label %925

925:                                              ; preds = %924, %833
  br label %926

926:                                              ; preds = %925, %757
  br label %927

927:                                              ; preds = %926, %600
  store double 0.000000e+00, ptr %45, align 8, !tbaa !11
  %928 = load ptr, ptr %20, align 8, !tbaa !5
  %929 = load i64, ptr %928, align 8, !tbaa !9
  store i64 %929, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %930

930:                                              ; preds = %1010, %927
  %931 = load i64, ptr %42, align 8, !tbaa !9
  %932 = load i64, ptr %37, align 8, !tbaa !9
  %933 = icmp sle i64 %931, %932
  br i1 %933, label %934, label %1013

934:                                              ; preds = %930
  %935 = load ptr, ptr %29, align 8, !tbaa !5
  %936 = load i64, ptr %42, align 8, !tbaa !9
  %937 = getelementptr inbounds double, ptr %935, i64 %936
  %938 = load double, ptr %937, align 8, !tbaa !11
  %939 = load double, ptr %52, align 8, !tbaa !11
  %940 = fcmp ogt double %938, %939
  br i1 %940, label %941, label %973

941:                                              ; preds = %934
  %942 = load double, ptr %45, align 8, !tbaa !11
  store double %942, ptr %40, align 8, !tbaa !11
  %943 = load ptr, ptr %29, align 8, !tbaa !5
  %944 = load ptr, ptr %20, align 8, !tbaa !5
  %945 = load i64, ptr %944, align 8, !tbaa !9
  %946 = load i64, ptr %42, align 8, !tbaa !9
  %947 = add nsw i64 %945, %946
  %948 = getelementptr inbounds double, ptr %943, i64 %947
  %949 = load double, ptr %948, align 8, !tbaa !11
  store double %949, ptr %39, align 8, !tbaa !11
  %950 = load double, ptr %39, align 8, !tbaa !11
  %951 = fcmp oge double %950, 0.000000e+00
  br i1 %951, label %952, label %954

952:                                              ; preds = %941
  %953 = load double, ptr %39, align 8, !tbaa !11
  br label %957

954:                                              ; preds = %941
  %955 = load double, ptr %39, align 8, !tbaa !11
  %956 = fneg double %955
  br label %957

957:                                              ; preds = %954, %952
  %958 = phi double [ %953, %952 ], [ %956, %954 ]
  %959 = load ptr, ptr %29, align 8, !tbaa !5
  %960 = load i64, ptr %42, align 8, !tbaa !9
  %961 = getelementptr inbounds double, ptr %959, i64 %960
  %962 = load double, ptr %961, align 8, !tbaa !11
  %963 = fdiv double %958, %962
  store double %963, ptr %41, align 8, !tbaa !11
  %964 = load double, ptr %40, align 8, !tbaa !11
  %965 = load double, ptr %41, align 8, !tbaa !11
  %966 = fcmp oge double %964, %965
  br i1 %966, label %967, label %969

967:                                              ; preds = %957
  %968 = load double, ptr %40, align 8, !tbaa !11
  br label %971

969:                                              ; preds = %957
  %970 = load double, ptr %41, align 8, !tbaa !11
  br label %971

971:                                              ; preds = %969, %967
  %972 = phi double [ %968, %967 ], [ %970, %969 ]
  store double %972, ptr %45, align 8, !tbaa !11
  br label %1009

973:                                              ; preds = %934
  %974 = load double, ptr %45, align 8, !tbaa !11
  store double %974, ptr %40, align 8, !tbaa !11
  %975 = load ptr, ptr %29, align 8, !tbaa !5
  %976 = load ptr, ptr %20, align 8, !tbaa !5
  %977 = load i64, ptr %976, align 8, !tbaa !9
  %978 = load i64, ptr %42, align 8, !tbaa !9
  %979 = add nsw i64 %977, %978
  %980 = getelementptr inbounds double, ptr %975, i64 %979
  %981 = load double, ptr %980, align 8, !tbaa !11
  store double %981, ptr %39, align 8, !tbaa !11
  %982 = load double, ptr %39, align 8, !tbaa !11
  %983 = fcmp oge double %982, 0.000000e+00
  br i1 %983, label %984, label %986

984:                                              ; preds = %973
  %985 = load double, ptr %39, align 8, !tbaa !11
  br label %989

986:                                              ; preds = %973
  %987 = load double, ptr %39, align 8, !tbaa !11
  %988 = fneg double %987
  br label %989

989:                                              ; preds = %986, %984
  %990 = phi double [ %985, %984 ], [ %988, %986 ]
  %991 = load double, ptr %51, align 8, !tbaa !11
  %992 = fadd double %990, %991
  %993 = load ptr, ptr %29, align 8, !tbaa !5
  %994 = load i64, ptr %42, align 8, !tbaa !9
  %995 = getelementptr inbounds double, ptr %993, i64 %994
  %996 = load double, ptr %995, align 8, !tbaa !11
  %997 = load double, ptr %51, align 8, !tbaa !11
  %998 = fadd double %996, %997
  %999 = fdiv double %992, %998
  store double %999, ptr %41, align 8, !tbaa !11
  %1000 = load double, ptr %40, align 8, !tbaa !11
  %1001 = load double, ptr %41, align 8, !tbaa !11
  %1002 = fcmp oge double %1000, %1001
  br i1 %1002, label %1003, label %1005

1003:                                             ; preds = %989
  %1004 = load double, ptr %40, align 8, !tbaa !11
  br label %1007

1005:                                             ; preds = %989
  %1006 = load double, ptr %41, align 8, !tbaa !11
  br label %1007

1007:                                             ; preds = %1005, %1003
  %1008 = phi double [ %1004, %1003 ], [ %1006, %1005 ]
  store double %1008, ptr %45, align 8, !tbaa !11
  br label %1009

1009:                                             ; preds = %1007, %971
  br label %1010

1010:                                             ; preds = %1009
  %1011 = load i64, ptr %42, align 8, !tbaa !9
  %1012 = add nsw i64 %1011, 1
  store i64 %1012, ptr %42, align 8, !tbaa !9
  br label %930, !llvm.loop !33

1013:                                             ; preds = %930
  %1014 = load double, ptr %45, align 8, !tbaa !11
  %1015 = load ptr, ptr %28, align 8, !tbaa !5
  %1016 = load i64, ptr %43, align 8, !tbaa !9
  %1017 = getelementptr inbounds double, ptr %1015, i64 %1016
  store double %1014, ptr %1017, align 8, !tbaa !11
  %1018 = load ptr, ptr %20, align 8, !tbaa !5
  %1019 = load i64, ptr %1018, align 8, !tbaa !9
  store i64 %1019, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1020

1020:                                             ; preds = %1092, %1013
  %1021 = load i64, ptr %42, align 8, !tbaa !9
  %1022 = load i64, ptr %37, align 8, !tbaa !9
  %1023 = icmp sle i64 %1021, %1022
  br i1 %1023, label %1024, label %1095

1024:                                             ; preds = %1020
  %1025 = load ptr, ptr %29, align 8, !tbaa !5
  %1026 = load i64, ptr %42, align 8, !tbaa !9
  %1027 = getelementptr inbounds double, ptr %1025, i64 %1026
  %1028 = load double, ptr %1027, align 8, !tbaa !11
  %1029 = load double, ptr %52, align 8, !tbaa !11
  %1030 = fcmp ogt double %1028, %1029
  br i1 %1030, label %1031, label %1060

1031:                                             ; preds = %1024
  %1032 = load ptr, ptr %29, align 8, !tbaa !5
  %1033 = load ptr, ptr %20, align 8, !tbaa !5
  %1034 = load i64, ptr %1033, align 8, !tbaa !9
  %1035 = load i64, ptr %42, align 8, !tbaa !9
  %1036 = add nsw i64 %1034, %1035
  %1037 = getelementptr inbounds double, ptr %1032, i64 %1036
  %1038 = load double, ptr %1037, align 8, !tbaa !11
  store double %1038, ptr %39, align 8, !tbaa !11
  %1039 = load double, ptr %39, align 8, !tbaa !11
  %1040 = fcmp oge double %1039, 0.000000e+00
  br i1 %1040, label %1041, label %1043

1041:                                             ; preds = %1031
  %1042 = load double, ptr %39, align 8, !tbaa !11
  br label %1046

1043:                                             ; preds = %1031
  %1044 = load double, ptr %39, align 8, !tbaa !11
  %1045 = fneg double %1044
  br label %1046

1046:                                             ; preds = %1043, %1041
  %1047 = phi double [ %1042, %1041 ], [ %1045, %1043 ]
  %1048 = load i64, ptr %48, align 8, !tbaa !9
  %1049 = sitofp i64 %1048 to double
  %1050 = load double, ptr %49, align 8, !tbaa !11
  %1051 = fmul double %1049, %1050
  %1052 = load ptr, ptr %29, align 8, !tbaa !5
  %1053 = load i64, ptr %42, align 8, !tbaa !9
  %1054 = getelementptr inbounds double, ptr %1052, i64 %1053
  %1055 = load double, ptr %1054, align 8, !tbaa !11
  %1056 = call double @llvm.fmuladd.f64(double %1051, double %1055, double %1047)
  %1057 = load ptr, ptr %29, align 8, !tbaa !5
  %1058 = load i64, ptr %42, align 8, !tbaa !9
  %1059 = getelementptr inbounds double, ptr %1057, i64 %1058
  store double %1056, ptr %1059, align 8, !tbaa !11
  br label %1091

1060:                                             ; preds = %1024
  %1061 = load ptr, ptr %29, align 8, !tbaa !5
  %1062 = load ptr, ptr %20, align 8, !tbaa !5
  %1063 = load i64, ptr %1062, align 8, !tbaa !9
  %1064 = load i64, ptr %42, align 8, !tbaa !9
  %1065 = add nsw i64 %1063, %1064
  %1066 = getelementptr inbounds double, ptr %1061, i64 %1065
  %1067 = load double, ptr %1066, align 8, !tbaa !11
  store double %1067, ptr %39, align 8, !tbaa !11
  %1068 = load double, ptr %39, align 8, !tbaa !11
  %1069 = fcmp oge double %1068, 0.000000e+00
  br i1 %1069, label %1070, label %1072

1070:                                             ; preds = %1060
  %1071 = load double, ptr %39, align 8, !tbaa !11
  br label %1075

1072:                                             ; preds = %1060
  %1073 = load double, ptr %39, align 8, !tbaa !11
  %1074 = fneg double %1073
  br label %1075

1075:                                             ; preds = %1072, %1070
  %1076 = phi double [ %1071, %1070 ], [ %1074, %1072 ]
  %1077 = load i64, ptr %48, align 8, !tbaa !9
  %1078 = sitofp i64 %1077 to double
  %1079 = load double, ptr %49, align 8, !tbaa !11
  %1080 = fmul double %1078, %1079
  %1081 = load ptr, ptr %29, align 8, !tbaa !5
  %1082 = load i64, ptr %42, align 8, !tbaa !9
  %1083 = getelementptr inbounds double, ptr %1081, i64 %1082
  %1084 = load double, ptr %1083, align 8, !tbaa !11
  %1085 = call double @llvm.fmuladd.f64(double %1080, double %1084, double %1076)
  %1086 = load double, ptr %51, align 8, !tbaa !11
  %1087 = fadd double %1085, %1086
  %1088 = load ptr, ptr %29, align 8, !tbaa !5
  %1089 = load i64, ptr %42, align 8, !tbaa !9
  %1090 = getelementptr inbounds double, ptr %1088, i64 %1089
  store double %1087, ptr %1090, align 8, !tbaa !11
  br label %1091

1091:                                             ; preds = %1075, %1046
  br label %1092

1092:                                             ; preds = %1091
  %1093 = load i64, ptr %42, align 8, !tbaa !9
  %1094 = add nsw i64 %1093, 1
  store i64 %1094, ptr %42, align 8, !tbaa !9
  br label %1020, !llvm.loop !34

1095:                                             ; preds = %1020
  store i64 0, ptr %50, align 8, !tbaa !9
  br label %1096

1096:                                             ; preds = %1205, %1095
  %1097 = load ptr, ptr %20, align 8, !tbaa !5
  %1098 = load ptr, ptr %29, align 8, !tbaa !5
  %1099 = load ptr, ptr %20, align 8, !tbaa !5
  %1100 = load i64, ptr %1099, align 8, !tbaa !9
  %1101 = shl i64 %1100, 1
  %1102 = add nsw i64 %1101, 1
  %1103 = getelementptr inbounds double, ptr %1098, i64 %1102
  %1104 = load ptr, ptr %29, align 8, !tbaa !5
  %1105 = load ptr, ptr %20, align 8, !tbaa !5
  %1106 = load i64, ptr %1105, align 8, !tbaa !9
  %1107 = add nsw i64 %1106, 1
  %1108 = getelementptr inbounds double, ptr %1104, i64 %1107
  %1109 = load ptr, ptr %30, align 8, !tbaa !5
  %1110 = getelementptr inbounds i64, ptr %1109, i64 1
  %1111 = load ptr, ptr %27, align 8, !tbaa !5
  %1112 = load i64, ptr %43, align 8, !tbaa !9
  %1113 = getelementptr inbounds double, ptr %1111, i64 %1112
  %1114 = getelementptr inbounds [3 x i64], ptr %53, i64 0, i64 0
  %1115 = call i32 @dlacn2_(ptr noundef %1097, ptr noundef %1103, ptr noundef %1108, ptr noundef %1110, ptr noundef %1113, ptr noundef %50, ptr noundef %1114)
  %1116 = load i64, ptr %50, align 8, !tbaa !9
  %1117 = icmp ne i64 %1116, 0
  br i1 %1117, label %1118, label %1206

1118:                                             ; preds = %1096
  %1119 = load i64, ptr %50, align 8, !tbaa !9
  %1120 = icmp eq i64 %1119, 1
  br i1 %1120, label %1121, label %1163

1121:                                             ; preds = %1118
  %1122 = load ptr, ptr %17, align 8, !tbaa !5
  %1123 = getelementptr inbounds [1 x i8], ptr %57, i64 0, i64 0
  %1124 = load ptr, ptr %19, align 8, !tbaa !5
  %1125 = load ptr, ptr %20, align 8, !tbaa !5
  %1126 = load ptr, ptr %22, align 8, !tbaa !5
  %1127 = getelementptr inbounds double, ptr %1126, i64 1
  %1128 = load ptr, ptr %29, align 8, !tbaa !5
  %1129 = load ptr, ptr %20, align 8, !tbaa !5
  %1130 = load i64, ptr %1129, align 8, !tbaa !9
  %1131 = add nsw i64 %1130, 1
  %1132 = getelementptr inbounds double, ptr %1128, i64 %1131
  %1133 = call i32 @f2c_dtpsv(ptr noundef %1122, ptr noundef %1123, ptr noundef %1124, ptr noundef %1125, ptr noundef %1127, ptr noundef %1132, ptr noundef @c__1)
  %1134 = load ptr, ptr %20, align 8, !tbaa !5
  %1135 = load i64, ptr %1134, align 8, !tbaa !9
  store i64 %1135, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1136

1136:                                             ; preds = %1159, %1121
  %1137 = load i64, ptr %42, align 8, !tbaa !9
  %1138 = load i64, ptr %37, align 8, !tbaa !9
  %1139 = icmp sle i64 %1137, %1138
  br i1 %1139, label %1140, label %1162

1140:                                             ; preds = %1136
  %1141 = load ptr, ptr %29, align 8, !tbaa !5
  %1142 = load i64, ptr %42, align 8, !tbaa !9
  %1143 = getelementptr inbounds double, ptr %1141, i64 %1142
  %1144 = load double, ptr %1143, align 8, !tbaa !11
  %1145 = load ptr, ptr %29, align 8, !tbaa !5
  %1146 = load ptr, ptr %20, align 8, !tbaa !5
  %1147 = load i64, ptr %1146, align 8, !tbaa !9
  %1148 = load i64, ptr %42, align 8, !tbaa !9
  %1149 = add nsw i64 %1147, %1148
  %1150 = getelementptr inbounds double, ptr %1145, i64 %1149
  %1151 = load double, ptr %1150, align 8, !tbaa !11
  %1152 = fmul double %1144, %1151
  %1153 = load ptr, ptr %29, align 8, !tbaa !5
  %1154 = load ptr, ptr %20, align 8, !tbaa !5
  %1155 = load i64, ptr %1154, align 8, !tbaa !9
  %1156 = load i64, ptr %42, align 8, !tbaa !9
  %1157 = add nsw i64 %1155, %1156
  %1158 = getelementptr inbounds double, ptr %1153, i64 %1157
  store double %1152, ptr %1158, align 8, !tbaa !11
  br label %1159

1159:                                             ; preds = %1140
  %1160 = load i64, ptr %42, align 8, !tbaa !9
  %1161 = add nsw i64 %1160, 1
  store i64 %1161, ptr %42, align 8, !tbaa !9
  br label %1136, !llvm.loop !35

1162:                                             ; preds = %1136
  br label %1205

1163:                                             ; preds = %1118
  %1164 = load ptr, ptr %20, align 8, !tbaa !5
  %1165 = load i64, ptr %1164, align 8, !tbaa !9
  store i64 %1165, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1166

1166:                                             ; preds = %1189, %1163
  %1167 = load i64, ptr %42, align 8, !tbaa !9
  %1168 = load i64, ptr %37, align 8, !tbaa !9
  %1169 = icmp sle i64 %1167, %1168
  br i1 %1169, label %1170, label %1192

1170:                                             ; preds = %1166
  %1171 = load ptr, ptr %29, align 8, !tbaa !5
  %1172 = load i64, ptr %42, align 8, !tbaa !9
  %1173 = getelementptr inbounds double, ptr %1171, i64 %1172
  %1174 = load double, ptr %1173, align 8, !tbaa !11
  %1175 = load ptr, ptr %29, align 8, !tbaa !5
  %1176 = load ptr, ptr %20, align 8, !tbaa !5
  %1177 = load i64, ptr %1176, align 8, !tbaa !9
  %1178 = load i64, ptr %42, align 8, !tbaa !9
  %1179 = add nsw i64 %1177, %1178
  %1180 = getelementptr inbounds double, ptr %1175, i64 %1179
  %1181 = load double, ptr %1180, align 8, !tbaa !11
  %1182 = fmul double %1174, %1181
  %1183 = load ptr, ptr %29, align 8, !tbaa !5
  %1184 = load ptr, ptr %20, align 8, !tbaa !5
  %1185 = load i64, ptr %1184, align 8, !tbaa !9
  %1186 = load i64, ptr %42, align 8, !tbaa !9
  %1187 = add nsw i64 %1185, %1186
  %1188 = getelementptr inbounds double, ptr %1183, i64 %1187
  store double %1182, ptr %1188, align 8, !tbaa !11
  br label %1189

1189:                                             ; preds = %1170
  %1190 = load i64, ptr %42, align 8, !tbaa !9
  %1191 = add nsw i64 %1190, 1
  store i64 %1191, ptr %42, align 8, !tbaa !9
  br label %1166, !llvm.loop !36

1192:                                             ; preds = %1166
  %1193 = load ptr, ptr %17, align 8, !tbaa !5
  %1194 = load ptr, ptr %18, align 8, !tbaa !5
  %1195 = load ptr, ptr %19, align 8, !tbaa !5
  %1196 = load ptr, ptr %20, align 8, !tbaa !5
  %1197 = load ptr, ptr %22, align 8, !tbaa !5
  %1198 = getelementptr inbounds double, ptr %1197, i64 1
  %1199 = load ptr, ptr %29, align 8, !tbaa !5
  %1200 = load ptr, ptr %20, align 8, !tbaa !5
  %1201 = load i64, ptr %1200, align 8, !tbaa !9
  %1202 = add nsw i64 %1201, 1
  %1203 = getelementptr inbounds double, ptr %1199, i64 %1202
  %1204 = call i32 @f2c_dtpsv(ptr noundef %1193, ptr noundef %1194, ptr noundef %1195, ptr noundef %1196, ptr noundef %1198, ptr noundef %1203, ptr noundef @c__1)
  br label %1205

1205:                                             ; preds = %1192, %1162
  br label %1096

1206:                                             ; preds = %1096
  store double 0.000000e+00, ptr %59, align 8, !tbaa !11
  %1207 = load ptr, ptr %20, align 8, !tbaa !5
  %1208 = load i64, ptr %1207, align 8, !tbaa !9
  store i64 %1208, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1209

1209:                                             ; preds = %1241, %1206
  %1210 = load i64, ptr %42, align 8, !tbaa !9
  %1211 = load i64, ptr %37, align 8, !tbaa !9
  %1212 = icmp sle i64 %1210, %1211
  br i1 %1212, label %1213, label %1244

1213:                                             ; preds = %1209
  %1214 = load double, ptr %59, align 8, !tbaa !11
  store double %1214, ptr %40, align 8, !tbaa !11
  %1215 = load ptr, ptr %25, align 8, !tbaa !5
  %1216 = load i64, ptr %42, align 8, !tbaa !9
  %1217 = load i64, ptr %43, align 8, !tbaa !9
  %1218 = load i64, ptr %34, align 8, !tbaa !9
  %1219 = mul nsw i64 %1217, %1218
  %1220 = add nsw i64 %1216, %1219
  %1221 = getelementptr inbounds double, ptr %1215, i64 %1220
  %1222 = load double, ptr %1221, align 8, !tbaa !11
  store double %1222, ptr %39, align 8, !tbaa !11
  %1223 = load double, ptr %39, align 8, !tbaa !11
  %1224 = fcmp oge double %1223, 0.000000e+00
  br i1 %1224, label %1225, label %1227

1225:                                             ; preds = %1213
  %1226 = load double, ptr %39, align 8, !tbaa !11
  br label %1230

1227:                                             ; preds = %1213
  %1228 = load double, ptr %39, align 8, !tbaa !11
  %1229 = fneg double %1228
  br label %1230

1230:                                             ; preds = %1227, %1225
  %1231 = phi double [ %1226, %1225 ], [ %1229, %1227 ]
  store double %1231, ptr %41, align 8, !tbaa !11
  %1232 = load double, ptr %40, align 8, !tbaa !11
  %1233 = load double, ptr %41, align 8, !tbaa !11
  %1234 = fcmp oge double %1232, %1233
  br i1 %1234, label %1235, label %1237

1235:                                             ; preds = %1230
  %1236 = load double, ptr %40, align 8, !tbaa !11
  br label %1239

1237:                                             ; preds = %1230
  %1238 = load double, ptr %41, align 8, !tbaa !11
  br label %1239

1239:                                             ; preds = %1237, %1235
  %1240 = phi double [ %1236, %1235 ], [ %1238, %1237 ]
  store double %1240, ptr %59, align 8, !tbaa !11
  br label %1241

1241:                                             ; preds = %1239
  %1242 = load i64, ptr %42, align 8, !tbaa !9
  %1243 = add nsw i64 %1242, 1
  store i64 %1243, ptr %42, align 8, !tbaa !9
  br label %1209, !llvm.loop !37

1244:                                             ; preds = %1209
  %1245 = load double, ptr %59, align 8, !tbaa !11
  %1246 = fcmp une double %1245, 0.000000e+00
  br i1 %1246, label %1247, label %1254

1247:                                             ; preds = %1244
  %1248 = load double, ptr %59, align 8, !tbaa !11
  %1249 = load ptr, ptr %27, align 8, !tbaa !5
  %1250 = load i64, ptr %43, align 8, !tbaa !9
  %1251 = getelementptr inbounds double, ptr %1249, i64 %1250
  %1252 = load double, ptr %1251, align 8, !tbaa !11
  %1253 = fdiv double %1252, %1248
  store double %1253, ptr %1251, align 8, !tbaa !11
  br label %1254

1254:                                             ; preds = %1247, %1244
  br label %1255

1255:                                             ; preds = %1254
  %1256 = load i64, ptr %43, align 8, !tbaa !9
  %1257 = add nsw i64 %1256, 1
  store i64 %1257, ptr %43, align 8, !tbaa !9
  br label %229, !llvm.loop !38

1258:                                             ; preds = %229
  store i32 0, ptr %16, align 4
  store i32 1, ptr %60, align 4
  br label %1259

1259:                                             ; preds = %1258, %206, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  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 24, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  %1260 = load i32, ptr %16, align 4
  ret i32 %1260
}

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

declare i32 @f2c_daxpy(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 i32 @dlacn2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @f2c_dtpsv(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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!7, !7, i64 0}
!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}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}


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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [13 x i8], align 1
@c__1 = external hidden global i64, align 8
@c_b19 = external hidden global double, align 8

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

37:                                               ; preds = %15
  %38 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not511 = icmp eq i64 %38, 0
  br i1 %.not511, label %.thread.sink.split, label %39

39:                                               ; preds = %37, %15
  %.not512 = icmp eq i64 %35, 0
  br i1 %.not512, label %40, label %44

40:                                               ; preds = %39
  %41 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5
  %.not513 = icmp eq i64 %41, 0
  br i1 %.not513, label %42, label %44

42:                                               ; preds = %40
  %43 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5
  %.not514 = icmp eq i64 %43, 0
  br i1 %.not514, label %.thread.sink.split, label %44

44:                                               ; preds = %42, %40, %39
  %.not515 = icmp eq i64 %36, 0
  br i1 %.not515, label %45, label %47

45:                                               ; preds = %44
  %46 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str) #5
  %.not516 = icmp eq i64 %46, 0
  br i1 %.not516, label %.thread.sink.split, label %47

47:                                               ; preds = %45, %44
  %48 = load i64, ptr %3, align 8, !tbaa !5
  %49 = icmp slt i64 %48, 0
  br i1 %49, label %.thread.sink.split, label %50

50:                                               ; preds = %47
  %51 = load i64, ptr %4, align 8, !tbaa !5
  %52 = icmp slt i64 %51, 0
  br i1 %52, label %.thread.sink.split, label %53

53:                                               ; preds = %50
  %54 = load i64, ptr %7, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %48, i64 1)
  %55 = icmp slt i64 %54, %spec.select
  br i1 %55, label %.thread.sink.split, label %56

56:                                               ; preds = %53
  %57 = load i64, ptr %9, align 8, !tbaa !5
  %58 = icmp slt i64 %57, %spec.select
  br i1 %58, label %.thread.sink.split, label %59

59:                                               ; preds = %56
  %.pr = load i64, ptr %14, align 8, !tbaa !5
  %.not517 = icmp eq i64 %.pr, 0
  br i1 %.not517, label %63, label %.thread

.thread.sink.split:                               ; preds = %56, %53, %50, %47, %45, %42, %37
  %.sink = phi i64 [ -1, %37 ], [ -2, %42 ], [ -3, %45 ], [ -4, %47 ], [ -5, %50 ], [ -8, %53 ], [ -10, %56 ]
  store i64 %.sink, ptr %14, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %59
  %60 = phi i64 [ %.pr, %59 ], [ %.sink, %.thread.sink.split ]
  %61 = sub nsw i64 0, %60
  store i64 %61, ptr %20, align 8, !tbaa !5
  %62 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %20) #5
  br label %.loopexit

63:                                               ; preds = %59
  %64 = icmp eq i64 %48, 0
  %.not548709 = icmp eq i64 %51, 0
  br i1 %64, label %66, label %65

65:                                               ; preds = %63
  br i1 %.not548709, label %.loopexit, label %91

66:                                               ; preds = %63
  br i1 %.not548709, label %.loopexit, label %.lr.ph712.preheader

.lr.ph712.preheader:                              ; preds = %66
  %min.iters.check960 = icmp ult i64 %51, 4
  %67 = sub i64 %17, %16
  %diff.check957 = icmp ult i64 %67, 32
  %or.cond = or i1 %min.iters.check960, %diff.check957
  br i1 %or.cond, label %.lr.ph712.preheader974, label %vector.ph961

vector.ph961:                                     ; preds = %.lr.ph712.preheader
  %n.vec963 = and i64 %51, 9223372036854775804
  %ind.end964 = or disjoint i64 %n.vec963, 1
  br label %vector.body966

vector.body966:                                   ; preds = %vector.body966, %vector.ph961
  %index967 = phi i64 [ 0, %vector.ph961 ], [ %index.next969, %vector.body966 ]
  %68 = getelementptr double, ptr %10, i64 %index967
  %69 = getelementptr inbounds i8, ptr %68, i64 16
  store <2 x double> zeroinitializer, ptr %68, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %69, align 8, !tbaa !9
  %70 = getelementptr double, ptr %11, i64 %index967
  %71 = getelementptr inbounds i8, ptr %70, i64 16
  store <2 x double> zeroinitializer, ptr %70, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %71, align 8, !tbaa !9
  %index.next969 = add nuw i64 %index967, 4
  %72 = icmp eq i64 %index.next969, %n.vec963
  br i1 %72, label %middle.block958, label %vector.body966, !llvm.loop !11

middle.block958:                                  ; preds = %vector.body966
  %cmp.n970 = icmp eq i64 %51, %n.vec963
  br i1 %cmp.n970, label %.loopexit, label %.lr.ph712.preheader974

.lr.ph712.preheader974:                           ; preds = %middle.block958, %.lr.ph712.preheader
  %.0493710.ph = phi i64 [ 1, %.lr.ph712.preheader ], [ %ind.end964, %middle.block958 ]
  %73 = add nuw i64 %51, 1
  %74 = sub i64 %73, %.0493710.ph
  %75 = sub i64 %51, %.0493710.ph
  %xtraiter997 = and i64 %74, 3
  %lcmp.mod998.not = icmp eq i64 %xtraiter997, 0
  br i1 %lcmp.mod998.not, label %.lr.ph712.prol.loopexit, label %.lr.ph712.prol

.lr.ph712.prol:                                   ; preds = %.lr.ph712.preheader974, %.lr.ph712.prol
  %.0493710.prol = phi i64 [ %78, %.lr.ph712.prol ], [ %.0493710.ph, %.lr.ph712.preheader974 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph712.prol ], [ 0, %.lr.ph712.preheader974 ]
  %76 = getelementptr inbounds double, ptr %31, i64 %.0493710.prol
  store double 0.000000e+00, ptr %76, align 8, !tbaa !9
  %77 = getelementptr inbounds double, ptr %32, i64 %.0493710.prol
  store double 0.000000e+00, ptr %77, align 8, !tbaa !9
  %78 = add nuw i64 %.0493710.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter997
  br i1 %prol.iter.cmp.not, label %.lr.ph712.prol.loopexit, label %.lr.ph712.prol, !llvm.loop !15

.lr.ph712.prol.loopexit:                          ; preds = %.lr.ph712.prol, %.lr.ph712.preheader974
  %.0493710.unr = phi i64 [ %.0493710.ph, %.lr.ph712.preheader974 ], [ %78, %.lr.ph712.prol ]
  %79 = icmp ult i64 %75, 3
  br i1 %79, label %.loopexit, label %.lr.ph712

.lr.ph712:                                        ; preds = %.lr.ph712.prol.loopexit, %.lr.ph712
  %.0493710 = phi i64 [ %90, %.lr.ph712 ], [ %.0493710.unr, %.lr.ph712.prol.loopexit ]
  %80 = getelementptr inbounds double, ptr %31, i64 %.0493710
  store double 0.000000e+00, ptr %80, align 8, !tbaa !9
  %81 = getelementptr inbounds double, ptr %32, i64 %.0493710
  store double 0.000000e+00, ptr %81, align 8, !tbaa !9
  %82 = getelementptr double, ptr %10, i64 %.0493710
  store double 0.000000e+00, ptr %82, align 8, !tbaa !9
  %83 = getelementptr double, ptr %11, i64 %.0493710
  store double 0.000000e+00, ptr %83, align 8, !tbaa !9
  %84 = add nuw i64 %.0493710, 2
  %85 = getelementptr inbounds double, ptr %31, i64 %84
  store double 0.000000e+00, ptr %85, align 8, !tbaa !9
  %86 = getelementptr inbounds double, ptr %32, i64 %84
  store double 0.000000e+00, ptr %86, align 8, !tbaa !9
  %87 = add nuw i64 %.0493710, 3
  %88 = getelementptr inbounds double, ptr %31, i64 %87
  store double 0.000000e+00, ptr %88, align 8, !tbaa !9
  %89 = getelementptr inbounds double, ptr %32, i64 %87
  store double 0.000000e+00, ptr %89, align 8, !tbaa !9
  %90 = add nuw i64 %.0493710, 4
  %exitcond744.not.3 = icmp eq i64 %87, %51
  br i1 %exitcond744.not.3, label %.loopexit, label %.lr.ph712, !llvm.loop !17

91:                                               ; preds = %65
  %. = select i1 %.not512, i8 78, i8 84
  store i8 %., ptr %23, align 1, !tbaa !18
  %92 = add nuw nsw i64 %48, 1
  %93 = tail call double @dlamch_(ptr noundef nonnull @.str.6) #5
  %94 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #5
  %95 = uitofp nneg i64 %92 to double
  %96 = fmul double %94, %95
  %97 = fdiv double %96, %93
  %98 = load i64, ptr %4, align 8, !tbaa !5
  %invariant.gep701 = getelementptr i8, ptr %30, i64 8
  %invariant.gep703 = getelementptr i8, ptr %27, i64 8
  %.not519705 = icmp slt i64 %98, 1
  br i1 %.not519705, label %.loopexit, label %.lr.ph708

.lr.ph708:                                        ; preds = %91
  %invariant.gep577 = getelementptr i8, ptr %5, i64 -16
  %99 = fmul double %93, %95
  %.pre = load i64, ptr %3, align 8, !tbaa !5
  %scevgep820 = getelementptr i8, ptr %5, i64 8
  %100 = sub i64 %19, %18
  %101 = mul i64 %25, -8
  %invariant.gep1009 = getelementptr i8, ptr %12, i64 8
  %invariant.gep1013 = getelementptr i8, ptr %12, i64 8
  %invariant.gep1015 = getelementptr i8, ptr %12, i64 8
  %broadcast.splatinsert = insertelement <2 x double> poison, double %97, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert813 = insertelement <2 x double> poison, double %99, i64 0
  %broadcast.splat814 = shufflevector <2 x double> %broadcast.splatinsert813, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert815 = insertelement <2 x double> poison, double %96, i64 0
  %broadcast.splat816 = shufflevector <2 x double> %broadcast.splatinsert815, <2 x double> poison, <2 x i32> zeroinitializer
  br label %102

102:                                              ; preds = %.lr.ph708, %._crit_edge699.thread
  %indvar939 = phi i64 [ 0, %.lr.ph708 ], [ %indvar.next940, %._crit_edge699.thread ]
  %103 = phi i64 [ %.pre, %.lr.ph708 ], [ %474, %._crit_edge699.thread ]
  %.1494706 = phi i64 [ 1, %.lr.ph708 ], [ %535, %._crit_edge699.thread ]
  %104 = mul nsw i64 %.1494706, %28
  %gep702 = getelementptr double, ptr %invariant.gep701, i64 %104
  %105 = getelementptr double, ptr %12, i64 %103
  %106 = call i32 @f2c_dcopy(ptr noundef nonnull %3, ptr noundef %gep702, ptr noundef nonnull @c__1, ptr noundef %105, ptr noundef nonnull @c__1) #5
  %107 = load i64, ptr %3, align 8, !tbaa !5
  %108 = getelementptr double, ptr %12, i64 %107
  %109 = call i32 @f2c_dtpmv(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %108, ptr noundef nonnull @c__1) #5
  %110 = mul nsw i64 %.1494706, %25
  %gep704 = getelementptr double, ptr %invariant.gep703, i64 %110
  %111 = load i64, ptr %3, align 8, !tbaa !5
  %112 = getelementptr double, ptr %12, i64 %111
  %113 = call i32 @f2c_daxpy(ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %gep704, ptr noundef nonnull @c__1, ptr noundef %112, ptr noundef nonnull @c__1) #5
  %114 = load i64, ptr %3, align 8, !tbaa !5
  %invariant.gep = getelementptr double, ptr %27, i64 %110
  %.not520570 = icmp slt i64 %114, 1
  br i1 %.not520570, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %102
  %115 = mul i64 %101, %indvar939
  %116 = add i64 %100, %115
  %min.iters.check943 = icmp ult i64 %114, 4
  %diff.check = icmp ult i64 %116, 32
  %or.cond973 = select i1 %min.iters.check943, i1 true, i1 %diff.check
  br i1 %or.cond973, label %.lr.ph.preheader982, label %vector.ph944

vector.ph944:                                     ; preds = %.lr.ph.preheader
  %n.vec946 = and i64 %114, 9223372036854775804
  %ind.end947 = or disjoint i64 %n.vec946, 1
  br label %vector.body949

vector.body949:                                   ; preds = %vector.body949, %vector.ph944
  %index950 = phi i64 [ 0, %vector.ph944 ], [ %index.next954, %vector.body949 ]
  %offset.idx951 = or disjoint i64 %index950, 1
  %117 = getelementptr double, ptr %invariant.gep, i64 %offset.idx951
  %118 = getelementptr i8, ptr %117, i64 16
  %wide.load952 = load <2 x double>, ptr %117, align 8, !tbaa !9
  %wide.load953 = load <2 x double>, ptr %118, align 8, !tbaa !9
  %119 = fcmp oge <2 x double> %wide.load952, zeroinitializer
  %120 = fcmp oge <2 x double> %wide.load953, zeroinitializer
  %121 = fneg <2 x double> %wide.load952
  %122 = fneg <2 x double> %wide.load953
  %123 = select <2 x i1> %119, <2 x double> %wide.load952, <2 x double> %121
  %124 = select <2 x i1> %120, <2 x double> %wide.load953, <2 x double> %122
  %125 = getelementptr double, ptr %12, i64 %index950
  %126 = getelementptr inbounds i8, ptr %125, i64 16
  store <2 x double> %123, ptr %125, align 8, !tbaa !9
  store <2 x double> %124, ptr %126, align 8, !tbaa !9
  %index.next954 = add nuw i64 %index950, 4
  %127 = icmp eq i64 %index.next954, %n.vec946
  br i1 %127, label %middle.block941, label %vector.body949, !llvm.loop !19

middle.block941:                                  ; preds = %vector.body949
  %cmp.n955 = icmp eq i64 %114, %n.vec946
  br i1 %cmp.n955, label %._crit_edge, label %.lr.ph.preheader982

.lr.ph.preheader982:                              ; preds = %middle.block941, %.lr.ph.preheader
  %.0495571.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end947, %middle.block941 ]
  %xtraiter = and i64 %114, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader982
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %.0495571.ph
  %128 = load double, ptr %gep.prol, align 8, !tbaa !9
  %129 = fcmp oge double %128, 0.000000e+00
  %130 = fneg double %128
  %131 = select i1 %129, double %128, double %130
  %132 = getelementptr inbounds double, ptr %33, i64 %.0495571.ph
  store double %131, ptr %132, align 8, !tbaa !9
  %133 = add nuw i64 %.0495571.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader982
  %.0495571.unr = phi i64 [ %.0495571.ph, %.lr.ph.preheader982 ], [ %133, %.lr.ph.prol ]
  %134 = icmp eq i64 %114, %.0495571.ph
  br i1 %134, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.0495571 = phi i64 [ %146, %.lr.ph ], [ %.0495571.unr, %.lr.ph.prol.loopexit ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0495571
  %135 = load double, ptr %gep, align 8, !tbaa !9
  %136 = fcmp oge double %135, 0.000000e+00
  %137 = fneg double %135
  %138 = select i1 %136, double %135, double %137
  %139 = getelementptr inbounds double, ptr %33, i64 %.0495571
  store double %138, ptr %139, align 8, !tbaa !9
  %140 = add nuw i64 %.0495571, 1
  %gep.1 = getelementptr double, ptr %invariant.gep, i64 %140
  %141 = load double, ptr %gep.1, align 8, !tbaa !9
  %142 = fcmp oge double %141, 0.000000e+00
  %143 = fneg double %141
  %144 = select i1 %142, double %141, double %143
  %145 = getelementptr double, ptr %12, i64 %.0495571
  store double %144, ptr %145, align 8, !tbaa !9
  %146 = add nuw i64 %.0495571, 2
  %exitcond.not.1 = icmp eq i64 %140, %114
  br i1 %exitcond.not.1, label %._crit_edge, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block941, %102
  br i1 %.not512, label %338, label %147

147:                                              ; preds = %._crit_edge
  %invariant.gep611 = getelementptr double, ptr %30, i64 %104
  br i1 %.not, label %251, label %148

148:                                              ; preds = %147
  br i1 %.not515, label %.preheader565, label %.preheader567

.preheader567:                                    ; preds = %148
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph582.preheader

.lr.ph582.preheader:                              ; preds = %.preheader567
  %149 = add nuw i64 %114, 1
  br label %.lr.ph582

.preheader565:                                    ; preds = %148
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph597

.lr.ph582:                                        ; preds = %.lr.ph582.preheader, %.loopexit972
  %scev.check.iv914 = phi ptr [ %scevgep820, %.lr.ph582.preheader ], [ %scevgep915, %.loopexit972 ]
  %scev.check.iv912 = phi ptr [ %5, %.lr.ph582.preheader ], [ %scevgep913, %.loopexit972 ]
  %indvar909 = phi i64 [ 0, %.lr.ph582.preheader ], [ %indvar.next910, %.loopexit972 ]
  %indvars.iv = phi i64 [ 2, %.lr.ph582.preheader ], [ %indvars.iv.next, %.loopexit972 ]
  %.0478581 = phi i64 [ 1, %.lr.ph582.preheader ], [ %197, %.loopexit972 ]
  %.0485580 = phi i64 [ 1, %.lr.ph582.preheader ], [ %198, %.loopexit972 ]
  %150 = shl i64 %indvar909, 3
  %151 = add i64 %150, 16
  %152 = shl i64 %indvar909, 3
  %153 = add i64 %152, 8
  %gep576 = getelementptr double, ptr %invariant.gep611, i64 %.0485580
  %154 = load double, ptr %gep576, align 8, !tbaa !9
  %155 = fcmp oge double %154, 0.000000e+00
  %156 = fneg double %154
  %157 = select i1 %155, double %154, double %156
  %gep578 = getelementptr double, ptr %invariant.gep577, i64 %.0478581
  %min.iters.check921 = icmp ult i64 %.0485580, 4
  br i1 %min.iters.check921, label %scalar.ph920.preheader, label %vector.memcheck908

vector.memcheck908:                               ; preds = %.lr.ph582
  %158 = shl i64 %indvar909, 3
  %gep1010 = getelementptr i8, ptr %invariant.gep1009, i64 %158
  %bound0916 = icmp ugt ptr %scev.check.iv914, %12
  %bound1917 = icmp ult ptr %scev.check.iv912, %gep1010
  %found.conflict918 = and i1 %bound0916, %bound1917
  br i1 %found.conflict918, label %scalar.ph920.preheader, label %vector.ph922

vector.ph922:                                     ; preds = %vector.memcheck908
  %n.vec924 = and i64 %.0485580, 9223372036854775804
  %ind.end925 = or disjoint i64 %n.vec924, 1
  %broadcast.splatinsert934 = insertelement <2 x double> poison, double %157, i64 0
  %broadcast.splat935 = shufflevector <2 x double> %broadcast.splatinsert934, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body927

vector.body927:                                   ; preds = %vector.body927, %vector.ph922
  %index928 = phi i64 [ 0, %vector.ph922 ], [ %index.next936, %vector.body927 ]
  %offset.idx929 = or disjoint i64 %index928, 1
  %159 = getelementptr double, ptr %gep578, i64 %offset.idx929
  %160 = getelementptr i8, ptr %159, i64 16
  %wide.load930 = load <2 x double>, ptr %159, align 8, !tbaa !9, !alias.scope !21
  %wide.load931 = load <2 x double>, ptr %160, align 8, !tbaa !9, !alias.scope !21
  %161 = fcmp oge <2 x double> %wide.load930, zeroinitializer
  %162 = fcmp oge <2 x double> %wide.load931, zeroinitializer
  %163 = fneg <2 x double> %wide.load930
  %164 = fneg <2 x double> %wide.load931
  %165 = select <2 x i1> %161, <2 x double> %wide.load930, <2 x double> %163
  %166 = select <2 x i1> %162, <2 x double> %wide.load931, <2 x double> %164
  %167 = getelementptr double, ptr %12, i64 %index928
  %168 = getelementptr inbounds i8, ptr %167, i64 16
  %wide.load932 = load <2 x double>, ptr %167, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %wide.load933 = load <2 x double>, ptr %168, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %169 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %165, <2 x double> %broadcast.splat935, <2 x double> %wide.load932)
  %170 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %166, <2 x double> %broadcast.splat935, <2 x double> %wide.load933)
  store <2 x double> %169, ptr %167, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  store <2 x double> %170, ptr %168, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %index.next936 = add nuw i64 %index928, 4
  %171 = icmp eq i64 %index.next936, %n.vec924
  br i1 %171, label %middle.block919, label %vector.body927, !llvm.loop !26

middle.block919:                                  ; preds = %vector.body927
  %cmp.n937 = icmp eq i64 %.0485580, %n.vec924
  br i1 %cmp.n937, label %.loopexit972, label %scalar.ph920.preheader

scalar.ph920.preheader:                           ; preds = %middle.block919, %vector.memcheck908, %.lr.ph582
  %.1496574.ph = phi i64 [ 1, %vector.memcheck908 ], [ 1, %.lr.ph582 ], [ %ind.end925, %middle.block919 ]
  %172 = and i64 %indvars.iv, 1
  %lcmp.mod991.not.not = icmp eq i64 %172, 0
  br i1 %lcmp.mod991.not.not, label %scalar.ph920.prol, label %scalar.ph920.prol.loopexit

scalar.ph920.prol:                                ; preds = %scalar.ph920.preheader
  %gep573.prol = getelementptr double, ptr %gep578, i64 %.1496574.ph
  %173 = load double, ptr %gep573.prol, align 8, !tbaa !9
  %174 = fcmp oge double %173, 0.000000e+00
  %175 = fneg double %173
  %176 = select i1 %174, double %173, double %175
  %177 = getelementptr inbounds double, ptr %33, i64 %.1496574.ph
  %178 = load double, ptr %177, align 8, !tbaa !9
  %179 = call double @llvm.fmuladd.f64(double %176, double %157, double %178)
  store double %179, ptr %177, align 8, !tbaa !9
  %180 = add nuw i64 %.1496574.ph, 1
  br label %scalar.ph920.prol.loopexit

scalar.ph920.prol.loopexit:                       ; preds = %scalar.ph920.prol, %scalar.ph920.preheader
  %.1496574.unr = phi i64 [ %.1496574.ph, %scalar.ph920.preheader ], [ %180, %scalar.ph920.prol ]
  %181 = icmp eq i64 %.0485580, %.1496574.ph
  br i1 %181, label %.loopexit972, label %scalar.ph920.preheader.new

scalar.ph920.preheader.new:                       ; preds = %scalar.ph920.prol.loopexit
  %invariant.gep1007 = getelementptr i8, ptr %gep578, i64 8
  br label %scalar.ph920

scalar.ph920:                                     ; preds = %scalar.ph920, %scalar.ph920.preheader.new
  %.1496574 = phi i64 [ %.1496574.unr, %scalar.ph920.preheader.new ], [ %196, %scalar.ph920 ]
  %gep573 = getelementptr double, ptr %gep578, i64 %.1496574
  %182 = load double, ptr %gep573, align 8, !tbaa !9
  %183 = fcmp oge double %182, 0.000000e+00
  %184 = fneg double %182
  %185 = select i1 %183, double %182, double %184
  %186 = getelementptr inbounds double, ptr %33, i64 %.1496574
  %187 = load double, ptr %186, align 8, !tbaa !9
  %188 = call double @llvm.fmuladd.f64(double %185, double %157, double %187)
  store double %188, ptr %186, align 8, !tbaa !9
  %gep1008 = getelementptr double, ptr %invariant.gep1007, i64 %.1496574
  %189 = load double, ptr %gep1008, 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 double, ptr %12, i64 %.1496574
  %194 = load double, ptr %193, align 8, !tbaa !9
  %195 = call double @llvm.fmuladd.f64(double %192, double %157, double %194)
  store double %195, ptr %193, align 8, !tbaa !9
  %196 = add nuw i64 %.1496574, 2
  %exitcond725.not.1 = icmp eq i64 %196, %indvars.iv
  br i1 %exitcond725.not.1, label %.loopexit972, label %scalar.ph920, !llvm.loop !27

.loopexit972:                                     ; preds = %scalar.ph920.prol.loopexit, %scalar.ph920, %middle.block919
  %197 = add nuw nsw i64 %.0478581, %.0485580
  %198 = add nuw nsw i64 %.0485580, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %exitcond726.not = icmp eq i64 %indvars.iv, %149
  %indvar.next910 = add i64 %indvar909, 1
  %scevgep913 = getelementptr i8, ptr %scev.check.iv912, i64 %153
  %scevgep915 = getelementptr i8, ptr %scev.check.iv914, i64 %151
  br i1 %exitcond726.not, label %.loopexit554, label %.lr.ph582, !llvm.loop !28

.lr.ph597:                                        ; preds = %.preheader565, %._crit_edge587
  %scev.check.iv884 = phi ptr [ %scevgep885, %._crit_edge587 ], [ %5, %.preheader565 ]
  %scev.check.iv882 = phi ptr [ %scevgep883, %._crit_edge587 ], [ %5, %.preheader565 ]
  %indvar879 = phi i64 [ %indvar.next880, %._crit_edge587 ], [ 0, %.preheader565 ]
  %.1596 = phi i64 [ %249, %._crit_edge587 ], [ 1, %.preheader565 ]
  %.1486595 = phi i64 [ %250, %._crit_edge587 ], [ 1, %.preheader565 ]
  %199 = shl i64 %indvar879, 3
  %200 = add i64 %199, 16
  %201 = shl i64 %indvar879, 3
  %202 = add i64 %201, 8
  %203 = shl i64 %indvar879, 3
  %scevgep881 = getelementptr i8, ptr %12, i64 %203
  %gep591 = getelementptr double, ptr %invariant.gep611, i64 %.1486595
  %204 = load double, ptr %gep591, align 8, !tbaa !9
  %205 = fcmp oge double %204, 0.000000e+00
  %206 = fneg double %204
  %207 = select i1 %205, double %204, double %206
  %.not538.not583 = icmp ugt i64 %.1486595, 1
  br i1 %.not538.not583, label %.lr.ph586, label %._crit_edge587

.lr.ph586:                                        ; preds = %.lr.ph597
  %gep593 = getelementptr double, ptr %invariant.gep577, i64 %.1596
  %min.iters.check891 = icmp ult i64 %indvar879, 4
  br i1 %min.iters.check891, label %scalar.ph890.preheader, label %vector.memcheck878

vector.memcheck878:                               ; preds = %.lr.ph586
  %bound0886 = icmp ugt ptr %scev.check.iv884, %12
  %bound1887 = icmp ult ptr %scev.check.iv882, %scevgep881
  %found.conflict888 = and i1 %bound0886, %bound1887
  br i1 %found.conflict888, label %scalar.ph890.preheader, label %vector.ph892

vector.ph892:                                     ; preds = %vector.memcheck878
  %n.vec894 = and i64 %indvar879, -4
  %ind.end895 = or disjoint i64 %n.vec894, 1
  %broadcast.splatinsert904 = insertelement <2 x double> poison, double %207, i64 0
  %broadcast.splat905 = shufflevector <2 x double> %broadcast.splatinsert904, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body897

vector.body897:                                   ; preds = %vector.body897, %vector.ph892
  %index898 = phi i64 [ 0, %vector.ph892 ], [ %index.next906, %vector.body897 ]
  %offset.idx899 = or disjoint i64 %index898, 1
  %208 = getelementptr double, ptr %gep593, i64 %offset.idx899
  %209 = getelementptr i8, ptr %208, i64 16
  %wide.load900 = load <2 x double>, ptr %208, align 8, !tbaa !9, !alias.scope !29
  %wide.load901 = load <2 x double>, ptr %209, align 8, !tbaa !9, !alias.scope !29
  %210 = fcmp oge <2 x double> %wide.load900, zeroinitializer
  %211 = fcmp oge <2 x double> %wide.load901, zeroinitializer
  %212 = fneg <2 x double> %wide.load900
  %213 = fneg <2 x double> %wide.load901
  %214 = select <2 x i1> %210, <2 x double> %wide.load900, <2 x double> %212
  %215 = select <2 x i1> %211, <2 x double> %wide.load901, <2 x double> %213
  %216 = getelementptr double, ptr %12, i64 %index898
  %217 = getelementptr inbounds i8, ptr %216, i64 16
  %wide.load902 = load <2 x double>, ptr %216, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %wide.load903 = load <2 x double>, ptr %217, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %218 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %214, <2 x double> %broadcast.splat905, <2 x double> %wide.load902)
  %219 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %215, <2 x double> %broadcast.splat905, <2 x double> %wide.load903)
  store <2 x double> %218, ptr %216, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  store <2 x double> %219, ptr %217, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %index.next906 = add nuw i64 %index898, 4
  %220 = icmp eq i64 %index.next906, %n.vec894
  br i1 %220, label %middle.block889, label %vector.body897, !llvm.loop !34

middle.block889:                                  ; preds = %vector.body897
  %cmp.n907 = icmp eq i64 %indvar879, %n.vec894
  br i1 %cmp.n907, label %._crit_edge587, label %scalar.ph890.preheader

scalar.ph890.preheader:                           ; preds = %middle.block889, %vector.memcheck878, %.lr.ph586
  %.2497584.ph = phi i64 [ 1, %vector.memcheck878 ], [ 1, %.lr.ph586 ], [ %ind.end895, %middle.block889 ]
  %221 = and i64 %.1486595, 1
  %lcmp.mod993.not.not = icmp eq i64 %221, 0
  br i1 %lcmp.mod993.not.not, label %scalar.ph890.prol, label %scalar.ph890.prol.loopexit

scalar.ph890.prol:                                ; preds = %scalar.ph890.preheader
  %gep589.prol = getelementptr double, ptr %gep593, i64 %.2497584.ph
  %222 = load double, ptr %gep589.prol, align 8, !tbaa !9
  %223 = fcmp oge double %222, 0.000000e+00
  %224 = fneg double %222
  %225 = select i1 %223, double %222, double %224
  %226 = getelementptr inbounds double, ptr %33, i64 %.2497584.ph
  %227 = load double, ptr %226, align 8, !tbaa !9
  %228 = call double @llvm.fmuladd.f64(double %225, double %207, double %227)
  store double %228, ptr %226, align 8, !tbaa !9
  %229 = add nuw nsw i64 %.2497584.ph, 1
  br label %scalar.ph890.prol.loopexit

scalar.ph890.prol.loopexit:                       ; preds = %scalar.ph890.prol, %scalar.ph890.preheader
  %.2497584.unr = phi i64 [ %.2497584.ph, %scalar.ph890.preheader ], [ %229, %scalar.ph890.prol ]
  %230 = icmp eq i64 %indvar879, %.2497584.ph
  br i1 %230, label %._crit_edge587, label %scalar.ph890.preheader.new

scalar.ph890.preheader.new:                       ; preds = %scalar.ph890.prol.loopexit
  %invariant.gep1011 = getelementptr i8, ptr %gep593, i64 8
  br label %scalar.ph890

scalar.ph890:                                     ; preds = %scalar.ph890, %scalar.ph890.preheader.new
  %.2497584 = phi i64 [ %.2497584.unr, %scalar.ph890.preheader.new ], [ %245, %scalar.ph890 ]
  %gep589 = getelementptr double, ptr %gep593, i64 %.2497584
  %231 = load double, ptr %gep589, align 8, !tbaa !9
  %232 = fcmp oge double %231, 0.000000e+00
  %233 = fneg double %231
  %234 = select i1 %232, double %231, double %233
  %235 = getelementptr inbounds double, ptr %33, i64 %.2497584
  %236 = load double, ptr %235, align 8, !tbaa !9
  %237 = call double @llvm.fmuladd.f64(double %234, double %207, double %236)
  store double %237, ptr %235, align 8, !tbaa !9
  %gep1012 = getelementptr double, ptr %invariant.gep1011, i64 %.2497584
  %238 = load double, ptr %gep1012, align 8, !tbaa !9
  %239 = fcmp oge double %238, 0.000000e+00
  %240 = fneg double %238
  %241 = select i1 %239, double %238, double %240
  %242 = getelementptr double, ptr %12, i64 %.2497584
  %243 = load double, ptr %242, align 8, !tbaa !9
  %244 = call double @llvm.fmuladd.f64(double %241, double %207, double %243)
  store double %244, ptr %242, align 8, !tbaa !9
  %245 = add nuw nsw i64 %.2497584, 2
  %exitcond727.not.1 = icmp eq i64 %245, %.1486595
  br i1 %exitcond727.not.1, label %._crit_edge587, label %scalar.ph890, !llvm.loop !35

._crit_edge587:                                   ; preds = %scalar.ph890.prol.loopexit, %scalar.ph890, %middle.block889, %.lr.ph597
  %246 = getelementptr inbounds double, ptr %33, i64 %.1486595
  %247 = load double, ptr %246, align 8, !tbaa !9
  %248 = fadd double %207, %247
  store double %248, ptr %246, align 8, !tbaa !9
  %249 = add nuw nsw i64 %.1596, %.1486595
  %250 = add nuw i64 %.1486595, 1
  %exitcond728.not = icmp eq i64 %.1486595, %114
  %indvar.next880 = add i64 %indvar879, 1
  %scevgep883 = getelementptr i8, ptr %scev.check.iv882, i64 %202
  %scevgep885 = getelementptr i8, ptr %scev.check.iv884, i64 %200
  br i1 %exitcond728.not, label %.loopexit554, label %.lr.ph597, !llvm.loop !36

251:                                              ; preds = %147
  br i1 %.not515, label %.preheader561, label %.preheader563

.preheader563:                                    ; preds = %251
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph605

.lr.ph605:                                        ; preds = %.preheader563
  %252 = add nuw i64 %114, 1
  br label %256

.preheader561:                                    ; preds = %251
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph617

.lr.ph617:                                        ; preds = %.preheader561
  %253 = add nuw i64 %114, 1
  %254 = shl i64 %114, 3
  %scevgep819 = getelementptr i8, ptr %12, i64 %254
  %scevgep822 = getelementptr i8, ptr %5, i64 %254
  %255 = add i64 %254, -8
  br label %296

256:                                              ; preds = %.lr.ph605, %.loopexit971
  %scev.check.iv852 = phi ptr [ %scevgep820, %.lr.ph605 ], [ %scevgep853, %.loopexit971 ]
  %scev.check.iv850 = phi ptr [ %5, %.lr.ph605 ], [ %scevgep851, %.loopexit971 ]
  %indvar845 = phi i64 [ 0, %.lr.ph605 ], [ %indvar.next846, %.loopexit971 ]
  %.2487.neg604 = phi i64 [ -1, %.lr.ph605 ], [ %.2487.neg, %.loopexit971 ]
  %.2603 = phi i64 [ 1, %.lr.ph605 ], [ %294, %.loopexit971 ]
  %.2487602 = phi i64 [ 1, %.lr.ph605 ], [ %295, %.loopexit971 ]
  %smax858 = call i64 @llvm.smax.i64(i64 %114, i64 %.2487602)
  %257 = sub i64 %smax858, %indvar845
  %258 = sub i64 %114, %indvar845
  %259 = shl i64 %258, 3
  %260 = sub i64 %114, %indvar845
  %261 = shl i64 %260, 3
  %gep600 = getelementptr double, ptr %invariant.gep611, i64 %.2487602
  %262 = load double, ptr %gep600, align 8, !tbaa !9
  %263 = fcmp oge double %262, 0.000000e+00
  %264 = fneg double %262
  %265 = select i1 %263, double %262, double %264
  %266 = getelementptr double, ptr %24, i64 %.2603
  %267 = getelementptr double, ptr %266, i64 %.2487.neg604
  %min.iters.check861 = icmp ult i64 %257, 4
  br i1 %min.iters.check861, label %scalar.ph860.preheader, label %vector.memcheck844

vector.memcheck844:                               ; preds = %256
  %smax = call i64 @llvm.smax.i64(i64 %114, i64 %.2487602)
  %268 = add i64 %smax, %.2487.neg604
  %269 = shl i64 %268, 3
  %scevgep854 = getelementptr i8, ptr %scev.check.iv852, i64 %269
  %270 = shl i64 %indvar845, 3
  %gep1014 = getelementptr i8, ptr %invariant.gep1013, i64 %270
  %scevgep849 = getelementptr i8, ptr %gep1014, i64 %269
  %scevgep847 = getelementptr i8, ptr %12, i64 %270
  %bound0855 = icmp ult ptr %scevgep847, %scevgep854
  %bound1856 = icmp ult ptr %scev.check.iv850, %scevgep849
  %found.conflict857 = and i1 %bound0855, %bound1856
  br i1 %found.conflict857, label %scalar.ph860.preheader, label %vector.ph862

vector.ph862:                                     ; preds = %vector.memcheck844
  %n.vec864 = and i64 %257, -4
  %ind.end865 = add i64 %.2487602, %n.vec864
  %broadcast.splatinsert874 = insertelement <2 x double> poison, double %265, i64 0
  %broadcast.splat875 = shufflevector <2 x double> %broadcast.splatinsert874, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body867

vector.body867:                                   ; preds = %vector.body867, %vector.ph862
  %index868 = phi i64 [ 0, %vector.ph862 ], [ %index.next876, %vector.body867 ]
  %offset.idx869 = add i64 %.2487602, %index868
  %271 = getelementptr double, ptr %267, i64 %offset.idx869
  %272 = getelementptr i8, ptr %271, i64 16
  %wide.load870 = load <2 x double>, ptr %271, align 8, !tbaa !9, !alias.scope !37
  %wide.load871 = load <2 x double>, ptr %272, align 8, !tbaa !9, !alias.scope !37
  %273 = fcmp oge <2 x double> %wide.load870, zeroinitializer
  %274 = fcmp oge <2 x double> %wide.load871, zeroinitializer
  %275 = fneg <2 x double> %wide.load870
  %276 = fneg <2 x double> %wide.load871
  %277 = select <2 x i1> %273, <2 x double> %wide.load870, <2 x double> %275
  %278 = select <2 x i1> %274, <2 x double> %wide.load871, <2 x double> %276
  %279 = getelementptr inbounds double, ptr %33, i64 %offset.idx869
  %280 = getelementptr inbounds i8, ptr %279, i64 16
  %wide.load872 = load <2 x double>, ptr %279, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %wide.load873 = load <2 x double>, ptr %280, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %281 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %277, <2 x double> %broadcast.splat875, <2 x double> %wide.load872)
  %282 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %278, <2 x double> %broadcast.splat875, <2 x double> %wide.load873)
  store <2 x double> %281, ptr %279, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  store <2 x double> %282, ptr %280, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %index.next876 = add nuw i64 %index868, 4
  %283 = icmp eq i64 %index.next876, %n.vec864
  br i1 %283, label %middle.block859, label %vector.body867, !llvm.loop !42

middle.block859:                                  ; preds = %vector.body867
  %cmp.n877 = icmp eq i64 %257, %n.vec864
  br i1 %cmp.n877, label %.loopexit971, label %scalar.ph860.preheader

scalar.ph860.preheader:                           ; preds = %middle.block859, %vector.memcheck844, %256
  %.3498598.ph = phi i64 [ %.2487602, %vector.memcheck844 ], [ %.2487602, %256 ], [ %ind.end865, %middle.block859 ]
  br label %scalar.ph860

scalar.ph860:                                     ; preds = %scalar.ph860.preheader, %scalar.ph860
  %.3498598 = phi i64 [ %292, %scalar.ph860 ], [ %.3498598.ph, %scalar.ph860.preheader ]
  %284 = getelementptr double, ptr %267, i64 %.3498598
  %285 = load double, ptr %284, align 8, !tbaa !9
  %286 = fcmp oge double %285, 0.000000e+00
  %287 = fneg double %285
  %288 = select i1 %286, double %285, double %287
  %289 = getelementptr inbounds double, ptr %33, i64 %.3498598
  %290 = load double, ptr %289, align 8, !tbaa !9
  %291 = call double @llvm.fmuladd.f64(double %288, double %265, double %290)
  store double %291, ptr %289, align 8, !tbaa !9
  %292 = add nuw nsw i64 %.3498598, 1
  %.not535.not = icmp slt i64 %.3498598, %114
  br i1 %.not535.not, label %scalar.ph860, label %.loopexit971, !llvm.loop !43

.loopexit971:                                     ; preds = %scalar.ph860, %middle.block859
  %293 = add i64 %252, %.2487.neg604
  %294 = add i64 %293, %.2603
  %295 = add nuw i64 %.2487602, 1
  %.2487.neg = xor i64 %.2487602, -1
  %exitcond729.not = icmp eq i64 %.2487602, %114
  %indvar.next846 = add i64 %indvar845, 1
  %scevgep851 = getelementptr i8, ptr %scev.check.iv850, i64 %261
  %scevgep853 = getelementptr i8, ptr %scev.check.iv852, i64 %259
  br i1 %exitcond729.not, label %.loopexit554, label %256, !llvm.loop !44

296:                                              ; preds = %.lr.ph617, %._crit_edge610
  %scev.check.iv823 = phi ptr [ %scevgep822, %.lr.ph617 ], [ %scevgep824, %._crit_edge610 ]
  %scev.check.iv = phi ptr [ %scevgep820, %.lr.ph617 ], [ %scevgep821, %._crit_edge610 ]
  %indvar = phi i64 [ 0, %.lr.ph617 ], [ %indvar.next, %._crit_edge610 ]
  %.3488.neg616 = phi i64 [ -1, %.lr.ph617 ], [ %.3488.neg, %._crit_edge610 ]
  %.3615 = phi i64 [ 1, %.lr.ph617 ], [ %337, %._crit_edge610 ]
  %.3488614 = phi i64 [ 1, %.lr.ph617 ], [ %308, %._crit_edge610 ]
  %297 = xor i64 %indvar, -1
  %298 = add i64 %114, %297
  %299 = shl i64 %indvar, 3
  %300 = sub i64 %255, %299
  %301 = sub i64 %114, %indvar
  %302 = shl i64 %301, 3
  %303 = shl i64 %indvar, 3
  %gep1016 = getelementptr i8, ptr %invariant.gep1015, i64 %303
  %gep612 = getelementptr double, ptr %invariant.gep611, i64 %.3488614
  %304 = load double, ptr %gep612, align 8, !tbaa !9
  %305 = fcmp oge double %304, 0.000000e+00
  %306 = fneg double %304
  %307 = select i1 %305, double %304, double %306
  %308 = add nuw i64 %.3488614, 1
  %.not533606.not = icmp slt i64 %.3488614, %114
  br i1 %.not533606.not, label %.lr.ph609, label %._crit_edge610

.lr.ph609:                                        ; preds = %296
  %309 = getelementptr double, ptr %24, i64 %.3615
  %310 = getelementptr double, ptr %309, i64 %.3488.neg616
  %min.iters.check827 = icmp ult i64 %298, 4
  br i1 %min.iters.check827, label %scalar.ph826.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph609
  %bound0 = icmp ult ptr %gep1016, %scev.check.iv823
  %bound1 = icmp ult ptr %scev.check.iv, %scevgep819
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph826.preheader, label %vector.ph828

vector.ph828:                                     ; preds = %vector.memcheck
  %n.vec830 = and i64 %298, -4
  %ind.end831 = add i64 %308, %n.vec830
  %broadcast.splatinsert840 = insertelement <2 x double> poison, double %307, i64 0
  %broadcast.splat841 = shufflevector <2 x double> %broadcast.splatinsert840, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body833

vector.body833:                                   ; preds = %vector.body833, %vector.ph828
  %index834 = phi i64 [ 0, %vector.ph828 ], [ %index.next842, %vector.body833 ]
  %offset.idx835 = add i64 %308, %index834
  %311 = getelementptr double, ptr %310, i64 %offset.idx835
  %312 = getelementptr i8, ptr %311, i64 16
  %wide.load836 = load <2 x double>, ptr %311, align 8, !tbaa !9, !alias.scope !45
  %wide.load837 = load <2 x double>, ptr %312, align 8, !tbaa !9, !alias.scope !45
  %313 = fcmp oge <2 x double> %wide.load836, zeroinitializer
  %314 = fcmp oge <2 x double> %wide.load837, zeroinitializer
  %315 = fneg <2 x double> %wide.load836
  %316 = fneg <2 x double> %wide.load837
  %317 = select <2 x i1> %313, <2 x double> %wide.load836, <2 x double> %315
  %318 = select <2 x i1> %314, <2 x double> %wide.load837, <2 x double> %316
  %319 = getelementptr inbounds double, ptr %33, i64 %offset.idx835
  %320 = getelementptr inbounds i8, ptr %319, i64 16
  %wide.load838 = load <2 x double>, ptr %319, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %wide.load839 = load <2 x double>, ptr %320, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %321 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %317, <2 x double> %broadcast.splat841, <2 x double> %wide.load838)
  %322 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %318, <2 x double> %broadcast.splat841, <2 x double> %wide.load839)
  store <2 x double> %321, ptr %319, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  store <2 x double> %322, ptr %320, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %index.next842 = add nuw i64 %index834, 4
  %323 = icmp eq i64 %index.next842, %n.vec830
  br i1 %323, label %middle.block825, label %vector.body833, !llvm.loop !50

middle.block825:                                  ; preds = %vector.body833
  %cmp.n843 = icmp eq i64 %298, %n.vec830
  br i1 %cmp.n843, label %._crit_edge610, label %scalar.ph826.preheader

scalar.ph826.preheader:                           ; preds = %middle.block825, %vector.memcheck, %.lr.ph609
  %.4499607.ph = phi i64 [ %308, %vector.memcheck ], [ %308, %.lr.ph609 ], [ %ind.end831, %middle.block825 ]
  br label %scalar.ph826

scalar.ph826:                                     ; preds = %scalar.ph826.preheader, %scalar.ph826
  %.4499607 = phi i64 [ %332, %scalar.ph826 ], [ %.4499607.ph, %scalar.ph826.preheader ]
  %324 = getelementptr double, ptr %310, i64 %.4499607
  %325 = load double, ptr %324, align 8, !tbaa !9
  %326 = fcmp oge double %325, 0.000000e+00
  %327 = fneg double %325
  %328 = select i1 %326, double %325, double %327
  %329 = getelementptr inbounds double, ptr %33, i64 %.4499607
  %330 = load double, ptr %329, align 8, !tbaa !9
  %331 = call double @llvm.fmuladd.f64(double %328, double %307, double %330)
  store double %331, ptr %329, align 8, !tbaa !9
  %332 = add nuw nsw i64 %.4499607, 1
  %.not533.not = icmp slt i64 %.4499607, %114
  br i1 %.not533.not, label %scalar.ph826, label %._crit_edge610, !llvm.loop !51

._crit_edge610:                                   ; preds = %scalar.ph826, %middle.block825, %296
  %333 = getelementptr inbounds double, ptr %33, i64 %.3488614
  %334 = load double, ptr %333, align 8, !tbaa !9
  %335 = fadd double %307, %334
  store double %335, ptr %333, align 8, !tbaa !9
  %336 = add i64 %253, %.3488.neg616
  %337 = add i64 %336, %.3615
  %.3488.neg = xor i64 %.3488614, -1
  %exitcond730.not = icmp eq i64 %.3488614, %114
  %indvar.next = add i64 %indvar, 1
  %scevgep821 = getelementptr i8, ptr %scev.check.iv, i64 %302
  %scevgep824 = getelementptr i8, ptr %scev.check.iv823, i64 %300
  br i1 %exitcond730.not, label %.loopexit554, label %296, !llvm.loop !52

338:                                              ; preds = %._crit_edge
  br i1 %.not, label %378, label %339

339:                                              ; preds = %338
  br i1 %.not515, label %.preheader557, label %.preheader559

.preheader559:                                    ; preds = %339
  br i1 %.not520570, label %._crit_edge676.thread, label %.preheader552.lr.ph

.preheader552.lr.ph:                              ; preds = %.preheader559
  %invariant.gep620 = getelementptr double, ptr %30, i64 %104
  %340 = add nuw i64 %114, 1
  br label %.preheader552

.preheader557:                                    ; preds = %339
  %invariant.gep639 = getelementptr double, ptr %30, i64 %104
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph646

.preheader552:                                    ; preds = %.preheader552.lr.ph, %352
  %indvars.iv731 = phi i64 [ 2, %.preheader552.lr.ph ], [ %indvars.iv.next732, %352 ]
  %.4628 = phi i64 [ 1, %.preheader552.lr.ph ], [ %356, %352 ]
  %.4489627 = phi i64 [ 1, %.preheader552.lr.ph ], [ %357, %352 ]
  %gep625 = getelementptr double, ptr %invariant.gep577, i64 %.4628
  br label %341

341:                                              ; preds = %.preheader552, %341
  %.0479623 = phi double [ 0.000000e+00, %.preheader552 ], [ %350, %341 ]
  %.5500622 = phi i64 [ 1, %.preheader552 ], [ %351, %341 ]
  %gep619 = getelementptr double, ptr %gep625, i64 %.5500622
  %342 = load double, ptr %gep619, align 8, !tbaa !9
  %343 = fcmp oge double %342, 0.000000e+00
  %344 = fneg double %342
  %345 = select i1 %343, double %342, double %344
  %gep621 = getelementptr double, ptr %invariant.gep620, i64 %.5500622
  %346 = load double, ptr %gep621, align 8, !tbaa !9
  %347 = fcmp oge double %346, 0.000000e+00
  %348 = fneg double %346
  %349 = select i1 %347, double %346, double %348
  %350 = call double @llvm.fmuladd.f64(double %345, double %349, double %.0479623)
  %351 = add nuw i64 %.5500622, 1
  %exitcond733.not = icmp eq i64 %351, %indvars.iv731
  br i1 %exitcond733.not, label %352, label %341, !llvm.loop !53

352:                                              ; preds = %341
  %353 = getelementptr inbounds double, ptr %33, i64 %.4489627
  %354 = load double, ptr %353, align 8, !tbaa !9
  %355 = fadd double %350, %354
  store double %355, ptr %353, align 8, !tbaa !9
  %356 = add nuw nsw i64 %.4628, %.4489627
  %357 = add nuw nsw i64 %.4489627, 1
  %indvars.iv.next732 = add nuw i64 %indvars.iv731, 1
  %exitcond734.not = icmp eq i64 %indvars.iv731, %340
  br i1 %exitcond734.not, label %.loopexit554, label %.preheader552, !llvm.loop !54

.lr.ph646:                                        ; preds = %.preheader557, %._crit_edge636
  %.5645 = phi i64 [ %376, %._crit_edge636 ], [ 1, %.preheader557 ]
  %.5490644 = phi i64 [ %377, %._crit_edge636 ], [ 1, %.preheader557 ]
  %gep640 = getelementptr double, ptr %invariant.gep639, i64 %.5490644
  %358 = load double, ptr %gep640, align 8, !tbaa !9
  %359 = fcmp oge double %358, 0.000000e+00
  %360 = fneg double %358
  %361 = select i1 %359, double %358, double %360
  %.not528.not631 = icmp ugt i64 %.5490644, 1
  br i1 %.not528.not631, label %.lr.ph635, label %._crit_edge636

.lr.ph635:                                        ; preds = %.lr.ph646
  %gep642 = getelementptr double, ptr %invariant.gep577, i64 %.5645
  br label %362

362:                                              ; preds = %.lr.ph635, %362
  %.1480633 = phi double [ %361, %.lr.ph635 ], [ %371, %362 ]
  %.6501632 = phi i64 [ 1, %.lr.ph635 ], [ %372, %362 ]
  %gep638 = getelementptr double, ptr %gep642, i64 %.6501632
  %363 = load double, ptr %gep638, align 8, !tbaa !9
  %364 = fcmp oge double %363, 0.000000e+00
  %365 = fneg double %363
  %366 = select i1 %364, double %363, double %365
  %gep630 = getelementptr double, ptr %invariant.gep639, i64 %.6501632
  %367 = load double, ptr %gep630, align 8, !tbaa !9
  %368 = fcmp oge double %367, 0.000000e+00
  %369 = fneg double %367
  %370 = select i1 %368, double %367, double %369
  %371 = call double @llvm.fmuladd.f64(double %366, double %370, double %.1480633)
  %372 = add nuw nsw i64 %.6501632, 1
  %exitcond735.not = icmp eq i64 %372, %.5490644
  br i1 %exitcond735.not, label %._crit_edge636, label %362, !llvm.loop !55

._crit_edge636:                                   ; preds = %362, %.lr.ph646
  %.1480.lcssa = phi double [ %361, %.lr.ph646 ], [ %371, %362 ]
  %373 = getelementptr inbounds double, ptr %33, i64 %.5490644
  %374 = load double, ptr %373, align 8, !tbaa !9
  %375 = fadd double %.1480.lcssa, %374
  store double %375, ptr %373, align 8, !tbaa !9
  %376 = add nuw nsw i64 %.5645, %.5490644
  %377 = add nuw i64 %.5490644, 1
  %exitcond736.not = icmp eq i64 %.5490644, %114
  br i1 %exitcond736.not, label %.loopexit554, label %.lr.ph646, !llvm.loop !56

378:                                              ; preds = %338
  br i1 %.not515, label %.preheader553, label %.preheader555

.preheader555:                                    ; preds = %378
  br i1 %.not520570, label %._crit_edge676.thread, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %.preheader555
  %invariant.gep647 = getelementptr double, ptr %30, i64 %104
  %379 = add nuw i64 %114, 1
  br label %.preheader

.preheader553:                                    ; preds = %378
  %invariant.gep664 = getelementptr double, ptr %30, i64 %104
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph670

.lr.ph670:                                        ; preds = %.preheader553
  %380 = add nuw i64 %114, 1
  br label %402

.preheader:                                       ; preds = %.preheader.lr.ph, %395
  %.6491.neg654 = phi i64 [ -1, %.preheader.lr.ph ], [ %.6491.neg, %395 ]
  %.6653 = phi i64 [ 1, %.preheader.lr.ph ], [ %400, %395 ]
  %.6491652 = phi i64 [ 1, %.preheader.lr.ph ], [ %401, %395 ]
  %381 = getelementptr double, ptr %24, i64 %.6653
  %382 = getelementptr double, ptr %381, i64 %.6491.neg654
  br label %383

383:                                              ; preds = %.preheader, %383
  %.2481650 = phi double [ 0.000000e+00, %.preheader ], [ %393, %383 ]
  %.7502649 = phi i64 [ %.6491652, %.preheader ], [ %394, %383 ]
  %384 = getelementptr double, ptr %382, i64 %.7502649
  %385 = load double, ptr %384, align 8, !tbaa !9
  %386 = fcmp oge double %385, 0.000000e+00
  %387 = fneg double %385
  %388 = select i1 %386, double %385, double %387
  %gep648 = getelementptr double, ptr %invariant.gep647, i64 %.7502649
  %389 = load double, ptr %gep648, align 8, !tbaa !9
  %390 = fcmp oge double %389, 0.000000e+00
  %391 = fneg double %389
  %392 = select i1 %390, double %389, double %391
  %393 = call double @llvm.fmuladd.f64(double %388, double %392, double %.2481650)
  %394 = add nuw nsw i64 %.7502649, 1
  %.not525.not = icmp slt i64 %.7502649, %114
  br i1 %.not525.not, label %383, label %395, !llvm.loop !57

395:                                              ; preds = %383
  %396 = getelementptr inbounds double, ptr %33, i64 %.6491652
  %397 = load double, ptr %396, align 8, !tbaa !9
  %398 = fadd double %393, %397
  store double %398, ptr %396, align 8, !tbaa !9
  %399 = add i64 %379, %.6491.neg654
  %400 = add i64 %399, %.6653
  %401 = add nuw i64 %.6491652, 1
  %.6491.neg = xor i64 %.6491652, -1
  %exitcond737.not = icmp eq i64 %.6491652, %114
  br i1 %exitcond737.not, label %.loopexit554, label %.preheader, !llvm.loop !58

402:                                              ; preds = %.lr.ph670, %._crit_edge662
  %.7492.neg669 = phi i64 [ -1, %.lr.ph670 ], [ %.7492.neg, %._crit_edge662 ]
  %.7668 = phi i64 [ 1, %.lr.ph670 ], [ %426, %._crit_edge662 ]
  %.7492667 = phi i64 [ 1, %.lr.ph670 ], [ %407, %._crit_edge662 ]
  %gep665 = getelementptr double, ptr %invariant.gep664, i64 %.7492667
  %403 = load double, ptr %gep665, align 8, !tbaa !9
  %404 = fcmp oge double %403, 0.000000e+00
  %405 = fneg double %403
  %406 = select i1 %404, double %403, double %405
  %407 = add nuw i64 %.7492667, 1
  %.not523657.not = icmp slt i64 %.7492667, %114
  br i1 %.not523657.not, label %.lr.ph661, label %._crit_edge662

.lr.ph661:                                        ; preds = %402
  %408 = getelementptr double, ptr %24, i64 %.7668
  %409 = getelementptr double, ptr %408, i64 %.7492.neg669
  br label %410

410:                                              ; preds = %.lr.ph661, %410
  %.3482659 = phi double [ %406, %.lr.ph661 ], [ %420, %410 ]
  %.8658 = phi i64 [ %407, %.lr.ph661 ], [ %421, %410 ]
  %411 = getelementptr double, ptr %409, i64 %.8658
  %412 = load double, ptr %411, align 8, !tbaa !9
  %413 = fcmp oge double %412, 0.000000e+00
  %414 = fneg double %412
  %415 = select i1 %413, double %412, double %414
  %gep656 = getelementptr double, ptr %invariant.gep664, i64 %.8658
  %416 = load double, ptr %gep656, align 8, !tbaa !9
  %417 = fcmp oge double %416, 0.000000e+00
  %418 = fneg double %416
  %419 = select i1 %417, double %416, double %418
  %420 = call double @llvm.fmuladd.f64(double %415, double %419, double %.3482659)
  %421 = add nuw nsw i64 %.8658, 1
  %.not523.not = icmp slt i64 %.8658, %114
  br i1 %.not523.not, label %410, label %._crit_edge662, !llvm.loop !59

._crit_edge662:                                   ; preds = %410, %402
  %.3482.lcssa = phi double [ %406, %402 ], [ %420, %410 ]
  %422 = getelementptr inbounds double, ptr %33, i64 %.7492667
  %423 = load double, ptr %422, align 8, !tbaa !9
  %424 = fadd double %.3482.lcssa, %423
  store double %424, ptr %422, align 8, !tbaa !9
  %425 = add i64 %380, %.7492.neg669
  %426 = add i64 %425, %.7668
  %.7492.neg = xor i64 %.7492667, -1
  %exitcond738.not = icmp eq i64 %.7492667, %114
  br i1 %exitcond738.not, label %.loopexit554, label %402, !llvm.loop !60

.loopexit554:                                     ; preds = %.loopexit972, %._crit_edge587, %.loopexit971, %._crit_edge610, %352, %._crit_edge636, %395, %._crit_edge662
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph675

.lr.ph675:                                        ; preds = %.loopexit554
  %427 = getelementptr double, ptr %33, i64 %114
  br label %428

428:                                              ; preds = %.lr.ph675, %428
  %.4483673 = phi double [ 0.000000e+00, %.lr.ph675 ], [ %442, %428 ]
  %.9672 = phi i64 [ 1, %.lr.ph675 ], [ %443, %428 ]
  %429 = getelementptr inbounds double, ptr %33, i64 %.9672
  %430 = load double, ptr %429, align 8, !tbaa !9
  %431 = fcmp ogt double %430, %97
  %432 = getelementptr double, ptr %427, i64 %.9672
  %433 = load double, ptr %432, align 8, !tbaa !9
  %434 = fcmp oge double %433, 0.000000e+00
  %435 = fneg double %433
  %436 = select i1 %434, double %433, double %435
  %437 = fdiv double %436, %430
  %438 = fadd double %96, %436
  %439 = fadd double %96, %430
  %440 = fdiv double %438, %439
  %.sink765 = select i1 %431, double %437, double %440
  %441 = fcmp oge double %.4483673, %.sink765
  %442 = select i1 %441, double %.4483673, double %.sink765
  %443 = add nuw i64 %.9672, 1
  %exitcond739.not = icmp eq i64 %.9672, %114
  br i1 %exitcond739.not, label %._crit_edge676, label %428, !llvm.loop !61

._crit_edge676.thread:                            ; preds = %.loopexit554, %.preheader567, %.preheader565, %.preheader563, %.preheader561, %.preheader559, %.preheader557, %.preheader555, %.preheader553
  %444 = getelementptr inbounds double, ptr %32, i64 %.1494706
  store double 0.000000e+00, ptr %444, align 8, !tbaa !9
  br label %._crit_edge682

._crit_edge676:                                   ; preds = %428
  %445 = getelementptr inbounds double, ptr %32, i64 %.1494706
  store double %442, ptr %445, align 8, !tbaa !9
  br i1 %.not520570, label %._crit_edge682, label %.lr.ph681

.lr.ph681:                                        ; preds = %._crit_edge676
  %446 = getelementptr double, ptr %33, i64 %114
  %min.iters.check802 = icmp eq i64 %114, 1
  br i1 %min.iters.check802, label %scalar.ph801.preheader, label %vector.ph803

vector.ph803:                                     ; preds = %.lr.ph681
  %n.vec805 = and i64 %114, 9223372036854775806
  %ind.end806 = or i64 %114, 1
  br label %vector.body808

vector.body808:                                   ; preds = %vector.body808, %vector.ph803
  %index809 = phi i64 [ 0, %vector.ph803 ], [ %index.next817, %vector.body808 ]
  %offset.idx810 = or disjoint i64 %index809, 1
  %447 = getelementptr double, ptr %12, i64 %index809
  %wide.load811 = load <2 x double>, ptr %447, align 8, !tbaa !9
  %448 = fcmp ogt <2 x double> %wide.load811, %broadcast.splat
  %449 = getelementptr double, ptr %446, i64 %offset.idx810
  %wide.load812 = load <2 x double>, ptr %449, align 8, !tbaa !9
  %450 = fcmp oge <2 x double> %wide.load812, zeroinitializer
  %451 = fneg <2 x double> %wide.load812
  %452 = select <2 x i1> %450, <2 x double> %wide.load812, <2 x double> %451
  %453 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat814, <2 x double> %wide.load811, <2 x double> %452)
  %454 = fadd <2 x double> %broadcast.splat816, %453
  %455 = select <2 x i1> %448, <2 x double> %453, <2 x double> %454
  store <2 x double> %455, ptr %447, align 8, !tbaa !9
  %index.next817 = add nuw i64 %index809, 2
  %456 = icmp eq i64 %index.next817, %n.vec805
  br i1 %456, label %middle.block800, label %vector.body808, !llvm.loop !62

middle.block800:                                  ; preds = %vector.body808
  %cmp.n818 = icmp eq i64 %114, %n.vec805
  br i1 %cmp.n818, label %._crit_edge682, label %scalar.ph801.preheader

scalar.ph801.preheader:                           ; preds = %middle.block800, %.lr.ph681
  %.10679.ph = phi i64 [ 1, %.lr.ph681 ], [ %ind.end806, %middle.block800 ]
  br label %scalar.ph801

scalar.ph801:                                     ; preds = %scalar.ph801.preheader, %scalar.ph801
  %.10679 = phi i64 [ %467, %scalar.ph801 ], [ %.10679.ph, %scalar.ph801.preheader ]
  %457 = getelementptr inbounds double, ptr %33, i64 %.10679
  %458 = load double, ptr %457, align 8, !tbaa !9
  %459 = fcmp ogt double %458, %97
  %460 = getelementptr double, ptr %446, i64 %.10679
  %461 = load double, ptr %460, align 8, !tbaa !9
  %462 = fcmp oge double %461, 0.000000e+00
  %463 = fneg double %461
  %464 = select i1 %462, double %461, double %463
  %465 = call double @llvm.fmuladd.f64(double %99, double %458, double %464)
  %466 = fadd double %96, %465
  %storemerge546 = select i1 %459, double %465, double %466
  store double %storemerge546, ptr %457, align 8, !tbaa !9
  %467 = add nuw i64 %.10679, 1
  %exitcond740.not = icmp eq i64 %.10679, %114
  br i1 %exitcond740.not, label %._crit_edge682, label %scalar.ph801, !llvm.loop !63

._crit_edge682:                                   ; preds = %scalar.ph801, %middle.block800, %._crit_edge676.thread, %._crit_edge676
  store i64 0, ptr %21, align 8, !tbaa !5
  %468 = getelementptr inbounds double, ptr %31, i64 %.1494706
  br label %.loopexit551

.loopexit551:                                     ; preds = %.loopexit551.backedge, %._crit_edge682
  %469 = phi i64 [ %114, %._crit_edge682 ], [ %.be, %.loopexit551.backedge ]
  %.idx = shl i64 %469, 4
  %470 = getelementptr i8, ptr %12, i64 %.idx
  %471 = getelementptr double, ptr %12, i64 %469
  %472 = call i32 @dlacn2_(ptr noundef nonnull %3, ptr noundef %470, ptr noundef %471, ptr noundef %13, ptr noundef nonnull %468, ptr noundef nonnull %21, ptr noundef nonnull %22) #5
  %473 = load i64, ptr %21, align 8, !tbaa !5
  %474 = load i64, ptr %3, align 8, !tbaa !5
  switch i64 %473, label %493 [
    i64 0, label %510
    i64 1, label %475
  ]

475:                                              ; preds = %.loopexit551
  %476 = getelementptr double, ptr %12, i64 %474
  %477 = call i32 @f2c_dtpsv(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %476, ptr noundef nonnull @c__1) #5
  %478 = load i64, ptr %3, align 8, !tbaa !5
  %.not545683 = icmp slt i64 %478, 1
  br i1 %.not545683, label %.loopexit551.backedge, label %.lr.ph686

.lr.ph686:                                        ; preds = %475
  %479 = getelementptr double, ptr %33, i64 %478
  %min.iters.check785 = icmp ult i64 %478, 4
  br i1 %min.iters.check785, label %scalar.ph784.preheader, label %vector.ph786

vector.ph786:                                     ; preds = %.lr.ph686
  %n.vec788 = and i64 %478, 9223372036854775804
  %ind.end789 = or disjoint i64 %n.vec788, 1
  br label %vector.body791

vector.body791:                                   ; preds = %vector.body791, %vector.ph786
  %index792 = phi i64 [ 0, %vector.ph786 ], [ %index.next798, %vector.body791 ]
  %offset.idx793 = or disjoint i64 %index792, 1
  %480 = getelementptr double, ptr %12, i64 %index792
  %481 = getelementptr inbounds i8, ptr %480, i64 16
  %wide.load794 = load <2 x double>, ptr %480, align 8, !tbaa !9
  %wide.load795 = load <2 x double>, ptr %481, align 8, !tbaa !9
  %482 = getelementptr double, ptr %479, i64 %offset.idx793
  %483 = getelementptr i8, ptr %482, i64 16
  %wide.load796 = load <2 x double>, ptr %482, align 8, !tbaa !9
  %wide.load797 = load <2 x double>, ptr %483, align 8, !tbaa !9
  %484 = fmul <2 x double> %wide.load794, %wide.load796
  %485 = fmul <2 x double> %wide.load795, %wide.load797
  store <2 x double> %484, ptr %482, align 8, !tbaa !9
  store <2 x double> %485, ptr %483, align 8, !tbaa !9
  %index.next798 = add nuw i64 %index792, 4
  %486 = icmp eq i64 %index.next798, %n.vec788
  br i1 %486, label %middle.block783, label %vector.body791, !llvm.loop !64

middle.block783:                                  ; preds = %vector.body791
  %cmp.n799 = icmp eq i64 %478, %n.vec788
  br i1 %cmp.n799, label %.loopexit551.backedge, label %scalar.ph784.preheader

.loopexit551.backedge:                            ; preds = %scalar.ph784, %middle.block783, %475, %._crit_edge691
  %.be = phi i64 [ %478, %475 ], [ %.pre745.pre, %._crit_edge691 ], [ %478, %middle.block783 ], [ %478, %scalar.ph784 ]
  br label %.loopexit551

scalar.ph784.preheader:                           ; preds = %middle.block783, %.lr.ph686
  %.11684.ph = phi i64 [ 1, %.lr.ph686 ], [ %ind.end789, %middle.block783 ]
  br label %scalar.ph784

scalar.ph784:                                     ; preds = %scalar.ph784.preheader, %scalar.ph784
  %.11684 = phi i64 [ %492, %scalar.ph784 ], [ %.11684.ph, %scalar.ph784.preheader ]
  %487 = getelementptr inbounds double, ptr %33, i64 %.11684
  %488 = load double, ptr %487, align 8, !tbaa !9
  %489 = getelementptr double, ptr %479, i64 %.11684
  %490 = load double, ptr %489, align 8, !tbaa !9
  %491 = fmul double %488, %490
  store double %491, ptr %489, align 8, !tbaa !9
  %492 = add nuw i64 %.11684, 1
  %exitcond741.not = icmp eq i64 %.11684, %478
  br i1 %exitcond741.not, label %.loopexit551.backedge, label %scalar.ph784, !llvm.loop !65

493:                                              ; preds = %.loopexit551
  %.not544687 = icmp slt i64 %474, 1
  br i1 %.not544687, label %._crit_edge691, label %.lr.ph690

.lr.ph690:                                        ; preds = %493
  %494 = getelementptr double, ptr %33, i64 %474
  %min.iters.check = icmp ult i64 %474, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph690
  %n.vec = and i64 %474, 9223372036854775804
  %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
  %495 = getelementptr double, ptr %12, i64 %index
  %496 = getelementptr inbounds i8, ptr %495, i64 16
  %wide.load = load <2 x double>, ptr %495, align 8, !tbaa !9
  %wide.load780 = load <2 x double>, ptr %496, align 8, !tbaa !9
  %497 = getelementptr double, ptr %494, i64 %offset.idx
  %498 = getelementptr i8, ptr %497, i64 16
  %wide.load781 = load <2 x double>, ptr %497, align 8, !tbaa !9
  %wide.load782 = load <2 x double>, ptr %498, align 8, !tbaa !9
  %499 = fmul <2 x double> %wide.load, %wide.load781
  %500 = fmul <2 x double> %wide.load780, %wide.load782
  store <2 x double> %499, ptr %497, align 8, !tbaa !9
  store <2 x double> %500, ptr %498, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %501 = icmp eq i64 %index.next, %n.vec
  br i1 %501, label %middle.block, label %vector.body, !llvm.loop !66

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %474, %n.vec
  br i1 %cmp.n, label %._crit_edge691, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph690
  %.12688.ph = phi i64 [ 1, %.lr.ph690 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.12688 = phi i64 [ %507, %scalar.ph ], [ %.12688.ph, %scalar.ph.preheader ]
  %502 = getelementptr inbounds double, ptr %33, i64 %.12688
  %503 = load double, ptr %502, align 8, !tbaa !9
  %504 = getelementptr double, ptr %494, i64 %.12688
  %505 = load double, ptr %504, align 8, !tbaa !9
  %506 = fmul double %503, %505
  store double %506, ptr %504, align 8, !tbaa !9
  %507 = add nuw i64 %.12688, 1
  %exitcond742.not = icmp eq i64 %.12688, %474
  br i1 %exitcond742.not, label %._crit_edge691, label %scalar.ph, !llvm.loop !67

._crit_edge691:                                   ; preds = %scalar.ph, %middle.block, %493
  %508 = getelementptr double, ptr %12, i64 %474
  %509 = call i32 @f2c_dtpsv(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %508, ptr noundef nonnull @c__1) #5
  %.pre745.pre = load i64, ptr %3, align 8, !tbaa !5
  br label %.loopexit551.backedge

510:                                              ; preds = %.loopexit551
  %invariant.gep692 = getelementptr double, ptr %30, i64 %104
  %.not543694 = icmp slt i64 %474, 1
  br i1 %.not543694, label %._crit_edge699.thread, label %.lr.ph698.preheader

.lr.ph698.preheader:                              ; preds = %510
  %xtraiter994 = and i64 %474, 1
  %511 = icmp eq i64 %474, 1
  br i1 %511, label %._crit_edge699.unr-lcssa, label %.lr.ph698.preheader.new

.lr.ph698.preheader.new:                          ; preds = %.lr.ph698.preheader
  %unroll_iter = and i64 %474, 9223372036854775806
  %invariant.gep1017 = getelementptr i8, ptr %invariant.gep692, i64 8
  br label %.lr.ph698

.lr.ph698:                                        ; preds = %.lr.ph698, %.lr.ph698.preheader.new
  %.0696 = phi double [ 0.000000e+00, %.lr.ph698.preheader.new ], [ %523, %.lr.ph698 ]
  %.13695 = phi i64 [ 1, %.lr.ph698.preheader.new ], [ %524, %.lr.ph698 ]
  %niter = phi i64 [ 0, %.lr.ph698.preheader.new ], [ %niter.next.1, %.lr.ph698 ]
  %gep693 = getelementptr double, ptr %invariant.gep692, i64 %.13695
  %512 = load double, ptr %gep693, align 8, !tbaa !9
  %513 = fcmp oge double %512, 0.000000e+00
  %514 = fneg double %512
  %515 = select i1 %513, double %512, double %514
  %516 = fcmp oge double %.0696, %515
  %517 = select i1 %516, double %.0696, double %515
  %gep1018 = getelementptr double, ptr %invariant.gep1017, i64 %.13695
  %518 = load double, ptr %gep1018, align 8, !tbaa !9
  %519 = fcmp oge double %518, 0.000000e+00
  %520 = fneg double %518
  %521 = select i1 %519, double %518, double %520
  %522 = fcmp oge double %517, %521
  %523 = select i1 %522, double %517, double %521
  %524 = add nuw i64 %.13695, 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_edge699.unr-lcssa, label %.lr.ph698, !llvm.loop !68

._crit_edge699.unr-lcssa:                         ; preds = %.lr.ph698, %.lr.ph698.preheader
  %.lcssa989.ph = phi double [ poison, %.lr.ph698.preheader ], [ %523, %.lr.ph698 ]
  %.0696.unr = phi double [ 0.000000e+00, %.lr.ph698.preheader ], [ %523, %.lr.ph698 ]
  %.13695.unr = phi i64 [ 1, %.lr.ph698.preheader ], [ %524, %.lr.ph698 ]
  %lcmp.mod995.not = icmp eq i64 %xtraiter994, 0
  br i1 %lcmp.mod995.not, label %._crit_edge699, label %.lr.ph698.epil

.lr.ph698.epil:                                   ; preds = %._crit_edge699.unr-lcssa
  %gep693.epil = getelementptr double, ptr %invariant.gep692, i64 %.13695.unr
  %525 = load double, ptr %gep693.epil, align 8, !tbaa !9
  %526 = fcmp oge double %525, 0.000000e+00
  %527 = fneg double %525
  %528 = select i1 %526, double %525, double %527
  %529 = fcmp oge double %.0696.unr, %528
  %530 = select i1 %529, double %.0696.unr, double %528
  br label %._crit_edge699

._crit_edge699:                                   ; preds = %._crit_edge699.unr-lcssa, %.lr.ph698.epil
  %.lcssa989 = phi double [ %.lcssa989.ph, %._crit_edge699.unr-lcssa ], [ %530, %.lr.ph698.epil ]
  %531 = fcmp une double %.lcssa989, 0.000000e+00
  br i1 %531, label %532, label %._crit_edge699.thread

532:                                              ; preds = %._crit_edge699
  %533 = load double, ptr %468, align 8, !tbaa !9
  %534 = fdiv double %533, %.lcssa989
  store double %534, ptr %468, align 8, !tbaa !9
  br label %._crit_edge699.thread

._crit_edge699.thread:                            ; preds = %510, %._crit_edge699, %532
  %535 = add nuw nsw i64 %.1494706, 1
  %.not519.not = icmp slt i64 %.1494706, %98
  %indvar.next940 = add i64 %indvar939, 1
  br i1 %.not519.not, label %102, label %.loopexit, !llvm.loop !69

.loopexit:                                        ; preds = %._crit_edge699.thread, %.lr.ph712.prol.loopexit, %.lr.ph712, %middle.block958, %65, %91, %66, %.thread
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  ret i32 0
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

declare i32 @f2c_daxpy(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 i32 @dlacn2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @f2c_dtpsv(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 i64 @llvm.umax.i64(i64, i64) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12, !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 = !{!7, !7, i64 0}
!19 = distinct !{!19, !12, !13, !14}
!20 = distinct !{!20, !12, !13}
!21 = !{!22}
!22 = distinct !{!22, !23}
!23 = distinct !{!23, !"LVerDomain"}
!24 = !{!25}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !12, !13, !14}
!27 = distinct !{!27, !12, !13}
!28 = distinct !{!28, !12}
!29 = !{!30}
!30 = distinct !{!30, !31}
!31 = distinct !{!31, !"LVerDomain"}
!32 = !{!33}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !12, !13, !14}
!35 = distinct !{!35, !12, !13}
!36 = distinct !{!36, !12}
!37 = !{!38}
!38 = distinct !{!38, !39}
!39 = distinct !{!39, !"LVerDomain"}
!40 = !{!41}
!41 = distinct !{!41, !39}
!42 = distinct !{!42, !12, !13, !14}
!43 = distinct !{!43, !12, !13}
!44 = distinct !{!44, !12}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = !{!49}
!49 = distinct !{!49, !47}
!50 = distinct !{!50, !12, !13, !14}
!51 = distinct !{!51, !12, !13}
!52 = distinct !{!52, !12}
!53 = distinct !{!53, !12}
!54 = distinct !{!54, !12}
!55 = distinct !{!55, !12}
!56 = distinct !{!56, !12}
!57 = distinct !{!57, !12}
!58 = distinct !{!58, !12}
!59 = distinct !{!59, !12}
!60 = distinct !{!60, !12}
!61 = distinct !{!61, !12}
!62 = distinct !{!62, !12, !13, !14}
!63 = distinct !{!63, !12, !14, !13}
!64 = distinct !{!64, !12, !13, !14}
!65 = distinct !{!65, !12, !14, !13}
!66 = distinct !{!66, !12, !13, !14}
!67 = distinct !{!67, !12, !14, !13}
!68 = distinct !{!68, !12}
!69 = distinct !{!69, !12}


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