; LLVM IR from sympiler/nasoq :: src/gmres (mgmres)

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

@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@__const._ZN5nasoq15pmgmres_ldlt_crEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_i.alp = external hidden unnamed_addr constant [2 x double], align 16
@.str.6 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [23 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq19diagonal_pointer_crEiiPiS0_S0_(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq11mult_givensEddiPd(double noundef, double noundef, i32 noundef, ptr noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef, ptr noundef, ptr noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq12rearrange_crEiiPiS0_Pd(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i32 @printf(ptr noundef, ...) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef, i32 noundef, i32 noundef, i32 noundef) #0

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5nasoq15pmgmres_ldlt_crEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_i(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, i64 noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, i32 noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, i32 noundef %16, i32 noundef %17, double noundef %18, double noundef %19, i32 noundef %20, i32 noundef %21, i32 noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, ptr noundef %26, ptr noundef %27, i32 noundef %28) #5 {
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i64, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca i32, align 4
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca i32, align 4
  %60 = alloca double, align 8
  %61 = alloca ptr, align 8
  %62 = alloca double, align 8
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca double, align 8
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca ptr, align 8
  %73 = alloca double, align 8
  %74 = alloca ptr, align 8
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca ptr, align 8
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca i32, align 4
  %81 = alloca ptr, align 8
  %82 = alloca [2 x double], align 16
  %83 = alloca [2 x double], align 16
  %84 = alloca ptr, align 8
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  store i32 %0, ptr %31, align 4, !tbaa !5
  store i32 %1, ptr %32, align 4, !tbaa !5
  store ptr %2, ptr %33, align 8, !tbaa !9
  store ptr %3, ptr %34, align 8, !tbaa !9
  store ptr %4, ptr %35, align 8, !tbaa !9
  store ptr %5, ptr %36, align 8, !tbaa !9
  store ptr %6, ptr %37, align 8, !tbaa !9
  store ptr %7, ptr %38, align 8, !tbaa !9
  store i64 %8, ptr %39, align 8, !tbaa !11
  store ptr %9, ptr %40, align 8, !tbaa !9
  store ptr %10, ptr %41, align 8, !tbaa !9
  store ptr %11, ptr %42, align 8, !tbaa !9
  store i32 %12, ptr %43, align 4, !tbaa !5
  store ptr %13, ptr %44, align 8, !tbaa !9
  store ptr %14, ptr %45, align 8, !tbaa !9
  store ptr %15, ptr %46, align 8, !tbaa !9
  store i32 %16, ptr %47, align 4, !tbaa !5
  store i32 %17, ptr %48, align 4, !tbaa !5
  store double %18, ptr %49, align 8, !tbaa !13
  store double %19, ptr %50, align 8, !tbaa !13
  store i32 %20, ptr %51, align 4, !tbaa !5
  store i32 %21, ptr %52, align 4, !tbaa !5
  store i32 %22, ptr %53, align 4, !tbaa !5
  store ptr %23, ptr %54, align 8, !tbaa !9
  store ptr %24, ptr %55, align 8, !tbaa !9
  store i32 %25, ptr %56, align 4, !tbaa !5
  store ptr %26, ptr %57, align 8, !tbaa !9
  store ptr %27, ptr %58, align 8, !tbaa !9
  store i32 %28, ptr %59, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  store double 1.000000e-03, ptr %62, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  store i32 0, ptr %80, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %82) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %82, ptr align 16 @__const._ZN5nasoq15pmgmres_ldlt_crEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_i.alp, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %83) #9
  call void @llvm.memset.p0.i64(ptr align 16 %83, i8 0, i64 16, i1 false)
  store i32 0, ptr %68, align 4, !tbaa !5
  %88 = load i32, ptr %48, align 4, !tbaa !5
  %89 = add nsw i32 %88, 1
  %90 = sext i32 %89 to i64
  %91 = mul i64 %90, 8
  %92 = call noalias ptr @malloc(i64 noundef %91) #10
  store ptr %92, ptr %61, align 8, !tbaa !9
  %93 = load i32, ptr %48, align 4, !tbaa !5
  %94 = add nsw i32 %93, 1
  %95 = sext i32 %94 to i64
  %96 = mul i64 %95, 8
  %97 = call noalias ptr @malloc(i64 noundef %96) #10
  store ptr %97, ptr %63, align 8, !tbaa !9
  %98 = load i32, ptr %48, align 4, !tbaa !5
  %99 = load i32, ptr %48, align 4, !tbaa !5
  %100 = sub nsw i32 %99, 1
  %101 = call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %98, i32 noundef 0, i32 noundef %100)
  store ptr %101, ptr %64, align 8, !tbaa !9
  %102 = load ptr, ptr %33, align 8, !tbaa !9
  %103 = load i32, ptr %31, align 4, !tbaa !5
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds i32, ptr %102, i64 %104
  %106 = load i32, ptr %105, align 4, !tbaa !5
  %107 = add nsw i32 %106, 1
  %108 = sext i32 %107 to i64
  %109 = mul i64 %108, 8
  %110 = call noalias ptr @malloc(i64 noundef %109) #10
  store ptr %110, ptr %72, align 8, !tbaa !9
  %111 = load i32, ptr %31, align 4, !tbaa !5
  %112 = sext i32 %111 to i64
  %113 = mul i64 %112, 8
  %114 = call noalias ptr @malloc(i64 noundef %113) #10
  store ptr %114, ptr %74, align 8, !tbaa !9
  %115 = load i32, ptr %48, align 4, !tbaa !5
  %116 = add nsw i32 %115, 1
  %117 = sext i32 %116 to i64
  %118 = mul i64 %117, 8
  %119 = call noalias ptr @malloc(i64 noundef %118) #10
  store ptr %119, ptr %77, align 8, !tbaa !9
  %120 = load i32, ptr %31, align 4, !tbaa !5
  %121 = sext i32 %120 to i64
  %122 = mul i64 %121, 4
  %123 = call noalias ptr @malloc(i64 noundef %122) #10
  store ptr %123, ptr %78, align 8, !tbaa !9
  %124 = load i32, ptr %48, align 4, !tbaa !5
  %125 = load i32, ptr %31, align 4, !tbaa !5
  %126 = sub nsw i32 %125, 1
  %127 = call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %124, i32 noundef 0, i32 noundef %126)
  store ptr %127, ptr %79, align 8, !tbaa !9
  %128 = load i32, ptr %48, align 4, !tbaa !5
  %129 = add nsw i32 %128, 1
  %130 = sext i32 %129 to i64
  %131 = mul i64 %130, 8
  %132 = call noalias ptr @malloc(i64 noundef %131) #10
  store ptr %132, ptr %81, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #9
  %133 = load i32, ptr %31, align 4, !tbaa !5
  %134 = add nsw i32 %133, 1
  %135 = sext i32 %134 to i64
  %136 = mul i64 %135, 8
  %137 = call noalias ptr @malloc(i64 noundef %136) #10
  store ptr %137, ptr %84, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #9
  store i32 0, ptr %85, align 4, !tbaa !5
  br label %138

138:                                              ; preds = %155, %29
  %139 = load i32, ptr %85, align 4, !tbaa !5
  %140 = load i32, ptr %31, align 4, !tbaa !5
  %141 = add nsw i32 %140, 1
  %142 = icmp slt i32 %139, %141
  br i1 %142, label %144, label %143

143:                                              ; preds = %138
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #9
  br label %158

144:                                              ; preds = %138
  %145 = load ptr, ptr %33, align 8, !tbaa !9
  %146 = load i32, ptr %85, align 4, !tbaa !5
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds i32, ptr %145, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !5
  %150 = sext i32 %149 to i64
  %151 = load ptr, ptr %84, align 8, !tbaa !9
  %152 = load i32, ptr %85, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i64, ptr %151, i64 %153
  store i64 %150, ptr %154, align 8, !tbaa !11
  br label %155

155:                                              ; preds = %144
  %156 = load i32, ptr %85, align 4, !tbaa !5
  %157 = add nsw i32 %156, 1
  store i32 %157, ptr %85, align 4, !tbaa !5
  br label %138, !llvm.loop !15

158:                                              ; preds = %143
  %159 = load i32, ptr %51, align 4, !tbaa !5
  %160 = icmp ne i32 %159, 0
  br i1 %160, label %172, label %161

161:                                              ; preds = %158
  %162 = load i32, ptr %31, align 4, !tbaa !5
  %163 = load i32, ptr %32, align 4, !tbaa !5
  %164 = load ptr, ptr %33, align 8, !tbaa !9
  %165 = load ptr, ptr %34, align 8, !tbaa !9
  %166 = load ptr, ptr %35, align 8, !tbaa !9
  call void @_ZN5nasoq12rearrange_crEiiPiS0_Pd(i32 noundef %162, i32 noundef %163, ptr noundef %164, ptr noundef %165, ptr noundef %166)
  %167 = load i32, ptr %31, align 4, !tbaa !5
  %168 = load i32, ptr %32, align 4, !tbaa !5
  %169 = load ptr, ptr %33, align 8, !tbaa !9
  %170 = load ptr, ptr %34, align 8, !tbaa !9
  %171 = load ptr, ptr %78, align 8, !tbaa !9
  call void @_ZN5nasoq19diagonal_pointer_crEiiPiS0_S0_(i32 noundef %167, i32 noundef %168, ptr noundef %169, ptr noundef %170, ptr noundef %171)
  br label %192

172:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #9
  store i32 0, ptr %86, align 4, !tbaa !5
  br label %173

173:                                              ; preds = %188, %172
  %174 = load i32, ptr %86, align 4, !tbaa !5
  %175 = load i32, ptr %31, align 4, !tbaa !5
  %176 = icmp slt i32 %174, %175
  br i1 %176, label %178, label %177

177:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #9
  br label %191

178:                                              ; preds = %173
  %179 = load ptr, ptr %33, align 8, !tbaa !9
  %180 = load i32, ptr %86, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %179, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !5
  %184 = load ptr, ptr %78, align 8, !tbaa !9
  %185 = load i32, ptr %86, align 4, !tbaa !5
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i32, ptr %184, i64 %186
  store i32 %183, ptr %187, align 4, !tbaa !5
  br label %188

188:                                              ; preds = %178
  %189 = load i32, ptr %86, align 4, !tbaa !5
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %86, align 4, !tbaa !5
  br label %173, !llvm.loop !17

191:                                              ; preds = %177
  br label %192

192:                                              ; preds = %191, %161
  %193 = load i32, ptr %80, align 4, !tbaa !5
  %194 = icmp ne i32 %193, 0
  br i1 %194, label %195, label %200

195:                                              ; preds = %192
  %196 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %197 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %198 = load i32, ptr %31, align 4, !tbaa !5
  %199 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %198)
  br label %200

200:                                              ; preds = %195, %192
  store i32 0, ptr %67, align 4, !tbaa !5
  br label %201

201:                                              ; preds = %1196, %200
  %202 = load i32, ptr %67, align 4, !tbaa !5
  %203 = load i32, ptr %47, align 4, !tbaa !5
  %204 = icmp slt i32 %202, %203
  br i1 %204, label %205, label %1199

205:                                              ; preds = %201
  %206 = load i32, ptr %51, align 4, !tbaa !5
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %216, label %208

208:                                              ; preds = %205
  %209 = load i32, ptr %31, align 4, !tbaa !5
  %210 = load i32, ptr %32, align 4, !tbaa !5
  %211 = load ptr, ptr %33, align 8, !tbaa !9
  %212 = load ptr, ptr %34, align 8, !tbaa !9
  %213 = load ptr, ptr %35, align 8, !tbaa !9
  %214 = load ptr, ptr %45, align 8, !tbaa !9
  %215 = load ptr, ptr %74, align 8, !tbaa !9
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %209, i32 noundef %210, ptr noundef %211, ptr noundef %212, ptr noundef %213, ptr noundef %214, ptr noundef %215)
  br label %225

216:                                              ; preds = %205
  %217 = load i32, ptr %31, align 4, !tbaa !5
  %218 = load ptr, ptr %84, align 8, !tbaa !9
  %219 = load ptr, ptr %34, align 8, !tbaa !9
  %220 = load ptr, ptr %35, align 8, !tbaa !9
  %221 = getelementptr inbounds [2 x double], ptr %82, i64 0, i64 0
  %222 = getelementptr inbounds [2 x double], ptr %83, i64 0, i64 0
  %223 = load ptr, ptr %45, align 8, !tbaa !9
  %224 = load ptr, ptr %74, align 8, !tbaa !9
  call void @_ZN5nasoq16spmv_csc_sym_oneEiPmPiPdiS2_S2_iS2_S2_(i32 noundef %217, ptr noundef %218, ptr noundef %219, ptr noundef %220, i32 noundef -1, ptr noundef %221, ptr noundef %222, i32 noundef 1, ptr noundef %223, ptr noundef %224)
  br label %225

225:                                              ; preds = %216, %208
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %226

226:                                              ; preds = %246, %225
  %227 = load i32, ptr %66, align 4, !tbaa !5
  %228 = load i32, ptr %31, align 4, !tbaa !5
  %229 = icmp slt i32 %227, %228
  br i1 %229, label %230, label %249

230:                                              ; preds = %226
  %231 = load ptr, ptr %46, align 8, !tbaa !9
  %232 = load i32, ptr %66, align 4, !tbaa !5
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds double, ptr %231, i64 %233
  %235 = load double, ptr %234, align 8, !tbaa !13
  %236 = load ptr, ptr %74, align 8, !tbaa !9
  %237 = load i32, ptr %66, align 4, !tbaa !5
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds double, ptr %236, i64 %238
  %240 = load double, ptr %239, align 8, !tbaa !13
  %241 = fsub double %235, %240
  %242 = load ptr, ptr %74, align 8, !tbaa !9
  %243 = load i32, ptr %66, align 4, !tbaa !5
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds double, ptr %242, i64 %244
  store double %241, ptr %245, align 8, !tbaa !13
  br label %246

246:                                              ; preds = %230
  %247 = load i32, ptr %66, align 4, !tbaa !5
  %248 = add nsw i32 %247, 1
  store i32 %248, ptr %66, align 4, !tbaa !5
  br label %226, !llvm.loop !18

249:                                              ; preds = %226
  %250 = load i32, ptr %52, align 4, !tbaa !5
  %251 = icmp eq i32 %250, 2
  br i1 %251, label %252, label %274

252:                                              ; preds = %249
  %253 = load i32, ptr %31, align 4, !tbaa !5
  %254 = sext i32 %253 to i64
  %255 = load ptr, ptr %44, align 8, !tbaa !9
  %256 = load ptr, ptr %74, align 8, !tbaa !9
  %257 = load ptr, ptr %41, align 8, !tbaa !9
  %258 = load ptr, ptr %42, align 8, !tbaa !9
  %259 = load ptr, ptr %36, align 8, !tbaa !9
  %260 = load ptr, ptr %37, align 8, !tbaa !9
  %261 = load ptr, ptr %38, align 8, !tbaa !9
  %262 = load ptr, ptr %40, align 8, !tbaa !9
  %263 = load i32, ptr %43, align 4, !tbaa !5
  %264 = sext i32 %263 to i64
  %265 = load i64, ptr %39, align 8, !tbaa !11
  %266 = trunc i64 %265 to i32
  %267 = load i32, ptr %53, align 4, !tbaa !5
  %268 = load ptr, ptr %54, align 8, !tbaa !9
  %269 = load ptr, ptr %55, align 8, !tbaa !9
  %270 = load i32, ptr %56, align 4, !tbaa !5
  %271 = load ptr, ptr %57, align 8, !tbaa !9
  %272 = load ptr, ptr %58, align 8, !tbaa !9
  %273 = load i32, ptr %59, align 4, !tbaa !5
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %254, ptr noundef %255, ptr noundef %256, ptr noundef %257, ptr noundef %258, ptr noundef %259, ptr noundef %260, ptr noundef %261, ptr noundef %262, i64 noundef %264, i32 noundef %266, i32 noundef %267, ptr noundef %268, ptr noundef %269, i32 noundef %270, ptr noundef %271, ptr noundef %272, i32 noundef %273)
  br label %308

274:                                              ; preds = %249
  %275 = load i32, ptr %52, align 4, !tbaa !5
  %276 = icmp eq i32 %275, 1
  br i1 %276, label %277, label %292

277:                                              ; preds = %274
  %278 = load i32, ptr %31, align 4, !tbaa !5
  %279 = sext i32 %278 to i64
  %280 = load ptr, ptr %44, align 8, !tbaa !9
  %281 = load ptr, ptr %74, align 8, !tbaa !9
  %282 = load ptr, ptr %41, align 8, !tbaa !9
  %283 = load ptr, ptr %42, align 8, !tbaa !9
  %284 = load ptr, ptr %36, align 8, !tbaa !9
  %285 = load ptr, ptr %37, align 8, !tbaa !9
  %286 = load ptr, ptr %38, align 8, !tbaa !9
  %287 = load ptr, ptr %40, align 8, !tbaa !9
  %288 = load i32, ptr %43, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = load i64, ptr %39, align 8, !tbaa !11
  %291 = trunc i64 %290 to i32
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %279, ptr noundef %280, ptr noundef %281, ptr noundef %282, ptr noundef %283, ptr noundef %284, ptr noundef %285, ptr noundef %286, ptr noundef %287, i64 noundef %289, i32 noundef %291)
  br label %307

292:                                              ; preds = %274
  %293 = load i32, ptr %31, align 4, !tbaa !5
  %294 = sext i32 %293 to i64
  %295 = load ptr, ptr %44, align 8, !tbaa !9
  %296 = load ptr, ptr %74, align 8, !tbaa !9
  %297 = load ptr, ptr %41, align 8, !tbaa !9
  %298 = load ptr, ptr %42, align 8, !tbaa !9
  %299 = load ptr, ptr %36, align 8, !tbaa !9
  %300 = load ptr, ptr %37, align 8, !tbaa !9
  %301 = load ptr, ptr %38, align 8, !tbaa !9
  %302 = load ptr, ptr %40, align 8, !tbaa !9
  %303 = load i32, ptr %43, align 4, !tbaa !5
  %304 = sext i32 %303 to i64
  %305 = load i64, ptr %39, align 8, !tbaa !11
  %306 = trunc i64 %305 to i32
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %294, ptr noundef %295, ptr noundef %296, ptr noundef %297, ptr noundef %298, ptr noundef %299, ptr noundef %300, ptr noundef %301, ptr noundef %302, i64 noundef %304, i32 noundef %306)
  br label %307

307:                                              ; preds = %292, %277
  br label %308

308:                                              ; preds = %307, %252
  %309 = load i32, ptr %31, align 4, !tbaa !5
  %310 = load ptr, ptr %74, align 8, !tbaa !9
  %311 = load ptr, ptr %74, align 8, !tbaa !9
  %312 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %309, ptr noundef %310, ptr noundef %311)
  %313 = call double @sqrt(double noundef %312) #9
  store double %313, ptr %75, align 8, !tbaa !13
  %314 = load double, ptr %75, align 8, !tbaa !13
  %315 = load double, ptr %49, align 8, !tbaa !13
  %316 = fcmp olt double %314, %315
  br i1 %316, label %317, label %319

317:                                              ; preds = %308
  %318 = load i32, ptr %68, align 4, !tbaa !5
  store i32 %318, ptr %30, align 4
  store i32 1, ptr %87, align 4
  br label %1211

319:                                              ; preds = %308
  %320 = load i32, ptr %80, align 4, !tbaa !5
  %321 = icmp ne i32 %320, 0
  br i1 %321, label %322, label %326

322:                                              ; preds = %319
  %323 = load i32, ptr %67, align 4, !tbaa !5
  %324 = load double, ptr %75, align 8, !tbaa !13
  %325 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef %323, double noundef %324)
  br label %326

326:                                              ; preds = %322, %319
  %327 = load i32, ptr %67, align 4, !tbaa !5
  %328 = icmp eq i32 %327, 0
  br i1 %328, label %329, label %333

329:                                              ; preds = %326
  %330 = load double, ptr %75, align 8, !tbaa !13
  %331 = load double, ptr %50, align 8, !tbaa !13
  %332 = fmul double %330, %331
  store double %332, ptr %76, align 8, !tbaa !13
  br label %333

333:                                              ; preds = %329, %326
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %334

334:                                              ; preds = %352, %333
  %335 = load i32, ptr %66, align 4, !tbaa !5
  %336 = load i32, ptr %31, align 4, !tbaa !5
  %337 = icmp slt i32 %335, %336
  br i1 %337, label %338, label %355

338:                                              ; preds = %334
  %339 = load ptr, ptr %74, align 8, !tbaa !9
  %340 = load i32, ptr %66, align 4, !tbaa !5
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds double, ptr %339, i64 %341
  %343 = load double, ptr %342, align 8, !tbaa !13
  %344 = load double, ptr %75, align 8, !tbaa !13
  %345 = fdiv double %343, %344
  %346 = load ptr, ptr %79, align 8, !tbaa !9
  %347 = getelementptr inbounds ptr, ptr %346, i64 0
  %348 = load ptr, ptr %347, align 8, !tbaa !9
  %349 = load i32, ptr %66, align 4, !tbaa !5
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds double, ptr %348, i64 %350
  store double %345, ptr %351, align 8, !tbaa !13
  br label %352

352:                                              ; preds = %338
  %353 = load i32, ptr %66, align 4, !tbaa !5
  %354 = add nsw i32 %353, 1
  store i32 %354, ptr %66, align 4, !tbaa !5
  br label %334, !llvm.loop !19

355:                                              ; preds = %334
  %356 = load double, ptr %75, align 8, !tbaa !13
  %357 = load ptr, ptr %63, align 8, !tbaa !9
  %358 = getelementptr inbounds double, ptr %357, i64 0
  store double %356, ptr %358, align 8, !tbaa !13
  store i32 1, ptr %66, align 4, !tbaa !5
  br label %359

359:                                              ; preds = %369, %355
  %360 = load i32, ptr %66, align 4, !tbaa !5
  %361 = load i32, ptr %48, align 4, !tbaa !5
  %362 = add nsw i32 %361, 1
  %363 = icmp slt i32 %360, %362
  br i1 %363, label %364, label %372

364:                                              ; preds = %359
  %365 = load ptr, ptr %63, align 8, !tbaa !9
  %366 = load i32, ptr %66, align 4, !tbaa !5
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds double, ptr %365, i64 %367
  store double 0.000000e+00, ptr %368, align 8, !tbaa !13
  br label %369

369:                                              ; preds = %364
  %370 = load i32, ptr %66, align 4, !tbaa !5
  %371 = add nsw i32 %370, 1
  store i32 %371, ptr %66, align 4, !tbaa !5
  br label %359, !llvm.loop !20

372:                                              ; preds = %359
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %373

373:                                              ; preds = %396, %372
  %374 = load i32, ptr %66, align 4, !tbaa !5
  %375 = load i32, ptr %48, align 4, !tbaa !5
  %376 = add nsw i32 %375, 1
  %377 = icmp slt i32 %374, %376
  br i1 %377, label %378, label %399

378:                                              ; preds = %373
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %379

379:                                              ; preds = %392, %378
  %380 = load i32, ptr %69, align 4, !tbaa !5
  %381 = load i32, ptr %48, align 4, !tbaa !5
  %382 = icmp slt i32 %380, %381
  br i1 %382, label %383, label %395

383:                                              ; preds = %379
  %384 = load ptr, ptr %64, align 8, !tbaa !9
  %385 = load i32, ptr %66, align 4, !tbaa !5
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds ptr, ptr %384, i64 %386
  %388 = load ptr, ptr %387, align 8, !tbaa !9
  %389 = load i32, ptr %69, align 4, !tbaa !5
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds double, ptr %388, i64 %390
  store double 0.000000e+00, ptr %391, align 8, !tbaa !13
  br label %392

392:                                              ; preds = %383
  %393 = load i32, ptr %69, align 4, !tbaa !5
  %394 = add nsw i32 %393, 1
  store i32 %394, ptr %69, align 4, !tbaa !5
  br label %379, !llvm.loop !21

395:                                              ; preds = %379
  br label %396

396:                                              ; preds = %395
  %397 = load i32, ptr %66, align 4, !tbaa !5
  %398 = add nsw i32 %397, 1
  store i32 %398, ptr %66, align 4, !tbaa !5
  br label %373, !llvm.loop !22

399:                                              ; preds = %373
  store i32 0, ptr %70, align 4, !tbaa !5
  br label %400

400:                                              ; preds = %1045, %399
  %401 = load i32, ptr %70, align 4, !tbaa !5
  %402 = load i32, ptr %48, align 4, !tbaa !5
  %403 = icmp slt i32 %401, %402
  br i1 %403, label %404, label %1048

404:                                              ; preds = %400
  %405 = load i32, ptr %70, align 4, !tbaa !5
  store i32 %405, ptr %71, align 4, !tbaa !5
  %406 = load i32, ptr %51, align 4, !tbaa !5
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %425, label %408

408:                                              ; preds = %404
  %409 = load i32, ptr %31, align 4, !tbaa !5
  %410 = load i32, ptr %32, align 4, !tbaa !5
  %411 = load ptr, ptr %33, align 8, !tbaa !9
  %412 = load ptr, ptr %34, align 8, !tbaa !9
  %413 = load ptr, ptr %35, align 8, !tbaa !9
  %414 = load ptr, ptr %79, align 8, !tbaa !9
  %415 = load i32, ptr %70, align 4, !tbaa !5
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds ptr, ptr %414, i64 %416
  %418 = load ptr, ptr %417, align 8, !tbaa !9
  %419 = load ptr, ptr %79, align 8, !tbaa !9
  %420 = load i32, ptr %70, align 4, !tbaa !5
  %421 = add nsw i32 %420, 1
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds ptr, ptr %419, i64 %422
  %424 = load ptr, ptr %423, align 8, !tbaa !9
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %409, i32 noundef %410, ptr noundef %411, ptr noundef %412, ptr noundef %413, ptr noundef %418, ptr noundef %424)
  br label %443

425:                                              ; preds = %404
  %426 = load i32, ptr %31, align 4, !tbaa !5
  %427 = load ptr, ptr %84, align 8, !tbaa !9
  %428 = load ptr, ptr %34, align 8, !tbaa !9
  %429 = load ptr, ptr %35, align 8, !tbaa !9
  %430 = getelementptr inbounds [2 x double], ptr %82, i64 0, i64 0
  %431 = getelementptr inbounds [2 x double], ptr %83, i64 0, i64 0
  %432 = load ptr, ptr %79, align 8, !tbaa !9
  %433 = load i32, ptr %70, align 4, !tbaa !5
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds ptr, ptr %432, i64 %434
  %436 = load ptr, ptr %435, align 8, !tbaa !9
  %437 = load ptr, ptr %79, align 8, !tbaa !9
  %438 = load i32, ptr %70, align 4, !tbaa !5
  %439 = add nsw i32 %438, 1
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds ptr, ptr %437, i64 %440
  %442 = load ptr, ptr %441, align 8, !tbaa !9
  call void @_ZN5nasoq16spmv_csc_sym_oneEiPmPiPdiS2_S2_iS2_S2_(i32 noundef %426, ptr noundef %427, ptr noundef %428, ptr noundef %429, i32 noundef -1, ptr noundef %430, ptr noundef %431, i32 noundef 1, ptr noundef %436, ptr noundef %442)
  br label %443

443:                                              ; preds = %425, %408
  %444 = load i32, ptr %52, align 4, !tbaa !5
  %445 = icmp eq i32 %444, 2
  br i1 %445, label %446, label %473

446:                                              ; preds = %443
  %447 = load i32, ptr %31, align 4, !tbaa !5
  %448 = sext i32 %447 to i64
  %449 = load ptr, ptr %44, align 8, !tbaa !9
  %450 = load ptr, ptr %79, align 8, !tbaa !9
  %451 = load i32, ptr %70, align 4, !tbaa !5
  %452 = add nsw i32 %451, 1
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds ptr, ptr %450, i64 %453
  %455 = load ptr, ptr %454, align 8, !tbaa !9
  %456 = load ptr, ptr %41, align 8, !tbaa !9
  %457 = load ptr, ptr %42, align 8, !tbaa !9
  %458 = load ptr, ptr %36, align 8, !tbaa !9
  %459 = load ptr, ptr %37, align 8, !tbaa !9
  %460 = load ptr, ptr %38, align 8, !tbaa !9
  %461 = load ptr, ptr %40, align 8, !tbaa !9
  %462 = load i32, ptr %43, align 4, !tbaa !5
  %463 = sext i32 %462 to i64
  %464 = load i64, ptr %39, align 8, !tbaa !11
  %465 = trunc i64 %464 to i32
  %466 = load i32, ptr %53, align 4, !tbaa !5
  %467 = load ptr, ptr %54, align 8, !tbaa !9
  %468 = load ptr, ptr %55, align 8, !tbaa !9
  %469 = load i32, ptr %56, align 4, !tbaa !5
  %470 = load ptr, ptr %57, align 8, !tbaa !9
  %471 = load ptr, ptr %58, align 8, !tbaa !9
  %472 = load i32, ptr %59, align 4, !tbaa !5
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %448, ptr noundef %449, ptr noundef %455, ptr noundef %456, ptr noundef %457, ptr noundef %458, ptr noundef %459, ptr noundef %460, ptr noundef %461, i64 noundef %463, i32 noundef %465, i32 noundef %466, ptr noundef %467, ptr noundef %468, i32 noundef %469, ptr noundef %470, ptr noundef %471, i32 noundef %472)
  br label %517

473:                                              ; preds = %443
  %474 = load i32, ptr %52, align 4, !tbaa !5
  %475 = icmp eq i32 %474, 1
  br i1 %475, label %476, label %496

476:                                              ; preds = %473
  %477 = load i32, ptr %31, align 4, !tbaa !5
  %478 = sext i32 %477 to i64
  %479 = load ptr, ptr %44, align 8, !tbaa !9
  %480 = load ptr, ptr %79, align 8, !tbaa !9
  %481 = load i32, ptr %70, align 4, !tbaa !5
  %482 = add nsw i32 %481, 1
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds ptr, ptr %480, i64 %483
  %485 = load ptr, ptr %484, align 8, !tbaa !9
  %486 = load ptr, ptr %41, align 8, !tbaa !9
  %487 = load ptr, ptr %42, align 8, !tbaa !9
  %488 = load ptr, ptr %36, align 8, !tbaa !9
  %489 = load ptr, ptr %37, align 8, !tbaa !9
  %490 = load ptr, ptr %38, align 8, !tbaa !9
  %491 = load ptr, ptr %40, align 8, !tbaa !9
  %492 = load i32, ptr %43, align 4, !tbaa !5
  %493 = sext i32 %492 to i64
  %494 = load i64, ptr %39, align 8, !tbaa !11
  %495 = trunc i64 %494 to i32
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %478, ptr noundef %479, ptr noundef %485, ptr noundef %486, ptr noundef %487, ptr noundef %488, ptr noundef %489, ptr noundef %490, ptr noundef %491, i64 noundef %493, i32 noundef %495)
  br label %516

496:                                              ; preds = %473
  %497 = load i32, ptr %31, align 4, !tbaa !5
  %498 = sext i32 %497 to i64
  %499 = load ptr, ptr %44, align 8, !tbaa !9
  %500 = load ptr, ptr %79, align 8, !tbaa !9
  %501 = load i32, ptr %70, align 4, !tbaa !5
  %502 = add nsw i32 %501, 1
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds ptr, ptr %500, i64 %503
  %505 = load ptr, ptr %504, align 8, !tbaa !9
  %506 = load ptr, ptr %41, align 8, !tbaa !9
  %507 = load ptr, ptr %42, align 8, !tbaa !9
  %508 = load ptr, ptr %36, align 8, !tbaa !9
  %509 = load ptr, ptr %37, align 8, !tbaa !9
  %510 = load ptr, ptr %38, align 8, !tbaa !9
  %511 = load ptr, ptr %40, align 8, !tbaa !9
  %512 = load i32, ptr %43, align 4, !tbaa !5
  %513 = sext i32 %512 to i64
  %514 = load i64, ptr %39, align 8, !tbaa !11
  %515 = trunc i64 %514 to i32
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %498, ptr noundef %499, ptr noundef %505, ptr noundef %506, ptr noundef %507, ptr noundef %508, ptr noundef %509, ptr noundef %510, ptr noundef %511, i64 noundef %513, i32 noundef %515)
  br label %516

516:                                              ; preds = %496, %476
  br label %517

517:                                              ; preds = %516, %446
  %518 = load i32, ptr %31, align 4, !tbaa !5
  %519 = load ptr, ptr %79, align 8, !tbaa !9
  %520 = load i32, ptr %70, align 4, !tbaa !5
  %521 = add nsw i32 %520, 1
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds ptr, ptr %519, i64 %522
  %524 = load ptr, ptr %523, align 8, !tbaa !9
  %525 = load ptr, ptr %79, align 8, !tbaa !9
  %526 = load i32, ptr %70, align 4, !tbaa !5
  %527 = add nsw i32 %526, 1
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds ptr, ptr %525, i64 %528
  %530 = load ptr, ptr %529, align 8, !tbaa !9
  %531 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %518, ptr noundef %524, ptr noundef %530)
  %532 = call double @sqrt(double noundef %531) #9
  store double %532, ptr %60, align 8, !tbaa !13
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %533

533:                                              ; preds = %607, %517
  %534 = load i32, ptr %69, align 4, !tbaa !5
  %535 = load i32, ptr %70, align 4, !tbaa !5
  %536 = icmp sle i32 %534, %535
  br i1 %536, label %537, label %610

537:                                              ; preds = %533
  %538 = load i32, ptr %31, align 4, !tbaa !5
  %539 = load ptr, ptr %79, align 8, !tbaa !9
  %540 = load i32, ptr %70, align 4, !tbaa !5
  %541 = add nsw i32 %540, 1
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds ptr, ptr %539, i64 %542
  %544 = load ptr, ptr %543, align 8, !tbaa !9
  %545 = load ptr, ptr %79, align 8, !tbaa !9
  %546 = load i32, ptr %69, align 4, !tbaa !5
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds ptr, ptr %545, i64 %547
  %549 = load ptr, ptr %548, align 8, !tbaa !9
  %550 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %538, ptr noundef %544, ptr noundef %549)
  %551 = load ptr, ptr %64, align 8, !tbaa !9
  %552 = load i32, ptr %69, align 4, !tbaa !5
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds ptr, ptr %551, i64 %553
  %555 = load ptr, ptr %554, align 8, !tbaa !9
  %556 = load i32, ptr %70, align 4, !tbaa !5
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds double, ptr %555, i64 %557
  store double %550, ptr %558, align 8, !tbaa !13
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %559

559:                                              ; preds = %603, %537
  %560 = load i32, ptr %66, align 4, !tbaa !5
  %561 = load i32, ptr %31, align 4, !tbaa !5
  %562 = icmp slt i32 %560, %561
  br i1 %562, label %563, label %606

563:                                              ; preds = %559
  %564 = load ptr, ptr %79, align 8, !tbaa !9
  %565 = load i32, ptr %70, align 4, !tbaa !5
  %566 = add nsw i32 %565, 1
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds ptr, ptr %564, i64 %567
  %569 = load ptr, ptr %568, align 8, !tbaa !9
  %570 = load i32, ptr %66, align 4, !tbaa !5
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds double, ptr %569, i64 %571
  %573 = load double, ptr %572, align 8, !tbaa !13
  %574 = load ptr, ptr %64, align 8, !tbaa !9
  %575 = load i32, ptr %69, align 4, !tbaa !5
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds ptr, ptr %574, i64 %576
  %578 = load ptr, ptr %577, align 8, !tbaa !9
  %579 = load i32, ptr %70, align 4, !tbaa !5
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds double, ptr %578, i64 %580
  %582 = load double, ptr %581, align 8, !tbaa !13
  %583 = load ptr, ptr %79, align 8, !tbaa !9
  %584 = load i32, ptr %69, align 4, !tbaa !5
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds ptr, ptr %583, i64 %585
  %587 = load ptr, ptr %586, align 8, !tbaa !9
  %588 = load i32, ptr %66, align 4, !tbaa !5
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds double, ptr %587, i64 %589
  %591 = load double, ptr %590, align 8, !tbaa !13
  %592 = fneg double %582
  %593 = call double @llvm.fmuladd.f64(double %592, double %591, double %573)
  %594 = load ptr, ptr %79, align 8, !tbaa !9
  %595 = load i32, ptr %70, align 4, !tbaa !5
  %596 = add nsw i32 %595, 1
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds ptr, ptr %594, i64 %597
  %599 = load ptr, ptr %598, align 8, !tbaa !9
  %600 = load i32, ptr %66, align 4, !tbaa !5
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds double, ptr %599, i64 %601
  store double %593, ptr %602, align 8, !tbaa !13
  br label %603

603:                                              ; preds = %563
  %604 = load i32, ptr %66, align 4, !tbaa !5
  %605 = add nsw i32 %604, 1
  store i32 %605, ptr %66, align 4, !tbaa !5
  br label %559, !llvm.loop !23

606:                                              ; preds = %559
  br label %607

607:                                              ; preds = %606
  %608 = load i32, ptr %69, align 4, !tbaa !5
  %609 = add nsw i32 %608, 1
  store i32 %609, ptr %69, align 4, !tbaa !5
  br label %533, !llvm.loop !24

610:                                              ; preds = %533
  %611 = load i32, ptr %31, align 4, !tbaa !5
  %612 = load ptr, ptr %79, align 8, !tbaa !9
  %613 = load i32, ptr %70, align 4, !tbaa !5
  %614 = add nsw i32 %613, 1
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds ptr, ptr %612, i64 %615
  %617 = load ptr, ptr %616, align 8, !tbaa !9
  %618 = load ptr, ptr %79, align 8, !tbaa !9
  %619 = load i32, ptr %70, align 4, !tbaa !5
  %620 = add nsw i32 %619, 1
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds ptr, ptr %618, i64 %621
  %623 = load ptr, ptr %622, align 8, !tbaa !9
  %624 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %611, ptr noundef %617, ptr noundef %623)
  %625 = call double @sqrt(double noundef %624) #9
  %626 = load ptr, ptr %64, align 8, !tbaa !9
  %627 = load i32, ptr %70, align 4, !tbaa !5
  %628 = add nsw i32 %627, 1
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds ptr, ptr %626, i64 %629
  %631 = load ptr, ptr %630, align 8, !tbaa !9
  %632 = load i32, ptr %70, align 4, !tbaa !5
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds double, ptr %631, i64 %633
  store double %625, ptr %634, align 8, !tbaa !13
  %635 = load double, ptr %60, align 8, !tbaa !13
  %636 = load double, ptr %62, align 8, !tbaa !13
  %637 = load ptr, ptr %64, align 8, !tbaa !9
  %638 = load i32, ptr %70, align 4, !tbaa !5
  %639 = add nsw i32 %638, 1
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds ptr, ptr %637, i64 %640
  %642 = load ptr, ptr %641, align 8, !tbaa !9
  %643 = load i32, ptr %70, align 4, !tbaa !5
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds double, ptr %642, i64 %644
  %646 = load double, ptr %645, align 8, !tbaa !13
  %647 = call double @llvm.fmuladd.f64(double %636, double %646, double %635)
  %648 = load double, ptr %60, align 8, !tbaa !13
  %649 = fcmp oeq double %647, %648
  br i1 %649, label %650, label %757

650:                                              ; preds = %610
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %651

651:                                              ; preds = %729, %650
  %652 = load i32, ptr %69, align 4, !tbaa !5
  %653 = load i32, ptr %70, align 4, !tbaa !5
  %654 = add nsw i32 %653, 1
  %655 = icmp slt i32 %652, %654
  br i1 %655, label %656, label %732

656:                                              ; preds = %651
  %657 = load i32, ptr %31, align 4, !tbaa !5
  %658 = load ptr, ptr %79, align 8, !tbaa !9
  %659 = load i32, ptr %70, align 4, !tbaa !5
  %660 = add nsw i32 %659, 1
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds ptr, ptr %658, i64 %661
  %663 = load ptr, ptr %662, align 8, !tbaa !9
  %664 = load ptr, ptr %79, align 8, !tbaa !9
  %665 = load i32, ptr %69, align 4, !tbaa !5
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds ptr, ptr %664, i64 %666
  %668 = load ptr, ptr %667, align 8, !tbaa !9
  %669 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %657, ptr noundef %663, ptr noundef %668)
  store double %669, ptr %65, align 8, !tbaa !13
  %670 = load ptr, ptr %64, align 8, !tbaa !9
  %671 = load i32, ptr %69, align 4, !tbaa !5
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds ptr, ptr %670, i64 %672
  %674 = load ptr, ptr %673, align 8, !tbaa !9
  %675 = load i32, ptr %70, align 4, !tbaa !5
  %676 = sext i32 %675 to i64
  %677 = getelementptr inbounds double, ptr %674, i64 %676
  %678 = load double, ptr %677, align 8, !tbaa !13
  %679 = load double, ptr %65, align 8, !tbaa !13
  %680 = fadd double %678, %679
  %681 = load ptr, ptr %64, align 8, !tbaa !9
  %682 = load i32, ptr %69, align 4, !tbaa !5
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds ptr, ptr %681, i64 %683
  %685 = load ptr, ptr %684, align 8, !tbaa !9
  %686 = load i32, ptr %70, align 4, !tbaa !5
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds double, ptr %685, i64 %687
  store double %680, ptr %688, align 8, !tbaa !13
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %689

689:                                              ; preds = %725, %656
  %690 = load i32, ptr %66, align 4, !tbaa !5
  %691 = load i32, ptr %31, align 4, !tbaa !5
  %692 = icmp slt i32 %690, %691
  br i1 %692, label %693, label %728

693:                                              ; preds = %689
  %694 = load ptr, ptr %79, align 8, !tbaa !9
  %695 = load i32, ptr %70, align 4, !tbaa !5
  %696 = add nsw i32 %695, 1
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds ptr, ptr %694, i64 %697
  %699 = load ptr, ptr %698, align 8, !tbaa !9
  %700 = load i32, ptr %66, align 4, !tbaa !5
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds double, ptr %699, i64 %701
  %703 = load double, ptr %702, align 8, !tbaa !13
  %704 = load double, ptr %65, align 8, !tbaa !13
  %705 = load ptr, ptr %79, align 8, !tbaa !9
  %706 = load i32, ptr %69, align 4, !tbaa !5
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds ptr, ptr %705, i64 %707
  %709 = load ptr, ptr %708, align 8, !tbaa !9
  %710 = load i32, ptr %66, align 4, !tbaa !5
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds double, ptr %709, i64 %711
  %713 = load double, ptr %712, align 8, !tbaa !13
  %714 = fneg double %704
  %715 = call double @llvm.fmuladd.f64(double %714, double %713, double %703)
  %716 = load ptr, ptr %79, align 8, !tbaa !9
  %717 = load i32, ptr %70, align 4, !tbaa !5
  %718 = add nsw i32 %717, 1
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds ptr, ptr %716, i64 %719
  %721 = load ptr, ptr %720, align 8, !tbaa !9
  %722 = load i32, ptr %66, align 4, !tbaa !5
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds double, ptr %721, i64 %723
  store double %715, ptr %724, align 8, !tbaa !13
  br label %725

725:                                              ; preds = %693
  %726 = load i32, ptr %66, align 4, !tbaa !5
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %66, align 4, !tbaa !5
  br label %689, !llvm.loop !25

728:                                              ; preds = %689
  br label %729

729:                                              ; preds = %728
  %730 = load i32, ptr %69, align 4, !tbaa !5
  %731 = add nsw i32 %730, 1
  store i32 %731, ptr %69, align 4, !tbaa !5
  br label %651, !llvm.loop !26

732:                                              ; preds = %651
  %733 = load i32, ptr %31, align 4, !tbaa !5
  %734 = load ptr, ptr %79, align 8, !tbaa !9
  %735 = load i32, ptr %70, align 4, !tbaa !5
  %736 = add nsw i32 %735, 1
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds ptr, ptr %734, i64 %737
  %739 = load ptr, ptr %738, align 8, !tbaa !9
  %740 = load ptr, ptr %79, align 8, !tbaa !9
  %741 = load i32, ptr %70, align 4, !tbaa !5
  %742 = add nsw i32 %741, 1
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds ptr, ptr %740, i64 %743
  %745 = load ptr, ptr %744, align 8, !tbaa !9
  %746 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %733, ptr noundef %739, ptr noundef %745)
  %747 = call double @sqrt(double noundef %746) #9
  %748 = load ptr, ptr %64, align 8, !tbaa !9
  %749 = load i32, ptr %70, align 4, !tbaa !5
  %750 = add nsw i32 %749, 1
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds ptr, ptr %748, i64 %751
  %753 = load ptr, ptr %752, align 8, !tbaa !9
  %754 = load i32, ptr %70, align 4, !tbaa !5
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds double, ptr %753, i64 %755
  store double %747, ptr %756, align 8, !tbaa !13
  br label %757

757:                                              ; preds = %732, %610
  %758 = load ptr, ptr %64, align 8, !tbaa !9
  %759 = load i32, ptr %70, align 4, !tbaa !5
  %760 = add nsw i32 %759, 1
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds ptr, ptr %758, i64 %761
  %763 = load ptr, ptr %762, align 8, !tbaa !9
  %764 = load i32, ptr %70, align 4, !tbaa !5
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds double, ptr %763, i64 %765
  %767 = load double, ptr %766, align 8, !tbaa !13
  %768 = fcmp une double %767, 0.000000e+00
  br i1 %768, label %769, label %809

769:                                              ; preds = %757
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %770

770:                                              ; preds = %805, %769
  %771 = load i32, ptr %66, align 4, !tbaa !5
  %772 = load i32, ptr %31, align 4, !tbaa !5
  %773 = icmp slt i32 %771, %772
  br i1 %773, label %774, label %808

774:                                              ; preds = %770
  %775 = load ptr, ptr %79, align 8, !tbaa !9
  %776 = load i32, ptr %70, align 4, !tbaa !5
  %777 = add nsw i32 %776, 1
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds ptr, ptr %775, i64 %778
  %780 = load ptr, ptr %779, align 8, !tbaa !9
  %781 = load i32, ptr %66, align 4, !tbaa !5
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds double, ptr %780, i64 %782
  %784 = load double, ptr %783, align 8, !tbaa !13
  %785 = load ptr, ptr %64, align 8, !tbaa !9
  %786 = load i32, ptr %70, align 4, !tbaa !5
  %787 = add nsw i32 %786, 1
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds ptr, ptr %785, i64 %788
  %790 = load ptr, ptr %789, align 8, !tbaa !9
  %791 = load i32, ptr %70, align 4, !tbaa !5
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds double, ptr %790, i64 %792
  %794 = load double, ptr %793, align 8, !tbaa !13
  %795 = fdiv double %784, %794
  %796 = load ptr, ptr %79, align 8, !tbaa !9
  %797 = load i32, ptr %70, align 4, !tbaa !5
  %798 = add nsw i32 %797, 1
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds ptr, ptr %796, i64 %799
  %801 = load ptr, ptr %800, align 8, !tbaa !9
  %802 = load i32, ptr %66, align 4, !tbaa !5
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds double, ptr %801, i64 %803
  store double %795, ptr %804, align 8, !tbaa !13
  br label %805

805:                                              ; preds = %774
  %806 = load i32, ptr %66, align 4, !tbaa !5
  %807 = add nsw i32 %806, 1
  store i32 %807, ptr %66, align 4, !tbaa !5
  br label %770, !llvm.loop !27

808:                                              ; preds = %770
  br label %809

809:                                              ; preds = %808, %757
  %810 = load i32, ptr %70, align 4, !tbaa !5
  %811 = icmp slt i32 0, %810
  br i1 %811, label %812, label %880

812:                                              ; preds = %809
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %813

813:                                              ; preds = %832, %812
  %814 = load i32, ptr %66, align 4, !tbaa !5
  %815 = load i32, ptr %70, align 4, !tbaa !5
  %816 = add nsw i32 %815, 2
  %817 = icmp slt i32 %814, %816
  br i1 %817, label %818, label %835

818:                                              ; preds = %813
  %819 = load ptr, ptr %64, align 8, !tbaa !9
  %820 = load i32, ptr %66, align 4, !tbaa !5
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds ptr, ptr %819, i64 %821
  %823 = load ptr, ptr %822, align 8, !tbaa !9
  %824 = load i32, ptr %70, align 4, !tbaa !5
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds double, ptr %823, i64 %825
  %827 = load double, ptr %826, align 8, !tbaa !13
  %828 = load ptr, ptr %81, align 8, !tbaa !9
  %829 = load i32, ptr %66, align 4, !tbaa !5
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds double, ptr %828, i64 %830
  store double %827, ptr %831, align 8, !tbaa !13
  br label %832

832:                                              ; preds = %818
  %833 = load i32, ptr %66, align 4, !tbaa !5
  %834 = add nsw i32 %833, 1
  store i32 %834, ptr %66, align 4, !tbaa !5
  br label %813, !llvm.loop !28

835:                                              ; preds = %813
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %836

836:                                              ; preds = %853, %835
  %837 = load i32, ptr %69, align 4, !tbaa !5
  %838 = load i32, ptr %70, align 4, !tbaa !5
  %839 = icmp slt i32 %837, %838
  br i1 %839, label %840, label %856

840:                                              ; preds = %836
  %841 = load ptr, ptr %61, align 8, !tbaa !9
  %842 = load i32, ptr %69, align 4, !tbaa !5
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds double, ptr %841, i64 %843
  %845 = load double, ptr %844, align 8, !tbaa !13
  %846 = load ptr, ptr %77, align 8, !tbaa !9
  %847 = load i32, ptr %69, align 4, !tbaa !5
  %848 = sext i32 %847 to i64
  %849 = getelementptr inbounds double, ptr %846, i64 %848
  %850 = load double, ptr %849, align 8, !tbaa !13
  %851 = load i32, ptr %69, align 4, !tbaa !5
  %852 = load ptr, ptr %81, align 8, !tbaa !9
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %845, double noundef %850, i32 noundef %851, ptr noundef %852)
  br label %853

853:                                              ; preds = %840
  %854 = load i32, ptr %69, align 4, !tbaa !5
  %855 = add nsw i32 %854, 1
  store i32 %855, ptr %69, align 4, !tbaa !5
  br label %836, !llvm.loop !29

856:                                              ; preds = %836
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %857

857:                                              ; preds = %876, %856
  %858 = load i32, ptr %66, align 4, !tbaa !5
  %859 = load i32, ptr %70, align 4, !tbaa !5
  %860 = add nsw i32 %859, 2
  %861 = icmp slt i32 %858, %860
  br i1 %861, label %862, label %879

862:                                              ; preds = %857
  %863 = load ptr, ptr %81, align 8, !tbaa !9
  %864 = load i32, ptr %66, align 4, !tbaa !5
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds double, ptr %863, i64 %865
  %867 = load double, ptr %866, align 8, !tbaa !13
  %868 = load ptr, ptr %64, align 8, !tbaa !9
  %869 = load i32, ptr %66, align 4, !tbaa !5
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds ptr, ptr %868, i64 %870
  %872 = load ptr, ptr %871, align 8, !tbaa !9
  %873 = load i32, ptr %70, align 4, !tbaa !5
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds double, ptr %872, i64 %874
  store double %867, ptr %875, align 8, !tbaa !13
  br label %876

876:                                              ; preds = %862
  %877 = load i32, ptr %66, align 4, !tbaa !5
  %878 = add nsw i32 %877, 1
  store i32 %878, ptr %66, align 4, !tbaa !5
  br label %857, !llvm.loop !30

879:                                              ; preds = %857
  br label %880

880:                                              ; preds = %879, %809
  %881 = load ptr, ptr %64, align 8, !tbaa !9
  %882 = load i32, ptr %70, align 4, !tbaa !5
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds ptr, ptr %881, i64 %883
  %885 = load ptr, ptr %884, align 8, !tbaa !9
  %886 = load i32, ptr %70, align 4, !tbaa !5
  %887 = sext i32 %886 to i64
  %888 = getelementptr inbounds double, ptr %885, i64 %887
  %889 = load double, ptr %888, align 8, !tbaa !13
  %890 = load ptr, ptr %64, align 8, !tbaa !9
  %891 = load i32, ptr %70, align 4, !tbaa !5
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds ptr, ptr %890, i64 %892
  %894 = load ptr, ptr %893, align 8, !tbaa !9
  %895 = load i32, ptr %70, align 4, !tbaa !5
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds double, ptr %894, i64 %896
  %898 = load double, ptr %897, align 8, !tbaa !13
  %899 = load ptr, ptr %64, align 8, !tbaa !9
  %900 = load i32, ptr %70, align 4, !tbaa !5
  %901 = add nsw i32 %900, 1
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds ptr, ptr %899, i64 %902
  %904 = load ptr, ptr %903, align 8, !tbaa !9
  %905 = load i32, ptr %70, align 4, !tbaa !5
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds double, ptr %904, i64 %906
  %908 = load double, ptr %907, align 8, !tbaa !13
  %909 = load ptr, ptr %64, align 8, !tbaa !9
  %910 = load i32, ptr %70, align 4, !tbaa !5
  %911 = add nsw i32 %910, 1
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds ptr, ptr %909, i64 %912
  %914 = load ptr, ptr %913, align 8, !tbaa !9
  %915 = load i32, ptr %70, align 4, !tbaa !5
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds double, ptr %914, i64 %916
  %918 = load double, ptr %917, align 8, !tbaa !13
  %919 = fmul double %908, %918
  %920 = call double @llvm.fmuladd.f64(double %889, double %898, double %919)
  %921 = call double @sqrt(double noundef %920) #9
  store double %921, ptr %73, align 8, !tbaa !13
  %922 = load double, ptr %73, align 8, !tbaa !13
  %923 = fcmp oeq double %922, 0.000000e+00
  br i1 %923, label %924, label %926

924:                                              ; preds = %880
  %925 = load i32, ptr %68, align 4, !tbaa !5
  store i32 %925, ptr %30, align 4
  store i32 1, ptr %87, align 4
  br label %1211

926:                                              ; preds = %880
  %927 = load ptr, ptr %64, align 8, !tbaa !9
  %928 = load i32, ptr %70, align 4, !tbaa !5
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds ptr, ptr %927, i64 %929
  %931 = load ptr, ptr %930, align 8, !tbaa !9
  %932 = load i32, ptr %70, align 4, !tbaa !5
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds double, ptr %931, i64 %933
  %935 = load double, ptr %934, align 8, !tbaa !13
  %936 = load double, ptr %73, align 8, !tbaa !13
  %937 = fdiv double %935, %936
  %938 = load ptr, ptr %61, align 8, !tbaa !9
  %939 = load i32, ptr %70, align 4, !tbaa !5
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds double, ptr %938, i64 %940
  store double %937, ptr %941, align 8, !tbaa !13
  %942 = load ptr, ptr %64, align 8, !tbaa !9
  %943 = load i32, ptr %70, align 4, !tbaa !5
  %944 = add nsw i32 %943, 1
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds ptr, ptr %942, i64 %945
  %947 = load ptr, ptr %946, align 8, !tbaa !9
  %948 = load i32, ptr %70, align 4, !tbaa !5
  %949 = sext i32 %948 to i64
  %950 = getelementptr inbounds double, ptr %947, i64 %949
  %951 = load double, ptr %950, align 8, !tbaa !13
  %952 = fneg double %951
  %953 = load double, ptr %73, align 8, !tbaa !13
  %954 = fdiv double %952, %953
  %955 = load ptr, ptr %77, align 8, !tbaa !9
  %956 = load i32, ptr %70, align 4, !tbaa !5
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds double, ptr %955, i64 %957
  store double %954, ptr %958, align 8, !tbaa !13
  %959 = load ptr, ptr %61, align 8, !tbaa !9
  %960 = load i32, ptr %70, align 4, !tbaa !5
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds double, ptr %959, i64 %961
  %963 = load double, ptr %962, align 8, !tbaa !13
  %964 = load ptr, ptr %64, align 8, !tbaa !9
  %965 = load i32, ptr %70, align 4, !tbaa !5
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds ptr, ptr %964, i64 %966
  %968 = load ptr, ptr %967, align 8, !tbaa !9
  %969 = load i32, ptr %70, align 4, !tbaa !5
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds double, ptr %968, i64 %970
  %972 = load double, ptr %971, align 8, !tbaa !13
  %973 = load ptr, ptr %77, align 8, !tbaa !9
  %974 = load i32, ptr %70, align 4, !tbaa !5
  %975 = sext i32 %974 to i64
  %976 = getelementptr inbounds double, ptr %973, i64 %975
  %977 = load double, ptr %976, align 8, !tbaa !13
  %978 = load ptr, ptr %64, align 8, !tbaa !9
  %979 = load i32, ptr %70, align 4, !tbaa !5
  %980 = add nsw i32 %979, 1
  %981 = sext i32 %980 to i64
  %982 = getelementptr inbounds ptr, ptr %978, i64 %981
  %983 = load ptr, ptr %982, align 8, !tbaa !9
  %984 = load i32, ptr %70, align 4, !tbaa !5
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds double, ptr %983, i64 %985
  %987 = load double, ptr %986, align 8, !tbaa !13
  %988 = fmul double %977, %987
  %989 = fneg double %988
  %990 = call double @llvm.fmuladd.f64(double %963, double %972, double %989)
  %991 = load ptr, ptr %64, align 8, !tbaa !9
  %992 = load i32, ptr %70, align 4, !tbaa !5
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds ptr, ptr %991, i64 %993
  %995 = load ptr, ptr %994, align 8, !tbaa !9
  %996 = load i32, ptr %70, align 4, !tbaa !5
  %997 = sext i32 %996 to i64
  %998 = getelementptr inbounds double, ptr %995, i64 %997
  store double %990, ptr %998, align 8, !tbaa !13
  %999 = load ptr, ptr %64, align 8, !tbaa !9
  %1000 = load i32, ptr %70, align 4, !tbaa !5
  %1001 = add nsw i32 %1000, 1
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds ptr, ptr %999, i64 %1002
  %1004 = load ptr, ptr %1003, align 8, !tbaa !9
  %1005 = load i32, ptr %70, align 4, !tbaa !5
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds double, ptr %1004, i64 %1006
  store double 0.000000e+00, ptr %1007, align 8, !tbaa !13
  %1008 = load ptr, ptr %61, align 8, !tbaa !9
  %1009 = load i32, ptr %70, align 4, !tbaa !5
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds double, ptr %1008, i64 %1010
  %1012 = load double, ptr %1011, align 8, !tbaa !13
  %1013 = load ptr, ptr %77, align 8, !tbaa !9
  %1014 = load i32, ptr %70, align 4, !tbaa !5
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds double, ptr %1013, i64 %1015
  %1017 = load double, ptr %1016, align 8, !tbaa !13
  %1018 = load i32, ptr %70, align 4, !tbaa !5
  %1019 = load ptr, ptr %63, align 8, !tbaa !9
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %1012, double noundef %1017, i32 noundef %1018, ptr noundef %1019)
  %1020 = load ptr, ptr %63, align 8, !tbaa !9
  %1021 = load i32, ptr %70, align 4, !tbaa !5
  %1022 = add nsw i32 %1021, 1
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds double, ptr %1020, i64 %1023
  %1025 = load double, ptr %1024, align 8, !tbaa !13
  %1026 = call double @llvm.fabs.f64(double %1025)
  store double %1026, ptr %75, align 8, !tbaa !13
  %1027 = load i32, ptr %68, align 4, !tbaa !5
  %1028 = add nsw i32 %1027, 1
  store i32 %1028, ptr %68, align 4, !tbaa !5
  %1029 = load i32, ptr %80, align 4, !tbaa !5
  %1030 = icmp ne i32 %1029, 0
  br i1 %1030, label %1031, label %1035

1031:                                             ; preds = %926
  %1032 = load i32, ptr %70, align 4, !tbaa !5
  %1033 = load double, ptr %75, align 8, !tbaa !13
  %1034 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef %1032, double noundef %1033)
  br label %1035

1035:                                             ; preds = %1031, %926
  %1036 = load double, ptr %75, align 8, !tbaa !13
  %1037 = load double, ptr %76, align 8, !tbaa !13
  %1038 = fcmp ole double %1036, %1037
  br i1 %1038, label %1039, label %1044

1039:                                             ; preds = %1035
  %1040 = load double, ptr %75, align 8, !tbaa !13
  %1041 = load double, ptr %49, align 8, !tbaa !13
  %1042 = fcmp ole double %1040, %1041
  br i1 %1042, label %1043, label %1044

1043:                                             ; preds = %1039
  br label %1048

1044:                                             ; preds = %1039, %1035
  br label %1045

1045:                                             ; preds = %1044
  %1046 = load i32, ptr %70, align 4, !tbaa !5
  %1047 = add nsw i32 %1046, 1
  store i32 %1047, ptr %70, align 4, !tbaa !5
  br label %400, !llvm.loop !31

1048:                                             ; preds = %1043, %400
  %1049 = load i32, ptr %71, align 4, !tbaa !5
  store i32 %1049, ptr %70, align 4, !tbaa !5
  %1050 = load ptr, ptr %63, align 8, !tbaa !9
  %1051 = load i32, ptr %70, align 4, !tbaa !5
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds double, ptr %1050, i64 %1052
  %1054 = load double, ptr %1053, align 8, !tbaa !13
  %1055 = load ptr, ptr %64, align 8, !tbaa !9
  %1056 = load i32, ptr %70, align 4, !tbaa !5
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds ptr, ptr %1055, i64 %1057
  %1059 = load ptr, ptr %1058, align 8, !tbaa !9
  %1060 = load i32, ptr %70, align 4, !tbaa !5
  %1061 = sext i32 %1060 to i64
  %1062 = getelementptr inbounds double, ptr %1059, i64 %1061
  %1063 = load double, ptr %1062, align 8, !tbaa !13
  %1064 = fdiv double %1054, %1063
  %1065 = load ptr, ptr %81, align 8, !tbaa !9
  %1066 = load i32, ptr %70, align 4, !tbaa !5
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds double, ptr %1065, i64 %1067
  store double %1064, ptr %1068, align 8, !tbaa !13
  %1069 = load i32, ptr %70, align 4, !tbaa !5
  %1070 = sub nsw i32 %1069, 1
  store i32 %1070, ptr %66, align 4, !tbaa !5
  br label %1071

1071:                                             ; preds = %1140, %1048
  %1072 = load i32, ptr %66, align 4, !tbaa !5
  %1073 = icmp sle i32 0, %1072
  br i1 %1073, label %1074, label %1143

1074:                                             ; preds = %1071
  %1075 = load ptr, ptr %63, align 8, !tbaa !9
  %1076 = load i32, ptr %66, align 4, !tbaa !5
  %1077 = sext i32 %1076 to i64
  %1078 = getelementptr inbounds double, ptr %1075, i64 %1077
  %1079 = load double, ptr %1078, align 8, !tbaa !13
  %1080 = load ptr, ptr %81, align 8, !tbaa !9
  %1081 = load i32, ptr %66, align 4, !tbaa !5
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds double, ptr %1080, i64 %1082
  store double %1079, ptr %1083, align 8, !tbaa !13
  %1084 = load i32, ptr %66, align 4, !tbaa !5
  %1085 = add nsw i32 %1084, 1
  store i32 %1085, ptr %69, align 4, !tbaa !5
  br label %1086

1086:                                             ; preds = %1117, %1074
  %1087 = load i32, ptr %69, align 4, !tbaa !5
  %1088 = load i32, ptr %70, align 4, !tbaa !5
  %1089 = add nsw i32 %1088, 1
  %1090 = icmp slt i32 %1087, %1089
  br i1 %1090, label %1091, label %1120

1091:                                             ; preds = %1086
  %1092 = load ptr, ptr %81, align 8, !tbaa !9
  %1093 = load i32, ptr %66, align 4, !tbaa !5
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds double, ptr %1092, i64 %1094
  %1096 = load double, ptr %1095, align 8, !tbaa !13
  %1097 = load ptr, ptr %64, align 8, !tbaa !9
  %1098 = load i32, ptr %66, align 4, !tbaa !5
  %1099 = sext i32 %1098 to i64
  %1100 = getelementptr inbounds ptr, ptr %1097, i64 %1099
  %1101 = load ptr, ptr %1100, align 8, !tbaa !9
  %1102 = load i32, ptr %69, align 4, !tbaa !5
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds double, ptr %1101, i64 %1103
  %1105 = load double, ptr %1104, align 8, !tbaa !13
  %1106 = load ptr, ptr %81, align 8, !tbaa !9
  %1107 = load i32, ptr %69, align 4, !tbaa !5
  %1108 = sext i32 %1107 to i64
  %1109 = getelementptr inbounds double, ptr %1106, i64 %1108
  %1110 = load double, ptr %1109, align 8, !tbaa !13
  %1111 = fneg double %1105
  %1112 = call double @llvm.fmuladd.f64(double %1111, double %1110, double %1096)
  %1113 = load ptr, ptr %81, align 8, !tbaa !9
  %1114 = load i32, ptr %66, align 4, !tbaa !5
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds double, ptr %1113, i64 %1115
  store double %1112, ptr %1116, align 8, !tbaa !13
  br label %1117

1117:                                             ; preds = %1091
  %1118 = load i32, ptr %69, align 4, !tbaa !5
  %1119 = add nsw i32 %1118, 1
  store i32 %1119, ptr %69, align 4, !tbaa !5
  br label %1086, !llvm.loop !32

1120:                                             ; preds = %1086
  %1121 = load ptr, ptr %81, align 8, !tbaa !9
  %1122 = load i32, ptr %66, align 4, !tbaa !5
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds double, ptr %1121, i64 %1123
  %1125 = load double, ptr %1124, align 8, !tbaa !13
  %1126 = load ptr, ptr %64, align 8, !tbaa !9
  %1127 = load i32, ptr %66, align 4, !tbaa !5
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds ptr, ptr %1126, i64 %1128
  %1130 = load ptr, ptr %1129, align 8, !tbaa !9
  %1131 = load i32, ptr %66, align 4, !tbaa !5
  %1132 = sext i32 %1131 to i64
  %1133 = getelementptr inbounds double, ptr %1130, i64 %1132
  %1134 = load double, ptr %1133, align 8, !tbaa !13
  %1135 = fdiv double %1125, %1134
  %1136 = load ptr, ptr %81, align 8, !tbaa !9
  %1137 = load i32, ptr %66, align 4, !tbaa !5
  %1138 = sext i32 %1137 to i64
  %1139 = getelementptr inbounds double, ptr %1136, i64 %1138
  store double %1135, ptr %1139, align 8, !tbaa !13
  br label %1140

1140:                                             ; preds = %1120
  %1141 = load i32, ptr %66, align 4, !tbaa !5
  %1142 = add nsw i32 %1141, -1
  store i32 %1142, ptr %66, align 4, !tbaa !5
  br label %1071, !llvm.loop !33

1143:                                             ; preds = %1071
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %1144

1144:                                             ; preds = %1183, %1143
  %1145 = load i32, ptr %66, align 4, !tbaa !5
  %1146 = load i32, ptr %31, align 4, !tbaa !5
  %1147 = icmp slt i32 %1145, %1146
  br i1 %1147, label %1148, label %1186

1148:                                             ; preds = %1144
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %1149

1149:                                             ; preds = %1179, %1148
  %1150 = load i32, ptr %69, align 4, !tbaa !5
  %1151 = load i32, ptr %70, align 4, !tbaa !5
  %1152 = add nsw i32 %1151, 1
  %1153 = icmp slt i32 %1150, %1152
  br i1 %1153, label %1154, label %1182

1154:                                             ; preds = %1149
  %1155 = load ptr, ptr %45, align 8, !tbaa !9
  %1156 = load i32, ptr %66, align 4, !tbaa !5
  %1157 = sext i32 %1156 to i64
  %1158 = getelementptr inbounds double, ptr %1155, i64 %1157
  %1159 = load double, ptr %1158, align 8, !tbaa !13
  %1160 = load ptr, ptr %79, align 8, !tbaa !9
  %1161 = load i32, ptr %69, align 4, !tbaa !5
  %1162 = sext i32 %1161 to i64
  %1163 = getelementptr inbounds ptr, ptr %1160, i64 %1162
  %1164 = load ptr, ptr %1163, align 8, !tbaa !9
  %1165 = load i32, ptr %66, align 4, !tbaa !5
  %1166 = sext i32 %1165 to i64
  %1167 = getelementptr inbounds double, ptr %1164, i64 %1166
  %1168 = load double, ptr %1167, align 8, !tbaa !13
  %1169 = load ptr, ptr %81, align 8, !tbaa !9
  %1170 = load i32, ptr %69, align 4, !tbaa !5
  %1171 = sext i32 %1170 to i64
  %1172 = getelementptr inbounds double, ptr %1169, i64 %1171
  %1173 = load double, ptr %1172, align 8, !tbaa !13
  %1174 = call double @llvm.fmuladd.f64(double %1168, double %1173, double %1159)
  %1175 = load ptr, ptr %45, align 8, !tbaa !9
  %1176 = load i32, ptr %66, align 4, !tbaa !5
  %1177 = sext i32 %1176 to i64
  %1178 = getelementptr inbounds double, ptr %1175, i64 %1177
  store double %1174, ptr %1178, align 8, !tbaa !13
  br label %1179

1179:                                             ; preds = %1154
  %1180 = load i32, ptr %69, align 4, !tbaa !5
  %1181 = add nsw i32 %1180, 1
  store i32 %1181, ptr %69, align 4, !tbaa !5
  br label %1149, !llvm.loop !34

1182:                                             ; preds = %1149
  br label %1183

1183:                                             ; preds = %1182
  %1184 = load i32, ptr %66, align 4, !tbaa !5
  %1185 = add nsw i32 %1184, 1
  store i32 %1185, ptr %66, align 4, !tbaa !5
  br label %1144, !llvm.loop !35

1186:                                             ; preds = %1144
  %1187 = load double, ptr %75, align 8, !tbaa !13
  %1188 = load double, ptr %76, align 8, !tbaa !13
  %1189 = fcmp ole double %1187, %1188
  br i1 %1189, label %1190, label %1195

1190:                                             ; preds = %1186
  %1191 = load double, ptr %75, align 8, !tbaa !13
  %1192 = load double, ptr %49, align 8, !tbaa !13
  %1193 = fcmp ole double %1191, %1192
  br i1 %1193, label %1194, label %1195

1194:                                             ; preds = %1190
  br label %1199

1195:                                             ; preds = %1190, %1186
  br label %1196

1196:                                             ; preds = %1195
  %1197 = load i32, ptr %67, align 4, !tbaa !5
  %1198 = add nsw i32 %1197, 1
  store i32 %1198, ptr %67, align 4, !tbaa !5
  br label %201, !llvm.loop !36

1199:                                             ; preds = %1194, %201
  %1200 = load i32, ptr %80, align 4, !tbaa !5
  %1201 = icmp ne i32 %1200, 0
  br i1 %1201, label %1202, label %1209

1202:                                             ; preds = %1199
  %1203 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %1204 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %1205 = load i32, ptr %68, align 4, !tbaa !5
  %1206 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %1205)
  %1207 = load double, ptr %75, align 8, !tbaa !13
  %1208 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %1207)
  br label %1209

1209:                                             ; preds = %1202, %1199
  %1210 = load i32, ptr %68, align 4, !tbaa !5
  store i32 %1210, ptr %30, align 4
  store i32 1, ptr %87, align 4
  br label %1211

1211:                                             ; preds = %1209, %924, %317
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  %1212 = load i32, ptr %30, align 4
  ret i32 %1212
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #6

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

declare void @_ZN5nasoq16spmv_csc_sym_oneEiPmPiPdiS2_S2_iS2_S2_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #3

declare void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef) #3

declare void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) #3

declare void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) #3

; Function Attrs: nounwind
declare double @sqrt(double noundef) #8

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { "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 = { nounwind 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 #5 = { mustprogress 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { 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 #9 = { nounwind }
attributes #10 = { nounwind 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !16}
!36 = distinct !{!36, !16}


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

@__const._ZN5nasoq15pmgmres_ldlt_crEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_i.alp = external hidden unnamed_addr constant [2 x double], align 16

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq19diagonal_pointer_crEiiPiS0_S0_(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq11mult_givensEddiPd(double noundef, double noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq12rearrange_crEiiPiS0_Pd(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #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 #3

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5nasoq15pmgmres_ldlt_crEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_i(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, i64 noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, i32 noundef %12, ptr noundef %13, ptr noundef %14, ptr nocapture noundef readonly %15, i32 noundef %16, i32 noundef %17, double noundef %18, double noundef %19, i32 noundef %20, i32 noundef %21, i32 noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, ptr noundef %26, ptr noundef %27, i32 noundef %28) local_unnamed_addr #4 {
  %30 = alloca [2 x double], align 16
  %31 = alloca [2 x double], align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %30, ptr noundef nonnull align 16 dereferenceable(16) @__const._ZN5nasoq15pmgmres_ldlt_crEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_i.alp, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %31, i8 0, i64 16, i1 false)
  %32 = add i32 %17, 1
  %33 = sext i32 %32 to i64
  %34 = shl nsw i64 %33, 3
  %35 = tail call noalias ptr @malloc(i64 noundef %34) #11
  %36 = tail call noalias ptr @malloc(i64 noundef %34) #11
  %37 = add nsw i32 %17, -1
  %38 = tail call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %37)
  %39 = sext i32 %0 to i64
  %40 = shl nsw i64 %39, 3
  %41 = tail call noalias ptr @malloc(i64 noundef %40) #11
  %42 = ptrtoint ptr %41 to i64
  %43 = tail call noalias ptr @malloc(i64 noundef %34) #11
  %44 = shl nsw i64 %39, 2
  %45 = tail call noalias ptr @malloc(i64 noundef %44) #11
  %46 = add nsw i32 %0, -1
  %47 = tail call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %46)
  %48 = tail call noalias ptr @malloc(i64 noundef %34) #11
  %49 = add i32 %0, 1
  %50 = sext i32 %49 to i64
  %51 = shl nsw i64 %50, 3
  %52 = tail call noalias ptr @malloc(i64 noundef %51) #11
  %.not506 = icmp slt i32 %0, 0
  br i1 %.not506, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %29
  %wide.trip.count = zext i32 %49 to i64
  %min.iters.check = icmp ult i32 %49, 4
  br i1 %min.iters.check, label %.lr.ph.preheader810, label %vector.ph

.lr.ph.preheader810:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 4294967292
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %53 = getelementptr inbounds i32, ptr %2, i64 %index
  %54 = getelementptr inbounds i8, ptr %53, i64 8
  %wide.load = load <2 x i32>, ptr %53, align 4, !tbaa !5
  %wide.load705 = load <2 x i32>, ptr %54, align 4, !tbaa !5
  %55 = sext <2 x i32> %wide.load to <2 x i64>
  %56 = sext <2 x i32> %wide.load705 to <2 x i64>
  %57 = getelementptr inbounds i64, ptr %52, i64 %index
  %58 = getelementptr inbounds i8, ptr %57, i64 16
  store <2 x i64> %55, ptr %57, align 8, !tbaa !9
  store <2 x i64> %56, ptr %58, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 4
  %59 = icmp eq i64 %index.next, %n.vec
  br i1 %59, label %middle.block, label %vector.body, !llvm.loop !11

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader810

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %29
  %.not482 = icmp eq i32 %20, 0
  br i1 %.not482, label %67, label %.preheader503

.preheader503:                                    ; preds = %._crit_edge
  %60 = icmp sgt i32 %0, 0
  br i1 %60, label %.lr.ph509.preheader, label %.loopexit504

.lr.ph509.preheader:                              ; preds = %.preheader503
  %61 = zext nneg i32 %0 to i64
  %62 = shl nuw nsw i64 %61, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %2, i64 %62, i1 false), !tbaa !5
  br label %.loopexit504

.lr.ph:                                           ; preds = %.lr.ph.preheader810, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader810 ]
  %63 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv
  %64 = load i32, ptr %63, align 4, !tbaa !5
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds i64, ptr %52, i64 %indvars.iv
  store i64 %65, ptr %66, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !15

67:                                               ; preds = %._crit_edge
  tail call void @_ZN5nasoq12rearrange_crEiiPiS0_Pd(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4)
  tail call void @_ZN5nasoq19diagonal_pointer_crEiiPiS0_S0_(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %45)
  br label %.loopexit504

.loopexit504:                                     ; preds = %.lr.ph509.preheader, %.preheader503, %67
  %68 = icmp sgt i32 %16, 0
  br i1 %68, label %.lr.ph578, label %.loopexit500

.lr.ph578:                                        ; preds = %.loopexit504
  %69 = icmp slt i32 %0, 1
  %70 = icmp eq i32 %21, 2
  %71 = icmp eq i32 %21, 1
  %72 = sext i32 %12 to i64
  %73 = trunc i64 %8 to i32
  %.not483518 = icmp slt i32 %17, 1
  %74 = icmp sgt i32 %17, 0
  %invariant.gep = getelementptr inbounds i8, ptr %47, i64 8
  %75 = icmp slt i32 %0, 1
  %scevgep = getelementptr i8, ptr %36, i64 8
  %76 = zext i32 %17 to i64
  %77 = shl nuw nsw i64 %76, 3
  %78 = sext i32 %17 to i64
  %wide.trip.count600 = zext i32 %0 to i64
  %wide.trip.count605 = zext nneg i32 %0 to i64
  %wide.trip.count616 = zext i32 %32 to i64
  %wide.trip.count621 = zext nneg i32 %0 to i64
  %wide.trip.count633 = zext nneg i32 %0 to i64
  %wide.trip.count643 = zext nneg i32 %0 to i64
  %wide.trip.count687 = zext nneg i32 %0 to i64
  %79 = shl nuw nsw i64 %wide.trip.count600, 3
  %80 = shl nuw nsw i64 %wide.trip.count600, 3
  %81 = shl nuw nsw i64 %wide.trip.count600, 3
  %min.iters.check789 = icmp ult i32 %0, 4
  %n.vec792 = and i64 %wide.trip.count600, 2147483644
  %cmp.n801 = icmp eq i64 %n.vec792, %wide.trip.count600
  %min.iters.check775 = icmp eq i32 %0, 1
  %n.vec778 = and i64 %wide.trip.count600, 2147483646
  %cmp.n786 = icmp eq i64 %n.vec778, %wide.trip.count600
  %xtraiter811 = and i64 %wide.trip.count616, 7
  %82 = icmp ult i32 %32, 8
  %unroll_iter = and i64 %wide.trip.count616, 4294967288
  %lcmp.mod812.not = icmp eq i64 %xtraiter811, 0
  %min.iters.check755 = icmp ult i32 %0, 4
  %n.vec758 = and i64 %wide.trip.count600, 2147483644
  %cmp.n771 = icmp eq i64 %n.vec758, %wide.trip.count600
  %xtraiter813 = and i64 %wide.trip.count600, 1
  %lcmp.mod814.not = icmp eq i64 %xtraiter813, 0
  %83 = add nsw i64 %wide.trip.count600, -1
  %min.iters.check728 = icmp ult i32 %0, 4
  %n.vec731 = and i64 %wide.trip.count600, 2147483644
  %cmp.n742 = icmp eq i64 %n.vec731, %wide.trip.count600
  %xtraiter816 = and i64 %wide.trip.count600, 1
  %lcmp.mod817.not = icmp eq i64 %xtraiter816, 0
  %84 = add nsw i64 %wide.trip.count600, -1
  %min.iters.check710 = icmp ult i32 %0, 2
  %n.vec713 = and i64 %wide.trip.count600, 2147483646
  %cmp.n719 = icmp eq i64 %n.vec713, %wide.trip.count600
  br label %85

85:                                               ; preds = %._crit_edge572, %.lr.ph578
  %.0452576 = phi i32 [ 0, %.lr.ph578 ], [ %442, %._crit_edge572 ]
  %.0453575 = phi i32 [ 0, %.lr.ph578 ], [ %.2455, %._crit_edge572 ]
  %.0464574 = phi double [ undef, %.lr.ph578 ], [ %.1465, %._crit_edge572 ]
  %.0470573 = phi i32 [ undef, %.lr.ph578 ], [ %.2472, %._crit_edge572 ]
  br i1 %.not482, label %86, label %87

86:                                               ; preds = %85
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %14, ptr noundef %41)
  br label %88

87:                                               ; preds = %85
  call void @_ZN5nasoq16spmv_csc_sym_oneEiPmPiPdiS2_S2_iS2_S2_(i32 noundef %0, ptr noundef %52, ptr noundef %3, ptr noundef %4, i32 noundef -1, ptr noundef nonnull %30, ptr noundef nonnull %31, i32 noundef 1, ptr noundef %14, ptr noundef %41)
  br label %88

88:                                               ; preds = %87, %86
  br i1 %69, label %._crit_edge513, label %.lr.ph512.preheader

.lr.ph512.preheader:                              ; preds = %88
  br i1 %min.iters.check789, label %.lr.ph512.preheader804, label %vector.body794

vector.body794:                                   ; preds = %.lr.ph512.preheader, %vector.body794
  %index795 = phi i64 [ %index.next800, %vector.body794 ], [ 0, %.lr.ph512.preheader ]
  %89 = getelementptr inbounds double, ptr %15, i64 %index795
  %90 = getelementptr inbounds i8, ptr %89, i64 16
  %wide.load796 = load <2 x double>, ptr %89, align 8, !tbaa !16
  %wide.load797 = load <2 x double>, ptr %90, align 8, !tbaa !16
  %91 = getelementptr inbounds double, ptr %41, i64 %index795
  %92 = getelementptr inbounds i8, ptr %91, i64 16
  %wide.load798 = load <2 x double>, ptr %91, align 8, !tbaa !16
  %wide.load799 = load <2 x double>, ptr %92, align 8, !tbaa !16
  %93 = fsub <2 x double> %wide.load796, %wide.load798
  %94 = fsub <2 x double> %wide.load797, %wide.load799
  store <2 x double> %93, ptr %91, align 8, !tbaa !16
  store <2 x double> %94, ptr %92, align 8, !tbaa !16
  %index.next800 = add nuw i64 %index795, 4
  %95 = icmp eq i64 %index.next800, %n.vec792
  br i1 %95, label %middle.block787, label %vector.body794, !llvm.loop !18

middle.block787:                                  ; preds = %vector.body794
  br i1 %cmp.n801, label %._crit_edge513, label %.lr.ph512.preheader804

.lr.ph512.preheader804:                           ; preds = %middle.block787, %.lr.ph512.preheader
  %indvars.iv597.ph = phi i64 [ 0, %.lr.ph512.preheader ], [ %n.vec792, %middle.block787 ]
  br label %.lr.ph512

.lr.ph512:                                        ; preds = %.lr.ph512.preheader804, %.lr.ph512
  %indvars.iv597 = phi i64 [ %indvars.iv.next598, %.lr.ph512 ], [ %indvars.iv597.ph, %.lr.ph512.preheader804 ]
  %96 = getelementptr inbounds double, ptr %15, i64 %indvars.iv597
  %97 = load double, ptr %96, align 8, !tbaa !16
  %98 = getelementptr inbounds double, ptr %41, i64 %indvars.iv597
  %99 = load double, ptr %98, align 8, !tbaa !16
  %100 = fsub double %97, %99
  store double %100, ptr %98, align 8, !tbaa !16
  %indvars.iv.next598 = add nuw nsw i64 %indvars.iv597, 1
  %exitcond601.not = icmp eq i64 %indvars.iv.next598, %wide.trip.count600
  br i1 %exitcond601.not, label %._crit_edge513, label %.lr.ph512, !llvm.loop !19

._crit_edge513:                                   ; preds = %.lr.ph512, %middle.block787, %88
  br i1 %70, label %101, label %102

101:                                              ; preds = %._crit_edge513
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %39, ptr noundef %13, ptr noundef %41, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %72, i32 noundef %73, i32 noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, ptr noundef %26, ptr noundef %27, i32 noundef %28)
  br label %105

102:                                              ; preds = %._crit_edge513
  br i1 %71, label %103, label %104

103:                                              ; preds = %102
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %39, ptr noundef %13, ptr noundef %41, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %72, i32 noundef %73)
  br label %105

104:                                              ; preds = %102
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %39, ptr noundef %13, ptr noundef %41, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %72, i32 noundef %73)
  br label %105

105:                                              ; preds = %103, %104, %101
  %106 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %41, ptr noundef %41)
  %107 = call double @sqrt(double noundef %106) #10
  %108 = fcmp olt double %107, %18
  br i1 %108, label %.loopexit500, label %109

109:                                              ; preds = %105
  %110 = icmp eq i32 %.0452576, 0
  %111 = fmul double %107, %19
  %.1465 = select i1 %110, double %111, double %.0464574
  br i1 %69, label %._crit_edge517, label %.lr.ph516

.lr.ph516:                                        ; preds = %109
  %112 = load ptr, ptr %47, align 8, !tbaa !20
  %113 = ptrtoint ptr %112 to i64
  %114 = sub i64 %113, %42
  %diff.check = icmp ult i64 %114, 16
  %or.cond803 = select i1 %min.iters.check775, i1 true, i1 %diff.check
  br i1 %or.cond803, label %scalar.ph774.preheader, label %vector.ph776

vector.ph776:                                     ; preds = %.lr.ph516
  %broadcast.splatinsert783 = insertelement <2 x double> poison, double %107, i64 0
  %broadcast.splat784 = shufflevector <2 x double> %broadcast.splatinsert783, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body780

vector.body780:                                   ; preds = %vector.body780, %vector.ph776
  %index781 = phi i64 [ 0, %vector.ph776 ], [ %index.next785, %vector.body780 ]
  %115 = getelementptr inbounds double, ptr %41, i64 %index781
  %wide.load782 = load <2 x double>, ptr %115, align 8, !tbaa !16
  %116 = fdiv <2 x double> %wide.load782, %broadcast.splat784
  %117 = getelementptr inbounds double, ptr %112, i64 %index781
  store <2 x double> %116, ptr %117, align 8, !tbaa !16
  %index.next785 = add nuw i64 %index781, 2
  %118 = icmp eq i64 %index.next785, %n.vec778
  br i1 %118, label %middle.block773, label %vector.body780, !llvm.loop !22

middle.block773:                                  ; preds = %vector.body780
  br i1 %cmp.n786, label %._crit_edge517, label %scalar.ph774.preheader

scalar.ph774.preheader:                           ; preds = %middle.block773, %.lr.ph516
  %indvars.iv602.ph = phi i64 [ 0, %.lr.ph516 ], [ %n.vec778, %middle.block773 ]
  %119 = sub nsw i64 %wide.trip.count600, %indvars.iv602.ph
  %xtraiter = and i64 %119, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph774.prol.loopexit, label %scalar.ph774.prol

scalar.ph774.prol:                                ; preds = %scalar.ph774.preheader, %scalar.ph774.prol
  %indvars.iv602.prol = phi i64 [ %indvars.iv.next603.prol, %scalar.ph774.prol ], [ %indvars.iv602.ph, %scalar.ph774.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph774.prol ], [ 0, %scalar.ph774.preheader ]
  %120 = getelementptr inbounds double, ptr %41, i64 %indvars.iv602.prol
  %121 = load double, ptr %120, align 8, !tbaa !16
  %122 = fdiv double %121, %107
  %123 = getelementptr inbounds double, ptr %112, i64 %indvars.iv602.prol
  store double %122, ptr %123, align 8, !tbaa !16
  %indvars.iv.next603.prol = add nuw nsw i64 %indvars.iv602.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph774.prol.loopexit, label %scalar.ph774.prol, !llvm.loop !23

scalar.ph774.prol.loopexit:                       ; preds = %scalar.ph774.prol, %scalar.ph774.preheader
  %indvars.iv602.unr = phi i64 [ %indvars.iv602.ph, %scalar.ph774.preheader ], [ %indvars.iv.next603.prol, %scalar.ph774.prol ]
  %124 = sub nsw i64 %indvars.iv602.ph, %wide.trip.count600
  %125 = icmp ugt i64 %124, -4
  br i1 %125, label %._crit_edge517, label %scalar.ph774

scalar.ph774:                                     ; preds = %scalar.ph774.prol.loopexit, %scalar.ph774
  %indvars.iv602 = phi i64 [ %indvars.iv.next603.3, %scalar.ph774 ], [ %indvars.iv602.unr, %scalar.ph774.prol.loopexit ]
  %126 = getelementptr inbounds double, ptr %41, i64 %indvars.iv602
  %127 = load double, ptr %126, align 8, !tbaa !16
  %128 = fdiv double %127, %107
  %129 = getelementptr inbounds double, ptr %112, i64 %indvars.iv602
  store double %128, ptr %129, align 8, !tbaa !16
  %indvars.iv.next603 = add nuw nsw i64 %indvars.iv602, 1
  %130 = getelementptr inbounds double, ptr %41, i64 %indvars.iv.next603
  %131 = load double, ptr %130, align 8, !tbaa !16
  %132 = fdiv double %131, %107
  %133 = getelementptr inbounds double, ptr %112, i64 %indvars.iv.next603
  store double %132, ptr %133, align 8, !tbaa !16
  %indvars.iv.next603.1 = add nuw nsw i64 %indvars.iv602, 2
  %134 = getelementptr inbounds double, ptr %41, i64 %indvars.iv.next603.1
  %135 = load double, ptr %134, align 8, !tbaa !16
  %136 = fdiv double %135, %107
  %137 = getelementptr inbounds double, ptr %112, i64 %indvars.iv.next603.1
  store double %136, ptr %137, align 8, !tbaa !16
  %indvars.iv.next603.2 = add nuw nsw i64 %indvars.iv602, 3
  %138 = getelementptr inbounds double, ptr %41, i64 %indvars.iv.next603.2
  %139 = load double, ptr %138, align 8, !tbaa !16
  %140 = fdiv double %139, %107
  %141 = getelementptr inbounds double, ptr %112, i64 %indvars.iv.next603.2
  store double %140, ptr %141, align 8, !tbaa !16
  %indvars.iv.next603.3 = add nuw nsw i64 %indvars.iv602, 4
  %exitcond606.not.3 = icmp eq i64 %indvars.iv.next603.3, %wide.trip.count605
  br i1 %exitcond606.not.3, label %._crit_edge517, label %scalar.ph774, !llvm.loop !25

._crit_edge517:                                   ; preds = %scalar.ph774.prol.loopexit, %scalar.ph774, %middle.block773, %109
  store double %107, ptr %36, align 8, !tbaa !16
  br i1 %.not483518, label %._crit_edge549, label %.preheader497.us.preheader

.preheader497.us.preheader:                       ; preds = %._crit_edge517
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %77, i1 false), !tbaa !16
  br i1 %82, label %.preheader499.unr-lcssa, label %.preheader497.us

.preheader497.us:                                 ; preds = %.preheader497.us.preheader, %.preheader497.us
  %indvars.iv613 = phi i64 [ %indvars.iv.next614.7, %.preheader497.us ], [ 0, %.preheader497.us.preheader ]
  %niter = phi i64 [ %niter.next.7, %.preheader497.us ], [ 0, %.preheader497.us.preheader ]
  %142 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv613
  %143 = load ptr, ptr %142, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %143, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614 = or disjoint i64 %indvars.iv613, 1
  %144 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next614
  %145 = load ptr, ptr %144, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %145, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.1 = or disjoint i64 %indvars.iv613, 2
  %146 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next614.1
  %147 = load ptr, ptr %146, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %147, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.2 = or disjoint i64 %indvars.iv613, 3
  %148 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next614.2
  %149 = load ptr, ptr %148, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %149, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.3 = or disjoint i64 %indvars.iv613, 4
  %150 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next614.3
  %151 = load ptr, ptr %150, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %151, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.4 = or disjoint i64 %indvars.iv613, 5
  %152 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next614.4
  %153 = load ptr, ptr %152, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %153, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.5 = or disjoint i64 %indvars.iv613, 6
  %154 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next614.5
  %155 = load ptr, ptr %154, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %155, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.6 = or disjoint i64 %indvars.iv613, 7
  %156 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next614.6
  %157 = load ptr, ptr %156, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %157, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.7 = add nuw nsw i64 %indvars.iv613, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %.preheader499.unr-lcssa, label %.preheader497.us, !llvm.loop !26

.preheader499.unr-lcssa:                          ; preds = %.preheader497.us, %.preheader497.us.preheader
  %indvars.iv613.unr = phi i64 [ 0, %.preheader497.us.preheader ], [ %indvars.iv.next614.7, %.preheader497.us ]
  br i1 %lcmp.mod812.not, label %.preheader499, label %.preheader497.us.epil

.preheader497.us.epil:                            ; preds = %.preheader499.unr-lcssa, %.preheader497.us.epil
  %indvars.iv613.epil = phi i64 [ %indvars.iv.next614.epil, %.preheader497.us.epil ], [ %indvars.iv613.unr, %.preheader499.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.preheader497.us.epil ], [ 0, %.preheader499.unr-lcssa ]
  %158 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv613.epil
  %159 = load ptr, ptr %158, align 8, !tbaa !20
  call void @llvm.memset.p0.i64(ptr align 8 %159, i8 0, i64 %77, i1 false), !tbaa !16
  %indvars.iv.next614.epil = add nuw nsw i64 %indvars.iv613.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter811
  br i1 %epil.iter.cmp.not, label %.preheader499, label %.preheader497.us.epil, !llvm.loop !27

.preheader499:                                    ; preds = %.preheader497.us.epil, %.preheader499.unr-lcssa
  br i1 %74, label %.lr.ph548, label %._crit_edge549

.lr.ph548:                                        ; preds = %.preheader499, %370
  %indvars.iv666 = phi i64 [ %indvars.iv.next667, %370 ], [ 0, %.preheader499 ]
  %indvars.iv664 = phi i64 [ %indvars.iv.next665, %370 ], [ 1, %.preheader499 ]
  %indvars.iv662 = phi i64 [ %indvars.iv.next663, %370 ], [ 2, %.preheader499 ]
  %.1454547 = phi i32 [ %384, %370 ], [ %.0453575, %.preheader499 ]
  %160 = shl nuw nsw i64 %indvars.iv666, 3
  %161 = shl nuw nsw i64 %indvars.iv666, 3
  %162 = add nuw i64 %161, 8
  %163 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv666
  %164 = load ptr, ptr %163, align 8, !tbaa !20
  %165 = getelementptr inbounds i8, ptr %163, i64 8
  %166 = load ptr, ptr %165, align 8, !tbaa !20
  br i1 %.not482, label %167, label %168

167:                                              ; preds = %.lr.ph548
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %164, ptr noundef %166)
  br label %169

168:                                              ; preds = %.lr.ph548
  call void @_ZN5nasoq16spmv_csc_sym_oneEiPmPiPdiS2_S2_iS2_S2_(i32 noundef %0, ptr noundef %52, ptr noundef %3, ptr noundef %4, i32 noundef -1, ptr noundef nonnull %30, ptr noundef nonnull %31, i32 noundef 1, ptr noundef %164, ptr noundef %166)
  br label %169

169:                                              ; preds = %168, %167
  %gep545 = getelementptr inbounds ptr, ptr %invariant.gep, i64 %indvars.iv666
  %170 = load ptr, ptr %gep545, align 8, !tbaa !20
  br i1 %70, label %171, label %172

171:                                              ; preds = %169
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %39, ptr noundef %13, ptr noundef %170, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %72, i32 noundef %73, i32 noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, ptr noundef %26, ptr noundef %27, i32 noundef %28)
  br label %175

172:                                              ; preds = %169
  br i1 %71, label %173, label %174

173:                                              ; preds = %172
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %39, ptr noundef %13, ptr noundef %170, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %72, i32 noundef %73)
  br label %175

174:                                              ; preds = %172
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %39, ptr noundef %13, ptr noundef %170, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %72, i32 noundef %73)
  br label %175

175:                                              ; preds = %173, %174, %171
  %indvars.iv.next667 = add nuw nsw i64 %indvars.iv666, 1
  %176 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv.next667
  %177 = load ptr, ptr %176, align 8, !tbaa !20
  %178 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %177, ptr noundef %177)
  %179 = call double @sqrt(double noundef %178) #10
  br label %180

180:                                              ; preds = %175, %._crit_edge530
  %indvars.iv623 = phi i64 [ 0, %175 ], [ %indvars.iv.next624, %._crit_edge530 ]
  %181 = load ptr, ptr %176, align 8, !tbaa !20
  %182 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv623
  %183 = load ptr, ptr %182, align 8, !tbaa !20
  %184 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %181, ptr noundef %183)
  %185 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv623
  %186 = load ptr, ptr %185, align 8, !tbaa !20
  %187 = getelementptr inbounds double, ptr %186, i64 %indvars.iv666
  store double %184, ptr %187, align 8, !tbaa !16
  br i1 %69, label %._crit_edge530, label %.lr.ph529

.lr.ph529:                                        ; preds = %180
  %188 = load ptr, ptr %176, align 8, !tbaa !20
  %189 = load ptr, ptr %182, align 8, !tbaa !20
  br i1 %min.iters.check755, label %scalar.ph754.preheader, label %vector.memcheck743

vector.memcheck743:                               ; preds = %.lr.ph529
  %scevgep744 = getelementptr i8, ptr %188, i64 %81
  %190 = getelementptr i8, ptr %186, i64 %160
  %scevgep745 = getelementptr i8, ptr %190, i64 8
  %scevgep746 = getelementptr i8, ptr %189, i64 %81
  %bound0747 = icmp ult ptr %188, %scevgep745
  %bound1748 = icmp ult ptr %187, %scevgep744
  %found.conflict749 = and i1 %bound0747, %bound1748
  %bound0750 = icmp ult ptr %188, %scevgep746
  %bound1751 = icmp ult ptr %189, %scevgep744
  %found.conflict752 = and i1 %bound0750, %bound1751
  %conflict.rdx = or i1 %found.conflict749, %found.conflict752
  br i1 %conflict.rdx, label %scalar.ph754.preheader, label %vector.ph756

vector.ph756:                                     ; preds = %vector.memcheck743
  %191 = load double, ptr %187, align 8, !tbaa !16, !alias.scope !28
  %broadcast.splatinsert768 = insertelement <2 x double> poison, double %191, i64 0
  %broadcast.splat769 = shufflevector <2 x double> %broadcast.splatinsert768, <2 x double> poison, <2 x i32> zeroinitializer
  %192 = fneg <2 x double> %broadcast.splat769
  %193 = fneg <2 x double> %broadcast.splat769
  br label %vector.body760

vector.body760:                                   ; preds = %vector.body760, %vector.ph756
  %index761 = phi i64 [ 0, %vector.ph756 ], [ %index.next770, %vector.body760 ]
  %194 = getelementptr inbounds double, ptr %188, i64 %index761
  %195 = getelementptr inbounds i8, ptr %194, i64 16
  %wide.load762 = load <2 x double>, ptr %194, align 8, !tbaa !16, !alias.scope !31, !noalias !33
  %wide.load763 = load <2 x double>, ptr %195, align 8, !tbaa !16, !alias.scope !31, !noalias !33
  %196 = getelementptr inbounds double, ptr %189, i64 %index761
  %197 = getelementptr inbounds i8, ptr %196, i64 16
  %wide.load764 = load <2 x double>, ptr %196, align 8, !tbaa !16, !alias.scope !35
  %wide.load765 = load <2 x double>, ptr %197, align 8, !tbaa !16, !alias.scope !35
  %198 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %192, <2 x double> %wide.load764, <2 x double> %wide.load762)
  %199 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %193, <2 x double> %wide.load765, <2 x double> %wide.load763)
  store <2 x double> %198, ptr %194, align 8, !tbaa !16, !alias.scope !31, !noalias !33
  store <2 x double> %199, ptr %195, align 8, !tbaa !16, !alias.scope !31, !noalias !33
  %index.next770 = add nuw i64 %index761, 4
  %200 = icmp eq i64 %index.next770, %n.vec758
  br i1 %200, label %middle.block753, label %vector.body760, !llvm.loop !36

middle.block753:                                  ; preds = %vector.body760
  br i1 %cmp.n771, label %._crit_edge530, label %scalar.ph754.preheader

scalar.ph754.preheader:                           ; preds = %middle.block753, %vector.memcheck743, %.lr.ph529
  %indvars.iv618.ph = phi i64 [ 0, %vector.memcheck743 ], [ 0, %.lr.ph529 ], [ %n.vec758, %middle.block753 ]
  br i1 %lcmp.mod814.not, label %scalar.ph754.prol.loopexit, label %scalar.ph754.prol

scalar.ph754.prol:                                ; preds = %scalar.ph754.preheader
  %201 = getelementptr inbounds double, ptr %188, i64 %indvars.iv618.ph
  %202 = load double, ptr %201, align 8, !tbaa !16
  %203 = load double, ptr %187, align 8, !tbaa !16
  %204 = getelementptr inbounds double, ptr %189, i64 %indvars.iv618.ph
  %205 = load double, ptr %204, align 8, !tbaa !16
  %206 = fneg double %203
  %207 = call double @llvm.fmuladd.f64(double %206, double %205, double %202)
  store double %207, ptr %201, align 8, !tbaa !16
  %indvars.iv.next619.prol = or disjoint i64 %indvars.iv618.ph, 1
  br label %scalar.ph754.prol.loopexit

scalar.ph754.prol.loopexit:                       ; preds = %scalar.ph754.prol, %scalar.ph754.preheader
  %indvars.iv618.unr = phi i64 [ %indvars.iv618.ph, %scalar.ph754.preheader ], [ %indvars.iv.next619.prol, %scalar.ph754.prol ]
  %208 = icmp eq i64 %indvars.iv618.ph, %83
  br i1 %208, label %._crit_edge530, label %scalar.ph754

scalar.ph754:                                     ; preds = %scalar.ph754.prol.loopexit, %scalar.ph754
  %indvars.iv618 = phi i64 [ %indvars.iv.next619.1, %scalar.ph754 ], [ %indvars.iv618.unr, %scalar.ph754.prol.loopexit ]
  %209 = getelementptr inbounds double, ptr %188, i64 %indvars.iv618
  %210 = load double, ptr %209, align 8, !tbaa !16
  %211 = load double, ptr %187, align 8, !tbaa !16
  %212 = getelementptr inbounds double, ptr %189, i64 %indvars.iv618
  %213 = load double, ptr %212, align 8, !tbaa !16
  %214 = fneg double %211
  %215 = call double @llvm.fmuladd.f64(double %214, double %213, double %210)
  store double %215, ptr %209, align 8, !tbaa !16
  %indvars.iv.next619 = add nuw nsw i64 %indvars.iv618, 1
  %216 = getelementptr inbounds double, ptr %188, i64 %indvars.iv.next619
  %217 = load double, ptr %216, align 8, !tbaa !16
  %218 = load double, ptr %187, align 8, !tbaa !16
  %219 = getelementptr inbounds double, ptr %189, i64 %indvars.iv.next619
  %220 = load double, ptr %219, align 8, !tbaa !16
  %221 = fneg double %218
  %222 = call double @llvm.fmuladd.f64(double %221, double %220, double %217)
  store double %222, ptr %216, align 8, !tbaa !16
  %indvars.iv.next619.1 = add nuw nsw i64 %indvars.iv618, 2
  %exitcond622.not.1 = icmp eq i64 %indvars.iv.next619.1, %wide.trip.count621
  br i1 %exitcond622.not.1, label %._crit_edge530, label %scalar.ph754, !llvm.loop !37

._crit_edge530:                                   ; preds = %scalar.ph754.prol.loopexit, %scalar.ph754, %middle.block753, %180
  %indvars.iv.next624 = add nuw nsw i64 %indvars.iv623, 1
  %exitcond629.not = icmp eq i64 %indvars.iv.next624, %indvars.iv664
  br i1 %exitcond629.not, label %223, label %180, !llvm.loop !38

223:                                              ; preds = %._crit_edge530
  %224 = load ptr, ptr %176, align 8, !tbaa !20
  %225 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %224, ptr noundef %224)
  %226 = call double @sqrt(double noundef %225) #10
  %227 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next667
  %228 = load ptr, ptr %227, align 8, !tbaa !20
  %229 = getelementptr inbounds double, ptr %228, i64 %indvars.iv666
  store double %226, ptr %229, align 8, !tbaa !16
  %230 = call double @llvm.fmuladd.f64(double %226, double 1.000000e-03, double %179)
  %231 = fcmp oeq double %230, %179
  br i1 %231, label %.preheader496, label %273

.preheader496:                                    ; preds = %223, %._crit_edge535
  %indvars.iv635 = phi i64 [ %indvars.iv.next636, %._crit_edge535 ], [ 0, %223 ]
  %232 = load ptr, ptr %176, align 8, !tbaa !20
  %233 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv635
  %234 = load ptr, ptr %233, align 8, !tbaa !20
  %235 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %232, ptr noundef %234)
  %236 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv635
  %237 = load ptr, ptr %236, align 8, !tbaa !20
  %238 = getelementptr inbounds double, ptr %237, i64 %indvars.iv666
  %239 = load double, ptr %238, align 8, !tbaa !16
  %240 = fadd double %235, %239
  store double %240, ptr %238, align 8, !tbaa !16
  br i1 %69, label %._crit_edge535, label %.lr.ph534

.lr.ph534:                                        ; preds = %.preheader496
  %241 = load ptr, ptr %176, align 8, !tbaa !20
  %242 = load ptr, ptr %233, align 8, !tbaa !20
  %243 = fneg double %235
  br i1 %min.iters.check728, label %scalar.ph727.preheader, label %vector.memcheck720

vector.memcheck720:                               ; preds = %.lr.ph534
  %scevgep721 = getelementptr i8, ptr %241, i64 %80
  %scevgep722 = getelementptr i8, ptr %242, i64 %80
  %bound0723 = icmp ult ptr %241, %scevgep722
  %bound1724 = icmp ult ptr %242, %scevgep721
  %found.conflict725 = and i1 %bound0723, %bound1724
  br i1 %found.conflict725, label %scalar.ph727.preheader, label %vector.ph729

vector.ph729:                                     ; preds = %vector.memcheck720
  %broadcast.splatinsert739 = insertelement <2 x double> poison, double %243, i64 0
  %broadcast.splat740 = shufflevector <2 x double> %broadcast.splatinsert739, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body733

vector.body733:                                   ; preds = %vector.body733, %vector.ph729
  %index734 = phi i64 [ 0, %vector.ph729 ], [ %index.next741, %vector.body733 ]
  %244 = getelementptr inbounds double, ptr %241, i64 %index734
  %245 = getelementptr inbounds i8, ptr %244, i64 16
  %wide.load735 = load <2 x double>, ptr %244, align 8, !tbaa !16, !alias.scope !39, !noalias !42
  %wide.load736 = load <2 x double>, ptr %245, align 8, !tbaa !16, !alias.scope !39, !noalias !42
  %246 = getelementptr inbounds double, ptr %242, i64 %index734
  %247 = getelementptr inbounds i8, ptr %246, i64 16
  %wide.load737 = load <2 x double>, ptr %246, align 8, !tbaa !16, !alias.scope !42
  %wide.load738 = load <2 x double>, ptr %247, align 8, !tbaa !16, !alias.scope !42
  %248 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat740, <2 x double> %wide.load737, <2 x double> %wide.load735)
  %249 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat740, <2 x double> %wide.load738, <2 x double> %wide.load736)
  store <2 x double> %248, ptr %244, align 8, !tbaa !16, !alias.scope !39, !noalias !42
  store <2 x double> %249, ptr %245, align 8, !tbaa !16, !alias.scope !39, !noalias !42
  %index.next741 = add nuw i64 %index734, 4
  %250 = icmp eq i64 %index.next741, %n.vec731
  br i1 %250, label %middle.block726, label %vector.body733, !llvm.loop !44

middle.block726:                                  ; preds = %vector.body733
  br i1 %cmp.n742, label %._crit_edge535, label %scalar.ph727.preheader

scalar.ph727.preheader:                           ; preds = %middle.block726, %vector.memcheck720, %.lr.ph534
  %indvars.iv630.ph = phi i64 [ 0, %vector.memcheck720 ], [ 0, %.lr.ph534 ], [ %n.vec731, %middle.block726 ]
  br i1 %lcmp.mod817.not, label %scalar.ph727.prol.loopexit, label %scalar.ph727.prol

scalar.ph727.prol:                                ; preds = %scalar.ph727.preheader
  %251 = getelementptr inbounds double, ptr %241, i64 %indvars.iv630.ph
  %252 = load double, ptr %251, align 8, !tbaa !16
  %253 = getelementptr inbounds double, ptr %242, i64 %indvars.iv630.ph
  %254 = load double, ptr %253, align 8, !tbaa !16
  %255 = call double @llvm.fmuladd.f64(double %243, double %254, double %252)
  store double %255, ptr %251, align 8, !tbaa !16
  %indvars.iv.next631.prol = or disjoint i64 %indvars.iv630.ph, 1
  br label %scalar.ph727.prol.loopexit

scalar.ph727.prol.loopexit:                       ; preds = %scalar.ph727.prol, %scalar.ph727.preheader
  %indvars.iv630.unr = phi i64 [ %indvars.iv630.ph, %scalar.ph727.preheader ], [ %indvars.iv.next631.prol, %scalar.ph727.prol ]
  %256 = icmp eq i64 %indvars.iv630.ph, %84
  br i1 %256, label %._crit_edge535, label %scalar.ph727

scalar.ph727:                                     ; preds = %scalar.ph727.prol.loopexit, %scalar.ph727
  %indvars.iv630 = phi i64 [ %indvars.iv.next631.1, %scalar.ph727 ], [ %indvars.iv630.unr, %scalar.ph727.prol.loopexit ]
  %257 = getelementptr inbounds double, ptr %241, i64 %indvars.iv630
  %258 = load double, ptr %257, align 8, !tbaa !16
  %259 = getelementptr inbounds double, ptr %242, i64 %indvars.iv630
  %260 = load double, ptr %259, align 8, !tbaa !16
  %261 = call double @llvm.fmuladd.f64(double %243, double %260, double %258)
  store double %261, ptr %257, align 8, !tbaa !16
  %indvars.iv.next631 = add nuw nsw i64 %indvars.iv630, 1
  %262 = getelementptr inbounds double, ptr %241, i64 %indvars.iv.next631
  %263 = load double, ptr %262, align 8, !tbaa !16
  %264 = getelementptr inbounds double, ptr %242, i64 %indvars.iv.next631
  %265 = load double, ptr %264, align 8, !tbaa !16
  %266 = call double @llvm.fmuladd.f64(double %243, double %265, double %263)
  store double %266, ptr %262, align 8, !tbaa !16
  %indvars.iv.next631.1 = add nuw nsw i64 %indvars.iv630, 2
  %exitcond634.not.1 = icmp eq i64 %indvars.iv.next631.1, %wide.trip.count633
  br i1 %exitcond634.not.1, label %._crit_edge535, label %scalar.ph727, !llvm.loop !45

._crit_edge535:                                   ; preds = %scalar.ph727.prol.loopexit, %scalar.ph727, %middle.block726, %.preheader496
  %indvars.iv.next636 = add nuw nsw i64 %indvars.iv635, 1
  %exitcond639.not = icmp eq i64 %indvars.iv.next636, %indvars.iv664
  br i1 %exitcond639.not, label %267, label %.preheader496, !llvm.loop !46

267:                                              ; preds = %._crit_edge535
  %268 = load ptr, ptr %176, align 8, !tbaa !20
  %269 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %268, ptr noundef %268)
  %270 = call double @sqrt(double noundef %269) #10
  %271 = load ptr, ptr %227, align 8, !tbaa !20
  %272 = getelementptr inbounds double, ptr %271, i64 %indvars.iv666
  store double %270, ptr %272, align 8, !tbaa !16
  br label %273

273:                                              ; preds = %267, %223
  %274 = phi double [ %270, %267 ], [ %226, %223 ]
  %275 = phi ptr [ %271, %267 ], [ %228, %223 ]
  %276 = getelementptr double, ptr %275, i64 %indvars.iv666
  %277 = fcmp oeq double %274, 0.000000e+00
  %brmerge = or i1 %277, %75
  br i1 %brmerge, label %.loopexit495, label %.lr.ph538

.lr.ph538:                                        ; preds = %273
  %278 = load ptr, ptr %176, align 8, !tbaa !20
  br i1 %min.iters.check710, label %scalar.ph709.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph538
  %scevgep706 = getelementptr i8, ptr %278, i64 %79
  %scevgep707 = getelementptr i8, ptr %275, i64 %162
  %bound0 = icmp ult ptr %278, %scevgep707
  %bound1 = icmp ult ptr %276, %scevgep706
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph709.preheader, label %vector.ph711

vector.ph711:                                     ; preds = %vector.memcheck
  %279 = load double, ptr %276, align 8, !tbaa !16, !alias.scope !47
  %broadcast.splatinsert = insertelement <2 x double> poison, double %279, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body715

vector.body715:                                   ; preds = %vector.body715, %vector.ph711
  %index716 = phi i64 [ 0, %vector.ph711 ], [ %index.next718, %vector.body715 ]
  %280 = getelementptr inbounds double, ptr %278, i64 %index716
  %wide.load717 = load <2 x double>, ptr %280, align 8, !tbaa !16, !alias.scope !50, !noalias !47
  %281 = fdiv <2 x double> %wide.load717, %broadcast.splat
  store <2 x double> %281, ptr %280, align 8, !tbaa !16, !alias.scope !50, !noalias !47
  %index.next718 = add nuw i64 %index716, 2
  %282 = icmp eq i64 %index.next718, %n.vec713
  br i1 %282, label %middle.block708, label %vector.body715, !llvm.loop !52

middle.block708:                                  ; preds = %vector.body715
  br i1 %cmp.n719, label %.loopexit495, label %scalar.ph709.preheader

scalar.ph709.preheader:                           ; preds = %middle.block708, %vector.memcheck, %.lr.ph538
  %indvars.iv640.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph538 ], [ %n.vec713, %middle.block708 ]
  %283 = sub nsw i64 %wide.trip.count600, %indvars.iv640.ph
  %xtraiter819 = and i64 %283, 3
  %lcmp.mod820.not = icmp eq i64 %xtraiter819, 0
  br i1 %lcmp.mod820.not, label %scalar.ph709.prol.loopexit, label %scalar.ph709.prol

scalar.ph709.prol:                                ; preds = %scalar.ph709.preheader, %scalar.ph709.prol
  %indvars.iv640.prol = phi i64 [ %indvars.iv.next641.prol, %scalar.ph709.prol ], [ %indvars.iv640.ph, %scalar.ph709.preheader ]
  %prol.iter821 = phi i64 [ %prol.iter821.next, %scalar.ph709.prol ], [ 0, %scalar.ph709.preheader ]
  %284 = getelementptr inbounds double, ptr %278, i64 %indvars.iv640.prol
  %285 = load double, ptr %284, align 8, !tbaa !16
  %286 = load double, ptr %276, align 8, !tbaa !16
  %287 = fdiv double %285, %286
  store double %287, ptr %284, align 8, !tbaa !16
  %indvars.iv.next641.prol = add nuw nsw i64 %indvars.iv640.prol, 1
  %prol.iter821.next = add i64 %prol.iter821, 1
  %prol.iter821.cmp.not = icmp eq i64 %prol.iter821.next, %xtraiter819
  br i1 %prol.iter821.cmp.not, label %scalar.ph709.prol.loopexit, label %scalar.ph709.prol, !llvm.loop !53

scalar.ph709.prol.loopexit:                       ; preds = %scalar.ph709.prol, %scalar.ph709.preheader
  %indvars.iv640.unr = phi i64 [ %indvars.iv640.ph, %scalar.ph709.preheader ], [ %indvars.iv.next641.prol, %scalar.ph709.prol ]
  %288 = sub nsw i64 %indvars.iv640.ph, %wide.trip.count600
  %289 = icmp ugt i64 %288, -4
  br i1 %289, label %.loopexit495, label %scalar.ph709.preheader.new

scalar.ph709.preheader.new:                       ; preds = %scalar.ph709.prol.loopexit
  %invariant.gep842 = getelementptr i8, ptr %278, i64 8
  %invariant.gep843 = getelementptr i8, ptr %278, i64 16
  %invariant.gep845 = getelementptr i8, ptr %278, i64 24
  br label %scalar.ph709

scalar.ph709:                                     ; preds = %scalar.ph709, %scalar.ph709.preheader.new
  %indvars.iv640 = phi i64 [ %indvars.iv640.unr, %scalar.ph709.preheader.new ], [ %indvars.iv.next641.3, %scalar.ph709 ]
  %290 = getelementptr inbounds double, ptr %278, i64 %indvars.iv640
  %291 = load double, ptr %290, align 8, !tbaa !16
  %292 = load double, ptr %276, align 8, !tbaa !16
  %293 = fdiv double %291, %292
  store double %293, ptr %290, align 8, !tbaa !16
  %gep = getelementptr double, ptr %invariant.gep842, i64 %indvars.iv640
  %294 = load double, ptr %gep, align 8, !tbaa !16
  %295 = load double, ptr %276, align 8, !tbaa !16
  %296 = fdiv double %294, %295
  store double %296, ptr %gep, align 8, !tbaa !16
  %gep844 = getelementptr double, ptr %invariant.gep843, i64 %indvars.iv640
  %297 = load double, ptr %gep844, align 8, !tbaa !16
  %298 = load double, ptr %276, align 8, !tbaa !16
  %299 = fdiv double %297, %298
  store double %299, ptr %gep844, align 8, !tbaa !16
  %gep846 = getelementptr double, ptr %invariant.gep845, i64 %indvars.iv640
  %300 = load double, ptr %gep846, align 8, !tbaa !16
  %301 = load double, ptr %276, align 8, !tbaa !16
  %302 = fdiv double %300, %301
  store double %302, ptr %gep846, align 8, !tbaa !16
  %indvars.iv.next641.3 = add nuw nsw i64 %indvars.iv640, 4
  %exitcond644.not.3 = icmp eq i64 %indvars.iv.next641.3, %wide.trip.count643
  br i1 %exitcond644.not.3, label %.loopexit495, label %scalar.ph709, !llvm.loop !54

.loopexit495:                                     ; preds = %scalar.ph709.prol.loopexit, %scalar.ph709, %middle.block708, %273
  %.not487 = icmp eq i64 %indvars.iv666, 0
  br i1 %.not487, label %.loopexit, label %.preheader493.preheader

.preheader493.preheader:                          ; preds = %.loopexit495
  %xtraiter822 = and i64 %indvars.iv662, 3
  %303 = icmp eq i64 %indvars.iv666, 1
  br i1 %303, label %.preheader492.preheader.unr-lcssa, label %.preheader493.preheader.new

.preheader493.preheader.new:                      ; preds = %.preheader493.preheader
  %unroll_iter825 = and i64 %indvars.iv662, 9223372036854775804
  br label %.preheader493

.preheader493:                                    ; preds = %.preheader493, %.preheader493.preheader.new
  %indvars.iv645 = phi i64 [ 0, %.preheader493.preheader.new ], [ %indvars.iv.next646.3, %.preheader493 ]
  %niter826 = phi i64 [ 0, %.preheader493.preheader.new ], [ %niter826.next.3, %.preheader493 ]
  %304 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv645
  %305 = load ptr, ptr %304, align 8, !tbaa !20
  %306 = getelementptr inbounds double, ptr %305, i64 %indvars.iv666
  %307 = load double, ptr %306, align 8, !tbaa !16
  %308 = getelementptr inbounds double, ptr %48, i64 %indvars.iv645
  store double %307, ptr %308, align 8, !tbaa !16
  %indvars.iv.next646 = or disjoint i64 %indvars.iv645, 1
  %309 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next646
  %310 = load ptr, ptr %309, align 8, !tbaa !20
  %311 = getelementptr inbounds double, ptr %310, i64 %indvars.iv666
  %312 = load double, ptr %311, align 8, !tbaa !16
  %313 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next646
  store double %312, ptr %313, align 8, !tbaa !16
  %indvars.iv.next646.1 = or disjoint i64 %indvars.iv645, 2
  %314 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next646.1
  %315 = load ptr, ptr %314, align 8, !tbaa !20
  %316 = getelementptr inbounds double, ptr %315, i64 %indvars.iv666
  %317 = load double, ptr %316, align 8, !tbaa !16
  %318 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next646.1
  store double %317, ptr %318, align 8, !tbaa !16
  %indvars.iv.next646.2 = or disjoint i64 %indvars.iv645, 3
  %319 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next646.2
  %320 = load ptr, ptr %319, align 8, !tbaa !20
  %321 = getelementptr inbounds double, ptr %320, i64 %indvars.iv666
  %322 = load double, ptr %321, align 8, !tbaa !16
  %323 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next646.2
  store double %322, ptr %323, align 8, !tbaa !16
  %indvars.iv.next646.3 = add nuw nsw i64 %indvars.iv645, 4
  %niter826.next.3 = add i64 %niter826, 4
  %niter826.ncmp.3 = icmp eq i64 %niter826.next.3, %unroll_iter825
  br i1 %niter826.ncmp.3, label %.preheader492.preheader.unr-lcssa, label %.preheader493, !llvm.loop !55

.preheader492.preheader.unr-lcssa:                ; preds = %.preheader493, %.preheader493.preheader
  %indvars.iv645.unr = phi i64 [ 0, %.preheader493.preheader ], [ %indvars.iv.next646.3, %.preheader493 ]
  %lcmp.mod824.not = icmp eq i64 %xtraiter822, 0
  br i1 %lcmp.mod824.not, label %.preheader492.preheader, label %.preheader493.epil

.preheader493.epil:                               ; preds = %.preheader492.preheader.unr-lcssa, %.preheader493.epil
  %indvars.iv645.epil = phi i64 [ %indvars.iv.next646.epil, %.preheader493.epil ], [ %indvars.iv645.unr, %.preheader492.preheader.unr-lcssa ]
  %epil.iter823 = phi i64 [ %epil.iter823.next, %.preheader493.epil ], [ 0, %.preheader492.preheader.unr-lcssa ]
  %324 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv645.epil
  %325 = load ptr, ptr %324, align 8, !tbaa !20
  %326 = getelementptr inbounds double, ptr %325, i64 %indvars.iv666
  %327 = load double, ptr %326, align 8, !tbaa !16
  %328 = getelementptr inbounds double, ptr %48, i64 %indvars.iv645.epil
  store double %327, ptr %328, align 8, !tbaa !16
  %indvars.iv.next646.epil = add nuw nsw i64 %indvars.iv645.epil, 1
  %epil.iter823.next = add i64 %epil.iter823, 1
  %epil.iter823.cmp.not = icmp eq i64 %epil.iter823.next, %xtraiter822
  br i1 %epil.iter823.cmp.not, label %.preheader492.preheader, label %.preheader493.epil, !llvm.loop !56

.preheader492.preheader:                          ; preds = %.preheader493.epil, %.preheader492.preheader.unr-lcssa
  br label %.preheader492

.preheader492:                                    ; preds = %.preheader492.preheader, %.preheader492
  %indvars.iv652 = phi i64 [ %indvars.iv.next653, %.preheader492 ], [ 0, %.preheader492.preheader ]
  %329 = getelementptr inbounds double, ptr %35, i64 %indvars.iv652
  %330 = load double, ptr %329, align 8, !tbaa !16
  %331 = getelementptr inbounds double, ptr %43, i64 %indvars.iv652
  %332 = load double, ptr %331, align 8, !tbaa !16
  %333 = trunc nuw nsw i64 %indvars.iv652 to i32
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %330, double noundef %332, i32 noundef %333, ptr noundef %48)
  %indvars.iv.next653 = add nuw nsw i64 %indvars.iv652, 1
  %exitcond656.not = icmp eq i64 %indvars.iv.next653, %indvars.iv666
  br i1 %exitcond656.not, label %.preheader491.preheader, label %.preheader492, !llvm.loop !57

.preheader491.preheader:                          ; preds = %.preheader492
  %xtraiter827 = and i64 %indvars.iv662, 3
  %334 = icmp ult i64 %indvars.iv664, 3
  br i1 %334, label %.loopexit.loopexit.unr-lcssa, label %.preheader491.preheader.new

.preheader491.preheader.new:                      ; preds = %.preheader491.preheader
  %unroll_iter830 = and i64 %indvars.iv662, 9223372036854775804
  br label %.preheader491

.preheader491:                                    ; preds = %.preheader491, %.preheader491.preheader.new
  %indvars.iv657 = phi i64 [ 0, %.preheader491.preheader.new ], [ %indvars.iv.next658.3, %.preheader491 ]
  %niter831 = phi i64 [ 0, %.preheader491.preheader.new ], [ %niter831.next.3, %.preheader491 ]
  %335 = getelementptr inbounds double, ptr %48, i64 %indvars.iv657
  %336 = load double, ptr %335, align 8, !tbaa !16
  %337 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv657
  %338 = load ptr, ptr %337, align 8, !tbaa !20
  %339 = getelementptr inbounds double, ptr %338, i64 %indvars.iv666
  store double %336, ptr %339, align 8, !tbaa !16
  %indvars.iv.next658 = or disjoint i64 %indvars.iv657, 1
  %340 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next658
  %341 = load double, ptr %340, align 8, !tbaa !16
  %342 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next658
  %343 = load ptr, ptr %342, align 8, !tbaa !20
  %344 = getelementptr inbounds double, ptr %343, i64 %indvars.iv666
  store double %341, ptr %344, align 8, !tbaa !16
  %indvars.iv.next658.1 = or disjoint i64 %indvars.iv657, 2
  %345 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next658.1
  %346 = load double, ptr %345, align 8, !tbaa !16
  %347 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next658.1
  %348 = load ptr, ptr %347, align 8, !tbaa !20
  %349 = getelementptr inbounds double, ptr %348, i64 %indvars.iv666
  store double %346, ptr %349, align 8, !tbaa !16
  %indvars.iv.next658.2 = or disjoint i64 %indvars.iv657, 3
  %350 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next658.2
  %351 = load double, ptr %350, align 8, !tbaa !16
  %352 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next658.2
  %353 = load ptr, ptr %352, align 8, !tbaa !20
  %354 = getelementptr inbounds double, ptr %353, i64 %indvars.iv666
  store double %351, ptr %354, align 8, !tbaa !16
  %indvars.iv.next658.3 = add nuw nsw i64 %indvars.iv657, 4
  %niter831.next.3 = add i64 %niter831, 4
  %niter831.ncmp.3 = icmp eq i64 %niter831.next.3, %unroll_iter830
  br i1 %niter831.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.preheader491, !llvm.loop !58

.loopexit.loopexit.unr-lcssa:                     ; preds = %.preheader491, %.preheader491.preheader
  %indvars.iv657.unr = phi i64 [ 0, %.preheader491.preheader ], [ %indvars.iv.next658.3, %.preheader491 ]
  %lcmp.mod829.not = icmp eq i64 %xtraiter827, 0
  br i1 %lcmp.mod829.not, label %.loopexit.loopexit, label %.preheader491.epil

.preheader491.epil:                               ; preds = %.loopexit.loopexit.unr-lcssa, %.preheader491.epil
  %indvars.iv657.epil = phi i64 [ %indvars.iv.next658.epil, %.preheader491.epil ], [ %indvars.iv657.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter828 = phi i64 [ %epil.iter828.next, %.preheader491.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %355 = getelementptr inbounds double, ptr %48, i64 %indvars.iv657.epil
  %356 = load double, ptr %355, align 8, !tbaa !16
  %357 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv657.epil
  %358 = load ptr, ptr %357, align 8, !tbaa !20
  %359 = getelementptr inbounds double, ptr %358, i64 %indvars.iv666
  store double %356, ptr %359, align 8, !tbaa !16
  %indvars.iv.next658.epil = add nuw nsw i64 %indvars.iv657.epil, 1
  %epil.iter828.next = add i64 %epil.iter828, 1
  %epil.iter828.cmp.not = icmp eq i64 %epil.iter828.next, %xtraiter827
  br i1 %epil.iter828.cmp.not, label %.loopexit.loopexit, label %.preheader491.epil, !llvm.loop !59

.loopexit.loopexit:                               ; preds = %.preheader491.epil, %.loopexit.loopexit.unr-lcssa
  %.pre = load ptr, ptr %227, align 8, !tbaa !20
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.loopexit495
  %360 = phi ptr [ %.pre, %.loopexit.loopexit ], [ %275, %.loopexit495 ]
  %361 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv666
  %362 = load ptr, ptr %361, align 8, !tbaa !20
  %363 = getelementptr inbounds double, ptr %362, i64 %indvars.iv666
  %364 = load double, ptr %363, align 8, !tbaa !16
  %365 = getelementptr inbounds double, ptr %360, i64 %indvars.iv666
  %366 = load double, ptr %365, align 8, !tbaa !16
  %367 = fmul double %366, %366
  %368 = call double @llvm.fmuladd.f64(double %364, double %364, double %367)
  %sqrt = call double @llvm.sqrt.f64(double %368)
  %369 = fcmp oeq double %sqrt, 0.000000e+00
  br i1 %369, label %.loopexit500, label %370

370:                                              ; preds = %.loopexit
  %371 = fdiv double %364, %sqrt
  %372 = getelementptr inbounds double, ptr %35, i64 %indvars.iv666
  store double %371, ptr %372, align 8, !tbaa !16
  %373 = load double, ptr %365, align 8, !tbaa !16
  %374 = fneg double %373
  %375 = fdiv double %374, %sqrt
  %376 = getelementptr inbounds double, ptr %43, i64 %indvars.iv666
  store double %375, ptr %376, align 8, !tbaa !16
  %377 = fneg double %375
  %378 = fmul double %373, %377
  %379 = call double @llvm.fmuladd.f64(double %371, double %364, double %378)
  store double %379, ptr %363, align 8, !tbaa !16
  store double 0.000000e+00, ptr %365, align 8, !tbaa !16
  %380 = trunc nuw nsw i64 %indvars.iv666 to i32
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %371, double noundef %375, i32 noundef %380, ptr noundef nonnull %36)
  %381 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next667
  %382 = load double, ptr %381, align 8, !tbaa !16
  %383 = call double @llvm.fabs.f64(double %382)
  %384 = add nsw i32 %.1454547, 1
  %385 = fcmp ugt double %383, %.1465
  %386 = fcmp ugt double %383, %18
  %or.cond = or i1 %385, %386
  %387 = icmp slt i64 %indvars.iv.next667, %78
  %or.cond584 = and i1 %or.cond, %387
  %indvars.iv.next665 = add nuw nsw i64 %indvars.iv664, 1
  %indvars.iv.next663 = add nuw nsw i64 %indvars.iv662, 1
  br i1 %or.cond584, label %.lr.ph548, label %._crit_edge549, !llvm.loop !60

._crit_edge549:                                   ; preds = %370, %._crit_edge517, %.preheader499
  %.2472 = phi i32 [ %.0470573, %.preheader499 ], [ %.0470573, %._crit_edge517 ], [ %380, %370 ]
  %.2468 = phi double [ %107, %.preheader499 ], [ %107, %._crit_edge517 ], [ %383, %370 ]
  %.2455 = phi i32 [ %.0453575, %.preheader499 ], [ %.0453575, %._crit_edge517 ], [ %384, %370 ]
  %388 = sext i32 %.2472 to i64
  %389 = getelementptr inbounds double, ptr %36, i64 %388
  %390 = load double, ptr %389, align 8, !tbaa !16
  %391 = getelementptr inbounds ptr, ptr %38, i64 %388
  %392 = load ptr, ptr %391, align 8, !tbaa !20
  %393 = getelementptr inbounds double, ptr %392, i64 %388
  %394 = load double, ptr %393, align 8, !tbaa !16
  %395 = fdiv double %390, %394
  %396 = getelementptr inbounds double, ptr %48, i64 %388
  store double %395, ptr %396, align 8, !tbaa !16
  %397 = icmp sgt i32 %.2472, 0
  br i1 %397, label %.lr.ph565.preheader, label %.preheader498

.lr.ph565.preheader:                              ; preds = %._crit_edge549
  %398 = zext nneg i32 %.2472 to i64
  br label %.lr.ph565

.preheader498:                                    ; preds = %._crit_edge560, %._crit_edge549
  %.not488566 = icmp slt i32 %.2472, 0
  %or.cond697 = or i1 %69, %.not488566
  br i1 %or.cond697, label %._crit_edge572, label %.preheader.preheader

.preheader.preheader:                             ; preds = %.preheader498
  %399 = add nuw i32 %.2472, 1
  %wide.trip.count682 = zext i32 %399 to i64
  %xtraiter832 = and i64 %wide.trip.count682, 1
  %400 = icmp eq i32 %.2472, 0
  %unroll_iter835 = and i64 %wide.trip.count682, 4294967294
  %lcmp.mod834.not = icmp eq i64 %xtraiter832, 0
  br label %.preheader

.lr.ph565:                                        ; preds = %.lr.ph565.preheader, %._crit_edge560
  %indvars.iv673 = phi i64 [ %398, %.lr.ph565.preheader ], [ %indvars.iv.next674, %._crit_edge560 ]
  %indvars.iv.next674 = add nsw i64 %indvars.iv673, -1
  %401 = getelementptr inbounds double, ptr %36, i64 %indvars.iv.next674
  %402 = load double, ptr %401, align 8, !tbaa !16
  %403 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next674
  store double %402, ptr %403, align 8, !tbaa !16
  %.not489556 = icmp sgt i64 %indvars.iv673, %388
  %.phi.trans.insert = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv.next674
  %.pre690 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !20
  br i1 %.not489556, label %._crit_edge560, label %.lr.ph559

.lr.ph559:                                        ; preds = %.lr.ph565, %.lr.ph559
  %indvars.iv675 = phi i64 [ %indvars.iv.next676, %.lr.ph559 ], [ %indvars.iv673, %.lr.ph565 ]
  %404 = phi double [ %410, %.lr.ph559 ], [ %402, %.lr.ph565 ]
  %405 = getelementptr inbounds double, ptr %.pre690, i64 %indvars.iv675
  %406 = load double, ptr %405, align 8, !tbaa !16
  %407 = getelementptr inbounds double, ptr %48, i64 %indvars.iv675
  %408 = load double, ptr %407, align 8, !tbaa !16
  %409 = fneg double %406
  %410 = call double @llvm.fmuladd.f64(double %409, double %408, double %404)
  store double %410, ptr %403, align 8, !tbaa !16
  %indvars.iv.next676 = add nuw nsw i64 %indvars.iv675, 1
  %411 = trunc nuw i64 %indvars.iv675 to i32
  %.not489.not = icmp sgt i32 %.2472, %411
  br i1 %.not489.not, label %.lr.ph559, label %._crit_edge560, !llvm.loop !61

._crit_edge560:                                   ; preds = %.lr.ph559, %.lr.ph565
  %412 = phi double [ %402, %.lr.ph565 ], [ %410, %.lr.ph559 ]
  %413 = getelementptr inbounds double, ptr %.pre690, i64 %indvars.iv.next674
  %414 = load double, ptr %413, align 8, !tbaa !16
  %415 = fdiv double %412, %414
  store double %415, ptr %403, align 8, !tbaa !16
  %416 = icmp sgt i64 %indvars.iv673, 1
  br i1 %416, label %.lr.ph565, label %.preheader498, !llvm.loop !62

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge569
  %indvars.iv684 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next685, %._crit_edge569 ]
  %417 = getelementptr inbounds double, ptr %14, i64 %indvars.iv684
  %.promoted570 = load double, ptr %417, align 8, !tbaa !16
  br i1 %400, label %._crit_edge569.unr-lcssa, label %.preheader.new

.preheader.new:                                   ; preds = %.preheader, %.preheader.new
  %indvars.iv679 = phi i64 [ %indvars.iv.next680.1, %.preheader.new ], [ 0, %.preheader ]
  %418 = phi double [ %432, %.preheader.new ], [ %.promoted570, %.preheader ]
  %niter836 = phi i64 [ %niter836.next.1, %.preheader.new ], [ 0, %.preheader ]
  %419 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv679
  %420 = load ptr, ptr %419, align 8, !tbaa !20
  %421 = getelementptr inbounds double, ptr %420, i64 %indvars.iv684
  %422 = load double, ptr %421, align 8, !tbaa !16
  %423 = getelementptr inbounds double, ptr %48, i64 %indvars.iv679
  %424 = load double, ptr %423, align 8, !tbaa !16
  %425 = call double @llvm.fmuladd.f64(double %422, double %424, double %418)
  store double %425, ptr %417, align 8, !tbaa !16
  %indvars.iv.next680 = or disjoint i64 %indvars.iv679, 1
  %426 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv.next680
  %427 = load ptr, ptr %426, align 8, !tbaa !20
  %428 = getelementptr inbounds double, ptr %427, i64 %indvars.iv684
  %429 = load double, ptr %428, align 8, !tbaa !16
  %430 = getelementptr inbounds double, ptr %48, i64 %indvars.iv.next680
  %431 = load double, ptr %430, align 8, !tbaa !16
  %432 = call double @llvm.fmuladd.f64(double %429, double %431, double %425)
  store double %432, ptr %417, align 8, !tbaa !16
  %indvars.iv.next680.1 = add nuw nsw i64 %indvars.iv679, 2
  %niter836.next.1 = add i64 %niter836, 2
  %niter836.ncmp.1 = icmp eq i64 %niter836.next.1, %unroll_iter835
  br i1 %niter836.ncmp.1, label %._crit_edge569.unr-lcssa, label %.preheader.new, !llvm.loop !63

._crit_edge569.unr-lcssa:                         ; preds = %.preheader.new, %.preheader
  %indvars.iv679.unr = phi i64 [ 0, %.preheader ], [ %indvars.iv.next680.1, %.preheader.new ]
  %.unr = phi double [ %.promoted570, %.preheader ], [ %432, %.preheader.new ]
  br i1 %lcmp.mod834.not, label %._crit_edge569, label %._crit_edge569.epilog-lcssa

._crit_edge569.epilog-lcssa:                      ; preds = %._crit_edge569.unr-lcssa
  %433 = getelementptr inbounds ptr, ptr %47, i64 %indvars.iv679.unr
  %434 = load ptr, ptr %433, align 8, !tbaa !20
  %435 = getelementptr inbounds double, ptr %434, i64 %indvars.iv684
  %436 = load double, ptr %435, align 8, !tbaa !16
  %437 = getelementptr inbounds double, ptr %48, i64 %indvars.iv679.unr
  %438 = load double, ptr %437, align 8, !tbaa !16
  %439 = call double @llvm.fmuladd.f64(double %436, double %438, double %.unr)
  store double %439, ptr %417, align 8, !tbaa !16
  br label %._crit_edge569

._crit_edge569:                                   ; preds = %._crit_edge569.unr-lcssa, %._crit_edge569.epilog-lcssa
  %indvars.iv.next685 = add nuw nsw i64 %indvars.iv684, 1
  %exitcond688.not = icmp eq i64 %indvars.iv.next685, %wide.trip.count687
  br i1 %exitcond688.not, label %._crit_edge572, label %.preheader, !llvm.loop !64

._crit_edge572:                                   ; preds = %._crit_edge569, %.preheader498
  %440 = fcmp ole double %.2468, %.1465
  %441 = fcmp ole double %.2468, %18
  %or.cond490.not699 = and i1 %440, %441
  %442 = add nuw nsw i32 %.0452576, 1
  %exitcond689.not = icmp eq i32 %442, %16
  %or.cond696 = select i1 %or.cond490.not699, i1 true, i1 %exitcond689.not
  br i1 %or.cond696, label %.loopexit500, label %85, !llvm.loop !65

.loopexit500:                                     ; preds = %105, %._crit_edge572, %.loopexit, %.loopexit504
  %.0450 = phi i32 [ 0, %.loopexit504 ], [ %.1454547, %.loopexit ], [ %.0453575, %105 ], [ %.2455, %._crit_edge572 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #10
  ret i32 %.0450
}

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

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

declare void @_ZN5nasoq16spmv_csc_sym_oneEiPmPiPdiS2_S2_iS2_S2_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

declare void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #7

declare void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #7

declare void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #8

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

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

; 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>) #9

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { mustprogress 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 #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { "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 #8 = { mustprogress nofree nounwind willreturn memory(write) "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 #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind }
attributes #11 = { nounwind 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !14, !13}
!16 = !{!17, !17, i64 0}
!17 = !{!"double", !7, i64 0}
!18 = distinct !{!18, !12, !13, !14}
!19 = distinct !{!19, !12, !14, !13}
!20 = !{!21, !21, i64 0}
!21 = !{!"any pointer", !7, i64 0}
!22 = distinct !{!22, !12, !13, !14}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.unroll.disable"}
!25 = distinct !{!25, !12, !13}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !24}
!28 = !{!29}
!29 = distinct !{!29, !30}
!30 = distinct !{!30, !"LVerDomain"}
!31 = !{!32}
!32 = distinct !{!32, !30}
!33 = !{!29, !34}
!34 = distinct !{!34, !30}
!35 = !{!34}
!36 = distinct !{!36, !12, !13, !14}
!37 = distinct !{!37, !12, !13}
!38 = distinct !{!38, !12}
!39 = !{!40}
!40 = distinct !{!40, !41}
!41 = distinct !{!41, !"LVerDomain"}
!42 = !{!43}
!43 = distinct !{!43, !41}
!44 = distinct !{!44, !12, !13, !14}
!45 = distinct !{!45, !12, !13}
!46 = distinct !{!46, !12}
!47 = !{!48}
!48 = distinct !{!48, !49}
!49 = distinct !{!49, !"LVerDomain"}
!50 = !{!51}
!51 = distinct !{!51, !49}
!52 = distinct !{!52, !12, !13, !14}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !12, !13}
!55 = distinct !{!55, !12}
!56 = distinct !{!56, !24}
!57 = distinct !{!57, !12}
!58 = distinct !{!58, !12}
!59 = distinct !{!59, !24}
!60 = distinct !{!60, !12}
!61 = distinct !{!61, !12}
!62 = distinct !{!62, !12}
!63 = distinct !{!63, !12}
!64 = distinct !{!64, !12}
!65 = distinct !{!65, !12}


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