; LLVM IR from InsightSoftwareConsortium/ITK :: Modules/ThirdParty/VNL/src/vxl/v3p/netlib/sparse (spUtils)

; 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"

%struct.MatrixFrame = type { double, i32, i32, i32, i32, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i32, i32, ptr, ptr, i64, ptr, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i8, i32, double, i32, i32, i32, i32, i32, i32, %struct.MatrixElement, ptr, i32, ptr, i32, ptr, i32, ptr, ptr }
%struct.MatrixElement = type { double, i32, i32, ptr, ptr, ptr }

@stdout = external global ptr, align 8
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [122 x i8], align 1
@spcMatrixIsNotValid = external global [0 x i8], align 1
@spcErrorsMustBeCleared = external global [0 x i8], align 1
@spcMatrixMustBeFactored = external global [0 x i8], align 1

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

declare i32 @fflush(ptr noundef) #1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: noreturn nounwind
declare void @abort() #3

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

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

; Function Attrs: nounwind uwtable
define dso_local double @spCondition(ptr noundef %0, double noundef %1, ptr noundef %2) #5 {
  %4 = alloca double, align 8
  %5 = alloca ptr, align 8
  %6 = alloca double, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store double %1, ptr %6, align 8, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %33 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %33, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %34 = load ptr, ptr %8, align 8, !tbaa !5
  %35 = icmp ne ptr %34, null
  br i1 %35, label %36, label %41

36:                                               ; preds = %3
  %37 = load ptr, ptr %8, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.MatrixFrame, ptr %37, i32 0, i32 17
  %39 = load i64, ptr %38, align 8, !tbaa !11
  %40 = icmp eq i64 %39, 3735928559
  br i1 %40, label %48, label %41

41:                                               ; preds = %36, %3
  %42 = load ptr, ptr @stdout, align 8, !tbaa !5
  %43 = call i32 @fflush(ptr noundef %42)
  %44 = load ptr, ptr @stderr, align 8, !tbaa !5
  %45 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %44, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1465, ptr noundef @spcMatrixIsNotValid) #7
  %46 = load ptr, ptr @stderr, align 8, !tbaa !5
  %47 = call i32 @fflush(ptr noundef %46)
  call void @abort() #8
  unreachable

48:                                               ; preds = %36
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.MatrixFrame, ptr %49, i32 0, i32 9
  %51 = load i32, ptr %50, align 4, !tbaa !16
  %52 = icmp sge i32 %51, 0
  br i1 %52, label %53, label %58

53:                                               ; preds = %48
  %54 = load ptr, ptr %8, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.MatrixFrame, ptr %54, i32 0, i32 9
  %56 = load i32, ptr %55, align 4, !tbaa !16
  %57 = icmp slt i32 %56, 2
  br i1 %57, label %65, label %58

58:                                               ; preds = %53, %48
  %59 = load ptr, ptr @stdout, align 8, !tbaa !5
  %60 = call i32 @fflush(ptr noundef %59)
  %61 = load ptr, ptr @stderr, align 8, !tbaa !5
  %62 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1466, ptr noundef @spcErrorsMustBeCleared) #7
  %63 = load ptr, ptr @stderr, align 8, !tbaa !5
  %64 = call i32 @fflush(ptr noundef %63)
  call void @abort() #8
  unreachable

65:                                               ; preds = %53
  %66 = load ptr, ptr %8, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.MatrixFrame, ptr %66, i32 0, i32 13
  %68 = load i32, ptr %67, align 8, !tbaa !17
  %69 = icmp ne i32 %68, 0
  br i1 %69, label %70, label %75

70:                                               ; preds = %65
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.MatrixFrame, ptr %71, i32 0, i32 26
  %73 = load i32, ptr %72, align 4, !tbaa !18
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %75, label %82

75:                                               ; preds = %70, %65
  %76 = load ptr, ptr @stdout, align 8, !tbaa !5
  %77 = call i32 @fflush(ptr noundef %76)
  %78 = load ptr, ptr @stderr, align 8, !tbaa !5
  %79 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %78, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1467, ptr noundef @spcMatrixMustBeFactored) #7
  %80 = load ptr, ptr @stderr, align 8, !tbaa !5
  %81 = call i32 @fflush(ptr noundef %80)
  call void @abort() #8
  unreachable

82:                                               ; preds = %70
  %83 = load ptr, ptr %8, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.MatrixFrame, ptr %83, i32 0, i32 9
  %85 = load i32, ptr %84, align 4, !tbaa !16
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 %85, ptr %86, align 4, !tbaa !19
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.MatrixFrame, ptr %87, i32 0, i32 9
  %89 = load i32, ptr %88, align 4, !tbaa !16
  %90 = icmp sge i32 %89, 2
  br i1 %90, label %91, label %92

91:                                               ; preds = %82
  store double 0.000000e+00, ptr %4, align 8
  store i32 1, ptr %32, align 4
  br label %1124

92:                                               ; preds = %82
  %93 = load double, ptr %6, align 8, !tbaa !9
  %94 = fcmp oeq double %93, 0.000000e+00
  br i1 %94, label %95, label %97

95:                                               ; preds = %92
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 3, ptr %96, align 4, !tbaa !19
  store double 0.000000e+00, ptr %4, align 8
  store i32 1, ptr %32, align 4
  br label %1124

97:                                               ; preds = %92
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.MatrixFrame, ptr %98, i32 0, i32 39
  %100 = load i32, ptr %99, align 4, !tbaa !20
  store i32 %100, ptr %16, align 4, !tbaa !19
  %101 = load ptr, ptr %8, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.MatrixFrame, ptr %101, i32 0, i32 18
  %103 = load ptr, ptr %102, align 8, !tbaa !21
  store ptr %103, ptr %10, align 8, !tbaa !5
  %104 = load i32, ptr %16, align 4, !tbaa !19
  %105 = add nsw i32 %104, 1
  %106 = sext i32 %105 to i64
  %107 = mul i64 8, %106
  %108 = trunc i64 %107 to i32
  %109 = zext i32 %108 to i64
  %110 = call ptr @malloc(i64 noundef %109) #9
  store ptr %110, ptr %11, align 8, !tbaa !5
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  %112 = icmp eq ptr %111, null
  br i1 %112, label %113, label %115

113:                                              ; preds = %97
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 5, ptr %114, align 4, !tbaa !19
  store double 0.000000e+00, ptr %4, align 8
  store i32 1, ptr %32, align 4
  br label %1124

115:                                              ; preds = %97
  %116 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %116, ptr %12, align 4, !tbaa !19
  br label %117

117:                                              ; preds = %125, %115
  %118 = load i32, ptr %12, align 4, !tbaa !19
  %119 = icmp sgt i32 %118, 0
  br i1 %119, label %120, label %128

120:                                              ; preds = %117
  %121 = load ptr, ptr %10, align 8, !tbaa !5
  %122 = load i32, ptr %12, align 4, !tbaa !19
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %121, i64 %123
  store double 0.000000e+00, ptr %124, align 8, !tbaa !9
  br label %125

125:                                              ; preds = %120
  %126 = load i32, ptr %12, align 4, !tbaa !19
  %127 = add nsw i32 %126, -1
  store i32 %127, ptr %12, align 4, !tbaa !19
  br label %117, !llvm.loop !22

128:                                              ; preds = %117
  store double 1.000000e+00, ptr %17, align 8, !tbaa !9
  store i32 1, ptr %12, align 4, !tbaa !19
  br label %129

129:                                              ; preds = %424, %128
  %130 = load i32, ptr %12, align 4, !tbaa !19
  %131 = load i32, ptr %16, align 4, !tbaa !19
  %132 = icmp sle i32 %130, %131
  br i1 %132, label %133, label %427

133:                                              ; preds = %129
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.MatrixFrame, ptr %134, i32 0, i32 5
  %136 = load ptr, ptr %135, align 8, !tbaa !24
  %137 = load i32, ptr %12, align 4, !tbaa !19
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds ptr, ptr %136, i64 %138
  %140 = load ptr, ptr %139, align 8, !tbaa !5
  store ptr %140, ptr %15, align 8, !tbaa !5
  %141 = load ptr, ptr %10, align 8, !tbaa !5
  %142 = load i32, ptr %12, align 4, !tbaa !19
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds double, ptr %141, i64 %143
  %145 = load double, ptr %144, align 8, !tbaa !9
  %146 = fcmp olt double %145, 0.000000e+00
  br i1 %146, label %147, label %150

147:                                              ; preds = %133
  %148 = load double, ptr %17, align 8, !tbaa !9
  %149 = fneg double %148
  store double %149, ptr %18, align 8, !tbaa !9
  br label %152

150:                                              ; preds = %133
  %151 = load double, ptr %17, align 8, !tbaa !9
  store double %151, ptr %18, align 8, !tbaa !9
  br label %152

152:                                              ; preds = %150, %147
  %153 = load double, ptr %18, align 8, !tbaa !9
  %154 = load ptr, ptr %10, align 8, !tbaa !5
  %155 = load i32, ptr %12, align 4, !tbaa !19
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds double, ptr %154, i64 %156
  %158 = load double, ptr %157, align 8, !tbaa !9
  %159 = fadd double %153, %158
  %160 = load ptr, ptr %15, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.MatrixElement, ptr %160, i32 0, i32 0
  %162 = load double, ptr %161, align 8, !tbaa !25
  %163 = fmul double %159, %162
  store double %163, ptr %20, align 8, !tbaa !9
  %164 = load double, ptr %20, align 8, !tbaa !9
  %165 = fcmp olt double %164, 0.000000e+00
  br i1 %165, label %166, label %169

166:                                              ; preds = %152
  %167 = load double, ptr %20, align 8, !tbaa !9
  %168 = fneg double %167
  br label %171

169:                                              ; preds = %152
  %170 = load double, ptr %20, align 8, !tbaa !9
  br label %171

171:                                              ; preds = %169, %166
  %172 = phi double [ %168, %166 ], [ %170, %169 ]
  %173 = fcmp ogt double %172, 1.000000e+04
  br i1 %173, label %174, label %232

174:                                              ; preds = %171
  %175 = load double, ptr %20, align 8, !tbaa !9
  %176 = fcmp olt double %175, 0.000000e+00
  br i1 %176, label %177, label %180

177:                                              ; preds = %174
  %178 = load double, ptr %20, align 8, !tbaa !9
  %179 = fneg double %178
  br label %182

180:                                              ; preds = %174
  %181 = load double, ptr %20, align 8, !tbaa !9
  br label %182

182:                                              ; preds = %180, %177
  %183 = phi double [ %179, %177 ], [ %181, %180 ]
  %184 = fcmp ogt double 1.000000e+08, %183
  br i1 %184, label %185, label %186

185:                                              ; preds = %182
  br label %196

186:                                              ; preds = %182
  %187 = load double, ptr %20, align 8, !tbaa !9
  %188 = fcmp olt double %187, 0.000000e+00
  br i1 %188, label %189, label %192

189:                                              ; preds = %186
  %190 = load double, ptr %20, align 8, !tbaa !9
  %191 = fneg double %190
  br label %194

192:                                              ; preds = %186
  %193 = load double, ptr %20, align 8, !tbaa !9
  br label %194

194:                                              ; preds = %192, %189
  %195 = phi double [ %191, %189 ], [ %193, %192 ]
  br label %196

196:                                              ; preds = %194, %185
  %197 = phi double [ 1.000000e+08, %185 ], [ %195, %194 ]
  %198 = fdiv double 1.000000e+00, %197
  store double %198, ptr %28, align 8, !tbaa !9
  %199 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %199, ptr %13, align 4, !tbaa !19
  br label %200

200:                                              ; preds = %211, %196
  %201 = load i32, ptr %13, align 4, !tbaa !19
  %202 = icmp sgt i32 %201, 0
  br i1 %202, label %203, label %214

203:                                              ; preds = %200
  %204 = load double, ptr %28, align 8, !tbaa !9
  %205 = load ptr, ptr %10, align 8, !tbaa !5
  %206 = load i32, ptr %13, align 4, !tbaa !19
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds double, ptr %205, i64 %207
  %209 = load double, ptr %208, align 8, !tbaa !9
  %210 = fmul double %209, %204
  store double %210, ptr %208, align 8, !tbaa !9
  br label %211

211:                                              ; preds = %203
  %212 = load i32, ptr %13, align 4, !tbaa !19
  %213 = add nsw i32 %212, -1
  store i32 %213, ptr %13, align 4, !tbaa !19
  br label %200, !llvm.loop !26

214:                                              ; preds = %200
  %215 = load double, ptr %28, align 8, !tbaa !9
  %216 = load double, ptr %17, align 8, !tbaa !9
  %217 = fmul double %216, %215
  store double %217, ptr %17, align 8, !tbaa !9
  %218 = load double, ptr %28, align 8, !tbaa !9
  %219 = load double, ptr %18, align 8, !tbaa !9
  %220 = fmul double %219, %218
  store double %220, ptr %18, align 8, !tbaa !9
  %221 = load double, ptr %18, align 8, !tbaa !9
  %222 = load ptr, ptr %10, align 8, !tbaa !5
  %223 = load i32, ptr %12, align 4, !tbaa !19
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %222, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !9
  %227 = fadd double %221, %226
  %228 = load ptr, ptr %15, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.MatrixElement, ptr %228, i32 0, i32 0
  %230 = load double, ptr %229, align 8, !tbaa !25
  %231 = fmul double %227, %230
  store double %231, ptr %20, align 8, !tbaa !9
  br label %232

232:                                              ; preds = %214, %171
  %233 = load ptr, ptr %10, align 8, !tbaa !5
  %234 = load i32, ptr %12, align 4, !tbaa !19
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds double, ptr %233, i64 %235
  %237 = load double, ptr %236, align 8, !tbaa !9
  %238 = load double, ptr %18, align 8, !tbaa !9
  %239 = fsub double %237, %238
  %240 = load ptr, ptr %15, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.MatrixElement, ptr %240, i32 0, i32 0
  %242 = load double, ptr %241, align 8, !tbaa !25
  %243 = fmul double %239, %242
  store double %243, ptr %19, align 8, !tbaa !9
  %244 = load ptr, ptr %10, align 8, !tbaa !5
  %245 = load i32, ptr %12, align 4, !tbaa !19
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds double, ptr %244, i64 %246
  %248 = load double, ptr %247, align 8, !tbaa !9
  %249 = load double, ptr %18, align 8, !tbaa !9
  %250 = fsub double %248, %249
  %251 = fcmp olt double %250, 0.000000e+00
  br i1 %251, label %252, label %261

252:                                              ; preds = %232
  %253 = load ptr, ptr %10, align 8, !tbaa !5
  %254 = load i32, ptr %12, align 4, !tbaa !19
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds double, ptr %253, i64 %255
  %257 = load double, ptr %256, align 8, !tbaa !9
  %258 = load double, ptr %18, align 8, !tbaa !9
  %259 = fsub double %257, %258
  %260 = fneg double %259
  br label %269

261:                                              ; preds = %232
  %262 = load ptr, ptr %10, align 8, !tbaa !5
  %263 = load i32, ptr %12, align 4, !tbaa !19
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds double, ptr %262, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !9
  %267 = load double, ptr %18, align 8, !tbaa !9
  %268 = fsub double %266, %267
  br label %269

269:                                              ; preds = %261, %252
  %270 = phi double [ %260, %252 ], [ %268, %261 ]
  store double %270, ptr %21, align 8, !tbaa !9
  %271 = load double, ptr %18, align 8, !tbaa !9
  %272 = load ptr, ptr %10, align 8, !tbaa !5
  %273 = load i32, ptr %12, align 4, !tbaa !19
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds double, ptr %272, i64 %274
  %276 = load double, ptr %275, align 8, !tbaa !9
  %277 = fadd double %271, %276
  %278 = fcmp olt double %277, 0.000000e+00
  br i1 %278, label %279, label %288

279:                                              ; preds = %269
  %280 = load double, ptr %18, align 8, !tbaa !9
  %281 = load ptr, ptr %10, align 8, !tbaa !5
  %282 = load i32, ptr %12, align 4, !tbaa !19
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %281, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !9
  %286 = fadd double %280, %285
  %287 = fneg double %286
  br label %296

288:                                              ; preds = %269
  %289 = load double, ptr %18, align 8, !tbaa !9
  %290 = load ptr, ptr %10, align 8, !tbaa !5
  %291 = load i32, ptr %12, align 4, !tbaa !19
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %290, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !9
  %295 = fadd double %289, %294
  br label %296

296:                                              ; preds = %288, %279
  %297 = phi double [ %287, %279 ], [ %295, %288 ]
  store double %297, ptr %22, align 8, !tbaa !9
  %298 = load ptr, ptr %15, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.MatrixElement, ptr %298, i32 0, i32 4
  %300 = load ptr, ptr %299, align 8, !tbaa !27
  store ptr %300, ptr %9, align 8, !tbaa !5
  br label %301

301:                                              ; preds = %376, %296
  %302 = load ptr, ptr %9, align 8, !tbaa !5
  %303 = icmp ne ptr %302, null
  br i1 %303, label %304, label %383

304:                                              ; preds = %301
  %305 = load ptr, ptr %9, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.MatrixElement, ptr %305, i32 0, i32 1
  %307 = load i32, ptr %306, align 8, !tbaa !28
  store i32 %307, ptr %14, align 4, !tbaa !19
  %308 = load ptr, ptr %10, align 8, !tbaa !5
  %309 = load i32, ptr %14, align 4, !tbaa !19
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds double, ptr %308, i64 %310
  %312 = load double, ptr %311, align 8, !tbaa !9
  %313 = load double, ptr %20, align 8, !tbaa !9
  %314 = load ptr, ptr %9, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.MatrixElement, ptr %314, i32 0, i32 0
  %316 = load double, ptr %315, align 8, !tbaa !25
  %317 = fneg double %313
  %318 = call double @llvm.fmuladd.f64(double %317, double %316, double %312)
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = load i32, ptr %14, align 4, !tbaa !19
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds double, ptr %319, i64 %321
  store double %318, ptr %322, align 8, !tbaa !9
  %323 = load double, ptr %19, align 8, !tbaa !9
  %324 = load ptr, ptr %9, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.MatrixElement, ptr %324, i32 0, i32 0
  %326 = load double, ptr %325, align 8, !tbaa !25
  %327 = load ptr, ptr %10, align 8, !tbaa !5
  %328 = load i32, ptr %14, align 4, !tbaa !19
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds double, ptr %327, i64 %329
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = fneg double %323
  %333 = call double @llvm.fmuladd.f64(double %332, double %326, double %331)
  store double %333, ptr %330, align 8, !tbaa !9
  %334 = load ptr, ptr %10, align 8, !tbaa !5
  %335 = load i32, ptr %14, align 4, !tbaa !19
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds double, ptr %334, i64 %336
  %338 = load double, ptr %337, align 8, !tbaa !9
  %339 = fcmp olt double %338, 0.000000e+00
  br i1 %339, label %340, label %347

340:                                              ; preds = %304
  %341 = load ptr, ptr %10, align 8, !tbaa !5
  %342 = load i32, ptr %14, align 4, !tbaa !19
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds double, ptr %341, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !9
  %346 = fneg double %345
  br label %353

347:                                              ; preds = %304
  %348 = load ptr, ptr %10, align 8, !tbaa !5
  %349 = load i32, ptr %14, align 4, !tbaa !19
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds double, ptr %348, i64 %350
  %352 = load double, ptr %351, align 8, !tbaa !9
  br label %353

353:                                              ; preds = %347, %340
  %354 = phi double [ %346, %340 ], [ %352, %347 ]
  %355 = load double, ptr %21, align 8, !tbaa !9
  %356 = fadd double %355, %354
  store double %356, ptr %21, align 8, !tbaa !9
  %357 = load ptr, ptr %11, align 8, !tbaa !5
  %358 = load i32, ptr %14, align 4, !tbaa !19
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds double, ptr %357, i64 %359
  %361 = load double, ptr %360, align 8, !tbaa !9
  %362 = fcmp olt double %361, 0.000000e+00
  br i1 %362, label %363, label %370

363:                                              ; preds = %353
  %364 = load ptr, ptr %11, align 8, !tbaa !5
  %365 = load i32, ptr %14, align 4, !tbaa !19
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds double, ptr %364, i64 %366
  %368 = load double, ptr %367, align 8, !tbaa !9
  %369 = fneg double %368
  br label %376

370:                                              ; preds = %353
  %371 = load ptr, ptr %11, align 8, !tbaa !5
  %372 = load i32, ptr %14, align 4, !tbaa !19
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds double, ptr %371, i64 %373
  %375 = load double, ptr %374, align 8, !tbaa !9
  br label %376

376:                                              ; preds = %370, %363
  %377 = phi double [ %369, %363 ], [ %375, %370 ]
  %378 = load double, ptr %22, align 8, !tbaa !9
  %379 = fadd double %378, %377
  store double %379, ptr %22, align 8, !tbaa !9
  %380 = load ptr, ptr %9, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.MatrixElement, ptr %380, i32 0, i32 4
  %382 = load ptr, ptr %381, align 8, !tbaa !27
  store ptr %382, ptr %9, align 8, !tbaa !5
  br label %301, !llvm.loop !29

383:                                              ; preds = %301
  %384 = load double, ptr %22, align 8, !tbaa !9
  %385 = load double, ptr %21, align 8, !tbaa !9
  %386 = fcmp ogt double %384, %385
  br i1 %386, label %387, label %417

387:                                              ; preds = %383
  %388 = load double, ptr %20, align 8, !tbaa !9
  %389 = load ptr, ptr %10, align 8, !tbaa !5
  %390 = load i32, ptr %12, align 4, !tbaa !19
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds double, ptr %389, i64 %391
  store double %388, ptr %392, align 8, !tbaa !9
  %393 = load ptr, ptr %15, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.MatrixElement, ptr %393, i32 0, i32 4
  %395 = load ptr, ptr %394, align 8, !tbaa !27
  store ptr %395, ptr %9, align 8, !tbaa !5
  br label %396

396:                                              ; preds = %399, %387
  %397 = load ptr, ptr %9, align 8, !tbaa !5
  %398 = icmp ne ptr %397, null
  br i1 %398, label %399, label %416

399:                                              ; preds = %396
  %400 = load ptr, ptr %11, align 8, !tbaa !5
  %401 = load ptr, ptr %9, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.MatrixElement, ptr %401, i32 0, i32 1
  %403 = load i32, ptr %402, align 8, !tbaa !28
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds double, ptr %400, i64 %404
  %406 = load double, ptr %405, align 8, !tbaa !9
  %407 = load ptr, ptr %10, align 8, !tbaa !5
  %408 = load ptr, ptr %9, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.MatrixElement, ptr %408, i32 0, i32 1
  %410 = load i32, ptr %409, align 8, !tbaa !28
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds double, ptr %407, i64 %411
  store double %406, ptr %412, align 8, !tbaa !9
  %413 = load ptr, ptr %9, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.MatrixElement, ptr %413, i32 0, i32 4
  %415 = load ptr, ptr %414, align 8, !tbaa !27
  store ptr %415, ptr %9, align 8, !tbaa !5
  br label %396, !llvm.loop !30

416:                                              ; preds = %396
  br label %423

417:                                              ; preds = %383
  %418 = load double, ptr %19, align 8, !tbaa !9
  %419 = load ptr, ptr %10, align 8, !tbaa !5
  %420 = load i32, ptr %12, align 4, !tbaa !19
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds double, ptr %419, i64 %421
  store double %418, ptr %422, align 8, !tbaa !9
  br label %423

423:                                              ; preds = %417, %416
  br label %424

424:                                              ; preds = %423
  %425 = load i32, ptr %12, align 4, !tbaa !19
  %426 = add nsw i32 %425, 1
  store i32 %426, ptr %12, align 4, !tbaa !19
  br label %129, !llvm.loop !31

427:                                              ; preds = %129
  store double 0.000000e+00, ptr %23, align 8, !tbaa !9
  %428 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %428, ptr %12, align 4, !tbaa !19
  br label %429

429:                                              ; preds = %456, %427
  %430 = load i32, ptr %12, align 4, !tbaa !19
  %431 = icmp sgt i32 %430, 0
  br i1 %431, label %432, label %459

432:                                              ; preds = %429
  %433 = load ptr, ptr %10, align 8, !tbaa !5
  %434 = load i32, ptr %12, align 4, !tbaa !19
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds double, ptr %433, i64 %435
  %437 = load double, ptr %436, align 8, !tbaa !9
  %438 = fcmp olt double %437, 0.000000e+00
  br i1 %438, label %439, label %446

439:                                              ; preds = %432
  %440 = load ptr, ptr %10, align 8, !tbaa !5
  %441 = load i32, ptr %12, align 4, !tbaa !19
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds double, ptr %440, i64 %442
  %444 = load double, ptr %443, align 8, !tbaa !9
  %445 = fneg double %444
  br label %452

446:                                              ; preds = %432
  %447 = load ptr, ptr %10, align 8, !tbaa !5
  %448 = load i32, ptr %12, align 4, !tbaa !19
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %447, i64 %449
  %451 = load double, ptr %450, align 8, !tbaa !9
  br label %452

452:                                              ; preds = %446, %439
  %453 = phi double [ %445, %439 ], [ %451, %446 ]
  %454 = load double, ptr %23, align 8, !tbaa !9
  %455 = fadd double %454, %453
  store double %455, ptr %23, align 8, !tbaa !9
  br label %456

456:                                              ; preds = %452
  %457 = load i32, ptr %12, align 4, !tbaa !19
  %458 = add nsw i32 %457, -1
  store i32 %458, ptr %12, align 4, !tbaa !19
  br label %429, !llvm.loop !32

459:                                              ; preds = %429
  %460 = load double, ptr %23, align 8, !tbaa !9
  %461 = fmul double 1.000000e+04, %460
  %462 = fdiv double 1.000000e+00, %461
  store double %462, ptr %28, align 8, !tbaa !9
  %463 = load double, ptr %28, align 8, !tbaa !9
  %464 = fcmp olt double %463, 5.000000e-01
  br i1 %464, label %465, label %485

465:                                              ; preds = %459
  %466 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %466, ptr %12, align 4, !tbaa !19
  br label %467

467:                                              ; preds = %478, %465
  %468 = load i32, ptr %12, align 4, !tbaa !19
  %469 = icmp sgt i32 %468, 0
  br i1 %469, label %470, label %481

470:                                              ; preds = %467
  %471 = load double, ptr %28, align 8, !tbaa !9
  %472 = load ptr, ptr %10, align 8, !tbaa !5
  %473 = load i32, ptr %12, align 4, !tbaa !19
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds double, ptr %472, i64 %474
  %476 = load double, ptr %475, align 8, !tbaa !9
  %477 = fmul double %476, %471
  store double %477, ptr %475, align 8, !tbaa !9
  br label %478

478:                                              ; preds = %470
  %479 = load i32, ptr %12, align 4, !tbaa !19
  %480 = add nsw i32 %479, -1
  store i32 %480, ptr %12, align 4, !tbaa !19
  br label %467, !llvm.loop !33

481:                                              ; preds = %467
  %482 = load double, ptr %28, align 8, !tbaa !9
  %483 = load double, ptr %17, align 8, !tbaa !9
  %484 = fmul double %483, %482
  store double %484, ptr %17, align 8, !tbaa !9
  br label %485

485:                                              ; preds = %481, %459
  %486 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %486, ptr %12, align 4, !tbaa !19
  br label %487

487:                                              ; preds = %616, %485
  %488 = load i32, ptr %12, align 4, !tbaa !19
  %489 = icmp sge i32 %488, 1
  br i1 %489, label %490, label %619

490:                                              ; preds = %487
  %491 = load ptr, ptr %8, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.MatrixFrame, ptr %491, i32 0, i32 5
  %493 = load ptr, ptr %492, align 8, !tbaa !24
  %494 = load i32, ptr %12, align 4, !tbaa !19
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds ptr, ptr %493, i64 %495
  %497 = load ptr, ptr %496, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.MatrixElement, ptr %497, i32 0, i32 3
  %499 = load ptr, ptr %498, align 8, !tbaa !34
  store ptr %499, ptr %9, align 8, !tbaa !5
  br label %500

500:                                              ; preds = %503, %490
  %501 = load ptr, ptr %9, align 8, !tbaa !5
  %502 = icmp ne ptr %501, null
  br i1 %502, label %503, label %524

503:                                              ; preds = %500
  %504 = load ptr, ptr %9, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.MatrixElement, ptr %504, i32 0, i32 0
  %506 = load double, ptr %505, align 8, !tbaa !25
  %507 = load ptr, ptr %10, align 8, !tbaa !5
  %508 = load ptr, ptr %9, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.MatrixElement, ptr %508, i32 0, i32 2
  %510 = load i32, ptr %509, align 4, !tbaa !35
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds double, ptr %507, i64 %511
  %513 = load double, ptr %512, align 8, !tbaa !9
  %514 = load ptr, ptr %10, align 8, !tbaa !5
  %515 = load i32, ptr %12, align 4, !tbaa !19
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds double, ptr %514, i64 %516
  %518 = load double, ptr %517, align 8, !tbaa !9
  %519 = fneg double %506
  %520 = call double @llvm.fmuladd.f64(double %519, double %513, double %518)
  store double %520, ptr %517, align 8, !tbaa !9
  %521 = load ptr, ptr %9, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.MatrixElement, ptr %521, i32 0, i32 3
  %523 = load ptr, ptr %522, align 8, !tbaa !34
  store ptr %523, ptr %9, align 8, !tbaa !5
  br label %500, !llvm.loop !36

524:                                              ; preds = %500
  %525 = load ptr, ptr %10, align 8, !tbaa !5
  %526 = load i32, ptr %12, align 4, !tbaa !19
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds double, ptr %525, i64 %527
  %529 = load double, ptr %528, align 8, !tbaa !9
  %530 = fcmp olt double %529, 0.000000e+00
  br i1 %530, label %531, label %538

531:                                              ; preds = %524
  %532 = load ptr, ptr %10, align 8, !tbaa !5
  %533 = load i32, ptr %12, align 4, !tbaa !19
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds double, ptr %532, i64 %534
  %536 = load double, ptr %535, align 8, !tbaa !9
  %537 = fneg double %536
  br label %544

538:                                              ; preds = %524
  %539 = load ptr, ptr %10, align 8, !tbaa !5
  %540 = load i32, ptr %12, align 4, !tbaa !19
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds double, ptr %539, i64 %541
  %543 = load double, ptr %542, align 8, !tbaa !9
  br label %544

544:                                              ; preds = %538, %531
  %545 = phi double [ %537, %531 ], [ %543, %538 ]
  %546 = fcmp ogt double %545, 1.000000e+04
  br i1 %546, label %547, label %615

547:                                              ; preds = %544
  %548 = load ptr, ptr %10, align 8, !tbaa !5
  %549 = load i32, ptr %12, align 4, !tbaa !19
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds double, ptr %548, i64 %550
  %552 = load double, ptr %551, align 8, !tbaa !9
  %553 = fcmp olt double %552, 0.000000e+00
  br i1 %553, label %554, label %561

554:                                              ; preds = %547
  %555 = load ptr, ptr %10, align 8, !tbaa !5
  %556 = load i32, ptr %12, align 4, !tbaa !19
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds double, ptr %555, i64 %557
  %559 = load double, ptr %558, align 8, !tbaa !9
  %560 = fneg double %559
  br label %567

561:                                              ; preds = %547
  %562 = load ptr, ptr %10, align 8, !tbaa !5
  %563 = load i32, ptr %12, align 4, !tbaa !19
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds double, ptr %562, i64 %564
  %566 = load double, ptr %565, align 8, !tbaa !9
  br label %567

567:                                              ; preds = %561, %554
  %568 = phi double [ %560, %554 ], [ %566, %561 ]
  %569 = fcmp ogt double 1.000000e+08, %568
  br i1 %569, label %570, label %571

570:                                              ; preds = %567
  br label %593

571:                                              ; preds = %567
  %572 = load ptr, ptr %10, align 8, !tbaa !5
  %573 = load i32, ptr %12, align 4, !tbaa !19
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds double, ptr %572, i64 %574
  %576 = load double, ptr %575, align 8, !tbaa !9
  %577 = fcmp olt double %576, 0.000000e+00
  br i1 %577, label %578, label %585

578:                                              ; preds = %571
  %579 = load ptr, ptr %10, align 8, !tbaa !5
  %580 = load i32, ptr %12, align 4, !tbaa !19
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds double, ptr %579, i64 %581
  %583 = load double, ptr %582, align 8, !tbaa !9
  %584 = fneg double %583
  br label %591

585:                                              ; preds = %571
  %586 = load ptr, ptr %10, align 8, !tbaa !5
  %587 = load i32, ptr %12, align 4, !tbaa !19
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds double, ptr %586, i64 %588
  %590 = load double, ptr %589, align 8, !tbaa !9
  br label %591

591:                                              ; preds = %585, %578
  %592 = phi double [ %584, %578 ], [ %590, %585 ]
  br label %593

593:                                              ; preds = %591, %570
  %594 = phi double [ 1.000000e+08, %570 ], [ %592, %591 ]
  %595 = fdiv double 1.000000e+00, %594
  store double %595, ptr %28, align 8, !tbaa !9
  %596 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %596, ptr %13, align 4, !tbaa !19
  br label %597

597:                                              ; preds = %608, %593
  %598 = load i32, ptr %13, align 4, !tbaa !19
  %599 = icmp sgt i32 %598, 0
  br i1 %599, label %600, label %611

600:                                              ; preds = %597
  %601 = load double, ptr %28, align 8, !tbaa !9
  %602 = load ptr, ptr %10, align 8, !tbaa !5
  %603 = load i32, ptr %13, align 4, !tbaa !19
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds double, ptr %602, i64 %604
  %606 = load double, ptr %605, align 8, !tbaa !9
  %607 = fmul double %606, %601
  store double %607, ptr %605, align 8, !tbaa !9
  br label %608

608:                                              ; preds = %600
  %609 = load i32, ptr %13, align 4, !tbaa !19
  %610 = add nsw i32 %609, -1
  store i32 %610, ptr %13, align 4, !tbaa !19
  br label %597, !llvm.loop !37

611:                                              ; preds = %597
  %612 = load double, ptr %28, align 8, !tbaa !9
  %613 = load double, ptr %17, align 8, !tbaa !9
  %614 = fmul double %613, %612
  store double %614, ptr %17, align 8, !tbaa !9
  br label %615

615:                                              ; preds = %611, %544
  br label %616

616:                                              ; preds = %615
  %617 = load i32, ptr %12, align 4, !tbaa !19
  %618 = add nsw i32 %617, -1
  store i32 %618, ptr %12, align 4, !tbaa !19
  br label %487, !llvm.loop !38

619:                                              ; preds = %487
  store double 0.000000e+00, ptr %24, align 8, !tbaa !9
  %620 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %620, ptr %12, align 4, !tbaa !19
  br label %621

621:                                              ; preds = %648, %619
  %622 = load i32, ptr %12, align 4, !tbaa !19
  %623 = icmp sgt i32 %622, 0
  br i1 %623, label %624, label %651

624:                                              ; preds = %621
  %625 = load ptr, ptr %10, align 8, !tbaa !5
  %626 = load i32, ptr %12, align 4, !tbaa !19
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds double, ptr %625, i64 %627
  %629 = load double, ptr %628, align 8, !tbaa !9
  %630 = fcmp olt double %629, 0.000000e+00
  br i1 %630, label %631, label %638

631:                                              ; preds = %624
  %632 = load ptr, ptr %10, align 8, !tbaa !5
  %633 = load i32, ptr %12, align 4, !tbaa !19
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds double, ptr %632, i64 %634
  %636 = load double, ptr %635, align 8, !tbaa !9
  %637 = fneg double %636
  br label %644

638:                                              ; preds = %624
  %639 = load ptr, ptr %10, align 8, !tbaa !5
  %640 = load i32, ptr %12, align 4, !tbaa !19
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds double, ptr %639, i64 %641
  %643 = load double, ptr %642, align 8, !tbaa !9
  br label %644

644:                                              ; preds = %638, %631
  %645 = phi double [ %637, %631 ], [ %643, %638 ]
  %646 = load double, ptr %24, align 8, !tbaa !9
  %647 = fadd double %646, %645
  store double %647, ptr %24, align 8, !tbaa !9
  br label %648

648:                                              ; preds = %644
  %649 = load i32, ptr %12, align 4, !tbaa !19
  %650 = add nsw i32 %649, -1
  store i32 %650, ptr %12, align 4, !tbaa !19
  br label %621, !llvm.loop !39

651:                                              ; preds = %621
  %652 = load double, ptr %24, align 8, !tbaa !9
  %653 = fmul double 1.000000e+04, %652
  %654 = fdiv double 1.000000e+00, %653
  store double %654, ptr %28, align 8, !tbaa !9
  %655 = load double, ptr %28, align 8, !tbaa !9
  %656 = fcmp olt double %655, 5.000000e-01
  br i1 %656, label %657, label %677

657:                                              ; preds = %651
  %658 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %658, ptr %12, align 4, !tbaa !19
  br label %659

659:                                              ; preds = %670, %657
  %660 = load i32, ptr %12, align 4, !tbaa !19
  %661 = icmp sgt i32 %660, 0
  br i1 %661, label %662, label %673

662:                                              ; preds = %659
  %663 = load double, ptr %28, align 8, !tbaa !9
  %664 = load ptr, ptr %10, align 8, !tbaa !5
  %665 = load i32, ptr %12, align 4, !tbaa !19
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds double, ptr %664, i64 %666
  %668 = load double, ptr %667, align 8, !tbaa !9
  %669 = fmul double %668, %663
  store double %669, ptr %667, align 8, !tbaa !9
  br label %670

670:                                              ; preds = %662
  %671 = load i32, ptr %12, align 4, !tbaa !19
  %672 = add nsw i32 %671, -1
  store i32 %672, ptr %12, align 4, !tbaa !19
  br label %659, !llvm.loop !40

673:                                              ; preds = %659
  store double 1.000000e-04, ptr %24, align 8, !tbaa !9
  %674 = load double, ptr %28, align 8, !tbaa !9
  %675 = load double, ptr %17, align 8, !tbaa !9
  %676 = fmul double %675, %674
  store double %676, ptr %17, align 8, !tbaa !9
  br label %677

677:                                              ; preds = %673, %651
  store double 0.000000e+00, ptr %27, align 8, !tbaa !9
  %678 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %678, ptr %12, align 4, !tbaa !19
  br label %679

679:                                              ; preds = %729, %677
  %680 = load i32, ptr %12, align 4, !tbaa !19
  %681 = icmp sgt i32 %680, 0
  br i1 %681, label %682, label %732

682:                                              ; preds = %679
  %683 = load double, ptr %27, align 8, !tbaa !9
  %684 = load ptr, ptr %10, align 8, !tbaa !5
  %685 = load i32, ptr %12, align 4, !tbaa !19
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds double, ptr %684, i64 %686
  %688 = load double, ptr %687, align 8, !tbaa !9
  %689 = fcmp olt double %688, 0.000000e+00
  br i1 %689, label %690, label %697

690:                                              ; preds = %682
  %691 = load ptr, ptr %10, align 8, !tbaa !5
  %692 = load i32, ptr %12, align 4, !tbaa !19
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds double, ptr %691, i64 %693
  %695 = load double, ptr %694, align 8, !tbaa !9
  %696 = fneg double %695
  br label %703

697:                                              ; preds = %682
  %698 = load ptr, ptr %10, align 8, !tbaa !5
  %699 = load i32, ptr %12, align 4, !tbaa !19
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds double, ptr %698, i64 %700
  %702 = load double, ptr %701, align 8, !tbaa !9
  br label %703

703:                                              ; preds = %697, %690
  %704 = phi double [ %696, %690 ], [ %702, %697 ]
  %705 = fcmp olt double %683, %704
  br i1 %705, label %706, label %728

706:                                              ; preds = %703
  %707 = load ptr, ptr %10, align 8, !tbaa !5
  %708 = load i32, ptr %12, align 4, !tbaa !19
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds double, ptr %707, i64 %709
  %711 = load double, ptr %710, align 8, !tbaa !9
  %712 = fcmp olt double %711, 0.000000e+00
  br i1 %712, label %713, label %720

713:                                              ; preds = %706
  %714 = load ptr, ptr %10, align 8, !tbaa !5
  %715 = load i32, ptr %12, align 4, !tbaa !19
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds double, ptr %714, i64 %716
  %718 = load double, ptr %717, align 8, !tbaa !9
  %719 = fneg double %718
  br label %726

720:                                              ; preds = %706
  %721 = load ptr, ptr %10, align 8, !tbaa !5
  %722 = load i32, ptr %12, align 4, !tbaa !19
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds double, ptr %721, i64 %723
  %725 = load double, ptr %724, align 8, !tbaa !9
  br label %726

726:                                              ; preds = %720, %713
  %727 = phi double [ %719, %713 ], [ %725, %720 ]
  store double %727, ptr %27, align 8, !tbaa !9
  br label %728

728:                                              ; preds = %726, %703
  br label %729

729:                                              ; preds = %728
  %730 = load i32, ptr %12, align 4, !tbaa !19
  %731 = add nsw i32 %730, -1
  store i32 %731, ptr %12, align 4, !tbaa !19
  br label %679, !llvm.loop !41

732:                                              ; preds = %679
  store i32 1, ptr %12, align 4, !tbaa !19
  br label %733

733:                                              ; preds = %863, %732
  %734 = load i32, ptr %12, align 4, !tbaa !19
  %735 = load i32, ptr %16, align 4, !tbaa !19
  %736 = icmp sle i32 %734, %735
  br i1 %736, label %737, label %866

737:                                              ; preds = %733
  %738 = load ptr, ptr %8, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.MatrixFrame, ptr %738, i32 0, i32 5
  %740 = load ptr, ptr %739, align 8, !tbaa !24
  %741 = load i32, ptr %12, align 4, !tbaa !19
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds ptr, ptr %740, i64 %742
  %744 = load ptr, ptr %743, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.MatrixElement, ptr %744, i32 0, i32 3
  %746 = load ptr, ptr %745, align 8, !tbaa !34
  store ptr %746, ptr %9, align 8, !tbaa !5
  br label %747

747:                                              ; preds = %750, %737
  %748 = load ptr, ptr %9, align 8, !tbaa !5
  %749 = icmp ne ptr %748, null
  br i1 %749, label %750, label %771

750:                                              ; preds = %747
  %751 = load ptr, ptr %10, align 8, !tbaa !5
  %752 = load i32, ptr %12, align 4, !tbaa !19
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds double, ptr %751, i64 %753
  %755 = load double, ptr %754, align 8, !tbaa !9
  %756 = load ptr, ptr %9, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.MatrixElement, ptr %756, i32 0, i32 0
  %758 = load double, ptr %757, align 8, !tbaa !25
  %759 = load ptr, ptr %10, align 8, !tbaa !5
  %760 = load ptr, ptr %9, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.MatrixElement, ptr %760, i32 0, i32 2
  %762 = load i32, ptr %761, align 4, !tbaa !35
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds double, ptr %759, i64 %763
  %765 = load double, ptr %764, align 8, !tbaa !9
  %766 = fneg double %755
  %767 = call double @llvm.fmuladd.f64(double %766, double %758, double %765)
  store double %767, ptr %764, align 8, !tbaa !9
  %768 = load ptr, ptr %9, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.MatrixElement, ptr %768, i32 0, i32 3
  %770 = load ptr, ptr %769, align 8, !tbaa !34
  store ptr %770, ptr %9, align 8, !tbaa !5
  br label %747, !llvm.loop !42

771:                                              ; preds = %747
  %772 = load ptr, ptr %10, align 8, !tbaa !5
  %773 = load i32, ptr %12, align 4, !tbaa !19
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds double, ptr %772, i64 %774
  %776 = load double, ptr %775, align 8, !tbaa !9
  %777 = fcmp olt double %776, 0.000000e+00
  br i1 %777, label %778, label %785

778:                                              ; preds = %771
  %779 = load ptr, ptr %10, align 8, !tbaa !5
  %780 = load i32, ptr %12, align 4, !tbaa !19
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds double, ptr %779, i64 %781
  %783 = load double, ptr %782, align 8, !tbaa !9
  %784 = fneg double %783
  br label %791

785:                                              ; preds = %771
  %786 = load ptr, ptr %10, align 8, !tbaa !5
  %787 = load i32, ptr %12, align 4, !tbaa !19
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds double, ptr %786, i64 %788
  %790 = load double, ptr %789, align 8, !tbaa !9
  br label %791

791:                                              ; preds = %785, %778
  %792 = phi double [ %784, %778 ], [ %790, %785 ]
  %793 = fcmp ogt double %792, 1.000000e+04
  br i1 %793, label %794, label %862

794:                                              ; preds = %791
  %795 = load ptr, ptr %10, align 8, !tbaa !5
  %796 = load i32, ptr %12, align 4, !tbaa !19
  %797 = sext i32 %796 to i64
  %798 = getelementptr inbounds double, ptr %795, i64 %797
  %799 = load double, ptr %798, align 8, !tbaa !9
  %800 = fcmp olt double %799, 0.000000e+00
  br i1 %800, label %801, label %808

801:                                              ; preds = %794
  %802 = load ptr, ptr %10, align 8, !tbaa !5
  %803 = load i32, ptr %12, align 4, !tbaa !19
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds double, ptr %802, i64 %804
  %806 = load double, ptr %805, align 8, !tbaa !9
  %807 = fneg double %806
  br label %814

808:                                              ; preds = %794
  %809 = load ptr, ptr %10, align 8, !tbaa !5
  %810 = load i32, ptr %12, align 4, !tbaa !19
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds double, ptr %809, i64 %811
  %813 = load double, ptr %812, align 8, !tbaa !9
  br label %814

814:                                              ; preds = %808, %801
  %815 = phi double [ %807, %801 ], [ %813, %808 ]
  %816 = fcmp ogt double 1.000000e+08, %815
  br i1 %816, label %817, label %818

817:                                              ; preds = %814
  br label %840

818:                                              ; preds = %814
  %819 = load ptr, ptr %10, align 8, !tbaa !5
  %820 = load i32, ptr %12, align 4, !tbaa !19
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds double, ptr %819, i64 %821
  %823 = load double, ptr %822, align 8, !tbaa !9
  %824 = fcmp olt double %823, 0.000000e+00
  br i1 %824, label %825, label %832

825:                                              ; preds = %818
  %826 = load ptr, ptr %10, align 8, !tbaa !5
  %827 = load i32, ptr %12, align 4, !tbaa !19
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds double, ptr %826, i64 %828
  %830 = load double, ptr %829, align 8, !tbaa !9
  %831 = fneg double %830
  br label %838

832:                                              ; preds = %818
  %833 = load ptr, ptr %10, align 8, !tbaa !5
  %834 = load i32, ptr %12, align 4, !tbaa !19
  %835 = sext i32 %834 to i64
  %836 = getelementptr inbounds double, ptr %833, i64 %835
  %837 = load double, ptr %836, align 8, !tbaa !9
  br label %838

838:                                              ; preds = %832, %825
  %839 = phi double [ %831, %825 ], [ %837, %832 ]
  br label %840

840:                                              ; preds = %838, %817
  %841 = phi double [ 1.000000e+08, %817 ], [ %839, %838 ]
  %842 = fdiv double 1.000000e+00, %841
  store double %842, ptr %28, align 8, !tbaa !9
  %843 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %843, ptr %13, align 4, !tbaa !19
  br label %844

844:                                              ; preds = %855, %840
  %845 = load i32, ptr %13, align 4, !tbaa !19
  %846 = icmp sgt i32 %845, 0
  br i1 %846, label %847, label %858

847:                                              ; preds = %844
  %848 = load double, ptr %28, align 8, !tbaa !9
  %849 = load ptr, ptr %10, align 8, !tbaa !5
  %850 = load i32, ptr %13, align 4, !tbaa !19
  %851 = sext i32 %850 to i64
  %852 = getelementptr inbounds double, ptr %849, i64 %851
  %853 = load double, ptr %852, align 8, !tbaa !9
  %854 = fmul double %853, %848
  store double %854, ptr %852, align 8, !tbaa !9
  br label %855

855:                                              ; preds = %847
  %856 = load i32, ptr %13, align 4, !tbaa !19
  %857 = add nsw i32 %856, -1
  store i32 %857, ptr %13, align 4, !tbaa !19
  br label %844, !llvm.loop !43

858:                                              ; preds = %844
  %859 = load double, ptr %28, align 8, !tbaa !9
  %860 = load double, ptr %24, align 8, !tbaa !9
  %861 = fmul double %860, %859
  store double %861, ptr %24, align 8, !tbaa !9
  br label %862

862:                                              ; preds = %858, %791
  br label %863

863:                                              ; preds = %862
  %864 = load i32, ptr %12, align 4, !tbaa !19
  %865 = add nsw i32 %864, 1
  store i32 %865, ptr %12, align 4, !tbaa !19
  br label %733, !llvm.loop !44

866:                                              ; preds = %733
  store double 0.000000e+00, ptr %25, align 8, !tbaa !9
  %867 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %867, ptr %12, align 4, !tbaa !19
  br label %868

868:                                              ; preds = %895, %866
  %869 = load i32, ptr %12, align 4, !tbaa !19
  %870 = icmp sgt i32 %869, 0
  br i1 %870, label %871, label %898

871:                                              ; preds = %868
  %872 = load ptr, ptr %10, align 8, !tbaa !5
  %873 = load i32, ptr %12, align 4, !tbaa !19
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds double, ptr %872, i64 %874
  %876 = load double, ptr %875, align 8, !tbaa !9
  %877 = fcmp olt double %876, 0.000000e+00
  br i1 %877, label %878, label %885

878:                                              ; preds = %871
  %879 = load ptr, ptr %10, align 8, !tbaa !5
  %880 = load i32, ptr %12, align 4, !tbaa !19
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds double, ptr %879, i64 %881
  %883 = load double, ptr %882, align 8, !tbaa !9
  %884 = fneg double %883
  br label %891

885:                                              ; preds = %871
  %886 = load ptr, ptr %10, align 8, !tbaa !5
  %887 = load i32, ptr %12, align 4, !tbaa !19
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds double, ptr %886, i64 %888
  %890 = load double, ptr %889, align 8, !tbaa !9
  br label %891

891:                                              ; preds = %885, %878
  %892 = phi double [ %884, %878 ], [ %890, %885 ]
  %893 = load double, ptr %25, align 8, !tbaa !9
  %894 = fadd double %893, %892
  store double %894, ptr %25, align 8, !tbaa !9
  br label %895

895:                                              ; preds = %891
  %896 = load i32, ptr %12, align 4, !tbaa !19
  %897 = add nsw i32 %896, -1
  store i32 %897, ptr %12, align 4, !tbaa !19
  br label %868, !llvm.loop !45

898:                                              ; preds = %868
  %899 = load double, ptr %25, align 8, !tbaa !9
  %900 = fmul double 1.000000e+04, %899
  %901 = fdiv double 1.000000e+00, %900
  store double %901, ptr %28, align 8, !tbaa !9
  %902 = load double, ptr %28, align 8, !tbaa !9
  %903 = fcmp olt double %902, 5.000000e-01
  br i1 %903, label %904, label %924

904:                                              ; preds = %898
  %905 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %905, ptr %12, align 4, !tbaa !19
  br label %906

906:                                              ; preds = %917, %904
  %907 = load i32, ptr %12, align 4, !tbaa !19
  %908 = icmp sgt i32 %907, 0
  br i1 %908, label %909, label %920

909:                                              ; preds = %906
  %910 = load double, ptr %28, align 8, !tbaa !9
  %911 = load ptr, ptr %10, align 8, !tbaa !5
  %912 = load i32, ptr %12, align 4, !tbaa !19
  %913 = sext i32 %912 to i64
  %914 = getelementptr inbounds double, ptr %911, i64 %913
  %915 = load double, ptr %914, align 8, !tbaa !9
  %916 = fmul double %915, %910
  store double %916, ptr %914, align 8, !tbaa !9
  br label %917

917:                                              ; preds = %909
  %918 = load i32, ptr %12, align 4, !tbaa !19
  %919 = add nsw i32 %918, -1
  store i32 %919, ptr %12, align 4, !tbaa !19
  br label %906, !llvm.loop !46

920:                                              ; preds = %906
  %921 = load double, ptr %28, align 8, !tbaa !9
  %922 = load double, ptr %24, align 8, !tbaa !9
  %923 = fmul double %922, %921
  store double %923, ptr %24, align 8, !tbaa !9
  br label %924

924:                                              ; preds = %920, %898
  %925 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %925, ptr %12, align 4, !tbaa !19
  br label %926

926:                                              ; preds = %1065, %924
  %927 = load i32, ptr %12, align 4, !tbaa !19
  %928 = icmp sge i32 %927, 1
  br i1 %928, label %929, label %1068

929:                                              ; preds = %926
  %930 = load ptr, ptr %8, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.MatrixFrame, ptr %930, i32 0, i32 5
  %932 = load ptr, ptr %931, align 8, !tbaa !24
  %933 = load i32, ptr %12, align 4, !tbaa !19
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds ptr, ptr %932, i64 %934
  %936 = load ptr, ptr %935, align 8, !tbaa !5
  store ptr %936, ptr %15, align 8, !tbaa !5
  %937 = load ptr, ptr %15, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.MatrixElement, ptr %937, i32 0, i32 4
  %939 = load ptr, ptr %938, align 8, !tbaa !27
  store ptr %939, ptr %9, align 8, !tbaa !5
  br label %940

940:                                              ; preds = %943, %929
  %941 = load ptr, ptr %9, align 8, !tbaa !5
  %942 = icmp ne ptr %941, null
  br i1 %942, label %943, label %964

943:                                              ; preds = %940
  %944 = load ptr, ptr %9, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.MatrixElement, ptr %944, i32 0, i32 0
  %946 = load double, ptr %945, align 8, !tbaa !25
  %947 = load ptr, ptr %10, align 8, !tbaa !5
  %948 = load ptr, ptr %9, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.MatrixElement, ptr %948, i32 0, i32 1
  %950 = load i32, ptr %949, align 8, !tbaa !28
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds double, ptr %947, i64 %951
  %953 = load double, ptr %952, align 8, !tbaa !9
  %954 = load ptr, ptr %10, align 8, !tbaa !5
  %955 = load i32, ptr %12, align 4, !tbaa !19
  %956 = sext i32 %955 to i64
  %957 = getelementptr inbounds double, ptr %954, i64 %956
  %958 = load double, ptr %957, align 8, !tbaa !9
  %959 = fneg double %946
  %960 = call double @llvm.fmuladd.f64(double %959, double %953, double %958)
  store double %960, ptr %957, align 8, !tbaa !9
  %961 = load ptr, ptr %9, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.MatrixElement, ptr %961, i32 0, i32 4
  %963 = load ptr, ptr %962, align 8, !tbaa !27
  store ptr %963, ptr %9, align 8, !tbaa !5
  br label %940, !llvm.loop !47

964:                                              ; preds = %940
  %965 = load ptr, ptr %15, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.MatrixElement, ptr %965, i32 0, i32 0
  %967 = load double, ptr %966, align 8, !tbaa !25
  %968 = load ptr, ptr %10, align 8, !tbaa !5
  %969 = load i32, ptr %12, align 4, !tbaa !19
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds double, ptr %968, i64 %970
  %972 = load double, ptr %971, align 8, !tbaa !9
  %973 = fmul double %972, %967
  store double %973, ptr %971, align 8, !tbaa !9
  %974 = load ptr, ptr %10, align 8, !tbaa !5
  %975 = load i32, ptr %12, align 4, !tbaa !19
  %976 = sext i32 %975 to i64
  %977 = getelementptr inbounds double, ptr %974, i64 %976
  %978 = load double, ptr %977, align 8, !tbaa !9
  %979 = fcmp olt double %978, 0.000000e+00
  br i1 %979, label %980, label %987

980:                                              ; preds = %964
  %981 = load ptr, ptr %10, align 8, !tbaa !5
  %982 = load i32, ptr %12, align 4, !tbaa !19
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds double, ptr %981, i64 %983
  %985 = load double, ptr %984, align 8, !tbaa !9
  %986 = fneg double %985
  br label %993

987:                                              ; preds = %964
  %988 = load ptr, ptr %10, align 8, !tbaa !5
  %989 = load i32, ptr %12, align 4, !tbaa !19
  %990 = sext i32 %989 to i64
  %991 = getelementptr inbounds double, ptr %988, i64 %990
  %992 = load double, ptr %991, align 8, !tbaa !9
  br label %993

993:                                              ; preds = %987, %980
  %994 = phi double [ %986, %980 ], [ %992, %987 ]
  %995 = fcmp ogt double %994, 1.000000e+04
  br i1 %995, label %996, label %1064

996:                                              ; preds = %993
  %997 = load ptr, ptr %10, align 8, !tbaa !5
  %998 = load i32, ptr %12, align 4, !tbaa !19
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds double, ptr %997, i64 %999
  %1001 = load double, ptr %1000, align 8, !tbaa !9
  %1002 = fcmp olt double %1001, 0.000000e+00
  br i1 %1002, label %1003, label %1010

1003:                                             ; preds = %996
  %1004 = load ptr, ptr %10, align 8, !tbaa !5
  %1005 = load i32, ptr %12, align 4, !tbaa !19
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds double, ptr %1004, i64 %1006
  %1008 = load double, ptr %1007, align 8, !tbaa !9
  %1009 = fneg double %1008
  br label %1016

1010:                                             ; preds = %996
  %1011 = load ptr, ptr %10, align 8, !tbaa !5
  %1012 = load i32, ptr %12, align 4, !tbaa !19
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds double, ptr %1011, i64 %1013
  %1015 = load double, ptr %1014, align 8, !tbaa !9
  br label %1016

1016:                                             ; preds = %1010, %1003
  %1017 = phi double [ %1009, %1003 ], [ %1015, %1010 ]
  %1018 = fcmp ogt double 1.000000e+08, %1017
  br i1 %1018, label %1019, label %1020

1019:                                             ; preds = %1016
  br label %1042

1020:                                             ; preds = %1016
  %1021 = load ptr, ptr %10, align 8, !tbaa !5
  %1022 = load i32, ptr %12, align 4, !tbaa !19
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds double, ptr %1021, i64 %1023
  %1025 = load double, ptr %1024, align 8, !tbaa !9
  %1026 = fcmp olt double %1025, 0.000000e+00
  br i1 %1026, label %1027, label %1034

1027:                                             ; preds = %1020
  %1028 = load ptr, ptr %10, align 8, !tbaa !5
  %1029 = load i32, ptr %12, align 4, !tbaa !19
  %1030 = sext i32 %1029 to i64
  %1031 = getelementptr inbounds double, ptr %1028, i64 %1030
  %1032 = load double, ptr %1031, align 8, !tbaa !9
  %1033 = fneg double %1032
  br label %1040

1034:                                             ; preds = %1020
  %1035 = load ptr, ptr %10, align 8, !tbaa !5
  %1036 = load i32, ptr %12, align 4, !tbaa !19
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds double, ptr %1035, i64 %1037
  %1039 = load double, ptr %1038, align 8, !tbaa !9
  br label %1040

1040:                                             ; preds = %1034, %1027
  %1041 = phi double [ %1033, %1027 ], [ %1039, %1034 ]
  br label %1042

1042:                                             ; preds = %1040, %1019
  %1043 = phi double [ 1.000000e+08, %1019 ], [ %1041, %1040 ]
  %1044 = fdiv double 1.000000e+00, %1043
  store double %1044, ptr %28, align 8, !tbaa !9
  %1045 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %1045, ptr %13, align 4, !tbaa !19
  br label %1046

1046:                                             ; preds = %1057, %1042
  %1047 = load i32, ptr %13, align 4, !tbaa !19
  %1048 = icmp sgt i32 %1047, 0
  br i1 %1048, label %1049, label %1060

1049:                                             ; preds = %1046
  %1050 = load double, ptr %28, align 8, !tbaa !9
  %1051 = load ptr, ptr %10, align 8, !tbaa !5
  %1052 = load i32, ptr %13, align 4, !tbaa !19
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds double, ptr %1051, i64 %1053
  %1055 = load double, ptr %1054, align 8, !tbaa !9
  %1056 = fmul double %1055, %1050
  store double %1056, ptr %1054, align 8, !tbaa !9
  br label %1057

1057:                                             ; preds = %1049
  %1058 = load i32, ptr %13, align 4, !tbaa !19
  %1059 = add nsw i32 %1058, -1
  store i32 %1059, ptr %13, align 4, !tbaa !19
  br label %1046, !llvm.loop !48

1060:                                             ; preds = %1046
  %1061 = load double, ptr %28, align 8, !tbaa !9
  %1062 = load double, ptr %24, align 8, !tbaa !9
  %1063 = fmul double %1062, %1061
  store double %1063, ptr %24, align 8, !tbaa !9
  br label %1064

1064:                                             ; preds = %1060, %993
  br label %1065

1065:                                             ; preds = %1064
  %1066 = load i32, ptr %12, align 4, !tbaa !19
  %1067 = add nsw i32 %1066, -1
  store i32 %1067, ptr %12, align 4, !tbaa !19
  br label %926, !llvm.loop !49

1068:                                             ; preds = %926
  store double 0.000000e+00, ptr %26, align 8, !tbaa !9
  %1069 = load i32, ptr %16, align 4, !tbaa !19
  store i32 %1069, ptr %12, align 4, !tbaa !19
  br label %1070

1070:                                             ; preds = %1097, %1068
  %1071 = load i32, ptr %12, align 4, !tbaa !19
  %1072 = icmp sgt i32 %1071, 0
  br i1 %1072, label %1073, label %1100

1073:                                             ; preds = %1070
  %1074 = load ptr, ptr %10, align 8, !tbaa !5
  %1075 = load i32, ptr %12, align 4, !tbaa !19
  %1076 = sext i32 %1075 to i64
  %1077 = getelementptr inbounds double, ptr %1074, i64 %1076
  %1078 = load double, ptr %1077, align 8, !tbaa !9
  %1079 = fcmp olt double %1078, 0.000000e+00
  br i1 %1079, label %1080, label %1087

1080:                                             ; preds = %1073
  %1081 = load ptr, ptr %10, align 8, !tbaa !5
  %1082 = load i32, ptr %12, align 4, !tbaa !19
  %1083 = sext i32 %1082 to i64
  %1084 = getelementptr inbounds double, ptr %1081, i64 %1083
  %1085 = load double, ptr %1084, align 8, !tbaa !9
  %1086 = fneg double %1085
  br label %1093

1087:                                             ; preds = %1073
  %1088 = load ptr, ptr %10, align 8, !tbaa !5
  %1089 = load i32, ptr %12, align 4, !tbaa !19
  %1090 = sext i32 %1089 to i64
  %1091 = getelementptr inbounds double, ptr %1088, i64 %1090
  %1092 = load double, ptr %1091, align 8, !tbaa !9
  br label %1093

1093:                                             ; preds = %1087, %1080
  %1094 = phi double [ %1086, %1080 ], [ %1092, %1087 ]
  %1095 = load double, ptr %26, align 8, !tbaa !9
  %1096 = fadd double %1095, %1094
  store double %1096, ptr %26, align 8, !tbaa !9
  br label %1097

1097:                                             ; preds = %1093
  %1098 = load i32, ptr %12, align 4, !tbaa !19
  %1099 = add nsw i32 %1098, -1
  store i32 %1099, ptr %12, align 4, !tbaa !19
  br label %1070, !llvm.loop !50

1100:                                             ; preds = %1070
  %1101 = load ptr, ptr %11, align 8, !tbaa !5
  %1102 = icmp ne ptr %1101, null
  br i1 %1102, label %1103, label %1105

1103:                                             ; preds = %1100
  %1104 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %1104)
  br label %1105

1105:                                             ; preds = %1103, %1100
  store ptr null, ptr %11, align 8, !tbaa !5
  %1106 = load double, ptr %24, align 8, !tbaa !9
  %1107 = load double, ptr %26, align 8, !tbaa !9
  %1108 = fdiv double %1106, %1107
  store double %1108, ptr %29, align 8, !tbaa !9
  %1109 = load double, ptr %17, align 8, !tbaa !9
  %1110 = load double, ptr %27, align 8, !tbaa !9
  %1111 = fdiv double %1109, %1110
  store double %1111, ptr %30, align 8, !tbaa !9
  %1112 = load double, ptr %29, align 8, !tbaa !9
  %1113 = load double, ptr %30, align 8, !tbaa !9
  %1114 = fcmp olt double %1112, %1113
  br i1 %1114, label %1115, label %1117

1115:                                             ; preds = %1105
  %1116 = load double, ptr %29, align 8, !tbaa !9
  br label %1119

1117:                                             ; preds = %1105
  %1118 = load double, ptr %30, align 8, !tbaa !9
  br label %1119

1119:                                             ; preds = %1117, %1115
  %1120 = phi double [ %1116, %1115 ], [ %1118, %1117 ]
  store double %1120, ptr %31, align 8, !tbaa !9
  %1121 = load double, ptr %31, align 8, !tbaa !9
  %1122 = load double, ptr %6, align 8, !tbaa !9
  %1123 = fdiv double %1121, %1122
  store double %1123, ptr %4, align 8
  store i32 1, ptr %32, align 4
  br label %1124

1124:                                             ; preds = %1119, %113, %95, %91
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  %1125 = load double, ptr %4, align 8
  ret double %1125
}

; Function Attrs: allocsize(0)
declare ptr @malloc(i64 noundef) #6

declare void @free(ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 #2 = { nounwind "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 = { noreturn nounwind "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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { allocsize(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 #7 = { nounwind }
attributes #8 = { noreturn nounwind }
attributes #9 = { allocsize(0) }

!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 = !{!"double", !7, i64 0}
!11 = !{!12, !14, i64 104}
!12 = !{!"MatrixFrame", !10, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !13, i64 52, !13, i64 56, !6, i64 64, !6, i64 72, !13, i64 80, !13, i64 84, !6, i64 88, !6, i64 96, !14, i64 104, !6, i64 112, !13, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !13, i64 168, !13, i64 172, !13, i64 176, !13, i64 180, !13, i64 184, !13, i64 188, !7, i64 192, !13, i64 196, !10, i64 200, !13, i64 208, !13, i64 212, !13, i64 216, !13, i64 220, !13, i64 224, !13, i64 228, !15, i64 232, !6, i64 272, !13, i64 280, !6, i64 288, !13, i64 296, !6, i64 304, !13, i64 312, !6, i64 320, !6, i64 328}
!13 = !{!"int", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!"MatrixElement", !10, i64 0, !13, i64 8, !13, i64 12, !6, i64 16, !6, i64 24, !6, i64 32}
!16 = !{!12, !13, i64 52}
!17 = !{!12, !13, i64 80}
!18 = !{!12, !13, i64 172}
!19 = !{!13, !13, i64 0}
!20 = !{!12, !13, i64 228}
!21 = !{!12, !6, i64 112}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!12, !6, i64 24}
!25 = !{!15, !10, i64 0}
!26 = distinct !{!26, !23}
!27 = !{!15, !6, i64 24}
!28 = !{!15, !13, i64 8}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = !{!15, !6, i64 16}
!35 = !{!15, !13, i64 12}
!36 = distinct !{!36, !23}
!37 = distinct !{!37, !23}
!38 = distinct !{!38, !23}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}
!42 = distinct !{!42, !23}
!43 = distinct !{!43, !23}
!44 = distinct !{!44, !23}
!45 = distinct !{!45, !23}
!46 = distinct !{!46, !23}
!47 = distinct !{!47, !23}
!48 = distinct !{!48, !23}
!49 = distinct !{!49, !23}
!50 = distinct !{!50, !23}


; 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"

@stdout = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [122 x i8], align 1
@spcMatrixIsNotValid = external global [0 x i8], align 1
@spcErrorsMustBeCleared = external global [0 x i8], align 1
@spcMatrixMustBeFactored = external global [0 x i8], align 1

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #0

; Function Attrs: noreturn nounwind
declare void @abort() local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local double @spCondition(ptr noundef readonly %0, double noundef %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #3 {
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %8, label %4

4:                                                ; preds = %3
  %5 = getelementptr inbounds i8, ptr %0, i64 104
  %6 = load i64, ptr %5, align 8, !tbaa !5
  %7 = icmp eq i64 %6, 3735928559
  br i1 %7, label %15, label %8

8:                                                ; preds = %4, %3
  %9 = load ptr, ptr @stdout, align 8, !tbaa !14
  %10 = tail call i32 @fflush(ptr noundef %9)
  %11 = load ptr, ptr @stderr, align 8, !tbaa !14
  %12 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %11, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1465, ptr noundef nonnull @spcMatrixIsNotValid) #8
  %13 = load ptr, ptr @stderr, align 8, !tbaa !14
  %14 = tail call i32 @fflush(ptr noundef %13)
  tail call void @abort() #9
  unreachable

15:                                               ; preds = %4
  %16 = getelementptr inbounds i8, ptr %0, i64 52
  %17 = load i32, ptr %16, align 4, !tbaa !15
  %or.cond = icmp ult i32 %17, 2
  br i1 %or.cond, label %25, label %18

18:                                               ; preds = %15
  %19 = load ptr, ptr @stdout, align 8, !tbaa !14
  %20 = tail call i32 @fflush(ptr noundef %19)
  %21 = load ptr, ptr @stderr, align 8, !tbaa !14
  %22 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1466, ptr noundef nonnull @spcErrorsMustBeCleared) #8
  %23 = load ptr, ptr @stderr, align 8, !tbaa !14
  %24 = tail call i32 @fflush(ptr noundef %23)
  tail call void @abort() #9
  unreachable

25:                                               ; preds = %15
  %26 = getelementptr inbounds i8, ptr %0, i64 80
  %27 = load i32, ptr %26, align 8, !tbaa !16
  %.not420 = icmp eq i32 %27, 0
  br i1 %.not420, label %31, label %28

28:                                               ; preds = %25
  %29 = getelementptr inbounds i8, ptr %0, i64 172
  %30 = load i32, ptr %29, align 4, !tbaa !17
  %.not421 = icmp eq i32 %30, 0
  br i1 %.not421, label %38, label %31

31:                                               ; preds = %28, %25
  %32 = load ptr, ptr @stdout, align 8, !tbaa !14
  %33 = tail call i32 @fflush(ptr noundef %32)
  %34 = load ptr, ptr @stderr, align 8, !tbaa !14
  %35 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %34, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1467, ptr noundef nonnull @spcMatrixMustBeFactored) #8
  %36 = load ptr, ptr @stderr, align 8, !tbaa !14
  %37 = tail call i32 @fflush(ptr noundef %36)
  tail call void @abort() #9
  unreachable

38:                                               ; preds = %28
  store i32 %17, ptr %2, align 4, !tbaa !18
  %39 = load i32, ptr %16, align 4, !tbaa !15
  %40 = icmp sgt i32 %39, 1
  br i1 %40, label %425, label %41

41:                                               ; preds = %38
  %42 = fcmp oeq double %1, 0.000000e+00
  br i1 %42, label %43, label %44

43:                                               ; preds = %41
  store i32 3, ptr %2, align 4, !tbaa !18
  br label %425

44:                                               ; preds = %41
  %45 = getelementptr inbounds i8, ptr %0, i64 228
  %46 = load i32, ptr %45, align 4, !tbaa !19
  %47 = getelementptr inbounds i8, ptr %0, i64 112
  %48 = load ptr, ptr %47, align 8, !tbaa !20
  %49 = shl i32 %46, 3
  %50 = add i32 %49, 8
  %51 = zext i32 %50 to i64
  %52 = tail call ptr @malloc(i64 noundef %51) #10
  %53 = icmp eq ptr %52, null
  br i1 %53, label %55, label %.preheader446

.preheader446:                                    ; preds = %44
  %54 = icmp slt i32 %46, 1
  br i1 %54, label %._crit_edge472, label %.lr.ph467

55:                                               ; preds = %44
  store i32 5, ptr %2, align 4, !tbaa !18
  br label %425

.lr.ph467:                                        ; preds = %.preheader446
  %56 = zext nneg i32 %46 to i64
  %57 = shl nuw nsw i64 %56, 3
  %58 = add nsw i32 %46, -1
  %59 = zext nneg i32 %58 to i64
  %60 = sub nsw i64 %56, %59
  %61 = shl nsw i64 %60, 3
  %scevgep = getelementptr i8, ptr %48, i64 %61
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %57, i1 false), !tbaa !21
  %62 = getelementptr inbounds i8, ptr %0, i64 24
  %63 = load ptr, ptr %62, align 8, !tbaa !22
  %64 = zext nneg i32 %46 to i64
  %65 = add nuw i32 %46, 1
  %wide.trip.count = zext i32 %65 to i64
  %min.iters.check = icmp ult i32 %46, 4
  %n.vec = and i64 %64, 2147483644
  %ind.end = and i64 %64, 3
  %cmp.n = icmp eq i64 %n.vec, %64
  br label %74

.preheader444:                                    ; preds = %.loopexit
  br i1 %54, label %._crit_edge472, label %.lr.ph471.preheader

.lr.ph471.preheader:                              ; preds = %.preheader444
  %66 = zext nneg i32 %46 to i64
  %xtraiter = and i64 %64, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph471.prol.loopexit, label %.lr.ph471.prol

.lr.ph471.prol:                                   ; preds = %.lr.ph471.preheader
  %67 = getelementptr inbounds double, ptr %48, i64 %66
  %68 = load double, ptr %67, align 8, !tbaa !21
  %69 = fcmp olt double %68, 0.000000e+00
  %70 = fneg double %68
  %71 = select i1 %69, double %70, double %68
  %72 = fadd double %71, 0.000000e+00
  %indvars.iv.next563.prol = add nsw i64 %66, -1
  br label %.lr.ph471.prol.loopexit

.lr.ph471.prol.loopexit:                          ; preds = %.lr.ph471.prol, %.lr.ph471.preheader
  %indvars.iv562.unr = phi i64 [ %66, %.lr.ph471.preheader ], [ %indvars.iv.next563.prol, %.lr.ph471.prol ]
  %.0349470.unr = phi double [ 0.000000e+00, %.lr.ph471.preheader ], [ %72, %.lr.ph471.prol ]
  %.lcssa779.unr = phi double [ poison, %.lr.ph471.preheader ], [ %72, %.lr.ph471.prol ]
  %73 = icmp eq i32 %46, 1
  br i1 %73, label %._crit_edge472, label %.lr.ph471

74:                                               ; preds = %.lr.ph467, %.loopexit
  %indvars.iv559 = phi i64 [ 1, %.lr.ph467 ], [ %indvars.iv.next560, %.loopexit ]
  %.0362465 = phi double [ 1.000000e+00, %.lr.ph467 ], [ %.1363, %.loopexit ]
  %75 = getelementptr inbounds ptr, ptr %63, i64 %indvars.iv559
  %76 = load ptr, ptr %75, align 8, !tbaa !14
  %77 = getelementptr inbounds double, ptr %48, i64 %indvars.iv559
  %78 = load double, ptr %77, align 8, !tbaa !21
  %79 = fcmp olt double %78, 0.000000e+00
  %80 = fneg double %.0362465
  %.0360 = select i1 %79, double %80, double %.0362465
  %81 = fadd double %78, %.0360
  %82 = load double, ptr %76, align 8, !tbaa !23
  %83 = fmul double %82, %81
  %84 = fcmp olt double %83, 0.000000e+00
  %85 = fneg double %83
  %86 = select i1 %84, double %85, double %83
  %87 = fcmp ogt double %86, 1.000000e+04
  br i1 %87, label %.lr.ph449.preheader, label %105

.lr.ph449.preheader:                              ; preds = %74
  %88 = fcmp olt double %86, 1.000000e+08
  %89 = select i1 %88, double 1.000000e+08, double %86
  %90 = fdiv double 1.000000e+00, %89
  br i1 %min.iters.check, label %.lr.ph449.preheader780, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph449.preheader
  %broadcast.splatinsert = insertelement <2 x double> poison, double %90, i64 0
  %91 = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %92 = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = sub i64 %64, %index
  %93 = getelementptr inbounds double, ptr %48, i64 %offset.idx
  %94 = getelementptr inbounds i8, ptr %93, i64 -8
  %95 = getelementptr inbounds i8, ptr %93, i64 -24
  %wide.load = load <2 x double>, ptr %94, align 8, !tbaa !21
  %wide.load639 = load <2 x double>, ptr %95, align 8, !tbaa !21
  %reverse641 = fmul <2 x double> %91, %wide.load
  store <2 x double> %reverse641, ptr %94, align 8, !tbaa !21
  %reverse642 = fmul <2 x double> %92, %wide.load639
  store <2 x double> %reverse642, ptr %95, align 8, !tbaa !21
  %index.next = add nuw i64 %index, 4
  %96 = icmp eq i64 %index.next, %n.vec
  br i1 %96, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph449.preheader780

.lr.ph449.preheader780:                           ; preds = %middle.block, %.lr.ph449.preheader
  %indvars.iv.ph = phi i64 [ %64, %.lr.ph449.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph449

.lr.ph449:                                        ; preds = %.lr.ph449.preheader780, %.lr.ph449
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph449 ], [ %indvars.iv.ph, %.lr.ph449.preheader780 ]
  %97 = getelementptr inbounds double, ptr %48, i64 %indvars.iv
  %98 = load double, ptr %97, align 8, !tbaa !21
  %99 = fmul double %90, %98
  store double %99, ptr %97, align 8, !tbaa !21
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %100 = icmp sgt i64 %indvars.iv, 1
  br i1 %100, label %.lr.ph449, label %._crit_edge, !llvm.loop !28

._crit_edge:                                      ; preds = %.lr.ph449, %middle.block
  %.pre606 = load double, ptr %76, align 8, !tbaa !23
  %.pre = load double, ptr %77, align 8, !tbaa !21
  %101 = fmul double %.0362465, %90
  %102 = fmul double %.0360, %90
  %103 = fadd double %102, %.pre
  %104 = fmul double %103, %.pre606
  br label %105

105:                                              ; preds = %._crit_edge, %74
  %.pre-phi = phi double [ %103, %._crit_edge ], [ %81, %74 ]
  %106 = phi double [ %.pre606, %._crit_edge ], [ %82, %74 ]
  %107 = phi double [ %.pre, %._crit_edge ], [ %78, %74 ]
  %.1363 = phi double [ %101, %._crit_edge ], [ %.0362465, %74 ]
  %.1361 = phi double [ %102, %._crit_edge ], [ %.0360, %74 ]
  %.0352 = phi double [ %104, %._crit_edge ], [ %83, %74 ]
  %108 = fsub double %107, %.1361
  %109 = fmul double %108, %106
  %110 = insertelement <2 x double> poison, double %.pre-phi, i64 0
  %111 = insertelement <2 x double> %110, double %108, i64 1
  %112 = fcmp olt <2 x double> %111, zeroinitializer
  %113 = fneg <2 x double> %111
  %114 = select <2 x i1> %112, <2 x double> %113, <2 x double> %111
  %115 = getelementptr inbounds i8, ptr %76, i64 24
  %.0339450 = load ptr, ptr %115, align 8, !tbaa !29
  %.not429451 = icmp eq ptr %.0339450, null
  br i1 %.not429451, label %._crit_edge457.thread, label %.lr.ph456

.lr.ph456:                                        ; preds = %105
  %116 = insertelement <2 x double> poison, double %.0352, i64 0
  %117 = insertelement <2 x double> %116, double %109, i64 1
  %118 = fneg <2 x double> %117
  br label %119

119:                                              ; preds = %.lr.ph456, %119
  %.0339454 = phi ptr [ %.0339450, %.lr.ph456 ], [ %.0339, %119 ]
  %120 = phi <2 x double> [ %114, %.lr.ph456 ], [ %138, %119 ]
  %121 = getelementptr inbounds i8, ptr %.0339454, i64 8
  %122 = load i32, ptr %121, align 8, !tbaa !30
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %48, i64 %123
  %125 = load double, ptr %124, align 8, !tbaa !21
  %126 = load double, ptr %.0339454, align 8, !tbaa !23
  %127 = getelementptr inbounds double, ptr %52, i64 %123
  %128 = insertelement <2 x double> poison, double %126, i64 0
  %129 = shufflevector <2 x double> %128, <2 x double> poison, <2 x i32> zeroinitializer
  %130 = insertelement <2 x double> poison, double %125, i64 0
  %131 = shufflevector <2 x double> %130, <2 x double> poison, <2 x i32> zeroinitializer
  %132 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %118, <2 x double> %129, <2 x double> %131)
  %133 = extractelement <2 x double> %132, i64 0
  store double %133, ptr %127, align 8, !tbaa !21
  %134 = extractelement <2 x double> %132, i64 1
  store double %134, ptr %124, align 8, !tbaa !21
  %135 = fcmp olt <2 x double> %132, zeroinitializer
  %136 = fneg <2 x double> %132
  %137 = select <2 x i1> %135, <2 x double> %136, <2 x double> %132
  %138 = fadd <2 x double> %120, %137
  %139 = getelementptr inbounds i8, ptr %.0339454, i64 24
  %.0339 = load ptr, ptr %139, align 8, !tbaa !29
  %.not429 = icmp eq ptr %.0339, null
  br i1 %.not429, label %._crit_edge457, label %119, !llvm.loop !31

._crit_edge457:                                   ; preds = %119
  %140 = extractelement <2 x double> %138, i64 0
  %141 = extractelement <2 x double> %138, i64 1
  %142 = fcmp ogt double %140, %141
  br i1 %142, label %146, label %154

._crit_edge457.thread:                            ; preds = %105
  %143 = extractelement <2 x double> %114, i64 0
  %144 = extractelement <2 x double> %114, i64 1
  %145 = fcmp ogt double %143, %144
  br i1 %145, label %.loopexit.sink.split, label %154

146:                                              ; preds = %._crit_edge457
  store double %.0352, ptr %77, align 8, !tbaa !21
  br i1 %.not429451, label %.loopexit, label %.lr.ph463

.lr.ph463:                                        ; preds = %146, %.lr.ph463
  %.1461 = phi ptr [ %.1, %.lr.ph463 ], [ %.0339450, %146 ]
  %147 = getelementptr inbounds i8, ptr %.1461, i64 8
  %148 = load i32, ptr %147, align 8, !tbaa !30
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds double, ptr %52, i64 %149
  %151 = load double, ptr %150, align 8, !tbaa !21
  %152 = getelementptr inbounds double, ptr %48, i64 %149
  store double %151, ptr %152, align 8, !tbaa !21
  %153 = getelementptr inbounds i8, ptr %.1461, i64 24
  %.1 = load ptr, ptr %153, align 8, !tbaa !29
  %.not430 = icmp eq ptr %.1, null
  br i1 %.not430, label %.loopexit, label %.lr.ph463, !llvm.loop !32

154:                                              ; preds = %._crit_edge457.thread, %._crit_edge457
  br label %.loopexit.sink.split

.loopexit.sink.split:                             ; preds = %._crit_edge457.thread, %154
  %.0352.sink = phi double [ %109, %154 ], [ %.0352, %._crit_edge457.thread ]
  store double %.0352.sink, ptr %77, align 8, !tbaa !21
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph463, %.loopexit.sink.split, %146
  %indvars.iv.next560 = add nuw nsw i64 %indvars.iv559, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next560, %wide.trip.count
  br i1 %exitcond.not, label %.preheader444, label %74, !llvm.loop !33

.lr.ph471:                                        ; preds = %.lr.ph471.prol.loopexit, %.lr.ph471
  %indvars.iv562 = phi i64 [ %indvars.iv.next563.1, %.lr.ph471 ], [ %indvars.iv562.unr, %.lr.ph471.prol.loopexit ]
  %.0349470 = phi double [ %166, %.lr.ph471 ], [ %.0349470.unr, %.lr.ph471.prol.loopexit ]
  %155 = getelementptr inbounds double, ptr %48, i64 %indvars.iv562
  %156 = load double, ptr %155, align 8, !tbaa !21
  %157 = fcmp olt double %156, 0.000000e+00
  %158 = fneg double %156
  %159 = select i1 %157, double %158, double %156
  %160 = fadd double %.0349470, %159
  %indvars.iv.next563 = add nsw i64 %indvars.iv562, -1
  %161 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next563
  %162 = load double, ptr %161, align 8, !tbaa !21
  %163 = fcmp olt double %162, 0.000000e+00
  %164 = fneg double %162
  %165 = select i1 %163, double %164, double %162
  %166 = fadd double %160, %165
  %indvars.iv.next563.1 = add nsw i64 %indvars.iv562, -2
  %167 = icmp ugt i64 %indvars.iv.next563, 1
  br i1 %167, label %.lr.ph471, label %._crit_edge472, !llvm.loop !34

._crit_edge472:                                   ; preds = %.lr.ph471.prol.loopexit, %.lr.ph471, %.preheader446, %.preheader444
  %.0362.lcssa615 = phi double [ %.1363, %.preheader444 ], [ 1.000000e+00, %.preheader446 ], [ %.1363, %.lr.ph471 ], [ %.1363, %.lr.ph471.prol.loopexit ]
  %.0349.lcssa = phi double [ 0.000000e+00, %.preheader444 ], [ 0.000000e+00, %.preheader446 ], [ %.lcssa779.unr, %.lr.ph471.prol.loopexit ], [ %166, %.lr.ph471 ]
  %168 = fmul double %.0349.lcssa, 1.000000e+04
  %169 = fdiv double 1.000000e+00, %168
  %170 = fcmp olt double %169, 5.000000e-01
  br i1 %170, label %.preheader443, label %183

.preheader443:                                    ; preds = %._crit_edge472
  br i1 %54, label %._crit_edge476, label %.lr.ph475.preheader

.lr.ph475.preheader:                              ; preds = %.preheader443
  %171 = zext nneg i32 %46 to i64
  %min.iters.check645 = icmp ult i32 %46, 4
  br i1 %min.iters.check645, label %.lr.ph475.preheader778, label %vector.ph646

vector.ph646:                                     ; preds = %.lr.ph475.preheader
  %n.vec648 = and i64 %171, 2147483644
  %ind.end649 = and i64 %171, 3
  %broadcast.splatinsert658 = insertelement <2 x double> poison, double %169, i64 0
  %172 = shufflevector <2 x double> %broadcast.splatinsert658, <2 x double> poison, <2 x i32> zeroinitializer
  %173 = shufflevector <2 x double> %broadcast.splatinsert658, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body651

vector.body651:                                   ; preds = %vector.body651, %vector.ph646
  %index652 = phi i64 [ 0, %vector.ph646 ], [ %index.next662, %vector.body651 ]
  %offset.idx653 = sub i64 %171, %index652
  %174 = getelementptr inbounds double, ptr %48, i64 %offset.idx653
  %175 = getelementptr inbounds i8, ptr %174, i64 -8
  %176 = getelementptr inbounds i8, ptr %174, i64 -24
  %wide.load654 = load <2 x double>, ptr %175, align 8, !tbaa !21
  %wide.load656 = load <2 x double>, ptr %176, align 8, !tbaa !21
  %reverse660 = fmul <2 x double> %172, %wide.load654
  store <2 x double> %reverse660, ptr %175, align 8, !tbaa !21
  %reverse661 = fmul <2 x double> %173, %wide.load656
  store <2 x double> %reverse661, ptr %176, align 8, !tbaa !21
  %index.next662 = add nuw i64 %index652, 4
  %177 = icmp eq i64 %index.next662, %n.vec648
  br i1 %177, label %middle.block643, label %vector.body651, !llvm.loop !35

middle.block643:                                  ; preds = %vector.body651
  %cmp.n663 = icmp eq i64 %n.vec648, %171
  br i1 %cmp.n663, label %._crit_edge476, label %.lr.ph475.preheader778

.lr.ph475.preheader778:                           ; preds = %middle.block643, %.lr.ph475.preheader
  %indvars.iv565.ph = phi i64 [ %171, %.lr.ph475.preheader ], [ %ind.end649, %middle.block643 ]
  br label %.lr.ph475

.lr.ph475:                                        ; preds = %.lr.ph475.preheader778, %.lr.ph475
  %indvars.iv565 = phi i64 [ %indvars.iv.next566, %.lr.ph475 ], [ %indvars.iv565.ph, %.lr.ph475.preheader778 ]
  %178 = getelementptr inbounds double, ptr %48, i64 %indvars.iv565
  %179 = load double, ptr %178, align 8, !tbaa !21
  %180 = fmul double %169, %179
  store double %180, ptr %178, align 8, !tbaa !21
  %indvars.iv.next566 = add nsw i64 %indvars.iv565, -1
  %181 = icmp ugt i64 %indvars.iv565, 1
  br i1 %181, label %.lr.ph475, label %._crit_edge476, !llvm.loop !36

._crit_edge476:                                   ; preds = %.lr.ph475, %middle.block643, %.preheader443
  %182 = fmul double %.0362.lcssa615, %169
  br label %183

183:                                              ; preds = %._crit_edge476, %._crit_edge472
  %.2364 = phi double [ %182, %._crit_edge476 ], [ %.0362.lcssa615, %._crit_edge472 ]
  br i1 %54, label %._crit_edge496, label %.lr.ph491

.lr.ph491:                                        ; preds = %183
  %184 = getelementptr inbounds i8, ptr %0, i64 24
  %185 = load ptr, ptr %184, align 8, !tbaa !22
  %186 = zext nneg i32 %46 to i64
  %min.iters.check666 = icmp ult i32 %46, 4
  %n.vec669 = and i64 %186, 2147483644
  %ind.end670 = and i64 %186, 3
  %cmp.n684 = icmp eq i64 %n.vec669, %186
  br label %195

.preheader442:                                    ; preds = %226
  br i1 %54, label %._crit_edge496, label %.lr.ph495.preheader

.lr.ph495.preheader:                              ; preds = %.preheader442
  %187 = zext nneg i32 %46 to i64
  %xtraiter782 = and i64 %186, 1
  %lcmp.mod783.not = icmp eq i64 %xtraiter782, 0
  br i1 %lcmp.mod783.not, label %.lr.ph495.prol.loopexit, label %.lr.ph495.prol

.lr.ph495.prol:                                   ; preds = %.lr.ph495.preheader
  %188 = getelementptr inbounds double, ptr %48, i64 %187
  %189 = load double, ptr %188, align 8, !tbaa !21
  %190 = fcmp olt double %189, 0.000000e+00
  %191 = fneg double %189
  %192 = select i1 %190, double %191, double %189
  %193 = fadd double %192, 0.000000e+00
  %indvars.iv.next575.prol = add nsw i64 %187, -1
  br label %.lr.ph495.prol.loopexit

.lr.ph495.prol.loopexit:                          ; preds = %.lr.ph495.prol, %.lr.ph495.preheader
  %indvars.iv574.unr = phi i64 [ %187, %.lr.ph495.preheader ], [ %indvars.iv.next575.prol, %.lr.ph495.prol ]
  %.0344494.unr = phi double [ 0.000000e+00, %.lr.ph495.preheader ], [ %193, %.lr.ph495.prol ]
  %.lcssa775.unr = phi double [ poison, %.lr.ph495.preheader ], [ %193, %.lr.ph495.prol ]
  %194 = icmp eq i32 %46, 1
  br i1 %194, label %._crit_edge496, label %.lr.ph495

195:                                              ; preds = %.lr.ph491, %226
  %indvars.iv571 = phi i64 [ %186, %.lr.ph491 ], [ %indvars.iv.next572, %226 ]
  %.3365488 = phi double [ %.2364, %.lr.ph491 ], [ %.4366, %226 ]
  %196 = getelementptr inbounds ptr, ptr %185, i64 %indvars.iv571
  %197 = load ptr, ptr %196, align 8, !tbaa !14
  %.2.in477 = getelementptr inbounds i8, ptr %197, i64 16
  %.2478 = load ptr, ptr %.2.in477, align 8, !tbaa !37
  %.not427479 = icmp eq ptr %.2478, null
  %.phi.trans.insert = getelementptr inbounds double, ptr %48, i64 %indvars.iv571
  %.pre607 = load double, ptr %.phi.trans.insert, align 8, !tbaa !21
  br i1 %.not427479, label %._crit_edge483, label %.lr.ph482

.lr.ph482:                                        ; preds = %195, %.lr.ph482
  %198 = phi double [ %206, %.lr.ph482 ], [ %.pre607, %195 ]
  %.2480 = phi ptr [ %.2, %.lr.ph482 ], [ %.2478, %195 ]
  %199 = load double, ptr %.2480, align 8, !tbaa !23
  %200 = getelementptr inbounds i8, ptr %.2480, i64 12
  %201 = load i32, ptr %200, align 4, !tbaa !38
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds double, ptr %48, i64 %202
  %204 = load double, ptr %203, align 8, !tbaa !21
  %205 = fneg double %199
  %206 = tail call double @llvm.fmuladd.f64(double %205, double %204, double %198)
  store double %206, ptr %.phi.trans.insert, align 8, !tbaa !21
  %.2.in = getelementptr inbounds i8, ptr %.2480, i64 16
  %.2 = load ptr, ptr %.2.in, align 8, !tbaa !37
  %.not427 = icmp eq ptr %.2, null
  br i1 %.not427, label %._crit_edge483, label %.lr.ph482, !llvm.loop !39

._crit_edge483:                                   ; preds = %.lr.ph482, %195
  %207 = phi double [ %.pre607, %195 ], [ %206, %.lr.ph482 ]
  %208 = fcmp uge double %207, 0.000000e+00
  %209 = fneg double %207
  %210 = select i1 %208, double %207, double %209
  %211 = fcmp ogt double %210, 1.000000e+04
  br i1 %211, label %.lr.ph486.preheader, label %226

.lr.ph486.preheader:                              ; preds = %._crit_edge483
  %212 = fcmp olt double %210, 1.000000e+08
  %213 = fdiv double 1.000000e+00, %210
  %214 = select i1 %212, double 1.000000e-08, double %213
  br i1 %min.iters.check666, label %.lr.ph486.preheader776, label %vector.ph667

vector.ph667:                                     ; preds = %.lr.ph486.preheader
  %broadcast.splatinsert679 = insertelement <2 x double> poison, double %214, i64 0
  %215 = shufflevector <2 x double> %broadcast.splatinsert679, <2 x double> poison, <2 x i32> zeroinitializer
  %216 = shufflevector <2 x double> %broadcast.splatinsert679, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body672

vector.body672:                                   ; preds = %vector.body672, %vector.ph667
  %index673 = phi i64 [ 0, %vector.ph667 ], [ %index.next683, %vector.body672 ]
  %offset.idx674 = sub i64 %186, %index673
  %217 = getelementptr inbounds double, ptr %48, i64 %offset.idx674
  %218 = getelementptr inbounds i8, ptr %217, i64 -8
  %219 = getelementptr inbounds i8, ptr %217, i64 -24
  %wide.load675 = load <2 x double>, ptr %218, align 8, !tbaa !21
  %wide.load677 = load <2 x double>, ptr %219, align 8, !tbaa !21
  %reverse681 = fmul <2 x double> %215, %wide.load675
  store <2 x double> %reverse681, ptr %218, align 8, !tbaa !21
  %reverse682 = fmul <2 x double> %216, %wide.load677
  store <2 x double> %reverse682, ptr %219, align 8, !tbaa !21
  %index.next683 = add nuw i64 %index673, 4
  %220 = icmp eq i64 %index.next683, %n.vec669
  br i1 %220, label %middle.block664, label %vector.body672, !llvm.loop !40

middle.block664:                                  ; preds = %vector.body672
  br i1 %cmp.n684, label %._crit_edge487, label %.lr.ph486.preheader776

.lr.ph486.preheader776:                           ; preds = %middle.block664, %.lr.ph486.preheader
  %indvars.iv568.ph = phi i64 [ %186, %.lr.ph486.preheader ], [ %ind.end670, %middle.block664 ]
  br label %.lr.ph486

.lr.ph486:                                        ; preds = %.lr.ph486.preheader776, %.lr.ph486
  %indvars.iv568 = phi i64 [ %indvars.iv.next569, %.lr.ph486 ], [ %indvars.iv568.ph, %.lr.ph486.preheader776 ]
  %221 = getelementptr inbounds double, ptr %48, i64 %indvars.iv568
  %222 = load double, ptr %221, align 8, !tbaa !21
  %223 = fmul double %214, %222
  store double %223, ptr %221, align 8, !tbaa !21
  %indvars.iv.next569 = add nsw i64 %indvars.iv568, -1
  %224 = icmp sgt i64 %indvars.iv568, 1
  br i1 %224, label %.lr.ph486, label %._crit_edge487, !llvm.loop !41

._crit_edge487:                                   ; preds = %.lr.ph486, %middle.block664
  %225 = fmul double %.3365488, %214
  br label %226

226:                                              ; preds = %._crit_edge483, %._crit_edge487
  %.4366 = phi double [ %225, %._crit_edge487 ], [ %.3365488, %._crit_edge483 ]
  %indvars.iv.next572 = add nsw i64 %indvars.iv571, -1
  %227 = icmp sgt i64 %indvars.iv571, 1
  br i1 %227, label %195, label %.preheader442, !llvm.loop !42

.lr.ph495:                                        ; preds = %.lr.ph495.prol.loopexit, %.lr.ph495
  %indvars.iv574 = phi i64 [ %indvars.iv.next575.1, %.lr.ph495 ], [ %indvars.iv574.unr, %.lr.ph495.prol.loopexit ]
  %.0344494 = phi double [ %239, %.lr.ph495 ], [ %.0344494.unr, %.lr.ph495.prol.loopexit ]
  %228 = getelementptr inbounds double, ptr %48, i64 %indvars.iv574
  %229 = load double, ptr %228, align 8, !tbaa !21
  %230 = fcmp olt double %229, 0.000000e+00
  %231 = fneg double %229
  %232 = select i1 %230, double %231, double %229
  %233 = fadd double %.0344494, %232
  %indvars.iv.next575 = add nsw i64 %indvars.iv574, -1
  %234 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next575
  %235 = load double, ptr %234, align 8, !tbaa !21
  %236 = fcmp olt double %235, 0.000000e+00
  %237 = fneg double %235
  %238 = select i1 %236, double %237, double %235
  %239 = fadd double %233, %238
  %indvars.iv.next575.1 = add nsw i64 %indvars.iv574, -2
  %240 = icmp ugt i64 %indvars.iv.next575, 1
  br i1 %240, label %.lr.ph495, label %._crit_edge496, !llvm.loop !43

._crit_edge496:                                   ; preds = %.lr.ph495.prol.loopexit, %.lr.ph495, %183, %.preheader442
  %.3365.lcssa619 = phi double [ %.4366, %.preheader442 ], [ %.2364, %183 ], [ %.4366, %.lr.ph495 ], [ %.4366, %.lr.ph495.prol.loopexit ]
  %.0344.lcssa = phi double [ 0.000000e+00, %.preheader442 ], [ 0.000000e+00, %183 ], [ %.lcssa775.unr, %.lr.ph495.prol.loopexit ], [ %239, %.lr.ph495 ]
  %241 = fmul double %.0344.lcssa, 1.000000e+04
  %242 = fdiv double 1.000000e+00, %241
  %243 = fcmp olt double %242, 5.000000e-01
  br i1 %243, label %.preheader441, label %256

.preheader441:                                    ; preds = %._crit_edge496
  br i1 %54, label %._crit_edge500, label %.lr.ph499.preheader

.lr.ph499.preheader:                              ; preds = %.preheader441
  %244 = zext nneg i32 %46 to i64
  %min.iters.check687 = icmp ult i32 %46, 4
  br i1 %min.iters.check687, label %.lr.ph499.preheader774, label %vector.ph688

vector.ph688:                                     ; preds = %.lr.ph499.preheader
  %n.vec690 = and i64 %244, 2147483644
  %ind.end691 = and i64 %244, 3
  %broadcast.splatinsert700 = insertelement <2 x double> poison, double %242, i64 0
  %245 = shufflevector <2 x double> %broadcast.splatinsert700, <2 x double> poison, <2 x i32> zeroinitializer
  %246 = shufflevector <2 x double> %broadcast.splatinsert700, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body693

vector.body693:                                   ; preds = %vector.body693, %vector.ph688
  %index694 = phi i64 [ 0, %vector.ph688 ], [ %index.next704, %vector.body693 ]
  %offset.idx695 = sub i64 %244, %index694
  %247 = getelementptr inbounds double, ptr %48, i64 %offset.idx695
  %248 = getelementptr inbounds i8, ptr %247, i64 -8
  %249 = getelementptr inbounds i8, ptr %247, i64 -24
  %wide.load696 = load <2 x double>, ptr %248, align 8, !tbaa !21
  %wide.load698 = load <2 x double>, ptr %249, align 8, !tbaa !21
  %reverse702 = fmul <2 x double> %245, %wide.load696
  store <2 x double> %reverse702, ptr %248, align 8, !tbaa !21
  %reverse703 = fmul <2 x double> %246, %wide.load698
  store <2 x double> %reverse703, ptr %249, align 8, !tbaa !21
  %index.next704 = add nuw i64 %index694, 4
  %250 = icmp eq i64 %index.next704, %n.vec690
  br i1 %250, label %middle.block685, label %vector.body693, !llvm.loop !44

middle.block685:                                  ; preds = %vector.body693
  %cmp.n705 = icmp eq i64 %n.vec690, %244
  br i1 %cmp.n705, label %._crit_edge500, label %.lr.ph499.preheader774

.lr.ph499.preheader774:                           ; preds = %middle.block685, %.lr.ph499.preheader
  %indvars.iv577.ph = phi i64 [ %244, %.lr.ph499.preheader ], [ %ind.end691, %middle.block685 ]
  br label %.lr.ph499

.lr.ph499:                                        ; preds = %.lr.ph499.preheader774, %.lr.ph499
  %indvars.iv577 = phi i64 [ %indvars.iv.next578, %.lr.ph499 ], [ %indvars.iv577.ph, %.lr.ph499.preheader774 ]
  %251 = getelementptr inbounds double, ptr %48, i64 %indvars.iv577
  %252 = load double, ptr %251, align 8, !tbaa !21
  %253 = fmul double %242, %252
  store double %253, ptr %251, align 8, !tbaa !21
  %indvars.iv.next578 = add nsw i64 %indvars.iv577, -1
  %254 = icmp ugt i64 %indvars.iv577, 1
  br i1 %254, label %.lr.ph499, label %._crit_edge500, !llvm.loop !45

._crit_edge500:                                   ; preds = %.lr.ph499, %middle.block685, %.preheader441
  %255 = fmul double %.3365.lcssa619, %242
  br label %256

256:                                              ; preds = %._crit_edge500, %._crit_edge496
  %.5367 = phi double [ %255, %._crit_edge500 ], [ %.3365.lcssa619, %._crit_edge496 ]
  %.1345 = phi double [ 1.000000e-04, %._crit_edge500 ], [ %.0344.lcssa, %._crit_edge496 ]
  br i1 %54, label %.preheader440, label %.lr.ph504.preheader

.lr.ph504.preheader:                              ; preds = %256
  %257 = zext nneg i32 %46 to i64
  %xtraiter784 = and i64 %257, 1
  %lcmp.mod785.not = icmp eq i64 %xtraiter784, 0
  br i1 %lcmp.mod785.not, label %.lr.ph504.prol.loopexit, label %.lr.ph504.prol

.lr.ph504.prol:                                   ; preds = %.lr.ph504.preheader
  %258 = getelementptr inbounds double, ptr %48, i64 %257
  %259 = load double, ptr %258, align 8, !tbaa !21
  %260 = fcmp olt double %259, 0.000000e+00
  %261 = fneg double %259
  %262 = select i1 %260, double %261, double %259
  %263 = fcmp ogt double %262, 0.000000e+00
  %.1341.prol = select i1 %263, double %262, double 0.000000e+00
  %indvars.iv.next581.prol = add nsw i64 %257, -1
  br label %.lr.ph504.prol.loopexit

.lr.ph504.prol.loopexit:                          ; preds = %.lr.ph504.prol, %.lr.ph504.preheader
  %indvars.iv580.unr = phi i64 [ %257, %.lr.ph504.preheader ], [ %indvars.iv.next581.prol, %.lr.ph504.prol ]
  %.0340502.unr = phi double [ 0.000000e+00, %.lr.ph504.preheader ], [ %.1341.prol, %.lr.ph504.prol ]
  %.1341.lcssa.unr = phi double [ poison, %.lr.ph504.preheader ], [ %.1341.prol, %.lr.ph504.prol ]
  %264 = icmp eq i32 %46, 1
  br i1 %264, label %.preheader440, label %.lr.ph504

.preheader440:                                    ; preds = %.lr.ph504.prol.loopexit, %.lr.ph504, %256
  %.0340.lcssa = phi double [ 0.000000e+00, %256 ], [ %.1341.lcssa.unr, %.lr.ph504.prol.loopexit ], [ %.1341.1, %.lr.ph504 ]
  br i1 %54, label %.preheader439, label %.lr.ph520

.lr.ph520:                                        ; preds = %.preheader440
  %265 = getelementptr inbounds i8, ptr %0, i64 24
  %266 = load ptr, ptr %265, align 8, !tbaa !22
  %267 = zext nneg i32 %46 to i64
  %268 = add nuw i32 %46, 1
  %wide.trip.count589 = zext i32 %268 to i64
  %min.iters.check708 = icmp ult i32 %46, 4
  %n.vec711 = and i64 %267, 2147483644
  %ind.end712 = and i64 %267, 3
  %cmp.n726 = icmp eq i64 %n.vec711, %267
  br label %291

.lr.ph504:                                        ; preds = %.lr.ph504.prol.loopexit, %.lr.ph504
  %indvars.iv580 = phi i64 [ %indvars.iv.next581.1, %.lr.ph504 ], [ %indvars.iv580.unr, %.lr.ph504.prol.loopexit ]
  %.0340502 = phi double [ %.1341.1, %.lr.ph504 ], [ %.0340502.unr, %.lr.ph504.prol.loopexit ]
  %269 = getelementptr inbounds double, ptr %48, i64 %indvars.iv580
  %270 = load double, ptr %269, align 8, !tbaa !21
  %271 = fcmp olt double %270, 0.000000e+00
  %272 = fneg double %270
  %273 = select i1 %271, double %272, double %270
  %274 = fcmp olt double %.0340502, %273
  %.1341 = select i1 %274, double %273, double %.0340502
  %indvars.iv.next581 = add nsw i64 %indvars.iv580, -1
  %275 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next581
  %276 = load double, ptr %275, align 8, !tbaa !21
  %277 = fcmp olt double %276, 0.000000e+00
  %278 = fneg double %276
  %279 = select i1 %277, double %278, double %276
  %280 = fcmp olt double %.1341, %279
  %.1341.1 = select i1 %280, double %279, double %.1341
  %indvars.iv.next581.1 = add nsw i64 %indvars.iv580, -2
  %281 = icmp ugt i64 %indvars.iv.next581, 1
  br i1 %281, label %.lr.ph504, label %.preheader440, !llvm.loop !46

.preheader439:                                    ; preds = %325, %.preheader440
  %.2346.lcssa = phi double [ %.1345, %.preheader440 ], [ %.3347, %325 ]
  br i1 %54, label %._crit_edge550, label %.lr.ph524.preheader

.lr.ph524.preheader:                              ; preds = %.preheader439
  %282 = zext nneg i32 %46 to i64
  %283 = add nsw i64 %282, -1
  %xtraiter786 = and i64 %282, 1
  %lcmp.mod787.not = icmp eq i64 %xtraiter786, 0
  br i1 %lcmp.mod787.not, label %.lr.ph524.prol.loopexit, label %.lr.ph524.prol

.lr.ph524.prol:                                   ; preds = %.lr.ph524.preheader
  %284 = getelementptr inbounds double, ptr %48, i64 %282
  %285 = load double, ptr %284, align 8, !tbaa !21
  %286 = fcmp olt double %285, 0.000000e+00
  %287 = fneg double %285
  %288 = select i1 %286, double %287, double %285
  %289 = fadd double %288, 0.000000e+00
  %indvars.iv.next592.prol = add nsw i64 %282, -1
  br label %.lr.ph524.prol.loopexit

.lr.ph524.prol.loopexit:                          ; preds = %.lr.ph524.prol, %.lr.ph524.preheader
  %indvars.iv591.unr = phi i64 [ %282, %.lr.ph524.preheader ], [ %indvars.iv.next592.prol, %.lr.ph524.prol ]
  %.0343523.unr = phi double [ 0.000000e+00, %.lr.ph524.preheader ], [ %289, %.lr.ph524.prol ]
  %.lcssa772.unr = phi double [ poison, %.lr.ph524.preheader ], [ %289, %.lr.ph524.prol ]
  %290 = icmp eq i64 %283, 0
  br i1 %290, label %._crit_edge525, label %.lr.ph524

291:                                              ; preds = %.lr.ph520, %325
  %indvars.iv586 = phi i64 [ 1, %.lr.ph520 ], [ %indvars.iv.next587, %325 ]
  %.2346519 = phi double [ %.1345, %.lr.ph520 ], [ %.3347, %325 ]
  %292 = getelementptr inbounds ptr, ptr %266, i64 %indvars.iv586
  %293 = load ptr, ptr %292, align 8, !tbaa !14
  %.3.in506 = getelementptr inbounds i8, ptr %293, i64 16
  %.3507 = load ptr, ptr %.3.in506, align 8, !tbaa !37
  %.not425508 = icmp eq ptr %.3507, null
  br i1 %.not425508, label %._crit_edge512, label %.lr.ph511

.lr.ph511:                                        ; preds = %291
  %294 = getelementptr inbounds double, ptr %48, i64 %indvars.iv586
  br label %295

295:                                              ; preds = %.lr.ph511, %295
  %.3509 = phi ptr [ %.3507, %.lr.ph511 ], [ %.3, %295 ]
  %296 = load double, ptr %294, align 8, !tbaa !21
  %297 = load double, ptr %.3509, align 8, !tbaa !23
  %298 = getelementptr inbounds i8, ptr %.3509, i64 12
  %299 = load i32, ptr %298, align 4, !tbaa !38
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds double, ptr %48, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !21
  %303 = fneg double %296
  %304 = tail call double @llvm.fmuladd.f64(double %303, double %297, double %302)
  store double %304, ptr %301, align 8, !tbaa !21
  %.3.in = getelementptr inbounds i8, ptr %.3509, i64 16
  %.3 = load ptr, ptr %.3.in, align 8, !tbaa !37
  %.not425 = icmp eq ptr %.3, null
  br i1 %.not425, label %._crit_edge512, label %295, !llvm.loop !47

._crit_edge512:                                   ; preds = %295, %291
  %305 = getelementptr inbounds double, ptr %48, i64 %indvars.iv586
  %306 = load double, ptr %305, align 8, !tbaa !21
  %307 = fcmp uge double %306, 0.000000e+00
  %308 = fneg double %306
  %309 = select i1 %307, double %306, double %308
  %310 = fcmp ogt double %309, 1.000000e+04
  br i1 %310, label %.lr.ph515.preheader, label %325

.lr.ph515.preheader:                              ; preds = %._crit_edge512
  %311 = fcmp olt double %309, 1.000000e+08
  %312 = fdiv double 1.000000e+00, %309
  %313 = select i1 %311, double 1.000000e-08, double %312
  br i1 %min.iters.check708, label %.lr.ph515.preheader773, label %vector.ph709

vector.ph709:                                     ; preds = %.lr.ph515.preheader
  %broadcast.splatinsert721 = insertelement <2 x double> poison, double %313, i64 0
  %314 = shufflevector <2 x double> %broadcast.splatinsert721, <2 x double> poison, <2 x i32> zeroinitializer
  %315 = shufflevector <2 x double> %broadcast.splatinsert721, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body714

vector.body714:                                   ; preds = %vector.body714, %vector.ph709
  %index715 = phi i64 [ 0, %vector.ph709 ], [ %index.next725, %vector.body714 ]
  %offset.idx716 = sub i64 %267, %index715
  %316 = getelementptr inbounds double, ptr %48, i64 %offset.idx716
  %317 = getelementptr inbounds i8, ptr %316, i64 -8
  %318 = getelementptr inbounds i8, ptr %316, i64 -24
  %wide.load717 = load <2 x double>, ptr %317, align 8, !tbaa !21
  %wide.load719 = load <2 x double>, ptr %318, align 8, !tbaa !21
  %reverse723 = fmul <2 x double> %314, %wide.load717
  store <2 x double> %reverse723, ptr %317, align 8, !tbaa !21
  %reverse724 = fmul <2 x double> %315, %wide.load719
  store <2 x double> %reverse724, ptr %318, align 8, !tbaa !21
  %index.next725 = add nuw i64 %index715, 4
  %319 = icmp eq i64 %index.next725, %n.vec711
  br i1 %319, label %middle.block706, label %vector.body714, !llvm.loop !48

middle.block706:                                  ; preds = %vector.body714
  br i1 %cmp.n726, label %._crit_edge516, label %.lr.ph515.preheader773

.lr.ph515.preheader773:                           ; preds = %middle.block706, %.lr.ph515.preheader
  %indvars.iv583.ph = phi i64 [ %267, %.lr.ph515.preheader ], [ %ind.end712, %middle.block706 ]
  br label %.lr.ph515

.lr.ph515:                                        ; preds = %.lr.ph515.preheader773, %.lr.ph515
  %indvars.iv583 = phi i64 [ %indvars.iv.next584, %.lr.ph515 ], [ %indvars.iv583.ph, %.lr.ph515.preheader773 ]
  %320 = getelementptr inbounds double, ptr %48, i64 %indvars.iv583
  %321 = load double, ptr %320, align 8, !tbaa !21
  %322 = fmul double %313, %321
  store double %322, ptr %320, align 8, !tbaa !21
  %indvars.iv.next584 = add nsw i64 %indvars.iv583, -1
  %323 = icmp sgt i64 %indvars.iv583, 1
  br i1 %323, label %.lr.ph515, label %._crit_edge516, !llvm.loop !49

._crit_edge516:                                   ; preds = %.lr.ph515, %middle.block706
  %324 = fmul double %.2346519, %313
  br label %325

325:                                              ; preds = %._crit_edge512, %._crit_edge516
  %.3347 = phi double [ %324, %._crit_edge516 ], [ %.2346519, %._crit_edge512 ]
  %indvars.iv.next587 = add nuw nsw i64 %indvars.iv586, 1
  %exitcond590.not = icmp eq i64 %indvars.iv.next587, %wide.trip.count589
  br i1 %exitcond590.not, label %.preheader439, label %291, !llvm.loop !50

.lr.ph524:                                        ; preds = %.lr.ph524.prol.loopexit, %.lr.ph524
  %indvars.iv591 = phi i64 [ %indvars.iv.next592.1, %.lr.ph524 ], [ %indvars.iv591.unr, %.lr.ph524.prol.loopexit ]
  %.0343523 = phi double [ %337, %.lr.ph524 ], [ %.0343523.unr, %.lr.ph524.prol.loopexit ]
  %326 = getelementptr inbounds double, ptr %48, i64 %indvars.iv591
  %327 = load double, ptr %326, align 8, !tbaa !21
  %328 = fcmp olt double %327, 0.000000e+00
  %329 = fneg double %327
  %330 = select i1 %328, double %329, double %327
  %331 = fadd double %.0343523, %330
  %indvars.iv.next592 = add nsw i64 %indvars.iv591, -1
  %332 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next592
  %333 = load double, ptr %332, align 8, !tbaa !21
  %334 = fcmp olt double %333, 0.000000e+00
  %335 = fneg double %333
  %336 = select i1 %334, double %335, double %333
  %337 = fadd double %331, %336
  %indvars.iv.next592.1 = add nsw i64 %indvars.iv591, -2
  %338 = icmp ugt i64 %indvars.iv.next592, 1
  br i1 %338, label %.lr.ph524, label %._crit_edge525, !llvm.loop !51

._crit_edge525:                                   ; preds = %.lr.ph524, %.lr.ph524.prol.loopexit
  %.lcssa772 = phi double [ %.lcssa772.unr, %.lr.ph524.prol.loopexit ], [ %337, %.lr.ph524 ]
  %339 = fmul double %.lcssa772, 1.000000e+04
  %340 = fdiv double 1.000000e+00, %339
  %341 = fcmp olt double %340, 5.000000e-01
  br i1 %341, label %.preheader438, label %354

.preheader438:                                    ; preds = %._crit_edge525
  br i1 %54, label %._crit_edge529, label %.lr.ph528.preheader

.lr.ph528.preheader:                              ; preds = %.preheader438
  %342 = zext nneg i32 %46 to i64
  %min.iters.check729 = icmp ult i32 %46, 4
  br i1 %min.iters.check729, label %.lr.ph528.preheader771, label %vector.ph730

vector.ph730:                                     ; preds = %.lr.ph528.preheader
  %n.vec732 = and i64 %282, 2147483644
  %ind.end733 = sub nsw i64 %342, %n.vec732
  %broadcast.splatinsert742 = insertelement <2 x double> poison, double %340, i64 0
  %343 = shufflevector <2 x double> %broadcast.splatinsert742, <2 x double> poison, <2 x i32> zeroinitializer
  %344 = shufflevector <2 x double> %broadcast.splatinsert742, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body735

vector.body735:                                   ; preds = %vector.body735, %vector.ph730
  %index736 = phi i64 [ 0, %vector.ph730 ], [ %index.next746, %vector.body735 ]
  %offset.idx737 = sub i64 %342, %index736
  %345 = getelementptr inbounds double, ptr %48, i64 %offset.idx737
  %346 = getelementptr inbounds i8, ptr %345, i64 -8
  %347 = getelementptr inbounds i8, ptr %345, i64 -24
  %wide.load738 = load <2 x double>, ptr %346, align 8, !tbaa !21
  %wide.load740 = load <2 x double>, ptr %347, align 8, !tbaa !21
  %reverse744 = fmul <2 x double> %343, %wide.load738
  store <2 x double> %reverse744, ptr %346, align 8, !tbaa !21
  %reverse745 = fmul <2 x double> %344, %wide.load740
  store <2 x double> %reverse745, ptr %347, align 8, !tbaa !21
  %index.next746 = add nuw i64 %index736, 4
  %348 = icmp eq i64 %index.next746, %n.vec732
  br i1 %348, label %middle.block727, label %vector.body735, !llvm.loop !52

middle.block727:                                  ; preds = %vector.body735
  %cmp.n747 = icmp eq i64 %n.vec732, %282
  br i1 %cmp.n747, label %._crit_edge529, label %.lr.ph528.preheader771

.lr.ph528.preheader771:                           ; preds = %middle.block727, %.lr.ph528.preheader
  %indvars.iv594.ph = phi i64 [ %342, %.lr.ph528.preheader ], [ %ind.end733, %middle.block727 ]
  br label %.lr.ph528

.lr.ph528:                                        ; preds = %.lr.ph528.preheader771, %.lr.ph528
  %indvars.iv594 = phi i64 [ %indvars.iv.next595, %.lr.ph528 ], [ %indvars.iv594.ph, %.lr.ph528.preheader771 ]
  %349 = getelementptr inbounds double, ptr %48, i64 %indvars.iv594
  %350 = load double, ptr %349, align 8, !tbaa !21
  %351 = fmul double %340, %350
  store double %351, ptr %349, align 8, !tbaa !21
  %indvars.iv.next595 = add nsw i64 %indvars.iv594, -1
  %352 = icmp ugt i64 %indvars.iv594, 1
  br i1 %352, label %.lr.ph528, label %._crit_edge529, !llvm.loop !53

._crit_edge529:                                   ; preds = %.lr.ph528, %middle.block727, %.preheader438
  %353 = fmul double %.2346.lcssa, %340
  br label %354

354:                                              ; preds = %._crit_edge529, %._crit_edge525
  %.4348 = phi double [ %353, %._crit_edge529 ], [ %.2346.lcssa, %._crit_edge525 ]
  br i1 %54, label %._crit_edge550, label %.lr.ph545

.lr.ph545:                                        ; preds = %354
  %355 = getelementptr inbounds i8, ptr %0, i64 24
  %356 = load ptr, ptr %355, align 8, !tbaa !22
  %357 = zext nneg i32 %46 to i64
  %min.iters.check750 = icmp ult i32 %46, 4
  %n.vec753 = and i64 %282, 2147483644
  %ind.end754 = sub nsw i64 %357, %n.vec753
  %cmp.n768 = icmp eq i64 %n.vec753, %282
  br label %366

.preheader:                                       ; preds = %400
  br i1 %54, label %._crit_edge550, label %.lr.ph549.preheader

.lr.ph549.preheader:                              ; preds = %.preheader
  %358 = zext nneg i32 %46 to i64
  %xtraiter788 = and i64 %282, 1
  %lcmp.mod789.not = icmp eq i64 %xtraiter788, 0
  br i1 %lcmp.mod789.not, label %.lr.ph549.prol.loopexit, label %.lr.ph549.prol

.lr.ph549.prol:                                   ; preds = %.lr.ph549.preheader
  %359 = getelementptr inbounds double, ptr %48, i64 %358
  %360 = load double, ptr %359, align 8, !tbaa !21
  %361 = fcmp olt double %360, 0.000000e+00
  %362 = fneg double %360
  %363 = select i1 %361, double %362, double %360
  %364 = fadd double %363, 0.000000e+00
  %indvars.iv.next604.prol = add nsw i64 %358, -1
  br label %.lr.ph549.prol.loopexit

.lr.ph549.prol.loopexit:                          ; preds = %.lr.ph549.prol, %.lr.ph549.preheader
  %indvars.iv603.unr = phi i64 [ %358, %.lr.ph549.preheader ], [ %indvars.iv.next604.prol, %.lr.ph549.prol ]
  %.0342548.unr = phi double [ 0.000000e+00, %.lr.ph549.preheader ], [ %364, %.lr.ph549.prol ]
  %.lcssa.unr = phi double [ poison, %.lr.ph549.preheader ], [ %364, %.lr.ph549.prol ]
  %365 = icmp eq i64 %283, 0
  br i1 %365, label %._crit_edge550, label %.lr.ph549

366:                                              ; preds = %.lr.ph545, %400
  %indvars.iv600 = phi i64 [ %357, %.lr.ph545 ], [ %indvars.iv.next601, %400 ]
  %.5543 = phi double [ %.4348, %.lr.ph545 ], [ %.6, %400 ]
  %367 = getelementptr inbounds ptr, ptr %356, i64 %indvars.iv600
  %368 = load ptr, ptr %367, align 8, !tbaa !14
  %.4.in530 = getelementptr inbounds i8, ptr %368, i64 24
  %.4531 = load ptr, ptr %.4.in530, align 8, !tbaa !29
  %.not424532 = icmp eq ptr %.4531, null
  %.phi.trans.insert608 = getelementptr inbounds double, ptr %48, i64 %indvars.iv600
  %.pre609 = load double, ptr %.phi.trans.insert608, align 8, !tbaa !21
  br i1 %.not424532, label %._crit_edge536, label %.lr.ph535

.lr.ph535:                                        ; preds = %366, %.lr.ph535
  %369 = phi double [ %377, %.lr.ph535 ], [ %.pre609, %366 ]
  %.4533 = phi ptr [ %.4, %.lr.ph535 ], [ %.4531, %366 ]
  %370 = load double, ptr %.4533, align 8, !tbaa !23
  %371 = getelementptr inbounds i8, ptr %.4533, i64 8
  %372 = load i32, ptr %371, align 8, !tbaa !30
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds double, ptr %48, i64 %373
  %375 = load double, ptr %374, align 8, !tbaa !21
  %376 = fneg double %370
  %377 = tail call double @llvm.fmuladd.f64(double %376, double %375, double %369)
  store double %377, ptr %.phi.trans.insert608, align 8, !tbaa !21
  %.4.in = getelementptr inbounds i8, ptr %.4533, i64 24
  %.4 = load ptr, ptr %.4.in, align 8, !tbaa !29
  %.not424 = icmp eq ptr %.4, null
  br i1 %.not424, label %._crit_edge536, label %.lr.ph535, !llvm.loop !54

._crit_edge536:                                   ; preds = %.lr.ph535, %366
  %378 = phi double [ %.pre609, %366 ], [ %377, %.lr.ph535 ]
  %379 = load double, ptr %368, align 8, !tbaa !23
  %380 = getelementptr inbounds double, ptr %48, i64 %indvars.iv600
  %381 = fmul double %379, %378
  store double %381, ptr %380, align 8, !tbaa !21
  %382 = fcmp uge double %381, 0.000000e+00
  %383 = fneg double %381
  %384 = select i1 %382, double %381, double %383
  %385 = fcmp ogt double %384, 1.000000e+04
  br i1 %385, label %.lr.ph540.preheader, label %400

.lr.ph540.preheader:                              ; preds = %._crit_edge536
  %386 = fcmp olt double %384, 1.000000e+08
  %387 = fdiv double 1.000000e+00, %384
  %388 = select i1 %386, double 1.000000e-08, double %387
  br i1 %min.iters.check750, label %.lr.ph540.preheader769, label %vector.ph751

vector.ph751:                                     ; preds = %.lr.ph540.preheader
  %broadcast.splatinsert763 = insertelement <2 x double> poison, double %388, i64 0
  %389 = shufflevector <2 x double> %broadcast.splatinsert763, <2 x double> poison, <2 x i32> zeroinitializer
  %390 = shufflevector <2 x double> %broadcast.splatinsert763, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body756

vector.body756:                                   ; preds = %vector.body756, %vector.ph751
  %index757 = phi i64 [ 0, %vector.ph751 ], [ %index.next767, %vector.body756 ]
  %offset.idx758 = sub i64 %357, %index757
  %391 = getelementptr inbounds double, ptr %48, i64 %offset.idx758
  %392 = getelementptr inbounds i8, ptr %391, i64 -8
  %393 = getelementptr inbounds i8, ptr %391, i64 -24
  %wide.load759 = load <2 x double>, ptr %392, align 8, !tbaa !21
  %wide.load761 = load <2 x double>, ptr %393, align 8, !tbaa !21
  %reverse765 = fmul <2 x double> %389, %wide.load759
  store <2 x double> %reverse765, ptr %392, align 8, !tbaa !21
  %reverse766 = fmul <2 x double> %390, %wide.load761
  store <2 x double> %reverse766, ptr %393, align 8, !tbaa !21
  %index.next767 = add nuw i64 %index757, 4
  %394 = icmp eq i64 %index.next767, %n.vec753
  br i1 %394, label %middle.block748, label %vector.body756, !llvm.loop !55

middle.block748:                                  ; preds = %vector.body756
  br i1 %cmp.n768, label %._crit_edge541, label %.lr.ph540.preheader769

.lr.ph540.preheader769:                           ; preds = %middle.block748, %.lr.ph540.preheader
  %indvars.iv597.ph = phi i64 [ %357, %.lr.ph540.preheader ], [ %ind.end754, %middle.block748 ]
  br label %.lr.ph540

.lr.ph540:                                        ; preds = %.lr.ph540.preheader769, %.lr.ph540
  %indvars.iv597 = phi i64 [ %indvars.iv.next598, %.lr.ph540 ], [ %indvars.iv597.ph, %.lr.ph540.preheader769 ]
  %395 = getelementptr inbounds double, ptr %48, i64 %indvars.iv597
  %396 = load double, ptr %395, align 8, !tbaa !21
  %397 = fmul double %388, %396
  store double %397, ptr %395, align 8, !tbaa !21
  %indvars.iv.next598 = add nsw i64 %indvars.iv597, -1
  %398 = icmp sgt i64 %indvars.iv597, 1
  br i1 %398, label %.lr.ph540, label %._crit_edge541, !llvm.loop !56

._crit_edge541:                                   ; preds = %.lr.ph540, %middle.block748
  %399 = fmul double %.5543, %388
  br label %400

400:                                              ; preds = %._crit_edge536, %._crit_edge541
  %.6 = phi double [ %399, %._crit_edge541 ], [ %.5543, %._crit_edge536 ]
  %indvars.iv.next601 = add nsw i64 %indvars.iv600, -1
  %401 = icmp sgt i64 %indvars.iv600, 1
  br i1 %401, label %366, label %.preheader, !llvm.loop !57

.lr.ph549:                                        ; preds = %.lr.ph549.prol.loopexit, %.lr.ph549
  %indvars.iv603 = phi i64 [ %indvars.iv.next604.1, %.lr.ph549 ], [ %indvars.iv603.unr, %.lr.ph549.prol.loopexit ]
  %.0342548 = phi double [ %413, %.lr.ph549 ], [ %.0342548.unr, %.lr.ph549.prol.loopexit ]
  %402 = getelementptr inbounds double, ptr %48, i64 %indvars.iv603
  %403 = load double, ptr %402, align 8, !tbaa !21
  %404 = fcmp olt double %403, 0.000000e+00
  %405 = fneg double %403
  %406 = select i1 %404, double %405, double %403
  %407 = fadd double %.0342548, %406
  %indvars.iv.next604 = add nsw i64 %indvars.iv603, -1
  %408 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next604
  %409 = load double, ptr %408, align 8, !tbaa !21
  %410 = fcmp olt double %409, 0.000000e+00
  %411 = fneg double %409
  %412 = select i1 %410, double %411, double %409
  %413 = fadd double %407, %412
  %indvars.iv.next604.1 = add nsw i64 %indvars.iv603, -2
  %414 = icmp ugt i64 %indvars.iv.next604, 1
  br i1 %414, label %.lr.ph549, label %._crit_edge550, !llvm.loop !58

._crit_edge550:                                   ; preds = %.lr.ph549.prol.loopexit, %.lr.ph549, %.preheader439, %354, %.preheader
  %.5.lcssa624 = phi double [ %.6, %.preheader ], [ %.4348, %354 ], [ %.2346.lcssa, %.preheader439 ], [ %.6, %.lr.ph549 ], [ %.6, %.lr.ph549.prol.loopexit ]
  %.0342.lcssa = phi double [ 0.000000e+00, %.preheader ], [ 0.000000e+00, %354 ], [ 0.000000e+00, %.preheader439 ], [ %.lcssa.unr, %.lr.ph549.prol.loopexit ], [ %413, %.lr.ph549 ]
  tail call void @free(ptr noundef %52)
  %415 = insertelement <2 x double> poison, double %.5.lcssa624, i64 0
  %416 = insertelement <2 x double> %415, double %.5367, i64 1
  %417 = insertelement <2 x double> poison, double %.0342.lcssa, i64 0
  %418 = insertelement <2 x double> %417, double %.0340.lcssa, i64 1
  %419 = fdiv <2 x double> %416, %418
  %420 = extractelement <2 x double> %419, i64 0
  %421 = extractelement <2 x double> %419, i64 1
  %422 = fcmp olt double %420, %421
  %423 = select i1 %422, double %420, double %421
  %424 = fdiv double %423, %1
  br label %425

425:                                              ; preds = %38, %._crit_edge550, %55, %43
  %.0 = phi double [ 0.000000e+00, %43 ], [ 0.000000e+00, %55 ], [ %424, %._crit_edge550 ], [ 0.000000e+00, %38 ]
  ret double %.0
}

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

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

attributes #0 = { nofree nounwind "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 = { noreturn nounwind "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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #5 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { cold nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { allocsize(0) }

!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, !12, i64 104}
!6 = !{!"MatrixFrame", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !11, i64 24, !11, i64 32, !11, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !11, i64 64, !11, i64 72, !10, i64 80, !10, i64 84, !11, i64 88, !11, i64 96, !12, i64 104, !11, i64 112, !10, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !8, i64 192, !10, i64 196, !7, i64 200, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !13, i64 232, !11, i64 272, !10, i64 280, !11, i64 288, !10, i64 296, !11, i64 304, !10, i64 312, !11, i64 320, !11, i64 328}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!"MatrixElement", !7, i64 0, !10, i64 8, !10, i64 12, !11, i64 16, !11, i64 24, !11, i64 32}
!14 = !{!11, !11, i64 0}
!15 = !{!6, !10, i64 52}
!16 = !{!6, !10, i64 80}
!17 = !{!6, !10, i64 172}
!18 = !{!10, !10, i64 0}
!19 = !{!6, !10, i64 228}
!20 = !{!6, !11, i64 112}
!21 = !{!7, !7, i64 0}
!22 = !{!6, !11, i64 24}
!23 = !{!13, !7, i64 0}
!24 = distinct !{!24, !25, !26, !27}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!"llvm.loop.isvectorized", i32 1}
!27 = !{!"llvm.loop.unroll.runtime.disable"}
!28 = distinct !{!28, !25, !27, !26}
!29 = !{!13, !11, i64 24}
!30 = !{!13, !10, i64 8}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25, !26, !27}
!36 = distinct !{!36, !25, !27, !26}
!37 = !{!13, !11, i64 16}
!38 = !{!13, !10, i64 12}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25, !26, !27}
!41 = distinct !{!41, !25, !27, !26}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = distinct !{!44, !25, !26, !27}
!45 = distinct !{!45, !25, !27, !26}
!46 = distinct !{!46, !25}
!47 = distinct !{!47, !25}
!48 = distinct !{!48, !25, !26, !27}
!49 = distinct !{!49, !25, !27, !26}
!50 = distinct !{!50, !25}
!51 = distinct !{!51, !25}
!52 = distinct !{!52, !25, !26, !27}
!53 = distinct !{!53, !25, !27, !26}
!54 = distinct !{!54, !25}
!55 = distinct !{!55, !25, !26, !27}
!56 = distinct !{!56, !25, !27, !26}
!57 = distinct !{!57, !25}
!58 = distinct !{!58, !25}


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