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

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

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

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

99:                                               ; preds = %15
  %100 = load ptr, ptr %16, align 8, !tbaa !5
  %101 = call i32 @lsame_(ptr noundef %100, ptr noundef @.str.2)
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %105, label %103

103:                                              ; preds = %99
  %104 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -1, ptr %104, align 4, !tbaa !9
  br label %175

105:                                              ; preds = %99, %15
  %106 = load i32, ptr %54, align 4, !tbaa !9
  %107 = icmp ne i32 %106, 0
  br i1 %107, label %118, label %108

108:                                              ; preds = %105
  %109 = load ptr, ptr %17, align 8, !tbaa !5
  %110 = call i32 @lsame_(ptr noundef %109, ptr noundef @.str.3)
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %118, label %112

112:                                              ; preds = %108
  %113 = load ptr, ptr %17, align 8, !tbaa !5
  %114 = call i32 @lsame_(ptr noundef %113, ptr noundef @.str.4)
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %118, label %116

116:                                              ; preds = %112
  %117 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -2, ptr %117, align 4, !tbaa !9
  br label %174

118:                                              ; preds = %112, %108, %105
  %119 = load i32, ptr %56, align 4, !tbaa !9
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %127, label %121

121:                                              ; preds = %118
  %122 = load ptr, ptr %18, align 8, !tbaa !5
  %123 = call i32 @lsame_(ptr noundef %122, ptr noundef @.str)
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %127, label %125

125:                                              ; preds = %121
  %126 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -3, ptr %126, align 4, !tbaa !9
  br label %173

127:                                              ; preds = %121, %118
  %128 = load ptr, ptr %19, align 8, !tbaa !5
  %129 = load i32, ptr %128, align 4, !tbaa !9
  %130 = icmp slt i32 %129, 0
  br i1 %130, label %131, label %133

131:                                              ; preds = %127
  %132 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -4, ptr %132, align 4, !tbaa !9
  br label %172

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

137:                                              ; preds = %133
  %138 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -5, ptr %138, align 4, !tbaa !9
  br label %171

139:                                              ; preds = %133
  %140 = load ptr, ptr %23, align 8, !tbaa !5
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = load ptr, ptr %19, align 8, !tbaa !5
  %143 = load i32, ptr %142, align 4, !tbaa !9
  %144 = icmp sge i32 1, %143
  br i1 %144, label %145, label %146

145:                                              ; preds = %139
  br label %149

146:                                              ; preds = %139
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  %148 = load i32, ptr %147, align 4, !tbaa !9
  br label %149

149:                                              ; preds = %146, %145
  %150 = phi i32 [ 1, %145 ], [ %148, %146 ]
  %151 = icmp slt i32 %141, %150
  br i1 %151, label %152, label %154

152:                                              ; preds = %149
  %153 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -8, ptr %153, align 4, !tbaa !9
  br label %170

154:                                              ; preds = %149
  %155 = load ptr, ptr %25, align 8, !tbaa !5
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = load ptr, ptr %19, align 8, !tbaa !5
  %158 = load i32, ptr %157, align 4, !tbaa !9
  %159 = icmp sge i32 1, %158
  br i1 %159, label %160, label %161

160:                                              ; preds = %154
  br label %164

161:                                              ; preds = %154
  %162 = load ptr, ptr %19, align 8, !tbaa !5
  %163 = load i32, ptr %162, align 4, !tbaa !9
  br label %164

164:                                              ; preds = %161, %160
  %165 = phi i32 [ 1, %160 ], [ %163, %161 ]
  %166 = icmp slt i32 %156, %165
  br i1 %166, label %167, label %169

167:                                              ; preds = %164
  %168 = load ptr, ptr %30, align 8, !tbaa !5
  store i32 -10, ptr %168, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %167, %164
  br label %170

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

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

172:                                              ; preds = %171, %131
  br label %173

173:                                              ; preds = %172, %125
  br label %174

174:                                              ; preds = %173, %116
  br label %175

175:                                              ; preds = %174, %103
  %176 = load ptr, ptr %30, align 8, !tbaa !5
  %177 = load i32, ptr %176, align 4, !tbaa !9
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %179, label %184

179:                                              ; preds = %175
  %180 = load ptr, ptr %30, align 8, !tbaa !5
  %181 = load i32, ptr %180, align 4, !tbaa !9
  %182 = sub nsw i32 0, %181
  store i32 %182, ptr %35, align 4, !tbaa !9
  %183 = call i32 @xerbla_(ptr noundef @.str.5, ptr noundef %35, i32 noundef 6)
  store i32 1, ptr %59, align 4
  br label %1319

184:                                              ; preds = %175
  %185 = load ptr, ptr %19, align 8, !tbaa !5
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp eq i32 %186, 0
  br i1 %187, label %192, label %188

188:                                              ; preds = %184
  %189 = load ptr, ptr %20, align 8, !tbaa !5
  %190 = load i32, ptr %189, align 4, !tbaa !9
  %191 = icmp eq i32 %190, 0
  br i1 %191, label %192, label %212

192:                                              ; preds = %188, %184
  %193 = load ptr, ptr %20, align 8, !tbaa !5
  %194 = load i32, ptr %193, align 4, !tbaa !9
  store i32 %194, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %45, align 4, !tbaa !9
  br label %195

195:                                              ; preds = %208, %192
  %196 = load i32, ptr %45, align 4, !tbaa !9
  %197 = load i32, ptr %35, align 4, !tbaa !9
  %198 = icmp sle i32 %196, %197
  br i1 %198, label %199, label %211

199:                                              ; preds = %195
  %200 = load ptr, ptr %26, align 8, !tbaa !5
  %201 = load i32, ptr %45, align 4, !tbaa !9
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds double, ptr %200, i64 %202
  store double 0.000000e+00, ptr %203, align 8, !tbaa !11
  %204 = load ptr, ptr %27, align 8, !tbaa !5
  %205 = load i32, ptr %45, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds double, ptr %204, i64 %206
  store double 0.000000e+00, ptr %207, align 8, !tbaa !11
  br label %208

208:                                              ; preds = %199
  %209 = load i32, ptr %45, align 4, !tbaa !9
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %45, align 4, !tbaa !9
  br label %195, !llvm.loop !13

211:                                              ; preds = %195
  store i32 1, ptr %59, align 4
  br label %1319

212:                                              ; preds = %188
  %213 = load i32, ptr %54, align 4, !tbaa !9
  %214 = icmp ne i32 %213, 0
  br i1 %214, label %215, label %217

215:                                              ; preds = %212
  %216 = getelementptr inbounds [1 x i8], ptr %55, i64 0, i64 0
  store i8 84, ptr %216, align 1, !tbaa !15
  br label %219

217:                                              ; preds = %212
  %218 = getelementptr inbounds [1 x i8], ptr %55, i64 0, i64 0
  store i8 78, ptr %218, align 1, !tbaa !15
  br label %219

219:                                              ; preds = %217, %215
  %220 = load ptr, ptr %19, align 8, !tbaa !5
  %221 = load i32, ptr %220, align 4, !tbaa !9
  %222 = add nsw i32 %221, 1
  store i32 %222, ptr %52, align 4, !tbaa !9
  %223 = call double @dlamch_(ptr noundef @.str.6)
  store double %223, ptr %58, align 8, !tbaa !11
  %224 = call double @dlamch_(ptr noundef @.str.7)
  store double %224, ptr %53, align 8, !tbaa !11
  %225 = load i32, ptr %52, align 4, !tbaa !9
  %226 = sitofp i32 %225 to double
  %227 = load double, ptr %53, align 8, !tbaa !11
  %228 = fmul double %226, %227
  store double %228, ptr %42, align 8, !tbaa !11
  %229 = load double, ptr %42, align 8, !tbaa !11
  %230 = load double, ptr %58, align 8, !tbaa !11
  %231 = fdiv double %229, %230
  store double %231, ptr %43, align 8, !tbaa !11
  %232 = load ptr, ptr %20, align 8, !tbaa !5
  %233 = load i32, ptr %232, align 4, !tbaa !9
  store i32 %233, ptr %35, align 4, !tbaa !9
  store i32 1, ptr %45, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %1315, %219
  %235 = load i32, ptr %45, align 4, !tbaa !9
  %236 = load i32, ptr %35, align 4, !tbaa !9
  %237 = icmp sle i32 %235, %236
  br i1 %237, label %238, label %1318

238:                                              ; preds = %234
  %239 = load ptr, ptr %19, align 8, !tbaa !5
  %240 = load ptr, ptr %24, align 8, !tbaa !5
  %241 = load i32, ptr %45, align 4, !tbaa !9
  %242 = load i32, ptr %33, align 4, !tbaa !9
  %243 = mul nsw i32 %241, %242
  %244 = add nsw i32 %243, 1
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds double, ptr %240, i64 %245
  %247 = load ptr, ptr %28, align 8, !tbaa !5
  %248 = load ptr, ptr %19, align 8, !tbaa !5
  %249 = load i32, ptr %248, align 4, !tbaa !9
  %250 = add nsw i32 %249, 1
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds double, ptr %247, i64 %251
  call void @dcopy_(ptr noundef %239, ptr noundef %246, ptr noundef @c__1, ptr noundef %252, ptr noundef @c__1)
  %253 = load ptr, ptr %16, align 8, !tbaa !5
  %254 = load ptr, ptr %17, align 8, !tbaa !5
  %255 = load ptr, ptr %18, align 8, !tbaa !5
  %256 = load ptr, ptr %19, align 8, !tbaa !5
  %257 = load ptr, ptr %21, align 8, !tbaa !5
  %258 = getelementptr inbounds double, ptr %257, i64 1
  %259 = load ptr, ptr %28, align 8, !tbaa !5
  %260 = load ptr, ptr %19, align 8, !tbaa !5
  %261 = load i32, ptr %260, align 4, !tbaa !9
  %262 = add nsw i32 %261, 1
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds double, ptr %259, i64 %263
  call void @dtpmv_(ptr noundef %253, ptr noundef %254, ptr noundef %255, ptr noundef %256, ptr noundef %258, ptr noundef %264, ptr noundef @c__1)
  %265 = load ptr, ptr %19, align 8, !tbaa !5
  %266 = load ptr, ptr %22, align 8, !tbaa !5
  %267 = load i32, ptr %45, align 4, !tbaa !9
  %268 = load i32, ptr %31, align 4, !tbaa !9
  %269 = mul nsw i32 %267, %268
  %270 = add nsw i32 %269, 1
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds double, ptr %266, i64 %271
  %273 = load ptr, ptr %28, align 8, !tbaa !5
  %274 = load ptr, ptr %19, align 8, !tbaa !5
  %275 = load i32, ptr %274, align 4, !tbaa !9
  %276 = add nsw i32 %275, 1
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %273, i64 %277
  call void @daxpy_(ptr noundef %265, ptr noundef @c_b19, ptr noundef %272, ptr noundef @c__1, ptr noundef %278, ptr noundef @c__1)
  %279 = load ptr, ptr %19, align 8, !tbaa !5
  %280 = load i32, ptr %279, align 4, !tbaa !9
  store i32 %280, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %281

281:                                              ; preds = %308, %238
  %282 = load i32, ptr %44, align 4, !tbaa !9
  %283 = load i32, ptr %36, align 4, !tbaa !9
  %284 = icmp sle i32 %282, %283
  br i1 %284, label %285, label %311

285:                                              ; preds = %281
  %286 = load ptr, ptr %22, align 8, !tbaa !5
  %287 = load i32, ptr %44, align 4, !tbaa !9
  %288 = load i32, ptr %45, align 4, !tbaa !9
  %289 = load i32, ptr %31, align 4, !tbaa !9
  %290 = mul nsw i32 %288, %289
  %291 = add nsw i32 %287, %290
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %286, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !11
  store double %294, ptr %38, align 8, !tbaa !11
  %295 = load double, ptr %38, align 8, !tbaa !11
  %296 = fcmp oge double %295, 0.000000e+00
  br i1 %296, label %297, label %299

297:                                              ; preds = %285
  %298 = load double, ptr %38, align 8, !tbaa !11
  br label %302

299:                                              ; preds = %285
  %300 = load double, ptr %38, align 8, !tbaa !11
  %301 = fneg double %300
  br label %302

302:                                              ; preds = %299, %297
  %303 = phi double [ %298, %297 ], [ %301, %299 ]
  %304 = load ptr, ptr %28, align 8, !tbaa !5
  %305 = load i32, ptr %44, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds double, ptr %304, i64 %306
  store double %303, ptr %307, align 8, !tbaa !11
  br label %308

308:                                              ; preds = %302
  %309 = load i32, ptr %44, align 4, !tbaa !9
  %310 = add nsw i32 %309, 1
  store i32 %310, ptr %44, align 4, !tbaa !9
  br label %281, !llvm.loop !16

311:                                              ; preds = %281
  %312 = load i32, ptr %54, align 4, !tbaa !9
  %313 = icmp ne i32 %312, 0
  br i1 %313, label %314, label %624

314:                                              ; preds = %311
  %315 = load i32, ptr %49, align 4, !tbaa !9
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %463

317:                                              ; preds = %314
  store i32 1, ptr %50, align 4, !tbaa !9
  %318 = load i32, ptr %56, align 4, !tbaa !9
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %387

320:                                              ; preds = %317
  %321 = load ptr, ptr %19, align 8, !tbaa !5
  %322 = load i32, ptr %321, align 4, !tbaa !9
  store i32 %322, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %323

323:                                              ; preds = %383, %320
  %324 = load i32, ptr %46, align 4, !tbaa !9
  %325 = load i32, ptr %36, align 4, !tbaa !9
  %326 = icmp sle i32 %324, %325
  br i1 %326, label %327, label %386

327:                                              ; preds = %323
  %328 = load ptr, ptr %24, align 8, !tbaa !5
  %329 = load i32, ptr %46, align 4, !tbaa !9
  %330 = load i32, ptr %45, align 4, !tbaa !9
  %331 = load i32, ptr %33, align 4, !tbaa !9
  %332 = mul nsw i32 %330, %331
  %333 = add nsw i32 %329, %332
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %328, i64 %334
  %336 = load double, ptr %335, align 8, !tbaa !11
  store double %336, ptr %38, align 8, !tbaa !11
  %337 = load double, ptr %38, align 8, !tbaa !11
  %338 = fcmp oge double %337, 0.000000e+00
  br i1 %338, label %339, label %341

339:                                              ; preds = %327
  %340 = load double, ptr %38, align 8, !tbaa !11
  br label %344

341:                                              ; preds = %327
  %342 = load double, ptr %38, align 8, !tbaa !11
  %343 = fneg double %342
  br label %344

344:                                              ; preds = %341, %339
  %345 = phi double [ %340, %339 ], [ %343, %341 ]
  store double %345, ptr %51, align 8, !tbaa !11
  %346 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %346, ptr %37, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %347

347:                                              ; preds = %376, %344
  %348 = load i32, ptr %44, align 4, !tbaa !9
  %349 = load i32, ptr %37, align 4, !tbaa !9
  %350 = icmp sle i32 %348, %349
  br i1 %350, label %351, label %379

351:                                              ; preds = %347
  %352 = load ptr, ptr %21, align 8, !tbaa !5
  %353 = load i32, ptr %50, align 4, !tbaa !9
  %354 = load i32, ptr %44, align 4, !tbaa !9
  %355 = add nsw i32 %353, %354
  %356 = sub nsw i32 %355, 1
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds double, ptr %352, i64 %357
  %359 = load double, ptr %358, align 8, !tbaa !11
  store double %359, ptr %38, align 8, !tbaa !11
  %360 = load double, ptr %38, align 8, !tbaa !11
  %361 = fcmp oge double %360, 0.000000e+00
  br i1 %361, label %362, label %364

362:                                              ; preds = %351
  %363 = load double, ptr %38, align 8, !tbaa !11
  br label %367

364:                                              ; preds = %351
  %365 = load double, ptr %38, align 8, !tbaa !11
  %366 = fneg double %365
  br label %367

367:                                              ; preds = %364, %362
  %368 = phi double [ %363, %362 ], [ %366, %364 ]
  %369 = load double, ptr %51, align 8, !tbaa !11
  %370 = load ptr, ptr %28, align 8, !tbaa !5
  %371 = load i32, ptr %44, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %370, i64 %372
  %374 = load double, ptr %373, align 8, !tbaa !11
  %375 = call double @llvm.fmuladd.f64(double %368, double %369, double %374)
  store double %375, ptr %373, align 8, !tbaa !11
  br label %376

376:                                              ; preds = %367
  %377 = load i32, ptr %44, align 4, !tbaa !9
  %378 = add nsw i32 %377, 1
  store i32 %378, ptr %44, align 4, !tbaa !9
  br label %347, !llvm.loop !17

379:                                              ; preds = %347
  %380 = load i32, ptr %46, align 4, !tbaa !9
  %381 = load i32, ptr %50, align 4, !tbaa !9
  %382 = add nsw i32 %381, %380
  store i32 %382, ptr %50, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %379
  %384 = load i32, ptr %46, align 4, !tbaa !9
  %385 = add nsw i32 %384, 1
  store i32 %385, ptr %46, align 4, !tbaa !9
  br label %323, !llvm.loop !18

386:                                              ; preds = %323
  br label %462

387:                                              ; preds = %317
  %388 = load ptr, ptr %19, align 8, !tbaa !5
  %389 = load i32, ptr %388, align 4, !tbaa !9
  store i32 %389, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %390

390:                                              ; preds = %458, %387
  %391 = load i32, ptr %46, align 4, !tbaa !9
  %392 = load i32, ptr %36, align 4, !tbaa !9
  %393 = icmp sle i32 %391, %392
  br i1 %393, label %394, label %461

394:                                              ; preds = %390
  %395 = load ptr, ptr %24, align 8, !tbaa !5
  %396 = load i32, ptr %46, align 4, !tbaa !9
  %397 = load i32, ptr %45, align 4, !tbaa !9
  %398 = load i32, ptr %33, align 4, !tbaa !9
  %399 = mul nsw i32 %397, %398
  %400 = add nsw i32 %396, %399
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds double, ptr %395, i64 %401
  %403 = load double, ptr %402, align 8, !tbaa !11
  store double %403, ptr %38, align 8, !tbaa !11
  %404 = load double, ptr %38, align 8, !tbaa !11
  %405 = fcmp oge double %404, 0.000000e+00
  br i1 %405, label %406, label %408

406:                                              ; preds = %394
  %407 = load double, ptr %38, align 8, !tbaa !11
  br label %411

408:                                              ; preds = %394
  %409 = load double, ptr %38, align 8, !tbaa !11
  %410 = fneg double %409
  br label %411

411:                                              ; preds = %408, %406
  %412 = phi double [ %407, %406 ], [ %410, %408 ]
  store double %412, ptr %51, align 8, !tbaa !11
  %413 = load i32, ptr %46, align 4, !tbaa !9
  %414 = sub nsw i32 %413, 1
  store i32 %414, ptr %37, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %444, %411
  %416 = load i32, ptr %44, align 4, !tbaa !9
  %417 = load i32, ptr %37, align 4, !tbaa !9
  %418 = icmp sle i32 %416, %417
  br i1 %418, label %419, label %447

419:                                              ; preds = %415
  %420 = load ptr, ptr %21, align 8, !tbaa !5
  %421 = load i32, ptr %50, align 4, !tbaa !9
  %422 = load i32, ptr %44, align 4, !tbaa !9
  %423 = add nsw i32 %421, %422
  %424 = sub nsw i32 %423, 1
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds double, ptr %420, i64 %425
  %427 = load double, ptr %426, align 8, !tbaa !11
  store double %427, ptr %38, align 8, !tbaa !11
  %428 = load double, ptr %38, align 8, !tbaa !11
  %429 = fcmp oge double %428, 0.000000e+00
  br i1 %429, label %430, label %432

430:                                              ; preds = %419
  %431 = load double, ptr %38, align 8, !tbaa !11
  br label %435

432:                                              ; preds = %419
  %433 = load double, ptr %38, align 8, !tbaa !11
  %434 = fneg double %433
  br label %435

435:                                              ; preds = %432, %430
  %436 = phi double [ %431, %430 ], [ %434, %432 ]
  %437 = load double, ptr %51, align 8, !tbaa !11
  %438 = load ptr, ptr %28, align 8, !tbaa !5
  %439 = load i32, ptr %44, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds double, ptr %438, i64 %440
  %442 = load double, ptr %441, align 8, !tbaa !11
  %443 = call double @llvm.fmuladd.f64(double %436, double %437, double %442)
  store double %443, ptr %441, align 8, !tbaa !11
  br label %444

444:                                              ; preds = %435
  %445 = load i32, ptr %44, align 4, !tbaa !9
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %44, align 4, !tbaa !9
  br label %415, !llvm.loop !19

447:                                              ; preds = %415
  %448 = load double, ptr %51, align 8, !tbaa !11
  %449 = load ptr, ptr %28, align 8, !tbaa !5
  %450 = load i32, ptr %46, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds double, ptr %449, i64 %451
  %453 = load double, ptr %452, align 8, !tbaa !11
  %454 = fadd double %453, %448
  store double %454, ptr %452, align 8, !tbaa !11
  %455 = load i32, ptr %46, align 4, !tbaa !9
  %456 = load i32, ptr %50, align 4, !tbaa !9
  %457 = add nsw i32 %456, %455
  store i32 %457, ptr %50, align 4, !tbaa !9
  br label %458

458:                                              ; preds = %447
  %459 = load i32, ptr %46, align 4, !tbaa !9
  %460 = add nsw i32 %459, 1
  store i32 %460, ptr %46, align 4, !tbaa !9
  br label %390, !llvm.loop !20

461:                                              ; preds = %390
  br label %462

462:                                              ; preds = %461, %386
  br label %623

463:                                              ; preds = %314
  store i32 1, ptr %50, align 4, !tbaa !9
  %464 = load i32, ptr %56, align 4, !tbaa !9
  %465 = icmp ne i32 %464, 0
  br i1 %465, label %466, label %540

466:                                              ; preds = %463
  %467 = load ptr, ptr %19, align 8, !tbaa !5
  %468 = load i32, ptr %467, align 4, !tbaa !9
  store i32 %468, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %469

469:                                              ; preds = %536, %466
  %470 = load i32, ptr %46, align 4, !tbaa !9
  %471 = load i32, ptr %36, align 4, !tbaa !9
  %472 = icmp sle i32 %470, %471
  br i1 %472, label %473, label %539

473:                                              ; preds = %469
  %474 = load ptr, ptr %24, align 8, !tbaa !5
  %475 = load i32, ptr %46, align 4, !tbaa !9
  %476 = load i32, ptr %45, align 4, !tbaa !9
  %477 = load i32, ptr %33, align 4, !tbaa !9
  %478 = mul nsw i32 %476, %477
  %479 = add nsw i32 %475, %478
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds double, ptr %474, i64 %480
  %482 = load double, ptr %481, align 8, !tbaa !11
  store double %482, ptr %38, align 8, !tbaa !11
  %483 = load double, ptr %38, align 8, !tbaa !11
  %484 = fcmp oge double %483, 0.000000e+00
  br i1 %484, label %485, label %487

485:                                              ; preds = %473
  %486 = load double, ptr %38, align 8, !tbaa !11
  br label %490

487:                                              ; preds = %473
  %488 = load double, ptr %38, align 8, !tbaa !11
  %489 = fneg double %488
  br label %490

490:                                              ; preds = %487, %485
  %491 = phi double [ %486, %485 ], [ %489, %487 ]
  store double %491, ptr %51, align 8, !tbaa !11
  %492 = load ptr, ptr %19, align 8, !tbaa !5
  %493 = load i32, ptr %492, align 4, !tbaa !9
  store i32 %493, ptr %37, align 4, !tbaa !9
  %494 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %494, ptr %44, align 4, !tbaa !9
  br label %495

495:                                              ; preds = %525, %490
  %496 = load i32, ptr %44, align 4, !tbaa !9
  %497 = load i32, ptr %37, align 4, !tbaa !9
  %498 = icmp sle i32 %496, %497
  br i1 %498, label %499, label %528

499:                                              ; preds = %495
  %500 = load ptr, ptr %21, align 8, !tbaa !5
  %501 = load i32, ptr %50, align 4, !tbaa !9
  %502 = load i32, ptr %44, align 4, !tbaa !9
  %503 = add nsw i32 %501, %502
  %504 = load i32, ptr %46, align 4, !tbaa !9
  %505 = sub nsw i32 %503, %504
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %500, i64 %506
  %508 = load double, ptr %507, align 8, !tbaa !11
  store double %508, ptr %38, align 8, !tbaa !11
  %509 = load double, ptr %38, align 8, !tbaa !11
  %510 = fcmp oge double %509, 0.000000e+00
  br i1 %510, label %511, label %513

511:                                              ; preds = %499
  %512 = load double, ptr %38, align 8, !tbaa !11
  br label %516

513:                                              ; preds = %499
  %514 = load double, ptr %38, align 8, !tbaa !11
  %515 = fneg double %514
  br label %516

516:                                              ; preds = %513, %511
  %517 = phi double [ %512, %511 ], [ %515, %513 ]
  %518 = load double, ptr %51, align 8, !tbaa !11
  %519 = load ptr, ptr %28, align 8, !tbaa !5
  %520 = load i32, ptr %44, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds double, ptr %519, i64 %521
  %523 = load double, ptr %522, align 8, !tbaa !11
  %524 = call double @llvm.fmuladd.f64(double %517, double %518, double %523)
  store double %524, ptr %522, align 8, !tbaa !11
  br label %525

525:                                              ; preds = %516
  %526 = load i32, ptr %44, align 4, !tbaa !9
  %527 = add nsw i32 %526, 1
  store i32 %527, ptr %44, align 4, !tbaa !9
  br label %495, !llvm.loop !21

528:                                              ; preds = %495
  %529 = load i32, ptr %50, align 4, !tbaa !9
  %530 = load ptr, ptr %19, align 8, !tbaa !5
  %531 = load i32, ptr %530, align 4, !tbaa !9
  %532 = add nsw i32 %529, %531
  %533 = load i32, ptr %46, align 4, !tbaa !9
  %534 = sub nsw i32 %532, %533
  %535 = add nsw i32 %534, 1
  store i32 %535, ptr %50, align 4, !tbaa !9
  br label %536

536:                                              ; preds = %528
  %537 = load i32, ptr %46, align 4, !tbaa !9
  %538 = add nsw i32 %537, 1
  store i32 %538, ptr %46, align 4, !tbaa !9
  br label %469, !llvm.loop !22

539:                                              ; preds = %469
  br label %622

540:                                              ; preds = %463
  %541 = load ptr, ptr %19, align 8, !tbaa !5
  %542 = load i32, ptr %541, align 4, !tbaa !9
  store i32 %542, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %543

543:                                              ; preds = %618, %540
  %544 = load i32, ptr %46, align 4, !tbaa !9
  %545 = load i32, ptr %36, align 4, !tbaa !9
  %546 = icmp sle i32 %544, %545
  br i1 %546, label %547, label %621

547:                                              ; preds = %543
  %548 = load ptr, ptr %24, align 8, !tbaa !5
  %549 = load i32, ptr %46, align 4, !tbaa !9
  %550 = load i32, ptr %45, align 4, !tbaa !9
  %551 = load i32, ptr %33, align 4, !tbaa !9
  %552 = mul nsw i32 %550, %551
  %553 = add nsw i32 %549, %552
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds double, ptr %548, i64 %554
  %556 = load double, ptr %555, align 8, !tbaa !11
  store double %556, ptr %38, align 8, !tbaa !11
  %557 = load double, ptr %38, align 8, !tbaa !11
  %558 = fcmp oge double %557, 0.000000e+00
  br i1 %558, label %559, label %561

559:                                              ; preds = %547
  %560 = load double, ptr %38, align 8, !tbaa !11
  br label %564

561:                                              ; preds = %547
  %562 = load double, ptr %38, align 8, !tbaa !11
  %563 = fneg double %562
  br label %564

564:                                              ; preds = %561, %559
  %565 = phi double [ %560, %559 ], [ %563, %561 ]
  store double %565, ptr %51, align 8, !tbaa !11
  %566 = load ptr, ptr %19, align 8, !tbaa !5
  %567 = load i32, ptr %566, align 4, !tbaa !9
  store i32 %567, ptr %37, align 4, !tbaa !9
  %568 = load i32, ptr %46, align 4, !tbaa !9
  %569 = add nsw i32 %568, 1
  store i32 %569, ptr %44, align 4, !tbaa !9
  br label %570

570:                                              ; preds = %600, %564
  %571 = load i32, ptr %44, align 4, !tbaa !9
  %572 = load i32, ptr %37, align 4, !tbaa !9
  %573 = icmp sle i32 %571, %572
  br i1 %573, label %574, label %603

574:                                              ; preds = %570
  %575 = load ptr, ptr %21, align 8, !tbaa !5
  %576 = load i32, ptr %50, align 4, !tbaa !9
  %577 = load i32, ptr %44, align 4, !tbaa !9
  %578 = add nsw i32 %576, %577
  %579 = load i32, ptr %46, align 4, !tbaa !9
  %580 = sub nsw i32 %578, %579
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds double, ptr %575, i64 %581
  %583 = load double, ptr %582, align 8, !tbaa !11
  store double %583, ptr %38, align 8, !tbaa !11
  %584 = load double, ptr %38, align 8, !tbaa !11
  %585 = fcmp oge double %584, 0.000000e+00
  br i1 %585, label %586, label %588

586:                                              ; preds = %574
  %587 = load double, ptr %38, align 8, !tbaa !11
  br label %591

588:                                              ; preds = %574
  %589 = load double, ptr %38, align 8, !tbaa !11
  %590 = fneg double %589
  br label %591

591:                                              ; preds = %588, %586
  %592 = phi double [ %587, %586 ], [ %590, %588 ]
  %593 = load double, ptr %51, align 8, !tbaa !11
  %594 = load ptr, ptr %28, align 8, !tbaa !5
  %595 = load i32, ptr %44, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds double, ptr %594, i64 %596
  %598 = load double, ptr %597, align 8, !tbaa !11
  %599 = call double @llvm.fmuladd.f64(double %592, double %593, double %598)
  store double %599, ptr %597, align 8, !tbaa !11
  br label %600

600:                                              ; preds = %591
  %601 = load i32, ptr %44, align 4, !tbaa !9
  %602 = add nsw i32 %601, 1
  store i32 %602, ptr %44, align 4, !tbaa !9
  br label %570, !llvm.loop !23

603:                                              ; preds = %570
  %604 = load double, ptr %51, align 8, !tbaa !11
  %605 = load ptr, ptr %28, align 8, !tbaa !5
  %606 = load i32, ptr %46, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds double, ptr %605, i64 %607
  %609 = load double, ptr %608, align 8, !tbaa !11
  %610 = fadd double %609, %604
  store double %610, ptr %608, align 8, !tbaa !11
  %611 = load i32, ptr %50, align 4, !tbaa !9
  %612 = load ptr, ptr %19, align 8, !tbaa !5
  %613 = load i32, ptr %612, align 4, !tbaa !9
  %614 = add nsw i32 %611, %613
  %615 = load i32, ptr %46, align 4, !tbaa !9
  %616 = sub nsw i32 %614, %615
  %617 = add nsw i32 %616, 1
  store i32 %617, ptr %50, align 4, !tbaa !9
  br label %618

618:                                              ; preds = %603
  %619 = load i32, ptr %46, align 4, !tbaa !9
  %620 = add nsw i32 %619, 1
  store i32 %620, ptr %46, align 4, !tbaa !9
  br label %543, !llvm.loop !24

621:                                              ; preds = %543
  br label %622

622:                                              ; preds = %621, %539
  br label %623

623:                                              ; preds = %622, %462
  br label %964

624:                                              ; preds = %311
  %625 = load i32, ptr %49, align 4, !tbaa !9
  %626 = icmp ne i32 %625, 0
  br i1 %626, label %627, label %788

627:                                              ; preds = %624
  store i32 1, ptr %50, align 4, !tbaa !9
  %628 = load i32, ptr %56, align 4, !tbaa !9
  %629 = icmp ne i32 %628, 0
  br i1 %629, label %630, label %699

630:                                              ; preds = %627
  %631 = load ptr, ptr %19, align 8, !tbaa !5
  %632 = load i32, ptr %631, align 4, !tbaa !9
  store i32 %632, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %633

633:                                              ; preds = %695, %630
  %634 = load i32, ptr %46, align 4, !tbaa !9
  %635 = load i32, ptr %36, align 4, !tbaa !9
  %636 = icmp sle i32 %634, %635
  br i1 %636, label %637, label %698

637:                                              ; preds = %633
  store double 0.000000e+00, ptr %47, align 8, !tbaa !11
  %638 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %638, ptr %37, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %639

639:                                              ; preds = %681, %637
  %640 = load i32, ptr %44, align 4, !tbaa !9
  %641 = load i32, ptr %37, align 4, !tbaa !9
  %642 = icmp sle i32 %640, %641
  br i1 %642, label %643, label %684

643:                                              ; preds = %639
  %644 = load ptr, ptr %21, align 8, !tbaa !5
  %645 = load i32, ptr %50, align 4, !tbaa !9
  %646 = load i32, ptr %44, align 4, !tbaa !9
  %647 = add nsw i32 %645, %646
  %648 = sub nsw i32 %647, 1
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds double, ptr %644, i64 %649
  %651 = load double, ptr %650, align 8, !tbaa !11
  store double %651, ptr %38, align 8, !tbaa !11
  %652 = load double, ptr %38, align 8, !tbaa !11
  %653 = fcmp oge double %652, 0.000000e+00
  br i1 %653, label %654, label %656

654:                                              ; preds = %643
  %655 = load double, ptr %38, align 8, !tbaa !11
  br label %659

656:                                              ; preds = %643
  %657 = load double, ptr %38, align 8, !tbaa !11
  %658 = fneg double %657
  br label %659

659:                                              ; preds = %656, %654
  %660 = phi double [ %655, %654 ], [ %658, %656 ]
  %661 = load ptr, ptr %24, align 8, !tbaa !5
  %662 = load i32, ptr %44, align 4, !tbaa !9
  %663 = load i32, ptr %45, align 4, !tbaa !9
  %664 = load i32, ptr %33, align 4, !tbaa !9
  %665 = mul nsw i32 %663, %664
  %666 = add nsw i32 %662, %665
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds double, ptr %661, i64 %667
  %669 = load double, ptr %668, align 8, !tbaa !11
  store double %669, ptr %39, align 8, !tbaa !11
  %670 = load double, ptr %39, align 8, !tbaa !11
  %671 = fcmp oge double %670, 0.000000e+00
  br i1 %671, label %672, label %674

672:                                              ; preds = %659
  %673 = load double, ptr %39, align 8, !tbaa !11
  br label %677

674:                                              ; preds = %659
  %675 = load double, ptr %39, align 8, !tbaa !11
  %676 = fneg double %675
  br label %677

677:                                              ; preds = %674, %672
  %678 = phi double [ %673, %672 ], [ %676, %674 ]
  %679 = load double, ptr %47, align 8, !tbaa !11
  %680 = call double @llvm.fmuladd.f64(double %660, double %678, double %679)
  store double %680, ptr %47, align 8, !tbaa !11
  br label %681

681:                                              ; preds = %677
  %682 = load i32, ptr %44, align 4, !tbaa !9
  %683 = add nsw i32 %682, 1
  store i32 %683, ptr %44, align 4, !tbaa !9
  br label %639, !llvm.loop !25

684:                                              ; preds = %639
  %685 = load double, ptr %47, align 8, !tbaa !11
  %686 = load ptr, ptr %28, align 8, !tbaa !5
  %687 = load i32, ptr %46, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds double, ptr %686, i64 %688
  %690 = load double, ptr %689, align 8, !tbaa !11
  %691 = fadd double %690, %685
  store double %691, ptr %689, align 8, !tbaa !11
  %692 = load i32, ptr %46, align 4, !tbaa !9
  %693 = load i32, ptr %50, align 4, !tbaa !9
  %694 = add nsw i32 %693, %692
  store i32 %694, ptr %50, align 4, !tbaa !9
  br label %695

695:                                              ; preds = %684
  %696 = load i32, ptr %46, align 4, !tbaa !9
  %697 = add nsw i32 %696, 1
  store i32 %697, ptr %46, align 4, !tbaa !9
  br label %633, !llvm.loop !26

698:                                              ; preds = %633
  br label %787

699:                                              ; preds = %627
  %700 = load ptr, ptr %19, align 8, !tbaa !5
  %701 = load i32, ptr %700, align 4, !tbaa !9
  store i32 %701, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %702

702:                                              ; preds = %783, %699
  %703 = load i32, ptr %46, align 4, !tbaa !9
  %704 = load i32, ptr %36, align 4, !tbaa !9
  %705 = icmp sle i32 %703, %704
  br i1 %705, label %706, label %786

706:                                              ; preds = %702
  %707 = load ptr, ptr %24, align 8, !tbaa !5
  %708 = load i32, ptr %46, align 4, !tbaa !9
  %709 = load i32, ptr %45, align 4, !tbaa !9
  %710 = load i32, ptr %33, align 4, !tbaa !9
  %711 = mul nsw i32 %709, %710
  %712 = add nsw i32 %708, %711
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds double, ptr %707, i64 %713
  %715 = load double, ptr %714, align 8, !tbaa !11
  store double %715, ptr %38, align 8, !tbaa !11
  %716 = load double, ptr %38, align 8, !tbaa !11
  %717 = fcmp oge double %716, 0.000000e+00
  br i1 %717, label %718, label %720

718:                                              ; preds = %706
  %719 = load double, ptr %38, align 8, !tbaa !11
  br label %723

720:                                              ; preds = %706
  %721 = load double, ptr %38, align 8, !tbaa !11
  %722 = fneg double %721
  br label %723

723:                                              ; preds = %720, %718
  %724 = phi double [ %719, %718 ], [ %722, %720 ]
  store double %724, ptr %47, align 8, !tbaa !11
  %725 = load i32, ptr %46, align 4, !tbaa !9
  %726 = sub nsw i32 %725, 1
  store i32 %726, ptr %37, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %727

727:                                              ; preds = %769, %723
  %728 = load i32, ptr %44, align 4, !tbaa !9
  %729 = load i32, ptr %37, align 4, !tbaa !9
  %730 = icmp sle i32 %728, %729
  br i1 %730, label %731, label %772

731:                                              ; preds = %727
  %732 = load ptr, ptr %21, align 8, !tbaa !5
  %733 = load i32, ptr %50, align 4, !tbaa !9
  %734 = load i32, ptr %44, align 4, !tbaa !9
  %735 = add nsw i32 %733, %734
  %736 = sub nsw i32 %735, 1
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds double, ptr %732, i64 %737
  %739 = load double, ptr %738, align 8, !tbaa !11
  store double %739, ptr %38, align 8, !tbaa !11
  %740 = load double, ptr %38, align 8, !tbaa !11
  %741 = fcmp oge double %740, 0.000000e+00
  br i1 %741, label %742, label %744

742:                                              ; preds = %731
  %743 = load double, ptr %38, align 8, !tbaa !11
  br label %747

744:                                              ; preds = %731
  %745 = load double, ptr %38, align 8, !tbaa !11
  %746 = fneg double %745
  br label %747

747:                                              ; preds = %744, %742
  %748 = phi double [ %743, %742 ], [ %746, %744 ]
  %749 = load ptr, ptr %24, align 8, !tbaa !5
  %750 = load i32, ptr %44, align 4, !tbaa !9
  %751 = load i32, ptr %45, align 4, !tbaa !9
  %752 = load i32, ptr %33, align 4, !tbaa !9
  %753 = mul nsw i32 %751, %752
  %754 = add nsw i32 %750, %753
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds double, ptr %749, i64 %755
  %757 = load double, ptr %756, align 8, !tbaa !11
  store double %757, ptr %39, align 8, !tbaa !11
  %758 = load double, ptr %39, align 8, !tbaa !11
  %759 = fcmp oge double %758, 0.000000e+00
  br i1 %759, label %760, label %762

760:                                              ; preds = %747
  %761 = load double, ptr %39, align 8, !tbaa !11
  br label %765

762:                                              ; preds = %747
  %763 = load double, ptr %39, align 8, !tbaa !11
  %764 = fneg double %763
  br label %765

765:                                              ; preds = %762, %760
  %766 = phi double [ %761, %760 ], [ %764, %762 ]
  %767 = load double, ptr %47, align 8, !tbaa !11
  %768 = call double @llvm.fmuladd.f64(double %748, double %766, double %767)
  store double %768, ptr %47, align 8, !tbaa !11
  br label %769

769:                                              ; preds = %765
  %770 = load i32, ptr %44, align 4, !tbaa !9
  %771 = add nsw i32 %770, 1
  store i32 %771, ptr %44, align 4, !tbaa !9
  br label %727, !llvm.loop !27

772:                                              ; preds = %727
  %773 = load double, ptr %47, align 8, !tbaa !11
  %774 = load ptr, ptr %28, align 8, !tbaa !5
  %775 = load i32, ptr %46, align 4, !tbaa !9
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds double, ptr %774, i64 %776
  %778 = load double, ptr %777, align 8, !tbaa !11
  %779 = fadd double %778, %773
  store double %779, ptr %777, align 8, !tbaa !11
  %780 = load i32, ptr %46, align 4, !tbaa !9
  %781 = load i32, ptr %50, align 4, !tbaa !9
  %782 = add nsw i32 %781, %780
  store i32 %782, ptr %50, align 4, !tbaa !9
  br label %783

783:                                              ; preds = %772
  %784 = load i32, ptr %46, align 4, !tbaa !9
  %785 = add nsw i32 %784, 1
  store i32 %785, ptr %46, align 4, !tbaa !9
  br label %702, !llvm.loop !28

786:                                              ; preds = %702
  br label %787

787:                                              ; preds = %786, %698
  br label %963

788:                                              ; preds = %624
  store i32 1, ptr %50, align 4, !tbaa !9
  %789 = load i32, ptr %56, align 4, !tbaa !9
  %790 = icmp ne i32 %789, 0
  br i1 %790, label %791, label %867

791:                                              ; preds = %788
  %792 = load ptr, ptr %19, align 8, !tbaa !5
  %793 = load i32, ptr %792, align 4, !tbaa !9
  store i32 %793, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %794

794:                                              ; preds = %863, %791
  %795 = load i32, ptr %46, align 4, !tbaa !9
  %796 = load i32, ptr %36, align 4, !tbaa !9
  %797 = icmp sle i32 %795, %796
  br i1 %797, label %798, label %866

798:                                              ; preds = %794
  store double 0.000000e+00, ptr %47, align 8, !tbaa !11
  %799 = load ptr, ptr %19, align 8, !tbaa !5
  %800 = load i32, ptr %799, align 4, !tbaa !9
  store i32 %800, ptr %37, align 4, !tbaa !9
  %801 = load i32, ptr %46, align 4, !tbaa !9
  store i32 %801, ptr %44, align 4, !tbaa !9
  br label %802

802:                                              ; preds = %845, %798
  %803 = load i32, ptr %44, align 4, !tbaa !9
  %804 = load i32, ptr %37, align 4, !tbaa !9
  %805 = icmp sle i32 %803, %804
  br i1 %805, label %806, label %848

806:                                              ; preds = %802
  %807 = load ptr, ptr %21, align 8, !tbaa !5
  %808 = load i32, ptr %50, align 4, !tbaa !9
  %809 = load i32, ptr %44, align 4, !tbaa !9
  %810 = add nsw i32 %808, %809
  %811 = load i32, ptr %46, align 4, !tbaa !9
  %812 = sub nsw i32 %810, %811
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds double, ptr %807, i64 %813
  %815 = load double, ptr %814, align 8, !tbaa !11
  store double %815, ptr %38, align 8, !tbaa !11
  %816 = load double, ptr %38, align 8, !tbaa !11
  %817 = fcmp oge double %816, 0.000000e+00
  br i1 %817, label %818, label %820

818:                                              ; preds = %806
  %819 = load double, ptr %38, align 8, !tbaa !11
  br label %823

820:                                              ; preds = %806
  %821 = load double, ptr %38, align 8, !tbaa !11
  %822 = fneg double %821
  br label %823

823:                                              ; preds = %820, %818
  %824 = phi double [ %819, %818 ], [ %822, %820 ]
  %825 = load ptr, ptr %24, align 8, !tbaa !5
  %826 = load i32, ptr %44, align 4, !tbaa !9
  %827 = load i32, ptr %45, align 4, !tbaa !9
  %828 = load i32, ptr %33, align 4, !tbaa !9
  %829 = mul nsw i32 %827, %828
  %830 = add nsw i32 %826, %829
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds double, ptr %825, i64 %831
  %833 = load double, ptr %832, align 8, !tbaa !11
  store double %833, ptr %39, align 8, !tbaa !11
  %834 = load double, ptr %39, align 8, !tbaa !11
  %835 = fcmp oge double %834, 0.000000e+00
  br i1 %835, label %836, label %838

836:                                              ; preds = %823
  %837 = load double, ptr %39, align 8, !tbaa !11
  br label %841

838:                                              ; preds = %823
  %839 = load double, ptr %39, align 8, !tbaa !11
  %840 = fneg double %839
  br label %841

841:                                              ; preds = %838, %836
  %842 = phi double [ %837, %836 ], [ %840, %838 ]
  %843 = load double, ptr %47, align 8, !tbaa !11
  %844 = call double @llvm.fmuladd.f64(double %824, double %842, double %843)
  store double %844, ptr %47, align 8, !tbaa !11
  br label %845

845:                                              ; preds = %841
  %846 = load i32, ptr %44, align 4, !tbaa !9
  %847 = add nsw i32 %846, 1
  store i32 %847, ptr %44, align 4, !tbaa !9
  br label %802, !llvm.loop !29

848:                                              ; preds = %802
  %849 = load double, ptr %47, align 8, !tbaa !11
  %850 = load ptr, ptr %28, align 8, !tbaa !5
  %851 = load i32, ptr %46, align 4, !tbaa !9
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds double, ptr %850, i64 %852
  %854 = load double, ptr %853, align 8, !tbaa !11
  %855 = fadd double %854, %849
  store double %855, ptr %853, align 8, !tbaa !11
  %856 = load i32, ptr %50, align 4, !tbaa !9
  %857 = load ptr, ptr %19, align 8, !tbaa !5
  %858 = load i32, ptr %857, align 4, !tbaa !9
  %859 = add nsw i32 %856, %858
  %860 = load i32, ptr %46, align 4, !tbaa !9
  %861 = sub nsw i32 %859, %860
  %862 = add nsw i32 %861, 1
  store i32 %862, ptr %50, align 4, !tbaa !9
  br label %863

863:                                              ; preds = %848
  %864 = load i32, ptr %46, align 4, !tbaa !9
  %865 = add nsw i32 %864, 1
  store i32 %865, ptr %46, align 4, !tbaa !9
  br label %794, !llvm.loop !30

866:                                              ; preds = %794
  br label %962

867:                                              ; preds = %788
  %868 = load ptr, ptr %19, align 8, !tbaa !5
  %869 = load i32, ptr %868, align 4, !tbaa !9
  store i32 %869, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %46, align 4, !tbaa !9
  br label %870

870:                                              ; preds = %958, %867
  %871 = load i32, ptr %46, align 4, !tbaa !9
  %872 = load i32, ptr %36, align 4, !tbaa !9
  %873 = icmp sle i32 %871, %872
  br i1 %873, label %874, label %961

874:                                              ; preds = %870
  %875 = load ptr, ptr %24, align 8, !tbaa !5
  %876 = load i32, ptr %46, align 4, !tbaa !9
  %877 = load i32, ptr %45, align 4, !tbaa !9
  %878 = load i32, ptr %33, align 4, !tbaa !9
  %879 = mul nsw i32 %877, %878
  %880 = add nsw i32 %876, %879
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds double, ptr %875, i64 %881
  %883 = load double, ptr %882, align 8, !tbaa !11
  store double %883, ptr %38, align 8, !tbaa !11
  %884 = load double, ptr %38, align 8, !tbaa !11
  %885 = fcmp oge double %884, 0.000000e+00
  br i1 %885, label %886, label %888

886:                                              ; preds = %874
  %887 = load double, ptr %38, align 8, !tbaa !11
  br label %891

888:                                              ; preds = %874
  %889 = load double, ptr %38, align 8, !tbaa !11
  %890 = fneg double %889
  br label %891

891:                                              ; preds = %888, %886
  %892 = phi double [ %887, %886 ], [ %890, %888 ]
  store double %892, ptr %47, align 8, !tbaa !11
  %893 = load ptr, ptr %19, align 8, !tbaa !5
  %894 = load i32, ptr %893, align 4, !tbaa !9
  store i32 %894, ptr %37, align 4, !tbaa !9
  %895 = load i32, ptr %46, align 4, !tbaa !9
  %896 = add nsw i32 %895, 1
  store i32 %896, ptr %44, align 4, !tbaa !9
  br label %897

897:                                              ; preds = %940, %891
  %898 = load i32, ptr %44, align 4, !tbaa !9
  %899 = load i32, ptr %37, align 4, !tbaa !9
  %900 = icmp sle i32 %898, %899
  br i1 %900, label %901, label %943

901:                                              ; preds = %897
  %902 = load ptr, ptr %21, align 8, !tbaa !5
  %903 = load i32, ptr %50, align 4, !tbaa !9
  %904 = load i32, ptr %44, align 4, !tbaa !9
  %905 = add nsw i32 %903, %904
  %906 = load i32, ptr %46, align 4, !tbaa !9
  %907 = sub nsw i32 %905, %906
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds double, ptr %902, i64 %908
  %910 = load double, ptr %909, align 8, !tbaa !11
  store double %910, ptr %38, align 8, !tbaa !11
  %911 = load double, ptr %38, align 8, !tbaa !11
  %912 = fcmp oge double %911, 0.000000e+00
  br i1 %912, label %913, label %915

913:                                              ; preds = %901
  %914 = load double, ptr %38, align 8, !tbaa !11
  br label %918

915:                                              ; preds = %901
  %916 = load double, ptr %38, align 8, !tbaa !11
  %917 = fneg double %916
  br label %918

918:                                              ; preds = %915, %913
  %919 = phi double [ %914, %913 ], [ %917, %915 ]
  %920 = load ptr, ptr %24, align 8, !tbaa !5
  %921 = load i32, ptr %44, align 4, !tbaa !9
  %922 = load i32, ptr %45, align 4, !tbaa !9
  %923 = load i32, ptr %33, align 4, !tbaa !9
  %924 = mul nsw i32 %922, %923
  %925 = add nsw i32 %921, %924
  %926 = sext i32 %925 to i64
  %927 = getelementptr inbounds double, ptr %920, i64 %926
  %928 = load double, ptr %927, align 8, !tbaa !11
  store double %928, ptr %39, align 8, !tbaa !11
  %929 = load double, ptr %39, align 8, !tbaa !11
  %930 = fcmp oge double %929, 0.000000e+00
  br i1 %930, label %931, label %933

931:                                              ; preds = %918
  %932 = load double, ptr %39, align 8, !tbaa !11
  br label %936

933:                                              ; preds = %918
  %934 = load double, ptr %39, align 8, !tbaa !11
  %935 = fneg double %934
  br label %936

936:                                              ; preds = %933, %931
  %937 = phi double [ %932, %931 ], [ %935, %933 ]
  %938 = load double, ptr %47, align 8, !tbaa !11
  %939 = call double @llvm.fmuladd.f64(double %919, double %937, double %938)
  store double %939, ptr %47, align 8, !tbaa !11
  br label %940

940:                                              ; preds = %936
  %941 = load i32, ptr %44, align 4, !tbaa !9
  %942 = add nsw i32 %941, 1
  store i32 %942, ptr %44, align 4, !tbaa !9
  br label %897, !llvm.loop !31

943:                                              ; preds = %897
  %944 = load double, ptr %47, align 8, !tbaa !11
  %945 = load ptr, ptr %28, align 8, !tbaa !5
  %946 = load i32, ptr %46, align 4, !tbaa !9
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds double, ptr %945, i64 %947
  %949 = load double, ptr %948, align 8, !tbaa !11
  %950 = fadd double %949, %944
  store double %950, ptr %948, align 8, !tbaa !11
  %951 = load i32, ptr %50, align 4, !tbaa !9
  %952 = load ptr, ptr %19, align 8, !tbaa !5
  %953 = load i32, ptr %952, align 4, !tbaa !9
  %954 = add nsw i32 %951, %953
  %955 = load i32, ptr %46, align 4, !tbaa !9
  %956 = sub nsw i32 %954, %955
  %957 = add nsw i32 %956, 1
  store i32 %957, ptr %50, align 4, !tbaa !9
  br label %958

958:                                              ; preds = %943
  %959 = load i32, ptr %46, align 4, !tbaa !9
  %960 = add nsw i32 %959, 1
  store i32 %960, ptr %46, align 4, !tbaa !9
  br label %870, !llvm.loop !32

961:                                              ; preds = %870
  br label %962

962:                                              ; preds = %961, %866
  br label %963

963:                                              ; preds = %962, %787
  br label %964

964:                                              ; preds = %963, %623
  store double 0.000000e+00, ptr %47, align 8, !tbaa !11
  %965 = load ptr, ptr %19, align 8, !tbaa !5
  %966 = load i32, ptr %965, align 4, !tbaa !9
  store i32 %966, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %967

967:                                              ; preds = %1052, %964
  %968 = load i32, ptr %44, align 4, !tbaa !9
  %969 = load i32, ptr %36, align 4, !tbaa !9
  %970 = icmp sle i32 %968, %969
  br i1 %970, label %971, label %1055

971:                                              ; preds = %967
  %972 = load ptr, ptr %28, align 8, !tbaa !5
  %973 = load i32, ptr %44, align 4, !tbaa !9
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds double, ptr %972, i64 %974
  %976 = load double, ptr %975, align 8, !tbaa !11
  %977 = load double, ptr %43, align 8, !tbaa !11
  %978 = fcmp ogt double %976, %977
  br i1 %978, label %979, label %1013

979:                                              ; preds = %971
  %980 = load double, ptr %47, align 8, !tbaa !11
  store double %980, ptr %39, align 8, !tbaa !11
  %981 = load ptr, ptr %28, align 8, !tbaa !5
  %982 = load ptr, ptr %19, align 8, !tbaa !5
  %983 = load i32, ptr %982, align 4, !tbaa !9
  %984 = load i32, ptr %44, align 4, !tbaa !9
  %985 = add nsw i32 %983, %984
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds double, ptr %981, i64 %986
  %988 = load double, ptr %987, align 8, !tbaa !11
  store double %988, ptr %38, align 8, !tbaa !11
  %989 = load double, ptr %38, align 8, !tbaa !11
  %990 = fcmp oge double %989, 0.000000e+00
  br i1 %990, label %991, label %993

991:                                              ; preds = %979
  %992 = load double, ptr %38, align 8, !tbaa !11
  br label %996

993:                                              ; preds = %979
  %994 = load double, ptr %38, align 8, !tbaa !11
  %995 = fneg double %994
  br label %996

996:                                              ; preds = %993, %991
  %997 = phi double [ %992, %991 ], [ %995, %993 ]
  %998 = load ptr, ptr %28, align 8, !tbaa !5
  %999 = load i32, ptr %44, align 4, !tbaa !9
  %1000 = sext i32 %999 to i64
  %1001 = getelementptr inbounds double, ptr %998, i64 %1000
  %1002 = load double, ptr %1001, align 8, !tbaa !11
  %1003 = fdiv double %997, %1002
  store double %1003, ptr %40, align 8, !tbaa !11
  %1004 = load double, ptr %39, align 8, !tbaa !11
  %1005 = load double, ptr %40, align 8, !tbaa !11
  %1006 = fcmp oge double %1004, %1005
  br i1 %1006, label %1007, label %1009

1007:                                             ; preds = %996
  %1008 = load double, ptr %39, align 8, !tbaa !11
  br label %1011

1009:                                             ; preds = %996
  %1010 = load double, ptr %40, align 8, !tbaa !11
  br label %1011

1011:                                             ; preds = %1009, %1007
  %1012 = phi double [ %1008, %1007 ], [ %1010, %1009 ]
  store double %1012, ptr %47, align 8, !tbaa !11
  br label %1051

1013:                                             ; preds = %971
  %1014 = load double, ptr %47, align 8, !tbaa !11
  store double %1014, ptr %39, align 8, !tbaa !11
  %1015 = load ptr, ptr %28, align 8, !tbaa !5
  %1016 = load ptr, ptr %19, align 8, !tbaa !5
  %1017 = load i32, ptr %1016, align 4, !tbaa !9
  %1018 = load i32, ptr %44, align 4, !tbaa !9
  %1019 = add nsw i32 %1017, %1018
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds double, ptr %1015, i64 %1020
  %1022 = load double, ptr %1021, align 8, !tbaa !11
  store double %1022, ptr %38, align 8, !tbaa !11
  %1023 = load double, ptr %38, align 8, !tbaa !11
  %1024 = fcmp oge double %1023, 0.000000e+00
  br i1 %1024, label %1025, label %1027

1025:                                             ; preds = %1013
  %1026 = load double, ptr %38, align 8, !tbaa !11
  br label %1030

1027:                                             ; preds = %1013
  %1028 = load double, ptr %38, align 8, !tbaa !11
  %1029 = fneg double %1028
  br label %1030

1030:                                             ; preds = %1027, %1025
  %1031 = phi double [ %1026, %1025 ], [ %1029, %1027 ]
  %1032 = load double, ptr %42, align 8, !tbaa !11
  %1033 = fadd double %1031, %1032
  %1034 = load ptr, ptr %28, align 8, !tbaa !5
  %1035 = load i32, ptr %44, align 4, !tbaa !9
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds double, ptr %1034, i64 %1036
  %1038 = load double, ptr %1037, align 8, !tbaa !11
  %1039 = load double, ptr %42, align 8, !tbaa !11
  %1040 = fadd double %1038, %1039
  %1041 = fdiv double %1033, %1040
  store double %1041, ptr %40, align 8, !tbaa !11
  %1042 = load double, ptr %39, align 8, !tbaa !11
  %1043 = load double, ptr %40, align 8, !tbaa !11
  %1044 = fcmp oge double %1042, %1043
  br i1 %1044, label %1045, label %1047

1045:                                             ; preds = %1030
  %1046 = load double, ptr %39, align 8, !tbaa !11
  br label %1049

1047:                                             ; preds = %1030
  %1048 = load double, ptr %40, align 8, !tbaa !11
  br label %1049

1049:                                             ; preds = %1047, %1045
  %1050 = phi double [ %1046, %1045 ], [ %1048, %1047 ]
  store double %1050, ptr %47, align 8, !tbaa !11
  br label %1051

1051:                                             ; preds = %1049, %1011
  br label %1052

1052:                                             ; preds = %1051
  %1053 = load i32, ptr %44, align 4, !tbaa !9
  %1054 = add nsw i32 %1053, 1
  store i32 %1054, ptr %44, align 4, !tbaa !9
  br label %967, !llvm.loop !33

1055:                                             ; preds = %967
  %1056 = load double, ptr %47, align 8, !tbaa !11
  %1057 = load ptr, ptr %27, align 8, !tbaa !5
  %1058 = load i32, ptr %45, align 4, !tbaa !9
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds double, ptr %1057, i64 %1059
  store double %1056, ptr %1060, align 8, !tbaa !11
  %1061 = load ptr, ptr %19, align 8, !tbaa !5
  %1062 = load i32, ptr %1061, align 4, !tbaa !9
  store i32 %1062, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %1063

1063:                                             ; preds = %1142, %1055
  %1064 = load i32, ptr %44, align 4, !tbaa !9
  %1065 = load i32, ptr %36, align 4, !tbaa !9
  %1066 = icmp sle i32 %1064, %1065
  br i1 %1066, label %1067, label %1145

1067:                                             ; preds = %1063
  %1068 = load ptr, ptr %28, align 8, !tbaa !5
  %1069 = load i32, ptr %44, align 4, !tbaa !9
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds double, ptr %1068, i64 %1070
  %1072 = load double, ptr %1071, align 8, !tbaa !11
  %1073 = load double, ptr %43, align 8, !tbaa !11
  %1074 = fcmp ogt double %1072, %1073
  br i1 %1074, label %1075, label %1107

1075:                                             ; preds = %1067
  %1076 = load ptr, ptr %28, align 8, !tbaa !5
  %1077 = load ptr, ptr %19, align 8, !tbaa !5
  %1078 = load i32, ptr %1077, align 4, !tbaa !9
  %1079 = load i32, ptr %44, align 4, !tbaa !9
  %1080 = add nsw i32 %1078, %1079
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds double, ptr %1076, i64 %1081
  %1083 = load double, ptr %1082, align 8, !tbaa !11
  store double %1083, ptr %38, align 8, !tbaa !11
  %1084 = load double, ptr %38, align 8, !tbaa !11
  %1085 = fcmp oge double %1084, 0.000000e+00
  br i1 %1085, label %1086, label %1088

1086:                                             ; preds = %1075
  %1087 = load double, ptr %38, align 8, !tbaa !11
  br label %1091

1088:                                             ; preds = %1075
  %1089 = load double, ptr %38, align 8, !tbaa !11
  %1090 = fneg double %1089
  br label %1091

1091:                                             ; preds = %1088, %1086
  %1092 = phi double [ %1087, %1086 ], [ %1090, %1088 ]
  %1093 = load i32, ptr %52, align 4, !tbaa !9
  %1094 = sitofp i32 %1093 to double
  %1095 = load double, ptr %58, align 8, !tbaa !11
  %1096 = fmul double %1094, %1095
  %1097 = load ptr, ptr %28, align 8, !tbaa !5
  %1098 = load i32, ptr %44, align 4, !tbaa !9
  %1099 = sext i32 %1098 to i64
  %1100 = getelementptr inbounds double, ptr %1097, i64 %1099
  %1101 = load double, ptr %1100, align 8, !tbaa !11
  %1102 = call double @llvm.fmuladd.f64(double %1096, double %1101, double %1092)
  %1103 = load ptr, ptr %28, align 8, !tbaa !5
  %1104 = load i32, ptr %44, align 4, !tbaa !9
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds double, ptr %1103, i64 %1105
  store double %1102, ptr %1106, align 8, !tbaa !11
  br label %1141

1107:                                             ; preds = %1067
  %1108 = load ptr, ptr %28, align 8, !tbaa !5
  %1109 = load ptr, ptr %19, align 8, !tbaa !5
  %1110 = load i32, ptr %1109, align 4, !tbaa !9
  %1111 = load i32, ptr %44, align 4, !tbaa !9
  %1112 = add nsw i32 %1110, %1111
  %1113 = sext i32 %1112 to i64
  %1114 = getelementptr inbounds double, ptr %1108, i64 %1113
  %1115 = load double, ptr %1114, align 8, !tbaa !11
  store double %1115, ptr %38, align 8, !tbaa !11
  %1116 = load double, ptr %38, align 8, !tbaa !11
  %1117 = fcmp oge double %1116, 0.000000e+00
  br i1 %1117, label %1118, label %1120

1118:                                             ; preds = %1107
  %1119 = load double, ptr %38, align 8, !tbaa !11
  br label %1123

1120:                                             ; preds = %1107
  %1121 = load double, ptr %38, align 8, !tbaa !11
  %1122 = fneg double %1121
  br label %1123

1123:                                             ; preds = %1120, %1118
  %1124 = phi double [ %1119, %1118 ], [ %1122, %1120 ]
  %1125 = load i32, ptr %52, align 4, !tbaa !9
  %1126 = sitofp i32 %1125 to double
  %1127 = load double, ptr %58, align 8, !tbaa !11
  %1128 = fmul double %1126, %1127
  %1129 = load ptr, ptr %28, align 8, !tbaa !5
  %1130 = load i32, ptr %44, align 4, !tbaa !9
  %1131 = sext i32 %1130 to i64
  %1132 = getelementptr inbounds double, ptr %1129, i64 %1131
  %1133 = load double, ptr %1132, align 8, !tbaa !11
  %1134 = call double @llvm.fmuladd.f64(double %1128, double %1133, double %1124)
  %1135 = load double, ptr %42, align 8, !tbaa !11
  %1136 = fadd double %1134, %1135
  %1137 = load ptr, ptr %28, align 8, !tbaa !5
  %1138 = load i32, ptr %44, align 4, !tbaa !9
  %1139 = sext i32 %1138 to i64
  %1140 = getelementptr inbounds double, ptr %1137, i64 %1139
  store double %1136, ptr %1140, align 8, !tbaa !11
  br label %1141

1141:                                             ; preds = %1123, %1091
  br label %1142

1142:                                             ; preds = %1141
  %1143 = load i32, ptr %44, align 4, !tbaa !9
  %1144 = add nsw i32 %1143, 1
  store i32 %1144, ptr %44, align 4, !tbaa !9
  br label %1063, !llvm.loop !34

1145:                                             ; preds = %1063
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %1146

1146:                                             ; preds = %1263, %1145
  %1147 = load ptr, ptr %19, align 8, !tbaa !5
  %1148 = load ptr, ptr %28, align 8, !tbaa !5
  %1149 = load ptr, ptr %19, align 8, !tbaa !5
  %1150 = load i32, ptr %1149, align 4, !tbaa !9
  %1151 = shl i32 %1150, 1
  %1152 = add nsw i32 %1151, 1
  %1153 = sext i32 %1152 to i64
  %1154 = getelementptr inbounds double, ptr %1148, i64 %1153
  %1155 = load ptr, ptr %28, align 8, !tbaa !5
  %1156 = load ptr, ptr %19, align 8, !tbaa !5
  %1157 = load i32, ptr %1156, align 4, !tbaa !9
  %1158 = add nsw i32 %1157, 1
  %1159 = sext i32 %1158 to i64
  %1160 = getelementptr inbounds double, ptr %1155, i64 %1159
  %1161 = load ptr, ptr %29, align 8, !tbaa !5
  %1162 = getelementptr inbounds i32, ptr %1161, i64 1
  %1163 = load ptr, ptr %26, align 8, !tbaa !5
  %1164 = load i32, ptr %45, align 4, !tbaa !9
  %1165 = sext i32 %1164 to i64
  %1166 = getelementptr inbounds double, ptr %1163, i64 %1165
  %1167 = getelementptr inbounds [3 x i32], ptr %48, i64 0, i64 0
  call void @dlacn2_(ptr noundef %1147, ptr noundef %1154, ptr noundef %1160, ptr noundef %1162, ptr noundef %1166, ptr noundef %41, ptr noundef %1167)
  %1168 = load i32, ptr %41, align 4, !tbaa !9
  %1169 = icmp ne i32 %1168, 0
  br i1 %1169, label %1170, label %1264

1170:                                             ; preds = %1146
  %1171 = load i32, ptr %41, align 4, !tbaa !9
  %1172 = icmp eq i32 %1171, 1
  br i1 %1172, label %1173, label %1218

1173:                                             ; preds = %1170
  %1174 = load ptr, ptr %16, align 8, !tbaa !5
  %1175 = getelementptr inbounds [1 x i8], ptr %55, i64 0, i64 0
  %1176 = load ptr, ptr %18, align 8, !tbaa !5
  %1177 = load ptr, ptr %19, align 8, !tbaa !5
  %1178 = load ptr, ptr %21, align 8, !tbaa !5
  %1179 = getelementptr inbounds double, ptr %1178, i64 1
  %1180 = load ptr, ptr %28, align 8, !tbaa !5
  %1181 = load ptr, ptr %19, align 8, !tbaa !5
  %1182 = load i32, ptr %1181, align 4, !tbaa !9
  %1183 = add nsw i32 %1182, 1
  %1184 = sext i32 %1183 to i64
  %1185 = getelementptr inbounds double, ptr %1180, i64 %1184
  call void @dtpsv_(ptr noundef %1174, ptr noundef %1175, ptr noundef %1176, ptr noundef %1177, ptr noundef %1179, ptr noundef %1185, ptr noundef @c__1)
  %1186 = load ptr, ptr %19, align 8, !tbaa !5
  %1187 = load i32, ptr %1186, align 4, !tbaa !9
  store i32 %1187, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %1188

1188:                                             ; preds = %1214, %1173
  %1189 = load i32, ptr %44, align 4, !tbaa !9
  %1190 = load i32, ptr %36, align 4, !tbaa !9
  %1191 = icmp sle i32 %1189, %1190
  br i1 %1191, label %1192, label %1217

1192:                                             ; preds = %1188
  %1193 = load ptr, ptr %28, align 8, !tbaa !5
  %1194 = load i32, ptr %44, align 4, !tbaa !9
  %1195 = sext i32 %1194 to i64
  %1196 = getelementptr inbounds double, ptr %1193, i64 %1195
  %1197 = load double, ptr %1196, align 8, !tbaa !11
  %1198 = load ptr, ptr %28, align 8, !tbaa !5
  %1199 = load ptr, ptr %19, align 8, !tbaa !5
  %1200 = load i32, ptr %1199, align 4, !tbaa !9
  %1201 = load i32, ptr %44, align 4, !tbaa !9
  %1202 = add nsw i32 %1200, %1201
  %1203 = sext i32 %1202 to i64
  %1204 = getelementptr inbounds double, ptr %1198, i64 %1203
  %1205 = load double, ptr %1204, align 8, !tbaa !11
  %1206 = fmul double %1197, %1205
  %1207 = load ptr, ptr %28, align 8, !tbaa !5
  %1208 = load ptr, ptr %19, align 8, !tbaa !5
  %1209 = load i32, ptr %1208, align 4, !tbaa !9
  %1210 = load i32, ptr %44, align 4, !tbaa !9
  %1211 = add nsw i32 %1209, %1210
  %1212 = sext i32 %1211 to i64
  %1213 = getelementptr inbounds double, ptr %1207, i64 %1212
  store double %1206, ptr %1213, align 8, !tbaa !11
  br label %1214

1214:                                             ; preds = %1192
  %1215 = load i32, ptr %44, align 4, !tbaa !9
  %1216 = add nsw i32 %1215, 1
  store i32 %1216, ptr %44, align 4, !tbaa !9
  br label %1188, !llvm.loop !35

1217:                                             ; preds = %1188
  br label %1263

1218:                                             ; preds = %1170
  %1219 = load ptr, ptr %19, align 8, !tbaa !5
  %1220 = load i32, ptr %1219, align 4, !tbaa !9
  store i32 %1220, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %1221

1221:                                             ; preds = %1247, %1218
  %1222 = load i32, ptr %44, align 4, !tbaa !9
  %1223 = load i32, ptr %36, align 4, !tbaa !9
  %1224 = icmp sle i32 %1222, %1223
  br i1 %1224, label %1225, label %1250

1225:                                             ; preds = %1221
  %1226 = load ptr, ptr %28, align 8, !tbaa !5
  %1227 = load i32, ptr %44, align 4, !tbaa !9
  %1228 = sext i32 %1227 to i64
  %1229 = getelementptr inbounds double, ptr %1226, i64 %1228
  %1230 = load double, ptr %1229, align 8, !tbaa !11
  %1231 = load ptr, ptr %28, align 8, !tbaa !5
  %1232 = load ptr, ptr %19, align 8, !tbaa !5
  %1233 = load i32, ptr %1232, align 4, !tbaa !9
  %1234 = load i32, ptr %44, align 4, !tbaa !9
  %1235 = add nsw i32 %1233, %1234
  %1236 = sext i32 %1235 to i64
  %1237 = getelementptr inbounds double, ptr %1231, i64 %1236
  %1238 = load double, ptr %1237, align 8, !tbaa !11
  %1239 = fmul double %1230, %1238
  %1240 = load ptr, ptr %28, align 8, !tbaa !5
  %1241 = load ptr, ptr %19, align 8, !tbaa !5
  %1242 = load i32, ptr %1241, align 4, !tbaa !9
  %1243 = load i32, ptr %44, align 4, !tbaa !9
  %1244 = add nsw i32 %1242, %1243
  %1245 = sext i32 %1244 to i64
  %1246 = getelementptr inbounds double, ptr %1240, i64 %1245
  store double %1239, ptr %1246, align 8, !tbaa !11
  br label %1247

1247:                                             ; preds = %1225
  %1248 = load i32, ptr %44, align 4, !tbaa !9
  %1249 = add nsw i32 %1248, 1
  store i32 %1249, ptr %44, align 4, !tbaa !9
  br label %1221, !llvm.loop !36

1250:                                             ; preds = %1221
  %1251 = load ptr, ptr %16, align 8, !tbaa !5
  %1252 = load ptr, ptr %17, align 8, !tbaa !5
  %1253 = load ptr, ptr %18, align 8, !tbaa !5
  %1254 = load ptr, ptr %19, align 8, !tbaa !5
  %1255 = load ptr, ptr %21, align 8, !tbaa !5
  %1256 = getelementptr inbounds double, ptr %1255, i64 1
  %1257 = load ptr, ptr %28, align 8, !tbaa !5
  %1258 = load ptr, ptr %19, align 8, !tbaa !5
  %1259 = load i32, ptr %1258, align 4, !tbaa !9
  %1260 = add nsw i32 %1259, 1
  %1261 = sext i32 %1260 to i64
  %1262 = getelementptr inbounds double, ptr %1257, i64 %1261
  call void @dtpsv_(ptr noundef %1251, ptr noundef %1252, ptr noundef %1253, ptr noundef %1254, ptr noundef %1256, ptr noundef %1262, ptr noundef @c__1)
  br label %1263

1263:                                             ; preds = %1250, %1217
  br label %1146

1264:                                             ; preds = %1146
  store double 0.000000e+00, ptr %57, align 8, !tbaa !11
  %1265 = load ptr, ptr %19, align 8, !tbaa !5
  %1266 = load i32, ptr %1265, align 4, !tbaa !9
  store i32 %1266, ptr %36, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %1267

1267:                                             ; preds = %1300, %1264
  %1268 = load i32, ptr %44, align 4, !tbaa !9
  %1269 = load i32, ptr %36, align 4, !tbaa !9
  %1270 = icmp sle i32 %1268, %1269
  br i1 %1270, label %1271, label %1303

1271:                                             ; preds = %1267
  %1272 = load double, ptr %57, align 8, !tbaa !11
  store double %1272, ptr %39, align 8, !tbaa !11
  %1273 = load ptr, ptr %24, align 8, !tbaa !5
  %1274 = load i32, ptr %44, align 4, !tbaa !9
  %1275 = load i32, ptr %45, align 4, !tbaa !9
  %1276 = load i32, ptr %33, align 4, !tbaa !9
  %1277 = mul nsw i32 %1275, %1276
  %1278 = add nsw i32 %1274, %1277
  %1279 = sext i32 %1278 to i64
  %1280 = getelementptr inbounds double, ptr %1273, i64 %1279
  %1281 = load double, ptr %1280, align 8, !tbaa !11
  store double %1281, ptr %38, align 8, !tbaa !11
  %1282 = load double, ptr %38, align 8, !tbaa !11
  %1283 = fcmp oge double %1282, 0.000000e+00
  br i1 %1283, label %1284, label %1286

1284:                                             ; preds = %1271
  %1285 = load double, ptr %38, align 8, !tbaa !11
  br label %1289

1286:                                             ; preds = %1271
  %1287 = load double, ptr %38, align 8, !tbaa !11
  %1288 = fneg double %1287
  br label %1289

1289:                                             ; preds = %1286, %1284
  %1290 = phi double [ %1285, %1284 ], [ %1288, %1286 ]
  store double %1290, ptr %40, align 8, !tbaa !11
  %1291 = load double, ptr %39, align 8, !tbaa !11
  %1292 = load double, ptr %40, align 8, !tbaa !11
  %1293 = fcmp oge double %1291, %1292
  br i1 %1293, label %1294, label %1296

1294:                                             ; preds = %1289
  %1295 = load double, ptr %39, align 8, !tbaa !11
  br label %1298

1296:                                             ; preds = %1289
  %1297 = load double, ptr %40, align 8, !tbaa !11
  br label %1298

1298:                                             ; preds = %1296, %1294
  %1299 = phi double [ %1295, %1294 ], [ %1297, %1296 ]
  store double %1299, ptr %57, align 8, !tbaa !11
  br label %1300

1300:                                             ; preds = %1298
  %1301 = load i32, ptr %44, align 4, !tbaa !9
  %1302 = add nsw i32 %1301, 1
  store i32 %1302, ptr %44, align 4, !tbaa !9
  br label %1267, !llvm.loop !37

1303:                                             ; preds = %1267
  %1304 = load double, ptr %57, align 8, !tbaa !11
  %1305 = fcmp une double %1304, 0.000000e+00
  br i1 %1305, label %1306, label %1314

1306:                                             ; preds = %1303
  %1307 = load double, ptr %57, align 8, !tbaa !11
  %1308 = load ptr, ptr %26, align 8, !tbaa !5
  %1309 = load i32, ptr %45, align 4, !tbaa !9
  %1310 = sext i32 %1309 to i64
  %1311 = getelementptr inbounds double, ptr %1308, i64 %1310
  %1312 = load double, ptr %1311, align 8, !tbaa !11
  %1313 = fdiv double %1312, %1307
  store double %1313, ptr %1311, align 8, !tbaa !11
  br label %1314

1314:                                             ; preds = %1306, %1303
  br label %1315

1315:                                             ; preds = %1314
  %1316 = load i32, ptr %45, align 4, !tbaa !9
  %1317 = add nsw i32 %1316, 1
  store i32 %1317, ptr %45, align 4, !tbaa !9
  br label %234, !llvm.loop !38

1318:                                             ; preds = %234
  store i32 1, ptr %59, align 4
  br label %1319

1319:                                             ; preds = %1318, %211, %179
  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 4, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 12, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, 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 4, 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 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

65:                                               ; preds = %63
  br i1 %.not547688, label %.loopexit, label %89

66:                                               ; preds = %63
  br i1 %.not547688, label %.loopexit, label %.lr.ph691.preheader

.lr.ph691.preheader:                              ; preds = %66
  %67 = add nuw i32 %51, 1
  %wide.trip.count835 = zext i32 %67 to i64
  %68 = zext nneg i32 %51 to i64
  %min.iters.check1092 = icmp ult i32 %51, 4
  %69 = sub i64 %17, %16
  %diff.check1089 = icmp ult i64 %69, 32
  %or.cond = or i1 %min.iters.check1092, %diff.check1089
  br i1 %or.cond, label %.lr.ph691.preheader1108, label %vector.ph1093

vector.ph1093:                                    ; preds = %.lr.ph691.preheader
  %n.vec1095 = and i64 %68, 2147483644
  %ind.end1096 = or disjoint i64 %n.vec1095, 1
  br label %vector.body1098

vector.body1098:                                  ; preds = %vector.body1098, %vector.ph1093
  %index1099 = phi i64 [ 0, %vector.ph1093 ], [ %index.next1101, %vector.body1098 ]
  %70 = getelementptr double, ptr %10, i64 %index1099
  %71 = getelementptr inbounds i8, ptr %70, i64 16
  store <2 x double> zeroinitializer, ptr %70, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %71, align 8, !tbaa !9
  %72 = getelementptr double, ptr %11, i64 %index1099
  %73 = getelementptr inbounds i8, ptr %72, i64 16
  store <2 x double> zeroinitializer, ptr %72, align 8, !tbaa !9
  store <2 x double> zeroinitializer, ptr %73, align 8, !tbaa !9
  %index.next1101 = add nuw i64 %index1099, 4
  %74 = icmp eq i64 %index.next1101, %n.vec1095
  br i1 %74, label %middle.block1090, label %vector.body1098, !llvm.loop !11

middle.block1090:                                 ; preds = %vector.body1098
  %cmp.n1102 = icmp eq i64 %n.vec1095, %68
  br i1 %cmp.n1102, label %.loopexit, label %.lr.ph691.preheader1108

.lr.ph691.preheader1108:                          ; preds = %middle.block1090, %.lr.ph691.preheader
  %indvars.iv832.ph = phi i64 [ 1, %.lr.ph691.preheader ], [ %ind.end1096, %middle.block1090 ]
  %75 = sub nsw i64 %wide.trip.count835, %indvars.iv832.ph
  %76 = zext nneg i32 %51 to i64
  %77 = sub nsw i64 %76, %indvars.iv832.ph
  %xtraiter1139 = and i64 %75, 3
  %lcmp.mod1140.not = icmp eq i64 %xtraiter1139, 0
  br i1 %lcmp.mod1140.not, label %.lr.ph691.prol.loopexit, label %.lr.ph691.prol

.lr.ph691.prol:                                   ; preds = %.lr.ph691.preheader1108, %.lr.ph691.prol
  %indvars.iv832.prol = phi i64 [ %indvars.iv.next833.prol, %.lr.ph691.prol ], [ %indvars.iv832.ph, %.lr.ph691.preheader1108 ]
  %prol.iter1141 = phi i64 [ %prol.iter1141.next, %.lr.ph691.prol ], [ 0, %.lr.ph691.preheader1108 ]
  %78 = getelementptr inbounds double, ptr %31, i64 %indvars.iv832.prol
  store double 0.000000e+00, ptr %78, align 8, !tbaa !9
  %79 = getelementptr inbounds double, ptr %32, i64 %indvars.iv832.prol
  store double 0.000000e+00, ptr %79, align 8, !tbaa !9
  %indvars.iv.next833.prol = add nuw nsw i64 %indvars.iv832.prol, 1
  %prol.iter1141.next = add i64 %prol.iter1141, 1
  %prol.iter1141.cmp.not = icmp eq i64 %prol.iter1141.next, %xtraiter1139
  br i1 %prol.iter1141.cmp.not, label %.lr.ph691.prol.loopexit, label %.lr.ph691.prol, !llvm.loop !15

.lr.ph691.prol.loopexit:                          ; preds = %.lr.ph691.prol, %.lr.ph691.preheader1108
  %indvars.iv832.unr = phi i64 [ %indvars.iv832.ph, %.lr.ph691.preheader1108 ], [ %indvars.iv.next833.prol, %.lr.ph691.prol ]
  %80 = icmp ult i64 %77, 3
  br i1 %80, label %.loopexit, label %.lr.ph691

.lr.ph691:                                        ; preds = %.lr.ph691.prol.loopexit, %.lr.ph691
  %indvars.iv832 = phi i64 [ %indvars.iv.next833.3, %.lr.ph691 ], [ %indvars.iv832.unr, %.lr.ph691.prol.loopexit ]
  %81 = getelementptr inbounds double, ptr %31, i64 %indvars.iv832
  store double 0.000000e+00, ptr %81, align 8, !tbaa !9
  %82 = getelementptr inbounds double, ptr %32, i64 %indvars.iv832
  store double 0.000000e+00, ptr %82, align 8, !tbaa !9
  %83 = getelementptr double, ptr %10, i64 %indvars.iv832
  store double 0.000000e+00, ptr %83, align 8, !tbaa !9
  %84 = getelementptr double, ptr %11, i64 %indvars.iv832
  store double 0.000000e+00, ptr %84, align 8, !tbaa !9
  %indvars.iv.next833.1 = add nuw nsw i64 %indvars.iv832, 2
  %85 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next833.1
  store double 0.000000e+00, ptr %85, align 8, !tbaa !9
  %86 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next833.1
  store double 0.000000e+00, ptr %86, align 8, !tbaa !9
  %indvars.iv.next833.2 = add nuw nsw i64 %indvars.iv832, 3
  %87 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next833.2
  store double 0.000000e+00, ptr %87, align 8, !tbaa !9
  %88 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next833.2
  store double 0.000000e+00, ptr %88, align 8, !tbaa !9
  %indvars.iv.next833.3 = add nuw nsw i64 %indvars.iv832, 4
  %exitcond836.not.3 = icmp eq i64 %indvars.iv.next833.3, %wide.trip.count835
  br i1 %exitcond836.not.3, label %.loopexit, label %.lr.ph691, !llvm.loop !17

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

.lr.ph687:                                        ; preds = %89
  %invariant.gep = getelementptr i8, ptr %5, i64 -16
  %97 = fmul double %91, %93
  %98 = sext i32 %28 to i64
  %99 = sext i32 %25 to i64
  %.pre = load i32, ptr %3, align 4, !tbaa !5
  %100 = zext nneg i32 %96 to i64
  %scevgep915 = getelementptr i8, ptr %12, i64 -8
  %scevgep917 = getelementptr i8, ptr %12, i64 -8
  %scevgep924 = getelementptr i8, ptr %12, i64 -8
  %scevgep926 = getelementptr i8, ptr %12, i64 -8
  %scevgep949 = getelementptr i8, ptr %12, i64 -8
  %scevgep952 = getelementptr i8, ptr %5, i64 -8
  %scevgep981 = getelementptr i8, ptr %12, i64 -8
  %scevgep983 = getelementptr i8, ptr %5, i64 -8
  %scevgep1014 = getelementptr i8, ptr %5, i64 -8
  %scevgep1044 = getelementptr i8, ptr %5, i64 -8
  %101 = add i64 %19, -8
  %102 = add nsw i64 %99, %26
  %103 = shl nsw i64 %102, 3
  %104 = add i64 %103, %18
  %105 = sub i64 %101, %104
  %106 = mul nsw i64 %99, -8
  %invariant.gep1152 = getelementptr i8, ptr %12, i64 8
  %invariant.gep1156 = getelementptr i8, ptr %5, i64 -8
  br label %107

107:                                              ; preds = %.lr.ph687, %._crit_edge672.thread
  %indvar1071 = phi i64 [ 0, %.lr.ph687 ], [ %indvar.next1072, %._crit_edge672.thread ]
  %108 = phi i32 [ %.pre, %.lr.ph687 ], [ %510, %._crit_edge672.thread ]
  %indvars.iv829 = phi i64 [ 1, %.lr.ph687 ], [ %indvars.iv.next830, %._crit_edge672.thread ]
  %109 = mul nsw i64 %indvars.iv829, %98
  %gep675 = getelementptr double, ptr %invariant.gep674, i64 %109
  %110 = sext i32 %108 to i64
  %gep677 = getelementptr double, ptr %12, i64 %110
  call void @dcopy_(ptr noundef nonnull %3, ptr noundef %gep675, ptr noundef nonnull @c__1, ptr noundef %gep677, ptr noundef nonnull @c__1) #5
  %111 = load i32, ptr %3, align 4, !tbaa !5
  %112 = sext i32 %111 to i64
  %gep679 = getelementptr double, ptr %12, i64 %112
  call void @dtpmv_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %gep679, ptr noundef nonnull @c__1) #5
  %113 = mul nsw i64 %indvars.iv829, %99
  %gep681 = getelementptr double, ptr %invariant.gep680, i64 %113
  %114 = load i32, ptr %3, align 4, !tbaa !5
  %115 = sext i32 %114 to i64
  %gep683 = getelementptr double, ptr %12, i64 %115
  call void @daxpy_(ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %gep681, ptr noundef nonnull @c__1, ptr noundef %gep683, ptr noundef nonnull @c__1) #5
  %116 = load i32, ptr %3, align 4, !tbaa !5
  %.not519569 = icmp slt i32 %116, 1
  br i1 %.not519569, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %107
  %117 = mul i64 %106, %indvar1071
  %118 = add i64 %105, %117
  %119 = add nuw i32 %116, 1
  %wide.trip.count = zext i32 %119 to i64
  %invariant.gep855 = getelementptr double, ptr %27, i64 %113
  %120 = zext nneg i32 %116 to i64
  %min.iters.check1075 = icmp ult i32 %116, 4
  %diff.check = icmp ult i64 %118, 32
  %or.cond1105 = select i1 %min.iters.check1075, i1 true, i1 %diff.check
  br i1 %or.cond1105, label %.lr.ph.preheader1119, label %vector.ph1076

vector.ph1076:                                    ; preds = %.lr.ph.preheader
  %n.vec1078 = and i64 %120, 2147483644
  %ind.end1079 = or disjoint i64 %n.vec1078, 1
  br label %vector.body1081

vector.body1081:                                  ; preds = %vector.body1081, %vector.ph1076
  %index1082 = phi i64 [ 0, %vector.ph1076 ], [ %index.next1086, %vector.body1081 ]
  %offset.idx1083 = or disjoint i64 %index1082, 1
  %121 = getelementptr double, ptr %invariant.gep855, i64 %offset.idx1083
  %122 = getelementptr i8, ptr %121, i64 16
  %wide.load1084 = load <2 x double>, ptr %121, align 8, !tbaa !9
  %wide.load1085 = load <2 x double>, ptr %122, align 8, !tbaa !9
  %123 = fcmp oge <2 x double> %wide.load1084, zeroinitializer
  %124 = fcmp oge <2 x double> %wide.load1085, zeroinitializer
  %125 = fneg <2 x double> %wide.load1084
  %126 = fneg <2 x double> %wide.load1085
  %127 = select <2 x i1> %123, <2 x double> %wide.load1084, <2 x double> %125
  %128 = select <2 x i1> %124, <2 x double> %wide.load1085, <2 x double> %126
  %129 = getelementptr double, ptr %12, i64 %index1082
  %130 = getelementptr inbounds i8, ptr %129, i64 16
  store <2 x double> %127, ptr %129, align 8, !tbaa !9
  store <2 x double> %128, ptr %130, align 8, !tbaa !9
  %index.next1086 = add nuw i64 %index1082, 4
  %131 = icmp eq i64 %index.next1086, %n.vec1078
  br i1 %131, label %middle.block1073, label %vector.body1081, !llvm.loop !19

middle.block1073:                                 ; preds = %vector.body1081
  %cmp.n1087 = icmp eq i64 %n.vec1078, %120
  br i1 %cmp.n1087, label %._crit_edge, label %.lr.ph.preheader1119

.lr.ph.preheader1119:                             ; preds = %middle.block1073, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end1079, %middle.block1073 ]
  %132 = zext nneg i32 %116 to i64
  %133 = and i32 %116, 1
  %lcmp.mod.not = icmp eq i32 %133, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader1119
  %gep856.prol = getelementptr double, ptr %invariant.gep855, i64 %indvars.iv.ph
  %134 = load double, ptr %gep856.prol, align 8, !tbaa !9
  %135 = fcmp oge double %134, 0.000000e+00
  %136 = fneg double %134
  %137 = select i1 %135, double %134, double %136
  %138 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.ph
  store double %137, ptr %138, align 8, !tbaa !9
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader1119
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader1119 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %139 = icmp eq i64 %indvars.iv.ph, %132
  br i1 %139, label %._crit_edge, label %.lr.ph.preheader1119.new

.lr.ph.preheader1119.new:                         ; preds = %.lr.ph.prol.loopexit
  %invariant.gep1148 = getelementptr i8, ptr %invariant.gep855, i64 8
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader1119.new
  %indvars.iv = phi i64 [ %indvars.iv.unr, %.lr.ph.preheader1119.new ], [ %indvars.iv.next.1, %.lr.ph ]
  %gep856 = getelementptr double, ptr %invariant.gep855, i64 %indvars.iv
  %140 = load double, ptr %gep856, align 8, !tbaa !9
  %141 = fcmp oge double %140, 0.000000e+00
  %142 = fneg double %140
  %143 = select i1 %141, double %140, double %142
  %144 = getelementptr inbounds double, ptr %33, i64 %indvars.iv
  store double %143, ptr %144, align 8, !tbaa !9
  %gep1149 = getelementptr double, ptr %invariant.gep1148, i64 %indvars.iv
  %145 = load double, ptr %gep1149, align 8, !tbaa !9
  %146 = fcmp oge double %145, 0.000000e+00
  %147 = fneg double %145
  %148 = select i1 %146, double %145, double %147
  %149 = getelementptr double, ptr %12, i64 %indvars.iv
  store double %148, ptr %149, align 8, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond.not.1, label %._crit_edge, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block1073, %107
  br i1 %.not511, label %365, label %150

150:                                              ; preds = %._crit_edge
  br i1 %.not, label %249, label %151

151:                                              ; preds = %150
  br i1 %.not514, label %.preheader564, label %.preheader566

.preheader566:                                    ; preds = %151
  br i1 %.not519569, label %._crit_edge645.thread, label %.lr.ph575.preheader

.lr.ph575.preheader:                              ; preds = %.preheader566
  %152 = add nuw i32 %116, 1
  %wide.trip.count719 = zext i32 %152 to i64
  %invariant.gep859 = getelementptr double, ptr %30, i64 %109
  br label %.lr.ph575

.preheader564:                                    ; preds = %151
  br i1 %.not519569, label %._crit_edge645.thread, label %.lr.ph586.preheader

.lr.ph586.preheader:                              ; preds = %.preheader564
  %153 = add nuw i32 %116, 1
  %wide.trip.count729 = zext i32 %153 to i64
  %invariant.gep862 = getelementptr double, ptr %30, i64 %109
  br label %.lr.ph586

.lr.ph575:                                        ; preds = %.lr.ph575.preheader, %.loopexit1104
  %indvar1041 = phi i64 [ 0, %.lr.ph575.preheader ], [ %indvar.next1042, %.loopexit1104 ]
  %indvars.iv714 = phi i64 [ 1, %.lr.ph575.preheader ], [ %indvars.iv.next715, %.loopexit1104 ]
  %indvars.iv712 = phi i64 [ 2, %.lr.ph575.preheader ], [ %indvars.iv.next713, %.loopexit1104 ]
  %.0476574 = phi i32 [ 1, %.lr.ph575.preheader ], [ %199, %.loopexit1104 ]
  %gep = getelementptr double, ptr %invariant.gep859, i64 %indvars.iv714
  %154 = load double, ptr %gep, align 8, !tbaa !9
  %155 = fcmp oge double %154, 0.000000e+00
  %156 = fneg double %154
  %157 = select i1 %155, double %154, double %156
  %158 = zext i32 %.0476574 to i64
  %invariant.gep857 = getelementptr double, ptr %invariant.gep, i64 %158
  %min.iters.check1053 = icmp ult i64 %indvars.iv714, 4
  br i1 %min.iters.check1053, label %scalar.ph1052.preheader, label %vector.memcheck1040

vector.memcheck1040:                              ; preds = %.lr.ph575
  %159 = shl nuw nsw i64 %indvar1041, 3
  %scevgep1046 = getelementptr i8, ptr %5, i64 %159
  %160 = zext i32 %.0476574 to i64
  %161 = shl nuw nsw i64 %160, 3
  %scevgep1047 = getelementptr i8, ptr %scevgep1046, i64 %161
  %scevgep1045 = getelementptr i8, ptr %scevgep1044, i64 %161
  %gep1153 = getelementptr i8, ptr %invariant.gep1152, i64 %159
  %bound01048 = icmp ugt ptr %scevgep1047, %12
  %bound11049 = icmp ult ptr %scevgep1045, %gep1153
  %found.conflict1050 = and i1 %bound01048, %bound11049
  br i1 %found.conflict1050, label %scalar.ph1052.preheader, label %vector.ph1054

vector.ph1054:                                    ; preds = %vector.memcheck1040
  %n.vec1056 = and i64 %indvars.iv714, 9223372036854775804
  %ind.end1057 = or disjoint i64 %n.vec1056, 1
  %broadcast.splatinsert1066 = insertelement <2 x double> poison, double %157, i64 0
  %broadcast.splat1067 = shufflevector <2 x double> %broadcast.splatinsert1066, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1059

vector.body1059:                                  ; preds = %vector.body1059, %vector.ph1054
  %index1060 = phi i64 [ 0, %vector.ph1054 ], [ %index.next1068, %vector.body1059 ]
  %offset.idx1061 = or disjoint i64 %index1060, 1
  %162 = getelementptr double, ptr %invariant.gep857, i64 %offset.idx1061
  %163 = getelementptr i8, ptr %162, i64 16
  %wide.load1062 = load <2 x double>, ptr %162, align 8, !tbaa !9, !alias.scope !21
  %wide.load1063 = load <2 x double>, ptr %163, align 8, !tbaa !9, !alias.scope !21
  %164 = fcmp oge <2 x double> %wide.load1062, zeroinitializer
  %165 = fcmp oge <2 x double> %wide.load1063, zeroinitializer
  %166 = fneg <2 x double> %wide.load1062
  %167 = fneg <2 x double> %wide.load1063
  %168 = select <2 x i1> %164, <2 x double> %wide.load1062, <2 x double> %166
  %169 = select <2 x i1> %165, <2 x double> %wide.load1063, <2 x double> %167
  %170 = getelementptr double, ptr %12, i64 %index1060
  %171 = getelementptr inbounds i8, ptr %170, i64 16
  %wide.load1064 = load <2 x double>, ptr %170, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %wide.load1065 = load <2 x double>, ptr %171, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %172 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %168, <2 x double> %broadcast.splat1067, <2 x double> %wide.load1064)
  %173 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %169, <2 x double> %broadcast.splat1067, <2 x double> %wide.load1065)
  store <2 x double> %172, ptr %170, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  store <2 x double> %173, ptr %171, align 8, !tbaa !9, !alias.scope !24, !noalias !21
  %index.next1068 = add nuw i64 %index1060, 4
  %174 = icmp eq i64 %index.next1068, %n.vec1056
  br i1 %174, label %middle.block1051, label %vector.body1059, !llvm.loop !26

middle.block1051:                                 ; preds = %vector.body1059
  %cmp.n1069 = icmp eq i64 %indvars.iv714, %n.vec1056
  br i1 %cmp.n1069, label %.loopexit1104, label %scalar.ph1052.preheader

scalar.ph1052.preheader:                          ; preds = %middle.block1051, %vector.memcheck1040, %.lr.ph575
  %indvars.iv705.ph = phi i64 [ 1, %vector.memcheck1040 ], [ 1, %.lr.ph575 ], [ %ind.end1057, %middle.block1051 ]
  %175 = and i64 %indvars.iv712, 1
  %lcmp.mod1128.not.not = icmp eq i64 %175, 0
  br i1 %lcmp.mod1128.not.not, label %scalar.ph1052.prol, label %scalar.ph1052.prol.loopexit

scalar.ph1052.prol:                               ; preds = %scalar.ph1052.preheader
  %gep858.prol = getelementptr double, ptr %invariant.gep857, i64 %indvars.iv705.ph
  %176 = load double, ptr %gep858.prol, align 8, !tbaa !9
  %177 = fcmp oge double %176, 0.000000e+00
  %178 = fneg double %176
  %179 = select i1 %177, double %176, double %178
  %180 = getelementptr inbounds double, ptr %33, i64 %indvars.iv705.ph
  %181 = load double, ptr %180, align 8, !tbaa !9
  %182 = call double @llvm.fmuladd.f64(double %179, double %157, double %181)
  store double %182, ptr %180, align 8, !tbaa !9
  %indvars.iv.next706.prol = add nuw nsw i64 %indvars.iv705.ph, 1
  br label %scalar.ph1052.prol.loopexit

scalar.ph1052.prol.loopexit:                      ; preds = %scalar.ph1052.prol, %scalar.ph1052.preheader
  %indvars.iv705.unr = phi i64 [ %indvars.iv705.ph, %scalar.ph1052.preheader ], [ %indvars.iv.next706.prol, %scalar.ph1052.prol ]
  %183 = icmp eq i64 %indvars.iv714, %indvars.iv705.ph
  br i1 %183, label %.loopexit1104, label %scalar.ph1052.preheader.new

scalar.ph1052.preheader.new:                      ; preds = %scalar.ph1052.prol.loopexit
  %invariant.gep1150 = getelementptr i8, ptr %invariant.gep857, i64 8
  br label %scalar.ph1052

scalar.ph1052:                                    ; preds = %scalar.ph1052, %scalar.ph1052.preheader.new
  %indvars.iv705 = phi i64 [ %indvars.iv705.unr, %scalar.ph1052.preheader.new ], [ %indvars.iv.next706.1, %scalar.ph1052 ]
  %gep858 = getelementptr double, ptr %invariant.gep857, i64 %indvars.iv705
  %184 = load double, ptr %gep858, align 8, !tbaa !9
  %185 = fcmp oge double %184, 0.000000e+00
  %186 = fneg double %184
  %187 = select i1 %185, double %184, double %186
  %188 = getelementptr inbounds double, ptr %33, i64 %indvars.iv705
  %189 = load double, ptr %188, align 8, !tbaa !9
  %190 = call double @llvm.fmuladd.f64(double %187, double %157, double %189)
  store double %190, ptr %188, align 8, !tbaa !9
  %gep1151 = getelementptr double, ptr %invariant.gep1150, i64 %indvars.iv705
  %191 = load double, ptr %gep1151, align 8, !tbaa !9
  %192 = fcmp oge double %191, 0.000000e+00
  %193 = fneg double %191
  %194 = select i1 %192, double %191, double %193
  %195 = getelementptr double, ptr %12, i64 %indvars.iv705
  %196 = load double, ptr %195, align 8, !tbaa !9
  %197 = call double @llvm.fmuladd.f64(double %194, double %157, double %196)
  store double %197, ptr %195, align 8, !tbaa !9
  %indvars.iv.next706.1 = add nuw nsw i64 %indvars.iv705, 2
  %exitcond711.not.1 = icmp eq i64 %indvars.iv.next706.1, %indvars.iv712
  br i1 %exitcond711.not.1, label %.loopexit1104, label %scalar.ph1052, !llvm.loop !27

.loopexit1104:                                    ; preds = %scalar.ph1052.prol.loopexit, %scalar.ph1052, %middle.block1051
  %198 = trunc nuw nsw i64 %indvars.iv714 to i32
  %199 = add nuw nsw i32 %.0476574, %198
  %indvars.iv.next715 = add nuw nsw i64 %indvars.iv714, 1
  %indvars.iv.next713 = add nuw nsw i64 %indvars.iv712, 1
  %exitcond720.not = icmp eq i64 %indvars.iv.next715, %wide.trip.count719
  %indvar.next1042 = add i64 %indvar1041, 1
  br i1 %exitcond720.not, label %.loopexit553, label %.lr.ph575, !llvm.loop !28

.lr.ph586:                                        ; preds = %.lr.ph586.preheader, %._crit_edge582
  %indvar1011 = phi i64 [ 0, %.lr.ph586.preheader ], [ %indvar.next1012, %._crit_edge582 ]
  %indvars.iv726 = phi i64 [ 1, %.lr.ph586.preheader ], [ %indvars.iv.next727, %._crit_edge582 ]
  %.1585 = phi i32 [ 1, %.lr.ph586.preheader ], [ %248, %._crit_edge582 ]
  %200 = shl nuw nsw i64 %indvar1011, 3
  %scevgep1013 = getelementptr i8, ptr %12, i64 %200
  %201 = zext i32 %.1585 to i64
  %202 = shl nuw nsw i64 %201, 3
  %scevgep1015 = getelementptr i8, ptr %scevgep1014, i64 %202
  %gep1157 = getelementptr i8, ptr %invariant.gep1156, i64 %200
  %scevgep1017 = getelementptr i8, ptr %gep1157, i64 %202
  %gep863 = getelementptr double, ptr %invariant.gep862, i64 %indvars.iv726
  %203 = load double, ptr %gep863, align 8, !tbaa !9
  %204 = fcmp oge double %203, 0.000000e+00
  %205 = fneg double %203
  %206 = select i1 %204, double %203, double %205
  %.not537.not578 = icmp ugt i64 %indvars.iv726, 1
  br i1 %.not537.not578, label %.lr.ph581.preheader, label %._crit_edge582

.lr.ph581.preheader:                              ; preds = %.lr.ph586
  %207 = zext i32 %.1585 to i64
  %invariant.gep860 = getelementptr double, ptr %invariant.gep, i64 %207
  %min.iters.check1023 = icmp ult i64 %indvar1011, 4
  br i1 %min.iters.check1023, label %.lr.ph581.preheader1111, label %vector.memcheck1010

vector.memcheck1010:                              ; preds = %.lr.ph581.preheader
  %bound01018 = icmp ugt ptr %scevgep1017, %12
  %bound11019 = icmp ult ptr %scevgep1015, %scevgep1013
  %found.conflict1020 = and i1 %bound01018, %bound11019
  br i1 %found.conflict1020, label %.lr.ph581.preheader1111, label %vector.ph1024

vector.ph1024:                                    ; preds = %vector.memcheck1010
  %n.vec1026 = and i64 %indvar1011, -4
  %ind.end1027 = or disjoint i64 %n.vec1026, 1
  %broadcast.splatinsert1036 = insertelement <2 x double> poison, double %206, i64 0
  %broadcast.splat1037 = shufflevector <2 x double> %broadcast.splatinsert1036, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1029

vector.body1029:                                  ; preds = %vector.body1029, %vector.ph1024
  %index1030 = phi i64 [ 0, %vector.ph1024 ], [ %index.next1038, %vector.body1029 ]
  %offset.idx1031 = or disjoint i64 %index1030, 1
  %208 = getelementptr double, ptr %invariant.gep860, i64 %offset.idx1031
  %209 = getelementptr i8, ptr %208, i64 16
  %wide.load1032 = load <2 x double>, ptr %208, align 8, !tbaa !9, !alias.scope !29
  %wide.load1033 = load <2 x double>, ptr %209, align 8, !tbaa !9, !alias.scope !29
  %210 = fcmp oge <2 x double> %wide.load1032, zeroinitializer
  %211 = fcmp oge <2 x double> %wide.load1033, zeroinitializer
  %212 = fneg <2 x double> %wide.load1032
  %213 = fneg <2 x double> %wide.load1033
  %214 = select <2 x i1> %210, <2 x double> %wide.load1032, <2 x double> %212
  %215 = select <2 x i1> %211, <2 x double> %wide.load1033, <2 x double> %213
  %216 = getelementptr double, ptr %12, i64 %index1030
  %217 = getelementptr inbounds i8, ptr %216, i64 16
  %wide.load1034 = load <2 x double>, ptr %216, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %wide.load1035 = load <2 x double>, ptr %217, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %218 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %214, <2 x double> %broadcast.splat1037, <2 x double> %wide.load1034)
  %219 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %215, <2 x double> %broadcast.splat1037, <2 x double> %wide.load1035)
  store <2 x double> %218, ptr %216, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  store <2 x double> %219, ptr %217, align 8, !tbaa !9, !alias.scope !32, !noalias !29
  %index.next1038 = add nuw i64 %index1030, 4
  %220 = icmp eq i64 %index.next1038, %n.vec1026
  br i1 %220, label %middle.block1021, label %vector.body1029, !llvm.loop !34

middle.block1021:                                 ; preds = %vector.body1029
  %cmp.n1039 = icmp eq i64 %indvar1011, %n.vec1026
  br i1 %cmp.n1039, label %._crit_edge582, label %.lr.ph581.preheader1111

.lr.ph581.preheader1111:                          ; preds = %middle.block1021, %vector.memcheck1010, %.lr.ph581.preheader
  %indvars.iv721.ph = phi i64 [ 1, %vector.memcheck1010 ], [ 1, %.lr.ph581.preheader ], [ %ind.end1027, %middle.block1021 ]
  %221 = and i64 %indvars.iv726, 1
  %lcmp.mod1130.not.not = icmp eq i64 %221, 0
  br i1 %lcmp.mod1130.not.not, label %.lr.ph581.prol, label %.lr.ph581.prol.loopexit

.lr.ph581.prol:                                   ; preds = %.lr.ph581.preheader1111
  %gep861.prol = getelementptr double, ptr %invariant.gep860, i64 %indvars.iv721.ph
  %222 = load double, ptr %gep861.prol, align 8, !tbaa !9
  %223 = fcmp oge double %222, 0.000000e+00
  %224 = fneg double %222
  %225 = select i1 %223, double %222, double %224
  %226 = getelementptr inbounds double, ptr %33, i64 %indvars.iv721.ph
  %227 = load double, ptr %226, align 8, !tbaa !9
  %228 = call double @llvm.fmuladd.f64(double %225, double %206, double %227)
  store double %228, ptr %226, align 8, !tbaa !9
  %indvars.iv.next722.prol = add nuw nsw i64 %indvars.iv721.ph, 1
  br label %.lr.ph581.prol.loopexit

.lr.ph581.prol.loopexit:                          ; preds = %.lr.ph581.prol, %.lr.ph581.preheader1111
  %indvars.iv721.unr = phi i64 [ %indvars.iv721.ph, %.lr.ph581.preheader1111 ], [ %indvars.iv.next722.prol, %.lr.ph581.prol ]
  %229 = icmp eq i64 %indvar1011, %indvars.iv721.ph
  br i1 %229, label %._crit_edge582, label %.lr.ph581.preheader1111.new

.lr.ph581.preheader1111.new:                      ; preds = %.lr.ph581.prol.loopexit
  %invariant.gep1154 = getelementptr i8, ptr %invariant.gep860, i64 8
  br label %.lr.ph581

.lr.ph581:                                        ; preds = %.lr.ph581, %.lr.ph581.preheader1111.new
  %indvars.iv721 = phi i64 [ %indvars.iv721.unr, %.lr.ph581.preheader1111.new ], [ %indvars.iv.next722.1, %.lr.ph581 ]
  %gep861 = getelementptr double, ptr %invariant.gep860, i64 %indvars.iv721
  %230 = load double, ptr %gep861, align 8, !tbaa !9
  %231 = fcmp oge double %230, 0.000000e+00
  %232 = fneg double %230
  %233 = select i1 %231, double %230, double %232
  %234 = getelementptr inbounds double, ptr %33, i64 %indvars.iv721
  %235 = load double, ptr %234, align 8, !tbaa !9
  %236 = call double @llvm.fmuladd.f64(double %233, double %206, double %235)
  store double %236, ptr %234, align 8, !tbaa !9
  %gep1155 = getelementptr double, ptr %invariant.gep1154, i64 %indvars.iv721
  %237 = load double, ptr %gep1155, align 8, !tbaa !9
  %238 = fcmp oge double %237, 0.000000e+00
  %239 = fneg double %237
  %240 = select i1 %238, double %237, double %239
  %241 = getelementptr double, ptr %12, i64 %indvars.iv721
  %242 = load double, ptr %241, align 8, !tbaa !9
  %243 = call double @llvm.fmuladd.f64(double %240, double %206, double %242)
  store double %243, ptr %241, align 8, !tbaa !9
  %indvars.iv.next722.1 = add nuw nsw i64 %indvars.iv721, 2
  %exitcond725.not.1 = icmp eq i64 %indvars.iv.next722.1, %indvars.iv726
  br i1 %exitcond725.not.1, label %._crit_edge582, label %.lr.ph581, !llvm.loop !35

._crit_edge582:                                   ; preds = %.lr.ph581.prol.loopexit, %.lr.ph581, %middle.block1021, %.lr.ph586
  %244 = getelementptr inbounds double, ptr %33, i64 %indvars.iv726
  %245 = load double, ptr %244, align 8, !tbaa !9
  %246 = fadd double %206, %245
  store double %246, ptr %244, align 8, !tbaa !9
  %247 = trunc i64 %indvars.iv726 to i32
  %248 = add i32 %.1585, %247
  %indvars.iv.next727 = add nuw nsw i64 %indvars.iv726, 1
  %exitcond730.not = icmp eq i64 %indvars.iv.next727, %wide.trip.count729
  %indvar.next1012 = add i64 %indvar1011, 1
  br i1 %exitcond730.not, label %.loopexit553, label %.lr.ph586, !llvm.loop !36

249:                                              ; preds = %150
  br i1 %.not514, label %.preheader560, label %.preheader562

.preheader562:                                    ; preds = %249
  br i1 %.not519569, label %._crit_edge645.thread, label %.lr.ph592

.lr.ph592:                                        ; preds = %.preheader562
  %250 = add nuw i32 %116, 1
  %wide.trip.count740 = zext i32 %250 to i64
  %invariant.gep864 = getelementptr double, ptr %30, i64 %109
  %251 = add nsw i64 %wide.trip.count740, -2
  %252 = shl nuw nsw i64 %wide.trip.count740, 3
  %scevgep982 = getelementptr i8, ptr %scevgep981, i64 %252
  %253 = add nsw i64 %252, -16
  %254 = zext nneg i32 %116 to i64
  br label %258

.preheader560:                                    ; preds = %249
  br i1 %.not519569, label %._crit_edge645.thread, label %.lr.ph602

.lr.ph602:                                        ; preds = %.preheader560
  %255 = add nuw i32 %116, 1
  %256 = zext nneg i32 %116 to i64
  %wide.trip.count752 = zext i32 %255 to i64
  %invariant.gep866 = getelementptr double, ptr %30, i64 %109
  %257 = add nsw i32 %116, -2
  br label %308

258:                                              ; preds = %.lr.ph592, %.loopexit1103
  %indvar977 = phi i64 [ 0, %.lr.ph592 ], [ %indvar.next978, %.loopexit1103 ]
  %indvars.iv731 = phi i64 [ 1, %.lr.ph592 ], [ %indvars.iv.next732, %.loopexit1103 ]
  %.2485.neg591 = phi i32 [ -1, %.lr.ph592 ], [ %307, %.loopexit1103 ]
  %.2590 = phi i32 [ 1, %.lr.ph592 ], [ %305, %.loopexit1103 ]
  %259 = sub i64 %254, %indvar977
  %260 = shl nuw nsw i64 %indvar977, 3
  %scevgep980 = getelementptr i8, ptr %12, i64 %260
  %261 = sext i32 %.2590 to i64
  %262 = shl nsw i64 %261, 3
  %scevgep984 = getelementptr i8, ptr %scevgep983, i64 %262
  %263 = shl i64 %indvar977, 3
  %264 = sub i64 %253, %263
  %scevgep985 = getelementptr i8, ptr %5, i64 %264
  %scevgep986 = getelementptr i8, ptr %scevgep985, i64 %262
  %gep865 = getelementptr double, ptr %invariant.gep864, i64 %indvars.iv731
  %265 = load double, ptr %gep865, 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 = add i32 %.2590, %.2485.neg591
  %min.iters.check992 = icmp ult i64 %259, 4
  br i1 %min.iters.check992, label %scalar.ph991.preheader, label %vector.scevcheck976

vector.scevcheck976:                              ; preds = %258
  %270 = sub i64 %251, %indvar977
  %271 = trunc i64 %270 to i32
  %272 = add i32 %.2590, %271
  %273 = icmp slt i32 %272, %.2590
  %274 = icmp ugt i64 %270, 4294967295
  %275 = or i1 %273, %274
  br i1 %275, label %scalar.ph991.preheader, label %vector.memcheck979

vector.memcheck979:                               ; preds = %vector.scevcheck976
  %bound0987 = icmp ult ptr %scevgep980, %scevgep986
  %bound1988 = icmp ult ptr %scevgep984, %scevgep982
  %found.conflict989 = and i1 %bound0987, %bound1988
  br i1 %found.conflict989, label %scalar.ph991.preheader, label %vector.ph993

vector.ph993:                                     ; preds = %vector.memcheck979
  %n.vec995 = and i64 %259, -4
  %ind.end996 = add i64 %indvars.iv731, %n.vec995
  %broadcast.splatinsert1006 = insertelement <2 x double> poison, double %268, i64 0
  %broadcast.splat1007 = shufflevector <2 x double> %broadcast.splatinsert1006, <2 x double> poison, <2 x i32> zeroinitializer
  %276 = getelementptr double, ptr %33, i64 %indvars.iv731
  br label %vector.body998

vector.body998:                                   ; preds = %vector.body998, %vector.ph993
  %index999 = phi i64 [ 0, %vector.ph993 ], [ %index.next1008, %vector.body998 ]
  %offset.idx1001 = add i64 %indvars.iv731, %index999
  %277 = trunc i64 %offset.idx1001 to i32
  %278 = add i32 %269, %277
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds double, ptr %24, i64 %279
  %281 = getelementptr inbounds i8, ptr %280, i64 16
  %wide.load1002 = load <2 x double>, ptr %280, align 8, !tbaa !9, !alias.scope !37
  %wide.load1003 = load <2 x double>, ptr %281, align 8, !tbaa !9, !alias.scope !37
  %282 = fcmp oge <2 x double> %wide.load1002, zeroinitializer
  %283 = fcmp oge <2 x double> %wide.load1003, zeroinitializer
  %284 = fneg <2 x double> %wide.load1002
  %285 = fneg <2 x double> %wide.load1003
  %286 = select <2 x i1> %282, <2 x double> %wide.load1002, <2 x double> %284
  %287 = select <2 x i1> %283, <2 x double> %wide.load1003, <2 x double> %285
  %288 = getelementptr double, ptr %276, i64 %index999
  %289 = getelementptr inbounds i8, ptr %288, i64 16
  %wide.load1004 = load <2 x double>, ptr %288, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %wide.load1005 = load <2 x double>, ptr %289, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %290 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %286, <2 x double> %broadcast.splat1007, <2 x double> %wide.load1004)
  %291 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %287, <2 x double> %broadcast.splat1007, <2 x double> %wide.load1005)
  store <2 x double> %290, ptr %288, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  store <2 x double> %291, ptr %289, align 8, !tbaa !9, !alias.scope !40, !noalias !37
  %index.next1008 = add nuw i64 %index999, 4
  %292 = icmp eq i64 %index.next1008, %n.vec995
  br i1 %292, label %middle.block990, label %vector.body998, !llvm.loop !42

middle.block990:                                  ; preds = %vector.body998
  %cmp.n1009 = icmp eq i64 %259, %n.vec995
  br i1 %cmp.n1009, label %.loopexit1103, label %scalar.ph991.preheader

scalar.ph991.preheader:                           ; preds = %middle.block990, %vector.memcheck979, %vector.scevcheck976, %258
  %indvars.iv733.ph = phi i64 [ %indvars.iv731, %vector.memcheck979 ], [ %indvars.iv731, %vector.scevcheck976 ], [ %indvars.iv731, %258 ], [ %ind.end996, %middle.block990 ]
  br label %scalar.ph991

scalar.ph991:                                     ; preds = %scalar.ph991.preheader, %scalar.ph991
  %indvars.iv733 = phi i64 [ %indvars.iv.next734, %scalar.ph991 ], [ %indvars.iv733.ph, %scalar.ph991.preheader ]
  %293 = trunc nuw nsw i64 %indvars.iv733 to i32
  %294 = add i32 %269, %293
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds double, ptr %24, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !9
  %298 = fcmp oge double %297, 0.000000e+00
  %299 = fneg double %297
  %300 = select i1 %298, double %297, double %299
  %301 = getelementptr inbounds double, ptr %33, i64 %indvars.iv733
  %302 = load double, ptr %301, align 8, !tbaa !9
  %303 = call double @llvm.fmuladd.f64(double %300, double %268, double %302)
  store double %303, ptr %301, align 8, !tbaa !9
  %indvars.iv.next734 = add nuw nsw i64 %indvars.iv733, 1
  %exitcond737.not = icmp eq i64 %indvars.iv.next734, %wide.trip.count740
  br i1 %exitcond737.not, label %.loopexit1103, label %scalar.ph991, !llvm.loop !43

.loopexit1103:                                    ; preds = %scalar.ph991, %middle.block990
  %304 = add i32 %250, %.2485.neg591
  %305 = add i32 %304, %.2590
  %indvars.iv.next732 = add nuw nsw i64 %indvars.iv731, 1
  %306 = trunc i64 %indvars.iv731 to i32
  %307 = xor i32 %306, -1
  %exitcond741.not = icmp eq i64 %indvars.iv.next732, %wide.trip.count740
  %indvar.next978 = add i64 %indvar977, 1
  br i1 %exitcond741.not, label %.loopexit553, label %258, !llvm.loop !44

308:                                              ; preds = %.lr.ph602, %._crit_edge597
  %scev.check.iv = phi i32 [ 2, %.lr.ph602 ], [ %scev.check.iv.next, %._crit_edge597 ]
  %indvar = phi i32 [ 0, %.lr.ph602 ], [ %indvar.next, %._crit_edge597 ]
  %indvars.iv748 = phi i64 [ 1, %.lr.ph602 ], [ %indvars.iv.next749, %._crit_edge597 ]
  %indvars.iv742 = phi i32 [ 2, %.lr.ph602 ], [ %indvars.iv.next743, %._crit_edge597 ]
  %.3486.neg601 = phi i32 [ -1, %.lr.ph602 ], [ %364, %._crit_edge597 ]
  %.3600 = phi i32 [ 1, %.lr.ph602 ], [ %362, %._crit_edge597 ]
  %309 = sub i32 %257, %indvar
  %310 = zext i32 %309 to i64
  %311 = add nuw nsw i64 %310, 1
  %312 = sext i32 %indvars.iv742 to i64
  %313 = shl nsw i64 %312, 3
  %scevgep950 = getelementptr i8, ptr %scevgep949, i64 %313
  %314 = sub i32 %257, %indvar
  %315 = zext i32 %314 to i64
  %316 = shl nuw nsw i64 %315, 3
  %317 = getelementptr i8, ptr %12, i64 %313
  %scevgep951 = getelementptr i8, ptr %317, i64 %316
  %318 = sext i32 %scev.check.iv to i64
  %319 = shl nsw i64 %318, 3
  %scevgep953 = getelementptr i8, ptr %scevgep952, i64 %319
  %320 = getelementptr i8, ptr %5, i64 %319
  %scevgep954 = getelementptr i8, ptr %320, i64 %316
  %321 = sub i32 %116, %indvar
  %gep867 = getelementptr double, ptr %invariant.gep866, i64 %indvars.iv748
  %322 = load double, ptr %gep867, align 8, !tbaa !9
  %323 = fcmp oge double %322, 0.000000e+00
  %324 = fneg double %322
  %325 = select i1 %323, double %322, double %324
  %indvars.iv.next749 = add nuw nsw i64 %indvars.iv748, 1
  %.not532593.not = icmp ult i64 %indvars.iv748, %256
  br i1 %.not532593.not, label %.lr.ph596, label %._crit_edge597

.lr.ph596:                                        ; preds = %308
  %326 = sub i32 %257, %indvar
  %327 = sext i32 %indvars.iv742 to i64
  %328 = add i32 %.3600, %.3486.neg601
  %min.iters.check960 = icmp ult i32 %309, 3
  %329 = add i32 %scev.check.iv, %326
  %330 = icmp slt i32 %329, %scev.check.iv
  %or.cond1107 = select i1 %min.iters.check960, i1 true, i1 %330
  br i1 %or.cond1107, label %scalar.ph959.preheader, label %vector.memcheck948

vector.memcheck948:                               ; preds = %.lr.ph596
  %bound0955 = icmp ult ptr %scevgep950, %scevgep954
  %bound1956 = icmp ult ptr %scevgep953, %scevgep951
  %found.conflict957 = and i1 %bound0955, %bound1956
  br i1 %found.conflict957, label %scalar.ph959.preheader, label %vector.ph961

vector.ph961:                                     ; preds = %vector.memcheck948
  %n.vec963 = and i64 %311, 8589934588
  %ind.end964 = add nsw i64 %n.vec963, %327
  %broadcast.splatinsert = insertelement <2 x double> poison, double %325, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %invariant.gep1158 = getelementptr double, ptr %33, i64 %327
  br label %vector.body966

vector.body966:                                   ; preds = %vector.body966, %vector.ph961
  %index967 = phi i64 [ 0, %vector.ph961 ], [ %index.next974, %vector.body966 ]
  %331 = trunc i64 %index967 to i32
  %332 = add i32 %indvars.iv742, %331
  %333 = add i32 %328, %332
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %24, i64 %334
  %336 = getelementptr inbounds i8, ptr %335, i64 16
  %wide.load970 = load <2 x double>, ptr %335, align 8, !tbaa !9, !alias.scope !45
  %wide.load971 = load <2 x double>, ptr %336, align 8, !tbaa !9, !alias.scope !45
  %337 = fcmp oge <2 x double> %wide.load970, zeroinitializer
  %338 = fcmp oge <2 x double> %wide.load971, zeroinitializer
  %339 = fneg <2 x double> %wide.load970
  %340 = fneg <2 x double> %wide.load971
  %341 = select <2 x i1> %337, <2 x double> %wide.load970, <2 x double> %339
  %342 = select <2 x i1> %338, <2 x double> %wide.load971, <2 x double> %340
  %gep1159 = getelementptr double, ptr %invariant.gep1158, i64 %index967
  %343 = getelementptr inbounds i8, ptr %gep1159, i64 16
  %wide.load972 = load <2 x double>, ptr %gep1159, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %wide.load973 = load <2 x double>, ptr %343, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %344 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %341, <2 x double> %broadcast.splat, <2 x double> %wide.load972)
  %345 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %342, <2 x double> %broadcast.splat, <2 x double> %wide.load973)
  store <2 x double> %344, ptr %gep1159, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  store <2 x double> %345, ptr %343, align 8, !tbaa !9, !alias.scope !48, !noalias !45
  %index.next974 = add nuw i64 %index967, 4
  %346 = icmp eq i64 %index.next974, %n.vec963
  br i1 %346, label %middle.block958, label %vector.body966, !llvm.loop !50

middle.block958:                                  ; preds = %vector.body966
  %cmp.n975 = icmp eq i64 %311, %n.vec963
  br i1 %cmp.n975, label %._crit_edge597, label %scalar.ph959.preheader

scalar.ph959.preheader:                           ; preds = %middle.block958, %vector.memcheck948, %.lr.ph596
  %indvars.iv744.ph = phi i64 [ %327, %vector.memcheck948 ], [ %327, %.lr.ph596 ], [ %ind.end964, %middle.block958 ]
  br label %scalar.ph959

scalar.ph959:                                     ; preds = %scalar.ph959.preheader, %scalar.ph959
  %indvars.iv744 = phi i64 [ %indvars.iv.next745, %scalar.ph959 ], [ %indvars.iv744.ph, %scalar.ph959.preheader ]
  %347 = trunc nsw i64 %indvars.iv744 to i32
  %348 = add i32 %328, %347
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds double, ptr %24, i64 %349
  %351 = load double, ptr %350, align 8, !tbaa !9
  %352 = fcmp oge double %351, 0.000000e+00
  %353 = fneg double %351
  %354 = select i1 %352, double %351, double %353
  %355 = getelementptr inbounds double, ptr %33, i64 %indvars.iv744
  %356 = load double, ptr %355, align 8, !tbaa !9
  %357 = call double @llvm.fmuladd.f64(double %354, double %325, double %356)
  store double %357, ptr %355, align 8, !tbaa !9
  %indvars.iv.next745 = add nsw i64 %indvars.iv744, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next745 to i32
  %exitcond747.not = icmp eq i32 %255, %lftr.wideiv
  br i1 %exitcond747.not, label %._crit_edge597, label %scalar.ph959, !llvm.loop !51

._crit_edge597:                                   ; preds = %scalar.ph959, %middle.block958, %308
  %358 = getelementptr inbounds double, ptr %33, i64 %indvars.iv748
  %359 = load double, ptr %358, align 8, !tbaa !9
  %360 = fadd double %325, %359
  store double %360, ptr %358, align 8, !tbaa !9
  %361 = add i32 %255, %.3486.neg601
  %362 = add i32 %361, %.3600
  %indvars.iv.next743 = add nuw i32 %indvars.iv742, 1
  %363 = trunc i64 %indvars.iv748 to i32
  %364 = xor i32 %363, -1
  %exitcond753.not = icmp eq i64 %indvars.iv.next749, %wide.trip.count752
  %indvar.next = add i32 %indvar, 1
  %scev.check.iv.next = add i32 %scev.check.iv, %321
  br i1 %exitcond753.not, label %.loopexit553, label %308, !llvm.loop !52

365:                                              ; preds = %._crit_edge
  br i1 %.not, label %405, label %366

366:                                              ; preds = %365
  br i1 %.not514, label %.preheader556, label %.preheader558

.preheader558:                                    ; preds = %366
  br i1 %.not519569, label %._crit_edge645.thread, label %.preheader551.preheader

.preheader551.preheader:                          ; preds = %.preheader558
  %367 = add nuw i32 %116, 1
  %wide.trip.count768 = zext i32 %367 to i64
  %invariant.gep870 = getelementptr double, ptr %30, i64 %109
  br label %.preheader551

.preheader556:                                    ; preds = %366
  br i1 %.not519569, label %._crit_edge645.thread, label %.lr.ph621.preheader

.lr.ph621.preheader:                              ; preds = %.preheader556
  %368 = add nuw i32 %116, 1
  %wide.trip.count778 = zext i32 %368 to i64
  %invariant.gep876 = getelementptr double, ptr %30, i64 %109
  %invariant.gep874 = getelementptr double, ptr %30, i64 %109
  br label %.lr.ph621

.preheader551:                                    ; preds = %.preheader551.preheader, %380
  %indvars.iv763 = phi i64 [ 1, %.preheader551.preheader ], [ %indvars.iv.next764, %380 ]
  %indvars.iv761 = phi i64 [ 2, %.preheader551.preheader ], [ %indvars.iv.next762, %380 ]
  %.4609 = phi i32 [ 1, %.preheader551.preheader ], [ %385, %380 ]
  %369 = sext i32 %.4609 to i64
  %invariant.gep868 = getelementptr double, ptr %invariant.gep, i64 %369
  br label %370

370:                                              ; preds = %.preheader551, %370
  %indvars.iv754 = phi i64 [ 1, %.preheader551 ], [ %indvars.iv.next755, %370 ]
  %.0477606 = phi double [ 0.000000e+00, %.preheader551 ], [ %379, %370 ]
  %gep869 = getelementptr double, ptr %invariant.gep868, i64 %indvars.iv754
  %371 = load double, ptr %gep869, align 8, !tbaa !9
  %372 = fcmp oge double %371, 0.000000e+00
  %373 = fneg double %371
  %374 = select i1 %372, double %371, double %373
  %gep871 = getelementptr double, ptr %invariant.gep870, i64 %indvars.iv754
  %375 = load double, ptr %gep871, align 8, !tbaa !9
  %376 = fcmp oge double %375, 0.000000e+00
  %377 = fneg double %375
  %378 = select i1 %376, double %375, double %377
  %379 = call double @llvm.fmuladd.f64(double %374, double %378, double %.0477606)
  %indvars.iv.next755 = add nuw nsw i64 %indvars.iv754, 1
  %exitcond760.not = icmp eq i64 %indvars.iv.next755, %indvars.iv761
  br i1 %exitcond760.not, label %380, label %370, !llvm.loop !53

380:                                              ; preds = %370
  %381 = getelementptr inbounds double, ptr %33, i64 %indvars.iv763
  %382 = load double, ptr %381, align 8, !tbaa !9
  %383 = fadd double %379, %382
  store double %383, ptr %381, align 8, !tbaa !9
  %384 = trunc nuw nsw i64 %indvars.iv763 to i32
  %385 = add nuw nsw i32 %.4609, %384
  %indvars.iv.next764 = add nuw nsw i64 %indvars.iv763, 1
  %indvars.iv.next762 = add nuw nsw i64 %indvars.iv761, 1
  %exitcond769.not = icmp eq i64 %indvars.iv.next764, %wide.trip.count768
  br i1 %exitcond769.not, label %.loopexit553, label %.preheader551, !llvm.loop !54

.lr.ph621:                                        ; preds = %.lr.ph621.preheader, %._crit_edge617
  %indvars.iv775 = phi i64 [ 1, %.lr.ph621.preheader ], [ %indvars.iv.next776, %._crit_edge617 ]
  %.5620 = phi i32 [ 1, %.lr.ph621.preheader ], [ %404, %._crit_edge617 ]
  %gep877 = getelementptr double, ptr %invariant.gep876, i64 %indvars.iv775
  %386 = load double, ptr %gep877, align 8, !tbaa !9
  %387 = fcmp oge double %386, 0.000000e+00
  %388 = fneg double %386
  %389 = select i1 %387, double %386, double %388
  %.not527.not612 = icmp ugt i64 %indvars.iv775, 1
  br i1 %.not527.not612, label %.lr.ph616.preheader, label %._crit_edge617

.lr.ph616.preheader:                              ; preds = %.lr.ph621
  %390 = sext i32 %.5620 to i64
  %invariant.gep872 = getelementptr double, ptr %invariant.gep, i64 %390
  br label %.lr.ph616

.lr.ph616:                                        ; preds = %.lr.ph616.preheader, %.lr.ph616
  %indvars.iv770 = phi i64 [ 1, %.lr.ph616.preheader ], [ %indvars.iv.next771, %.lr.ph616 ]
  %.1478614 = phi double [ %389, %.lr.ph616.preheader ], [ %399, %.lr.ph616 ]
  %gep873 = getelementptr double, ptr %invariant.gep872, i64 %indvars.iv770
  %391 = load double, ptr %gep873, align 8, !tbaa !9
  %392 = fcmp oge double %391, 0.000000e+00
  %393 = fneg double %391
  %394 = select i1 %392, double %391, double %393
  %gep875 = getelementptr double, ptr %invariant.gep874, i64 %indvars.iv770
  %395 = load double, ptr %gep875, align 8, !tbaa !9
  %396 = fcmp oge double %395, 0.000000e+00
  %397 = fneg double %395
  %398 = select i1 %396, double %395, double %397
  %399 = call double @llvm.fmuladd.f64(double %394, double %398, double %.1478614)
  %indvars.iv.next771 = add nuw nsw i64 %indvars.iv770, 1
  %exitcond774.not = icmp eq i64 %indvars.iv.next771, %indvars.iv775
  br i1 %exitcond774.not, label %._crit_edge617, label %.lr.ph616, !llvm.loop !55

._crit_edge617:                                   ; preds = %.lr.ph616, %.lr.ph621
  %.1478.lcssa = phi double [ %389, %.lr.ph621 ], [ %399, %.lr.ph616 ]
  %400 = getelementptr inbounds double, ptr %33, i64 %indvars.iv775
  %401 = load double, ptr %400, align 8, !tbaa !9
  %402 = fadd double %.1478.lcssa, %401
  store double %402, ptr %400, align 8, !tbaa !9
  %403 = trunc nuw nsw i64 %indvars.iv775 to i32
  %404 = add nuw nsw i32 %.5620, %403
  %indvars.iv.next776 = add nuw nsw i64 %indvars.iv775, 1
  %exitcond779.not = icmp eq i64 %indvars.iv.next776, %wide.trip.count778
  br i1 %exitcond779.not, label %.loopexit553, label %.lr.ph621, !llvm.loop !56

405:                                              ; preds = %365
  br i1 %.not514, label %.preheader552, label %.preheader554

.preheader554:                                    ; preds = %405
  br i1 %.not519569, label %._crit_edge645.thread, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %.preheader554
  %406 = add nuw i32 %116, 1
  %wide.trip.count789 = zext i32 %406 to i64
  %invariant.gep878 = getelementptr double, ptr %30, i64 %109
  br label %.preheader

.preheader552:                                    ; preds = %405
  br i1 %.not519569, label %._crit_edge645.thread, label %.lr.ph639

.lr.ph639:                                        ; preds = %.preheader552
  %407 = add nuw i32 %116, 1
  %408 = zext nneg i32 %116 to i64
  %wide.trip.count802 = zext i32 %407 to i64
  %invariant.gep882 = getelementptr double, ptr %30, i64 %109
  %invariant.gep880 = getelementptr double, ptr %30, i64 %109
  br label %431

.preheader:                                       ; preds = %.preheader.lr.ph, %424
  %indvars.iv780 = phi i64 [ 1, %.preheader.lr.ph ], [ %indvars.iv.next781, %424 ]
  %.6489.neg627 = phi i32 [ -1, %.preheader.lr.ph ], [ %.6489.neg, %424 ]
  %.6626 = phi i32 [ 1, %.preheader.lr.ph ], [ %429, %424 ]
  %409 = add i32 %.6626, %.6489.neg627
  br label %410

410:                                              ; preds = %.preheader, %410
  %indvars.iv782 = phi i64 [ %indvars.iv780, %.preheader ], [ %indvars.iv.next783, %410 ]
  %.2479623 = phi double [ 0.000000e+00, %.preheader ], [ %423, %410 ]
  %411 = trunc nuw nsw i64 %indvars.iv782 to i32
  %412 = add i32 %409, %411
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds double, ptr %24, i64 %413
  %415 = load double, ptr %414, align 8, !tbaa !9
  %416 = fcmp oge double %415, 0.000000e+00
  %417 = fneg double %415
  %418 = select i1 %416, double %415, double %417
  %gep879 = getelementptr double, ptr %invariant.gep878, i64 %indvars.iv782
  %419 = load double, ptr %gep879, align 8, !tbaa !9
  %420 = fcmp oge double %419, 0.000000e+00
  %421 = fneg double %419
  %422 = select i1 %420, double %419, double %421
  %423 = call double @llvm.fmuladd.f64(double %418, double %422, double %.2479623)
  %indvars.iv.next783 = add nuw nsw i64 %indvars.iv782, 1
  %exitcond786.not = icmp eq i64 %indvars.iv.next783, %wide.trip.count789
  br i1 %exitcond786.not, label %424, label %410, !llvm.loop !57

424:                                              ; preds = %410
  %425 = getelementptr inbounds double, ptr %33, i64 %indvars.iv780
  %426 = load double, ptr %425, align 8, !tbaa !9
  %427 = fadd double %423, %426
  store double %427, ptr %425, align 8, !tbaa !9
  %428 = add i32 %406, %.6489.neg627
  %429 = add i32 %428, %.6626
  %indvars.iv.next781 = add nuw nsw i64 %indvars.iv780, 1
  %430 = trunc nuw nsw i64 %indvars.iv780 to i32
  %.6489.neg = xor i32 %430, -1
  %exitcond790.not = icmp eq i64 %indvars.iv.next781, %wide.trip.count789
  br i1 %exitcond790.not, label %.loopexit553, label %.preheader, !llvm.loop !58

431:                                              ; preds = %.lr.ph639, %._crit_edge633
  %indvars.iv798 = phi i64 [ 1, %.lr.ph639 ], [ %indvars.iv.next799, %._crit_edge633 ]
  %indvars.iv791 = phi i32 [ 2, %.lr.ph639 ], [ %indvars.iv.next792, %._crit_edge633 ]
  %.7490.neg638 = phi i32 [ -1, %.lr.ph639 ], [ %458, %._crit_edge633 ]
  %.7637 = phi i32 [ 1, %.lr.ph639 ], [ %456, %._crit_edge633 ]
  %gep883 = getelementptr double, ptr %invariant.gep882, i64 %indvars.iv798
  %432 = load double, ptr %gep883, align 8, !tbaa !9
  %433 = fcmp oge double %432, 0.000000e+00
  %434 = fneg double %432
  %435 = select i1 %433, double %432, double %434
  %indvars.iv.next799 = add nuw nsw i64 %indvars.iv798, 1
  %.not522628.not = icmp ult i64 %indvars.iv798, %408
  br i1 %.not522628.not, label %.lr.ph632, label %._crit_edge633

.lr.ph632:                                        ; preds = %431
  %436 = sext i32 %indvars.iv791 to i64
  %437 = add i32 %.7637, %.7490.neg638
  br label %438

438:                                              ; preds = %.lr.ph632, %438
  %indvars.iv793 = phi i64 [ %436, %.lr.ph632 ], [ %indvars.iv.next794, %438 ]
  %.3480630 = phi double [ %435, %.lr.ph632 ], [ %451, %438 ]
  %439 = trunc nsw i64 %indvars.iv793 to i32
  %440 = add i32 %437, %439
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds double, ptr %24, i64 %441
  %443 = load double, ptr %442, align 8, !tbaa !9
  %444 = fcmp oge double %443, 0.000000e+00
  %445 = fneg double %443
  %446 = select i1 %444, double %443, double %445
  %gep881 = getelementptr double, ptr %invariant.gep880, i64 %indvars.iv793
  %447 = load double, ptr %gep881, align 8, !tbaa !9
  %448 = fcmp oge double %447, 0.000000e+00
  %449 = fneg double %447
  %450 = select i1 %448, double %447, double %449
  %451 = call double @llvm.fmuladd.f64(double %446, double %450, double %.3480630)
  %indvars.iv.next794 = add nsw i64 %indvars.iv793, 1
  %lftr.wideiv796 = trunc i64 %indvars.iv.next794 to i32
  %exitcond797.not = icmp eq i32 %407, %lftr.wideiv796
  br i1 %exitcond797.not, label %._crit_edge633, label %438, !llvm.loop !59

._crit_edge633:                                   ; preds = %438, %431
  %.3480.lcssa = phi double [ %435, %431 ], [ %451, %438 ]
  %452 = getelementptr inbounds double, ptr %33, i64 %indvars.iv798
  %453 = load double, ptr %452, align 8, !tbaa !9
  %454 = fadd double %.3480.lcssa, %453
  store double %454, ptr %452, align 8, !tbaa !9
  %455 = add i32 %407, %.7490.neg638
  %456 = add i32 %455, %.7637
  %indvars.iv.next792 = add nuw i32 %indvars.iv791, 1
  %457 = trunc i64 %indvars.iv798 to i32
  %458 = xor i32 %457, -1
  %exitcond803.not = icmp eq i64 %indvars.iv.next799, %wide.trip.count802
  br i1 %exitcond803.not, label %.loopexit553, label %431, !llvm.loop !60

.loopexit553:                                     ; preds = %.loopexit1104, %._crit_edge582, %.loopexit1103, %._crit_edge597, %380, %._crit_edge617, %424, %._crit_edge633
  br i1 %.not519569, label %._crit_edge645.thread, label %.lr.ph644.preheader

.lr.ph644.preheader:                              ; preds = %.loopexit553
  %459 = zext nneg i32 %116 to i64
  %460 = add nuw i32 %116, 1
  %wide.trip.count807 = zext i32 %460 to i64
  %invariant.gep884 = getelementptr inbounds double, ptr %33, i64 %459
  %invariant.gep886 = getelementptr inbounds double, ptr %33, i64 %459
  br label %.lr.ph644

.lr.ph644:                                        ; preds = %.lr.ph644.preheader, %478
  %indvars.iv804 = phi i64 [ 1, %.lr.ph644.preheader ], [ %indvars.iv.next805, %478 ]
  %.4481642 = phi double [ 0.000000e+00, %.lr.ph644.preheader ], [ %480, %478 ]
  %461 = getelementptr inbounds double, ptr %33, i64 %indvars.iv804
  %462 = load double, ptr %461, align 8, !tbaa !9
  %463 = fcmp ogt double %462, %95
  br i1 %463, label %464, label %470

464:                                              ; preds = %.lr.ph644
  %gep887 = getelementptr inbounds double, ptr %invariant.gep886, i64 %indvars.iv804
  %465 = load double, ptr %gep887, align 8, !tbaa !9
  %466 = fcmp oge double %465, 0.000000e+00
  %467 = fneg double %465
  %468 = select i1 %466, double %465, double %467
  %469 = fdiv double %468, %462
  br label %478

470:                                              ; preds = %.lr.ph644
  %gep885 = getelementptr inbounds double, ptr %invariant.gep884, i64 %indvars.iv804
  %471 = load double, ptr %gep885, align 8, !tbaa !9
  %472 = fcmp oge double %471, 0.000000e+00
  %473 = fneg double %471
  %474 = select i1 %472, double %471, double %473
  %475 = fadd double %94, %474
  %476 = fadd double %94, %462
  %477 = fdiv double %475, %476
  br label %478

478:                                              ; preds = %464, %470
  %.sink900 = phi double [ %469, %464 ], [ %477, %470 ]
  %479 = fcmp oge double %.4481642, %.sink900
  %480 = select i1 %479, double %.4481642, double %.sink900
  %indvars.iv.next805 = add nuw nsw i64 %indvars.iv804, 1
  %exitcond808.not = icmp eq i64 %indvars.iv.next805, %wide.trip.count807
  br i1 %exitcond808.not, label %._crit_edge645, label %.lr.ph644, !llvm.loop !61

._crit_edge645.thread:                            ; preds = %.loopexit553, %.preheader566, %.preheader564, %.preheader562, %.preheader560, %.preheader558, %.preheader556, %.preheader554, %.preheader552
  %481 = getelementptr inbounds double, ptr %32, i64 %indvars.iv829
  store double 0.000000e+00, ptr %481, align 8, !tbaa !9
  br label %._crit_edge651

._crit_edge645:                                   ; preds = %478
  %482 = getelementptr inbounds double, ptr %32, i64 %indvars.iv829
  store double %480, ptr %482, align 8, !tbaa !9
  br i1 %.not519569, label %._crit_edge651, label %.lr.ph650.preheader

.lr.ph650.preheader:                              ; preds = %._crit_edge645
  %483 = zext nneg i32 %116 to i64
  %484 = add nuw i32 %116, 1
  %wide.trip.count812 = zext i32 %484 to i64
  %invariant.gep888 = getelementptr inbounds double, ptr %33, i64 %483
  %invariant.gep890 = getelementptr inbounds double, ptr %33, i64 %483
  br label %.lr.ph650

.lr.ph650:                                        ; preds = %.lr.ph650.preheader, %501
  %indvars.iv809 = phi i64 [ 1, %.lr.ph650.preheader ], [ %indvars.iv.next810, %501 ]
  %485 = getelementptr inbounds double, ptr %33, i64 %indvars.iv809
  %486 = load double, ptr %485, align 8, !tbaa !9
  %487 = fcmp ogt double %486, %95
  br i1 %487, label %488, label %494

488:                                              ; preds = %.lr.ph650
  %gep891 = getelementptr inbounds double, ptr %invariant.gep890, i64 %indvars.iv809
  %489 = load double, ptr %gep891, align 8, !tbaa !9
  %490 = fcmp oge double %489, 0.000000e+00
  %491 = fneg double %489
  %492 = select i1 %490, double %489, double %491
  %493 = call double @llvm.fmuladd.f64(double %97, double %486, double %492)
  br label %501

494:                                              ; preds = %.lr.ph650
  %gep889 = getelementptr inbounds double, ptr %invariant.gep888, i64 %indvars.iv809
  %495 = load double, ptr %gep889, 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 = call double @llvm.fmuladd.f64(double %97, double %486, double %498)
  %500 = fadd double %94, %499
  br label %501

501:                                              ; preds = %488, %494
  %storemerge545 = phi double [ %500, %494 ], [ %493, %488 ]
  store double %storemerge545, ptr %485, align 8, !tbaa !9
  %indvars.iv.next810 = add nuw nsw i64 %indvars.iv809, 1
  %exitcond813.not = icmp eq i64 %indvars.iv.next810, %wide.trip.count812
  br i1 %exitcond813.not, label %._crit_edge651, label %.lr.ph650, !llvm.loop !62

._crit_edge651:                                   ; preds = %501, %._crit_edge645.thread, %._crit_edge645
  store i32 0, ptr %21, align 4, !tbaa !5
  %502 = getelementptr inbounds double, ptr %31, i64 %indvars.iv829
  br label %.loopexit550

.loopexit550:                                     ; preds = %.loopexit550.backedge, %._crit_edge651
  %503 = phi i32 [ %116, %._crit_edge651 ], [ %.be, %.loopexit550.backedge ]
  %504 = shl i32 %503, 1
  %505 = or disjoint i32 %504, 1
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds double, ptr %33, i64 %506
  %508 = sext i32 %503 to i64
  %gep662 = getelementptr double, ptr %12, i64 %508
  call void @dlacn2_(ptr noundef nonnull %3, ptr noundef nonnull %507, ptr noundef %gep662, ptr noundef %13, ptr noundef nonnull %502, ptr noundef nonnull %21, ptr noundef nonnull %22) #5
  %509 = load i32, ptr %21, align 4, !tbaa !5
  %510 = load i32, ptr %3, align 4, !tbaa !5
  switch i32 %509, label %551 [
    i32 0, label %590
    i32 1, label %511
  ]

511:                                              ; preds = %.loopexit550
  %512 = sext i32 %510 to i64
  %gep664 = getelementptr double, ptr %12, i64 %512
  call void @dtpsv_(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %gep664, ptr noundef nonnull @c__1) #5
  %513 = load i32, ptr %3, align 4, !tbaa !5
  %.not544652 = icmp slt i32 %513, 1
  br i1 %.not544652, label %.loopexit550.backedge, label %.lr.ph655.preheader

.lr.ph655.preheader:                              ; preds = %511
  %514 = zext nneg i32 %513 to i64
  %515 = add nuw i32 %513, 1
  %wide.trip.count817 = zext i32 %515 to i64
  %invariant.gep892 = getelementptr inbounds double, ptr %33, i64 %514
  %516 = zext nneg i32 %513 to i64
  %min.iters.check933 = icmp ult i32 %513, 6
  br i1 %min.iters.check933, label %.lr.ph655.preheader1110, label %vector.memcheck922

vector.memcheck922:                               ; preds = %.lr.ph655.preheader
  %517 = shl nuw nsw i64 %514, 3
  %scevgep923 = getelementptr i8, ptr %12, i64 %517
  %518 = shl nuw nsw i64 %wide.trip.count817, 3
  %519 = getelementptr i8, ptr %scevgep924, i64 %517
  %scevgep925 = getelementptr i8, ptr %519, i64 %518
  %scevgep927 = getelementptr i8, ptr %scevgep926, i64 %518
  %bound0928 = icmp ult ptr %scevgep923, %scevgep927
  %bound1929 = icmp ugt ptr %scevgep925, %12
  %found.conflict930 = and i1 %bound0928, %bound1929
  br i1 %found.conflict930, label %.lr.ph655.preheader1110, label %vector.ph934

vector.ph934:                                     ; preds = %vector.memcheck922
  %n.vec936 = and i64 %516, 2147483644
  %ind.end937 = or disjoint i64 %n.vec936, 1
  br label %vector.body939

vector.body939:                                   ; preds = %vector.body939, %vector.ph934
  %index940 = phi i64 [ 0, %vector.ph934 ], [ %index.next946, %vector.body939 ]
  %offset.idx941 = or disjoint i64 %index940, 1
  %520 = getelementptr double, ptr %12, i64 %index940
  %521 = getelementptr inbounds i8, ptr %520, i64 16
  %wide.load942 = load <2 x double>, ptr %520, align 8, !tbaa !9, !alias.scope !63
  %wide.load943 = load <2 x double>, ptr %521, align 8, !tbaa !9, !alias.scope !63
  %522 = getelementptr inbounds double, ptr %invariant.gep892, i64 %offset.idx941
  %523 = getelementptr inbounds i8, ptr %522, i64 16
  %wide.load944 = load <2 x double>, ptr %522, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  %wide.load945 = load <2 x double>, ptr %523, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  %524 = fmul <2 x double> %wide.load942, %wide.load944
  %525 = fmul <2 x double> %wide.load943, %wide.load945
  store <2 x double> %524, ptr %522, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  store <2 x double> %525, ptr %523, align 8, !tbaa !9, !alias.scope !66, !noalias !63
  %index.next946 = add nuw i64 %index940, 4
  %526 = icmp eq i64 %index.next946, %n.vec936
  br i1 %526, label %middle.block931, label %vector.body939, !llvm.loop !68

middle.block931:                                  ; preds = %vector.body939
  %cmp.n947 = icmp eq i64 %n.vec936, %516
  br i1 %cmp.n947, label %.loopexit550.backedge, label %.lr.ph655.preheader1110

.loopexit550.backedge:                            ; preds = %.lr.ph655.prol.loopexit, %.lr.ph655, %middle.block931, %511, %._crit_edge660
  %.be = phi i32 [ %513, %511 ], [ %.pre837.pre, %._crit_edge660 ], [ %513, %middle.block931 ], [ %513, %.lr.ph655 ], [ %513, %.lr.ph655.prol.loopexit ]
  br label %.loopexit550

.lr.ph655.preheader1110:                          ; preds = %middle.block931, %vector.memcheck922, %.lr.ph655.preheader
  %indvars.iv814.ph = phi i64 [ 1, %vector.memcheck922 ], [ 1, %.lr.ph655.preheader ], [ %ind.end937, %middle.block931 ]
  %527 = sub nsw i64 %wide.trip.count817, %indvars.iv814.ph
  %528 = zext nneg i32 %513 to i64
  %529 = sub nsw i64 %528, %indvars.iv814.ph
  %xtraiter1131 = and i64 %527, 3
  %lcmp.mod1132.not = icmp eq i64 %xtraiter1131, 0
  br i1 %lcmp.mod1132.not, label %.lr.ph655.prol.loopexit, label %.lr.ph655.prol

.lr.ph655.prol:                                   ; preds = %.lr.ph655.preheader1110, %.lr.ph655.prol
  %indvars.iv814.prol = phi i64 [ %indvars.iv.next815.prol, %.lr.ph655.prol ], [ %indvars.iv814.ph, %.lr.ph655.preheader1110 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph655.prol ], [ 0, %.lr.ph655.preheader1110 ]
  %530 = getelementptr inbounds double, ptr %33, i64 %indvars.iv814.prol
  %531 = load double, ptr %530, align 8, !tbaa !9
  %gep893.prol = getelementptr inbounds double, ptr %invariant.gep892, i64 %indvars.iv814.prol
  %532 = load double, ptr %gep893.prol, align 8, !tbaa !9
  %533 = fmul double %531, %532
  store double %533, ptr %gep893.prol, align 8, !tbaa !9
  %indvars.iv.next815.prol = add nuw nsw i64 %indvars.iv814.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter1131
  br i1 %prol.iter.cmp.not, label %.lr.ph655.prol.loopexit, label %.lr.ph655.prol, !llvm.loop !69

.lr.ph655.prol.loopexit:                          ; preds = %.lr.ph655.prol, %.lr.ph655.preheader1110
  %indvars.iv814.unr = phi i64 [ %indvars.iv814.ph, %.lr.ph655.preheader1110 ], [ %indvars.iv.next815.prol, %.lr.ph655.prol ]
  %534 = icmp ult i64 %529, 3
  br i1 %534, label %.loopexit550.backedge, label %.lr.ph655.preheader1110.new

.lr.ph655.preheader1110.new:                      ; preds = %.lr.ph655.prol.loopexit
  %invariant.gep1160 = getelementptr i8, ptr %invariant.gep892, i64 8
  br label %.lr.ph655

.lr.ph655:                                        ; preds = %.lr.ph655, %.lr.ph655.preheader1110.new
  %indvars.iv814 = phi i64 [ %indvars.iv814.unr, %.lr.ph655.preheader1110.new ], [ %indvars.iv.next815.3, %.lr.ph655 ]
  %535 = getelementptr inbounds double, ptr %33, i64 %indvars.iv814
  %536 = load double, ptr %535, align 8, !tbaa !9
  %gep893 = getelementptr inbounds double, ptr %invariant.gep892, i64 %indvars.iv814
  %537 = load double, ptr %gep893, align 8, !tbaa !9
  %538 = fmul double %536, %537
  store double %538, ptr %gep893, align 8, !tbaa !9
  %539 = getelementptr double, ptr %12, i64 %indvars.iv814
  %540 = load double, ptr %539, align 8, !tbaa !9
  %gep1161 = getelementptr double, ptr %invariant.gep1160, i64 %indvars.iv814
  %541 = load double, ptr %gep1161, align 8, !tbaa !9
  %542 = fmul double %540, %541
  store double %542, ptr %gep1161, align 8, !tbaa !9
  %indvars.iv.next815.1 = add nuw nsw i64 %indvars.iv814, 2
  %543 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next815.1
  %544 = load double, ptr %543, align 8, !tbaa !9
  %gep893.2 = getelementptr inbounds double, ptr %invariant.gep892, i64 %indvars.iv.next815.1
  %545 = load double, ptr %gep893.2, align 8, !tbaa !9
  %546 = fmul double %544, %545
  store double %546, ptr %gep893.2, align 8, !tbaa !9
  %indvars.iv.next815.2 = add nuw nsw i64 %indvars.iv814, 3
  %547 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next815.2
  %548 = load double, ptr %547, align 8, !tbaa !9
  %gep893.3 = getelementptr inbounds double, ptr %invariant.gep892, i64 %indvars.iv.next815.2
  %549 = load double, ptr %gep893.3, align 8, !tbaa !9
  %550 = fmul double %548, %549
  store double %550, ptr %gep893.3, align 8, !tbaa !9
  %indvars.iv.next815.3 = add nuw nsw i64 %indvars.iv814, 4
  %exitcond818.not.3 = icmp eq i64 %indvars.iv.next815.3, %wide.trip.count817
  br i1 %exitcond818.not.3, label %.loopexit550.backedge, label %.lr.ph655, !llvm.loop !70

551:                                              ; preds = %.loopexit550
  %.not543656 = icmp slt i32 %510, 1
  br i1 %.not543656, label %._crit_edge660, label %.lr.ph659.preheader

.lr.ph659.preheader:                              ; preds = %551
  %552 = zext nneg i32 %510 to i64
  %553 = add nuw i32 %510, 1
  %wide.trip.count822 = zext i32 %553 to i64
  %invariant.gep894 = getelementptr inbounds double, ptr %33, i64 %552
  %554 = zext nneg i32 %510 to i64
  %min.iters.check = icmp ult i32 %510, 6
  br i1 %min.iters.check, label %.lr.ph659.preheader1109, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph659.preheader
  %555 = shl nuw nsw i64 %552, 3
  %scevgep = getelementptr i8, ptr %12, i64 %555
  %556 = shl nuw nsw i64 %wide.trip.count822, 3
  %557 = getelementptr i8, ptr %scevgep915, i64 %555
  %scevgep916 = getelementptr i8, ptr %557, i64 %556
  %scevgep918 = getelementptr i8, ptr %scevgep917, i64 %556
  %bound0 = icmp ult ptr %scevgep, %scevgep918
  %bound1 = icmp ugt ptr %scevgep916, %12
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph659.preheader1109, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %558 = getelementptr double, ptr %12, i64 %index
  %559 = getelementptr inbounds i8, ptr %558, i64 16
  %wide.load = load <2 x double>, ptr %558, align 8, !tbaa !9, !alias.scope !71
  %wide.load919 = load <2 x double>, ptr %559, align 8, !tbaa !9, !alias.scope !71
  %560 = getelementptr inbounds double, ptr %invariant.gep894, i64 %offset.idx
  %561 = getelementptr inbounds i8, ptr %560, i64 16
  %wide.load920 = load <2 x double>, ptr %560, align 8, !tbaa !9, !alias.scope !74, !noalias !71
  %wide.load921 = load <2 x double>, ptr %561, align 8, !tbaa !9, !alias.scope !74, !noalias !71
  %562 = fmul <2 x double> %wide.load, %wide.load920
  %563 = fmul <2 x double> %wide.load919, %wide.load921
  store <2 x double> %562, ptr %560, align 8, !tbaa !9, !alias.scope !74, !noalias !71
  store <2 x double> %563, ptr %561, align 8, !tbaa !9, !alias.scope !74, !noalias !71
  %index.next = add nuw i64 %index, 4
  %564 = icmp eq i64 %index.next, %n.vec
  br i1 %564, label %middle.block, label %vector.body, !llvm.loop !76

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %554
  br i1 %cmp.n, label %._crit_edge660, label %.lr.ph659.preheader1109

.lr.ph659.preheader1109:                          ; preds = %middle.block, %vector.memcheck, %.lr.ph659.preheader
  %indvars.iv819.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph659.preheader ], [ %ind.end, %middle.block ]
  %565 = sub nsw i64 %wide.trip.count822, %indvars.iv819.ph
  %566 = zext nneg i32 %510 to i64
  %567 = sub nsw i64 %566, %indvars.iv819.ph
  %xtraiter1133 = and i64 %565, 3
  %lcmp.mod1134.not = icmp eq i64 %xtraiter1133, 0
  br i1 %lcmp.mod1134.not, label %.lr.ph659.prol.loopexit, label %.lr.ph659.prol

.lr.ph659.prol:                                   ; preds = %.lr.ph659.preheader1109, %.lr.ph659.prol
  %indvars.iv819.prol = phi i64 [ %indvars.iv.next820.prol, %.lr.ph659.prol ], [ %indvars.iv819.ph, %.lr.ph659.preheader1109 ]
  %prol.iter1135 = phi i64 [ %prol.iter1135.next, %.lr.ph659.prol ], [ 0, %.lr.ph659.preheader1109 ]
  %568 = getelementptr inbounds double, ptr %33, i64 %indvars.iv819.prol
  %569 = load double, ptr %568, align 8, !tbaa !9
  %gep895.prol = getelementptr inbounds double, ptr %invariant.gep894, i64 %indvars.iv819.prol
  %570 = load double, ptr %gep895.prol, align 8, !tbaa !9
  %571 = fmul double %569, %570
  store double %571, ptr %gep895.prol, align 8, !tbaa !9
  %indvars.iv.next820.prol = add nuw nsw i64 %indvars.iv819.prol, 1
  %prol.iter1135.next = add i64 %prol.iter1135, 1
  %prol.iter1135.cmp.not = icmp eq i64 %prol.iter1135.next, %xtraiter1133
  br i1 %prol.iter1135.cmp.not, label %.lr.ph659.prol.loopexit, label %.lr.ph659.prol, !llvm.loop !77

.lr.ph659.prol.loopexit:                          ; preds = %.lr.ph659.prol, %.lr.ph659.preheader1109
  %indvars.iv819.unr = phi i64 [ %indvars.iv819.ph, %.lr.ph659.preheader1109 ], [ %indvars.iv.next820.prol, %.lr.ph659.prol ]
  %572 = icmp ult i64 %567, 3
  br i1 %572, label %._crit_edge660, label %.lr.ph659.preheader1109.new

.lr.ph659.preheader1109.new:                      ; preds = %.lr.ph659.prol.loopexit
  %invariant.gep1162 = getelementptr i8, ptr %invariant.gep894, i64 8
  br label %.lr.ph659

.lr.ph659:                                        ; preds = %.lr.ph659, %.lr.ph659.preheader1109.new
  %indvars.iv819 = phi i64 [ %indvars.iv819.unr, %.lr.ph659.preheader1109.new ], [ %indvars.iv.next820.3, %.lr.ph659 ]
  %573 = getelementptr inbounds double, ptr %33, i64 %indvars.iv819
  %574 = load double, ptr %573, align 8, !tbaa !9
  %gep895 = getelementptr inbounds double, ptr %invariant.gep894, i64 %indvars.iv819
  %575 = load double, ptr %gep895, align 8, !tbaa !9
  %576 = fmul double %574, %575
  store double %576, ptr %gep895, align 8, !tbaa !9
  %577 = getelementptr double, ptr %12, i64 %indvars.iv819
  %578 = load double, ptr %577, align 8, !tbaa !9
  %gep1163 = getelementptr double, ptr %invariant.gep1162, i64 %indvars.iv819
  %579 = load double, ptr %gep1163, align 8, !tbaa !9
  %580 = fmul double %578, %579
  store double %580, ptr %gep1163, align 8, !tbaa !9
  %indvars.iv.next820.1 = add nuw nsw i64 %indvars.iv819, 2
  %581 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next820.1
  %582 = load double, ptr %581, align 8, !tbaa !9
  %gep895.2 = getelementptr inbounds double, ptr %invariant.gep894, i64 %indvars.iv.next820.1
  %583 = load double, ptr %gep895.2, align 8, !tbaa !9
  %584 = fmul double %582, %583
  store double %584, ptr %gep895.2, align 8, !tbaa !9
  %indvars.iv.next820.2 = add nuw nsw i64 %indvars.iv819, 3
  %585 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next820.2
  %586 = load double, ptr %585, align 8, !tbaa !9
  %gep895.3 = getelementptr inbounds double, ptr %invariant.gep894, i64 %indvars.iv.next820.2
  %587 = load double, ptr %gep895.3, align 8, !tbaa !9
  %588 = fmul double %586, %587
  store double %588, ptr %gep895.3, align 8, !tbaa !9
  %indvars.iv.next820.3 = add nuw nsw i64 %indvars.iv819, 4
  %exitcond823.not.3 = icmp eq i64 %indvars.iv.next820.3, %wide.trip.count822
  br i1 %exitcond823.not.3, label %._crit_edge660, label %.lr.ph659, !llvm.loop !78

._crit_edge660:                                   ; preds = %.lr.ph659.prol.loopexit, %.lr.ph659, %middle.block, %551
  %589 = sext i32 %510 to i64
  %gep666 = getelementptr double, ptr %12, i64 %589
  call void @dtpsv_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %gep666, ptr noundef nonnull @c__1) #5
  %.pre837.pre = load i32, ptr %3, align 4, !tbaa !5
  br label %.loopexit550.backedge

590:                                              ; preds = %.loopexit550
  %.not542667 = icmp slt i32 %510, 1
  br i1 %.not542667, label %._crit_edge672.thread, label %.lr.ph671.preheader

.lr.ph671.preheader:                              ; preds = %590
  %invariant.gep896 = getelementptr double, ptr %30, i64 %109
  %591 = zext nneg i32 %510 to i64
  %xtraiter1136 = and i64 %591, 1
  %592 = icmp eq i32 %510, 1
  br i1 %592, label %._crit_edge672.unr-lcssa, label %.lr.ph671.preheader.new

.lr.ph671.preheader.new:                          ; preds = %.lr.ph671.preheader
  %unroll_iter = and i64 %591, 2147483646
  %invariant.gep1164 = getelementptr i8, ptr %invariant.gep896, i64 8
  br label %.lr.ph671

.lr.ph671:                                        ; preds = %.lr.ph671, %.lr.ph671.preheader.new
  %indvars.iv824 = phi i64 [ 1, %.lr.ph671.preheader.new ], [ %indvars.iv.next825.1, %.lr.ph671 ]
  %.0669 = phi double [ 0.000000e+00, %.lr.ph671.preheader.new ], [ %604, %.lr.ph671 ]
  %niter = phi i64 [ 0, %.lr.ph671.preheader.new ], [ %niter.next.1, %.lr.ph671 ]
  %gep897 = getelementptr double, ptr %invariant.gep896, i64 %indvars.iv824
  %593 = load double, ptr %gep897, align 8, !tbaa !9
  %594 = fcmp oge double %593, 0.000000e+00
  %595 = fneg double %593
  %596 = select i1 %594, double %593, double %595
  %597 = fcmp oge double %.0669, %596
  %598 = select i1 %597, double %.0669, double %596
  %gep1165 = getelementptr double, ptr %invariant.gep1164, i64 %indvars.iv824
  %599 = load double, ptr %gep1165, align 8, !tbaa !9
  %600 = fcmp oge double %599, 0.000000e+00
  %601 = fneg double %599
  %602 = select i1 %600, double %599, double %601
  %603 = fcmp oge double %598, %602
  %604 = select i1 %603, double %598, double %602
  %indvars.iv.next825.1 = add nuw nsw i64 %indvars.iv824, 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_edge672.unr-lcssa, label %.lr.ph671, !llvm.loop !79

._crit_edge672.unr-lcssa:                         ; preds = %.lr.ph671, %.lr.ph671.preheader
  %.lcssa1126.ph = phi double [ poison, %.lr.ph671.preheader ], [ %604, %.lr.ph671 ]
  %indvars.iv824.unr = phi i64 [ 1, %.lr.ph671.preheader ], [ %indvars.iv.next825.1, %.lr.ph671 ]
  %.0669.unr = phi double [ 0.000000e+00, %.lr.ph671.preheader ], [ %604, %.lr.ph671 ]
  %lcmp.mod1137.not = icmp eq i64 %xtraiter1136, 0
  br i1 %lcmp.mod1137.not, label %._crit_edge672, label %.lr.ph671.epil

.lr.ph671.epil:                                   ; preds = %._crit_edge672.unr-lcssa
  %gep897.epil = getelementptr double, ptr %invariant.gep896, i64 %indvars.iv824.unr
  %605 = load double, ptr %gep897.epil, align 8, !tbaa !9
  %606 = fcmp oge double %605, 0.000000e+00
  %607 = fneg double %605
  %608 = select i1 %606, double %605, double %607
  %609 = fcmp oge double %.0669.unr, %608
  %610 = select i1 %609, double %.0669.unr, double %608
  br label %._crit_edge672

._crit_edge672:                                   ; preds = %._crit_edge672.unr-lcssa, %.lr.ph671.epil
  %.lcssa1126 = phi double [ %.lcssa1126.ph, %._crit_edge672.unr-lcssa ], [ %610, %.lr.ph671.epil ]
  %611 = fcmp une double %.lcssa1126, 0.000000e+00
  br i1 %611, label %612, label %._crit_edge672.thread

612:                                              ; preds = %._crit_edge672
  %613 = load double, ptr %502, align 8, !tbaa !9
  %614 = fdiv double %613, %.lcssa1126
  store double %614, ptr %502, align 8, !tbaa !9
  br label %._crit_edge672.thread

._crit_edge672.thread:                            ; preds = %590, %._crit_edge672, %612
  %indvars.iv.next830 = add nuw nsw i64 %indvars.iv829, 1
  %.not518.not = icmp ult i64 %indvars.iv829, %100
  %indvar.next1072 = add i64 %indvar1071, 1
  br i1 %.not518.not, label %107, label %.loopexit, !llvm.loop !80

.loopexit:                                        ; preds = %._crit_edge672.thread, %.lr.ph691.prol.loopexit, %.lr.ph691, %middle.block1090, %65, %89, %66, %.thread
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #5
  ret void
}

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

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

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

declare double @dlamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.unroll.disable"}
!17 = distinct !{!17, !12, !13}
!18 = !{!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}
!63 = !{!64}
!64 = distinct !{!64, !65}
!65 = distinct !{!65, !"LVerDomain"}
!66 = !{!67}
!67 = distinct !{!67, !65}
!68 = distinct !{!68, !12, !13, !14}
!69 = distinct !{!69, !16}
!70 = distinct !{!70, !12, !13}
!71 = !{!72}
!72 = distinct !{!72, !73}
!73 = distinct !{!73, !"LVerDomain"}
!74 = !{!75}
!75 = distinct !{!75, !73}
!76 = distinct !{!76, !12, !13, !14}
!77 = distinct !{!77, !16}
!78 = distinct !{!78, !12, !13}
!79 = distinct !{!79, !12}
!80 = distinct !{!80, !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