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

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

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

109:                                              ; preds = %105
  %110 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -1, ptr %110, align 8, !tbaa !9
  br label %197

111:                                              ; preds = %105, %16
  %112 = load i64, ptr %59, align 8, !tbaa !9
  %113 = icmp ne i64 %112, 0
  br i1 %113, label %124, label %114

114:                                              ; preds = %111
  %115 = load ptr, ptr %19, align 8, !tbaa !5
  %116 = call i64 @lsame_(ptr noundef %115, ptr noundef @.str.3)
  %117 = icmp ne i64 %116, 0
  br i1 %117, label %124, label %118

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

122:                                              ; preds = %118
  %123 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -2, ptr %123, align 8, !tbaa !9
  br label %196

124:                                              ; preds = %118, %114, %111
  %125 = load i64, ptr %61, align 8, !tbaa !9
  %126 = icmp ne i64 %125, 0
  br i1 %126, label %133, label %127

127:                                              ; preds = %124
  %128 = load ptr, ptr %20, align 8, !tbaa !5
  %129 = call i64 @lsame_(ptr noundef %128, ptr noundef @.str)
  %130 = icmp ne i64 %129, 0
  br i1 %130, label %133, label %131

131:                                              ; preds = %127
  %132 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -3, ptr %132, align 8, !tbaa !9
  br label %195

133:                                              ; preds = %127, %124
  %134 = load ptr, ptr %21, align 8, !tbaa !5
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = icmp slt i64 %135, 0
  br i1 %136, label %137, label %139

137:                                              ; preds = %133
  %138 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -4, ptr %138, align 8, !tbaa !9
  br label %194

139:                                              ; preds = %133
  %140 = load ptr, ptr %22, align 8, !tbaa !5
  %141 = load i64, ptr %140, align 8, !tbaa !9
  %142 = icmp slt i64 %141, 0
  br i1 %142, label %143, label %145

143:                                              ; preds = %139
  %144 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -5, ptr %144, align 8, !tbaa !9
  br label %193

145:                                              ; preds = %139
  %146 = load ptr, ptr %24, align 8, !tbaa !5
  %147 = load i64, ptr %146, align 8, !tbaa !9
  %148 = load ptr, ptr %21, align 8, !tbaa !5
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = icmp sge i64 1, %149
  br i1 %150, label %151, label %152

151:                                              ; preds = %145
  br label %155

152:                                              ; preds = %145
  %153 = load ptr, ptr %21, align 8, !tbaa !5
  %154 = load i64, ptr %153, align 8, !tbaa !9
  br label %155

155:                                              ; preds = %152, %151
  %156 = phi i64 [ 1, %151 ], [ %154, %152 ]
  %157 = icmp slt i64 %147, %156
  br i1 %157, label %158, label %160

158:                                              ; preds = %155
  %159 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -7, ptr %159, align 8, !tbaa !9
  br label %192

160:                                              ; preds = %155
  %161 = load ptr, ptr %26, align 8, !tbaa !5
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = load ptr, ptr %21, align 8, !tbaa !5
  %164 = load i64, ptr %163, align 8, !tbaa !9
  %165 = icmp sge i64 1, %164
  br i1 %165, label %166, label %167

166:                                              ; preds = %160
  br label %170

167:                                              ; preds = %160
  %168 = load ptr, ptr %21, align 8, !tbaa !5
  %169 = load i64, ptr %168, align 8, !tbaa !9
  br label %170

170:                                              ; preds = %167, %166
  %171 = phi i64 [ 1, %166 ], [ %169, %167 ]
  %172 = icmp slt i64 %162, %171
  br i1 %172, label %173, label %175

173:                                              ; preds = %170
  %174 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -9, ptr %174, align 8, !tbaa !9
  br label %191

175:                                              ; preds = %170
  %176 = load ptr, ptr %28, align 8, !tbaa !5
  %177 = load i64, ptr %176, align 8, !tbaa !9
  %178 = load ptr, ptr %21, align 8, !tbaa !5
  %179 = load i64, ptr %178, align 8, !tbaa !9
  %180 = icmp sge i64 1, %179
  br i1 %180, label %181, label %182

181:                                              ; preds = %175
  br label %185

182:                                              ; preds = %175
  %183 = load ptr, ptr %21, align 8, !tbaa !5
  %184 = load i64, ptr %183, align 8, !tbaa !9
  br label %185

185:                                              ; preds = %182, %181
  %186 = phi i64 [ 1, %181 ], [ %184, %182 ]
  %187 = icmp slt i64 %177, %186
  br i1 %187, label %188, label %190

188:                                              ; preds = %185
  %189 = load ptr, ptr %33, align 8, !tbaa !5
  store i64 -11, ptr %189, align 8, !tbaa !9
  br label %190

190:                                              ; preds = %188, %185
  br label %191

191:                                              ; preds = %190, %173
  br label %192

192:                                              ; preds = %191, %158
  br label %193

193:                                              ; preds = %192, %143
  br label %194

194:                                              ; preds = %193, %137
  br label %195

195:                                              ; preds = %194, %131
  br label %196

196:                                              ; preds = %195, %122
  br label %197

197:                                              ; preds = %196, %109
  %198 = load ptr, ptr %33, align 8, !tbaa !5
  %199 = load i64, ptr %198, align 8, !tbaa !9
  %200 = icmp ne i64 %199, 0
  br i1 %200, label %201, label %206

201:                                              ; preds = %197
  %202 = load ptr, ptr %33, align 8, !tbaa !5
  %203 = load i64, ptr %202, align 8, !tbaa !9
  %204 = sub nsw i64 0, %203
  store i64 %204, ptr %40, align 8, !tbaa !9
  %205 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %40)
  store i32 0, ptr %17, align 4
  store i32 1, ptr %63, align 4
  br label %1254

206:                                              ; preds = %197
  %207 = load ptr, ptr %21, align 8, !tbaa !5
  %208 = load i64, ptr %207, align 8, !tbaa !9
  %209 = icmp eq i64 %208, 0
  br i1 %209, label %214, label %210

210:                                              ; preds = %206
  %211 = load ptr, ptr %22, align 8, !tbaa !5
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = icmp eq i64 %212, 0
  br i1 %213, label %214, label %232

214:                                              ; preds = %210, %206
  %215 = load ptr, ptr %22, align 8, !tbaa !5
  %216 = load i64, ptr %215, align 8, !tbaa !9
  store i64 %216, ptr %40, align 8, !tbaa !9
  store i64 1, ptr %47, align 8, !tbaa !9
  br label %217

217:                                              ; preds = %228, %214
  %218 = load i64, ptr %47, align 8, !tbaa !9
  %219 = load i64, ptr %40, align 8, !tbaa !9
  %220 = icmp sle i64 %218, %219
  br i1 %220, label %221, label %231

221:                                              ; preds = %217
  %222 = load ptr, ptr %29, align 8, !tbaa !5
  %223 = load i64, ptr %47, align 8, !tbaa !9
  %224 = getelementptr inbounds double, ptr %222, i64 %223
  store double 0.000000e+00, ptr %224, align 8, !tbaa !11
  %225 = load ptr, ptr %30, align 8, !tbaa !5
  %226 = load i64, ptr %47, align 8, !tbaa !9
  %227 = getelementptr inbounds double, ptr %225, i64 %226
  store double 0.000000e+00, ptr %227, align 8, !tbaa !11
  br label %228

228:                                              ; preds = %221
  %229 = load i64, ptr %47, align 8, !tbaa !9
  %230 = add nsw i64 %229, 1
  store i64 %230, ptr %47, align 8, !tbaa !9
  br label %217, !llvm.loop !13

231:                                              ; preds = %217
  store i32 0, ptr %17, align 4
  store i32 1, ptr %63, align 4
  br label %1254

232:                                              ; preds = %210
  %233 = load i64, ptr %59, align 8, !tbaa !9
  %234 = icmp ne i64 %233, 0
  br i1 %234, label %235, label %237

235:                                              ; preds = %232
  %236 = getelementptr inbounds [1 x i8], ptr %60, i64 0, i64 0
  store i8 84, ptr %236, align 1, !tbaa !15
  br label %239

237:                                              ; preds = %232
  %238 = getelementptr inbounds [1 x i8], ptr %60, i64 0, i64 0
  store i8 78, ptr %238, align 1, !tbaa !15
  br label %239

239:                                              ; preds = %237, %235
  %240 = load ptr, ptr %21, align 8, !tbaa !5
  %241 = load i64, ptr %240, align 8, !tbaa !9
  %242 = add nsw i64 %241, 1
  store i64 %242, ptr %51, align 8, !tbaa !9
  %243 = call double @dlamch_(ptr noundef @.str.6)
  store double %243, ptr %52, align 8, !tbaa !11
  %244 = call double @dlamch_(ptr noundef @.str.7)
  store double %244, ptr %58, align 8, !tbaa !11
  %245 = load i64, ptr %51, align 8, !tbaa !9
  %246 = sitofp i64 %245 to double
  %247 = load double, ptr %58, align 8, !tbaa !11
  %248 = fmul double %246, %247
  store double %248, ptr %54, align 8, !tbaa !11
  %249 = load double, ptr %54, align 8, !tbaa !11
  %250 = load double, ptr %52, align 8, !tbaa !11
  %251 = fdiv double %249, %250
  store double %251, ptr %55, align 8, !tbaa !11
  %252 = load ptr, ptr %22, align 8, !tbaa !5
  %253 = load i64, ptr %252, align 8, !tbaa !9
  store i64 %253, ptr %40, align 8, !tbaa !9
  store i64 1, ptr %47, align 8, !tbaa !9
  br label %254

254:                                              ; preds = %1250, %239
  %255 = load i64, ptr %47, align 8, !tbaa !9
  %256 = load i64, ptr %40, align 8, !tbaa !9
  %257 = icmp sle i64 %255, %256
  br i1 %257, label %258, label %1253

258:                                              ; preds = %254
  %259 = load ptr, ptr %21, align 8, !tbaa !5
  %260 = load ptr, ptr %27, align 8, !tbaa !5
  %261 = load i64, ptr %47, align 8, !tbaa !9
  %262 = load i64, ptr %38, 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 %31, align 8, !tbaa !5
  %267 = load ptr, ptr %21, 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_dcopy(ptr noundef %259, ptr noundef %265, ptr noundef @c__1, ptr noundef %270, ptr noundef @c__1)
  %272 = load ptr, ptr %18, align 8, !tbaa !5
  %273 = load ptr, ptr %19, align 8, !tbaa !5
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = load ptr, ptr %21, align 8, !tbaa !5
  %276 = load ptr, ptr %23, align 8, !tbaa !5
  %277 = load i64, ptr %35, align 8, !tbaa !9
  %278 = getelementptr inbounds double, ptr %276, i64 %277
  %279 = load ptr, ptr %24, align 8, !tbaa !5
  %280 = load ptr, ptr %31, align 8, !tbaa !5
  %281 = load ptr, ptr %21, align 8, !tbaa !5
  %282 = load i64, ptr %281, align 8, !tbaa !9
  %283 = add nsw i64 %282, 1
  %284 = getelementptr inbounds double, ptr %280, i64 %283
  %285 = call i32 @f2c_dtrmv(ptr noundef %272, ptr noundef %273, ptr noundef %274, ptr noundef %275, ptr noundef %278, ptr noundef %279, ptr noundef %284, ptr noundef @c__1)
  %286 = load ptr, ptr %21, align 8, !tbaa !5
  %287 = load ptr, ptr %25, align 8, !tbaa !5
  %288 = load i64, ptr %47, align 8, !tbaa !9
  %289 = load i64, ptr %36, align 8, !tbaa !9
  %290 = mul nsw i64 %288, %289
  %291 = add nsw i64 %290, 1
  %292 = getelementptr inbounds double, ptr %287, i64 %291
  %293 = load ptr, ptr %31, align 8, !tbaa !5
  %294 = load ptr, ptr %21, align 8, !tbaa !5
  %295 = load i64, ptr %294, align 8, !tbaa !9
  %296 = add nsw i64 %295, 1
  %297 = getelementptr inbounds double, ptr %293, i64 %296
  %298 = call i32 @f2c_daxpy(ptr noundef %286, ptr noundef @c_b19, ptr noundef %292, ptr noundef @c__1, ptr noundef %297, ptr noundef @c__1)
  %299 = load ptr, ptr %21, align 8, !tbaa !5
  %300 = load i64, ptr %299, align 8, !tbaa !9
  store i64 %300, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %301

301:                                              ; preds = %326, %258
  %302 = load i64, ptr %46, align 8, !tbaa !9
  %303 = load i64, ptr %41, align 8, !tbaa !9
  %304 = icmp sle i64 %302, %303
  br i1 %304, label %305, label %329

305:                                              ; preds = %301
  %306 = load ptr, ptr %25, align 8, !tbaa !5
  %307 = load i64, ptr %46, align 8, !tbaa !9
  %308 = load i64, ptr %47, align 8, !tbaa !9
  %309 = load i64, ptr %36, align 8, !tbaa !9
  %310 = mul nsw i64 %308, %309
  %311 = add nsw i64 %307, %310
  %312 = getelementptr inbounds double, ptr %306, i64 %311
  %313 = load double, ptr %312, align 8, !tbaa !11
  store double %313, ptr %43, align 8, !tbaa !11
  %314 = load double, ptr %43, align 8, !tbaa !11
  %315 = fcmp oge double %314, 0.000000e+00
  br i1 %315, label %316, label %318

316:                                              ; preds = %305
  %317 = load double, ptr %43, align 8, !tbaa !11
  br label %321

318:                                              ; preds = %305
  %319 = load double, ptr %43, align 8, !tbaa !11
  %320 = fneg double %319
  br label %321

321:                                              ; preds = %318, %316
  %322 = phi double [ %317, %316 ], [ %320, %318 ]
  %323 = load ptr, ptr %31, align 8, !tbaa !5
  %324 = load i64, ptr %46, align 8, !tbaa !9
  %325 = getelementptr inbounds double, ptr %323, i64 %324
  store double %322, ptr %325, align 8, !tbaa !11
  br label %326

326:                                              ; preds = %321
  %327 = load i64, ptr %46, align 8, !tbaa !9
  %328 = add nsw i64 %327, 1
  store i64 %328, ptr %46, align 8, !tbaa !9
  br label %301, !llvm.loop !16

329:                                              ; preds = %301
  %330 = load i64, ptr %59, align 8, !tbaa !9
  %331 = icmp ne i64 %330, 0
  br i1 %331, label %332, label %610

332:                                              ; preds = %329
  %333 = load i64, ptr %57, align 8, !tbaa !9
  %334 = icmp ne i64 %333, 0
  br i1 %334, label %335, label %470

335:                                              ; preds = %332
  %336 = load i64, ptr %61, align 8, !tbaa !9
  %337 = icmp ne i64 %336, 0
  br i1 %337, label %338, label %400

338:                                              ; preds = %335
  %339 = load ptr, ptr %21, align 8, !tbaa !5
  %340 = load i64, ptr %339, align 8, !tbaa !9
  store i64 %340, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %341

341:                                              ; preds = %396, %338
  %342 = load i64, ptr %48, align 8, !tbaa !9
  %343 = load i64, ptr %41, align 8, !tbaa !9
  %344 = icmp sle i64 %342, %343
  br i1 %344, label %345, label %399

345:                                              ; preds = %341
  %346 = load ptr, ptr %27, align 8, !tbaa !5
  %347 = load i64, ptr %48, align 8, !tbaa !9
  %348 = load i64, ptr %47, align 8, !tbaa !9
  %349 = load i64, ptr %38, align 8, !tbaa !9
  %350 = mul nsw i64 %348, %349
  %351 = add nsw i64 %347, %350
  %352 = getelementptr inbounds double, ptr %346, i64 %351
  %353 = load double, ptr %352, align 8, !tbaa !11
  store double %353, ptr %43, align 8, !tbaa !11
  %354 = load double, ptr %43, align 8, !tbaa !11
  %355 = fcmp oge double %354, 0.000000e+00
  br i1 %355, label %356, label %358

356:                                              ; preds = %345
  %357 = load double, ptr %43, align 8, !tbaa !11
  br label %361

358:                                              ; preds = %345
  %359 = load double, ptr %43, align 8, !tbaa !11
  %360 = fneg double %359
  br label %361

361:                                              ; preds = %358, %356
  %362 = phi double [ %357, %356 ], [ %360, %358 ]
  store double %362, ptr %50, align 8, !tbaa !11
  %363 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %363, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %364

364:                                              ; preds = %392, %361
  %365 = load i64, ptr %46, align 8, !tbaa !9
  %366 = load i64, ptr %42, align 8, !tbaa !9
  %367 = icmp sle i64 %365, %366
  br i1 %367, label %368, label %395

368:                                              ; preds = %364
  %369 = load ptr, ptr %23, align 8, !tbaa !5
  %370 = load i64, ptr %46, align 8, !tbaa !9
  %371 = load i64, ptr %48, align 8, !tbaa !9
  %372 = load i64, ptr %34, align 8, !tbaa !9
  %373 = mul nsw i64 %371, %372
  %374 = add nsw i64 %370, %373
  %375 = getelementptr inbounds double, ptr %369, i64 %374
  %376 = load double, ptr %375, align 8, !tbaa !11
  store double %376, ptr %43, align 8, !tbaa !11
  %377 = load double, ptr %43, align 8, !tbaa !11
  %378 = fcmp oge double %377, 0.000000e+00
  br i1 %378, label %379, label %381

379:                                              ; preds = %368
  %380 = load double, ptr %43, align 8, !tbaa !11
  br label %384

381:                                              ; preds = %368
  %382 = load double, ptr %43, align 8, !tbaa !11
  %383 = fneg double %382
  br label %384

384:                                              ; preds = %381, %379
  %385 = phi double [ %380, %379 ], [ %383, %381 ]
  %386 = load double, ptr %50, align 8, !tbaa !11
  %387 = load ptr, ptr %31, align 8, !tbaa !5
  %388 = load i64, ptr %46, align 8, !tbaa !9
  %389 = getelementptr inbounds double, ptr %387, i64 %388
  %390 = load double, ptr %389, align 8, !tbaa !11
  %391 = call double @llvm.fmuladd.f64(double %385, double %386, double %390)
  store double %391, ptr %389, align 8, !tbaa !11
  br label %392

392:                                              ; preds = %384
  %393 = load i64, ptr %46, align 8, !tbaa !9
  %394 = add nsw i64 %393, 1
  store i64 %394, ptr %46, align 8, !tbaa !9
  br label %364, !llvm.loop !17

395:                                              ; preds = %364
  br label %396

396:                                              ; preds = %395
  %397 = load i64, ptr %48, align 8, !tbaa !9
  %398 = add nsw i64 %397, 1
  store i64 %398, ptr %48, align 8, !tbaa !9
  br label %341, !llvm.loop !18

399:                                              ; preds = %341
  br label %469

400:                                              ; preds = %335
  %401 = load ptr, ptr %21, align 8, !tbaa !5
  %402 = load i64, ptr %401, align 8, !tbaa !9
  store i64 %402, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %403

403:                                              ; preds = %465, %400
  %404 = load i64, ptr %48, align 8, !tbaa !9
  %405 = load i64, ptr %41, align 8, !tbaa !9
  %406 = icmp sle i64 %404, %405
  br i1 %406, label %407, label %468

407:                                              ; preds = %403
  %408 = load ptr, ptr %27, align 8, !tbaa !5
  %409 = load i64, ptr %48, align 8, !tbaa !9
  %410 = load i64, ptr %47, align 8, !tbaa !9
  %411 = load i64, ptr %38, align 8, !tbaa !9
  %412 = mul nsw i64 %410, %411
  %413 = add nsw i64 %409, %412
  %414 = getelementptr inbounds double, ptr %408, i64 %413
  %415 = load double, ptr %414, align 8, !tbaa !11
  store double %415, ptr %43, align 8, !tbaa !11
  %416 = load double, ptr %43, align 8, !tbaa !11
  %417 = fcmp oge double %416, 0.000000e+00
  br i1 %417, label %418, label %420

418:                                              ; preds = %407
  %419 = load double, ptr %43, align 8, !tbaa !11
  br label %423

420:                                              ; preds = %407
  %421 = load double, ptr %43, align 8, !tbaa !11
  %422 = fneg double %421
  br label %423

423:                                              ; preds = %420, %418
  %424 = phi double [ %419, %418 ], [ %422, %420 ]
  store double %424, ptr %50, align 8, !tbaa !11
  %425 = load i64, ptr %48, align 8, !tbaa !9
  %426 = sub nsw i64 %425, 1
  store i64 %426, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %427

427:                                              ; preds = %455, %423
  %428 = load i64, ptr %46, align 8, !tbaa !9
  %429 = load i64, ptr %42, align 8, !tbaa !9
  %430 = icmp sle i64 %428, %429
  br i1 %430, label %431, label %458

431:                                              ; preds = %427
  %432 = load ptr, ptr %23, align 8, !tbaa !5
  %433 = load i64, ptr %46, align 8, !tbaa !9
  %434 = load i64, ptr %48, align 8, !tbaa !9
  %435 = load i64, ptr %34, align 8, !tbaa !9
  %436 = mul nsw i64 %434, %435
  %437 = add nsw i64 %433, %436
  %438 = getelementptr inbounds double, ptr %432, i64 %437
  %439 = load double, ptr %438, align 8, !tbaa !11
  store double %439, ptr %43, align 8, !tbaa !11
  %440 = load double, ptr %43, align 8, !tbaa !11
  %441 = fcmp oge double %440, 0.000000e+00
  br i1 %441, label %442, label %444

442:                                              ; preds = %431
  %443 = load double, ptr %43, align 8, !tbaa !11
  br label %447

444:                                              ; preds = %431
  %445 = load double, ptr %43, align 8, !tbaa !11
  %446 = fneg double %445
  br label %447

447:                                              ; preds = %444, %442
  %448 = phi double [ %443, %442 ], [ %446, %444 ]
  %449 = load double, ptr %50, align 8, !tbaa !11
  %450 = load ptr, ptr %31, align 8, !tbaa !5
  %451 = load i64, ptr %46, align 8, !tbaa !9
  %452 = getelementptr inbounds double, ptr %450, i64 %451
  %453 = load double, ptr %452, align 8, !tbaa !11
  %454 = call double @llvm.fmuladd.f64(double %448, double %449, double %453)
  store double %454, ptr %452, align 8, !tbaa !11
  br label %455

455:                                              ; preds = %447
  %456 = load i64, ptr %46, align 8, !tbaa !9
  %457 = add nsw i64 %456, 1
  store i64 %457, ptr %46, align 8, !tbaa !9
  br label %427, !llvm.loop !19

458:                                              ; preds = %427
  %459 = load double, ptr %50, align 8, !tbaa !11
  %460 = load ptr, ptr %31, align 8, !tbaa !5
  %461 = load i64, ptr %48, align 8, !tbaa !9
  %462 = getelementptr inbounds double, ptr %460, i64 %461
  %463 = load double, ptr %462, align 8, !tbaa !11
  %464 = fadd double %463, %459
  store double %464, ptr %462, align 8, !tbaa !11
  br label %465

465:                                              ; preds = %458
  %466 = load i64, ptr %48, align 8, !tbaa !9
  %467 = add nsw i64 %466, 1
  store i64 %467, ptr %48, align 8, !tbaa !9
  br label %403, !llvm.loop !20

468:                                              ; preds = %403
  br label %469

469:                                              ; preds = %468, %399
  br label %609

470:                                              ; preds = %332
  %471 = load i64, ptr %61, align 8, !tbaa !9
  %472 = icmp ne i64 %471, 0
  br i1 %472, label %473, label %537

473:                                              ; preds = %470
  %474 = load ptr, ptr %21, align 8, !tbaa !5
  %475 = load i64, ptr %474, align 8, !tbaa !9
  store i64 %475, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %476

476:                                              ; preds = %533, %473
  %477 = load i64, ptr %48, align 8, !tbaa !9
  %478 = load i64, ptr %41, align 8, !tbaa !9
  %479 = icmp sle i64 %477, %478
  br i1 %479, label %480, label %536

480:                                              ; preds = %476
  %481 = load ptr, ptr %27, align 8, !tbaa !5
  %482 = load i64, ptr %48, align 8, !tbaa !9
  %483 = load i64, ptr %47, align 8, !tbaa !9
  %484 = load i64, ptr %38, align 8, !tbaa !9
  %485 = mul nsw i64 %483, %484
  %486 = add nsw i64 %482, %485
  %487 = getelementptr inbounds double, ptr %481, i64 %486
  %488 = load double, ptr %487, align 8, !tbaa !11
  store double %488, ptr %43, align 8, !tbaa !11
  %489 = load double, ptr %43, align 8, !tbaa !11
  %490 = fcmp oge double %489, 0.000000e+00
  br i1 %490, label %491, label %493

491:                                              ; preds = %480
  %492 = load double, ptr %43, align 8, !tbaa !11
  br label %496

493:                                              ; preds = %480
  %494 = load double, ptr %43, align 8, !tbaa !11
  %495 = fneg double %494
  br label %496

496:                                              ; preds = %493, %491
  %497 = phi double [ %492, %491 ], [ %495, %493 ]
  store double %497, ptr %50, align 8, !tbaa !11
  %498 = load ptr, ptr %21, align 8, !tbaa !5
  %499 = load i64, ptr %498, align 8, !tbaa !9
  store i64 %499, ptr %42, align 8, !tbaa !9
  %500 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %500, ptr %46, align 8, !tbaa !9
  br label %501

501:                                              ; preds = %529, %496
  %502 = load i64, ptr %46, align 8, !tbaa !9
  %503 = load i64, ptr %42, align 8, !tbaa !9
  %504 = icmp sle i64 %502, %503
  br i1 %504, label %505, label %532

505:                                              ; preds = %501
  %506 = load ptr, ptr %23, align 8, !tbaa !5
  %507 = load i64, ptr %46, align 8, !tbaa !9
  %508 = load i64, ptr %48, align 8, !tbaa !9
  %509 = load i64, ptr %34, align 8, !tbaa !9
  %510 = mul nsw i64 %508, %509
  %511 = add nsw i64 %507, %510
  %512 = getelementptr inbounds double, ptr %506, i64 %511
  %513 = load double, ptr %512, align 8, !tbaa !11
  store double %513, ptr %43, align 8, !tbaa !11
  %514 = load double, ptr %43, align 8, !tbaa !11
  %515 = fcmp oge double %514, 0.000000e+00
  br i1 %515, label %516, label %518

516:                                              ; preds = %505
  %517 = load double, ptr %43, align 8, !tbaa !11
  br label %521

518:                                              ; preds = %505
  %519 = load double, ptr %43, align 8, !tbaa !11
  %520 = fneg double %519
  br label %521

521:                                              ; preds = %518, %516
  %522 = phi double [ %517, %516 ], [ %520, %518 ]
  %523 = load double, ptr %50, align 8, !tbaa !11
  %524 = load ptr, ptr %31, align 8, !tbaa !5
  %525 = load i64, ptr %46, align 8, !tbaa !9
  %526 = getelementptr inbounds double, ptr %524, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !11
  %528 = call double @llvm.fmuladd.f64(double %522, double %523, double %527)
  store double %528, ptr %526, align 8, !tbaa !11
  br label %529

529:                                              ; preds = %521
  %530 = load i64, ptr %46, align 8, !tbaa !9
  %531 = add nsw i64 %530, 1
  store i64 %531, ptr %46, align 8, !tbaa !9
  br label %501, !llvm.loop !21

532:                                              ; preds = %501
  br label %533

533:                                              ; preds = %532
  %534 = load i64, ptr %48, align 8, !tbaa !9
  %535 = add nsw i64 %534, 1
  store i64 %535, ptr %48, align 8, !tbaa !9
  br label %476, !llvm.loop !22

536:                                              ; preds = %476
  br label %608

537:                                              ; preds = %470
  %538 = load ptr, ptr %21, align 8, !tbaa !5
  %539 = load i64, ptr %538, align 8, !tbaa !9
  store i64 %539, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %540

540:                                              ; preds = %604, %537
  %541 = load i64, ptr %48, align 8, !tbaa !9
  %542 = load i64, ptr %41, align 8, !tbaa !9
  %543 = icmp sle i64 %541, %542
  br i1 %543, label %544, label %607

544:                                              ; preds = %540
  %545 = load ptr, ptr %27, align 8, !tbaa !5
  %546 = load i64, ptr %48, align 8, !tbaa !9
  %547 = load i64, ptr %47, align 8, !tbaa !9
  %548 = load i64, ptr %38, align 8, !tbaa !9
  %549 = mul nsw i64 %547, %548
  %550 = add nsw i64 %546, %549
  %551 = getelementptr inbounds double, ptr %545, i64 %550
  %552 = load double, ptr %551, align 8, !tbaa !11
  store double %552, ptr %43, align 8, !tbaa !11
  %553 = load double, ptr %43, align 8, !tbaa !11
  %554 = fcmp oge double %553, 0.000000e+00
  br i1 %554, label %555, label %557

555:                                              ; preds = %544
  %556 = load double, ptr %43, align 8, !tbaa !11
  br label %560

557:                                              ; preds = %544
  %558 = load double, ptr %43, align 8, !tbaa !11
  %559 = fneg double %558
  br label %560

560:                                              ; preds = %557, %555
  %561 = phi double [ %556, %555 ], [ %559, %557 ]
  store double %561, ptr %50, align 8, !tbaa !11
  %562 = load ptr, ptr %21, align 8, !tbaa !5
  %563 = load i64, ptr %562, align 8, !tbaa !9
  store i64 %563, ptr %42, align 8, !tbaa !9
  %564 = load i64, ptr %48, align 8, !tbaa !9
  %565 = add nsw i64 %564, 1
  store i64 %565, ptr %46, align 8, !tbaa !9
  br label %566

566:                                              ; preds = %594, %560
  %567 = load i64, ptr %46, align 8, !tbaa !9
  %568 = load i64, ptr %42, align 8, !tbaa !9
  %569 = icmp sle i64 %567, %568
  br i1 %569, label %570, label %597

570:                                              ; preds = %566
  %571 = load ptr, ptr %23, align 8, !tbaa !5
  %572 = load i64, ptr %46, align 8, !tbaa !9
  %573 = load i64, ptr %48, align 8, !tbaa !9
  %574 = load i64, ptr %34, align 8, !tbaa !9
  %575 = mul nsw i64 %573, %574
  %576 = add nsw i64 %572, %575
  %577 = getelementptr inbounds double, ptr %571, i64 %576
  %578 = load double, ptr %577, align 8, !tbaa !11
  store double %578, ptr %43, align 8, !tbaa !11
  %579 = load double, ptr %43, align 8, !tbaa !11
  %580 = fcmp oge double %579, 0.000000e+00
  br i1 %580, label %581, label %583

581:                                              ; preds = %570
  %582 = load double, ptr %43, align 8, !tbaa !11
  br label %586

583:                                              ; preds = %570
  %584 = load double, ptr %43, align 8, !tbaa !11
  %585 = fneg double %584
  br label %586

586:                                              ; preds = %583, %581
  %587 = phi double [ %582, %581 ], [ %585, %583 ]
  %588 = load double, ptr %50, align 8, !tbaa !11
  %589 = load ptr, ptr %31, align 8, !tbaa !5
  %590 = load i64, ptr %46, align 8, !tbaa !9
  %591 = getelementptr inbounds double, ptr %589, i64 %590
  %592 = load double, ptr %591, align 8, !tbaa !11
  %593 = call double @llvm.fmuladd.f64(double %587, double %588, double %592)
  store double %593, ptr %591, align 8, !tbaa !11
  br label %594

594:                                              ; preds = %586
  %595 = load i64, ptr %46, align 8, !tbaa !9
  %596 = add nsw i64 %595, 1
  store i64 %596, ptr %46, align 8, !tbaa !9
  br label %566, !llvm.loop !23

597:                                              ; preds = %566
  %598 = load double, ptr %50, align 8, !tbaa !11
  %599 = load ptr, ptr %31, align 8, !tbaa !5
  %600 = load i64, ptr %48, align 8, !tbaa !9
  %601 = getelementptr inbounds double, ptr %599, i64 %600
  %602 = load double, ptr %601, align 8, !tbaa !11
  %603 = fadd double %602, %598
  store double %603, ptr %601, align 8, !tbaa !11
  br label %604

604:                                              ; preds = %597
  %605 = load i64, ptr %48, align 8, !tbaa !9
  %606 = add nsw i64 %605, 1
  store i64 %606, ptr %48, align 8, !tbaa !9
  br label %540, !llvm.loop !24

607:                                              ; preds = %540
  br label %608

608:                                              ; preds = %607, %536
  br label %609

609:                                              ; preds = %608, %469
  br label %918

610:                                              ; preds = %329
  %611 = load i64, ptr %57, align 8, !tbaa !9
  %612 = icmp ne i64 %611, 0
  br i1 %612, label %613, label %763

613:                                              ; preds = %610
  %614 = load i64, ptr %61, align 8, !tbaa !9
  %615 = icmp ne i64 %614, 0
  br i1 %615, label %616, label %680

616:                                              ; preds = %613
  %617 = load ptr, ptr %21, align 8, !tbaa !5
  %618 = load i64, ptr %617, align 8, !tbaa !9
  store i64 %618, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %619

619:                                              ; preds = %676, %616
  %620 = load i64, ptr %48, align 8, !tbaa !9
  %621 = load i64, ptr %41, align 8, !tbaa !9
  %622 = icmp sle i64 %620, %621
  br i1 %622, label %623, label %679

623:                                              ; preds = %619
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  %624 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %624, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %625

625:                                              ; preds = %666, %623
  %626 = load i64, ptr %46, align 8, !tbaa !9
  %627 = load i64, ptr %42, align 8, !tbaa !9
  %628 = icmp sle i64 %626, %627
  br i1 %628, label %629, label %669

629:                                              ; preds = %625
  %630 = load ptr, ptr %23, align 8, !tbaa !5
  %631 = load i64, ptr %46, align 8, !tbaa !9
  %632 = load i64, ptr %48, align 8, !tbaa !9
  %633 = load i64, ptr %34, align 8, !tbaa !9
  %634 = mul nsw i64 %632, %633
  %635 = add nsw i64 %631, %634
  %636 = getelementptr inbounds double, ptr %630, i64 %635
  %637 = load double, ptr %636, align 8, !tbaa !11
  store double %637, ptr %43, align 8, !tbaa !11
  %638 = load double, ptr %43, align 8, !tbaa !11
  %639 = fcmp oge double %638, 0.000000e+00
  br i1 %639, label %640, label %642

640:                                              ; preds = %629
  %641 = load double, ptr %43, align 8, !tbaa !11
  br label %645

642:                                              ; preds = %629
  %643 = load double, ptr %43, align 8, !tbaa !11
  %644 = fneg double %643
  br label %645

645:                                              ; preds = %642, %640
  %646 = phi double [ %641, %640 ], [ %644, %642 ]
  %647 = load ptr, ptr %27, align 8, !tbaa !5
  %648 = load i64, ptr %46, align 8, !tbaa !9
  %649 = load i64, ptr %47, align 8, !tbaa !9
  %650 = load i64, ptr %38, align 8, !tbaa !9
  %651 = mul nsw i64 %649, %650
  %652 = add nsw i64 %648, %651
  %653 = getelementptr inbounds double, ptr %647, i64 %652
  %654 = load double, ptr %653, align 8, !tbaa !11
  store double %654, ptr %44, align 8, !tbaa !11
  %655 = load double, ptr %44, align 8, !tbaa !11
  %656 = fcmp oge double %655, 0.000000e+00
  br i1 %656, label %657, label %659

657:                                              ; preds = %645
  %658 = load double, ptr %44, align 8, !tbaa !11
  br label %662

659:                                              ; preds = %645
  %660 = load double, ptr %44, align 8, !tbaa !11
  %661 = fneg double %660
  br label %662

662:                                              ; preds = %659, %657
  %663 = phi double [ %658, %657 ], [ %661, %659 ]
  %664 = load double, ptr %49, align 8, !tbaa !11
  %665 = call double @llvm.fmuladd.f64(double %646, double %663, double %664)
  store double %665, ptr %49, align 8, !tbaa !11
  br label %666

666:                                              ; preds = %662
  %667 = load i64, ptr %46, align 8, !tbaa !9
  %668 = add nsw i64 %667, 1
  store i64 %668, ptr %46, align 8, !tbaa !9
  br label %625, !llvm.loop !25

669:                                              ; preds = %625
  %670 = load double, ptr %49, align 8, !tbaa !11
  %671 = load ptr, ptr %31, align 8, !tbaa !5
  %672 = load i64, ptr %48, align 8, !tbaa !9
  %673 = getelementptr inbounds double, ptr %671, i64 %672
  %674 = load double, ptr %673, align 8, !tbaa !11
  %675 = fadd double %674, %670
  store double %675, ptr %673, align 8, !tbaa !11
  br label %676

676:                                              ; preds = %669
  %677 = load i64, ptr %48, align 8, !tbaa !9
  %678 = add nsw i64 %677, 1
  store i64 %678, ptr %48, align 8, !tbaa !9
  br label %619, !llvm.loop !26

679:                                              ; preds = %619
  br label %762

680:                                              ; preds = %613
  %681 = load ptr, ptr %21, align 8, !tbaa !5
  %682 = load i64, ptr %681, align 8, !tbaa !9
  store i64 %682, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %683

683:                                              ; preds = %758, %680
  %684 = load i64, ptr %48, align 8, !tbaa !9
  %685 = load i64, ptr %41, align 8, !tbaa !9
  %686 = icmp sle i64 %684, %685
  br i1 %686, label %687, label %761

687:                                              ; preds = %683
  %688 = load ptr, ptr %27, align 8, !tbaa !5
  %689 = load i64, ptr %48, align 8, !tbaa !9
  %690 = load i64, ptr %47, align 8, !tbaa !9
  %691 = load i64, ptr %38, align 8, !tbaa !9
  %692 = mul nsw i64 %690, %691
  %693 = add nsw i64 %689, %692
  %694 = getelementptr inbounds double, ptr %688, i64 %693
  %695 = load double, ptr %694, align 8, !tbaa !11
  store double %695, ptr %43, align 8, !tbaa !11
  %696 = load double, ptr %43, align 8, !tbaa !11
  %697 = fcmp oge double %696, 0.000000e+00
  br i1 %697, label %698, label %700

698:                                              ; preds = %687
  %699 = load double, ptr %43, align 8, !tbaa !11
  br label %703

700:                                              ; preds = %687
  %701 = load double, ptr %43, align 8, !tbaa !11
  %702 = fneg double %701
  br label %703

703:                                              ; preds = %700, %698
  %704 = phi double [ %699, %698 ], [ %702, %700 ]
  store double %704, ptr %49, align 8, !tbaa !11
  %705 = load i64, ptr %48, align 8, !tbaa !9
  %706 = sub nsw i64 %705, 1
  store i64 %706, ptr %42, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %707

707:                                              ; preds = %748, %703
  %708 = load i64, ptr %46, align 8, !tbaa !9
  %709 = load i64, ptr %42, align 8, !tbaa !9
  %710 = icmp sle i64 %708, %709
  br i1 %710, label %711, label %751

711:                                              ; preds = %707
  %712 = load ptr, ptr %23, align 8, !tbaa !5
  %713 = load i64, ptr %46, align 8, !tbaa !9
  %714 = load i64, ptr %48, align 8, !tbaa !9
  %715 = load i64, ptr %34, align 8, !tbaa !9
  %716 = mul nsw i64 %714, %715
  %717 = add nsw i64 %713, %716
  %718 = getelementptr inbounds double, ptr %712, i64 %717
  %719 = load double, ptr %718, align 8, !tbaa !11
  store double %719, ptr %43, align 8, !tbaa !11
  %720 = load double, ptr %43, align 8, !tbaa !11
  %721 = fcmp oge double %720, 0.000000e+00
  br i1 %721, label %722, label %724

722:                                              ; preds = %711
  %723 = load double, ptr %43, align 8, !tbaa !11
  br label %727

724:                                              ; preds = %711
  %725 = load double, ptr %43, align 8, !tbaa !11
  %726 = fneg double %725
  br label %727

727:                                              ; preds = %724, %722
  %728 = phi double [ %723, %722 ], [ %726, %724 ]
  %729 = load ptr, ptr %27, align 8, !tbaa !5
  %730 = load i64, ptr %46, align 8, !tbaa !9
  %731 = load i64, ptr %47, align 8, !tbaa !9
  %732 = load i64, ptr %38, align 8, !tbaa !9
  %733 = mul nsw i64 %731, %732
  %734 = add nsw i64 %730, %733
  %735 = getelementptr inbounds double, ptr %729, i64 %734
  %736 = load double, ptr %735, align 8, !tbaa !11
  store double %736, ptr %44, align 8, !tbaa !11
  %737 = load double, ptr %44, align 8, !tbaa !11
  %738 = fcmp oge double %737, 0.000000e+00
  br i1 %738, label %739, label %741

739:                                              ; preds = %727
  %740 = load double, ptr %44, align 8, !tbaa !11
  br label %744

741:                                              ; preds = %727
  %742 = load double, ptr %44, align 8, !tbaa !11
  %743 = fneg double %742
  br label %744

744:                                              ; preds = %741, %739
  %745 = phi double [ %740, %739 ], [ %743, %741 ]
  %746 = load double, ptr %49, align 8, !tbaa !11
  %747 = call double @llvm.fmuladd.f64(double %728, double %745, double %746)
  store double %747, ptr %49, align 8, !tbaa !11
  br label %748

748:                                              ; preds = %744
  %749 = load i64, ptr %46, align 8, !tbaa !9
  %750 = add nsw i64 %749, 1
  store i64 %750, ptr %46, align 8, !tbaa !9
  br label %707, !llvm.loop !27

751:                                              ; preds = %707
  %752 = load double, ptr %49, align 8, !tbaa !11
  %753 = load ptr, ptr %31, align 8, !tbaa !5
  %754 = load i64, ptr %48, align 8, !tbaa !9
  %755 = getelementptr inbounds double, ptr %753, i64 %754
  %756 = load double, ptr %755, align 8, !tbaa !11
  %757 = fadd double %756, %752
  store double %757, ptr %755, align 8, !tbaa !11
  br label %758

758:                                              ; preds = %751
  %759 = load i64, ptr %48, align 8, !tbaa !9
  %760 = add nsw i64 %759, 1
  store i64 %760, ptr %48, align 8, !tbaa !9
  br label %683, !llvm.loop !28

761:                                              ; preds = %683
  br label %762

762:                                              ; preds = %761, %679
  br label %917

763:                                              ; preds = %610
  %764 = load i64, ptr %61, align 8, !tbaa !9
  %765 = icmp ne i64 %764, 0
  br i1 %765, label %766, label %832

766:                                              ; preds = %763
  %767 = load ptr, ptr %21, align 8, !tbaa !5
  %768 = load i64, ptr %767, align 8, !tbaa !9
  store i64 %768, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %769

769:                                              ; preds = %828, %766
  %770 = load i64, ptr %48, align 8, !tbaa !9
  %771 = load i64, ptr %41, align 8, !tbaa !9
  %772 = icmp sle i64 %770, %771
  br i1 %772, label %773, label %831

773:                                              ; preds = %769
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  %774 = load ptr, ptr %21, align 8, !tbaa !5
  %775 = load i64, ptr %774, align 8, !tbaa !9
  store i64 %775, ptr %42, align 8, !tbaa !9
  %776 = load i64, ptr %48, align 8, !tbaa !9
  store i64 %776, ptr %46, align 8, !tbaa !9
  br label %777

777:                                              ; preds = %818, %773
  %778 = load i64, ptr %46, align 8, !tbaa !9
  %779 = load i64, ptr %42, align 8, !tbaa !9
  %780 = icmp sle i64 %778, %779
  br i1 %780, label %781, label %821

781:                                              ; preds = %777
  %782 = load ptr, ptr %23, align 8, !tbaa !5
  %783 = load i64, ptr %46, align 8, !tbaa !9
  %784 = load i64, ptr %48, align 8, !tbaa !9
  %785 = load i64, ptr %34, align 8, !tbaa !9
  %786 = mul nsw i64 %784, %785
  %787 = add nsw i64 %783, %786
  %788 = getelementptr inbounds double, ptr %782, i64 %787
  %789 = load double, ptr %788, align 8, !tbaa !11
  store double %789, ptr %43, align 8, !tbaa !11
  %790 = load double, ptr %43, align 8, !tbaa !11
  %791 = fcmp oge double %790, 0.000000e+00
  br i1 %791, label %792, label %794

792:                                              ; preds = %781
  %793 = load double, ptr %43, align 8, !tbaa !11
  br label %797

794:                                              ; preds = %781
  %795 = load double, ptr %43, align 8, !tbaa !11
  %796 = fneg double %795
  br label %797

797:                                              ; preds = %794, %792
  %798 = phi double [ %793, %792 ], [ %796, %794 ]
  %799 = load ptr, ptr %27, align 8, !tbaa !5
  %800 = load i64, ptr %46, align 8, !tbaa !9
  %801 = load i64, ptr %47, align 8, !tbaa !9
  %802 = load i64, ptr %38, align 8, !tbaa !9
  %803 = mul nsw i64 %801, %802
  %804 = add nsw i64 %800, %803
  %805 = getelementptr inbounds double, ptr %799, i64 %804
  %806 = load double, ptr %805, align 8, !tbaa !11
  store double %806, ptr %44, align 8, !tbaa !11
  %807 = load double, ptr %44, align 8, !tbaa !11
  %808 = fcmp oge double %807, 0.000000e+00
  br i1 %808, label %809, label %811

809:                                              ; preds = %797
  %810 = load double, ptr %44, align 8, !tbaa !11
  br label %814

811:                                              ; preds = %797
  %812 = load double, ptr %44, align 8, !tbaa !11
  %813 = fneg double %812
  br label %814

814:                                              ; preds = %811, %809
  %815 = phi double [ %810, %809 ], [ %813, %811 ]
  %816 = load double, ptr %49, align 8, !tbaa !11
  %817 = call double @llvm.fmuladd.f64(double %798, double %815, double %816)
  store double %817, ptr %49, align 8, !tbaa !11
  br label %818

818:                                              ; preds = %814
  %819 = load i64, ptr %46, align 8, !tbaa !9
  %820 = add nsw i64 %819, 1
  store i64 %820, ptr %46, align 8, !tbaa !9
  br label %777, !llvm.loop !29

821:                                              ; preds = %777
  %822 = load double, ptr %49, align 8, !tbaa !11
  %823 = load ptr, ptr %31, align 8, !tbaa !5
  %824 = load i64, ptr %48, align 8, !tbaa !9
  %825 = getelementptr inbounds double, ptr %823, i64 %824
  %826 = load double, ptr %825, align 8, !tbaa !11
  %827 = fadd double %826, %822
  store double %827, ptr %825, align 8, !tbaa !11
  br label %828

828:                                              ; preds = %821
  %829 = load i64, ptr %48, align 8, !tbaa !9
  %830 = add nsw i64 %829, 1
  store i64 %830, ptr %48, align 8, !tbaa !9
  br label %769, !llvm.loop !30

831:                                              ; preds = %769
  br label %916

832:                                              ; preds = %763
  %833 = load ptr, ptr %21, align 8, !tbaa !5
  %834 = load i64, ptr %833, align 8, !tbaa !9
  store i64 %834, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %48, align 8, !tbaa !9
  br label %835

835:                                              ; preds = %912, %832
  %836 = load i64, ptr %48, align 8, !tbaa !9
  %837 = load i64, ptr %41, align 8, !tbaa !9
  %838 = icmp sle i64 %836, %837
  br i1 %838, label %839, label %915

839:                                              ; preds = %835
  %840 = load ptr, ptr %27, align 8, !tbaa !5
  %841 = load i64, ptr %48, align 8, !tbaa !9
  %842 = load i64, ptr %47, align 8, !tbaa !9
  %843 = load i64, ptr %38, align 8, !tbaa !9
  %844 = mul nsw i64 %842, %843
  %845 = add nsw i64 %841, %844
  %846 = getelementptr inbounds double, ptr %840, i64 %845
  %847 = load double, ptr %846, align 8, !tbaa !11
  store double %847, ptr %43, align 8, !tbaa !11
  %848 = load double, ptr %43, align 8, !tbaa !11
  %849 = fcmp oge double %848, 0.000000e+00
  br i1 %849, label %850, label %852

850:                                              ; preds = %839
  %851 = load double, ptr %43, align 8, !tbaa !11
  br label %855

852:                                              ; preds = %839
  %853 = load double, ptr %43, align 8, !tbaa !11
  %854 = fneg double %853
  br label %855

855:                                              ; preds = %852, %850
  %856 = phi double [ %851, %850 ], [ %854, %852 ]
  store double %856, ptr %49, align 8, !tbaa !11
  %857 = load ptr, ptr %21, align 8, !tbaa !5
  %858 = load i64, ptr %857, align 8, !tbaa !9
  store i64 %858, ptr %42, align 8, !tbaa !9
  %859 = load i64, ptr %48, align 8, !tbaa !9
  %860 = add nsw i64 %859, 1
  store i64 %860, ptr %46, align 8, !tbaa !9
  br label %861

861:                                              ; preds = %902, %855
  %862 = load i64, ptr %46, align 8, !tbaa !9
  %863 = load i64, ptr %42, align 8, !tbaa !9
  %864 = icmp sle i64 %862, %863
  br i1 %864, label %865, label %905

865:                                              ; preds = %861
  %866 = load ptr, ptr %23, align 8, !tbaa !5
  %867 = load i64, ptr %46, align 8, !tbaa !9
  %868 = load i64, ptr %48, align 8, !tbaa !9
  %869 = load i64, ptr %34, align 8, !tbaa !9
  %870 = mul nsw i64 %868, %869
  %871 = add nsw i64 %867, %870
  %872 = getelementptr inbounds double, ptr %866, i64 %871
  %873 = load double, ptr %872, align 8, !tbaa !11
  store double %873, ptr %43, align 8, !tbaa !11
  %874 = load double, ptr %43, align 8, !tbaa !11
  %875 = fcmp oge double %874, 0.000000e+00
  br i1 %875, label %876, label %878

876:                                              ; preds = %865
  %877 = load double, ptr %43, align 8, !tbaa !11
  br label %881

878:                                              ; preds = %865
  %879 = load double, ptr %43, align 8, !tbaa !11
  %880 = fneg double %879
  br label %881

881:                                              ; preds = %878, %876
  %882 = phi double [ %877, %876 ], [ %880, %878 ]
  %883 = load ptr, ptr %27, align 8, !tbaa !5
  %884 = load i64, ptr %46, align 8, !tbaa !9
  %885 = load i64, ptr %47, align 8, !tbaa !9
  %886 = load i64, ptr %38, align 8, !tbaa !9
  %887 = mul nsw i64 %885, %886
  %888 = add nsw i64 %884, %887
  %889 = getelementptr inbounds double, ptr %883, i64 %888
  %890 = load double, ptr %889, align 8, !tbaa !11
  store double %890, ptr %44, align 8, !tbaa !11
  %891 = load double, ptr %44, align 8, !tbaa !11
  %892 = fcmp oge double %891, 0.000000e+00
  br i1 %892, label %893, label %895

893:                                              ; preds = %881
  %894 = load double, ptr %44, align 8, !tbaa !11
  br label %898

895:                                              ; preds = %881
  %896 = load double, ptr %44, align 8, !tbaa !11
  %897 = fneg double %896
  br label %898

898:                                              ; preds = %895, %893
  %899 = phi double [ %894, %893 ], [ %897, %895 ]
  %900 = load double, ptr %49, align 8, !tbaa !11
  %901 = call double @llvm.fmuladd.f64(double %882, double %899, double %900)
  store double %901, ptr %49, align 8, !tbaa !11
  br label %902

902:                                              ; preds = %898
  %903 = load i64, ptr %46, align 8, !tbaa !9
  %904 = add nsw i64 %903, 1
  store i64 %904, ptr %46, align 8, !tbaa !9
  br label %861, !llvm.loop !31

905:                                              ; preds = %861
  %906 = load double, ptr %49, align 8, !tbaa !11
  %907 = load ptr, ptr %31, align 8, !tbaa !5
  %908 = load i64, ptr %48, align 8, !tbaa !9
  %909 = getelementptr inbounds double, ptr %907, i64 %908
  %910 = load double, ptr %909, align 8, !tbaa !11
  %911 = fadd double %910, %906
  store double %911, ptr %909, align 8, !tbaa !11
  br label %912

912:                                              ; preds = %905
  %913 = load i64, ptr %48, align 8, !tbaa !9
  %914 = add nsw i64 %913, 1
  store i64 %914, ptr %48, align 8, !tbaa !9
  br label %835, !llvm.loop !32

915:                                              ; preds = %835
  br label %916

916:                                              ; preds = %915, %831
  br label %917

917:                                              ; preds = %916, %762
  br label %918

918:                                              ; preds = %917, %609
  store double 0.000000e+00, ptr %49, align 8, !tbaa !11
  %919 = load ptr, ptr %21, align 8, !tbaa !5
  %920 = load i64, ptr %919, align 8, !tbaa !9
  store i64 %920, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %921

921:                                              ; preds = %1001, %918
  %922 = load i64, ptr %46, align 8, !tbaa !9
  %923 = load i64, ptr %41, align 8, !tbaa !9
  %924 = icmp sle i64 %922, %923
  br i1 %924, label %925, label %1004

925:                                              ; preds = %921
  %926 = load ptr, ptr %31, align 8, !tbaa !5
  %927 = load i64, ptr %46, align 8, !tbaa !9
  %928 = getelementptr inbounds double, ptr %926, i64 %927
  %929 = load double, ptr %928, align 8, !tbaa !11
  %930 = load double, ptr %55, align 8, !tbaa !11
  %931 = fcmp ogt double %929, %930
  br i1 %931, label %932, label %964

932:                                              ; preds = %925
  %933 = load double, ptr %49, align 8, !tbaa !11
  store double %933, ptr %44, align 8, !tbaa !11
  %934 = load ptr, ptr %31, align 8, !tbaa !5
  %935 = load ptr, ptr %21, align 8, !tbaa !5
  %936 = load i64, ptr %935, align 8, !tbaa !9
  %937 = load i64, ptr %46, align 8, !tbaa !9
  %938 = add nsw i64 %936, %937
  %939 = getelementptr inbounds double, ptr %934, i64 %938
  %940 = load double, ptr %939, align 8, !tbaa !11
  store double %940, ptr %43, align 8, !tbaa !11
  %941 = load double, ptr %43, align 8, !tbaa !11
  %942 = fcmp oge double %941, 0.000000e+00
  br i1 %942, label %943, label %945

943:                                              ; preds = %932
  %944 = load double, ptr %43, align 8, !tbaa !11
  br label %948

945:                                              ; preds = %932
  %946 = load double, ptr %43, align 8, !tbaa !11
  %947 = fneg double %946
  br label %948

948:                                              ; preds = %945, %943
  %949 = phi double [ %944, %943 ], [ %947, %945 ]
  %950 = load ptr, ptr %31, align 8, !tbaa !5
  %951 = load i64, ptr %46, align 8, !tbaa !9
  %952 = getelementptr inbounds double, ptr %950, i64 %951
  %953 = load double, ptr %952, align 8, !tbaa !11
  %954 = fdiv double %949, %953
  store double %954, ptr %45, align 8, !tbaa !11
  %955 = load double, ptr %44, align 8, !tbaa !11
  %956 = load double, ptr %45, align 8, !tbaa !11
  %957 = fcmp oge double %955, %956
  br i1 %957, label %958, label %960

958:                                              ; preds = %948
  %959 = load double, ptr %44, align 8, !tbaa !11
  br label %962

960:                                              ; preds = %948
  %961 = load double, ptr %45, align 8, !tbaa !11
  br label %962

962:                                              ; preds = %960, %958
  %963 = phi double [ %959, %958 ], [ %961, %960 ]
  store double %963, ptr %49, align 8, !tbaa !11
  br label %1000

964:                                              ; preds = %925
  %965 = load double, ptr %49, align 8, !tbaa !11
  store double %965, ptr %44, align 8, !tbaa !11
  %966 = load ptr, ptr %31, align 8, !tbaa !5
  %967 = load ptr, ptr %21, align 8, !tbaa !5
  %968 = load i64, ptr %967, align 8, !tbaa !9
  %969 = load i64, ptr %46, align 8, !tbaa !9
  %970 = add nsw i64 %968, %969
  %971 = getelementptr inbounds double, ptr %966, i64 %970
  %972 = load double, ptr %971, align 8, !tbaa !11
  store double %972, ptr %43, align 8, !tbaa !11
  %973 = load double, ptr %43, align 8, !tbaa !11
  %974 = fcmp oge double %973, 0.000000e+00
  br i1 %974, label %975, label %977

975:                                              ; preds = %964
  %976 = load double, ptr %43, align 8, !tbaa !11
  br label %980

977:                                              ; preds = %964
  %978 = load double, ptr %43, align 8, !tbaa !11
  %979 = fneg double %978
  br label %980

980:                                              ; preds = %977, %975
  %981 = phi double [ %976, %975 ], [ %979, %977 ]
  %982 = load double, ptr %54, align 8, !tbaa !11
  %983 = fadd double %981, %982
  %984 = load ptr, ptr %31, align 8, !tbaa !5
  %985 = load i64, ptr %46, align 8, !tbaa !9
  %986 = getelementptr inbounds double, ptr %984, i64 %985
  %987 = load double, ptr %986, align 8, !tbaa !11
  %988 = load double, ptr %54, align 8, !tbaa !11
  %989 = fadd double %987, %988
  %990 = fdiv double %983, %989
  store double %990, ptr %45, align 8, !tbaa !11
  %991 = load double, ptr %44, align 8, !tbaa !11
  %992 = load double, ptr %45, align 8, !tbaa !11
  %993 = fcmp oge double %991, %992
  br i1 %993, label %994, label %996

994:                                              ; preds = %980
  %995 = load double, ptr %44, align 8, !tbaa !11
  br label %998

996:                                              ; preds = %980
  %997 = load double, ptr %45, align 8, !tbaa !11
  br label %998

998:                                              ; preds = %996, %994
  %999 = phi double [ %995, %994 ], [ %997, %996 ]
  store double %999, ptr %49, align 8, !tbaa !11
  br label %1000

1000:                                             ; preds = %998, %962
  br label %1001

1001:                                             ; preds = %1000
  %1002 = load i64, ptr %46, align 8, !tbaa !9
  %1003 = add nsw i64 %1002, 1
  store i64 %1003, ptr %46, align 8, !tbaa !9
  br label %921, !llvm.loop !33

1004:                                             ; preds = %921
  %1005 = load double, ptr %49, align 8, !tbaa !11
  %1006 = load ptr, ptr %30, align 8, !tbaa !5
  %1007 = load i64, ptr %47, align 8, !tbaa !9
  %1008 = getelementptr inbounds double, ptr %1006, i64 %1007
  store double %1005, ptr %1008, align 8, !tbaa !11
  %1009 = load ptr, ptr %21, align 8, !tbaa !5
  %1010 = load i64, ptr %1009, align 8, !tbaa !9
  store i64 %1010, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %1011

1011:                                             ; preds = %1083, %1004
  %1012 = load i64, ptr %46, align 8, !tbaa !9
  %1013 = load i64, ptr %41, align 8, !tbaa !9
  %1014 = icmp sle i64 %1012, %1013
  br i1 %1014, label %1015, label %1086

1015:                                             ; preds = %1011
  %1016 = load ptr, ptr %31, align 8, !tbaa !5
  %1017 = load i64, ptr %46, align 8, !tbaa !9
  %1018 = getelementptr inbounds double, ptr %1016, i64 %1017
  %1019 = load double, ptr %1018, align 8, !tbaa !11
  %1020 = load double, ptr %55, align 8, !tbaa !11
  %1021 = fcmp ogt double %1019, %1020
  br i1 %1021, label %1022, label %1051

1022:                                             ; preds = %1015
  %1023 = load ptr, ptr %31, align 8, !tbaa !5
  %1024 = load ptr, ptr %21, align 8, !tbaa !5
  %1025 = load i64, ptr %1024, align 8, !tbaa !9
  %1026 = load i64, ptr %46, align 8, !tbaa !9
  %1027 = add nsw i64 %1025, %1026
  %1028 = getelementptr inbounds double, ptr %1023, i64 %1027
  %1029 = load double, ptr %1028, align 8, !tbaa !11
  store double %1029, ptr %43, align 8, !tbaa !11
  %1030 = load double, ptr %43, align 8, !tbaa !11
  %1031 = fcmp oge double %1030, 0.000000e+00
  br i1 %1031, label %1032, label %1034

1032:                                             ; preds = %1022
  %1033 = load double, ptr %43, align 8, !tbaa !11
  br label %1037

1034:                                             ; preds = %1022
  %1035 = load double, ptr %43, align 8, !tbaa !11
  %1036 = fneg double %1035
  br label %1037

1037:                                             ; preds = %1034, %1032
  %1038 = phi double [ %1033, %1032 ], [ %1036, %1034 ]
  %1039 = load i64, ptr %51, align 8, !tbaa !9
  %1040 = sitofp i64 %1039 to double
  %1041 = load double, ptr %52, align 8, !tbaa !11
  %1042 = fmul double %1040, %1041
  %1043 = load ptr, ptr %31, align 8, !tbaa !5
  %1044 = load i64, ptr %46, align 8, !tbaa !9
  %1045 = getelementptr inbounds double, ptr %1043, i64 %1044
  %1046 = load double, ptr %1045, align 8, !tbaa !11
  %1047 = call double @llvm.fmuladd.f64(double %1042, double %1046, double %1038)
  %1048 = load ptr, ptr %31, align 8, !tbaa !5
  %1049 = load i64, ptr %46, align 8, !tbaa !9
  %1050 = getelementptr inbounds double, ptr %1048, i64 %1049
  store double %1047, ptr %1050, align 8, !tbaa !11
  br label %1082

1051:                                             ; preds = %1015
  %1052 = load ptr, ptr %31, align 8, !tbaa !5
  %1053 = load ptr, ptr %21, align 8, !tbaa !5
  %1054 = load i64, ptr %1053, align 8, !tbaa !9
  %1055 = load i64, ptr %46, align 8, !tbaa !9
  %1056 = add nsw i64 %1054, %1055
  %1057 = getelementptr inbounds double, ptr %1052, i64 %1056
  %1058 = load double, ptr %1057, align 8, !tbaa !11
  store double %1058, ptr %43, align 8, !tbaa !11
  %1059 = load double, ptr %43, align 8, !tbaa !11
  %1060 = fcmp oge double %1059, 0.000000e+00
  br i1 %1060, label %1061, label %1063

1061:                                             ; preds = %1051
  %1062 = load double, ptr %43, align 8, !tbaa !11
  br label %1066

1063:                                             ; preds = %1051
  %1064 = load double, ptr %43, align 8, !tbaa !11
  %1065 = fneg double %1064
  br label %1066

1066:                                             ; preds = %1063, %1061
  %1067 = phi double [ %1062, %1061 ], [ %1065, %1063 ]
  %1068 = load i64, ptr %51, align 8, !tbaa !9
  %1069 = sitofp i64 %1068 to double
  %1070 = load double, ptr %52, align 8, !tbaa !11
  %1071 = fmul double %1069, %1070
  %1072 = load ptr, ptr %31, align 8, !tbaa !5
  %1073 = load i64, ptr %46, align 8, !tbaa !9
  %1074 = getelementptr inbounds double, ptr %1072, i64 %1073
  %1075 = load double, ptr %1074, align 8, !tbaa !11
  %1076 = call double @llvm.fmuladd.f64(double %1071, double %1075, double %1067)
  %1077 = load double, ptr %54, align 8, !tbaa !11
  %1078 = fadd double %1076, %1077
  %1079 = load ptr, ptr %31, align 8, !tbaa !5
  %1080 = load i64, ptr %46, align 8, !tbaa !9
  %1081 = getelementptr inbounds double, ptr %1079, i64 %1080
  store double %1078, ptr %1081, align 8, !tbaa !11
  br label %1082

1082:                                             ; preds = %1066, %1037
  br label %1083

1083:                                             ; preds = %1082
  %1084 = load i64, ptr %46, align 8, !tbaa !9
  %1085 = add nsw i64 %1084, 1
  store i64 %1085, ptr %46, align 8, !tbaa !9
  br label %1011, !llvm.loop !34

1086:                                             ; preds = %1011
  store i64 0, ptr %53, align 8, !tbaa !9
  br label %1087

1087:                                             ; preds = %1200, %1086
  %1088 = load ptr, ptr %21, align 8, !tbaa !5
  %1089 = load ptr, ptr %31, align 8, !tbaa !5
  %1090 = load ptr, ptr %21, align 8, !tbaa !5
  %1091 = load i64, ptr %1090, align 8, !tbaa !9
  %1092 = shl i64 %1091, 1
  %1093 = add nsw i64 %1092, 1
  %1094 = getelementptr inbounds double, ptr %1089, i64 %1093
  %1095 = load ptr, ptr %31, align 8, !tbaa !5
  %1096 = load ptr, ptr %21, align 8, !tbaa !5
  %1097 = load i64, ptr %1096, align 8, !tbaa !9
  %1098 = add nsw i64 %1097, 1
  %1099 = getelementptr inbounds double, ptr %1095, i64 %1098
  %1100 = load ptr, ptr %32, align 8, !tbaa !5
  %1101 = getelementptr inbounds i64, ptr %1100, i64 1
  %1102 = load ptr, ptr %29, align 8, !tbaa !5
  %1103 = load i64, ptr %47, align 8, !tbaa !9
  %1104 = getelementptr inbounds double, ptr %1102, i64 %1103
  %1105 = getelementptr inbounds [3 x i64], ptr %56, i64 0, i64 0
  %1106 = call i32 @dlacn2_(ptr noundef %1088, ptr noundef %1094, ptr noundef %1099, ptr noundef %1101, ptr noundef %1104, ptr noundef %53, ptr noundef %1105)
  %1107 = load i64, ptr %53, align 8, !tbaa !9
  %1108 = icmp ne i64 %1107, 0
  br i1 %1108, label %1109, label %1201

1109:                                             ; preds = %1087
  %1110 = load i64, ptr %53, align 8, !tbaa !9
  %1111 = icmp eq i64 %1110, 1
  br i1 %1111, label %1112, label %1156

1112:                                             ; preds = %1109
  %1113 = load ptr, ptr %18, align 8, !tbaa !5
  %1114 = getelementptr inbounds [1 x i8], ptr %60, i64 0, i64 0
  %1115 = load ptr, ptr %20, align 8, !tbaa !5
  %1116 = load ptr, ptr %21, align 8, !tbaa !5
  %1117 = load ptr, ptr %23, align 8, !tbaa !5
  %1118 = load i64, ptr %35, align 8, !tbaa !9
  %1119 = getelementptr inbounds double, ptr %1117, i64 %1118
  %1120 = load ptr, ptr %24, align 8, !tbaa !5
  %1121 = load ptr, ptr %31, align 8, !tbaa !5
  %1122 = load ptr, ptr %21, align 8, !tbaa !5
  %1123 = load i64, ptr %1122, align 8, !tbaa !9
  %1124 = add nsw i64 %1123, 1
  %1125 = getelementptr inbounds double, ptr %1121, i64 %1124
  %1126 = call i32 @f2c_dtrsv(ptr noundef %1113, ptr noundef %1114, ptr noundef %1115, ptr noundef %1116, ptr noundef %1119, ptr noundef %1120, ptr noundef %1125, ptr noundef @c__1)
  %1127 = load ptr, ptr %21, align 8, !tbaa !5
  %1128 = load i64, ptr %1127, align 8, !tbaa !9
  store i64 %1128, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %1129

1129:                                             ; preds = %1152, %1112
  %1130 = load i64, ptr %46, align 8, !tbaa !9
  %1131 = load i64, ptr %41, align 8, !tbaa !9
  %1132 = icmp sle i64 %1130, %1131
  br i1 %1132, label %1133, label %1155

1133:                                             ; preds = %1129
  %1134 = load ptr, ptr %31, align 8, !tbaa !5
  %1135 = load i64, ptr %46, align 8, !tbaa !9
  %1136 = getelementptr inbounds double, ptr %1134, i64 %1135
  %1137 = load double, ptr %1136, align 8, !tbaa !11
  %1138 = load ptr, ptr %31, align 8, !tbaa !5
  %1139 = load ptr, ptr %21, align 8, !tbaa !5
  %1140 = load i64, ptr %1139, align 8, !tbaa !9
  %1141 = load i64, ptr %46, align 8, !tbaa !9
  %1142 = add nsw i64 %1140, %1141
  %1143 = getelementptr inbounds double, ptr %1138, i64 %1142
  %1144 = load double, ptr %1143, align 8, !tbaa !11
  %1145 = fmul double %1137, %1144
  %1146 = load ptr, ptr %31, align 8, !tbaa !5
  %1147 = load ptr, ptr %21, align 8, !tbaa !5
  %1148 = load i64, ptr %1147, align 8, !tbaa !9
  %1149 = load i64, ptr %46, align 8, !tbaa !9
  %1150 = add nsw i64 %1148, %1149
  %1151 = getelementptr inbounds double, ptr %1146, i64 %1150
  store double %1145, ptr %1151, align 8, !tbaa !11
  br label %1152

1152:                                             ; preds = %1133
  %1153 = load i64, ptr %46, align 8, !tbaa !9
  %1154 = add nsw i64 %1153, 1
  store i64 %1154, ptr %46, align 8, !tbaa !9
  br label %1129, !llvm.loop !35

1155:                                             ; preds = %1129
  br label %1200

1156:                                             ; preds = %1109
  %1157 = load ptr, ptr %21, align 8, !tbaa !5
  %1158 = load i64, ptr %1157, align 8, !tbaa !9
  store i64 %1158, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %1159

1159:                                             ; preds = %1182, %1156
  %1160 = load i64, ptr %46, align 8, !tbaa !9
  %1161 = load i64, ptr %41, align 8, !tbaa !9
  %1162 = icmp sle i64 %1160, %1161
  br i1 %1162, label %1163, label %1185

1163:                                             ; preds = %1159
  %1164 = load ptr, ptr %31, align 8, !tbaa !5
  %1165 = load i64, ptr %46, align 8, !tbaa !9
  %1166 = getelementptr inbounds double, ptr %1164, i64 %1165
  %1167 = load double, ptr %1166, align 8, !tbaa !11
  %1168 = load ptr, ptr %31, align 8, !tbaa !5
  %1169 = load ptr, ptr %21, align 8, !tbaa !5
  %1170 = load i64, ptr %1169, align 8, !tbaa !9
  %1171 = load i64, ptr %46, align 8, !tbaa !9
  %1172 = add nsw i64 %1170, %1171
  %1173 = getelementptr inbounds double, ptr %1168, i64 %1172
  %1174 = load double, ptr %1173, align 8, !tbaa !11
  %1175 = fmul double %1167, %1174
  %1176 = load ptr, ptr %31, align 8, !tbaa !5
  %1177 = load ptr, ptr %21, align 8, !tbaa !5
  %1178 = load i64, ptr %1177, align 8, !tbaa !9
  %1179 = load i64, ptr %46, align 8, !tbaa !9
  %1180 = add nsw i64 %1178, %1179
  %1181 = getelementptr inbounds double, ptr %1176, i64 %1180
  store double %1175, ptr %1181, align 8, !tbaa !11
  br label %1182

1182:                                             ; preds = %1163
  %1183 = load i64, ptr %46, align 8, !tbaa !9
  %1184 = add nsw i64 %1183, 1
  store i64 %1184, ptr %46, align 8, !tbaa !9
  br label %1159, !llvm.loop !36

1185:                                             ; preds = %1159
  %1186 = load ptr, ptr %18, align 8, !tbaa !5
  %1187 = load ptr, ptr %19, align 8, !tbaa !5
  %1188 = load ptr, ptr %20, align 8, !tbaa !5
  %1189 = load ptr, ptr %21, align 8, !tbaa !5
  %1190 = load ptr, ptr %23, align 8, !tbaa !5
  %1191 = load i64, ptr %35, align 8, !tbaa !9
  %1192 = getelementptr inbounds double, ptr %1190, i64 %1191
  %1193 = load ptr, ptr %24, align 8, !tbaa !5
  %1194 = load ptr, ptr %31, align 8, !tbaa !5
  %1195 = load ptr, ptr %21, align 8, !tbaa !5
  %1196 = load i64, ptr %1195, align 8, !tbaa !9
  %1197 = add nsw i64 %1196, 1
  %1198 = getelementptr inbounds double, ptr %1194, i64 %1197
  %1199 = call i32 @f2c_dtrsv(ptr noundef %1186, ptr noundef %1187, ptr noundef %1188, ptr noundef %1189, ptr noundef %1192, ptr noundef %1193, ptr noundef %1198, ptr noundef @c__1)
  br label %1200

1200:                                             ; preds = %1185, %1155
  br label %1087

1201:                                             ; preds = %1087
  store double 0.000000e+00, ptr %62, align 8, !tbaa !11
  %1202 = load ptr, ptr %21, align 8, !tbaa !5
  %1203 = load i64, ptr %1202, align 8, !tbaa !9
  store i64 %1203, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %46, align 8, !tbaa !9
  br label %1204

1204:                                             ; preds = %1236, %1201
  %1205 = load i64, ptr %46, align 8, !tbaa !9
  %1206 = load i64, ptr %41, align 8, !tbaa !9
  %1207 = icmp sle i64 %1205, %1206
  br i1 %1207, label %1208, label %1239

1208:                                             ; preds = %1204
  %1209 = load double, ptr %62, align 8, !tbaa !11
  store double %1209, ptr %44, align 8, !tbaa !11
  %1210 = load ptr, ptr %27, align 8, !tbaa !5
  %1211 = load i64, ptr %46, align 8, !tbaa !9
  %1212 = load i64, ptr %47, align 8, !tbaa !9
  %1213 = load i64, ptr %38, align 8, !tbaa !9
  %1214 = mul nsw i64 %1212, %1213
  %1215 = add nsw i64 %1211, %1214
  %1216 = getelementptr inbounds double, ptr %1210, i64 %1215
  %1217 = load double, ptr %1216, align 8, !tbaa !11
  store double %1217, ptr %43, align 8, !tbaa !11
  %1218 = load double, ptr %43, align 8, !tbaa !11
  %1219 = fcmp oge double %1218, 0.000000e+00
  br i1 %1219, label %1220, label %1222

1220:                                             ; preds = %1208
  %1221 = load double, ptr %43, align 8, !tbaa !11
  br label %1225

1222:                                             ; preds = %1208
  %1223 = load double, ptr %43, align 8, !tbaa !11
  %1224 = fneg double %1223
  br label %1225

1225:                                             ; preds = %1222, %1220
  %1226 = phi double [ %1221, %1220 ], [ %1224, %1222 ]
  store double %1226, ptr %45, align 8, !tbaa !11
  %1227 = load double, ptr %44, align 8, !tbaa !11
  %1228 = load double, ptr %45, align 8, !tbaa !11
  %1229 = fcmp oge double %1227, %1228
  br i1 %1229, label %1230, label %1232

1230:                                             ; preds = %1225
  %1231 = load double, ptr %44, align 8, !tbaa !11
  br label %1234

1232:                                             ; preds = %1225
  %1233 = load double, ptr %45, align 8, !tbaa !11
  br label %1234

1234:                                             ; preds = %1232, %1230
  %1235 = phi double [ %1231, %1230 ], [ %1233, %1232 ]
  store double %1235, ptr %62, align 8, !tbaa !11
  br label %1236

1236:                                             ; preds = %1234
  %1237 = load i64, ptr %46, align 8, !tbaa !9
  %1238 = add nsw i64 %1237, 1
  store i64 %1238, ptr %46, align 8, !tbaa !9
  br label %1204, !llvm.loop !37

1239:                                             ; preds = %1204
  %1240 = load double, ptr %62, align 8, !tbaa !11
  %1241 = fcmp une double %1240, 0.000000e+00
  br i1 %1241, label %1242, label %1249

1242:                                             ; preds = %1239
  %1243 = load double, ptr %62, align 8, !tbaa !11
  %1244 = load ptr, ptr %29, align 8, !tbaa !5
  %1245 = load i64, ptr %47, align 8, !tbaa !9
  %1246 = getelementptr inbounds double, ptr %1244, i64 %1245
  %1247 = load double, ptr %1246, align 8, !tbaa !11
  %1248 = fdiv double %1247, %1243
  store double %1248, ptr %1246, align 8, !tbaa !11
  br label %1249

1249:                                             ; preds = %1242, %1239
  br label %1250

1250:                                             ; preds = %1249
  %1251 = load i64, ptr %47, align 8, !tbaa !9
  %1252 = add nsw i64 %1251, 1
  store i64 %1252, ptr %47, align 8, !tbaa !9
  br label %254, !llvm.loop !38

1253:                                             ; preds = %254
  store i32 0, ptr %17, align 4
  store i32 1, ptr %63, align 4
  br label %1254

1254:                                             ; preds = %1253, %231, %201
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #4
  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 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 24, 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 8, 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
  %1255 = load i32, ptr %17, align 4
  ret i32 %1255
}

; 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_dtrmv(ptr noundef, 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_dtrsv(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 @dtrrfs_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr nocapture noundef readonly %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr nocapture noundef readonly %8, ptr noundef %9, ptr nocapture noundef readonly %10, ptr noundef %11, ptr nocapture noundef writeonly %12, ptr noundef %13, ptr noundef %14, ptr nocapture noundef %15) local_unnamed_addr #0 {
  %17 = ptrtoint ptr %11 to i64
  %18 = ptrtoint ptr %12 to i64
  %19 = ptrtoint ptr %7 to i64
  %20 = ptrtoint ptr %13 to i64
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca [3 x i64], align 16
  %24 = alloca [1 x i8], align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #5
  %25 = load i64, ptr %6, align 8, !tbaa !5
  %26 = xor i64 %25, -1
  %27 = getelementptr inbounds double, ptr %5, i64 %26
  %28 = load i64, ptr %8, align 8, !tbaa !5
  %29 = xor i64 %28, -1
  %30 = getelementptr inbounds double, ptr %7, i64 %29
  %31 = load i64, ptr %10, align 8, !tbaa !5
  %32 = xor i64 %31, -1
  %33 = getelementptr inbounds double, ptr %9, i64 %32
  %34 = getelementptr inbounds i8, ptr %11, i64 -8
  %35 = getelementptr inbounds i8, ptr %12, i64 -8
  %36 = getelementptr inbounds i8, ptr %13, i64 -8
  store i64 0, ptr %15, align 8, !tbaa !5
  %37 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5
  %38 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #5
  %39 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #5
  %.not = icmp eq i64 %37, 0
  br i1 %.not, label %40, label %42

40:                                               ; preds = %16
  %41 = tail call i64 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.2) #5
  %.not501 = icmp eq i64 %41, 0
  br i1 %.not501, label %.thread.sink.split, label %42

42:                                               ; preds = %40, %16
  %.not502 = icmp eq i64 %38, 0
  br i1 %.not502, label %43, label %47

43:                                               ; preds = %42
  %44 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5
  %.not503 = icmp eq i64 %44, 0
  br i1 %.not503, label %45, label %47

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

47:                                               ; preds = %45, %43, %42
  %.not505 = icmp eq i64 %39, 0
  br i1 %.not505, label %48, label %50

48:                                               ; preds = %47
  %49 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str) #5
  %.not506 = icmp eq i64 %49, 0
  br i1 %.not506, label %.thread.sink.split, label %50

50:                                               ; preds = %48, %47
  %51 = load i64, ptr %3, 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 %4, align 8, !tbaa !5
  %55 = icmp slt i64 %54, 0
  br i1 %55, label %.thread.sink.split, label %56

56:                                               ; preds = %53
  %57 = load i64, ptr %6, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.umax.i64(i64 %51, i64 1)
  %58 = icmp slt i64 %57, %spec.select
  br i1 %58, label %.thread.sink.split, label %59

59:                                               ; preds = %56
  %60 = load i64, ptr %8, align 8, !tbaa !5
  %61 = icmp slt i64 %60, %spec.select
  br i1 %61, label %.thread.sink.split, label %62

62:                                               ; preds = %59
  %63 = load i64, ptr %10, align 8, !tbaa !5
  %64 = icmp slt i64 %63, %spec.select
  br i1 %64, label %.thread.sink.split, label %65

65:                                               ; preds = %62
  %.pr = load i64, ptr %15, align 8, !tbaa !5
  %.not507 = icmp eq i64 %.pr, 0
  br i1 %.not507, label %69, label %.thread

.thread.sink.split:                               ; preds = %62, %59, %56, %53, %50, %48, %45, %40
  %.sink = phi i64 [ -1, %40 ], [ -2, %45 ], [ -3, %48 ], [ -4, %50 ], [ -5, %53 ], [ -7, %56 ], [ -9, %59 ], [ -11, %62 ]
  store i64 %.sink, ptr %15, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %65
  %66 = phi i64 [ %.pr, %65 ], [ %.sink, %.thread.sink.split ]
  %67 = sub nsw i64 0, %66
  store i64 %67, ptr %21, align 8, !tbaa !5
  %68 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %21) #5
  br label %.loopexit

69:                                               ; preds = %65
  %70 = icmp eq i64 %51, 0
  %.not538688 = icmp eq i64 %54, 0
  br i1 %70, label %72, label %71

71:                                               ; preds = %69
  br i1 %.not538688, label %.loopexit, label %97

72:                                               ; preds = %69
  br i1 %.not538688, label %.loopexit, label %.lr.ph691.preheader

.lr.ph691.preheader:                              ; preds = %72
  %min.iters.check930 = icmp ult i64 %54, 4
  %73 = sub i64 %18, %17
  %diff.check927 = icmp ult i64 %73, 32
  %or.cond = or i1 %min.iters.check930, %diff.check927
  br i1 %or.cond, label %.lr.ph691.preheader944, label %vector.ph931

vector.ph931:                                     ; preds = %.lr.ph691.preheader
  %n.vec933 = and i64 %54, 9223372036854775804
  %ind.end934 = or disjoint i64 %n.vec933, 1
  br label %vector.body936

vector.body936:                                   ; preds = %vector.body936, %vector.ph931
  %index937 = phi i64 [ 0, %vector.ph931 ], [ %index.next939, %vector.body936 ]
  %74 = getelementptr double, ptr %11, i64 %index937
  %75 = getelementptr inbounds i8, ptr %74, i64 16
  store <2 x double> zeroinitializer, ptr %74, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %75, align 8, !tbaa !9
  %76 = getelementptr double, ptr %12, i64 %index937
  %77 = getelementptr inbounds i8, ptr %76, i64 16
  store <2 x double> zeroinitializer, ptr %76, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %77, align 8, !tbaa !9
  %index.next939 = add nuw i64 %index937, 4
  %78 = icmp eq i64 %index.next939, %n.vec933
  br i1 %78, label %middle.block928, label %vector.body936, !llvm.loop !11

middle.block928:                                  ; preds = %vector.body936
  %cmp.n940 = icmp eq i64 %54, %n.vec933
  br i1 %cmp.n940, label %.loopexit, label %.lr.ph691.preheader944

.lr.ph691.preheader944:                           ; preds = %middle.block928, %.lr.ph691.preheader
  %.0482689.ph = phi i64 [ 1, %.lr.ph691.preheader ], [ %ind.end934, %middle.block928 ]
  %79 = add nuw i64 %54, 1
  %80 = sub i64 %79, %.0482689.ph
  %81 = sub i64 %54, %.0482689.ph
  %xtraiter967 = and i64 %80, 3
  %lcmp.mod968.not = icmp eq i64 %xtraiter967, 0
  br i1 %lcmp.mod968.not, label %.lr.ph691.prol.loopexit, label %.lr.ph691.prol

.lr.ph691.prol:                                   ; preds = %.lr.ph691.preheader944, %.lr.ph691.prol
  %.0482689.prol = phi i64 [ %84, %.lr.ph691.prol ], [ %.0482689.ph, %.lr.ph691.preheader944 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph691.prol ], [ 0, %.lr.ph691.preheader944 ]
  %82 = getelementptr inbounds double, ptr %34, i64 %.0482689.prol
  store double 0.000000e+00, ptr %82, align 8, !tbaa !9
  %83 = getelementptr inbounds double, ptr %35, i64 %.0482689.prol
  store double 0.000000e+00, ptr %83, align 8, !tbaa !9
  %84 = add nuw i64 %.0482689.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter967
  br i1 %prol.iter.cmp.not, label %.lr.ph691.prol.loopexit, label %.lr.ph691.prol, !llvm.loop !15

.lr.ph691.prol.loopexit:                          ; preds = %.lr.ph691.prol, %.lr.ph691.preheader944
  %.0482689.unr = phi i64 [ %.0482689.ph, %.lr.ph691.preheader944 ], [ %84, %.lr.ph691.prol ]
  %85 = icmp ult i64 %81, 3
  br i1 %85, label %.loopexit, label %.lr.ph691

.lr.ph691:                                        ; preds = %.lr.ph691.prol.loopexit, %.lr.ph691
  %.0482689 = phi i64 [ %96, %.lr.ph691 ], [ %.0482689.unr, %.lr.ph691.prol.loopexit ]
  %86 = getelementptr inbounds double, ptr %34, i64 %.0482689
  store double 0.000000e+00, ptr %86, align 8, !tbaa !9
  %87 = getelementptr inbounds double, ptr %35, i64 %.0482689
  store double 0.000000e+00, ptr %87, align 8, !tbaa !9
  %88 = getelementptr double, ptr %11, i64 %.0482689
  store double 0.000000e+00, ptr %88, align 8, !tbaa !9
  %89 = getelementptr double, ptr %12, i64 %.0482689
  store double 0.000000e+00, ptr %89, align 8, !tbaa !9
  %90 = add nuw i64 %.0482689, 2
  %91 = getelementptr inbounds double, ptr %34, i64 %90
  store double 0.000000e+00, ptr %91, align 8, !tbaa !9
  %92 = getelementptr inbounds double, ptr %35, i64 %90
  store double 0.000000e+00, ptr %92, align 8, !tbaa !9
  %93 = add nuw i64 %.0482689, 3
  %94 = getelementptr inbounds double, ptr %34, i64 %93
  store double 0.000000e+00, ptr %94, align 8, !tbaa !9
  %95 = getelementptr inbounds double, ptr %35, i64 %93
  store double 0.000000e+00, ptr %95, align 8, !tbaa !9
  %96 = add nuw i64 %.0482689, 4
  %exitcond723.not.3 = icmp eq i64 %93, %54
  br i1 %exitcond723.not.3, label %.loopexit, label %.lr.ph691, !llvm.loop !17

97:                                               ; preds = %71
  %. = select i1 %.not502, i8 78, i8 84
  store i8 %., ptr %24, align 1, !tbaa !18
  %98 = add nuw nsw i64 %51, 1
  %99 = tail call double @dlamch_(ptr noundef nonnull @.str.6) #5
  %100 = tail call double @dlamch_(ptr noundef nonnull @.str.7) #5
  %101 = uitofp nneg i64 %98 to double
  %102 = fmul double %100, %101
  %103 = fdiv double %102, %99
  %104 = load i64, ptr %4, align 8, !tbaa !5
  %invariant.gep680 = getelementptr i8, ptr %33, i64 8
  %invariant.gep682 = getelementptr i8, ptr %30, i64 8
  %.not509684 = icmp slt i64 %104, 1
  br i1 %.not509684, label %.loopexit, label %.lr.ph687

.lr.ph687:                                        ; preds = %97
  %105 = fmul double %99, %101
  %.pre = load i64, ptr %3, align 8, !tbaa !5
  %106 = shl i64 %25, 3
  %107 = add i64 %106, 8
  %108 = shl i64 %25, 3
  %109 = add i64 %108, 8
  %110 = shl i64 %25, 3
  %111 = add i64 %110, 8
  %112 = shl i64 %25, 3
  %113 = add i64 %112, 8
  %114 = sub i64 %20, %19
  %115 = mul i64 %28, -8
  %invariant.gep979 = getelementptr i8, ptr %5, i64 8
  %invariant.gep981 = getelementptr i8, ptr %13, i64 8
  %invariant.gep985 = getelementptr i8, ptr %5, i64 8
  %invariant.gep987 = getelementptr i8, ptr %13, i64 8
  %invariant.gep989 = getelementptr i8, ptr %13, i64 8
  %invariant.gep991 = getelementptr i8, ptr %5, i64 8
  %broadcast.splatinsert = insertelement <2 x double> poison, double %103, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert792 = insertelement <2 x double> poison, double %105, i64 0
  %broadcast.splat793 = shufflevector <2 x double> %broadcast.splatinsert792, <2 x double> poison, <2 x i32> zeroinitializer
  %broadcast.splatinsert794 = insertelement <2 x double> poison, double %102, i64 0
  %broadcast.splat795 = shufflevector <2 x double> %broadcast.splatinsert794, <2 x double> poison, <2 x i32> zeroinitializer
  br label %116

116:                                              ; preds = %.lr.ph687, %._crit_edge678.thread
  %indvar909 = phi i64 [ 0, %.lr.ph687 ], [ %indvar.next910, %._crit_edge678.thread ]
  %117 = phi i64 [ %.pre, %.lr.ph687 ], [ %457, %._crit_edge678.thread ]
  %.1483685 = phi i64 [ 1, %.lr.ph687 ], [ %518, %._crit_edge678.thread ]
  %118 = mul nsw i64 %.1483685, %31
  %gep681 = getelementptr double, ptr %invariant.gep680, i64 %118
  %119 = getelementptr double, ptr %13, i64 %117
  %120 = call i32 @f2c_dcopy(ptr noundef nonnull %3, ptr noundef %gep681, ptr noundef nonnull @c__1, ptr noundef %119, ptr noundef nonnull @c__1) #5
  %121 = load i64, ptr %3, align 8, !tbaa !5
  %122 = getelementptr double, ptr %13, i64 %121
  %123 = call i32 @f2c_dtrmv(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %122, ptr noundef nonnull @c__1) #5
  %124 = mul nsw i64 %.1483685, %28
  %gep683 = getelementptr double, ptr %invariant.gep682, i64 %124
  %125 = load i64, ptr %3, align 8, !tbaa !5
  %126 = getelementptr double, ptr %13, i64 %125
  %127 = call i32 @f2c_daxpy(ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %gep683, ptr noundef nonnull @c__1, ptr noundef %126, ptr noundef nonnull @c__1) #5
  %128 = load i64, ptr %3, align 8, !tbaa !5
  %invariant.gep = getelementptr double, ptr %30, i64 %124
  %.not510561 = icmp slt i64 %128, 1
  br i1 %.not510561, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %116
  %129 = mul i64 %115, %indvar909
  %130 = add i64 %114, %129
  %min.iters.check913 = icmp ult i64 %128, 4
  %diff.check = icmp ult i64 %130, 32
  %or.cond943 = select i1 %min.iters.check913, i1 true, i1 %diff.check
  br i1 %or.cond943, label %.lr.ph.preheader952, label %vector.ph914

vector.ph914:                                     ; preds = %.lr.ph.preheader
  %n.vec916 = and i64 %128, 9223372036854775804
  %ind.end917 = or disjoint i64 %n.vec916, 1
  br label %vector.body919

vector.body919:                                   ; preds = %vector.body919, %vector.ph914
  %index920 = phi i64 [ 0, %vector.ph914 ], [ %index.next924, %vector.body919 ]
  %offset.idx921 = or disjoint i64 %index920, 1
  %131 = getelementptr double, ptr %invariant.gep, i64 %offset.idx921
  %132 = getelementptr i8, ptr %131, i64 16
  %wide.load922 = load <2 x double>, ptr %131, align 8, !tbaa !9
  %wide.load923 = load <2 x double>, ptr %132, align 8, !tbaa !9
  %133 = fcmp oge <2 x double> %wide.load922, zeroinitializer
  %134 = fcmp oge <2 x double> %wide.load923, zeroinitializer
  %135 = fneg <2 x double> %wide.load922
  %136 = fneg <2 x double> %wide.load923
  %137 = select <2 x i1> %133, <2 x double> %wide.load922, <2 x double> %135
  %138 = select <2 x i1> %134, <2 x double> %wide.load923, <2 x double> %136
  %139 = getelementptr double, ptr %13, i64 %index920
  %140 = getelementptr inbounds i8, ptr %139, i64 16
  store <2 x double> %137, ptr %139, align 8, !tbaa !9
  store <2 x double> %138, ptr %140, align 8, !tbaa !9
  %index.next924 = add nuw i64 %index920, 4
  %141 = icmp eq i64 %index.next924, %n.vec916
  br i1 %141, label %middle.block911, label %vector.body919, !llvm.loop !19

middle.block911:                                  ; preds = %vector.body919
  %cmp.n925 = icmp eq i64 %128, %n.vec916
  br i1 %cmp.n925, label %._crit_edge, label %.lr.ph.preheader952

.lr.ph.preheader952:                              ; preds = %middle.block911, %.lr.ph.preheader
  %.0484562.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end917, %middle.block911 ]
  %xtraiter = and i64 %128, 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.preheader952
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %.0484562.ph
  %142 = load double, ptr %gep.prol, align 8, !tbaa !9
  %143 = fcmp oge double %142, 0.000000e+00
  %144 = fneg double %142
  %145 = select i1 %143, double %142, double %144
  %146 = getelementptr inbounds double, ptr %36, i64 %.0484562.ph
  store double %145, ptr %146, align 8, !tbaa !9
  %147 = add nuw i64 %.0484562.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader952
  %.0484562.unr = phi i64 [ %.0484562.ph, %.lr.ph.preheader952 ], [ %147, %.lr.ph.prol ]
  %148 = icmp eq i64 %128, %.0484562.ph
  br i1 %148, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.0484562 = phi i64 [ %160, %.lr.ph ], [ %.0484562.unr, %.lr.ph.prol.loopexit ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0484562
  %149 = load double, ptr %gep, align 8, !tbaa !9
  %150 = fcmp oge double %149, 0.000000e+00
  %151 = fneg double %149
  %152 = select i1 %150, double %149, double %151
  %153 = getelementptr inbounds double, ptr %36, i64 %.0484562
  store double %152, ptr %153, align 8, !tbaa !9
  %154 = add nuw i64 %.0484562, 1
  %gep.1 = getelementptr double, ptr %invariant.gep, i64 %154
  %155 = load double, ptr %gep.1, align 8, !tbaa !9
  %156 = fcmp oge double %155, 0.000000e+00
  %157 = fneg double %155
  %158 = select i1 %156, double %155, double %157
  %159 = getelementptr double, ptr %13, i64 %.0484562
  store double %158, ptr %159, align 8, !tbaa !9
  %160 = add nuw i64 %.0484562, 2
  %exitcond.not.1 = icmp eq i64 %154, %128
  br i1 %exitcond.not.1, label %._crit_edge, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block911, %116
  br i1 %.not502, label %332, label %161

161:                                              ; preds = %._crit_edge
  %invariant.gep598 = getelementptr double, ptr %33, i64 %118
  br i1 %.not, label %261, label %162

162:                                              ; preds = %161
  br i1 %.not505, label %.preheader556, label %.preheader558

.preheader558:                                    ; preds = %162
  br i1 %.not510561, label %._crit_edge655.thread, label %.lr.ph570.preheader

.lr.ph570.preheader:                              ; preds = %.preheader558
  %163 = add nuw i64 %128, 1
  br label %.lr.ph570

.preheader556:                                    ; preds = %162
  br i1 %.not510561, label %._crit_edge655.thread, label %.lr.ph582

.lr.ph570:                                        ; preds = %.lr.ph570.preheader, %.loopexit942
  %indvar881 = phi i64 [ 0, %.lr.ph570.preheader ], [ %indvar.next882, %.loopexit942 ]
  %indvars.iv = phi i64 [ 2, %.lr.ph570.preheader ], [ %indvars.iv.next, %.loopexit942 ]
  %.0476569 = phi i64 [ 1, %.lr.ph570.preheader ], [ %210, %.loopexit942 ]
  %gep567 = getelementptr double, ptr %invariant.gep598, i64 %.0476569
  %164 = load double, ptr %gep567, align 8, !tbaa !9
  %165 = fcmp oge double %164, 0.000000e+00
  %166 = fneg double %164
  %167 = select i1 %165, double %164, double %166
  %168 = mul nsw i64 %.0476569, %25
  %invariant.gep563 = getelementptr double, ptr %27, i64 %168
  %min.iters.check891 = icmp ult i64 %.0476569, 4
  br i1 %min.iters.check891, label %scalar.ph890.preheader, label %vector.memcheck880

vector.memcheck880:                               ; preds = %.lr.ph570
  %169 = mul i64 %113, %indvar881
  %gep980 = getelementptr i8, ptr %invariant.gep979, i64 %169
  %170 = mul i64 %112, %indvar881
  %scevgep884 = getelementptr i8, ptr %5, i64 %170
  %171 = shl i64 %indvar881, 3
  %gep982 = getelementptr i8, ptr %invariant.gep981, i64 %171
  %bound0886 = icmp ugt ptr %gep980, %13
  %bound1887 = icmp ult ptr %scevgep884, %gep982
  %found.conflict888 = and i1 %bound0886, %bound1887
  br i1 %found.conflict888, label %scalar.ph890.preheader, label %vector.ph892

vector.ph892:                                     ; preds = %vector.memcheck880
  %n.vec894 = and i64 %.0476569, 9223372036854775804
  %ind.end895 = or disjoint i64 %n.vec894, 1
  %broadcast.splatinsert904 = insertelement <2 x double> poison, double %167, 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
  %172 = getelementptr double, ptr %invariant.gep563, i64 %offset.idx899
  %173 = getelementptr i8, ptr %172, i64 16
  %wide.load900 = load <2 x double>, ptr %172, align 8, !tbaa !9, !alias.scope !21
  %wide.load901 = load <2 x double>, ptr %173, align 8, !tbaa !9, !alias.scope !21
  %174 = fcmp oge <2 x double> %wide.load900, zeroinitializer
  %175 = fcmp oge <2 x double> %wide.load901, zeroinitializer
  %176 = fneg <2 x double> %wide.load900
  %177 = fneg <2 x double> %wide.load901
  %178 = select <2 x i1> %174, <2 x double> %wide.load900, <2 x double> %176
  %179 = select <2 x i1> %175, <2 x double> %wide.load901, <2 x double> %177
  %180 = getelementptr double, ptr %13, i64 %index898
  %181 = getelementptr inbounds i8, ptr %180, i64 16
  %wide.load902 = load <2 x double>, ptr %180, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %wide.load903 = load <2 x double>, ptr %181, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %182 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %178, <2 x double> %broadcast.splat905, <2 x double> %wide.load902)
  %183 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %179, <2 x double> %broadcast.splat905, <2 x double> %wide.load903)
  store <2 x double> %182, ptr %180, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  store <2 x double> %183, ptr %181, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %index.next906 = add nuw i64 %index898, 4
  %184 = icmp eq i64 %index.next906, %n.vec894
  br i1 %184, label %middle.block889, label %vector.body897, !llvm.loop !26

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

scalar.ph890.preheader:                           ; preds = %middle.block889, %vector.memcheck880, %.lr.ph570
  %.1485565.ph = phi i64 [ 1, %vector.memcheck880 ], [ 1, %.lr.ph570 ], [ %ind.end895, %middle.block889 ]
  %185 = and i64 %indvars.iv, 1
  %lcmp.mod961.not.not = icmp eq i64 %185, 0
  br i1 %lcmp.mod961.not.not, label %scalar.ph890.prol, label %scalar.ph890.prol.loopexit

scalar.ph890.prol:                                ; preds = %scalar.ph890.preheader
  %gep564.prol = getelementptr double, ptr %invariant.gep563, i64 %.1485565.ph
  %186 = load double, ptr %gep564.prol, align 8, !tbaa !9
  %187 = fcmp oge double %186, 0.000000e+00
  %188 = fneg double %186
  %189 = select i1 %187, double %186, double %188
  %190 = getelementptr inbounds double, ptr %36, i64 %.1485565.ph
  %191 = load double, ptr %190, align 8, !tbaa !9
  %192 = call double @llvm.fmuladd.f64(double %189, double %167, double %191)
  store double %192, ptr %190, align 8, !tbaa !9
  %193 = add nuw i64 %.1485565.ph, 1
  br label %scalar.ph890.prol.loopexit

scalar.ph890.prol.loopexit:                       ; preds = %scalar.ph890.prol, %scalar.ph890.preheader
  %.1485565.unr = phi i64 [ %.1485565.ph, %scalar.ph890.preheader ], [ %193, %scalar.ph890.prol ]
  %194 = icmp eq i64 %.0476569, %.1485565.ph
  br i1 %194, label %.loopexit942, label %scalar.ph890.preheader.new

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

scalar.ph890:                                     ; preds = %scalar.ph890, %scalar.ph890.preheader.new
  %.1485565 = phi i64 [ %.1485565.unr, %scalar.ph890.preheader.new ], [ %209, %scalar.ph890 ]
  %gep564 = getelementptr double, ptr %invariant.gep563, i64 %.1485565
  %195 = load double, ptr %gep564, align 8, !tbaa !9
  %196 = fcmp oge double %195, 0.000000e+00
  %197 = fneg double %195
  %198 = select i1 %196, double %195, double %197
  %199 = getelementptr inbounds double, ptr %36, i64 %.1485565
  %200 = load double, ptr %199, align 8, !tbaa !9
  %201 = call double @llvm.fmuladd.f64(double %198, double %167, double %200)
  store double %201, ptr %199, align 8, !tbaa !9
  %gep978 = getelementptr double, ptr %invariant.gep977, i64 %.1485565
  %202 = load double, ptr %gep978, align 8, !tbaa !9
  %203 = fcmp oge double %202, 0.000000e+00
  %204 = fneg double %202
  %205 = select i1 %203, double %202, double %204
  %206 = getelementptr double, ptr %13, i64 %.1485565
  %207 = load double, ptr %206, align 8, !tbaa !9
  %208 = call double @llvm.fmuladd.f64(double %205, double %167, double %207)
  store double %208, ptr %206, align 8, !tbaa !9
  %209 = add nuw i64 %.1485565, 2
  %exitcond704.not.1 = icmp eq i64 %209, %indvars.iv
  br i1 %exitcond704.not.1, label %.loopexit942, label %scalar.ph890, !llvm.loop !27

.loopexit942:                                     ; preds = %scalar.ph890.prol.loopexit, %scalar.ph890, %middle.block889
  %210 = add nuw nsw i64 %.0476569, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %exitcond705.not = icmp eq i64 %indvars.iv, %163
  %indvar.next882 = add i64 %indvar881, 1
  br i1 %exitcond705.not, label %.loopexit545, label %.lr.ph570, !llvm.loop !28

.lr.ph582:                                        ; preds = %.preheader556, %._crit_edge575
  %indvar853 = phi i64 [ %indvar.next854, %._crit_edge575 ], [ 0, %.preheader556 ]
  %.1477581 = phi i64 [ %260, %._crit_edge575 ], [ 1, %.preheader556 ]
  %211 = shl i64 %indvar853, 3
  %scevgep855 = getelementptr i8, ptr %13, i64 %211
  %212 = mul i64 %110, %indvar853
  %scevgep856 = getelementptr i8, ptr %5, i64 %212
  %213 = mul i64 %111, %indvar853
  %scevgep857 = getelementptr i8, ptr %5, i64 %213
  %gep579 = getelementptr double, ptr %invariant.gep598, i64 %.1477581
  %214 = load double, ptr %gep579, align 8, !tbaa !9
  %215 = fcmp oge double %214, 0.000000e+00
  %216 = fneg double %214
  %217 = select i1 %215, double %214, double %216
  %.not528.not571 = icmp ugt i64 %.1477581, 1
  br i1 %.not528.not571, label %.lr.ph574, label %._crit_edge575

.lr.ph574:                                        ; preds = %.lr.ph582
  %218 = mul nsw i64 %.1477581, %25
  %invariant.gep576 = getelementptr double, ptr %27, i64 %218
  %min.iters.check863 = icmp ult i64 %indvar853, 4
  br i1 %min.iters.check863, label %scalar.ph862.preheader, label %vector.memcheck852

vector.memcheck852:                               ; preds = %.lr.ph574
  %bound0858 = icmp ugt ptr %scevgep857, %13
  %bound1859 = icmp ult ptr %scevgep856, %scevgep855
  %found.conflict860 = and i1 %bound0858, %bound1859
  br i1 %found.conflict860, label %scalar.ph862.preheader, label %vector.ph864

vector.ph864:                                     ; preds = %vector.memcheck852
  %n.vec866 = and i64 %indvar853, -4
  %ind.end867 = or disjoint i64 %n.vec866, 1
  %broadcast.splatinsert876 = insertelement <2 x double> poison, double %217, i64 0
  %broadcast.splat877 = shufflevector <2 x double> %broadcast.splatinsert876, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body869

vector.body869:                                   ; preds = %vector.body869, %vector.ph864
  %index870 = phi i64 [ 0, %vector.ph864 ], [ %index.next878, %vector.body869 ]
  %offset.idx871 = or disjoint i64 %index870, 1
  %219 = getelementptr double, ptr %invariant.gep576, i64 %offset.idx871
  %220 = getelementptr i8, ptr %219, i64 16
  %wide.load872 = load <2 x double>, ptr %219, align 8, !tbaa !9, !alias.scope !29
  %wide.load873 = load <2 x double>, ptr %220, align 8, !tbaa !9, !alias.scope !29
  %221 = fcmp oge <2 x double> %wide.load872, zeroinitializer
  %222 = fcmp oge <2 x double> %wide.load873, zeroinitializer
  %223 = fneg <2 x double> %wide.load872
  %224 = fneg <2 x double> %wide.load873
  %225 = select <2 x i1> %221, <2 x double> %wide.load872, <2 x double> %223
  %226 = select <2 x i1> %222, <2 x double> %wide.load873, <2 x double> %224
  %227 = getelementptr double, ptr %13, i64 %index870
  %228 = getelementptr inbounds i8, ptr %227, i64 16
  %wide.load874 = load <2 x double>, ptr %227, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %wide.load875 = load <2 x double>, ptr %228, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %229 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %225, <2 x double> %broadcast.splat877, <2 x double> %wide.load874)
  %230 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %226, <2 x double> %broadcast.splat877, <2 x double> %wide.load875)
  store <2 x double> %229, ptr %227, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  store <2 x double> %230, ptr %228, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %index.next878 = add nuw i64 %index870, 4
  %231 = icmp eq i64 %index.next878, %n.vec866
  br i1 %231, label %middle.block861, label %vector.body869, !llvm.loop !34

middle.block861:                                  ; preds = %vector.body869
  %cmp.n879 = icmp eq i64 %indvar853, %n.vec866
  br i1 %cmp.n879, label %._crit_edge575, label %scalar.ph862.preheader

scalar.ph862.preheader:                           ; preds = %middle.block861, %vector.memcheck852, %.lr.ph574
  %.2486572.ph = phi i64 [ 1, %vector.memcheck852 ], [ 1, %.lr.ph574 ], [ %ind.end867, %middle.block861 ]
  %232 = and i64 %.1477581, 1
  %lcmp.mod963.not.not = icmp eq i64 %232, 0
  br i1 %lcmp.mod963.not.not, label %scalar.ph862.prol, label %scalar.ph862.prol.loopexit

scalar.ph862.prol:                                ; preds = %scalar.ph862.preheader
  %gep577.prol = getelementptr double, ptr %invariant.gep576, i64 %.2486572.ph
  %233 = load double, ptr %gep577.prol, align 8, !tbaa !9
  %234 = fcmp oge double %233, 0.000000e+00
  %235 = fneg double %233
  %236 = select i1 %234, double %233, double %235
  %237 = getelementptr inbounds double, ptr %36, i64 %.2486572.ph
  %238 = load double, ptr %237, align 8, !tbaa !9
  %239 = call double @llvm.fmuladd.f64(double %236, double %217, double %238)
  store double %239, ptr %237, align 8, !tbaa !9
  %240 = add nuw nsw i64 %.2486572.ph, 1
  br label %scalar.ph862.prol.loopexit

scalar.ph862.prol.loopexit:                       ; preds = %scalar.ph862.prol, %scalar.ph862.preheader
  %.2486572.unr = phi i64 [ %.2486572.ph, %scalar.ph862.preheader ], [ %240, %scalar.ph862.prol ]
  %241 = icmp eq i64 %indvar853, %.2486572.ph
  br i1 %241, label %._crit_edge575, label %scalar.ph862.preheader.new

scalar.ph862.preheader.new:                       ; preds = %scalar.ph862.prol.loopexit
  %invariant.gep983 = getelementptr i8, ptr %invariant.gep576, i64 8
  br label %scalar.ph862

scalar.ph862:                                     ; preds = %scalar.ph862, %scalar.ph862.preheader.new
  %.2486572 = phi i64 [ %.2486572.unr, %scalar.ph862.preheader.new ], [ %256, %scalar.ph862 ]
  %gep577 = getelementptr double, ptr %invariant.gep576, i64 %.2486572
  %242 = load double, ptr %gep577, align 8, !tbaa !9
  %243 = fcmp oge double %242, 0.000000e+00
  %244 = fneg double %242
  %245 = select i1 %243, double %242, double %244
  %246 = getelementptr inbounds double, ptr %36, i64 %.2486572
  %247 = load double, ptr %246, align 8, !tbaa !9
  %248 = call double @llvm.fmuladd.f64(double %245, double %217, double %247)
  store double %248, ptr %246, align 8, !tbaa !9
  %gep984 = getelementptr double, ptr %invariant.gep983, i64 %.2486572
  %249 = load double, ptr %gep984, align 8, !tbaa !9
  %250 = fcmp oge double %249, 0.000000e+00
  %251 = fneg double %249
  %252 = select i1 %250, double %249, double %251
  %253 = getelementptr double, ptr %13, i64 %.2486572
  %254 = load double, ptr %253, align 8, !tbaa !9
  %255 = call double @llvm.fmuladd.f64(double %252, double %217, double %254)
  store double %255, ptr %253, align 8, !tbaa !9
  %256 = add nuw nsw i64 %.2486572, 2
  %exitcond706.not.1 = icmp eq i64 %256, %.1477581
  br i1 %exitcond706.not.1, label %._crit_edge575, label %scalar.ph862, !llvm.loop !35

._crit_edge575:                                   ; preds = %scalar.ph862.prol.loopexit, %scalar.ph862, %middle.block861, %.lr.ph582
  %257 = getelementptr inbounds double, ptr %36, i64 %.1477581
  %258 = load double, ptr %257, align 8, !tbaa !9
  %259 = fadd double %217, %258
  store double %259, ptr %257, align 8, !tbaa !9
  %260 = add nuw i64 %.1477581, 1
  %exitcond707.not = icmp eq i64 %.1477581, %128
  %indvar.next854 = add i64 %indvar853, 1
  br i1 %exitcond707.not, label %.loopexit545, label %.lr.ph582, !llvm.loop !36

261:                                              ; preds = %161
  br i1 %.not505, label %.preheader552, label %.preheader554

.preheader554:                                    ; preds = %261
  br i1 %.not510561, label %._crit_edge655.thread, label %.lr.ph590

.preheader552:                                    ; preds = %261
  br i1 %.not510561, label %._crit_edge655.thread, label %.lr.ph602.preheader

.lr.ph602.preheader:                              ; preds = %.preheader552
  %262 = shl i64 %128, 3
  %scevgep798 = getelementptr i8, ptr %13, i64 %262
  %263 = getelementptr i8, ptr %5, i64 %262
  br label %.lr.ph602

.lr.ph590:                                        ; preds = %.preheader554, %.loopexit941
  %indvar821 = phi i64 [ %indvar.next822, %.loopexit941 ], [ 0, %.preheader554 ]
  %.2478589 = phi i64 [ %296, %.loopexit941 ], [ 1, %.preheader554 ]
  %smax832 = call i64 @llvm.smax.i64(i64 %128, i64 %.2478589)
  %264 = sub i64 %smax832, %indvar821
  %gep587 = getelementptr double, ptr %invariant.gep598, i64 %.2478589
  %265 = load double, ptr %gep587, align 8, !tbaa !9
  %266 = fcmp oge double %265, 0.000000e+00
  %267 = fneg double %265
  %268 = select i1 %266, double %265, double %267
  %269 = mul nsw i64 %.2478589, %25
  %invariant.gep584 = getelementptr double, ptr %27, i64 %269
  %min.iters.check835 = icmp ult i64 %264, 4
  br i1 %min.iters.check835, label %scalar.ph834.preheader, label %vector.memcheck820

vector.memcheck820:                               ; preds = %.lr.ph590
  %270 = mul i64 %109, %indvar821
  %gep986 = getelementptr i8, ptr %invariant.gep985, i64 %270
  %smax = call i64 @llvm.smax.i64(i64 %128, i64 %.2478589)
  %271 = xor i64 %indvar821, -1
  %272 = add i64 %smax, %271
  %273 = shl i64 %272, 3
  %scevgep828 = getelementptr i8, ptr %gep986, i64 %273
  %scevgep826 = getelementptr i8, ptr %5, i64 %270
  %274 = shl i64 %indvar821, 3
  %gep988 = getelementptr i8, ptr %invariant.gep987, i64 %274
  %scevgep825 = getelementptr i8, ptr %gep988, i64 %273
  %scevgep823 = getelementptr i8, ptr %13, i64 %274
  %bound0829 = icmp ult ptr %scevgep823, %scevgep828
  %bound1830 = icmp ult ptr %scevgep826, %scevgep825
  %found.conflict831 = and i1 %bound0829, %bound1830
  br i1 %found.conflict831, label %scalar.ph834.preheader, label %vector.ph836

vector.ph836:                                     ; preds = %vector.memcheck820
  %n.vec838 = and i64 %264, -4
  %ind.end839 = add i64 %.2478589, %n.vec838
  %broadcast.splatinsert848 = insertelement <2 x double> poison, double %268, i64 0
  %broadcast.splat849 = shufflevector <2 x double> %broadcast.splatinsert848, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body841

vector.body841:                                   ; preds = %vector.body841, %vector.ph836
  %index842 = phi i64 [ 0, %vector.ph836 ], [ %index.next850, %vector.body841 ]
  %offset.idx843 = add i64 %.2478589, %index842
  %275 = getelementptr double, ptr %invariant.gep584, i64 %offset.idx843
  %276 = getelementptr i8, ptr %275, i64 16
  %wide.load844 = load <2 x double>, ptr %275, align 8, !tbaa !9, !alias.scope !37
  %wide.load845 = load <2 x double>, ptr %276, align 8, !tbaa !9, !alias.scope !37
  %277 = fcmp oge <2 x double> %wide.load844, zeroinitializer
  %278 = fcmp oge <2 x double> %wide.load845, zeroinitializer
  %279 = fneg <2 x double> %wide.load844
  %280 = fneg <2 x double> %wide.load845
  %281 = select <2 x i1> %277, <2 x double> %wide.load844, <2 x double> %279
  %282 = select <2 x i1> %278, <2 x double> %wide.load845, <2 x double> %280
  %283 = getelementptr inbounds double, ptr %36, i64 %offset.idx843
  %284 = getelementptr inbounds i8, ptr %283, i64 16
  %wide.load846 = load <2 x double>, ptr %283, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %wide.load847 = load <2 x double>, ptr %284, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %285 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %281, <2 x double> %broadcast.splat849, <2 x double> %wide.load846)
  %286 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %282, <2 x double> %broadcast.splat849, <2 x double> %wide.load847)
  store <2 x double> %285, ptr %283, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  store <2 x double> %286, ptr %284, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %index.next850 = add nuw i64 %index842, 4
  %287 = icmp eq i64 %index.next850, %n.vec838
  br i1 %287, label %middle.block833, label %vector.body841, !llvm.loop !42

middle.block833:                                  ; preds = %vector.body841
  %cmp.n851 = icmp eq i64 %264, %n.vec838
  br i1 %cmp.n851, label %.loopexit941, label %scalar.ph834.preheader

scalar.ph834.preheader:                           ; preds = %middle.block833, %vector.memcheck820, %.lr.ph590
  %.3487583.ph = phi i64 [ %.2478589, %vector.memcheck820 ], [ %.2478589, %.lr.ph590 ], [ %ind.end839, %middle.block833 ]
  br label %scalar.ph834

scalar.ph834:                                     ; preds = %scalar.ph834.preheader, %scalar.ph834
  %.3487583 = phi i64 [ %295, %scalar.ph834 ], [ %.3487583.ph, %scalar.ph834.preheader ]
  %gep585 = getelementptr double, ptr %invariant.gep584, i64 %.3487583
  %288 = load double, ptr %gep585, align 8, !tbaa !9
  %289 = fcmp oge double %288, 0.000000e+00
  %290 = fneg double %288
  %291 = select i1 %289, double %288, double %290
  %292 = getelementptr inbounds double, ptr %36, i64 %.3487583
  %293 = load double, ptr %292, align 8, !tbaa !9
  %294 = call double @llvm.fmuladd.f64(double %291, double %268, double %293)
  store double %294, ptr %292, align 8, !tbaa !9
  %295 = add nuw nsw i64 %.3487583, 1
  %.not525.not = icmp slt i64 %.3487583, %128
  br i1 %.not525.not, label %scalar.ph834, label %.loopexit941, !llvm.loop !43

.loopexit941:                                     ; preds = %scalar.ph834, %middle.block833
  %296 = add nuw i64 %.2478589, 1
  %exitcond708.not = icmp eq i64 %.2478589, %128
  %indvar.next822 = add i64 %indvar821, 1
  br i1 %exitcond708.not, label %.loopexit545, label %.lr.ph590, !llvm.loop !44

.lr.ph602:                                        ; preds = %.lr.ph602.preheader, %._crit_edge595
  %indvar = phi i64 [ 0, %.lr.ph602.preheader ], [ %indvar.next, %._crit_edge595 ]
  %.3479601 = phi i64 [ 1, %.lr.ph602.preheader ], [ %306, %._crit_edge595 ]
  %297 = xor i64 %indvar, -1
  %298 = add i64 %128, %297
  %299 = shl i64 %indvar, 3
  %gep990 = getelementptr i8, ptr %invariant.gep989, i64 %299
  %300 = mul i64 %107, %indvar
  %gep992 = getelementptr i8, ptr %invariant.gep991, i64 %300
  %301 = mul i64 %108, %indvar
  %scevgep800 = getelementptr i8, ptr %263, i64 %301
  %gep599 = getelementptr double, ptr %invariant.gep598, i64 %.3479601
  %302 = load double, ptr %gep599, align 8, !tbaa !9
  %303 = fcmp oge double %302, 0.000000e+00
  %304 = fneg double %302
  %305 = select i1 %303, double %302, double %304
  %306 = add nuw i64 %.3479601, 1
  %.not523591.not = icmp slt i64 %.3479601, %128
  br i1 %.not523591.not, label %.lr.ph594, label %._crit_edge595

.lr.ph594:                                        ; preds = %.lr.ph602
  %307 = mul nsw i64 %.3479601, %25
  %invariant.gep596 = getelementptr double, ptr %27, i64 %307
  %min.iters.check803 = icmp ult i64 %298, 4
  br i1 %min.iters.check803, label %scalar.ph802.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph594
  %bound0 = icmp ult ptr %gep990, %scevgep800
  %bound1 = icmp ult ptr %gep992, %scevgep798
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph802.preheader, label %vector.ph804

vector.ph804:                                     ; preds = %vector.memcheck
  %n.vec806 = and i64 %298, -4
  %ind.end807 = add i64 %306, %n.vec806
  %broadcast.splatinsert816 = insertelement <2 x double> poison, double %305, i64 0
  %broadcast.splat817 = shufflevector <2 x double> %broadcast.splatinsert816, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body809

vector.body809:                                   ; preds = %vector.body809, %vector.ph804
  %index810 = phi i64 [ 0, %vector.ph804 ], [ %index.next818, %vector.body809 ]
  %offset.idx811 = add i64 %306, %index810
  %308 = getelementptr double, ptr %invariant.gep596, i64 %offset.idx811
  %309 = getelementptr i8, ptr %308, i64 16
  %wide.load812 = load <2 x double>, ptr %308, align 8, !tbaa !9, !alias.scope !45
  %wide.load813 = load <2 x double>, ptr %309, align 8, !tbaa !9, !alias.scope !45
  %310 = fcmp oge <2 x double> %wide.load812, zeroinitializer
  %311 = fcmp oge <2 x double> %wide.load813, zeroinitializer
  %312 = fneg <2 x double> %wide.load812
  %313 = fneg <2 x double> %wide.load813
  %314 = select <2 x i1> %310, <2 x double> %wide.load812, <2 x double> %312
  %315 = select <2 x i1> %311, <2 x double> %wide.load813, <2 x double> %313
  %316 = getelementptr inbounds double, ptr %36, i64 %offset.idx811
  %317 = getelementptr inbounds i8, ptr %316, i64 16
  %wide.load814 = load <2 x double>, ptr %316, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %wide.load815 = load <2 x double>, ptr %317, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %318 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %314, <2 x double> %broadcast.splat817, <2 x double> %wide.load814)
  %319 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %315, <2 x double> %broadcast.splat817, <2 x double> %wide.load815)
  store <2 x double> %318, ptr %316, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  store <2 x double> %319, ptr %317, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %index.next818 = add nuw i64 %index810, 4
  %320 = icmp eq i64 %index.next818, %n.vec806
  br i1 %320, label %middle.block801, label %vector.body809, !llvm.loop !50

middle.block801:                                  ; preds = %vector.body809
  %cmp.n819 = icmp eq i64 %298, %n.vec806
  br i1 %cmp.n819, label %._crit_edge595, label %scalar.ph802.preheader

scalar.ph802.preheader:                           ; preds = %middle.block801, %vector.memcheck, %.lr.ph594
  %.4488592.ph = phi i64 [ %306, %vector.memcheck ], [ %306, %.lr.ph594 ], [ %ind.end807, %middle.block801 ]
  br label %scalar.ph802

scalar.ph802:                                     ; preds = %scalar.ph802.preheader, %scalar.ph802
  %.4488592 = phi i64 [ %328, %scalar.ph802 ], [ %.4488592.ph, %scalar.ph802.preheader ]
  %gep597 = getelementptr double, ptr %invariant.gep596, i64 %.4488592
  %321 = load double, ptr %gep597, align 8, !tbaa !9
  %322 = fcmp oge double %321, 0.000000e+00
  %323 = fneg double %321
  %324 = select i1 %322, double %321, double %323
  %325 = getelementptr inbounds double, ptr %36, i64 %.4488592
  %326 = load double, ptr %325, align 8, !tbaa !9
  %327 = call double @llvm.fmuladd.f64(double %324, double %305, double %326)
  store double %327, ptr %325, align 8, !tbaa !9
  %328 = add nuw nsw i64 %.4488592, 1
  %.not523.not = icmp slt i64 %.4488592, %128
  br i1 %.not523.not, label %scalar.ph802, label %._crit_edge595, !llvm.loop !51

._crit_edge595:                                   ; preds = %scalar.ph802, %middle.block801, %.lr.ph602
  %329 = getelementptr inbounds double, ptr %36, i64 %.3479601
  %330 = load double, ptr %329, align 8, !tbaa !9
  %331 = fadd double %305, %330
  store double %331, ptr %329, align 8, !tbaa !9
  %exitcond709.not = icmp eq i64 %.3479601, %128
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond709.not, label %.loopexit545, label %.lr.ph602, !llvm.loop !52

332:                                              ; preds = %._crit_edge
  br i1 %.not, label %372, label %333

333:                                              ; preds = %332
  br i1 %.not505, label %.preheader548, label %.preheader550

.preheader550:                                    ; preds = %333
  br i1 %.not510561, label %._crit_edge655.thread, label %.preheader543.lr.ph

.preheader543.lr.ph:                              ; preds = %.preheader550
  %invariant.gep605 = getelementptr double, ptr %33, i64 %118
  %334 = add nuw i64 %128, 1
  br label %.preheader543

.preheader548:                                    ; preds = %333
  %invariant.gep621 = getelementptr double, ptr %33, i64 %118
  br i1 %.not510561, label %._crit_edge655.thread, label %.lr.ph625

.preheader543:                                    ; preds = %.preheader543.lr.ph, %347
  %indvars.iv710 = phi i64 [ 2, %.preheader543.lr.ph ], [ %indvars.iv.next711, %347 ]
  %.4480610 = phi i64 [ 1, %.preheader543.lr.ph ], [ %351, %347 ]
  %335 = mul nsw i64 %.4480610, %25
  %invariant.gep603 = getelementptr double, ptr %27, i64 %335
  br label %336

336:                                              ; preds = %.preheader543, %336
  %.0475608 = phi double [ 0.000000e+00, %.preheader543 ], [ %345, %336 ]
  %.5489607 = phi i64 [ 1, %.preheader543 ], [ %346, %336 ]
  %gep604 = getelementptr double, ptr %invariant.gep603, i64 %.5489607
  %337 = load double, ptr %gep604, align 8, !tbaa !9
  %338 = fcmp oge double %337, 0.000000e+00
  %339 = fneg double %337
  %340 = select i1 %338, double %337, double %339
  %gep606 = getelementptr double, ptr %invariant.gep605, i64 %.5489607
  %341 = load double, ptr %gep606, align 8, !tbaa !9
  %342 = fcmp oge double %341, 0.000000e+00
  %343 = fneg double %341
  %344 = select i1 %342, double %341, double %343
  %345 = call double @llvm.fmuladd.f64(double %340, double %344, double %.0475608)
  %346 = add nuw i64 %.5489607, 1
  %exitcond712.not = icmp eq i64 %346, %indvars.iv710
  br i1 %exitcond712.not, label %347, label %336, !llvm.loop !53

347:                                              ; preds = %336
  %348 = getelementptr inbounds double, ptr %36, i64 %.4480610
  %349 = load double, ptr %348, align 8, !tbaa !9
  %350 = fadd double %345, %349
  store double %350, ptr %348, align 8, !tbaa !9
  %351 = add nuw nsw i64 %.4480610, 1
  %indvars.iv.next711 = add nuw i64 %indvars.iv710, 1
  %exitcond713.not = icmp eq i64 %indvars.iv710, %334
  br i1 %exitcond713.not, label %.loopexit545, label %.preheader543, !llvm.loop !54

.lr.ph625:                                        ; preds = %.preheader548, %._crit_edge618
  %.5481624 = phi i64 [ %371, %._crit_edge618 ], [ 1, %.preheader548 ]
  %gep622 = getelementptr double, ptr %invariant.gep621, i64 %.5481624
  %352 = load double, ptr %gep622, align 8, !tbaa !9
  %353 = fcmp oge double %352, 0.000000e+00
  %354 = fneg double %352
  %355 = select i1 %353, double %352, double %354
  %.not518.not613 = icmp ugt i64 %.5481624, 1
  br i1 %.not518.not613, label %.lr.ph617, label %._crit_edge618

.lr.ph617:                                        ; preds = %.lr.ph625
  %356 = mul nsw i64 %.5481624, %25
  %invariant.gep619 = getelementptr double, ptr %27, i64 %356
  br label %357

357:                                              ; preds = %.lr.ph617, %357
  %.1615 = phi double [ %355, %.lr.ph617 ], [ %366, %357 ]
  %.6490614 = phi i64 [ 1, %.lr.ph617 ], [ %367, %357 ]
  %gep620 = getelementptr double, ptr %invariant.gep619, i64 %.6490614
  %358 = load double, ptr %gep620, align 8, !tbaa !9
  %359 = fcmp oge double %358, 0.000000e+00
  %360 = fneg double %358
  %361 = select i1 %359, double %358, double %360
  %gep612 = getelementptr double, ptr %invariant.gep621, i64 %.6490614
  %362 = load double, ptr %gep612, align 8, !tbaa !9
  %363 = fcmp oge double %362, 0.000000e+00
  %364 = fneg double %362
  %365 = select i1 %363, double %362, double %364
  %366 = call double @llvm.fmuladd.f64(double %361, double %365, double %.1615)
  %367 = add nuw nsw i64 %.6490614, 1
  %exitcond714.not = icmp eq i64 %367, %.5481624
  br i1 %exitcond714.not, label %._crit_edge618, label %357, !llvm.loop !55

._crit_edge618:                                   ; preds = %357, %.lr.ph625
  %.1.lcssa = phi double [ %355, %.lr.ph625 ], [ %366, %357 ]
  %368 = getelementptr inbounds double, ptr %36, i64 %.5481624
  %369 = load double, ptr %368, align 8, !tbaa !9
  %370 = fadd double %.1.lcssa, %369
  store double %370, ptr %368, align 8, !tbaa !9
  %371 = add nuw i64 %.5481624, 1
  %exitcond715.not = icmp eq i64 %.5481624, %128
  br i1 %exitcond715.not, label %.loopexit545, label %.lr.ph625, !llvm.loop !56

372:                                              ; preds = %332
  br i1 %.not505, label %.preheader544, label %.preheader546

.preheader546:                                    ; preds = %372
  br i1 %.not510561, label %._crit_edge655.thread, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %.preheader546
  %invariant.gep626 = getelementptr double, ptr %33, i64 %118
  br label %.preheader

.preheader544:                                    ; preds = %372
  %invariant.gep645 = getelementptr double, ptr %33, i64 %118
  br i1 %.not510561, label %._crit_edge655.thread, label %.lr.ph649

.preheader:                                       ; preds = %.preheader.lr.ph, %385
  %.6633 = phi i64 [ 1, %.preheader.lr.ph ], [ %389, %385 ]
  %373 = mul nsw i64 %.6633, %25
  %invariant.gep630 = getelementptr double, ptr %27, i64 %373
  br label %374

374:                                              ; preds = %.preheader, %374
  %.2629 = phi double [ 0.000000e+00, %.preheader ], [ %383, %374 ]
  %.7491628 = phi i64 [ %.6633, %.preheader ], [ %384, %374 ]
  %gep631 = getelementptr double, ptr %invariant.gep630, i64 %.7491628
  %375 = load double, ptr %gep631, align 8, !tbaa !9
  %376 = fcmp oge double %375, 0.000000e+00
  %377 = fneg double %375
  %378 = select i1 %376, double %375, double %377
  %gep627 = getelementptr double, ptr %invariant.gep626, i64 %.7491628
  %379 = load double, ptr %gep627, align 8, !tbaa !9
  %380 = fcmp oge double %379, 0.000000e+00
  %381 = fneg double %379
  %382 = select i1 %380, double %379, double %381
  %383 = call double @llvm.fmuladd.f64(double %378, double %382, double %.2629)
  %384 = add nuw nsw i64 %.7491628, 1
  %.not515.not = icmp slt i64 %.7491628, %128
  br i1 %.not515.not, label %374, label %385, !llvm.loop !57

385:                                              ; preds = %374
  %386 = getelementptr inbounds double, ptr %36, i64 %.6633
  %387 = load double, ptr %386, align 8, !tbaa !9
  %388 = fadd double %383, %387
  store double %388, ptr %386, align 8, !tbaa !9
  %389 = add nuw i64 %.6633, 1
  %exitcond716.not = icmp eq i64 %.6633, %128
  br i1 %exitcond716.not, label %.loopexit545, label %.preheader, !llvm.loop !58

.lr.ph649:                                        ; preds = %.preheader544, %._crit_edge641
  %.7648 = phi i64 [ %394, %._crit_edge641 ], [ 1, %.preheader544 ]
  %gep646 = getelementptr double, ptr %invariant.gep645, i64 %.7648
  %390 = load double, ptr %gep646, align 8, !tbaa !9
  %391 = fcmp oge double %390, 0.000000e+00
  %392 = fneg double %390
  %393 = select i1 %391, double %390, double %392
  %394 = add nuw i64 %.7648, 1
  %.not513636.not = icmp slt i64 %.7648, %128
  br i1 %.not513636.not, label %.lr.ph640, label %._crit_edge641

.lr.ph640:                                        ; preds = %.lr.ph649
  %395 = mul nsw i64 %.7648, %25
  %invariant.gep643 = getelementptr double, ptr %27, i64 %395
  br label %396

396:                                              ; preds = %.lr.ph640, %396
  %.3638 = phi double [ %393, %.lr.ph640 ], [ %405, %396 ]
  %.8637 = phi i64 [ %394, %.lr.ph640 ], [ %406, %396 ]
  %gep644 = getelementptr double, ptr %invariant.gep643, i64 %.8637
  %397 = load double, ptr %gep644, align 8, !tbaa !9
  %398 = fcmp oge double %397, 0.000000e+00
  %399 = fneg double %397
  %400 = select i1 %398, double %397, double %399
  %gep635 = getelementptr double, ptr %invariant.gep645, i64 %.8637
  %401 = load double, ptr %gep635, align 8, !tbaa !9
  %402 = fcmp oge double %401, 0.000000e+00
  %403 = fneg double %401
  %404 = select i1 %402, double %401, double %403
  %405 = call double @llvm.fmuladd.f64(double %400, double %404, double %.3638)
  %406 = add nuw nsw i64 %.8637, 1
  %.not513.not = icmp slt i64 %.8637, %128
  br i1 %.not513.not, label %396, label %._crit_edge641, !llvm.loop !59

._crit_edge641:                                   ; preds = %396, %.lr.ph649
  %.3.lcssa = phi double [ %393, %.lr.ph649 ], [ %405, %396 ]
  %407 = getelementptr inbounds double, ptr %36, i64 %.7648
  %408 = load double, ptr %407, align 8, !tbaa !9
  %409 = fadd double %.3.lcssa, %408
  store double %409, ptr %407, align 8, !tbaa !9
  %exitcond717.not = icmp eq i64 %.7648, %128
  br i1 %exitcond717.not, label %.loopexit545, label %.lr.ph649, !llvm.loop !60

.loopexit545:                                     ; preds = %.loopexit942, %._crit_edge575, %.loopexit941, %._crit_edge595, %347, %._crit_edge618, %385, %._crit_edge641
  br i1 %.not510561, label %._crit_edge655.thread, label %.lr.ph654

.lr.ph654:                                        ; preds = %.loopexit545
  %410 = getelementptr double, ptr %36, i64 %128
  br label %411

411:                                              ; preds = %.lr.ph654, %411
  %.4652 = phi double [ 0.000000e+00, %.lr.ph654 ], [ %425, %411 ]
  %.9651 = phi i64 [ 1, %.lr.ph654 ], [ %426, %411 ]
  %412 = getelementptr inbounds double, ptr %36, i64 %.9651
  %413 = load double, ptr %412, align 8, !tbaa !9
  %414 = fcmp ogt double %413, %103
  %415 = getelementptr double, ptr %410, i64 %.9651
  %416 = load double, ptr %415, 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 = fdiv double %419, %413
  %421 = fadd double %102, %419
  %422 = fadd double %102, %413
  %423 = fdiv double %421, %422
  %.sink744 = select i1 %414, double %420, double %423
  %424 = fcmp oge double %.4652, %.sink744
  %425 = select i1 %424, double %.4652, double %.sink744
  %426 = add nuw i64 %.9651, 1
  %exitcond718.not = icmp eq i64 %.9651, %128
  br i1 %exitcond718.not, label %._crit_edge655, label %411, !llvm.loop !61

._crit_edge655.thread:                            ; preds = %.loopexit545, %.preheader558, %.preheader556, %.preheader554, %.preheader552, %.preheader550, %.preheader548, %.preheader546, %.preheader544
  %427 = getelementptr inbounds double, ptr %35, i64 %.1483685
  store double 0.000000e+00, ptr %427, align 8, !tbaa !9
  br label %._crit_edge661

._crit_edge655:                                   ; preds = %411
  %428 = getelementptr inbounds double, ptr %35, i64 %.1483685
  store double %425, ptr %428, align 8, !tbaa !9
  br i1 %.not510561, label %._crit_edge661, label %.lr.ph660

.lr.ph660:                                        ; preds = %._crit_edge655
  %429 = getelementptr double, ptr %36, i64 %128
  %min.iters.check781 = icmp eq i64 %128, 1
  br i1 %min.iters.check781, label %scalar.ph780.preheader, label %vector.ph782

vector.ph782:                                     ; preds = %.lr.ph660
  %n.vec784 = and i64 %128, 9223372036854775806
  %ind.end785 = or i64 %128, 1
  br label %vector.body787

vector.body787:                                   ; preds = %vector.body787, %vector.ph782
  %index788 = phi i64 [ 0, %vector.ph782 ], [ %index.next796, %vector.body787 ]
  %offset.idx789 = or disjoint i64 %index788, 1
  %430 = getelementptr double, ptr %13, i64 %index788
  %wide.load790 = load <2 x double>, ptr %430, align 8, !tbaa !9
  %431 = fcmp ogt <2 x double> %wide.load790, %broadcast.splat
  %432 = getelementptr double, ptr %429, i64 %offset.idx789
  %wide.load791 = load <2 x double>, ptr %432, align 8, !tbaa !9
  %433 = fcmp oge <2 x double> %wide.load791, zeroinitializer
  %434 = fneg <2 x double> %wide.load791
  %435 = select <2 x i1> %433, <2 x double> %wide.load791, <2 x double> %434
  %436 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat793, <2 x double> %wide.load790, <2 x double> %435)
  %437 = fadd <2 x double> %broadcast.splat795, %436
  %438 = select <2 x i1> %431, <2 x double> %436, <2 x double> %437
  store <2 x double> %438, ptr %430, align 8, !tbaa !9
  %index.next796 = add nuw i64 %index788, 2
  %439 = icmp eq i64 %index.next796, %n.vec784
  br i1 %439, label %middle.block779, label %vector.body787, !llvm.loop !62

middle.block779:                                  ; preds = %vector.body787
  %cmp.n797 = icmp eq i64 %128, %n.vec784
  br i1 %cmp.n797, label %._crit_edge661, label %scalar.ph780.preheader

scalar.ph780.preheader:                           ; preds = %middle.block779, %.lr.ph660
  %.10658.ph = phi i64 [ 1, %.lr.ph660 ], [ %ind.end785, %middle.block779 ]
  br label %scalar.ph780

scalar.ph780:                                     ; preds = %scalar.ph780.preheader, %scalar.ph780
  %.10658 = phi i64 [ %450, %scalar.ph780 ], [ %.10658.ph, %scalar.ph780.preheader ]
  %440 = getelementptr inbounds double, ptr %36, i64 %.10658
  %441 = load double, ptr %440, align 8, !tbaa !9
  %442 = fcmp ogt double %441, %103
  %443 = getelementptr double, ptr %429, i64 %.10658
  %444 = load double, ptr %443, align 8, !tbaa !9
  %445 = fcmp oge double %444, 0.000000e+00
  %446 = fneg double %444
  %447 = select i1 %445, double %444, double %446
  %448 = call double @llvm.fmuladd.f64(double %105, double %441, double %447)
  %449 = fadd double %102, %448
  %storemerge536 = select i1 %442, double %448, double %449
  store double %storemerge536, ptr %440, align 8, !tbaa !9
  %450 = add nuw i64 %.10658, 1
  %exitcond719.not = icmp eq i64 %.10658, %128
  br i1 %exitcond719.not, label %._crit_edge661, label %scalar.ph780, !llvm.loop !63

._crit_edge661:                                   ; preds = %scalar.ph780, %middle.block779, %._crit_edge655.thread, %._crit_edge655
  store i64 0, ptr %22, align 8, !tbaa !5
  %451 = getelementptr inbounds double, ptr %34, i64 %.1483685
  br label %.loopexit542

.loopexit542:                                     ; preds = %.loopexit542.backedge, %._crit_edge661
  %452 = phi i64 [ %128, %._crit_edge661 ], [ %.be, %.loopexit542.backedge ]
  %.idx = shl i64 %452, 4
  %453 = getelementptr i8, ptr %13, i64 %.idx
  %454 = getelementptr double, ptr %13, i64 %452
  %455 = call i32 @dlacn2_(ptr noundef nonnull %3, ptr noundef %453, ptr noundef %454, ptr noundef %14, ptr noundef nonnull %451, ptr noundef nonnull %22, ptr noundef nonnull %23) #5
  %456 = load i64, ptr %22, align 8, !tbaa !5
  %457 = load i64, ptr %3, align 8, !tbaa !5
  switch i64 %456, label %476 [
    i64 0, label %493
    i64 1, label %458
  ]

458:                                              ; preds = %.loopexit542
  %459 = getelementptr double, ptr %13, i64 %457
  %460 = call i32 @f2c_dtrsv(ptr noundef %0, ptr noundef nonnull %24, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %459, ptr noundef nonnull @c__1) #5
  %461 = load i64, ptr %3, align 8, !tbaa !5
  %.not535662 = icmp slt i64 %461, 1
  br i1 %.not535662, label %.loopexit542.backedge, label %.lr.ph665

.lr.ph665:                                        ; preds = %458
  %462 = getelementptr double, ptr %36, i64 %461
  %min.iters.check764 = icmp ult i64 %461, 4
  br i1 %min.iters.check764, label %scalar.ph763.preheader, label %vector.ph765

vector.ph765:                                     ; preds = %.lr.ph665
  %n.vec767 = and i64 %461, 9223372036854775804
  %ind.end768 = or disjoint i64 %n.vec767, 1
  br label %vector.body770

vector.body770:                                   ; preds = %vector.body770, %vector.ph765
  %index771 = phi i64 [ 0, %vector.ph765 ], [ %index.next777, %vector.body770 ]
  %offset.idx772 = or disjoint i64 %index771, 1
  %463 = getelementptr double, ptr %13, i64 %index771
  %464 = getelementptr inbounds i8, ptr %463, i64 16
  %wide.load773 = load <2 x double>, ptr %463, align 8, !tbaa !9
  %wide.load774 = load <2 x double>, ptr %464, align 8, !tbaa !9
  %465 = getelementptr double, ptr %462, i64 %offset.idx772
  %466 = getelementptr i8, ptr %465, i64 16
  %wide.load775 = load <2 x double>, ptr %465, align 8, !tbaa !9
  %wide.load776 = load <2 x double>, ptr %466, align 8, !tbaa !9
  %467 = fmul <2 x double> %wide.load773, %wide.load775
  %468 = fmul <2 x double> %wide.load774, %wide.load776
  store <2 x double> %467, ptr %465, align 8, !tbaa !9
  store <2 x double> %468, ptr %466, align 8, !tbaa !9
  %index.next777 = add nuw i64 %index771, 4
  %469 = icmp eq i64 %index.next777, %n.vec767
  br i1 %469, label %middle.block762, label %vector.body770, !llvm.loop !64

middle.block762:                                  ; preds = %vector.body770
  %cmp.n778 = icmp eq i64 %461, %n.vec767
  br i1 %cmp.n778, label %.loopexit542.backedge, label %scalar.ph763.preheader

.loopexit542.backedge:                            ; preds = %scalar.ph763, %middle.block762, %458, %._crit_edge670
  %.be = phi i64 [ %461, %458 ], [ %.pre724.pre, %._crit_edge670 ], [ %461, %middle.block762 ], [ %461, %scalar.ph763 ]
  br label %.loopexit542

scalar.ph763.preheader:                           ; preds = %middle.block762, %.lr.ph665
  %.11663.ph = phi i64 [ 1, %.lr.ph665 ], [ %ind.end768, %middle.block762 ]
  br label %scalar.ph763

scalar.ph763:                                     ; preds = %scalar.ph763.preheader, %scalar.ph763
  %.11663 = phi i64 [ %475, %scalar.ph763 ], [ %.11663.ph, %scalar.ph763.preheader ]
  %470 = getelementptr inbounds double, ptr %36, i64 %.11663
  %471 = load double, ptr %470, align 8, !tbaa !9
  %472 = getelementptr double, ptr %462, i64 %.11663
  %473 = load double, ptr %472, align 8, !tbaa !9
  %474 = fmul double %471, %473
  store double %474, ptr %472, align 8, !tbaa !9
  %475 = add nuw i64 %.11663, 1
  %exitcond720.not = icmp eq i64 %.11663, %461
  br i1 %exitcond720.not, label %.loopexit542.backedge, label %scalar.ph763, !llvm.loop !65

476:                                              ; preds = %.loopexit542
  %.not534666 = icmp slt i64 %457, 1
  br i1 %.not534666, label %._crit_edge670, label %.lr.ph669

.lr.ph669:                                        ; preds = %476
  %477 = getelementptr double, ptr %36, i64 %457
  %min.iters.check = icmp ult i64 %457, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph669
  %n.vec = and i64 %457, 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
  %478 = getelementptr double, ptr %13, i64 %index
  %479 = getelementptr inbounds i8, ptr %478, i64 16
  %wide.load = load <2 x double>, ptr %478, align 8, !tbaa !9
  %wide.load759 = load <2 x double>, ptr %479, align 8, !tbaa !9
  %480 = getelementptr double, ptr %477, i64 %offset.idx
  %481 = getelementptr i8, ptr %480, i64 16
  %wide.load760 = load <2 x double>, ptr %480, align 8, !tbaa !9
  %wide.load761 = load <2 x double>, ptr %481, align 8, !tbaa !9
  %482 = fmul <2 x double> %wide.load, %wide.load760
  %483 = fmul <2 x double> %wide.load759, %wide.load761
  store <2 x double> %482, ptr %480, align 8, !tbaa !9
  store <2 x double> %483, ptr %481, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %484 = icmp eq i64 %index.next, %n.vec
  br i1 %484, label %middle.block, label %vector.body, !llvm.loop !66

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

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

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.12667 = phi i64 [ %490, %scalar.ph ], [ %.12667.ph, %scalar.ph.preheader ]
  %485 = getelementptr inbounds double, ptr %36, i64 %.12667
  %486 = load double, ptr %485, align 8, !tbaa !9
  %487 = getelementptr double, ptr %477, i64 %.12667
  %488 = load double, ptr %487, align 8, !tbaa !9
  %489 = fmul double %486, %488
  store double %489, ptr %487, align 8, !tbaa !9
  %490 = add nuw i64 %.12667, 1
  %exitcond721.not = icmp eq i64 %.12667, %457
  br i1 %exitcond721.not, label %._crit_edge670, label %scalar.ph, !llvm.loop !67

._crit_edge670:                                   ; preds = %scalar.ph, %middle.block, %476
  %491 = getelementptr double, ptr %13, i64 %457
  %492 = call i32 @f2c_dtrsv(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef nonnull %6, ptr noundef %491, ptr noundef nonnull @c__1) #5
  %.pre724.pre = load i64, ptr %3, align 8, !tbaa !5
  br label %.loopexit542.backedge

493:                                              ; preds = %.loopexit542
  %invariant.gep671 = getelementptr double, ptr %33, i64 %118
  %.not533673 = icmp slt i64 %457, 1
  br i1 %.not533673, label %._crit_edge678.thread, label %.lr.ph677.preheader

.lr.ph677.preheader:                              ; preds = %493
  %xtraiter964 = and i64 %457, 1
  %494 = icmp eq i64 %457, 1
  br i1 %494, label %._crit_edge678.unr-lcssa, label %.lr.ph677.preheader.new

.lr.ph677.preheader.new:                          ; preds = %.lr.ph677.preheader
  %unroll_iter = and i64 %457, 9223372036854775806
  %invariant.gep993 = getelementptr i8, ptr %invariant.gep671, i64 8
  br label %.lr.ph677

.lr.ph677:                                        ; preds = %.lr.ph677, %.lr.ph677.preheader.new
  %.0675 = phi double [ 0.000000e+00, %.lr.ph677.preheader.new ], [ %506, %.lr.ph677 ]
  %.13674 = phi i64 [ 1, %.lr.ph677.preheader.new ], [ %507, %.lr.ph677 ]
  %niter = phi i64 [ 0, %.lr.ph677.preheader.new ], [ %niter.next.1, %.lr.ph677 ]
  %gep672 = getelementptr double, ptr %invariant.gep671, i64 %.13674
  %495 = load double, ptr %gep672, align 8, !tbaa !9
  %496 = fcmp oge double %495, 0.000000e+00
  %497 = fneg double %495
  %498 = select i1 %496, double %495, double %497
  %499 = fcmp oge double %.0675, %498
  %500 = select i1 %499, double %.0675, double %498
  %gep994 = getelementptr double, ptr %invariant.gep993, i64 %.13674
  %501 = load double, ptr %gep994, align 8, !tbaa !9
  %502 = fcmp oge double %501, 0.000000e+00
  %503 = fneg double %501
  %504 = select i1 %502, double %501, double %503
  %505 = fcmp oge double %500, %504
  %506 = select i1 %505, double %500, double %504
  %507 = add nuw i64 %.13674, 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_edge678.unr-lcssa, label %.lr.ph677, !llvm.loop !68

._crit_edge678.unr-lcssa:                         ; preds = %.lr.ph677, %.lr.ph677.preheader
  %.lcssa959.ph = phi double [ poison, %.lr.ph677.preheader ], [ %506, %.lr.ph677 ]
  %.0675.unr = phi double [ 0.000000e+00, %.lr.ph677.preheader ], [ %506, %.lr.ph677 ]
  %.13674.unr = phi i64 [ 1, %.lr.ph677.preheader ], [ %507, %.lr.ph677 ]
  %lcmp.mod965.not = icmp eq i64 %xtraiter964, 0
  br i1 %lcmp.mod965.not, label %._crit_edge678, label %.lr.ph677.epil

.lr.ph677.epil:                                   ; preds = %._crit_edge678.unr-lcssa
  %gep672.epil = getelementptr double, ptr %invariant.gep671, i64 %.13674.unr
  %508 = load double, ptr %gep672.epil, align 8, !tbaa !9
  %509 = fcmp oge double %508, 0.000000e+00
  %510 = fneg double %508
  %511 = select i1 %509, double %508, double %510
  %512 = fcmp oge double %.0675.unr, %511
  %513 = select i1 %512, double %.0675.unr, double %511
  br label %._crit_edge678

._crit_edge678:                                   ; preds = %._crit_edge678.unr-lcssa, %.lr.ph677.epil
  %.lcssa959 = phi double [ %.lcssa959.ph, %._crit_edge678.unr-lcssa ], [ %513, %.lr.ph677.epil ]
  %514 = fcmp une double %.lcssa959, 0.000000e+00
  br i1 %514, label %515, label %._crit_edge678.thread

515:                                              ; preds = %._crit_edge678
  %516 = load double, ptr %451, align 8, !tbaa !9
  %517 = fdiv double %516, %.lcssa959
  store double %517, ptr %451, align 8, !tbaa !9
  br label %._crit_edge678.thread

._crit_edge678.thread:                            ; preds = %493, %._crit_edge678, %515
  %518 = add nuw nsw i64 %.1483685, 1
  %.not509.not = icmp slt i64 %.1483685, %104
  %indvar.next910 = add i64 %indvar909, 1
  br i1 %.not509.not, label %116, label %.loopexit, !llvm.loop !69

.loopexit:                                        ; preds = %._crit_edge678.thread, %.lr.ph691.prol.loopexit, %.lr.ph691, %middle.block928, %71, %97, %72, %.thread
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #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_dtrmv(ptr noundef, 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_dtrsv(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare 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