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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

142:                                              ; preds = %136
  br label %146

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

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

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

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

157:                                              ; preds = %151
  br label %161

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

231:                                              ; preds = %1327, %214
  %232 = load i64, ptr %43, align 8, !tbaa !9
  %233 = load i64, ptr %36, align 8, !tbaa !9
  %234 = icmp sle i64 %232, %233
  br i1 %234, label %235, label %1330

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

276:                                              ; preds = %303, %235
  %277 = load i64, ptr %42, align 8, !tbaa !9
  %278 = load i64, ptr %37, align 8, !tbaa !9
  %279 = icmp sle i64 %277, %278
  br i1 %279, label %280, label %306

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

291:                                              ; preds = %280
  %292 = load float, ptr %39, align 4, !tbaa !11
  br label %296

293:                                              ; preds = %280
  %294 = load float, ptr %39, align 4, !tbaa !11
  %295 = fneg float %294
  br label %296

296:                                              ; preds = %293, %291
  %297 = phi float [ %292, %291 ], [ %295, %293 ]
  %298 = fpext float %297 to double
  %299 = fptrunc double %298 to float
  %300 = load ptr, ptr %29, align 8, !tbaa !5
  %301 = load i64, ptr %42, align 8, !tbaa !9
  %302 = getelementptr inbounds float, ptr %300, i64 %301
  store float %299, ptr %302, align 4, !tbaa !11
  br label %303

303:                                              ; preds = %296
  %304 = load i64, ptr %42, align 8, !tbaa !9
  %305 = add nsw i64 %304, 1
  store i64 %305, ptr %42, align 8, !tbaa !9
  br label %276, !llvm.loop !16

306:                                              ; preds = %276
  %307 = load i64, ptr %56, align 8, !tbaa !9
  %308 = icmp ne i64 %307, 0
  br i1 %308, label %309, label %629

309:                                              ; preds = %306
  %310 = load i64, ptr %54, align 8, !tbaa !9
  %311 = icmp ne i64 %310, 0
  br i1 %311, label %312, label %463

312:                                              ; preds = %309
  store i64 1, ptr %46, align 8, !tbaa !9
  %313 = load i64, ptr %58, align 8, !tbaa !9
  %314 = icmp ne i64 %313, 0
  br i1 %314, label %315, label %385

315:                                              ; preds = %312
  %316 = load ptr, ptr %20, align 8, !tbaa !5
  %317 = load i64, ptr %316, align 8, !tbaa !9
  store i64 %317, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %381, %315
  %319 = load i64, ptr %44, align 8, !tbaa !9
  %320 = load i64, ptr %37, align 8, !tbaa !9
  %321 = icmp sle i64 %319, %320
  br i1 %321, label %322, label %384

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

333:                                              ; preds = %322
  %334 = load float, ptr %39, align 4, !tbaa !11
  br label %338

335:                                              ; preds = %322
  %336 = load float, ptr %39, align 4, !tbaa !11
  %337 = fneg float %336
  br label %338

338:                                              ; preds = %335, %333
  %339 = phi float [ %334, %333 ], [ %337, %335 ]
  %340 = fpext float %339 to double
  %341 = fptrunc double %340 to float
  store float %341, ptr %47, align 4, !tbaa !11
  %342 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %342, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %343

343:                                              ; preds = %374, %338
  %344 = load i64, ptr %42, align 8, !tbaa !9
  %345 = load i64, ptr %38, align 8, !tbaa !9
  %346 = icmp sle i64 %344, %345
  br i1 %346, label %347, label %377

347:                                              ; preds = %343
  %348 = load ptr, ptr %22, align 8, !tbaa !5
  %349 = load i64, ptr %46, align 8, !tbaa !9
  %350 = load i64, ptr %42, align 8, !tbaa !9
  %351 = add nsw i64 %349, %350
  %352 = sub nsw i64 %351, 1
  %353 = getelementptr inbounds float, ptr %348, i64 %352
  %354 = load float, ptr %353, align 4, !tbaa !11
  store float %354, ptr %39, align 4, !tbaa !11
  %355 = load float, ptr %39, align 4, !tbaa !11
  %356 = fcmp oge float %355, 0.000000e+00
  br i1 %356, label %357, label %359

357:                                              ; preds = %347
  %358 = load float, ptr %39, align 4, !tbaa !11
  br label %362

359:                                              ; preds = %347
  %360 = load float, ptr %39, align 4, !tbaa !11
  %361 = fneg float %360
  br label %362

362:                                              ; preds = %359, %357
  %363 = phi float [ %358, %357 ], [ %361, %359 ]
  %364 = fpext float %363 to double
  %365 = load float, ptr %47, align 4, !tbaa !11
  %366 = fpext float %365 to double
  %367 = load ptr, ptr %29, align 8, !tbaa !5
  %368 = load i64, ptr %42, align 8, !tbaa !9
  %369 = getelementptr inbounds float, ptr %367, i64 %368
  %370 = load float, ptr %369, align 4, !tbaa !11
  %371 = fpext float %370 to double
  %372 = call double @llvm.fmuladd.f64(double %364, double %366, double %371)
  %373 = fptrunc double %372 to float
  store float %373, ptr %369, align 4, !tbaa !11
  br label %374

374:                                              ; preds = %362
  %375 = load i64, ptr %42, align 8, !tbaa !9
  %376 = add nsw i64 %375, 1
  store i64 %376, ptr %42, align 8, !tbaa !9
  br label %343, !llvm.loop !17

377:                                              ; preds = %343
  %378 = load i64, ptr %44, align 8, !tbaa !9
  %379 = load i64, ptr %46, align 8, !tbaa !9
  %380 = add nsw i64 %379, %378
  store i64 %380, ptr %46, align 8, !tbaa !9
  br label %381

381:                                              ; preds = %377
  %382 = load i64, ptr %44, align 8, !tbaa !9
  %383 = add nsw i64 %382, 1
  store i64 %383, ptr %44, align 8, !tbaa !9
  br label %318, !llvm.loop !18

384:                                              ; preds = %318
  br label %462

385:                                              ; preds = %312
  %386 = load ptr, ptr %20, align 8, !tbaa !5
  %387 = load i64, ptr %386, align 8, !tbaa !9
  store i64 %387, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %388

388:                                              ; preds = %458, %385
  %389 = load i64, ptr %44, align 8, !tbaa !9
  %390 = load i64, ptr %37, align 8, !tbaa !9
  %391 = icmp sle i64 %389, %390
  br i1 %391, label %392, label %461

392:                                              ; preds = %388
  %393 = load ptr, ptr %25, align 8, !tbaa !5
  %394 = load i64, ptr %44, align 8, !tbaa !9
  %395 = load i64, ptr %43, align 8, !tbaa !9
  %396 = load i64, ptr %34, align 8, !tbaa !9
  %397 = mul nsw i64 %395, %396
  %398 = add nsw i64 %394, %397
  %399 = getelementptr inbounds float, ptr %393, i64 %398
  %400 = load float, ptr %399, align 4, !tbaa !11
  store float %400, ptr %39, align 4, !tbaa !11
  %401 = load float, ptr %39, align 4, !tbaa !11
  %402 = fcmp oge float %401, 0.000000e+00
  br i1 %402, label %403, label %405

403:                                              ; preds = %392
  %404 = load float, ptr %39, align 4, !tbaa !11
  br label %408

405:                                              ; preds = %392
  %406 = load float, ptr %39, align 4, !tbaa !11
  %407 = fneg float %406
  br label %408

408:                                              ; preds = %405, %403
  %409 = phi float [ %404, %403 ], [ %407, %405 ]
  %410 = fpext float %409 to double
  %411 = fptrunc double %410 to float
  store float %411, ptr %47, align 4, !tbaa !11
  %412 = load i64, ptr %44, align 8, !tbaa !9
  %413 = sub nsw i64 %412, 1
  store i64 %413, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %414

414:                                              ; preds = %445, %408
  %415 = load i64, ptr %42, align 8, !tbaa !9
  %416 = load i64, ptr %38, align 8, !tbaa !9
  %417 = icmp sle i64 %415, %416
  br i1 %417, label %418, label %448

418:                                              ; preds = %414
  %419 = load ptr, ptr %22, align 8, !tbaa !5
  %420 = load i64, ptr %46, align 8, !tbaa !9
  %421 = load i64, ptr %42, align 8, !tbaa !9
  %422 = add nsw i64 %420, %421
  %423 = sub nsw i64 %422, 1
  %424 = getelementptr inbounds float, ptr %419, i64 %423
  %425 = load float, ptr %424, align 4, !tbaa !11
  store float %425, ptr %39, align 4, !tbaa !11
  %426 = load float, ptr %39, align 4, !tbaa !11
  %427 = fcmp oge float %426, 0.000000e+00
  br i1 %427, label %428, label %430

428:                                              ; preds = %418
  %429 = load float, ptr %39, align 4, !tbaa !11
  br label %433

430:                                              ; preds = %418
  %431 = load float, ptr %39, align 4, !tbaa !11
  %432 = fneg float %431
  br label %433

433:                                              ; preds = %430, %428
  %434 = phi float [ %429, %428 ], [ %432, %430 ]
  %435 = fpext float %434 to double
  %436 = load float, ptr %47, align 4, !tbaa !11
  %437 = fpext float %436 to double
  %438 = load ptr, ptr %29, align 8, !tbaa !5
  %439 = load i64, ptr %42, align 8, !tbaa !9
  %440 = getelementptr inbounds float, ptr %438, i64 %439
  %441 = load float, ptr %440, align 4, !tbaa !11
  %442 = fpext float %441 to double
  %443 = call double @llvm.fmuladd.f64(double %435, double %437, double %442)
  %444 = fptrunc double %443 to float
  store float %444, ptr %440, align 4, !tbaa !11
  br label %445

445:                                              ; preds = %433
  %446 = load i64, ptr %42, align 8, !tbaa !9
  %447 = add nsw i64 %446, 1
  store i64 %447, ptr %42, align 8, !tbaa !9
  br label %414, !llvm.loop !19

448:                                              ; preds = %414
  %449 = load float, ptr %47, align 4, !tbaa !11
  %450 = load ptr, ptr %29, align 8, !tbaa !5
  %451 = load i64, ptr %44, align 8, !tbaa !9
  %452 = getelementptr inbounds float, ptr %450, i64 %451
  %453 = load float, ptr %452, align 4, !tbaa !11
  %454 = fadd float %453, %449
  store float %454, ptr %452, align 4, !tbaa !11
  %455 = load i64, ptr %44, align 8, !tbaa !9
  %456 = load i64, ptr %46, align 8, !tbaa !9
  %457 = add nsw i64 %456, %455
  store i64 %457, ptr %46, align 8, !tbaa !9
  br label %458

458:                                              ; preds = %448
  %459 = load i64, ptr %44, align 8, !tbaa !9
  %460 = add nsw i64 %459, 1
  store i64 %460, ptr %44, align 8, !tbaa !9
  br label %388, !llvm.loop !20

461:                                              ; preds = %388
  br label %462

462:                                              ; preds = %461, %384
  br label %628

463:                                              ; preds = %309
  store i64 1, ptr %46, align 8, !tbaa !9
  %464 = load i64, ptr %58, align 8, !tbaa !9
  %465 = icmp ne i64 %464, 0
  br i1 %465, label %466, label %543

466:                                              ; preds = %463
  %467 = load ptr, ptr %20, align 8, !tbaa !5
  %468 = load i64, ptr %467, align 8, !tbaa !9
  store i64 %468, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %469

469:                                              ; preds = %539, %466
  %470 = load i64, ptr %44, align 8, !tbaa !9
  %471 = load i64, ptr %37, align 8, !tbaa !9
  %472 = icmp sle i64 %470, %471
  br i1 %472, label %473, label %542

473:                                              ; preds = %469
  %474 = load ptr, ptr %25, align 8, !tbaa !5
  %475 = load i64, ptr %44, align 8, !tbaa !9
  %476 = load i64, ptr %43, align 8, !tbaa !9
  %477 = load i64, ptr %34, align 8, !tbaa !9
  %478 = mul nsw i64 %476, %477
  %479 = add nsw i64 %475, %478
  %480 = getelementptr inbounds float, ptr %474, i64 %479
  %481 = load float, ptr %480, align 4, !tbaa !11
  store float %481, ptr %39, align 4, !tbaa !11
  %482 = load float, ptr %39, align 4, !tbaa !11
  %483 = fcmp oge float %482, 0.000000e+00
  br i1 %483, label %484, label %486

484:                                              ; preds = %473
  %485 = load float, ptr %39, align 4, !tbaa !11
  br label %489

486:                                              ; preds = %473
  %487 = load float, ptr %39, align 4, !tbaa !11
  %488 = fneg float %487
  br label %489

489:                                              ; preds = %486, %484
  %490 = phi float [ %485, %484 ], [ %488, %486 ]
  %491 = fpext float %490 to double
  %492 = fptrunc double %491 to float
  store float %492, ptr %47, align 4, !tbaa !11
  %493 = load ptr, ptr %20, align 8, !tbaa !5
  %494 = load i64, ptr %493, align 8, !tbaa !9
  store i64 %494, ptr %38, align 8, !tbaa !9
  %495 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %495, ptr %42, align 8, !tbaa !9
  br label %496

496:                                              ; preds = %528, %489
  %497 = load i64, ptr %42, align 8, !tbaa !9
  %498 = load i64, ptr %38, align 8, !tbaa !9
  %499 = icmp sle i64 %497, %498
  br i1 %499, label %500, label %531

500:                                              ; preds = %496
  %501 = load ptr, ptr %22, align 8, !tbaa !5
  %502 = load i64, ptr %46, align 8, !tbaa !9
  %503 = load i64, ptr %42, align 8, !tbaa !9
  %504 = add nsw i64 %502, %503
  %505 = load i64, ptr %44, align 8, !tbaa !9
  %506 = sub nsw i64 %504, %505
  %507 = getelementptr inbounds float, ptr %501, i64 %506
  %508 = load float, ptr %507, align 4, !tbaa !11
  store float %508, ptr %39, align 4, !tbaa !11
  %509 = load float, ptr %39, align 4, !tbaa !11
  %510 = fcmp oge float %509, 0.000000e+00
  br i1 %510, label %511, label %513

511:                                              ; preds = %500
  %512 = load float, ptr %39, align 4, !tbaa !11
  br label %516

513:                                              ; preds = %500
  %514 = load float, ptr %39, align 4, !tbaa !11
  %515 = fneg float %514
  br label %516

516:                                              ; preds = %513, %511
  %517 = phi float [ %512, %511 ], [ %515, %513 ]
  %518 = fpext float %517 to double
  %519 = load float, ptr %47, align 4, !tbaa !11
  %520 = fpext float %519 to double
  %521 = load ptr, ptr %29, align 8, !tbaa !5
  %522 = load i64, ptr %42, align 8, !tbaa !9
  %523 = getelementptr inbounds float, ptr %521, i64 %522
  %524 = load float, ptr %523, align 4, !tbaa !11
  %525 = fpext float %524 to double
  %526 = call double @llvm.fmuladd.f64(double %518, double %520, double %525)
  %527 = fptrunc double %526 to float
  store float %527, ptr %523, align 4, !tbaa !11
  br label %528

528:                                              ; preds = %516
  %529 = load i64, ptr %42, align 8, !tbaa !9
  %530 = add nsw i64 %529, 1
  store i64 %530, ptr %42, align 8, !tbaa !9
  br label %496, !llvm.loop !21

531:                                              ; preds = %496
  %532 = load i64, ptr %46, align 8, !tbaa !9
  %533 = load ptr, ptr %20, align 8, !tbaa !5
  %534 = load i64, ptr %533, align 8, !tbaa !9
  %535 = add nsw i64 %532, %534
  %536 = load i64, ptr %44, align 8, !tbaa !9
  %537 = sub nsw i64 %535, %536
  %538 = add nsw i64 %537, 1
  store i64 %538, ptr %46, align 8, !tbaa !9
  br label %539

539:                                              ; preds = %531
  %540 = load i64, ptr %44, align 8, !tbaa !9
  %541 = add nsw i64 %540, 1
  store i64 %541, ptr %44, align 8, !tbaa !9
  br label %469, !llvm.loop !22

542:                                              ; preds = %469
  br label %627

543:                                              ; preds = %463
  %544 = load ptr, ptr %20, align 8, !tbaa !5
  %545 = load i64, ptr %544, align 8, !tbaa !9
  store i64 %545, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %546

546:                                              ; preds = %623, %543
  %547 = load i64, ptr %44, align 8, !tbaa !9
  %548 = load i64, ptr %37, align 8, !tbaa !9
  %549 = icmp sle i64 %547, %548
  br i1 %549, label %550, label %626

550:                                              ; preds = %546
  %551 = load ptr, ptr %25, align 8, !tbaa !5
  %552 = load i64, ptr %44, align 8, !tbaa !9
  %553 = load i64, ptr %43, align 8, !tbaa !9
  %554 = load i64, ptr %34, align 8, !tbaa !9
  %555 = mul nsw i64 %553, %554
  %556 = add nsw i64 %552, %555
  %557 = getelementptr inbounds float, ptr %551, i64 %556
  %558 = load float, ptr %557, align 4, !tbaa !11
  store float %558, ptr %39, align 4, !tbaa !11
  %559 = load float, ptr %39, align 4, !tbaa !11
  %560 = fcmp oge float %559, 0.000000e+00
  br i1 %560, label %561, label %563

561:                                              ; preds = %550
  %562 = load float, ptr %39, align 4, !tbaa !11
  br label %566

563:                                              ; preds = %550
  %564 = load float, ptr %39, align 4, !tbaa !11
  %565 = fneg float %564
  br label %566

566:                                              ; preds = %563, %561
  %567 = phi float [ %562, %561 ], [ %565, %563 ]
  %568 = fpext float %567 to double
  %569 = fptrunc double %568 to float
  store float %569, ptr %47, align 4, !tbaa !11
  %570 = load ptr, ptr %20, align 8, !tbaa !5
  %571 = load i64, ptr %570, align 8, !tbaa !9
  store i64 %571, ptr %38, align 8, !tbaa !9
  %572 = load i64, ptr %44, align 8, !tbaa !9
  %573 = add nsw i64 %572, 1
  store i64 %573, ptr %42, align 8, !tbaa !9
  br label %574

574:                                              ; preds = %606, %566
  %575 = load i64, ptr %42, align 8, !tbaa !9
  %576 = load i64, ptr %38, align 8, !tbaa !9
  %577 = icmp sle i64 %575, %576
  br i1 %577, label %578, label %609

578:                                              ; preds = %574
  %579 = load ptr, ptr %22, align 8, !tbaa !5
  %580 = load i64, ptr %46, align 8, !tbaa !9
  %581 = load i64, ptr %42, align 8, !tbaa !9
  %582 = add nsw i64 %580, %581
  %583 = load i64, ptr %44, align 8, !tbaa !9
  %584 = sub nsw i64 %582, %583
  %585 = getelementptr inbounds float, ptr %579, i64 %584
  %586 = load float, ptr %585, align 4, !tbaa !11
  store float %586, ptr %39, align 4, !tbaa !11
  %587 = load float, ptr %39, align 4, !tbaa !11
  %588 = fcmp oge float %587, 0.000000e+00
  br i1 %588, label %589, label %591

589:                                              ; preds = %578
  %590 = load float, ptr %39, align 4, !tbaa !11
  br label %594

591:                                              ; preds = %578
  %592 = load float, ptr %39, align 4, !tbaa !11
  %593 = fneg float %592
  br label %594

594:                                              ; preds = %591, %589
  %595 = phi float [ %590, %589 ], [ %593, %591 ]
  %596 = fpext float %595 to double
  %597 = load float, ptr %47, align 4, !tbaa !11
  %598 = fpext float %597 to double
  %599 = load ptr, ptr %29, align 8, !tbaa !5
  %600 = load i64, ptr %42, align 8, !tbaa !9
  %601 = getelementptr inbounds float, ptr %599, i64 %600
  %602 = load float, ptr %601, align 4, !tbaa !11
  %603 = fpext float %602 to double
  %604 = call double @llvm.fmuladd.f64(double %596, double %598, double %603)
  %605 = fptrunc double %604 to float
  store float %605, ptr %601, align 4, !tbaa !11
  br label %606

606:                                              ; preds = %594
  %607 = load i64, ptr %42, align 8, !tbaa !9
  %608 = add nsw i64 %607, 1
  store i64 %608, ptr %42, align 8, !tbaa !9
  br label %574, !llvm.loop !23

609:                                              ; preds = %574
  %610 = load float, ptr %47, align 4, !tbaa !11
  %611 = load ptr, ptr %29, align 8, !tbaa !5
  %612 = load i64, ptr %44, align 8, !tbaa !9
  %613 = getelementptr inbounds float, ptr %611, i64 %612
  %614 = load float, ptr %613, align 4, !tbaa !11
  %615 = fadd float %614, %610
  store float %615, ptr %613, align 4, !tbaa !11
  %616 = load i64, ptr %46, align 8, !tbaa !9
  %617 = load ptr, ptr %20, align 8, !tbaa !5
  %618 = load i64, ptr %617, align 8, !tbaa !9
  %619 = add nsw i64 %616, %618
  %620 = load i64, ptr %44, align 8, !tbaa !9
  %621 = sub nsw i64 %619, %620
  %622 = add nsw i64 %621, 1
  store i64 %622, ptr %46, align 8, !tbaa !9
  br label %623

623:                                              ; preds = %609
  %624 = load i64, ptr %44, align 8, !tbaa !9
  %625 = add nsw i64 %624, 1
  store i64 %625, ptr %44, align 8, !tbaa !9
  br label %546, !llvm.loop !24

626:                                              ; preds = %546
  br label %627

627:                                              ; preds = %626, %542
  br label %628

628:                                              ; preds = %627, %462
  br label %975

629:                                              ; preds = %306
  %630 = load i64, ptr %54, align 8, !tbaa !9
  %631 = icmp ne i64 %630, 0
  br i1 %631, label %632, label %796

632:                                              ; preds = %629
  store i64 1, ptr %46, align 8, !tbaa !9
  %633 = load i64, ptr %58, align 8, !tbaa !9
  %634 = icmp ne i64 %633, 0
  br i1 %634, label %635, label %705

635:                                              ; preds = %632
  %636 = load ptr, ptr %20, align 8, !tbaa !5
  %637 = load i64, ptr %636, align 8, !tbaa !9
  store i64 %637, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %638

638:                                              ; preds = %701, %635
  %639 = load i64, ptr %44, align 8, !tbaa !9
  %640 = load i64, ptr %37, align 8, !tbaa !9
  %641 = icmp sle i64 %639, %640
  br i1 %641, label %642, label %704

642:                                              ; preds = %638
  store float 0.000000e+00, ptr %45, align 4, !tbaa !11
  %643 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %643, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %644

644:                                              ; preds = %688, %642
  %645 = load i64, ptr %42, align 8, !tbaa !9
  %646 = load i64, ptr %38, align 8, !tbaa !9
  %647 = icmp sle i64 %645, %646
  br i1 %647, label %648, label %691

648:                                              ; preds = %644
  %649 = load ptr, ptr %22, align 8, !tbaa !5
  %650 = load i64, ptr %46, align 8, !tbaa !9
  %651 = load i64, ptr %42, align 8, !tbaa !9
  %652 = add nsw i64 %650, %651
  %653 = sub nsw i64 %652, 1
  %654 = getelementptr inbounds float, ptr %649, i64 %653
  %655 = load float, ptr %654, align 4, !tbaa !11
  store float %655, ptr %39, align 4, !tbaa !11
  %656 = load float, ptr %39, align 4, !tbaa !11
  %657 = fcmp oge float %656, 0.000000e+00
  br i1 %657, label %658, label %660

658:                                              ; preds = %648
  %659 = load float, ptr %39, align 4, !tbaa !11
  br label %663

660:                                              ; preds = %648
  %661 = load float, ptr %39, align 4, !tbaa !11
  %662 = fneg float %661
  br label %663

663:                                              ; preds = %660, %658
  %664 = phi float [ %659, %658 ], [ %662, %660 ]
  %665 = fpext float %664 to double
  %666 = load ptr, ptr %25, align 8, !tbaa !5
  %667 = load i64, ptr %42, align 8, !tbaa !9
  %668 = load i64, ptr %43, align 8, !tbaa !9
  %669 = load i64, ptr %34, align 8, !tbaa !9
  %670 = mul nsw i64 %668, %669
  %671 = add nsw i64 %667, %670
  %672 = getelementptr inbounds float, ptr %666, i64 %671
  %673 = load float, ptr %672, align 4, !tbaa !11
  store float %673, ptr %40, align 4, !tbaa !11
  %674 = load float, ptr %40, align 4, !tbaa !11
  %675 = fcmp oge float %674, 0.000000e+00
  br i1 %675, label %676, label %678

676:                                              ; preds = %663
  %677 = load float, ptr %40, align 4, !tbaa !11
  br label %681

678:                                              ; preds = %663
  %679 = load float, ptr %40, align 4, !tbaa !11
  %680 = fneg float %679
  br label %681

681:                                              ; preds = %678, %676
  %682 = phi float [ %677, %676 ], [ %680, %678 ]
  %683 = fpext float %682 to double
  %684 = load float, ptr %45, align 4, !tbaa !11
  %685 = fpext float %684 to double
  %686 = call double @llvm.fmuladd.f64(double %665, double %683, double %685)
  %687 = fptrunc double %686 to float
  store float %687, ptr %45, align 4, !tbaa !11
  br label %688

688:                                              ; preds = %681
  %689 = load i64, ptr %42, align 8, !tbaa !9
  %690 = add nsw i64 %689, 1
  store i64 %690, ptr %42, align 8, !tbaa !9
  br label %644, !llvm.loop !25

691:                                              ; preds = %644
  %692 = load float, ptr %45, align 4, !tbaa !11
  %693 = load ptr, ptr %29, align 8, !tbaa !5
  %694 = load i64, ptr %44, align 8, !tbaa !9
  %695 = getelementptr inbounds float, ptr %693, i64 %694
  %696 = load float, ptr %695, align 4, !tbaa !11
  %697 = fadd float %696, %692
  store float %697, ptr %695, align 4, !tbaa !11
  %698 = load i64, ptr %44, align 8, !tbaa !9
  %699 = load i64, ptr %46, align 8, !tbaa !9
  %700 = add nsw i64 %699, %698
  store i64 %700, ptr %46, align 8, !tbaa !9
  br label %701

701:                                              ; preds = %691
  %702 = load i64, ptr %44, align 8, !tbaa !9
  %703 = add nsw i64 %702, 1
  store i64 %703, ptr %44, align 8, !tbaa !9
  br label %638, !llvm.loop !26

704:                                              ; preds = %638
  br label %795

705:                                              ; preds = %632
  %706 = load ptr, ptr %20, align 8, !tbaa !5
  %707 = load i64, ptr %706, align 8, !tbaa !9
  store i64 %707, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %708

708:                                              ; preds = %791, %705
  %709 = load i64, ptr %44, align 8, !tbaa !9
  %710 = load i64, ptr %37, align 8, !tbaa !9
  %711 = icmp sle i64 %709, %710
  br i1 %711, label %712, label %794

712:                                              ; preds = %708
  %713 = load ptr, ptr %25, align 8, !tbaa !5
  %714 = load i64, ptr %44, align 8, !tbaa !9
  %715 = load i64, ptr %43, align 8, !tbaa !9
  %716 = load i64, ptr %34, align 8, !tbaa !9
  %717 = mul nsw i64 %715, %716
  %718 = add nsw i64 %714, %717
  %719 = getelementptr inbounds float, ptr %713, i64 %718
  %720 = load float, ptr %719, align 4, !tbaa !11
  store float %720, ptr %39, align 4, !tbaa !11
  %721 = load float, ptr %39, align 4, !tbaa !11
  %722 = fcmp oge float %721, 0.000000e+00
  br i1 %722, label %723, label %725

723:                                              ; preds = %712
  %724 = load float, ptr %39, align 4, !tbaa !11
  br label %728

725:                                              ; preds = %712
  %726 = load float, ptr %39, align 4, !tbaa !11
  %727 = fneg float %726
  br label %728

728:                                              ; preds = %725, %723
  %729 = phi float [ %724, %723 ], [ %727, %725 ]
  %730 = fpext float %729 to double
  %731 = fptrunc double %730 to float
  store float %731, ptr %45, align 4, !tbaa !11
  %732 = load i64, ptr %44, align 8, !tbaa !9
  %733 = sub nsw i64 %732, 1
  store i64 %733, ptr %38, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %734

734:                                              ; preds = %778, %728
  %735 = load i64, ptr %42, align 8, !tbaa !9
  %736 = load i64, ptr %38, align 8, !tbaa !9
  %737 = icmp sle i64 %735, %736
  br i1 %737, label %738, label %781

738:                                              ; preds = %734
  %739 = load ptr, ptr %22, align 8, !tbaa !5
  %740 = load i64, ptr %46, align 8, !tbaa !9
  %741 = load i64, ptr %42, align 8, !tbaa !9
  %742 = add nsw i64 %740, %741
  %743 = sub nsw i64 %742, 1
  %744 = getelementptr inbounds float, ptr %739, i64 %743
  %745 = load float, ptr %744, align 4, !tbaa !11
  store float %745, ptr %39, align 4, !tbaa !11
  %746 = load float, ptr %39, align 4, !tbaa !11
  %747 = fcmp oge float %746, 0.000000e+00
  br i1 %747, label %748, label %750

748:                                              ; preds = %738
  %749 = load float, ptr %39, align 4, !tbaa !11
  br label %753

750:                                              ; preds = %738
  %751 = load float, ptr %39, align 4, !tbaa !11
  %752 = fneg float %751
  br label %753

753:                                              ; preds = %750, %748
  %754 = phi float [ %749, %748 ], [ %752, %750 ]
  %755 = fpext float %754 to double
  %756 = load ptr, ptr %25, align 8, !tbaa !5
  %757 = load i64, ptr %42, align 8, !tbaa !9
  %758 = load i64, ptr %43, align 8, !tbaa !9
  %759 = load i64, ptr %34, align 8, !tbaa !9
  %760 = mul nsw i64 %758, %759
  %761 = add nsw i64 %757, %760
  %762 = getelementptr inbounds float, ptr %756, i64 %761
  %763 = load float, ptr %762, align 4, !tbaa !11
  store float %763, ptr %40, align 4, !tbaa !11
  %764 = load float, ptr %40, align 4, !tbaa !11
  %765 = fcmp oge float %764, 0.000000e+00
  br i1 %765, label %766, label %768

766:                                              ; preds = %753
  %767 = load float, ptr %40, align 4, !tbaa !11
  br label %771

768:                                              ; preds = %753
  %769 = load float, ptr %40, align 4, !tbaa !11
  %770 = fneg float %769
  br label %771

771:                                              ; preds = %768, %766
  %772 = phi float [ %767, %766 ], [ %770, %768 ]
  %773 = fpext float %772 to double
  %774 = load float, ptr %45, align 4, !tbaa !11
  %775 = fpext float %774 to double
  %776 = call double @llvm.fmuladd.f64(double %755, double %773, double %775)
  %777 = fptrunc double %776 to float
  store float %777, ptr %45, align 4, !tbaa !11
  br label %778

778:                                              ; preds = %771
  %779 = load i64, ptr %42, align 8, !tbaa !9
  %780 = add nsw i64 %779, 1
  store i64 %780, ptr %42, align 8, !tbaa !9
  br label %734, !llvm.loop !27

781:                                              ; preds = %734
  %782 = load float, ptr %45, align 4, !tbaa !11
  %783 = load ptr, ptr %29, align 8, !tbaa !5
  %784 = load i64, ptr %44, align 8, !tbaa !9
  %785 = getelementptr inbounds float, ptr %783, i64 %784
  %786 = load float, ptr %785, align 4, !tbaa !11
  %787 = fadd float %786, %782
  store float %787, ptr %785, align 4, !tbaa !11
  %788 = load i64, ptr %44, align 8, !tbaa !9
  %789 = load i64, ptr %46, align 8, !tbaa !9
  %790 = add nsw i64 %789, %788
  store i64 %790, ptr %46, align 8, !tbaa !9
  br label %791

791:                                              ; preds = %781
  %792 = load i64, ptr %44, align 8, !tbaa !9
  %793 = add nsw i64 %792, 1
  store i64 %793, ptr %44, align 8, !tbaa !9
  br label %708, !llvm.loop !28

794:                                              ; preds = %708
  br label %795

795:                                              ; preds = %794, %704
  br label %974

796:                                              ; preds = %629
  store i64 1, ptr %46, align 8, !tbaa !9
  %797 = load i64, ptr %58, align 8, !tbaa !9
  %798 = icmp ne i64 %797, 0
  br i1 %798, label %799, label %876

799:                                              ; preds = %796
  %800 = load ptr, ptr %20, align 8, !tbaa !5
  %801 = load i64, ptr %800, align 8, !tbaa !9
  store i64 %801, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %802

802:                                              ; preds = %872, %799
  %803 = load i64, ptr %44, align 8, !tbaa !9
  %804 = load i64, ptr %37, align 8, !tbaa !9
  %805 = icmp sle i64 %803, %804
  br i1 %805, label %806, label %875

806:                                              ; preds = %802
  store float 0.000000e+00, ptr %45, align 4, !tbaa !11
  %807 = load ptr, ptr %20, align 8, !tbaa !5
  %808 = load i64, ptr %807, align 8, !tbaa !9
  store i64 %808, ptr %38, align 8, !tbaa !9
  %809 = load i64, ptr %44, align 8, !tbaa !9
  store i64 %809, ptr %42, align 8, !tbaa !9
  br label %810

810:                                              ; preds = %855, %806
  %811 = load i64, ptr %42, align 8, !tbaa !9
  %812 = load i64, ptr %38, align 8, !tbaa !9
  %813 = icmp sle i64 %811, %812
  br i1 %813, label %814, label %858

814:                                              ; preds = %810
  %815 = load ptr, ptr %22, align 8, !tbaa !5
  %816 = load i64, ptr %46, align 8, !tbaa !9
  %817 = load i64, ptr %42, align 8, !tbaa !9
  %818 = add nsw i64 %816, %817
  %819 = load i64, ptr %44, align 8, !tbaa !9
  %820 = sub nsw i64 %818, %819
  %821 = getelementptr inbounds float, ptr %815, i64 %820
  %822 = load float, ptr %821, align 4, !tbaa !11
  store float %822, ptr %39, align 4, !tbaa !11
  %823 = load float, ptr %39, align 4, !tbaa !11
  %824 = fcmp oge float %823, 0.000000e+00
  br i1 %824, label %825, label %827

825:                                              ; preds = %814
  %826 = load float, ptr %39, align 4, !tbaa !11
  br label %830

827:                                              ; preds = %814
  %828 = load float, ptr %39, align 4, !tbaa !11
  %829 = fneg float %828
  br label %830

830:                                              ; preds = %827, %825
  %831 = phi float [ %826, %825 ], [ %829, %827 ]
  %832 = fpext float %831 to double
  %833 = load ptr, ptr %25, align 8, !tbaa !5
  %834 = load i64, ptr %42, align 8, !tbaa !9
  %835 = load i64, ptr %43, align 8, !tbaa !9
  %836 = load i64, ptr %34, align 8, !tbaa !9
  %837 = mul nsw i64 %835, %836
  %838 = add nsw i64 %834, %837
  %839 = getelementptr inbounds float, ptr %833, i64 %838
  %840 = load float, ptr %839, align 4, !tbaa !11
  store float %840, ptr %40, align 4, !tbaa !11
  %841 = load float, ptr %40, align 4, !tbaa !11
  %842 = fcmp oge float %841, 0.000000e+00
  br i1 %842, label %843, label %845

843:                                              ; preds = %830
  %844 = load float, ptr %40, align 4, !tbaa !11
  br label %848

845:                                              ; preds = %830
  %846 = load float, ptr %40, align 4, !tbaa !11
  %847 = fneg float %846
  br label %848

848:                                              ; preds = %845, %843
  %849 = phi float [ %844, %843 ], [ %847, %845 ]
  %850 = fpext float %849 to double
  %851 = load float, ptr %45, align 4, !tbaa !11
  %852 = fpext float %851 to double
  %853 = call double @llvm.fmuladd.f64(double %832, double %850, double %852)
  %854 = fptrunc double %853 to float
  store float %854, ptr %45, align 4, !tbaa !11
  br label %855

855:                                              ; preds = %848
  %856 = load i64, ptr %42, align 8, !tbaa !9
  %857 = add nsw i64 %856, 1
  store i64 %857, ptr %42, align 8, !tbaa !9
  br label %810, !llvm.loop !29

858:                                              ; preds = %810
  %859 = load float, ptr %45, align 4, !tbaa !11
  %860 = load ptr, ptr %29, align 8, !tbaa !5
  %861 = load i64, ptr %44, align 8, !tbaa !9
  %862 = getelementptr inbounds float, ptr %860, i64 %861
  %863 = load float, ptr %862, align 4, !tbaa !11
  %864 = fadd float %863, %859
  store float %864, ptr %862, align 4, !tbaa !11
  %865 = load i64, ptr %46, align 8, !tbaa !9
  %866 = load ptr, ptr %20, align 8, !tbaa !5
  %867 = load i64, ptr %866, align 8, !tbaa !9
  %868 = add nsw i64 %865, %867
  %869 = load i64, ptr %44, align 8, !tbaa !9
  %870 = sub nsw i64 %868, %869
  %871 = add nsw i64 %870, 1
  store i64 %871, ptr %46, align 8, !tbaa !9
  br label %872

872:                                              ; preds = %858
  %873 = load i64, ptr %44, align 8, !tbaa !9
  %874 = add nsw i64 %873, 1
  store i64 %874, ptr %44, align 8, !tbaa !9
  br label %802, !llvm.loop !30

875:                                              ; preds = %802
  br label %973

876:                                              ; preds = %796
  %877 = load ptr, ptr %20, align 8, !tbaa !5
  %878 = load i64, ptr %877, align 8, !tbaa !9
  store i64 %878, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %44, align 8, !tbaa !9
  br label %879

879:                                              ; preds = %969, %876
  %880 = load i64, ptr %44, align 8, !tbaa !9
  %881 = load i64, ptr %37, align 8, !tbaa !9
  %882 = icmp sle i64 %880, %881
  br i1 %882, label %883, label %972

883:                                              ; preds = %879
  %884 = load ptr, ptr %25, align 8, !tbaa !5
  %885 = load i64, ptr %44, align 8, !tbaa !9
  %886 = load i64, ptr %43, align 8, !tbaa !9
  %887 = load i64, ptr %34, align 8, !tbaa !9
  %888 = mul nsw i64 %886, %887
  %889 = add nsw i64 %885, %888
  %890 = getelementptr inbounds float, ptr %884, i64 %889
  %891 = load float, ptr %890, align 4, !tbaa !11
  store float %891, ptr %39, align 4, !tbaa !11
  %892 = load float, ptr %39, align 4, !tbaa !11
  %893 = fcmp oge float %892, 0.000000e+00
  br i1 %893, label %894, label %896

894:                                              ; preds = %883
  %895 = load float, ptr %39, align 4, !tbaa !11
  br label %899

896:                                              ; preds = %883
  %897 = load float, ptr %39, align 4, !tbaa !11
  %898 = fneg float %897
  br label %899

899:                                              ; preds = %896, %894
  %900 = phi float [ %895, %894 ], [ %898, %896 ]
  %901 = fpext float %900 to double
  %902 = fptrunc double %901 to float
  store float %902, ptr %45, align 4, !tbaa !11
  %903 = load ptr, ptr %20, align 8, !tbaa !5
  %904 = load i64, ptr %903, align 8, !tbaa !9
  store i64 %904, ptr %38, align 8, !tbaa !9
  %905 = load i64, ptr %44, align 8, !tbaa !9
  %906 = add nsw i64 %905, 1
  store i64 %906, ptr %42, align 8, !tbaa !9
  br label %907

907:                                              ; preds = %952, %899
  %908 = load i64, ptr %42, align 8, !tbaa !9
  %909 = load i64, ptr %38, align 8, !tbaa !9
  %910 = icmp sle i64 %908, %909
  br i1 %910, label %911, label %955

911:                                              ; preds = %907
  %912 = load ptr, ptr %22, align 8, !tbaa !5
  %913 = load i64, ptr %46, align 8, !tbaa !9
  %914 = load i64, ptr %42, align 8, !tbaa !9
  %915 = add nsw i64 %913, %914
  %916 = load i64, ptr %44, align 8, !tbaa !9
  %917 = sub nsw i64 %915, %916
  %918 = getelementptr inbounds float, ptr %912, i64 %917
  %919 = load float, ptr %918, align 4, !tbaa !11
  store float %919, ptr %39, align 4, !tbaa !11
  %920 = load float, ptr %39, align 4, !tbaa !11
  %921 = fcmp oge float %920, 0.000000e+00
  br i1 %921, label %922, label %924

922:                                              ; preds = %911
  %923 = load float, ptr %39, align 4, !tbaa !11
  br label %927

924:                                              ; preds = %911
  %925 = load float, ptr %39, align 4, !tbaa !11
  %926 = fneg float %925
  br label %927

927:                                              ; preds = %924, %922
  %928 = phi float [ %923, %922 ], [ %926, %924 ]
  %929 = fpext float %928 to double
  %930 = load ptr, ptr %25, align 8, !tbaa !5
  %931 = load i64, ptr %42, align 8, !tbaa !9
  %932 = load i64, ptr %43, align 8, !tbaa !9
  %933 = load i64, ptr %34, align 8, !tbaa !9
  %934 = mul nsw i64 %932, %933
  %935 = add nsw i64 %931, %934
  %936 = getelementptr inbounds float, ptr %930, i64 %935
  %937 = load float, ptr %936, align 4, !tbaa !11
  store float %937, ptr %40, align 4, !tbaa !11
  %938 = load float, ptr %40, align 4, !tbaa !11
  %939 = fcmp oge float %938, 0.000000e+00
  br i1 %939, label %940, label %942

940:                                              ; preds = %927
  %941 = load float, ptr %40, align 4, !tbaa !11
  br label %945

942:                                              ; preds = %927
  %943 = load float, ptr %40, align 4, !tbaa !11
  %944 = fneg float %943
  br label %945

945:                                              ; preds = %942, %940
  %946 = phi float [ %941, %940 ], [ %944, %942 ]
  %947 = fpext float %946 to double
  %948 = load float, ptr %45, align 4, !tbaa !11
  %949 = fpext float %948 to double
  %950 = call double @llvm.fmuladd.f64(double %929, double %947, double %949)
  %951 = fptrunc double %950 to float
  store float %951, ptr %45, align 4, !tbaa !11
  br label %952

952:                                              ; preds = %945
  %953 = load i64, ptr %42, align 8, !tbaa !9
  %954 = add nsw i64 %953, 1
  store i64 %954, ptr %42, align 8, !tbaa !9
  br label %907, !llvm.loop !31

955:                                              ; preds = %907
  %956 = load float, ptr %45, align 4, !tbaa !11
  %957 = load ptr, ptr %29, align 8, !tbaa !5
  %958 = load i64, ptr %44, align 8, !tbaa !9
  %959 = getelementptr inbounds float, ptr %957, i64 %958
  %960 = load float, ptr %959, align 4, !tbaa !11
  %961 = fadd float %960, %956
  store float %961, ptr %959, align 4, !tbaa !11
  %962 = load i64, ptr %46, align 8, !tbaa !9
  %963 = load ptr, ptr %20, align 8, !tbaa !5
  %964 = load i64, ptr %963, align 8, !tbaa !9
  %965 = add nsw i64 %962, %964
  %966 = load i64, ptr %44, align 8, !tbaa !9
  %967 = sub nsw i64 %965, %966
  %968 = add nsw i64 %967, 1
  store i64 %968, ptr %46, align 8, !tbaa !9
  br label %969

969:                                              ; preds = %955
  %970 = load i64, ptr %44, align 8, !tbaa !9
  %971 = add nsw i64 %970, 1
  store i64 %971, ptr %44, align 8, !tbaa !9
  br label %879, !llvm.loop !32

972:                                              ; preds = %879
  br label %973

973:                                              ; preds = %972, %875
  br label %974

974:                                              ; preds = %973, %795
  br label %975

975:                                              ; preds = %974, %628
  store float 0.000000e+00, ptr %45, align 4, !tbaa !11
  %976 = load ptr, ptr %20, align 8, !tbaa !5
  %977 = load i64, ptr %976, align 8, !tbaa !9
  store i64 %977, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %978

978:                                              ; preds = %1069, %975
  %979 = load i64, ptr %42, align 8, !tbaa !9
  %980 = load i64, ptr %37, align 8, !tbaa !9
  %981 = icmp sle i64 %979, %980
  br i1 %981, label %982, label %1072

982:                                              ; preds = %978
  %983 = load ptr, ptr %29, align 8, !tbaa !5
  %984 = load i64, ptr %42, align 8, !tbaa !9
  %985 = getelementptr inbounds float, ptr %983, i64 %984
  %986 = load float, ptr %985, align 4, !tbaa !11
  %987 = load float, ptr %52, align 4, !tbaa !11
  %988 = fcmp ogt float %986, %987
  br i1 %988, label %989, label %1026

989:                                              ; preds = %982
  %990 = load float, ptr %45, align 4, !tbaa !11
  store float %990, ptr %40, align 4, !tbaa !11
  %991 = load ptr, ptr %29, align 8, !tbaa !5
  %992 = load ptr, ptr %20, align 8, !tbaa !5
  %993 = load i64, ptr %992, align 8, !tbaa !9
  %994 = load i64, ptr %42, align 8, !tbaa !9
  %995 = add nsw i64 %993, %994
  %996 = getelementptr inbounds float, ptr %991, i64 %995
  %997 = load float, ptr %996, align 4, !tbaa !11
  store float %997, ptr %39, align 4, !tbaa !11
  %998 = load float, ptr %39, align 4, !tbaa !11
  %999 = fcmp oge float %998, 0.000000e+00
  br i1 %999, label %1000, label %1002

1000:                                             ; preds = %989
  %1001 = load float, ptr %39, align 4, !tbaa !11
  br label %1005

1002:                                             ; preds = %989
  %1003 = load float, ptr %39, align 4, !tbaa !11
  %1004 = fneg float %1003
  br label %1005

1005:                                             ; preds = %1002, %1000
  %1006 = phi float [ %1001, %1000 ], [ %1004, %1002 ]
  %1007 = fpext float %1006 to double
  %1008 = load ptr, ptr %29, align 8, !tbaa !5
  %1009 = load i64, ptr %42, align 8, !tbaa !9
  %1010 = getelementptr inbounds float, ptr %1008, i64 %1009
  %1011 = load float, ptr %1010, align 4, !tbaa !11
  %1012 = fpext float %1011 to double
  %1013 = fdiv double %1007, %1012
  %1014 = fptrunc double %1013 to float
  store float %1014, ptr %41, align 4, !tbaa !11
  %1015 = load float, ptr %40, align 4, !tbaa !11
  %1016 = load float, ptr %41, align 4, !tbaa !11
  %1017 = fcmp oge float %1015, %1016
  br i1 %1017, label %1018, label %1020

1018:                                             ; preds = %1005
  %1019 = load float, ptr %40, align 4, !tbaa !11
  br label %1022

1020:                                             ; preds = %1005
  %1021 = load float, ptr %41, align 4, !tbaa !11
  br label %1022

1022:                                             ; preds = %1020, %1018
  %1023 = phi float [ %1019, %1018 ], [ %1021, %1020 ]
  %1024 = fpext float %1023 to double
  %1025 = fptrunc double %1024 to float
  store float %1025, ptr %45, align 4, !tbaa !11
  br label %1068

1026:                                             ; preds = %982
  %1027 = load float, ptr %45, align 4, !tbaa !11
  store float %1027, ptr %40, align 4, !tbaa !11
  %1028 = load ptr, ptr %29, align 8, !tbaa !5
  %1029 = load ptr, ptr %20, align 8, !tbaa !5
  %1030 = load i64, ptr %1029, align 8, !tbaa !9
  %1031 = load i64, ptr %42, align 8, !tbaa !9
  %1032 = add nsw i64 %1030, %1031
  %1033 = getelementptr inbounds float, ptr %1028, i64 %1032
  %1034 = load float, ptr %1033, align 4, !tbaa !11
  store float %1034, ptr %39, align 4, !tbaa !11
  %1035 = load float, ptr %39, align 4, !tbaa !11
  %1036 = fcmp oge float %1035, 0.000000e+00
  br i1 %1036, label %1037, label %1039

1037:                                             ; preds = %1026
  %1038 = load float, ptr %39, align 4, !tbaa !11
  br label %1042

1039:                                             ; preds = %1026
  %1040 = load float, ptr %39, align 4, !tbaa !11
  %1041 = fneg float %1040
  br label %1042

1042:                                             ; preds = %1039, %1037
  %1043 = phi float [ %1038, %1037 ], [ %1041, %1039 ]
  %1044 = fpext float %1043 to double
  %1045 = load float, ptr %51, align 4, !tbaa !11
  %1046 = fpext float %1045 to double
  %1047 = fadd double %1044, %1046
  %1048 = load ptr, ptr %29, align 8, !tbaa !5
  %1049 = load i64, ptr %42, align 8, !tbaa !9
  %1050 = getelementptr inbounds float, ptr %1048, i64 %1049
  %1051 = load float, ptr %1050, align 4, !tbaa !11
  %1052 = load float, ptr %51, align 4, !tbaa !11
  %1053 = fadd float %1051, %1052
  %1054 = fpext float %1053 to double
  %1055 = fdiv double %1047, %1054
  %1056 = fptrunc double %1055 to float
  store float %1056, ptr %41, align 4, !tbaa !11
  %1057 = load float, ptr %40, align 4, !tbaa !11
  %1058 = load float, ptr %41, align 4, !tbaa !11
  %1059 = fcmp oge float %1057, %1058
  br i1 %1059, label %1060, label %1062

1060:                                             ; preds = %1042
  %1061 = load float, ptr %40, align 4, !tbaa !11
  br label %1064

1062:                                             ; preds = %1042
  %1063 = load float, ptr %41, align 4, !tbaa !11
  br label %1064

1064:                                             ; preds = %1062, %1060
  %1065 = phi float [ %1061, %1060 ], [ %1063, %1062 ]
  %1066 = fpext float %1065 to double
  %1067 = fptrunc double %1066 to float
  store float %1067, ptr %45, align 4, !tbaa !11
  br label %1068

1068:                                             ; preds = %1064, %1022
  br label %1069

1069:                                             ; preds = %1068
  %1070 = load i64, ptr %42, align 8, !tbaa !9
  %1071 = add nsw i64 %1070, 1
  store i64 %1071, ptr %42, align 8, !tbaa !9
  br label %978, !llvm.loop !33

1072:                                             ; preds = %978
  %1073 = load float, ptr %45, align 4, !tbaa !11
  %1074 = load ptr, ptr %28, align 8, !tbaa !5
  %1075 = load i64, ptr %43, align 8, !tbaa !9
  %1076 = getelementptr inbounds float, ptr %1074, i64 %1075
  store float %1073, ptr %1076, align 4, !tbaa !11
  %1077 = load ptr, ptr %20, align 8, !tbaa !5
  %1078 = load i64, ptr %1077, align 8, !tbaa !9
  store i64 %1078, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1079

1079:                                             ; preds = %1160, %1072
  %1080 = load i64, ptr %42, align 8, !tbaa !9
  %1081 = load i64, ptr %37, align 8, !tbaa !9
  %1082 = icmp sle i64 %1080, %1081
  br i1 %1082, label %1083, label %1163

1083:                                             ; preds = %1079
  %1084 = load ptr, ptr %29, align 8, !tbaa !5
  %1085 = load i64, ptr %42, align 8, !tbaa !9
  %1086 = getelementptr inbounds float, ptr %1084, i64 %1085
  %1087 = load float, ptr %1086, align 4, !tbaa !11
  %1088 = load float, ptr %52, align 4, !tbaa !11
  %1089 = fcmp ogt float %1087, %1088
  br i1 %1089, label %1090, label %1123

1090:                                             ; preds = %1083
  %1091 = load ptr, ptr %29, align 8, !tbaa !5
  %1092 = load ptr, ptr %20, align 8, !tbaa !5
  %1093 = load i64, ptr %1092, align 8, !tbaa !9
  %1094 = load i64, ptr %42, align 8, !tbaa !9
  %1095 = add nsw i64 %1093, %1094
  %1096 = getelementptr inbounds float, ptr %1091, i64 %1095
  %1097 = load float, ptr %1096, align 4, !tbaa !11
  store float %1097, ptr %39, align 4, !tbaa !11
  %1098 = load float, ptr %39, align 4, !tbaa !11
  %1099 = fcmp oge float %1098, 0.000000e+00
  br i1 %1099, label %1100, label %1102

1100:                                             ; preds = %1090
  %1101 = load float, ptr %39, align 4, !tbaa !11
  br label %1105

1102:                                             ; preds = %1090
  %1103 = load float, ptr %39, align 4, !tbaa !11
  %1104 = fneg float %1103
  br label %1105

1105:                                             ; preds = %1102, %1100
  %1106 = phi float [ %1101, %1100 ], [ %1104, %1102 ]
  %1107 = fpext float %1106 to double
  %1108 = load i64, ptr %48, align 8, !tbaa !9
  %1109 = sitofp i64 %1108 to float
  %1110 = load float, ptr %49, align 4, !tbaa !11
  %1111 = fmul float %1109, %1110
  %1112 = load ptr, ptr %29, align 8, !tbaa !5
  %1113 = load i64, ptr %42, align 8, !tbaa !9
  %1114 = getelementptr inbounds float, ptr %1112, i64 %1113
  %1115 = load float, ptr %1114, align 4, !tbaa !11
  %1116 = fmul float %1111, %1115
  %1117 = fpext float %1116 to double
  %1118 = fadd double %1107, %1117
  %1119 = fptrunc double %1118 to float
  %1120 = load ptr, ptr %29, align 8, !tbaa !5
  %1121 = load i64, ptr %42, align 8, !tbaa !9
  %1122 = getelementptr inbounds float, ptr %1120, i64 %1121
  store float %1119, ptr %1122, align 4, !tbaa !11
  br label %1159

1123:                                             ; preds = %1083
  %1124 = load ptr, ptr %29, align 8, !tbaa !5
  %1125 = load ptr, ptr %20, align 8, !tbaa !5
  %1126 = load i64, ptr %1125, align 8, !tbaa !9
  %1127 = load i64, ptr %42, align 8, !tbaa !9
  %1128 = add nsw i64 %1126, %1127
  %1129 = getelementptr inbounds float, ptr %1124, i64 %1128
  %1130 = load float, ptr %1129, align 4, !tbaa !11
  store float %1130, ptr %39, align 4, !tbaa !11
  %1131 = load float, ptr %39, align 4, !tbaa !11
  %1132 = fcmp oge float %1131, 0.000000e+00
  br i1 %1132, label %1133, label %1135

1133:                                             ; preds = %1123
  %1134 = load float, ptr %39, align 4, !tbaa !11
  br label %1138

1135:                                             ; preds = %1123
  %1136 = load float, ptr %39, align 4, !tbaa !11
  %1137 = fneg float %1136
  br label %1138

1138:                                             ; preds = %1135, %1133
  %1139 = phi float [ %1134, %1133 ], [ %1137, %1135 ]
  %1140 = fpext float %1139 to double
  %1141 = load i64, ptr %48, align 8, !tbaa !9
  %1142 = sitofp i64 %1141 to float
  %1143 = load float, ptr %49, align 4, !tbaa !11
  %1144 = fmul float %1142, %1143
  %1145 = load ptr, ptr %29, align 8, !tbaa !5
  %1146 = load i64, ptr %42, align 8, !tbaa !9
  %1147 = getelementptr inbounds float, ptr %1145, i64 %1146
  %1148 = load float, ptr %1147, align 4, !tbaa !11
  %1149 = fmul float %1144, %1148
  %1150 = fpext float %1149 to double
  %1151 = fadd double %1140, %1150
  %1152 = load float, ptr %51, align 4, !tbaa !11
  %1153 = fpext float %1152 to double
  %1154 = fadd double %1151, %1153
  %1155 = fptrunc double %1154 to float
  %1156 = load ptr, ptr %29, align 8, !tbaa !5
  %1157 = load i64, ptr %42, align 8, !tbaa !9
  %1158 = getelementptr inbounds float, ptr %1156, i64 %1157
  store float %1155, ptr %1158, align 4, !tbaa !11
  br label %1159

1159:                                             ; preds = %1138, %1105
  br label %1160

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

1163:                                             ; preds = %1079
  store i64 0, ptr %50, align 8, !tbaa !9
  br label %1164

1164:                                             ; preds = %1273, %1163
  %1165 = load ptr, ptr %20, align 8, !tbaa !5
  %1166 = load ptr, ptr %29, align 8, !tbaa !5
  %1167 = load ptr, ptr %20, align 8, !tbaa !5
  %1168 = load i64, ptr %1167, align 8, !tbaa !9
  %1169 = shl i64 %1168, 1
  %1170 = add nsw i64 %1169, 1
  %1171 = getelementptr inbounds float, ptr %1166, i64 %1170
  %1172 = load ptr, ptr %29, align 8, !tbaa !5
  %1173 = load ptr, ptr %20, align 8, !tbaa !5
  %1174 = load i64, ptr %1173, align 8, !tbaa !9
  %1175 = add nsw i64 %1174, 1
  %1176 = getelementptr inbounds float, ptr %1172, i64 %1175
  %1177 = load ptr, ptr %30, align 8, !tbaa !5
  %1178 = getelementptr inbounds i64, ptr %1177, i64 1
  %1179 = load ptr, ptr %27, align 8, !tbaa !5
  %1180 = load i64, ptr %43, align 8, !tbaa !9
  %1181 = getelementptr inbounds float, ptr %1179, i64 %1180
  %1182 = getelementptr inbounds [3 x i64], ptr %53, i64 0, i64 0
  %1183 = call i32 @slacn2_(ptr noundef %1165, ptr noundef %1171, ptr noundef %1176, ptr noundef %1178, ptr noundef %1181, ptr noundef %50, ptr noundef %1182)
  %1184 = load i64, ptr %50, align 8, !tbaa !9
  %1185 = icmp ne i64 %1184, 0
  br i1 %1185, label %1186, label %1274

1186:                                             ; preds = %1164
  %1187 = load i64, ptr %50, align 8, !tbaa !9
  %1188 = icmp eq i64 %1187, 1
  br i1 %1188, label %1189, label %1231

1189:                                             ; preds = %1186
  %1190 = load ptr, ptr %17, align 8, !tbaa !5
  %1191 = getelementptr inbounds [1 x i8], ptr %57, i64 0, i64 0
  %1192 = load ptr, ptr %19, align 8, !tbaa !5
  %1193 = load ptr, ptr %20, align 8, !tbaa !5
  %1194 = load ptr, ptr %22, align 8, !tbaa !5
  %1195 = getelementptr inbounds float, ptr %1194, i64 1
  %1196 = load ptr, ptr %29, align 8, !tbaa !5
  %1197 = load ptr, ptr %20, align 8, !tbaa !5
  %1198 = load i64, ptr %1197, align 8, !tbaa !9
  %1199 = add nsw i64 %1198, 1
  %1200 = getelementptr inbounds float, ptr %1196, i64 %1199
  %1201 = call i32 @f2c_stpsv(ptr noundef %1190, ptr noundef %1191, ptr noundef %1192, ptr noundef %1193, ptr noundef %1195, ptr noundef %1200, ptr noundef @c__1)
  %1202 = load ptr, ptr %20, align 8, !tbaa !5
  %1203 = load i64, ptr %1202, align 8, !tbaa !9
  store i64 %1203, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1204

1204:                                             ; preds = %1227, %1189
  %1205 = load i64, ptr %42, align 8, !tbaa !9
  %1206 = load i64, ptr %37, align 8, !tbaa !9
  %1207 = icmp sle i64 %1205, %1206
  br i1 %1207, label %1208, label %1230

1208:                                             ; preds = %1204
  %1209 = load ptr, ptr %29, align 8, !tbaa !5
  %1210 = load i64, ptr %42, align 8, !tbaa !9
  %1211 = getelementptr inbounds float, ptr %1209, i64 %1210
  %1212 = load float, ptr %1211, align 4, !tbaa !11
  %1213 = load ptr, ptr %29, align 8, !tbaa !5
  %1214 = load ptr, ptr %20, align 8, !tbaa !5
  %1215 = load i64, ptr %1214, align 8, !tbaa !9
  %1216 = load i64, ptr %42, align 8, !tbaa !9
  %1217 = add nsw i64 %1215, %1216
  %1218 = getelementptr inbounds float, ptr %1213, i64 %1217
  %1219 = load float, ptr %1218, align 4, !tbaa !11
  %1220 = fmul float %1212, %1219
  %1221 = load ptr, ptr %29, align 8, !tbaa !5
  %1222 = load ptr, ptr %20, align 8, !tbaa !5
  %1223 = load i64, ptr %1222, align 8, !tbaa !9
  %1224 = load i64, ptr %42, align 8, !tbaa !9
  %1225 = add nsw i64 %1223, %1224
  %1226 = getelementptr inbounds float, ptr %1221, i64 %1225
  store float %1220, ptr %1226, align 4, !tbaa !11
  br label %1227

1227:                                             ; preds = %1208
  %1228 = load i64, ptr %42, align 8, !tbaa !9
  %1229 = add nsw i64 %1228, 1
  store i64 %1229, ptr %42, align 8, !tbaa !9
  br label %1204, !llvm.loop !35

1230:                                             ; preds = %1204
  br label %1273

1231:                                             ; preds = %1186
  %1232 = load ptr, ptr %20, align 8, !tbaa !5
  %1233 = load i64, ptr %1232, align 8, !tbaa !9
  store i64 %1233, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1234

1234:                                             ; preds = %1257, %1231
  %1235 = load i64, ptr %42, align 8, !tbaa !9
  %1236 = load i64, ptr %37, align 8, !tbaa !9
  %1237 = icmp sle i64 %1235, %1236
  br i1 %1237, label %1238, label %1260

1238:                                             ; preds = %1234
  %1239 = load ptr, ptr %29, align 8, !tbaa !5
  %1240 = load i64, ptr %42, align 8, !tbaa !9
  %1241 = getelementptr inbounds float, ptr %1239, i64 %1240
  %1242 = load float, ptr %1241, align 4, !tbaa !11
  %1243 = load ptr, ptr %29, align 8, !tbaa !5
  %1244 = load ptr, ptr %20, align 8, !tbaa !5
  %1245 = load i64, ptr %1244, align 8, !tbaa !9
  %1246 = load i64, ptr %42, align 8, !tbaa !9
  %1247 = add nsw i64 %1245, %1246
  %1248 = getelementptr inbounds float, ptr %1243, i64 %1247
  %1249 = load float, ptr %1248, align 4, !tbaa !11
  %1250 = fmul float %1242, %1249
  %1251 = load ptr, ptr %29, align 8, !tbaa !5
  %1252 = load ptr, ptr %20, align 8, !tbaa !5
  %1253 = load i64, ptr %1252, align 8, !tbaa !9
  %1254 = load i64, ptr %42, align 8, !tbaa !9
  %1255 = add nsw i64 %1253, %1254
  %1256 = getelementptr inbounds float, ptr %1251, i64 %1255
  store float %1250, ptr %1256, align 4, !tbaa !11
  br label %1257

1257:                                             ; preds = %1238
  %1258 = load i64, ptr %42, align 8, !tbaa !9
  %1259 = add nsw i64 %1258, 1
  store i64 %1259, ptr %42, align 8, !tbaa !9
  br label %1234, !llvm.loop !36

1260:                                             ; preds = %1234
  %1261 = load ptr, ptr %17, align 8, !tbaa !5
  %1262 = load ptr, ptr %18, align 8, !tbaa !5
  %1263 = load ptr, ptr %19, align 8, !tbaa !5
  %1264 = load ptr, ptr %20, align 8, !tbaa !5
  %1265 = load ptr, ptr %22, align 8, !tbaa !5
  %1266 = getelementptr inbounds float, ptr %1265, i64 1
  %1267 = load ptr, ptr %29, align 8, !tbaa !5
  %1268 = load ptr, ptr %20, align 8, !tbaa !5
  %1269 = load i64, ptr %1268, align 8, !tbaa !9
  %1270 = add nsw i64 %1269, 1
  %1271 = getelementptr inbounds float, ptr %1267, i64 %1270
  %1272 = call i32 @f2c_stpsv(ptr noundef %1261, ptr noundef %1262, ptr noundef %1263, ptr noundef %1264, ptr noundef %1266, ptr noundef %1271, ptr noundef @c__1)
  br label %1273

1273:                                             ; preds = %1260, %1230
  br label %1164

1274:                                             ; preds = %1164
  store float 0.000000e+00, ptr %59, align 4, !tbaa !11
  %1275 = load ptr, ptr %20, align 8, !tbaa !5
  %1276 = load i64, ptr %1275, align 8, !tbaa !9
  store i64 %1276, ptr %37, align 8, !tbaa !9
  store i64 1, ptr %42, align 8, !tbaa !9
  br label %1277

1277:                                             ; preds = %1313, %1274
  %1278 = load i64, ptr %42, align 8, !tbaa !9
  %1279 = load i64, ptr %37, align 8, !tbaa !9
  %1280 = icmp sle i64 %1278, %1279
  br i1 %1280, label %1281, label %1316

1281:                                             ; preds = %1277
  %1282 = load float, ptr %59, align 4, !tbaa !11
  store float %1282, ptr %40, align 4, !tbaa !11
  %1283 = load ptr, ptr %25, align 8, !tbaa !5
  %1284 = load i64, ptr %42, align 8, !tbaa !9
  %1285 = load i64, ptr %43, align 8, !tbaa !9
  %1286 = load i64, ptr %34, align 8, !tbaa !9
  %1287 = mul nsw i64 %1285, %1286
  %1288 = add nsw i64 %1284, %1287
  %1289 = getelementptr inbounds float, ptr %1283, i64 %1288
  %1290 = load float, ptr %1289, align 4, !tbaa !11
  store float %1290, ptr %39, align 4, !tbaa !11
  %1291 = load float, ptr %39, align 4, !tbaa !11
  %1292 = fcmp oge float %1291, 0.000000e+00
  br i1 %1292, label %1293, label %1295

1293:                                             ; preds = %1281
  %1294 = load float, ptr %39, align 4, !tbaa !11
  br label %1298

1295:                                             ; preds = %1281
  %1296 = load float, ptr %39, align 4, !tbaa !11
  %1297 = fneg float %1296
  br label %1298

1298:                                             ; preds = %1295, %1293
  %1299 = phi float [ %1294, %1293 ], [ %1297, %1295 ]
  %1300 = fpext float %1299 to double
  %1301 = fptrunc double %1300 to float
  store float %1301, ptr %41, align 4, !tbaa !11
  %1302 = load float, ptr %40, align 4, !tbaa !11
  %1303 = load float, ptr %41, align 4, !tbaa !11
  %1304 = fcmp oge float %1302, %1303
  br i1 %1304, label %1305, label %1307

1305:                                             ; preds = %1298
  %1306 = load float, ptr %40, align 4, !tbaa !11
  br label %1309

1307:                                             ; preds = %1298
  %1308 = load float, ptr %41, align 4, !tbaa !11
  br label %1309

1309:                                             ; preds = %1307, %1305
  %1310 = phi float [ %1306, %1305 ], [ %1308, %1307 ]
  %1311 = fpext float %1310 to double
  %1312 = fptrunc double %1311 to float
  store float %1312, ptr %59, align 4, !tbaa !11
  br label %1313

1313:                                             ; preds = %1309
  %1314 = load i64, ptr %42, align 8, !tbaa !9
  %1315 = add nsw i64 %1314, 1
  store i64 %1315, ptr %42, align 8, !tbaa !9
  br label %1277, !llvm.loop !37

1316:                                             ; preds = %1277
  %1317 = load float, ptr %59, align 4, !tbaa !11
  %1318 = fcmp une float %1317, 0.000000e+00
  br i1 %1318, label %1319, label %1326

1319:                                             ; preds = %1316
  %1320 = load float, ptr %59, align 4, !tbaa !11
  %1321 = load ptr, ptr %27, align 8, !tbaa !5
  %1322 = load i64, ptr %43, align 8, !tbaa !9
  %1323 = getelementptr inbounds float, ptr %1321, i64 %1322
  %1324 = load float, ptr %1323, align 4, !tbaa !11
  %1325 = fdiv float %1324, %1320
  store float %1325, ptr %1323, align 4, !tbaa !11
  br label %1326

1326:                                             ; preds = %1319, %1316
  br label %1327

1327:                                             ; preds = %1326
  %1328 = load i64, ptr %43, align 8, !tbaa !9
  %1329 = add nsw i64 %1328, 1
  store i64 %1329, ptr %43, align 8, !tbaa !9
  br label %231, !llvm.loop !38

1330:                                             ; preds = %231
  store i32 0, ptr %16, align 4
  store i32 1, ptr %60, align 4
  br label %1331

1331:                                             ; preds = %1330, %206, %176
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  %1332 = load i32, ptr %16, align 4
  ret i32 %1332
}

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

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

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

declare double @slamch_(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.lr.ph712.preheader:                              ; preds = %66
  %min.iters.check952 = icmp ult i64 %51, 8
  %67 = sub i64 %17, %16
  %diff.check949 = icmp ult i64 %67, 32
  %or.cond = or i1 %min.iters.check952, %diff.check949
  br i1 %or.cond, label %.lr.ph712.preheader966, label %vector.ph953

vector.ph953:                                     ; preds = %.lr.ph712.preheader
  %n.vec955 = and i64 %51, 9223372036854775800
  %ind.end956 = or disjoint i64 %n.vec955, 1
  br label %vector.body958

vector.body958:                                   ; preds = %vector.body958, %vector.ph953
  %index959 = phi i64 [ 0, %vector.ph953 ], [ %index.next961, %vector.body958 ]
  %68 = getelementptr float, ptr %10, i64 %index959
  %69 = getelementptr inbounds i8, ptr %68, i64 16
  store <4 x float> zeroinitializer, ptr %68, align 4, !tbaa !9
  store <4 x float> zeroinitializer, ptr %69, align 4, !tbaa !9
  %70 = getelementptr float, ptr %11, i64 %index959
  %71 = getelementptr inbounds i8, ptr %70, i64 16
  store <4 x float> zeroinitializer, ptr %70, align 4, !tbaa !9
  store <4 x float> zeroinitializer, ptr %71, align 4, !tbaa !9
  %index.next961 = add nuw i64 %index959, 8
  %72 = icmp eq i64 %index.next961, %n.vec955
  br i1 %72, label %middle.block950, label %vector.body958, !llvm.loop !11

middle.block950:                                  ; preds = %vector.body958
  %cmp.n962 = icmp eq i64 %51, %n.vec955
  br i1 %cmp.n962, label %.loopexit, label %.lr.ph712.preheader966

.lr.ph712.preheader966:                           ; preds = %middle.block950, %.lr.ph712.preheader
  %.0493710.ph = phi i64 [ 1, %.lr.ph712.preheader ], [ %ind.end956, %middle.block950 ]
  %73 = add nuw i64 %51, 1
  %74 = sub i64 %73, %.0493710.ph
  %75 = sub i64 %51, %.0493710.ph
  %xtraiter985 = and i64 %74, 3
  %lcmp.mod986.not = icmp eq i64 %xtraiter985, 0
  br i1 %lcmp.mod986.not, label %.lr.ph712.prol.loopexit, label %.lr.ph712.prol

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

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

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

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

.lr.ph708:                                        ; preds = %91
  %invariant.gep577 = getelementptr i8, ptr %5, i64 -8
  %101 = fpext float %98 to double
  %102 = fmul float %97, %94
  %.pre = load i64, ptr %3, align 8, !tbaa !5
  %scevgep820 = getelementptr i8, ptr %5, i64 4
  %103 = sub i64 %19, %18
  %104 = mul i64 %25, -4
  %invariant.gep995 = getelementptr i8, ptr %12, i64 4
  %invariant.gep997 = getelementptr i8, ptr %12, i64 4
  %invariant.gep999 = getelementptr i8, ptr %12, i64 4
  %broadcast.splatinsert = insertelement <4 x float> poison, float %99, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert813 = insertelement <4 x float> poison, float %102, i64 0
  %broadcast.splat814 = shufflevector <4 x float> %broadcast.splatinsert813, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert815 = insertelement <4 x double> poison, double %101, i64 0
  %broadcast.splat816 = shufflevector <4 x double> %broadcast.splatinsert815, <4 x double> poison, <4 x i32> zeroinitializer
  br label %105

105:                                              ; preds = %.lr.ph708, %._crit_edge699.thread
  %indvar931 = phi i64 [ 0, %.lr.ph708 ], [ %indvar.next932, %._crit_edge699.thread ]
  %106 = phi i64 [ %.pre, %.lr.ph708 ], [ %476, %._crit_edge699.thread ]
  %.1494706 = phi i64 [ 1, %.lr.ph708 ], [ %537, %._crit_edge699.thread ]
  %107 = mul nsw i64 %.1494706, %28
  %gep702 = getelementptr float, ptr %invariant.gep701, i64 %107
  %108 = getelementptr float, ptr %12, i64 %106
  %109 = call i32 @f2c_scopy(ptr noundef nonnull %3, ptr noundef %gep702, ptr noundef nonnull @c__1, ptr noundef %108, ptr noundef nonnull @c__1) #5
  %110 = load i64, ptr %3, align 8, !tbaa !5
  %111 = getelementptr float, ptr %12, i64 %110
  %112 = call i32 @f2c_stpmv(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %111, ptr noundef nonnull @c__1) #5
  %113 = mul nsw i64 %.1494706, %25
  %gep704 = getelementptr float, ptr %invariant.gep703, i64 %113
  %114 = load i64, ptr %3, align 8, !tbaa !5
  %115 = getelementptr float, ptr %12, i64 %114
  %116 = call i32 @f2c_saxpy(ptr noundef nonnull %3, ptr noundef nonnull @c_b19, ptr noundef %gep704, ptr noundef nonnull @c__1, ptr noundef %115, ptr noundef nonnull @c__1) #5
  %117 = load i64, ptr %3, align 8, !tbaa !5
  %invariant.gep = getelementptr float, ptr %27, i64 %113
  %.not520570 = icmp slt i64 %117, 1
  br i1 %.not520570, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %105
  %118 = mul i64 %104, %indvar931
  %119 = add i64 %103, %118
  %min.iters.check935 = icmp ult i64 %117, 8
  %diff.check = icmp ult i64 %119, 32
  %or.cond965 = select i1 %min.iters.check935, i1 true, i1 %diff.check
  br i1 %or.cond965, label %.lr.ph.preheader974, label %vector.ph936

vector.ph936:                                     ; preds = %.lr.ph.preheader
  %n.vec938 = and i64 %117, 9223372036854775800
  %ind.end939 = or disjoint i64 %n.vec938, 1
  br label %vector.body941

vector.body941:                                   ; preds = %vector.body941, %vector.ph936
  %index942 = phi i64 [ 0, %vector.ph936 ], [ %index.next946, %vector.body941 ]
  %offset.idx943 = or disjoint i64 %index942, 1
  %120 = getelementptr float, ptr %invariant.gep, i64 %offset.idx943
  %121 = getelementptr i8, ptr %120, i64 16
  %wide.load944 = load <4 x float>, ptr %120, align 4, !tbaa !9
  %wide.load945 = load <4 x float>, ptr %121, align 4, !tbaa !9
  %122 = fcmp oge <4 x float> %wide.load944, zeroinitializer
  %123 = fcmp oge <4 x float> %wide.load945, zeroinitializer
  %124 = fneg <4 x float> %wide.load944
  %125 = fneg <4 x float> %wide.load945
  %126 = select <4 x i1> %122, <4 x float> %wide.load944, <4 x float> %124
  %127 = select <4 x i1> %123, <4 x float> %wide.load945, <4 x float> %125
  %128 = getelementptr float, ptr %12, i64 %index942
  %129 = getelementptr inbounds i8, ptr %128, i64 16
  store <4 x float> %126, ptr %128, align 4, !tbaa !9
  store <4 x float> %127, ptr %129, align 4, !tbaa !9
  %index.next946 = add nuw i64 %index942, 8
  %130 = icmp eq i64 %index.next946, %n.vec938
  br i1 %130, label %middle.block933, label %vector.body941, !llvm.loop !19

middle.block933:                                  ; preds = %vector.body941
  %cmp.n947 = icmp eq i64 %117, %n.vec938
  br i1 %cmp.n947, label %._crit_edge, label %.lr.ph.preheader974

.lr.ph.preheader974:                              ; preds = %middle.block933, %.lr.ph.preheader
  %.0495571.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %ind.end939, %middle.block933 ]
  %xtraiter = and i64 %117, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader974
  %gep.prol = getelementptr float, ptr %invariant.gep, i64 %.0495571.ph
  %131 = load float, ptr %gep.prol, align 4, !tbaa !9
  %132 = fcmp oge float %131, 0.000000e+00
  %133 = fneg float %131
  %134 = select i1 %132, float %131, float %133
  %135 = getelementptr inbounds float, ptr %33, i64 %.0495571.ph
  store float %134, ptr %135, align 4, !tbaa !9
  %136 = add nuw i64 %.0495571.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader974
  %.0495571.unr = phi i64 [ %.0495571.ph, %.lr.ph.preheader974 ], [ %136, %.lr.ph.prol ]
  %137 = icmp eq i64 %117, %.0495571.ph
  br i1 %137, label %._crit_edge, label %.lr.ph

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

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block933, %105
  br i1 %.not512, label %311, label %150

150:                                              ; preds = %._crit_edge
  %invariant.gep611 = getelementptr float, ptr %30, i64 %107
  br i1 %.not, label %222, label %151

151:                                              ; preds = %150
  br i1 %.not515, label %.preheader565, label %.preheader567

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

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

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

.lr.ph582:                                        ; preds = %.lr.ph582.preheader, %.loopexit964
  %scev.check.iv908 = phi ptr [ %scevgep820, %.lr.ph582.preheader ], [ %scevgep909, %.loopexit964 ]
  %scev.check.iv906 = phi ptr [ %5, %.lr.ph582.preheader ], [ %scevgep907, %.loopexit964 ]
  %indvar903 = phi i64 [ 0, %.lr.ph582.preheader ], [ %indvar.next904, %.loopexit964 ]
  %indvars.iv = phi i64 [ 2, %.lr.ph582.preheader ], [ %indvars.iv.next, %.loopexit964 ]
  %.0478581 = phi i64 [ 1, %.lr.ph582.preheader ], [ %184, %.loopexit964 ]
  %.0485580 = phi i64 [ 1, %.lr.ph582.preheader ], [ %185, %.loopexit964 ]
  %153 = shl i64 %indvar903, 2
  %154 = add i64 %153, 8
  %155 = shl i64 %indvar903, 2
  %156 = add i64 %155, 4
  %gep576 = getelementptr float, ptr %invariant.gep611, i64 %.0485580
  %157 = load float, ptr %gep576, align 4, !tbaa !9
  %158 = fcmp oge float %157, 0.000000e+00
  %159 = fneg float %157
  %160 = select i1 %158, float %157, float %159
  %161 = fpext float %160 to double
  %gep578 = getelementptr float, ptr %invariant.gep577, i64 %.0478581
  %min.iters.check915 = icmp ult i64 %.0485580, 4
  br i1 %min.iters.check915, label %scalar.ph914.preheader, label %vector.memcheck902

vector.memcheck902:                               ; preds = %.lr.ph582
  %162 = shl i64 %indvar903, 2
  %gep996 = getelementptr i8, ptr %invariant.gep995, i64 %162
  %bound0910 = icmp ugt ptr %scev.check.iv908, %12
  %bound1911 = icmp ult ptr %scev.check.iv906, %gep996
  %found.conflict912 = and i1 %bound0910, %bound1911
  br i1 %found.conflict912, label %scalar.ph914.preheader, label %vector.ph916

vector.ph916:                                     ; preds = %vector.memcheck902
  %n.vec918 = and i64 %.0485580, 9223372036854775804
  %ind.end919 = or disjoint i64 %n.vec918, 1
  %broadcast.splatinsert926 = insertelement <4 x double> poison, double %161, i64 0
  %broadcast.splat927 = shufflevector <4 x double> %broadcast.splatinsert926, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body921

vector.body921:                                   ; preds = %vector.body921, %vector.ph916
  %index922 = phi i64 [ 0, %vector.ph916 ], [ %index.next928, %vector.body921 ]
  %offset.idx923 = or disjoint i64 %index922, 1
  %163 = getelementptr float, ptr %gep578, i64 %offset.idx923
  %wide.load924 = load <4 x float>, ptr %163, align 4, !tbaa !9, !alias.scope !21
  %164 = fcmp oge <4 x float> %wide.load924, zeroinitializer
  %165 = fneg <4 x float> %wide.load924
  %166 = select <4 x i1> %164, <4 x float> %wide.load924, <4 x float> %165
  %167 = fpext <4 x float> %166 to <4 x double>
  %168 = getelementptr float, ptr %12, i64 %index922
  %wide.load925 = load <4 x float>, ptr %168, align 4, !tbaa !9, !alias.scope !24, !noalias !21
  %169 = fpext <4 x float> %wide.load925 to <4 x double>
  %170 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %167, <4 x double> %broadcast.splat927, <4 x double> %169)
  %171 = fptrunc <4 x double> %170 to <4 x float>
  store <4 x float> %171, ptr %168, align 4, !tbaa !9, !alias.scope !24, !noalias !21
  %index.next928 = add nuw i64 %index922, 4
  %172 = icmp eq i64 %index.next928, %n.vec918
  br i1 %172, label %middle.block913, label %vector.body921, !llvm.loop !26

middle.block913:                                  ; preds = %vector.body921
  %cmp.n929 = icmp eq i64 %.0485580, %n.vec918
  br i1 %cmp.n929, label %.loopexit964, label %scalar.ph914.preheader

scalar.ph914.preheader:                           ; preds = %middle.block913, %vector.memcheck902, %.lr.ph582
  %.1496574.ph = phi i64 [ 1, %vector.memcheck902 ], [ 1, %.lr.ph582 ], [ %ind.end919, %middle.block913 ]
  br label %scalar.ph914

scalar.ph914:                                     ; preds = %scalar.ph914.preheader, %scalar.ph914
  %.1496574 = phi i64 [ %183, %scalar.ph914 ], [ %.1496574.ph, %scalar.ph914.preheader ]
  %gep573 = getelementptr float, ptr %gep578, i64 %.1496574
  %173 = load float, ptr %gep573, align 4, !tbaa !9
  %174 = fcmp oge float %173, 0.000000e+00
  %175 = fneg float %173
  %176 = select i1 %174, float %173, float %175
  %177 = fpext float %176 to double
  %178 = getelementptr inbounds float, ptr %33, i64 %.1496574
  %179 = load float, ptr %178, align 4, !tbaa !9
  %180 = fpext float %179 to double
  %181 = call double @llvm.fmuladd.f64(double %177, double %161, double %180)
  %182 = fptrunc double %181 to float
  store float %182, ptr %178, align 4, !tbaa !9
  %183 = add nuw i64 %.1496574, 1
  %exitcond725.not = icmp eq i64 %183, %indvars.iv
  br i1 %exitcond725.not, label %.loopexit964, label %scalar.ph914, !llvm.loop !27

.loopexit964:                                     ; preds = %scalar.ph914, %middle.block913
  %184 = add nuw nsw i64 %.0478581, %.0485580
  %185 = add nuw nsw i64 %.0485580, 1
  %indvars.iv.next = add nuw i64 %indvars.iv, 1
  %exitcond726.not = icmp eq i64 %indvars.iv, %152
  %indvar.next904 = add i64 %indvar903, 1
  %scevgep907 = getelementptr i8, ptr %scev.check.iv906, i64 %156
  %scevgep909 = getelementptr i8, ptr %scev.check.iv908, i64 %154
  br i1 %exitcond726.not, label %.loopexit554, label %.lr.ph582, !llvm.loop !28

.lr.ph597:                                        ; preds = %.preheader565, %._crit_edge587
  %scev.check.iv880 = phi ptr [ %scevgep881, %._crit_edge587 ], [ %5, %.preheader565 ]
  %scev.check.iv878 = phi ptr [ %scevgep879, %._crit_edge587 ], [ %5, %.preheader565 ]
  %indvar875 = phi i64 [ %indvar.next876, %._crit_edge587 ], [ 0, %.preheader565 ]
  %.1596 = phi i64 [ %220, %._crit_edge587 ], [ 1, %.preheader565 ]
  %.1486595 = phi i64 [ %221, %._crit_edge587 ], [ 1, %.preheader565 ]
  %186 = shl i64 %indvar875, 2
  %187 = add i64 %186, 8
  %188 = shl i64 %indvar875, 2
  %189 = add i64 %188, 4
  %190 = shl i64 %indvar875, 2
  %scevgep877 = getelementptr i8, ptr %12, i64 %190
  %gep591 = getelementptr float, ptr %invariant.gep611, i64 %.1486595
  %191 = load float, ptr %gep591, align 4, !tbaa !9
  %192 = fcmp oge float %191, 0.000000e+00
  %193 = fneg float %191
  %194 = select i1 %192, float %191, float %193
  %195 = fpext float %194 to double
  %.not538.not583 = icmp ugt i64 %.1486595, 1
  br i1 %.not538.not583, label %.lr.ph586, label %._crit_edge587

.lr.ph586:                                        ; preds = %.lr.ph597
  %gep593 = getelementptr float, ptr %invariant.gep577, i64 %.1596
  %min.iters.check887 = icmp ult i64 %indvar875, 4
  br i1 %min.iters.check887, label %scalar.ph886.preheader, label %vector.memcheck874

vector.memcheck874:                               ; preds = %.lr.ph586
  %bound0882 = icmp ugt ptr %scev.check.iv880, %12
  %bound1883 = icmp ult ptr %scev.check.iv878, %scevgep877
  %found.conflict884 = and i1 %bound0882, %bound1883
  br i1 %found.conflict884, label %scalar.ph886.preheader, label %vector.ph888

vector.ph888:                                     ; preds = %vector.memcheck874
  %n.vec890 = and i64 %indvar875, -4
  %ind.end891 = or disjoint i64 %n.vec890, 1
  %broadcast.splatinsert898 = insertelement <4 x double> poison, double %195, i64 0
  %broadcast.splat899 = shufflevector <4 x double> %broadcast.splatinsert898, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body893

vector.body893:                                   ; preds = %vector.body893, %vector.ph888
  %index894 = phi i64 [ 0, %vector.ph888 ], [ %index.next900, %vector.body893 ]
  %offset.idx895 = or disjoint i64 %index894, 1
  %196 = getelementptr float, ptr %gep593, i64 %offset.idx895
  %wide.load896 = load <4 x float>, ptr %196, align 4, !tbaa !9, !alias.scope !29
  %197 = fcmp oge <4 x float> %wide.load896, zeroinitializer
  %198 = fneg <4 x float> %wide.load896
  %199 = select <4 x i1> %197, <4 x float> %wide.load896, <4 x float> %198
  %200 = fpext <4 x float> %199 to <4 x double>
  %201 = getelementptr float, ptr %12, i64 %index894
  %wide.load897 = load <4 x float>, ptr %201, align 4, !tbaa !9, !alias.scope !32, !noalias !29
  %202 = fpext <4 x float> %wide.load897 to <4 x double>
  %203 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %200, <4 x double> %broadcast.splat899, <4 x double> %202)
  %204 = fptrunc <4 x double> %203 to <4 x float>
  store <4 x float> %204, ptr %201, align 4, !tbaa !9, !alias.scope !32, !noalias !29
  %index.next900 = add nuw i64 %index894, 4
  %205 = icmp eq i64 %index.next900, %n.vec890
  br i1 %205, label %middle.block885, label %vector.body893, !llvm.loop !34

middle.block885:                                  ; preds = %vector.body893
  %cmp.n901 = icmp eq i64 %indvar875, %n.vec890
  br i1 %cmp.n901, label %._crit_edge587, label %scalar.ph886.preheader

scalar.ph886.preheader:                           ; preds = %middle.block885, %vector.memcheck874, %.lr.ph586
  %.2497584.ph = phi i64 [ 1, %vector.memcheck874 ], [ 1, %.lr.ph586 ], [ %ind.end891, %middle.block885 ]
  br label %scalar.ph886

scalar.ph886:                                     ; preds = %scalar.ph886.preheader, %scalar.ph886
  %.2497584 = phi i64 [ %216, %scalar.ph886 ], [ %.2497584.ph, %scalar.ph886.preheader ]
  %gep589 = getelementptr float, ptr %gep593, i64 %.2497584
  %206 = load float, ptr %gep589, align 4, !tbaa !9
  %207 = fcmp oge float %206, 0.000000e+00
  %208 = fneg float %206
  %209 = select i1 %207, float %206, float %208
  %210 = fpext float %209 to double
  %211 = getelementptr inbounds float, ptr %33, i64 %.2497584
  %212 = load float, ptr %211, align 4, !tbaa !9
  %213 = fpext float %212 to double
  %214 = call double @llvm.fmuladd.f64(double %210, double %195, double %213)
  %215 = fptrunc double %214 to float
  store float %215, ptr %211, align 4, !tbaa !9
  %216 = add nuw nsw i64 %.2497584, 1
  %exitcond727.not = icmp eq i64 %216, %.1486595
  br i1 %exitcond727.not, label %._crit_edge587, label %scalar.ph886, !llvm.loop !35

._crit_edge587:                                   ; preds = %scalar.ph886, %middle.block885, %.lr.ph597
  %217 = getelementptr inbounds float, ptr %33, i64 %.1486595
  %218 = load float, ptr %217, align 4, !tbaa !9
  %219 = fadd float %194, %218
  store float %219, ptr %217, align 4, !tbaa !9
  %220 = add nuw nsw i64 %.1596, %.1486595
  %221 = add nuw i64 %.1486595, 1
  %exitcond728.not = icmp eq i64 %.1486595, %117
  %indvar.next876 = add i64 %indvar875, 1
  %scevgep879 = getelementptr i8, ptr %scev.check.iv878, i64 %189
  %scevgep881 = getelementptr i8, ptr %scev.check.iv880, i64 %187
  br i1 %exitcond728.not, label %.loopexit554, label %.lr.ph597, !llvm.loop !36

222:                                              ; preds = %150
  br i1 %.not515, label %.preheader561, label %.preheader563

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

.lr.ph605:                                        ; preds = %.preheader563
  %223 = add nuw i64 %117, 1
  br label %227

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

.lr.ph617:                                        ; preds = %.preheader561
  %224 = add nuw i64 %117, 1
  %225 = shl i64 %117, 2
  %scevgep819 = getelementptr i8, ptr %12, i64 %225
  %scevgep822 = getelementptr i8, ptr %5, i64 %225
  %226 = add i64 %225, -4
  br label %268

227:                                              ; preds = %.lr.ph605, %.loopexit963
  %scev.check.iv850 = phi ptr [ %scevgep820, %.lr.ph605 ], [ %scevgep851, %.loopexit963 ]
  %scev.check.iv848 = phi ptr [ %5, %.lr.ph605 ], [ %scevgep849, %.loopexit963 ]
  %indvar843 = phi i64 [ 0, %.lr.ph605 ], [ %indvar.next844, %.loopexit963 ]
  %.2487.neg604 = phi i64 [ -1, %.lr.ph605 ], [ %.2487.neg, %.loopexit963 ]
  %.2603 = phi i64 [ 1, %.lr.ph605 ], [ %266, %.loopexit963 ]
  %.2487602 = phi i64 [ 1, %.lr.ph605 ], [ %267, %.loopexit963 ]
  %smax856 = call i64 @llvm.smax.i64(i64 %117, i64 %.2487602)
  %228 = sub i64 %smax856, %indvar843
  %229 = sub i64 %117, %indvar843
  %230 = shl i64 %229, 2
  %231 = sub i64 %117, %indvar843
  %232 = shl i64 %231, 2
  %gep600 = getelementptr float, ptr %invariant.gep611, i64 %.2487602
  %233 = load float, ptr %gep600, align 4, !tbaa !9
  %234 = fcmp oge float %233, 0.000000e+00
  %235 = fneg float %233
  %236 = select i1 %234, float %233, float %235
  %237 = fpext float %236 to double
  %238 = getelementptr float, ptr %24, i64 %.2603
  %239 = getelementptr float, ptr %238, i64 %.2487.neg604
  %min.iters.check859 = icmp ult i64 %228, 4
  br i1 %min.iters.check859, label %scalar.ph858.preheader, label %vector.memcheck842

vector.memcheck842:                               ; preds = %227
  %smax = call i64 @llvm.smax.i64(i64 %117, i64 %.2487602)
  %240 = add i64 %smax, %.2487.neg604
  %241 = shl i64 %240, 2
  %scevgep852 = getelementptr i8, ptr %scev.check.iv850, i64 %241
  %242 = shl i64 %indvar843, 2
  %gep998 = getelementptr i8, ptr %invariant.gep997, i64 %242
  %scevgep847 = getelementptr i8, ptr %gep998, i64 %241
  %scevgep845 = getelementptr i8, ptr %12, i64 %242
  %bound0853 = icmp ult ptr %scevgep845, %scevgep852
  %bound1854 = icmp ult ptr %scev.check.iv848, %scevgep847
  %found.conflict855 = and i1 %bound0853, %bound1854
  br i1 %found.conflict855, label %scalar.ph858.preheader, label %vector.ph860

vector.ph860:                                     ; preds = %vector.memcheck842
  %n.vec862 = and i64 %228, -4
  %ind.end863 = add i64 %.2487602, %n.vec862
  %broadcast.splatinsert870 = insertelement <4 x double> poison, double %237, i64 0
  %broadcast.splat871 = shufflevector <4 x double> %broadcast.splatinsert870, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body865

vector.body865:                                   ; preds = %vector.body865, %vector.ph860
  %index866 = phi i64 [ 0, %vector.ph860 ], [ %index.next872, %vector.body865 ]
  %offset.idx867 = add i64 %.2487602, %index866
  %243 = getelementptr float, ptr %239, i64 %offset.idx867
  %wide.load868 = load <4 x float>, ptr %243, align 4, !tbaa !9, !alias.scope !37
  %244 = fcmp oge <4 x float> %wide.load868, zeroinitializer
  %245 = fneg <4 x float> %wide.load868
  %246 = select <4 x i1> %244, <4 x float> %wide.load868, <4 x float> %245
  %247 = fpext <4 x float> %246 to <4 x double>
  %248 = getelementptr inbounds float, ptr %33, i64 %offset.idx867
  %wide.load869 = load <4 x float>, ptr %248, align 4, !tbaa !9, !alias.scope !40, !noalias !37
  %249 = fpext <4 x float> %wide.load869 to <4 x double>
  %250 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %247, <4 x double> %broadcast.splat871, <4 x double> %249)
  %251 = fptrunc <4 x double> %250 to <4 x float>
  store <4 x float> %251, ptr %248, align 4, !tbaa !9, !alias.scope !40, !noalias !37
  %index.next872 = add nuw i64 %index866, 4
  %252 = icmp eq i64 %index.next872, %n.vec862
  br i1 %252, label %middle.block857, label %vector.body865, !llvm.loop !42

middle.block857:                                  ; preds = %vector.body865
  %cmp.n873 = icmp eq i64 %228, %n.vec862
  br i1 %cmp.n873, label %.loopexit963, label %scalar.ph858.preheader

scalar.ph858.preheader:                           ; preds = %middle.block857, %vector.memcheck842, %227
  %.3498598.ph = phi i64 [ %.2487602, %vector.memcheck842 ], [ %.2487602, %227 ], [ %ind.end863, %middle.block857 ]
  br label %scalar.ph858

scalar.ph858:                                     ; preds = %scalar.ph858.preheader, %scalar.ph858
  %.3498598 = phi i64 [ %264, %scalar.ph858 ], [ %.3498598.ph, %scalar.ph858.preheader ]
  %253 = getelementptr float, ptr %239, i64 %.3498598
  %254 = load float, ptr %253, align 4, !tbaa !9
  %255 = fcmp oge float %254, 0.000000e+00
  %256 = fneg float %254
  %257 = select i1 %255, float %254, float %256
  %258 = fpext float %257 to double
  %259 = getelementptr inbounds float, ptr %33, i64 %.3498598
  %260 = load float, ptr %259, align 4, !tbaa !9
  %261 = fpext float %260 to double
  %262 = call double @llvm.fmuladd.f64(double %258, double %237, double %261)
  %263 = fptrunc double %262 to float
  store float %263, ptr %259, align 4, !tbaa !9
  %264 = add nuw nsw i64 %.3498598, 1
  %.not535.not = icmp slt i64 %.3498598, %117
  br i1 %.not535.not, label %scalar.ph858, label %.loopexit963, !llvm.loop !43

.loopexit963:                                     ; preds = %scalar.ph858, %middle.block857
  %265 = add i64 %223, %.2487.neg604
  %266 = add i64 %265, %.2603
  %267 = add nuw i64 %.2487602, 1
  %.2487.neg = xor i64 %.2487602, -1
  %exitcond729.not = icmp eq i64 %.2487602, %117
  %indvar.next844 = add i64 %indvar843, 1
  %scevgep849 = getelementptr i8, ptr %scev.check.iv848, i64 %232
  %scevgep851 = getelementptr i8, ptr %scev.check.iv850, i64 %230
  br i1 %exitcond729.not, label %.loopexit554, label %227, !llvm.loop !44

268:                                              ; preds = %.lr.ph617, %._crit_edge610
  %scev.check.iv823 = phi ptr [ %scevgep822, %.lr.ph617 ], [ %scevgep824, %._crit_edge610 ]
  %scev.check.iv = phi ptr [ %scevgep820, %.lr.ph617 ], [ %scevgep821, %._crit_edge610 ]
  %indvar = phi i64 [ 0, %.lr.ph617 ], [ %indvar.next, %._crit_edge610 ]
  %.3488.neg616 = phi i64 [ -1, %.lr.ph617 ], [ %.3488.neg, %._crit_edge610 ]
  %.3615 = phi i64 [ 1, %.lr.ph617 ], [ %310, %._crit_edge610 ]
  %.3488614 = phi i64 [ 1, %.lr.ph617 ], [ %281, %._crit_edge610 ]
  %269 = xor i64 %indvar, -1
  %270 = add i64 %117, %269
  %271 = shl i64 %indvar, 2
  %272 = sub i64 %226, %271
  %273 = sub i64 %117, %indvar
  %274 = shl i64 %273, 2
  %275 = shl i64 %indvar, 2
  %gep1000 = getelementptr i8, ptr %invariant.gep999, i64 %275
  %gep612 = getelementptr float, ptr %invariant.gep611, i64 %.3488614
  %276 = load float, ptr %gep612, align 4, !tbaa !9
  %277 = fcmp oge float %276, 0.000000e+00
  %278 = fneg float %276
  %279 = select i1 %277, float %276, float %278
  %280 = fpext float %279 to double
  %281 = add nuw i64 %.3488614, 1
  %.not533606.not = icmp slt i64 %.3488614, %117
  br i1 %.not533606.not, label %.lr.ph609, label %._crit_edge610

.lr.ph609:                                        ; preds = %268
  %282 = getelementptr float, ptr %24, i64 %.3615
  %283 = getelementptr float, ptr %282, i64 %.3488.neg616
  %min.iters.check827 = icmp ult i64 %270, 4
  br i1 %min.iters.check827, label %scalar.ph826.preheader, label %vector.memcheck

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

vector.ph828:                                     ; preds = %vector.memcheck
  %n.vec830 = and i64 %270, -4
  %ind.end831 = add i64 %281, %n.vec830
  %broadcast.splatinsert838 = insertelement <4 x double> poison, double %280, i64 0
  %broadcast.splat839 = shufflevector <4 x double> %broadcast.splatinsert838, <4 x double> poison, <4 x i32> zeroinitializer
  br label %vector.body833

vector.body833:                                   ; preds = %vector.body833, %vector.ph828
  %index834 = phi i64 [ 0, %vector.ph828 ], [ %index.next840, %vector.body833 ]
  %offset.idx835 = add i64 %281, %index834
  %284 = getelementptr float, ptr %283, i64 %offset.idx835
  %wide.load836 = load <4 x float>, ptr %284, align 4, !tbaa !9, !alias.scope !45
  %285 = fcmp oge <4 x float> %wide.load836, zeroinitializer
  %286 = fneg <4 x float> %wide.load836
  %287 = select <4 x i1> %285, <4 x float> %wide.load836, <4 x float> %286
  %288 = fpext <4 x float> %287 to <4 x double>
  %289 = getelementptr inbounds float, ptr %33, i64 %offset.idx835
  %wide.load837 = load <4 x float>, ptr %289, align 4, !tbaa !9, !alias.scope !48, !noalias !45
  %290 = fpext <4 x float> %wide.load837 to <4 x double>
  %291 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %288, <4 x double> %broadcast.splat839, <4 x double> %290)
  %292 = fptrunc <4 x double> %291 to <4 x float>
  store <4 x float> %292, ptr %289, align 4, !tbaa !9, !alias.scope !48, !noalias !45
  %index.next840 = add nuw i64 %index834, 4
  %293 = icmp eq i64 %index.next840, %n.vec830
  br i1 %293, label %middle.block825, label %vector.body833, !llvm.loop !50

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

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

scalar.ph826:                                     ; preds = %scalar.ph826.preheader, %scalar.ph826
  %.4499607 = phi i64 [ %305, %scalar.ph826 ], [ %.4499607.ph, %scalar.ph826.preheader ]
  %294 = getelementptr float, ptr %283, i64 %.4499607
  %295 = load float, ptr %294, align 4, !tbaa !9
  %296 = fcmp oge float %295, 0.000000e+00
  %297 = fneg float %295
  %298 = select i1 %296, float %295, float %297
  %299 = fpext float %298 to double
  %300 = getelementptr inbounds float, ptr %33, i64 %.4499607
  %301 = load float, ptr %300, align 4, !tbaa !9
  %302 = fpext float %301 to double
  %303 = call double @llvm.fmuladd.f64(double %299, double %280, double %302)
  %304 = fptrunc double %303 to float
  store float %304, ptr %300, align 4, !tbaa !9
  %305 = add nuw nsw i64 %.4499607, 1
  %.not533.not = icmp slt i64 %.4499607, %117
  br i1 %.not533.not, label %scalar.ph826, label %._crit_edge610, !llvm.loop !51

._crit_edge610:                                   ; preds = %scalar.ph826, %middle.block825, %268
  %306 = getelementptr inbounds float, ptr %33, i64 %.3488614
  %307 = load float, ptr %306, align 4, !tbaa !9
  %308 = fadd float %279, %307
  store float %308, ptr %306, align 4, !tbaa !9
  %309 = add i64 %224, %.3488.neg616
  %310 = add i64 %309, %.3615
  %.3488.neg = xor i64 %.3488614, -1
  %exitcond730.not = icmp eq i64 %.3488614, %117
  %indvar.next = add i64 %indvar, 1
  %scevgep821 = getelementptr i8, ptr %scev.check.iv, i64 %274
  %scevgep824 = getelementptr i8, ptr %scev.check.iv823, i64 %272
  br i1 %exitcond730.not, label %.loopexit554, label %268, !llvm.loop !52

311:                                              ; preds = %._crit_edge
  br i1 %.not, label %359, label %312

312:                                              ; preds = %311
  br i1 %.not515, label %.preheader557, label %.preheader559

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

.preheader552.lr.ph:                              ; preds = %.preheader559
  %invariant.gep620 = getelementptr float, ptr %30, i64 %107
  %313 = add nuw i64 %117, 1
  br label %.preheader552

.preheader557:                                    ; preds = %312
  %invariant.gep639 = getelementptr float, ptr %30, i64 %107
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph646

.preheader552:                                    ; preds = %.preheader552.lr.ph, %329
  %indvars.iv731 = phi i64 [ 2, %.preheader552.lr.ph ], [ %indvars.iv.next732, %329 ]
  %.4628 = phi i64 [ 1, %.preheader552.lr.ph ], [ %333, %329 ]
  %.4489627 = phi i64 [ 1, %.preheader552.lr.ph ], [ %334, %329 ]
  %gep625 = getelementptr float, ptr %invariant.gep577, i64 %.4628
  br label %314

314:                                              ; preds = %.preheader552, %314
  %.0479623 = phi float [ 0.000000e+00, %.preheader552 ], [ %327, %314 ]
  %.5500622 = phi i64 [ 1, %.preheader552 ], [ %328, %314 ]
  %gep619 = getelementptr float, ptr %gep625, i64 %.5500622
  %315 = load float, ptr %gep619, align 4, !tbaa !9
  %316 = fcmp oge float %315, 0.000000e+00
  %317 = fneg float %315
  %318 = select i1 %316, float %315, float %317
  %319 = fpext float %318 to double
  %gep621 = getelementptr float, ptr %invariant.gep620, i64 %.5500622
  %320 = load float, ptr %gep621, align 4, !tbaa !9
  %321 = fcmp oge float %320, 0.000000e+00
  %322 = fneg float %320
  %323 = select i1 %321, float %320, float %322
  %324 = fpext float %323 to double
  %325 = fpext float %.0479623 to double
  %326 = call double @llvm.fmuladd.f64(double %319, double %324, double %325)
  %327 = fptrunc double %326 to float
  %328 = add nuw i64 %.5500622, 1
  %exitcond733.not = icmp eq i64 %328, %indvars.iv731
  br i1 %exitcond733.not, label %329, label %314, !llvm.loop !53

329:                                              ; preds = %314
  %330 = getelementptr inbounds float, ptr %33, i64 %.4489627
  %331 = load float, ptr %330, align 4, !tbaa !9
  %332 = fadd float %331, %327
  store float %332, ptr %330, align 4, !tbaa !9
  %333 = add nuw nsw i64 %.4628, %.4489627
  %334 = add nuw nsw i64 %.4489627, 1
  %indvars.iv.next732 = add nuw i64 %indvars.iv731, 1
  %exitcond734.not = icmp eq i64 %indvars.iv731, %313
  br i1 %exitcond734.not, label %.loopexit554, label %.preheader552, !llvm.loop !54

.lr.ph646:                                        ; preds = %.preheader557, %._crit_edge636
  %.5645 = phi i64 [ %357, %._crit_edge636 ], [ 1, %.preheader557 ]
  %.5490644 = phi i64 [ %358, %._crit_edge636 ], [ 1, %.preheader557 ]
  %gep640 = getelementptr float, ptr %invariant.gep639, i64 %.5490644
  %335 = load float, ptr %gep640, align 4, !tbaa !9
  %336 = fcmp oge float %335, 0.000000e+00
  %337 = fneg float %335
  %338 = select i1 %336, float %335, float %337
  %.not528.not631 = icmp ugt i64 %.5490644, 1
  br i1 %.not528.not631, label %.lr.ph635, label %._crit_edge636

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

339:                                              ; preds = %.lr.ph635, %339
  %.1480633 = phi float [ %338, %.lr.ph635 ], [ %352, %339 ]
  %.6501632 = phi i64 [ 1, %.lr.ph635 ], [ %353, %339 ]
  %gep638 = getelementptr float, ptr %gep642, i64 %.6501632
  %340 = load float, ptr %gep638, align 4, !tbaa !9
  %341 = fcmp oge float %340, 0.000000e+00
  %342 = fneg float %340
  %343 = select i1 %341, float %340, float %342
  %344 = fpext float %343 to double
  %gep630 = getelementptr float, ptr %invariant.gep639, i64 %.6501632
  %345 = load float, ptr %gep630, align 4, !tbaa !9
  %346 = fcmp oge float %345, 0.000000e+00
  %347 = fneg float %345
  %348 = select i1 %346, float %345, float %347
  %349 = fpext float %348 to double
  %350 = fpext float %.1480633 to double
  %351 = call double @llvm.fmuladd.f64(double %344, double %349, double %350)
  %352 = fptrunc double %351 to float
  %353 = add nuw nsw i64 %.6501632, 1
  %exitcond735.not = icmp eq i64 %353, %.5490644
  br i1 %exitcond735.not, label %._crit_edge636, label %339, !llvm.loop !55

._crit_edge636:                                   ; preds = %339, %.lr.ph646
  %.1480.lcssa = phi float [ %338, %.lr.ph646 ], [ %352, %339 ]
  %354 = getelementptr inbounds float, ptr %33, i64 %.5490644
  %355 = load float, ptr %354, align 4, !tbaa !9
  %356 = fadd float %.1480.lcssa, %355
  store float %356, ptr %354, align 4, !tbaa !9
  %357 = add nuw nsw i64 %.5645, %.5490644
  %358 = add nuw i64 %.5490644, 1
  %exitcond736.not = icmp eq i64 %.5490644, %117
  br i1 %exitcond736.not, label %.loopexit554, label %.lr.ph646, !llvm.loop !56

359:                                              ; preds = %311
  br i1 %.not515, label %.preheader553, label %.preheader555

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

.preheader.lr.ph:                                 ; preds = %.preheader555
  %invariant.gep647 = getelementptr float, ptr %30, i64 %107
  %360 = add nuw i64 %117, 1
  br label %.preheader

.preheader553:                                    ; preds = %359
  %invariant.gep664 = getelementptr float, ptr %30, i64 %107
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph670

.lr.ph670:                                        ; preds = %.preheader553
  %361 = add nuw i64 %117, 1
  br label %387

.preheader:                                       ; preds = %.preheader.lr.ph, %380
  %.6491.neg654 = phi i64 [ -1, %.preheader.lr.ph ], [ %.6491.neg, %380 ]
  %.6653 = phi i64 [ 1, %.preheader.lr.ph ], [ %385, %380 ]
  %.6491652 = phi i64 [ 1, %.preheader.lr.ph ], [ %386, %380 ]
  %362 = getelementptr float, ptr %24, i64 %.6653
  %363 = getelementptr float, ptr %362, i64 %.6491.neg654
  br label %364

364:                                              ; preds = %.preheader, %364
  %.2481650 = phi float [ 0.000000e+00, %.preheader ], [ %378, %364 ]
  %.7502649 = phi i64 [ %.6491652, %.preheader ], [ %379, %364 ]
  %365 = getelementptr float, ptr %363, i64 %.7502649
  %366 = load float, ptr %365, align 4, !tbaa !9
  %367 = fcmp oge float %366, 0.000000e+00
  %368 = fneg float %366
  %369 = select i1 %367, float %366, float %368
  %370 = fpext float %369 to double
  %gep648 = getelementptr float, ptr %invariant.gep647, i64 %.7502649
  %371 = load float, ptr %gep648, align 4, !tbaa !9
  %372 = fcmp oge float %371, 0.000000e+00
  %373 = fneg float %371
  %374 = select i1 %372, float %371, float %373
  %375 = fpext float %374 to double
  %376 = fpext float %.2481650 to double
  %377 = call double @llvm.fmuladd.f64(double %370, double %375, double %376)
  %378 = fptrunc double %377 to float
  %379 = add nuw nsw i64 %.7502649, 1
  %.not525.not = icmp slt i64 %.7502649, %117
  br i1 %.not525.not, label %364, label %380, !llvm.loop !57

380:                                              ; preds = %364
  %381 = getelementptr inbounds float, ptr %33, i64 %.6491652
  %382 = load float, ptr %381, align 4, !tbaa !9
  %383 = fadd float %382, %378
  store float %383, ptr %381, align 4, !tbaa !9
  %384 = add i64 %360, %.6491.neg654
  %385 = add i64 %384, %.6653
  %386 = add nuw i64 %.6491652, 1
  %.6491.neg = xor i64 %.6491652, -1
  %exitcond737.not = icmp eq i64 %.6491652, %117
  br i1 %exitcond737.not, label %.loopexit554, label %.preheader, !llvm.loop !58

387:                                              ; preds = %.lr.ph670, %._crit_edge662
  %.7492.neg669 = phi i64 [ -1, %.lr.ph670 ], [ %.7492.neg, %._crit_edge662 ]
  %.7668 = phi i64 [ 1, %.lr.ph670 ], [ %415, %._crit_edge662 ]
  %.7492667 = phi i64 [ 1, %.lr.ph670 ], [ %392, %._crit_edge662 ]
  %gep665 = getelementptr float, ptr %invariant.gep664, i64 %.7492667
  %388 = load float, ptr %gep665, align 4, !tbaa !9
  %389 = fcmp oge float %388, 0.000000e+00
  %390 = fneg float %388
  %391 = select i1 %389, float %388, float %390
  %392 = add nuw i64 %.7492667, 1
  %.not523657.not = icmp slt i64 %.7492667, %117
  br i1 %.not523657.not, label %.lr.ph661, label %._crit_edge662

.lr.ph661:                                        ; preds = %387
  %393 = getelementptr float, ptr %24, i64 %.7668
  %394 = getelementptr float, ptr %393, i64 %.7492.neg669
  br label %395

395:                                              ; preds = %.lr.ph661, %395
  %.3482659 = phi float [ %391, %.lr.ph661 ], [ %409, %395 ]
  %.8658 = phi i64 [ %392, %.lr.ph661 ], [ %410, %395 ]
  %396 = getelementptr float, ptr %394, i64 %.8658
  %397 = load float, ptr %396, align 4, !tbaa !9
  %398 = fcmp oge float %397, 0.000000e+00
  %399 = fneg float %397
  %400 = select i1 %398, float %397, float %399
  %401 = fpext float %400 to double
  %gep656 = getelementptr float, ptr %invariant.gep664, i64 %.8658
  %402 = load float, ptr %gep656, align 4, !tbaa !9
  %403 = fcmp oge float %402, 0.000000e+00
  %404 = fneg float %402
  %405 = select i1 %403, float %402, float %404
  %406 = fpext float %405 to double
  %407 = fpext float %.3482659 to double
  %408 = call double @llvm.fmuladd.f64(double %401, double %406, double %407)
  %409 = fptrunc double %408 to float
  %410 = add nuw nsw i64 %.8658, 1
  %.not523.not = icmp slt i64 %.8658, %117
  br i1 %.not523.not, label %395, label %._crit_edge662, !llvm.loop !59

._crit_edge662:                                   ; preds = %395, %387
  %.3482.lcssa = phi float [ %391, %387 ], [ %409, %395 ]
  %411 = getelementptr inbounds float, ptr %33, i64 %.7492667
  %412 = load float, ptr %411, align 4, !tbaa !9
  %413 = fadd float %.3482.lcssa, %412
  store float %413, ptr %411, align 4, !tbaa !9
  %414 = add i64 %361, %.7492.neg669
  %415 = add i64 %414, %.7668
  %.7492.neg = xor i64 %.7492667, -1
  %exitcond738.not = icmp eq i64 %.7492667, %117
  br i1 %exitcond738.not, label %.loopexit554, label %387, !llvm.loop !60

.loopexit554:                                     ; preds = %.loopexit964, %._crit_edge587, %.loopexit963, %._crit_edge610, %329, %._crit_edge636, %380, %._crit_edge662
  br i1 %.not520570, label %._crit_edge676.thread, label %.lr.ph675

.lr.ph675:                                        ; preds = %.loopexit554
  %416 = getelementptr float, ptr %33, i64 %117
  br label %417

417:                                              ; preds = %.lr.ph675, %435
  %.4483673 = phi float [ 0.000000e+00, %.lr.ph675 ], [ %437, %435 ]
  %.9672 = phi i64 [ 1, %.lr.ph675 ], [ %438, %435 ]
  %418 = getelementptr inbounds float, ptr %33, i64 %.9672
  %419 = load float, ptr %418, align 4, !tbaa !9
  %420 = fcmp ogt float %419, %99
  %421 = getelementptr float, ptr %416, i64 %.9672
  %422 = load float, ptr %421, align 4, !tbaa !9
  %423 = fcmp oge float %422, 0.000000e+00
  %424 = fneg float %422
  %425 = select i1 %423, float %422, float %424
  br i1 %420, label %426, label %428

426:                                              ; preds = %417
  %427 = fdiv float %425, %419
  br label %435

428:                                              ; preds = %417
  %429 = fpext float %425 to double
  %430 = fadd double %101, %429
  %431 = fadd float %98, %419
  %432 = fpext float %431 to double
  %433 = fdiv double %430, %432
  %434 = fptrunc double %433 to float
  br label %435

435:                                              ; preds = %426, %428
  %.sink765 = phi float [ %427, %426 ], [ %434, %428 ]
  %436 = fcmp oge float %.4483673, %.sink765
  %437 = select i1 %436, float %.4483673, float %.sink765
  %438 = add nuw i64 %.9672, 1
  %exitcond739.not = icmp eq i64 %.9672, %117
  br i1 %exitcond739.not, label %._crit_edge676, label %417, !llvm.loop !61

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

._crit_edge676:                                   ; preds = %435
  %440 = getelementptr inbounds float, ptr %32, i64 %.1494706
  store float %437, ptr %440, align 4, !tbaa !9
  br i1 %.not520570, label %._crit_edge682, label %.lr.ph681

.lr.ph681:                                        ; preds = %._crit_edge676
  %441 = getelementptr float, ptr %33, i64 %117
  %min.iters.check802 = icmp ult i64 %117, 4
  br i1 %min.iters.check802, label %scalar.ph801.preheader, label %vector.ph803

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

vector.body808:                                   ; preds = %vector.body808, %vector.ph803
  %index809 = phi i64 [ 0, %vector.ph803 ], [ %index.next817, %vector.body808 ]
  %offset.idx810 = or disjoint i64 %index809, 1
  %442 = getelementptr float, ptr %12, i64 %index809
  %wide.load811 = load <4 x float>, ptr %442, align 4, !tbaa !9
  %443 = fcmp ogt <4 x float> %wide.load811, %broadcast.splat
  %444 = getelementptr float, ptr %441, i64 %offset.idx810
  %wide.load812 = load <4 x float>, ptr %444, align 4, !tbaa !9
  %445 = fcmp oge <4 x float> %wide.load812, zeroinitializer
  %446 = fneg <4 x float> %wide.load812
  %447 = select <4 x i1> %445, <4 x float> %wide.load812, <4 x float> %446
  %448 = fpext <4 x float> %447 to <4 x double>
  %449 = fmul <4 x float> %broadcast.splat814, %wide.load811
  %450 = fpext <4 x float> %449 to <4 x double>
  %451 = fadd <4 x double> %450, %448
  %452 = fadd <4 x double> %451, %broadcast.splat816
  %453 = select <4 x i1> %443, <4 x double> %451, <4 x double> %452
  %454 = fptrunc <4 x double> %453 to <4 x float>
  store <4 x float> %454, ptr %442, align 4, !tbaa !9
  %index.next817 = add nuw i64 %index809, 4
  %455 = icmp eq i64 %index.next817, %n.vec805
  br i1 %455, label %middle.block800, label %vector.body808, !llvm.loop !62

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

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

scalar.ph801:                                     ; preds = %scalar.ph801.preheader, %scalar.ph801
  %.10679 = phi i64 [ %469, %scalar.ph801 ], [ %.10679.ph, %scalar.ph801.preheader ]
  %456 = getelementptr inbounds float, ptr %33, i64 %.10679
  %457 = load float, ptr %456, align 4, !tbaa !9
  %458 = fcmp ogt float %457, %99
  %459 = getelementptr float, ptr %441, i64 %.10679
  %460 = load float, ptr %459, align 4, !tbaa !9
  %461 = fcmp oge float %460, 0.000000e+00
  %462 = fneg float %460
  %463 = select i1 %461, float %460, float %462
  %464 = fpext float %463 to double
  %465 = fmul float %102, %457
  %466 = fpext float %465 to double
  %467 = fadd double %466, %464
  %468 = fadd double %467, %101
  %storemerge546.in = select i1 %458, double %467, double %468
  %storemerge546 = fptrunc double %storemerge546.in to float
  store float %storemerge546, ptr %456, align 4, !tbaa !9
  %469 = add nuw i64 %.10679, 1
  %exitcond740.not = icmp eq i64 %.10679, %117
  br i1 %exitcond740.not, label %._crit_edge682, label %scalar.ph801, !llvm.loop !63

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

.loopexit551:                                     ; preds = %.loopexit551.backedge, %._crit_edge682
  %471 = phi i64 [ %117, %._crit_edge682 ], [ %.be, %.loopexit551.backedge ]
  %.idx = shl i64 %471, 3
  %472 = getelementptr i8, ptr %12, i64 %.idx
  %473 = getelementptr float, ptr %12, i64 %471
  %474 = call i32 @slacn2_(ptr noundef nonnull %3, ptr noundef %472, ptr noundef %473, ptr noundef %13, ptr noundef nonnull %470, ptr noundef nonnull %21, ptr noundef nonnull %22) #5
  %475 = load i64, ptr %21, align 8, !tbaa !5
  %476 = load i64, ptr %3, align 8, !tbaa !5
  switch i64 %475, label %495 [
    i64 0, label %512
    i64 1, label %477
  ]

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

.lr.ph686:                                        ; preds = %477
  %481 = getelementptr float, ptr %33, i64 %480
  %min.iters.check785 = icmp ult i64 %480, 8
  br i1 %min.iters.check785, label %scalar.ph784.preheader, label %vector.ph786

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

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

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

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

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

scalar.ph784:                                     ; preds = %scalar.ph784.preheader, %scalar.ph784
  %.11684 = phi i64 [ %494, %scalar.ph784 ], [ %.11684.ph, %scalar.ph784.preheader ]
  %489 = getelementptr inbounds float, ptr %33, i64 %.11684
  %490 = load float, ptr %489, align 4, !tbaa !9
  %491 = getelementptr float, ptr %481, i64 %.11684
  %492 = load float, ptr %491, align 4, !tbaa !9
  %493 = fmul float %490, %492
  store float %493, ptr %491, align 4, !tbaa !9
  %494 = add nuw i64 %.11684, 1
  %exitcond741.not = icmp eq i64 %.11684, %480
  br i1 %exitcond741.not, label %.loopexit551.backedge, label %scalar.ph784, !llvm.loop !65

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

.lr.ph690:                                        ; preds = %495
  %496 = getelementptr float, ptr %33, i64 %476
  %min.iters.check = icmp ult i64 %476, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

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

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

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

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.12688 = phi i64 [ %509, %scalar.ph ], [ %.12688.ph, %scalar.ph.preheader ]
  %504 = getelementptr inbounds float, ptr %33, i64 %.12688
  %505 = load float, ptr %504, align 4, !tbaa !9
  %506 = getelementptr float, ptr %496, i64 %.12688
  %507 = load float, ptr %506, align 4, !tbaa !9
  %508 = fmul float %505, %507
  store float %508, ptr %506, align 4, !tbaa !9
  %509 = add nuw i64 %.12688, 1
  %exitcond742.not = icmp eq i64 %.12688, %476
  br i1 %exitcond742.not, label %._crit_edge691, label %scalar.ph, !llvm.loop !67

._crit_edge691:                                   ; preds = %scalar.ph, %middle.block, %495
  %510 = getelementptr float, ptr %12, i64 %476
  %511 = call i32 @f2c_stpsv(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %5, ptr noundef %510, ptr noundef nonnull @c__1) #5
  %.pre745.pre = load i64, ptr %3, align 8, !tbaa !5
  br label %.loopexit551.backedge

512:                                              ; preds = %.loopexit551
  %invariant.gep692 = getelementptr float, ptr %30, i64 %107
  %.not543694 = icmp slt i64 %476, 1
  br i1 %.not543694, label %._crit_edge699.thread, label %.lr.ph698.preheader

.lr.ph698.preheader:                              ; preds = %512
  %xtraiter982 = and i64 %476, 1
  %513 = icmp eq i64 %476, 1
  br i1 %513, label %._crit_edge699.unr-lcssa, label %.lr.ph698.preheader.new

.lr.ph698.preheader.new:                          ; preds = %.lr.ph698.preheader
  %unroll_iter = and i64 %476, 9223372036854775806
  %invariant.gep1001 = getelementptr i8, ptr %invariant.gep692, i64 4
  br label %.lr.ph698

.lr.ph698:                                        ; preds = %.lr.ph698, %.lr.ph698.preheader.new
  %.0696 = phi float [ 0.000000e+00, %.lr.ph698.preheader.new ], [ %525, %.lr.ph698 ]
  %.13695 = phi i64 [ 1, %.lr.ph698.preheader.new ], [ %526, %.lr.ph698 ]
  %niter = phi i64 [ 0, %.lr.ph698.preheader.new ], [ %niter.next.1, %.lr.ph698 ]
  %gep693 = getelementptr float, ptr %invariant.gep692, i64 %.13695
  %514 = load float, ptr %gep693, align 4, !tbaa !9
  %515 = fcmp oge float %514, 0.000000e+00
  %516 = fneg float %514
  %517 = select i1 %515, float %514, float %516
  %518 = fcmp oge float %.0696, %517
  %519 = select i1 %518, float %.0696, float %517
  %gep1002 = getelementptr float, ptr %invariant.gep1001, i64 %.13695
  %520 = load float, ptr %gep1002, align 4, !tbaa !9
  %521 = fcmp oge float %520, 0.000000e+00
  %522 = fneg float %520
  %523 = select i1 %521, float %520, float %522
  %524 = fcmp oge float %519, %523
  %525 = select i1 %524, float %519, float %523
  %526 = add nuw i64 %.13695, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge699.unr-lcssa, label %.lr.ph698, !llvm.loop !68

._crit_edge699.unr-lcssa:                         ; preds = %.lr.ph698, %.lr.ph698.preheader
  %.lcssa981.ph = phi float [ poison, %.lr.ph698.preheader ], [ %525, %.lr.ph698 ]
  %.0696.unr = phi float [ 0.000000e+00, %.lr.ph698.preheader ], [ %525, %.lr.ph698 ]
  %.13695.unr = phi i64 [ 1, %.lr.ph698.preheader ], [ %526, %.lr.ph698 ]
  %lcmp.mod983.not = icmp eq i64 %xtraiter982, 0
  br i1 %lcmp.mod983.not, label %._crit_edge699, label %.lr.ph698.epil

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

._crit_edge699:                                   ; preds = %._crit_edge699.unr-lcssa, %.lr.ph698.epil
  %.lcssa981 = phi float [ %.lcssa981.ph, %._crit_edge699.unr-lcssa ], [ %532, %.lr.ph698.epil ]
  %533 = fcmp une float %.lcssa981, 0.000000e+00
  br i1 %533, label %534, label %._crit_edge699.thread

534:                                              ; preds = %._crit_edge699
  %535 = load float, ptr %470, align 4, !tbaa !9
  %536 = fdiv float %535, %.lcssa981
  store float %536, ptr %470, align 4, !tbaa !9
  br label %._crit_edge699.thread

._crit_edge699.thread:                            ; preds = %512, %._crit_edge699, %534
  %537 = add nuw nsw i64 %.1494706, 1
  %.not519.not = icmp slt i64 %.1494706, %100
  %indvar.next932 = add i64 %indvar931, 1
  br i1 %.not519.not, label %105, label %.loopexit, !llvm.loop !69

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

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

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

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

declare double @slamch_(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.unroll.disable"}
!17 = distinct !{!17, !12, !13}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !12, !13, !14}
!20 = distinct !{!20, !12, !13}
!21 = !{!22}
!22 = distinct !{!22, !23}
!23 = distinct !{!23, !"LVerDomain"}
!24 = !{!25}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !12, !13, !14}
!27 = distinct !{!27, !12, !13}
!28 = distinct !{!28, !12}
!29 = !{!30}
!30 = distinct !{!30, !31}
!31 = distinct !{!31, !"LVerDomain"}
!32 = !{!33}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !12, !13, !14}
!35 = distinct !{!35, !12, !13}
!36 = distinct !{!36, !12}
!37 = !{!38}
!38 = distinct !{!38, !39}
!39 = distinct !{!39, !"LVerDomain"}
!40 = !{!41}
!41 = distinct !{!41, !39}
!42 = distinct !{!42, !12, !13, !14}
!43 = distinct !{!43, !12, !13}
!44 = distinct !{!44, !12}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = !{!49}
!49 = distinct !{!49, !47}
!50 = distinct !{!50, !12, !13, !14}
!51 = distinct !{!51, !12, !13}
!52 = distinct !{!52, !12}
!53 = distinct !{!53, !12}
!54 = distinct !{!54, !12}
!55 = distinct !{!55, !12}
!56 = distinct !{!56, !12}
!57 = distinct !{!57, !12}
!58 = distinct !{!58, !12}
!59 = distinct !{!59, !12}
!60 = distinct !{!60, !12}
!61 = distinct !{!61, !12}
!62 = distinct !{!62, !12, !13, !14}
!63 = distinct !{!63, !12, !14, !13}
!64 = distinct !{!64, !12, !13, !14}
!65 = distinct !{!65, !12, !14, !13}
!66 = distinct !{!66, !12, !13, !14}
!67 = distinct !{!67, !12, !14, !13}
!68 = distinct !{!68, !12}
!69 = distinct !{!69, !12}


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