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

@__const._ZN5nasoq17pmgmres_ldlt_autoEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_iS1_.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) #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 @_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 noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef, i32 noundef, i32 noundef, i32 noundef) #0

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

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

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

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) #6

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) #6

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) #6

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5nasoq17pmgmres_ldlt_autoEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_iS1_(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, ptr noundef %29) #8 {
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %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 ptr, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca i32, align 4
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca i32, align 4
  %61 = alloca ptr, align 8
  %62 = alloca double, align 8
  %63 = alloca ptr, align 8
  %64 = alloca double, align 8
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca double, align 8
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca double, align 8
  %75 = alloca ptr, align 8
  %76 = alloca double, align 8
  %77 = alloca double, 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 double, align 8
  %85 = alloca i32, align 4
  store i32 %0, ptr %32, align 4, !tbaa !5
  store i32 %1, ptr %33, align 4, !tbaa !5
  store ptr %2, ptr %34, align 8, !tbaa !9
  store ptr %3, ptr %35, align 8, !tbaa !9
  store ptr %4, ptr %36, align 8, !tbaa !9
  store ptr %5, ptr %37, align 8, !tbaa !9
  store ptr %6, ptr %38, align 8, !tbaa !9
  store ptr %7, ptr %39, align 8, !tbaa !9
  store i64 %8, ptr %40, align 8, !tbaa !11
  store ptr %9, ptr %41, align 8, !tbaa !9
  store ptr %10, ptr %42, align 8, !tbaa !9
  store ptr %11, ptr %43, align 8, !tbaa !9
  store i32 %12, ptr %44, align 4, !tbaa !5
  store ptr %13, ptr %45, align 8, !tbaa !9
  store ptr %14, ptr %46, align 8, !tbaa !9
  store ptr %15, ptr %47, align 8, !tbaa !9
  store i32 %16, ptr %48, align 4, !tbaa !5
  store i32 %17, ptr %49, align 4, !tbaa !5
  store double %18, ptr %50, align 8, !tbaa !13
  store double %19, ptr %51, align 8, !tbaa !13
  store i32 %20, ptr %52, align 4, !tbaa !5
  store i32 %21, ptr %53, align 4, !tbaa !5
  store i32 %22, ptr %54, align 4, !tbaa !5
  store ptr %23, ptr %55, align 8, !tbaa !9
  store ptr %24, ptr %56, align 8, !tbaa !9
  store i32 %25, ptr %57, align 4, !tbaa !5
  store ptr %26, ptr %58, align 8, !tbaa !9
  store ptr %27, ptr %59, align 8, !tbaa !9
  store i32 %28, ptr %60, align 4, !tbaa !5
  store ptr %29, ptr %61, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  store double 1.000000e-03, ptr %64, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.start.p0(i64 8, 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 4, ptr %72) #9
  call void @llvm.lifetime.start.p0(i64 4, 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._ZN5nasoq17pmgmres_ldlt_autoEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_iS1_.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 %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #9
  store double 0.000000e+00, ptr %84, align 8, !tbaa !13
  %86 = load i32, ptr %49, align 4, !tbaa !5
  %87 = add nsw i32 %86, 1
  %88 = sext i32 %87 to i64
  %89 = mul i64 %88, 8
  %90 = call noalias ptr @malloc(i64 noundef %89) #10
  store ptr %90, ptr %63, align 8, !tbaa !9
  %91 = load i32, ptr %49, align 4, !tbaa !5
  %92 = add nsw i32 %91, 1
  %93 = sext i32 %92 to i64
  %94 = mul i64 %93, 8
  %95 = call noalias ptr @malloc(i64 noundef %94) #10
  store ptr %95, ptr %65, align 8, !tbaa !9
  %96 = load i32, ptr %49, align 4, !tbaa !5
  %97 = load i32, ptr %49, align 4, !tbaa !5
  %98 = sub nsw i32 %97, 1
  %99 = call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %96, i32 noundef 0, i32 noundef %98)
  store ptr %99, ptr %66, align 8, !tbaa !9
  %100 = load i32, ptr %32, align 4, !tbaa !5
  %101 = sext i32 %100 to i64
  %102 = mul i64 %101, 8
  %103 = call noalias ptr @malloc(i64 noundef %102) #10
  store ptr %103, ptr %75, align 8, !tbaa !9
  %104 = load i32, ptr %49, align 4, !tbaa !5
  %105 = add nsw i32 %104, 1
  %106 = sext i32 %105 to i64
  %107 = mul i64 %106, 8
  %108 = call noalias ptr @malloc(i64 noundef %107) #10
  store ptr %108, ptr %78, align 8, !tbaa !9
  %109 = load i32, ptr %49, align 4, !tbaa !5
  %110 = load i32, ptr %32, align 4, !tbaa !5
  %111 = sub nsw i32 %110, 1
  %112 = call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %109, i32 noundef 0, i32 noundef %111)
  store ptr %112, ptr %79, align 8, !tbaa !9
  %113 = load i32, ptr %49, align 4, !tbaa !5
  %114 = add nsw i32 %113, 1
  %115 = sext i32 %114 to i64
  %116 = mul i64 %115, 8
  %117 = call noalias ptr @malloc(i64 noundef %116) #10
  store ptr %117, ptr %81, align 8, !tbaa !9
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %118

118:                                              ; preds = %1142, %30
  %119 = load i32, ptr %69, align 4, !tbaa !5
  %120 = load i32, ptr %48, align 4, !tbaa !5
  %121 = icmp slt i32 %119, %120
  br i1 %121, label %122, label %1145

122:                                              ; preds = %118
  %123 = load i32, ptr %52, align 4, !tbaa !5
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %133, label %125

125:                                              ; preds = %122
  %126 = load i32, ptr %32, align 4, !tbaa !5
  %127 = load i32, ptr %33, align 4, !tbaa !5
  %128 = load ptr, ptr %34, align 8, !tbaa !9
  %129 = load ptr, ptr %35, align 8, !tbaa !9
  %130 = load ptr, ptr %36, align 8, !tbaa !9
  %131 = load ptr, ptr %46, align 8, !tbaa !9
  %132 = load ptr, ptr %75, align 8, !tbaa !9
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %126, i32 noundef %127, ptr noundef %128, ptr noundef %129, ptr noundef %130, ptr noundef %131, ptr noundef %132)
  br label %142

133:                                              ; preds = %122
  %134 = load i32, ptr %32, align 4, !tbaa !5
  %135 = load ptr, ptr %34, align 8, !tbaa !9
  %136 = load ptr, ptr %35, align 8, !tbaa !9
  %137 = load ptr, ptr %36, align 8, !tbaa !9
  %138 = getelementptr inbounds [2 x double], ptr %82, i64 0, i64 0
  %139 = getelementptr inbounds [2 x double], ptr %83, i64 0, i64 0
  %140 = load ptr, ptr %46, align 8, !tbaa !9
  %141 = load ptr, ptr %75, align 8, !tbaa !9
  call void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef %134, ptr noundef %135, ptr noundef %136, ptr noundef %137, i32 noundef -1, ptr noundef %138, ptr noundef %139, i32 noundef 1, ptr noundef %140, ptr noundef %141)
  br label %142

142:                                              ; preds = %133, %125
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %143

143:                                              ; preds = %163, %142
  %144 = load i32, ptr %68, align 4, !tbaa !5
  %145 = load i32, ptr %32, align 4, !tbaa !5
  %146 = icmp slt i32 %144, %145
  br i1 %146, label %147, label %166

147:                                              ; preds = %143
  %148 = load ptr, ptr %47, align 8, !tbaa !9
  %149 = load i32, ptr %68, align 4, !tbaa !5
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds double, ptr %148, i64 %150
  %152 = load double, ptr %151, align 8, !tbaa !13
  %153 = load ptr, ptr %75, align 8, !tbaa !9
  %154 = load i32, ptr %68, align 4, !tbaa !5
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds double, ptr %153, i64 %155
  %157 = load double, ptr %156, align 8, !tbaa !13
  %158 = fsub double %152, %157
  %159 = load ptr, ptr %75, align 8, !tbaa !9
  %160 = load i32, ptr %68, align 4, !tbaa !5
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds double, ptr %159, i64 %161
  store double %158, ptr %162, align 8, !tbaa !13
  br label %163

163:                                              ; preds = %147
  %164 = load i32, ptr %68, align 4, !tbaa !5
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr %68, align 4, !tbaa !5
  br label %143, !llvm.loop !15

166:                                              ; preds = %143
  %167 = load i32, ptr %53, align 4, !tbaa !5
  %168 = icmp eq i32 %167, 2
  br i1 %168, label %169, label %191

169:                                              ; preds = %166
  %170 = load i32, ptr %32, align 4, !tbaa !5
  %171 = sext i32 %170 to i64
  %172 = load ptr, ptr %45, align 8, !tbaa !9
  %173 = load ptr, ptr %75, align 8, !tbaa !9
  %174 = load ptr, ptr %42, align 8, !tbaa !9
  %175 = load ptr, ptr %43, align 8, !tbaa !9
  %176 = load ptr, ptr %37, align 8, !tbaa !9
  %177 = load ptr, ptr %38, align 8, !tbaa !9
  %178 = load ptr, ptr %39, align 8, !tbaa !9
  %179 = load ptr, ptr %41, align 8, !tbaa !9
  %180 = load i32, ptr %44, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = load i64, ptr %40, align 8, !tbaa !11
  %183 = trunc i64 %182 to i32
  %184 = load i32, ptr %54, align 4, !tbaa !5
  %185 = load ptr, ptr %55, align 8, !tbaa !9
  %186 = load ptr, ptr %56, align 8, !tbaa !9
  %187 = load i32, ptr %57, align 4, !tbaa !5
  %188 = load ptr, ptr %58, align 8, !tbaa !9
  %189 = load ptr, ptr %59, align 8, !tbaa !9
  %190 = load i32, ptr %60, align 4, !tbaa !5
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %171, ptr noundef %172, ptr noundef %173, ptr noundef %174, ptr noundef %175, ptr noundef %176, ptr noundef %177, ptr noundef %178, ptr noundef %179, i64 noundef %181, i32 noundef %183, i32 noundef %184, ptr noundef %185, ptr noundef %186, i32 noundef %187, ptr noundef %188, ptr noundef %189, i32 noundef %190)
  br label %225

191:                                              ; preds = %166
  %192 = load i32, ptr %53, align 4, !tbaa !5
  %193 = icmp eq i32 %192, 1
  br i1 %193, label %194, label %209

194:                                              ; preds = %191
  %195 = load i32, ptr %32, align 4, !tbaa !5
  %196 = sext i32 %195 to i64
  %197 = load ptr, ptr %45, align 8, !tbaa !9
  %198 = load ptr, ptr %75, align 8, !tbaa !9
  %199 = load ptr, ptr %42, align 8, !tbaa !9
  %200 = load ptr, ptr %43, align 8, !tbaa !9
  %201 = load ptr, ptr %37, align 8, !tbaa !9
  %202 = load ptr, ptr %38, align 8, !tbaa !9
  %203 = load ptr, ptr %39, align 8, !tbaa !9
  %204 = load ptr, ptr %41, align 8, !tbaa !9
  %205 = load i32, ptr %44, align 4, !tbaa !5
  %206 = sext i32 %205 to i64
  %207 = load i64, ptr %40, align 8, !tbaa !11
  %208 = trunc i64 %207 to i32
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %196, ptr noundef %197, ptr noundef %198, ptr noundef %199, ptr noundef %200, ptr noundef %201, ptr noundef %202, ptr noundef %203, ptr noundef %204, i64 noundef %206, i32 noundef %208)
  br label %224

209:                                              ; preds = %191
  %210 = load i32, ptr %32, align 4, !tbaa !5
  %211 = sext i32 %210 to i64
  %212 = load ptr, ptr %45, align 8, !tbaa !9
  %213 = load ptr, ptr %75, align 8, !tbaa !9
  %214 = load ptr, ptr %42, align 8, !tbaa !9
  %215 = load ptr, ptr %43, align 8, !tbaa !9
  %216 = load ptr, ptr %37, align 8, !tbaa !9
  %217 = load ptr, ptr %38, align 8, !tbaa !9
  %218 = load ptr, ptr %39, align 8, !tbaa !9
  %219 = load ptr, ptr %41, align 8, !tbaa !9
  %220 = load i32, ptr %44, align 4, !tbaa !5
  %221 = sext i32 %220 to i64
  %222 = load i64, ptr %40, align 8, !tbaa !11
  %223 = trunc i64 %222 to i32
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %211, ptr noundef %212, ptr noundef %213, ptr noundef %214, ptr noundef %215, ptr noundef %216, ptr noundef %217, ptr noundef %218, ptr noundef %219, i64 noundef %221, i32 noundef %223)
  br label %224

224:                                              ; preds = %209, %194
  br label %225

225:                                              ; preds = %224, %169
  %226 = load i32, ptr %32, align 4, !tbaa !5
  %227 = load ptr, ptr %75, align 8, !tbaa !9
  %228 = load ptr, ptr %75, align 8, !tbaa !9
  %229 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %226, ptr noundef %227, ptr noundef %228)
  %230 = call double @sqrt(double noundef %229) #9
  store double %230, ptr %76, align 8, !tbaa !13
  %231 = load double, ptr %76, align 8, !tbaa !13
  %232 = load double, ptr %50, align 8, !tbaa !13
  %233 = fcmp olt double %231, %232
  br i1 %233, label %234, label %246

234:                                              ; preds = %225
  %235 = load ptr, ptr %61, align 8, !tbaa !9
  %236 = load ptr, ptr %63, align 8, !tbaa !9
  %237 = load ptr, ptr %65, align 8, !tbaa !9
  %238 = load ptr, ptr %66, align 8, !tbaa !9
  %239 = load i32, ptr %49, align 4, !tbaa !5
  %240 = load ptr, ptr %75, align 8, !tbaa !9
  %241 = load ptr, ptr %78, align 8, !tbaa !9
  %242 = load ptr, ptr %79, align 8, !tbaa !9
  %243 = load i32, ptr %32, align 4, !tbaa !5
  %244 = load ptr, ptr %81, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %235, ptr noundef %236, ptr noundef %237, ptr noundef %238, i32 noundef %239, ptr noundef %240, ptr noundef %241, ptr noundef %242, i32 noundef %243, ptr noundef %244)
  %245 = load i32, ptr %70, align 4, !tbaa !5
  store i32 %245, ptr %31, align 4
  store i32 1, ptr %85, align 4
  br label %1157

246:                                              ; preds = %225
  %247 = load i32, ptr %69, align 4, !tbaa !5
  %248 = icmp eq i32 %247, 0
  br i1 %248, label %249, label %253

249:                                              ; preds = %246
  %250 = load double, ptr %76, align 8, !tbaa !13
  %251 = load double, ptr %51, align 8, !tbaa !13
  %252 = fmul double %250, %251
  store double %252, ptr %77, align 8, !tbaa !13
  br label %253

253:                                              ; preds = %249, %246
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %254

254:                                              ; preds = %272, %253
  %255 = load i32, ptr %68, align 4, !tbaa !5
  %256 = load i32, ptr %32, align 4, !tbaa !5
  %257 = icmp slt i32 %255, %256
  br i1 %257, label %258, label %275

258:                                              ; preds = %254
  %259 = load ptr, ptr %75, align 8, !tbaa !9
  %260 = load i32, ptr %68, align 4, !tbaa !5
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds double, ptr %259, i64 %261
  %263 = load double, ptr %262, align 8, !tbaa !13
  %264 = load double, ptr %76, align 8, !tbaa !13
  %265 = fdiv double %263, %264
  %266 = load ptr, ptr %79, align 8, !tbaa !9
  %267 = getelementptr inbounds ptr, ptr %266, i64 0
  %268 = load ptr, ptr %267, align 8, !tbaa !9
  %269 = load i32, ptr %68, align 4, !tbaa !5
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds double, ptr %268, i64 %270
  store double %265, ptr %271, align 8, !tbaa !13
  br label %272

272:                                              ; preds = %258
  %273 = load i32, ptr %68, align 4, !tbaa !5
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %68, align 4, !tbaa !5
  br label %254, !llvm.loop !17

275:                                              ; preds = %254
  %276 = load double, ptr %76, align 8, !tbaa !13
  %277 = load ptr, ptr %65, align 8, !tbaa !9
  %278 = getelementptr inbounds double, ptr %277, i64 0
  store double %276, ptr %278, align 8, !tbaa !13
  store i32 1, ptr %68, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %289, %275
  %280 = load i32, ptr %68, align 4, !tbaa !5
  %281 = load i32, ptr %49, align 4, !tbaa !5
  %282 = add nsw i32 %281, 1
  %283 = icmp slt i32 %280, %282
  br i1 %283, label %284, label %292

284:                                              ; preds = %279
  %285 = load ptr, ptr %65, align 8, !tbaa !9
  %286 = load i32, ptr %68, align 4, !tbaa !5
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds double, ptr %285, i64 %287
  store double 0.000000e+00, ptr %288, align 8, !tbaa !13
  br label %289

289:                                              ; preds = %284
  %290 = load i32, ptr %68, align 4, !tbaa !5
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %68, align 4, !tbaa !5
  br label %279, !llvm.loop !18

292:                                              ; preds = %279
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %293

293:                                              ; preds = %316, %292
  %294 = load i32, ptr %68, align 4, !tbaa !5
  %295 = load i32, ptr %49, align 4, !tbaa !5
  %296 = add nsw i32 %295, 1
  %297 = icmp slt i32 %294, %296
  br i1 %297, label %298, label %319

298:                                              ; preds = %293
  store i32 0, ptr %71, align 4, !tbaa !5
  br label %299

299:                                              ; preds = %312, %298
  %300 = load i32, ptr %71, align 4, !tbaa !5
  %301 = load i32, ptr %49, align 4, !tbaa !5
  %302 = icmp slt i32 %300, %301
  br i1 %302, label %303, label %315

303:                                              ; preds = %299
  %304 = load ptr, ptr %66, align 8, !tbaa !9
  %305 = load i32, ptr %68, align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds ptr, ptr %304, i64 %306
  %308 = load ptr, ptr %307, align 8, !tbaa !9
  %309 = load i32, ptr %71, align 4, !tbaa !5
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds double, ptr %308, i64 %310
  store double 0.000000e+00, ptr %311, align 8, !tbaa !13
  br label %312

312:                                              ; preds = %303
  %313 = load i32, ptr %71, align 4, !tbaa !5
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %71, align 4, !tbaa !5
  br label %299, !llvm.loop !19

315:                                              ; preds = %299
  br label %316

316:                                              ; preds = %315
  %317 = load i32, ptr %68, align 4, !tbaa !5
  %318 = add nsw i32 %317, 1
  store i32 %318, ptr %68, align 4, !tbaa !5
  br label %293, !llvm.loop !20

319:                                              ; preds = %293
  store i32 0, ptr %72, align 4, !tbaa !5
  br label %320

320:                                              ; preds = %968, %319
  %321 = load i32, ptr %72, align 4, !tbaa !5
  %322 = load i32, ptr %49, align 4, !tbaa !5
  %323 = icmp slt i32 %321, %322
  br i1 %323, label %324, label %971

324:                                              ; preds = %320
  %325 = load i32, ptr %72, align 4, !tbaa !5
  store i32 %325, ptr %73, align 4, !tbaa !5
  %326 = load i32, ptr %52, align 4, !tbaa !5
  %327 = icmp ne i32 %326, 0
  br i1 %327, label %345, label %328

328:                                              ; preds = %324
  %329 = load i32, ptr %32, align 4, !tbaa !5
  %330 = load i32, ptr %33, align 4, !tbaa !5
  %331 = load ptr, ptr %34, align 8, !tbaa !9
  %332 = load ptr, ptr %35, align 8, !tbaa !9
  %333 = load ptr, ptr %36, align 8, !tbaa !9
  %334 = load ptr, ptr %79, align 8, !tbaa !9
  %335 = load i32, ptr %72, align 4, !tbaa !5
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds ptr, ptr %334, i64 %336
  %338 = load ptr, ptr %337, align 8, !tbaa !9
  %339 = load ptr, ptr %79, align 8, !tbaa !9
  %340 = load i32, ptr %72, align 4, !tbaa !5
  %341 = add nsw i32 %340, 1
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds ptr, ptr %339, i64 %342
  %344 = load ptr, ptr %343, align 8, !tbaa !9
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %329, i32 noundef %330, ptr noundef %331, ptr noundef %332, ptr noundef %333, ptr noundef %338, ptr noundef %344)
  br label %363

345:                                              ; preds = %324
  %346 = load i32, ptr %32, align 4, !tbaa !5
  %347 = load ptr, ptr %34, align 8, !tbaa !9
  %348 = load ptr, ptr %35, align 8, !tbaa !9
  %349 = load ptr, ptr %36, align 8, !tbaa !9
  %350 = getelementptr inbounds [2 x double], ptr %82, i64 0, i64 0
  %351 = getelementptr inbounds [2 x double], ptr %83, i64 0, i64 0
  %352 = load ptr, ptr %79, align 8, !tbaa !9
  %353 = load i32, ptr %72, align 4, !tbaa !5
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds ptr, ptr %352, i64 %354
  %356 = load ptr, ptr %355, align 8, !tbaa !9
  %357 = load ptr, ptr %79, align 8, !tbaa !9
  %358 = load i32, ptr %72, align 4, !tbaa !5
  %359 = add nsw i32 %358, 1
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds ptr, ptr %357, i64 %360
  %362 = load ptr, ptr %361, align 8, !tbaa !9
  call void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef %346, ptr noundef %347, ptr noundef %348, ptr noundef %349, i32 noundef -1, ptr noundef %350, ptr noundef %351, i32 noundef 1, ptr noundef %356, ptr noundef %362)
  br label %363

363:                                              ; preds = %345, %328
  %364 = load i32, ptr %53, align 4, !tbaa !5
  %365 = icmp eq i32 %364, 2
  br i1 %365, label %366, label %393

366:                                              ; preds = %363
  %367 = load i32, ptr %32, align 4, !tbaa !5
  %368 = sext i32 %367 to i64
  %369 = load ptr, ptr %45, align 8, !tbaa !9
  %370 = load ptr, ptr %79, align 8, !tbaa !9
  %371 = load i32, ptr %72, align 4, !tbaa !5
  %372 = add nsw i32 %371, 1
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds ptr, ptr %370, i64 %373
  %375 = load ptr, ptr %374, align 8, !tbaa !9
  %376 = load ptr, ptr %42, align 8, !tbaa !9
  %377 = load ptr, ptr %43, align 8, !tbaa !9
  %378 = load ptr, ptr %37, align 8, !tbaa !9
  %379 = load ptr, ptr %38, align 8, !tbaa !9
  %380 = load ptr, ptr %39, align 8, !tbaa !9
  %381 = load ptr, ptr %41, align 8, !tbaa !9
  %382 = load i32, ptr %44, align 4, !tbaa !5
  %383 = sext i32 %382 to i64
  %384 = load i64, ptr %40, align 8, !tbaa !11
  %385 = trunc i64 %384 to i32
  %386 = load i32, ptr %54, align 4, !tbaa !5
  %387 = load ptr, ptr %55, align 8, !tbaa !9
  %388 = load ptr, ptr %56, align 8, !tbaa !9
  %389 = load i32, ptr %57, align 4, !tbaa !5
  %390 = load ptr, ptr %58, align 8, !tbaa !9
  %391 = load ptr, ptr %59, align 8, !tbaa !9
  %392 = load i32, ptr %60, align 4, !tbaa !5
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %368, ptr noundef %369, ptr noundef %375, ptr noundef %376, ptr noundef %377, ptr noundef %378, ptr noundef %379, ptr noundef %380, ptr noundef %381, i64 noundef %383, i32 noundef %385, i32 noundef %386, ptr noundef %387, ptr noundef %388, i32 noundef %389, ptr noundef %390, ptr noundef %391, i32 noundef %392)
  br label %437

393:                                              ; preds = %363
  %394 = load i32, ptr %53, align 4, !tbaa !5
  %395 = icmp eq i32 %394, 1
  br i1 %395, label %396, label %416

396:                                              ; preds = %393
  %397 = load i32, ptr %32, align 4, !tbaa !5
  %398 = sext i32 %397 to i64
  %399 = load ptr, ptr %45, align 8, !tbaa !9
  %400 = load ptr, ptr %79, align 8, !tbaa !9
  %401 = load i32, ptr %72, align 4, !tbaa !5
  %402 = add nsw i32 %401, 1
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds ptr, ptr %400, i64 %403
  %405 = load ptr, ptr %404, align 8, !tbaa !9
  %406 = load ptr, ptr %42, align 8, !tbaa !9
  %407 = load ptr, ptr %43, align 8, !tbaa !9
  %408 = load ptr, ptr %37, align 8, !tbaa !9
  %409 = load ptr, ptr %38, align 8, !tbaa !9
  %410 = load ptr, ptr %39, align 8, !tbaa !9
  %411 = load ptr, ptr %41, align 8, !tbaa !9
  %412 = load i32, ptr %44, align 4, !tbaa !5
  %413 = sext i32 %412 to i64
  %414 = load i64, ptr %40, align 8, !tbaa !11
  %415 = trunc i64 %414 to i32
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %398, ptr noundef %399, ptr noundef %405, ptr noundef %406, ptr noundef %407, ptr noundef %408, ptr noundef %409, ptr noundef %410, ptr noundef %411, i64 noundef %413, i32 noundef %415)
  br label %436

416:                                              ; preds = %393
  %417 = load i32, ptr %32, align 4, !tbaa !5
  %418 = sext i32 %417 to i64
  %419 = load ptr, ptr %45, align 8, !tbaa !9
  %420 = load ptr, ptr %79, align 8, !tbaa !9
  %421 = load i32, ptr %72, align 4, !tbaa !5
  %422 = add nsw i32 %421, 1
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds ptr, ptr %420, i64 %423
  %425 = load ptr, ptr %424, align 8, !tbaa !9
  %426 = load ptr, ptr %42, align 8, !tbaa !9
  %427 = load ptr, ptr %43, align 8, !tbaa !9
  %428 = load ptr, ptr %37, align 8, !tbaa !9
  %429 = load ptr, ptr %38, align 8, !tbaa !9
  %430 = load ptr, ptr %39, align 8, !tbaa !9
  %431 = load ptr, ptr %41, align 8, !tbaa !9
  %432 = load i32, ptr %44, align 4, !tbaa !5
  %433 = sext i32 %432 to i64
  %434 = load i64, ptr %40, align 8, !tbaa !11
  %435 = trunc i64 %434 to i32
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %418, ptr noundef %419, ptr noundef %425, ptr noundef %426, ptr noundef %427, ptr noundef %428, ptr noundef %429, ptr noundef %430, ptr noundef %431, i64 noundef %433, i32 noundef %435)
  br label %436

436:                                              ; preds = %416, %396
  br label %437

437:                                              ; preds = %436, %366
  %438 = load i32, ptr %32, align 4, !tbaa !5
  %439 = load ptr, ptr %79, align 8, !tbaa !9
  %440 = load i32, ptr %72, align 4, !tbaa !5
  %441 = add nsw i32 %440, 1
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds ptr, ptr %439, i64 %442
  %444 = load ptr, ptr %443, align 8, !tbaa !9
  %445 = load ptr, ptr %79, align 8, !tbaa !9
  %446 = load i32, ptr %72, align 4, !tbaa !5
  %447 = add nsw i32 %446, 1
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds ptr, ptr %445, i64 %448
  %450 = load ptr, ptr %449, align 8, !tbaa !9
  %451 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %438, ptr noundef %444, ptr noundef %450)
  %452 = call double @sqrt(double noundef %451) #9
  store double %452, ptr %62, align 8, !tbaa !13
  store i32 0, ptr %71, align 4, !tbaa !5
  br label %453

453:                                              ; preds = %527, %437
  %454 = load i32, ptr %71, align 4, !tbaa !5
  %455 = load i32, ptr %72, align 4, !tbaa !5
  %456 = icmp sle i32 %454, %455
  br i1 %456, label %457, label %530

457:                                              ; preds = %453
  %458 = load i32, ptr %32, align 4, !tbaa !5
  %459 = load ptr, ptr %79, align 8, !tbaa !9
  %460 = load i32, ptr %72, align 4, !tbaa !5
  %461 = add nsw i32 %460, 1
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds ptr, ptr %459, i64 %462
  %464 = load ptr, ptr %463, align 8, !tbaa !9
  %465 = load ptr, ptr %79, align 8, !tbaa !9
  %466 = load i32, ptr %71, align 4, !tbaa !5
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds ptr, ptr %465, i64 %467
  %469 = load ptr, ptr %468, align 8, !tbaa !9
  %470 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %458, ptr noundef %464, ptr noundef %469)
  %471 = load ptr, ptr %66, align 8, !tbaa !9
  %472 = load i32, ptr %71, align 4, !tbaa !5
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds ptr, ptr %471, i64 %473
  %475 = load ptr, ptr %474, align 8, !tbaa !9
  %476 = load i32, ptr %72, align 4, !tbaa !5
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds double, ptr %475, i64 %477
  store double %470, ptr %478, align 8, !tbaa !13
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %479

479:                                              ; preds = %523, %457
  %480 = load i32, ptr %68, align 4, !tbaa !5
  %481 = load i32, ptr %32, align 4, !tbaa !5
  %482 = icmp slt i32 %480, %481
  br i1 %482, label %483, label %526

483:                                              ; preds = %479
  %484 = load ptr, ptr %79, align 8, !tbaa !9
  %485 = load i32, ptr %72, align 4, !tbaa !5
  %486 = add nsw i32 %485, 1
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds ptr, ptr %484, i64 %487
  %489 = load ptr, ptr %488, align 8, !tbaa !9
  %490 = load i32, ptr %68, align 4, !tbaa !5
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds double, ptr %489, i64 %491
  %493 = load double, ptr %492, align 8, !tbaa !13
  %494 = load ptr, ptr %66, align 8, !tbaa !9
  %495 = load i32, ptr %71, align 4, !tbaa !5
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds ptr, ptr %494, i64 %496
  %498 = load ptr, ptr %497, align 8, !tbaa !9
  %499 = load i32, ptr %72, align 4, !tbaa !5
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %498, i64 %500
  %502 = load double, ptr %501, align 8, !tbaa !13
  %503 = load ptr, ptr %79, align 8, !tbaa !9
  %504 = load i32, ptr %71, align 4, !tbaa !5
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds ptr, ptr %503, i64 %505
  %507 = load ptr, ptr %506, align 8, !tbaa !9
  %508 = load i32, ptr %68, align 4, !tbaa !5
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %507, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !13
  %512 = fneg double %502
  %513 = call double @llvm.fmuladd.f64(double %512, double %511, double %493)
  %514 = load ptr, ptr %79, align 8, !tbaa !9
  %515 = load i32, ptr %72, align 4, !tbaa !5
  %516 = add nsw i32 %515, 1
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds ptr, ptr %514, i64 %517
  %519 = load ptr, ptr %518, align 8, !tbaa !9
  %520 = load i32, ptr %68, align 4, !tbaa !5
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds double, ptr %519, i64 %521
  store double %513, ptr %522, align 8, !tbaa !13
  br label %523

523:                                              ; preds = %483
  %524 = load i32, ptr %68, align 4, !tbaa !5
  %525 = add nsw i32 %524, 1
  store i32 %525, ptr %68, align 4, !tbaa !5
  br label %479, !llvm.loop !21

526:                                              ; preds = %479
  br label %527

527:                                              ; preds = %526
  %528 = load i32, ptr %71, align 4, !tbaa !5
  %529 = add nsw i32 %528, 1
  store i32 %529, ptr %71, align 4, !tbaa !5
  br label %453, !llvm.loop !22

530:                                              ; preds = %453
  %531 = load i32, ptr %32, align 4, !tbaa !5
  %532 = load ptr, ptr %79, align 8, !tbaa !9
  %533 = load i32, ptr %72, align 4, !tbaa !5
  %534 = add nsw i32 %533, 1
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds ptr, ptr %532, i64 %535
  %537 = load ptr, ptr %536, align 8, !tbaa !9
  %538 = load ptr, ptr %79, align 8, !tbaa !9
  %539 = load i32, ptr %72, align 4, !tbaa !5
  %540 = add nsw i32 %539, 1
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds ptr, ptr %538, i64 %541
  %543 = load ptr, ptr %542, align 8, !tbaa !9
  %544 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %531, ptr noundef %537, ptr noundef %543)
  %545 = call double @sqrt(double noundef %544) #9
  %546 = load ptr, ptr %66, align 8, !tbaa !9
  %547 = load i32, ptr %72, align 4, !tbaa !5
  %548 = add nsw i32 %547, 1
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds ptr, ptr %546, i64 %549
  %551 = load ptr, ptr %550, align 8, !tbaa !9
  %552 = load i32, ptr %72, align 4, !tbaa !5
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds double, ptr %551, i64 %553
  store double %545, ptr %554, align 8, !tbaa !13
  %555 = load double, ptr %62, align 8, !tbaa !13
  %556 = load double, ptr %64, align 8, !tbaa !13
  %557 = load ptr, ptr %66, align 8, !tbaa !9
  %558 = load i32, ptr %72, align 4, !tbaa !5
  %559 = add nsw i32 %558, 1
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds ptr, ptr %557, i64 %560
  %562 = load ptr, ptr %561, align 8, !tbaa !9
  %563 = load i32, ptr %72, align 4, !tbaa !5
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds double, ptr %562, i64 %564
  %566 = load double, ptr %565, align 8, !tbaa !13
  %567 = call double @llvm.fmuladd.f64(double %556, double %566, double %555)
  %568 = load double, ptr %62, align 8, !tbaa !13
  %569 = fcmp oeq double %567, %568
  br i1 %569, label %570, label %677

570:                                              ; preds = %530
  store i32 0, ptr %71, align 4, !tbaa !5
  br label %571

571:                                              ; preds = %649, %570
  %572 = load i32, ptr %71, align 4, !tbaa !5
  %573 = load i32, ptr %72, align 4, !tbaa !5
  %574 = add nsw i32 %573, 1
  %575 = icmp slt i32 %572, %574
  br i1 %575, label %576, label %652

576:                                              ; preds = %571
  %577 = load i32, ptr %32, align 4, !tbaa !5
  %578 = load ptr, ptr %79, align 8, !tbaa !9
  %579 = load i32, ptr %72, align 4, !tbaa !5
  %580 = add nsw i32 %579, 1
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds ptr, ptr %578, i64 %581
  %583 = load ptr, ptr %582, align 8, !tbaa !9
  %584 = load ptr, ptr %79, align 8, !tbaa !9
  %585 = load i32, ptr %71, align 4, !tbaa !5
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds ptr, ptr %584, i64 %586
  %588 = load ptr, ptr %587, align 8, !tbaa !9
  %589 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %577, ptr noundef %583, ptr noundef %588)
  store double %589, ptr %67, align 8, !tbaa !13
  %590 = load ptr, ptr %66, align 8, !tbaa !9
  %591 = load i32, ptr %71, align 4, !tbaa !5
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds ptr, ptr %590, i64 %592
  %594 = load ptr, ptr %593, align 8, !tbaa !9
  %595 = load i32, ptr %72, align 4, !tbaa !5
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds double, ptr %594, i64 %596
  %598 = load double, ptr %597, align 8, !tbaa !13
  %599 = load double, ptr %67, align 8, !tbaa !13
  %600 = fadd double %598, %599
  %601 = load ptr, ptr %66, align 8, !tbaa !9
  %602 = load i32, ptr %71, align 4, !tbaa !5
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds ptr, ptr %601, i64 %603
  %605 = load ptr, ptr %604, align 8, !tbaa !9
  %606 = load i32, ptr %72, align 4, !tbaa !5
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds double, ptr %605, i64 %607
  store double %600, ptr %608, align 8, !tbaa !13
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %609

609:                                              ; preds = %645, %576
  %610 = load i32, ptr %68, align 4, !tbaa !5
  %611 = load i32, ptr %32, align 4, !tbaa !5
  %612 = icmp slt i32 %610, %611
  br i1 %612, label %613, label %648

613:                                              ; preds = %609
  %614 = load ptr, ptr %79, align 8, !tbaa !9
  %615 = load i32, ptr %72, align 4, !tbaa !5
  %616 = add nsw i32 %615, 1
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds ptr, ptr %614, i64 %617
  %619 = load ptr, ptr %618, align 8, !tbaa !9
  %620 = load i32, ptr %68, align 4, !tbaa !5
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds double, ptr %619, i64 %621
  %623 = load double, ptr %622, align 8, !tbaa !13
  %624 = load double, ptr %67, align 8, !tbaa !13
  %625 = load ptr, ptr %79, align 8, !tbaa !9
  %626 = load i32, ptr %71, align 4, !tbaa !5
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds ptr, ptr %625, i64 %627
  %629 = load ptr, ptr %628, align 8, !tbaa !9
  %630 = load i32, ptr %68, align 4, !tbaa !5
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds double, ptr %629, i64 %631
  %633 = load double, ptr %632, align 8, !tbaa !13
  %634 = fneg double %624
  %635 = call double @llvm.fmuladd.f64(double %634, double %633, double %623)
  %636 = load ptr, ptr %79, align 8, !tbaa !9
  %637 = load i32, ptr %72, align 4, !tbaa !5
  %638 = add nsw i32 %637, 1
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds ptr, ptr %636, i64 %639
  %641 = load ptr, ptr %640, align 8, !tbaa !9
  %642 = load i32, ptr %68, align 4, !tbaa !5
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds double, ptr %641, i64 %643
  store double %635, ptr %644, align 8, !tbaa !13
  br label %645

645:                                              ; preds = %613
  %646 = load i32, ptr %68, align 4, !tbaa !5
  %647 = add nsw i32 %646, 1
  store i32 %647, ptr %68, align 4, !tbaa !5
  br label %609, !llvm.loop !23

648:                                              ; preds = %609
  br label %649

649:                                              ; preds = %648
  %650 = load i32, ptr %71, align 4, !tbaa !5
  %651 = add nsw i32 %650, 1
  store i32 %651, ptr %71, align 4, !tbaa !5
  br label %571, !llvm.loop !24

652:                                              ; preds = %571
  %653 = load i32, ptr %32, align 4, !tbaa !5
  %654 = load ptr, ptr %79, align 8, !tbaa !9
  %655 = load i32, ptr %72, align 4, !tbaa !5
  %656 = add nsw i32 %655, 1
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds ptr, ptr %654, i64 %657
  %659 = load ptr, ptr %658, align 8, !tbaa !9
  %660 = load ptr, ptr %79, align 8, !tbaa !9
  %661 = load i32, ptr %72, align 4, !tbaa !5
  %662 = add nsw i32 %661, 1
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds ptr, ptr %660, i64 %663
  %665 = load ptr, ptr %664, align 8, !tbaa !9
  %666 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %653, ptr noundef %659, ptr noundef %665)
  %667 = call double @sqrt(double noundef %666) #9
  %668 = load ptr, ptr %66, align 8, !tbaa !9
  %669 = load i32, ptr %72, align 4, !tbaa !5
  %670 = add nsw i32 %669, 1
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds ptr, ptr %668, i64 %671
  %673 = load ptr, ptr %672, align 8, !tbaa !9
  %674 = load i32, ptr %72, align 4, !tbaa !5
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds double, ptr %673, i64 %675
  store double %667, ptr %676, align 8, !tbaa !13
  br label %677

677:                                              ; preds = %652, %530
  %678 = load ptr, ptr %66, align 8, !tbaa !9
  %679 = load i32, ptr %72, align 4, !tbaa !5
  %680 = add nsw i32 %679, 1
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds ptr, ptr %678, i64 %681
  %683 = load ptr, ptr %682, align 8, !tbaa !9
  %684 = load i32, ptr %72, align 4, !tbaa !5
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds double, ptr %683, i64 %685
  %687 = load double, ptr %686, align 8, !tbaa !13
  %688 = fcmp une double %687, 0.000000e+00
  br i1 %688, label %689, label %729

689:                                              ; preds = %677
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %690

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

694:                                              ; preds = %690
  %695 = load ptr, ptr %79, align 8, !tbaa !9
  %696 = load i32, ptr %72, align 4, !tbaa !5
  %697 = add nsw i32 %696, 1
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds ptr, ptr %695, i64 %698
  %700 = load ptr, ptr %699, align 8, !tbaa !9
  %701 = load i32, ptr %68, align 4, !tbaa !5
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds double, ptr %700, i64 %702
  %704 = load double, ptr %703, align 8, !tbaa !13
  %705 = load ptr, ptr %66, align 8, !tbaa !9
  %706 = load i32, ptr %72, align 4, !tbaa !5
  %707 = add nsw i32 %706, 1
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds ptr, ptr %705, i64 %708
  %710 = load ptr, ptr %709, align 8, !tbaa !9
  %711 = load i32, ptr %72, align 4, !tbaa !5
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds double, ptr %710, i64 %712
  %714 = load double, ptr %713, align 8, !tbaa !13
  %715 = fdiv double %704, %714
  %716 = load ptr, ptr %79, align 8, !tbaa !9
  %717 = load i32, ptr %72, 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 %68, 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 = %694
  %726 = load i32, ptr %68, align 4, !tbaa !5
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %68, align 4, !tbaa !5
  br label %690, !llvm.loop !25

728:                                              ; preds = %690
  br label %729

729:                                              ; preds = %728, %677
  %730 = load i32, ptr %72, align 4, !tbaa !5
  %731 = icmp slt i32 0, %730
  br i1 %731, label %732, label %800

732:                                              ; preds = %729
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %733

733:                                              ; preds = %752, %732
  %734 = load i32, ptr %68, align 4, !tbaa !5
  %735 = load i32, ptr %72, align 4, !tbaa !5
  %736 = add nsw i32 %735, 2
  %737 = icmp slt i32 %734, %736
  br i1 %737, label %738, label %755

738:                                              ; preds = %733
  %739 = load ptr, ptr %66, align 8, !tbaa !9
  %740 = load i32, ptr %68, align 4, !tbaa !5
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds ptr, ptr %739, i64 %741
  %743 = load ptr, ptr %742, align 8, !tbaa !9
  %744 = load i32, ptr %72, align 4, !tbaa !5
  %745 = sext i32 %744 to i64
  %746 = getelementptr inbounds double, ptr %743, i64 %745
  %747 = load double, ptr %746, align 8, !tbaa !13
  %748 = load ptr, ptr %81, align 8, !tbaa !9
  %749 = load i32, ptr %68, align 4, !tbaa !5
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds double, ptr %748, i64 %750
  store double %747, ptr %751, align 8, !tbaa !13
  br label %752

752:                                              ; preds = %738
  %753 = load i32, ptr %68, align 4, !tbaa !5
  %754 = add nsw i32 %753, 1
  store i32 %754, ptr %68, align 4, !tbaa !5
  br label %733, !llvm.loop !26

755:                                              ; preds = %733
  store i32 0, ptr %71, align 4, !tbaa !5
  br label %756

756:                                              ; preds = %773, %755
  %757 = load i32, ptr %71, align 4, !tbaa !5
  %758 = load i32, ptr %72, align 4, !tbaa !5
  %759 = icmp slt i32 %757, %758
  br i1 %759, label %760, label %776

760:                                              ; preds = %756
  %761 = load ptr, ptr %63, align 8, !tbaa !9
  %762 = load i32, ptr %71, align 4, !tbaa !5
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds double, ptr %761, i64 %763
  %765 = load double, ptr %764, align 8, !tbaa !13
  %766 = load ptr, ptr %78, align 8, !tbaa !9
  %767 = load i32, ptr %71, align 4, !tbaa !5
  %768 = sext i32 %767 to i64
  %769 = getelementptr inbounds double, ptr %766, i64 %768
  %770 = load double, ptr %769, align 8, !tbaa !13
  %771 = load i32, ptr %71, align 4, !tbaa !5
  %772 = load ptr, ptr %81, align 8, !tbaa !9
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %765, double noundef %770, i32 noundef %771, ptr noundef %772)
  br label %773

773:                                              ; preds = %760
  %774 = load i32, ptr %71, align 4, !tbaa !5
  %775 = add nsw i32 %774, 1
  store i32 %775, ptr %71, align 4, !tbaa !5
  br label %756, !llvm.loop !27

776:                                              ; preds = %756
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %777

777:                                              ; preds = %796, %776
  %778 = load i32, ptr %68, align 4, !tbaa !5
  %779 = load i32, ptr %72, align 4, !tbaa !5
  %780 = add nsw i32 %779, 2
  %781 = icmp slt i32 %778, %780
  br i1 %781, label %782, label %799

782:                                              ; preds = %777
  %783 = load ptr, ptr %81, align 8, !tbaa !9
  %784 = load i32, ptr %68, align 4, !tbaa !5
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds double, ptr %783, i64 %785
  %787 = load double, ptr %786, align 8, !tbaa !13
  %788 = load ptr, ptr %66, align 8, !tbaa !9
  %789 = load i32, ptr %68, align 4, !tbaa !5
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds ptr, ptr %788, i64 %790
  %792 = load ptr, ptr %791, align 8, !tbaa !9
  %793 = load i32, ptr %72, align 4, !tbaa !5
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds double, ptr %792, i64 %794
  store double %787, ptr %795, align 8, !tbaa !13
  br label %796

796:                                              ; preds = %782
  %797 = load i32, ptr %68, align 4, !tbaa !5
  %798 = add nsw i32 %797, 1
  store i32 %798, ptr %68, align 4, !tbaa !5
  br label %777, !llvm.loop !28

799:                                              ; preds = %777
  br label %800

800:                                              ; preds = %799, %729
  %801 = load ptr, ptr %66, align 8, !tbaa !9
  %802 = load i32, ptr %72, align 4, !tbaa !5
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds ptr, ptr %801, i64 %803
  %805 = load ptr, ptr %804, align 8, !tbaa !9
  %806 = load i32, ptr %72, align 4, !tbaa !5
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds double, ptr %805, i64 %807
  %809 = load double, ptr %808, align 8, !tbaa !13
  %810 = load ptr, ptr %66, align 8, !tbaa !9
  %811 = load i32, ptr %72, align 4, !tbaa !5
  %812 = sext i32 %811 to i64
  %813 = getelementptr inbounds ptr, ptr %810, i64 %812
  %814 = load ptr, ptr %813, align 8, !tbaa !9
  %815 = load i32, ptr %72, align 4, !tbaa !5
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds double, ptr %814, i64 %816
  %818 = load double, ptr %817, align 8, !tbaa !13
  %819 = load ptr, ptr %66, align 8, !tbaa !9
  %820 = load i32, ptr %72, align 4, !tbaa !5
  %821 = add nsw i32 %820, 1
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds ptr, ptr %819, i64 %822
  %824 = load ptr, ptr %823, align 8, !tbaa !9
  %825 = load i32, ptr %72, align 4, !tbaa !5
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds double, ptr %824, i64 %826
  %828 = load double, ptr %827, align 8, !tbaa !13
  %829 = load ptr, ptr %66, align 8, !tbaa !9
  %830 = load i32, ptr %72, align 4, !tbaa !5
  %831 = add nsw i32 %830, 1
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds ptr, ptr %829, i64 %832
  %834 = load ptr, ptr %833, align 8, !tbaa !9
  %835 = load i32, ptr %72, align 4, !tbaa !5
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds double, ptr %834, i64 %836
  %838 = load double, ptr %837, align 8, !tbaa !13
  %839 = fmul double %828, %838
  %840 = call double @llvm.fmuladd.f64(double %809, double %818, double %839)
  %841 = call double @sqrt(double noundef %840) #9
  store double %841, ptr %74, align 8, !tbaa !13
  %842 = load double, ptr %74, align 8, !tbaa !13
  %843 = fcmp oeq double %842, 0.000000e+00
  br i1 %843, label %844, label %856

844:                                              ; preds = %800
  %845 = load ptr, ptr %61, align 8, !tbaa !9
  %846 = load ptr, ptr %63, align 8, !tbaa !9
  %847 = load ptr, ptr %65, align 8, !tbaa !9
  %848 = load ptr, ptr %66, align 8, !tbaa !9
  %849 = load i32, ptr %49, align 4, !tbaa !5
  %850 = load ptr, ptr %75, align 8, !tbaa !9
  %851 = load ptr, ptr %78, align 8, !tbaa !9
  %852 = load ptr, ptr %79, align 8, !tbaa !9
  %853 = load i32, ptr %32, align 4, !tbaa !5
  %854 = load ptr, ptr %81, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %845, ptr noundef %846, ptr noundef %847, ptr noundef %848, i32 noundef %849, ptr noundef %850, ptr noundef %851, ptr noundef %852, i32 noundef %853, ptr noundef %854)
  %855 = load i32, ptr %70, align 4, !tbaa !5
  store i32 %855, ptr %31, align 4
  store i32 1, ptr %85, align 4
  br label %1157

856:                                              ; preds = %800
  %857 = load ptr, ptr %66, align 8, !tbaa !9
  %858 = load i32, ptr %72, align 4, !tbaa !5
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds ptr, ptr %857, i64 %859
  %861 = load ptr, ptr %860, align 8, !tbaa !9
  %862 = load i32, ptr %72, align 4, !tbaa !5
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds double, ptr %861, i64 %863
  %865 = load double, ptr %864, align 8, !tbaa !13
  %866 = load double, ptr %74, align 8, !tbaa !13
  %867 = fdiv double %865, %866
  %868 = load ptr, ptr %63, align 8, !tbaa !9
  %869 = load i32, ptr %72, align 4, !tbaa !5
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds double, ptr %868, i64 %870
  store double %867, ptr %871, align 8, !tbaa !13
  %872 = load ptr, ptr %66, align 8, !tbaa !9
  %873 = load i32, ptr %72, align 4, !tbaa !5
  %874 = add nsw i32 %873, 1
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds ptr, ptr %872, i64 %875
  %877 = load ptr, ptr %876, align 8, !tbaa !9
  %878 = load i32, ptr %72, align 4, !tbaa !5
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds double, ptr %877, i64 %879
  %881 = load double, ptr %880, align 8, !tbaa !13
  %882 = fneg double %881
  %883 = load double, ptr %74, align 8, !tbaa !13
  %884 = fdiv double %882, %883
  %885 = load ptr, ptr %78, align 8, !tbaa !9
  %886 = load i32, ptr %72, align 4, !tbaa !5
  %887 = sext i32 %886 to i64
  %888 = getelementptr inbounds double, ptr %885, i64 %887
  store double %884, ptr %888, align 8, !tbaa !13
  %889 = load ptr, ptr %63, align 8, !tbaa !9
  %890 = load i32, ptr %72, align 4, !tbaa !5
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds double, ptr %889, i64 %891
  %893 = load double, ptr %892, align 8, !tbaa !13
  %894 = load ptr, ptr %66, align 8, !tbaa !9
  %895 = load i32, ptr %72, align 4, !tbaa !5
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds ptr, ptr %894, i64 %896
  %898 = load ptr, ptr %897, align 8, !tbaa !9
  %899 = load i32, ptr %72, align 4, !tbaa !5
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds double, ptr %898, i64 %900
  %902 = load double, ptr %901, align 8, !tbaa !13
  %903 = load ptr, ptr %78, align 8, !tbaa !9
  %904 = load i32, ptr %72, align 4, !tbaa !5
  %905 = sext i32 %904 to i64
  %906 = getelementptr inbounds double, ptr %903, i64 %905
  %907 = load double, ptr %906, align 8, !tbaa !13
  %908 = load ptr, ptr %66, align 8, !tbaa !9
  %909 = load i32, ptr %72, align 4, !tbaa !5
  %910 = add nsw i32 %909, 1
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds ptr, ptr %908, i64 %911
  %913 = load ptr, ptr %912, align 8, !tbaa !9
  %914 = load i32, ptr %72, align 4, !tbaa !5
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds double, ptr %913, i64 %915
  %917 = load double, ptr %916, align 8, !tbaa !13
  %918 = fmul double %907, %917
  %919 = fneg double %918
  %920 = call double @llvm.fmuladd.f64(double %893, double %902, double %919)
  %921 = load ptr, ptr %66, align 8, !tbaa !9
  %922 = load i32, ptr %72, align 4, !tbaa !5
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds ptr, ptr %921, i64 %923
  %925 = load ptr, ptr %924, align 8, !tbaa !9
  %926 = load i32, ptr %72, align 4, !tbaa !5
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds double, ptr %925, i64 %927
  store double %920, ptr %928, align 8, !tbaa !13
  %929 = load ptr, ptr %66, align 8, !tbaa !9
  %930 = load i32, ptr %72, align 4, !tbaa !5
  %931 = add nsw i32 %930, 1
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds ptr, ptr %929, i64 %932
  %934 = load ptr, ptr %933, align 8, !tbaa !9
  %935 = load i32, ptr %72, align 4, !tbaa !5
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds double, ptr %934, i64 %936
  store double 0.000000e+00, ptr %937, align 8, !tbaa !13
  %938 = load ptr, ptr %63, align 8, !tbaa !9
  %939 = load i32, ptr %72, align 4, !tbaa !5
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds double, ptr %938, i64 %940
  %942 = load double, ptr %941, align 8, !tbaa !13
  %943 = load ptr, ptr %78, align 8, !tbaa !9
  %944 = load i32, ptr %72, align 4, !tbaa !5
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds double, ptr %943, i64 %945
  %947 = load double, ptr %946, align 8, !tbaa !13
  %948 = load i32, ptr %72, align 4, !tbaa !5
  %949 = load ptr, ptr %65, align 8, !tbaa !9
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %942, double noundef %947, i32 noundef %948, ptr noundef %949)
  %950 = load ptr, ptr %65, align 8, !tbaa !9
  %951 = load i32, ptr %72, align 4, !tbaa !5
  %952 = add nsw i32 %951, 1
  %953 = sext i32 %952 to i64
  %954 = getelementptr inbounds double, ptr %950, i64 %953
  %955 = load double, ptr %954, align 8, !tbaa !13
  %956 = call double @llvm.fabs.f64(double %955)
  store double %956, ptr %76, align 8, !tbaa !13
  %957 = load i32, ptr %70, align 4, !tbaa !5
  %958 = add nsw i32 %957, 1
  store i32 %958, ptr %70, align 4, !tbaa !5
  %959 = load double, ptr %76, align 8, !tbaa !13
  %960 = load double, ptr %77, align 8, !tbaa !13
  %961 = fcmp ole double %959, %960
  br i1 %961, label %962, label %967

962:                                              ; preds = %856
  %963 = load double, ptr %76, align 8, !tbaa !13
  %964 = load double, ptr %50, align 8, !tbaa !13
  %965 = fcmp ole double %963, %964
  br i1 %965, label %966, label %967

966:                                              ; preds = %962
  br label %971

967:                                              ; preds = %962, %856
  br label %968

968:                                              ; preds = %967
  %969 = load i32, ptr %72, align 4, !tbaa !5
  %970 = add nsw i32 %969, 1
  store i32 %970, ptr %72, align 4, !tbaa !5
  br label %320, !llvm.loop !29

971:                                              ; preds = %966, %320
  %972 = load i32, ptr %73, align 4, !tbaa !5
  store i32 %972, ptr %72, align 4, !tbaa !5
  %973 = load ptr, ptr %66, align 8, !tbaa !9
  %974 = load i32, ptr %72, align 4, !tbaa !5
  %975 = sext i32 %974 to i64
  %976 = getelementptr inbounds ptr, ptr %973, i64 %975
  %977 = load ptr, ptr %976, align 8, !tbaa !9
  %978 = load i32, ptr %72, align 4, !tbaa !5
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds double, ptr %977, i64 %979
  %981 = load double, ptr %980, align 8, !tbaa !13
  %982 = fcmp oeq double %981, 0.000000e+00
  br i1 %982, label %983, label %995

983:                                              ; preds = %971
  %984 = load ptr, ptr %61, align 8, !tbaa !9
  %985 = load ptr, ptr %63, align 8, !tbaa !9
  %986 = load ptr, ptr %65, align 8, !tbaa !9
  %987 = load ptr, ptr %66, align 8, !tbaa !9
  %988 = load i32, ptr %49, align 4, !tbaa !5
  %989 = load ptr, ptr %75, align 8, !tbaa !9
  %990 = load ptr, ptr %78, align 8, !tbaa !9
  %991 = load ptr, ptr %79, align 8, !tbaa !9
  %992 = load i32, ptr %32, align 4, !tbaa !5
  %993 = load ptr, ptr %81, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %984, ptr noundef %985, ptr noundef %986, ptr noundef %987, i32 noundef %988, ptr noundef %989, ptr noundef %990, ptr noundef %991, i32 noundef %992, ptr noundef %993)
  %994 = load i32, ptr %70, align 4, !tbaa !5
  store i32 %994, ptr %31, align 4
  store i32 1, ptr %85, align 4
  br label %1157

995:                                              ; preds = %971
  %996 = load ptr, ptr %65, align 8, !tbaa !9
  %997 = load i32, ptr %72, align 4, !tbaa !5
  %998 = sext i32 %997 to i64
  %999 = getelementptr inbounds double, ptr %996, i64 %998
  %1000 = load double, ptr %999, align 8, !tbaa !13
  %1001 = load ptr, ptr %66, align 8, !tbaa !9
  %1002 = load i32, ptr %72, align 4, !tbaa !5
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds ptr, ptr %1001, i64 %1003
  %1005 = load ptr, ptr %1004, align 8, !tbaa !9
  %1006 = load i32, ptr %72, align 4, !tbaa !5
  %1007 = sext i32 %1006 to i64
  %1008 = getelementptr inbounds double, ptr %1005, i64 %1007
  %1009 = load double, ptr %1008, align 8, !tbaa !13
  %1010 = fdiv double %1000, %1009
  %1011 = load ptr, ptr %81, align 8, !tbaa !9
  %1012 = load i32, ptr %72, align 4, !tbaa !5
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds double, ptr %1011, i64 %1013
  store double %1010, ptr %1014, align 8, !tbaa !13
  %1015 = load i32, ptr %72, align 4, !tbaa !5
  %1016 = sub nsw i32 %1015, 1
  store i32 %1016, ptr %68, align 4, !tbaa !5
  br label %1017

1017:                                             ; preds = %1086, %995
  %1018 = load i32, ptr %68, align 4, !tbaa !5
  %1019 = icmp sle i32 0, %1018
  br i1 %1019, label %1020, label %1089

1020:                                             ; preds = %1017
  %1021 = load ptr, ptr %65, align 8, !tbaa !9
  %1022 = load i32, ptr %68, align 4, !tbaa !5
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds double, ptr %1021, i64 %1023
  %1025 = load double, ptr %1024, align 8, !tbaa !13
  %1026 = load ptr, ptr %81, align 8, !tbaa !9
  %1027 = load i32, ptr %68, align 4, !tbaa !5
  %1028 = sext i32 %1027 to i64
  %1029 = getelementptr inbounds double, ptr %1026, i64 %1028
  store double %1025, ptr %1029, align 8, !tbaa !13
  %1030 = load i32, ptr %68, align 4, !tbaa !5
  %1031 = add nsw i32 %1030, 1
  store i32 %1031, ptr %71, align 4, !tbaa !5
  br label %1032

1032:                                             ; preds = %1063, %1020
  %1033 = load i32, ptr %71, align 4, !tbaa !5
  %1034 = load i32, ptr %72, align 4, !tbaa !5
  %1035 = add nsw i32 %1034, 1
  %1036 = icmp slt i32 %1033, %1035
  br i1 %1036, label %1037, label %1066

1037:                                             ; preds = %1032
  %1038 = load ptr, ptr %81, align 8, !tbaa !9
  %1039 = load i32, ptr %68, align 4, !tbaa !5
  %1040 = sext i32 %1039 to i64
  %1041 = getelementptr inbounds double, ptr %1038, i64 %1040
  %1042 = load double, ptr %1041, align 8, !tbaa !13
  %1043 = load ptr, ptr %66, align 8, !tbaa !9
  %1044 = load i32, ptr %68, align 4, !tbaa !5
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds ptr, ptr %1043, i64 %1045
  %1047 = load ptr, ptr %1046, align 8, !tbaa !9
  %1048 = load i32, ptr %71, align 4, !tbaa !5
  %1049 = sext i32 %1048 to i64
  %1050 = getelementptr inbounds double, ptr %1047, i64 %1049
  %1051 = load double, ptr %1050, align 8, !tbaa !13
  %1052 = load ptr, ptr %81, align 8, !tbaa !9
  %1053 = load i32, ptr %71, align 4, !tbaa !5
  %1054 = sext i32 %1053 to i64
  %1055 = getelementptr inbounds double, ptr %1052, i64 %1054
  %1056 = load double, ptr %1055, align 8, !tbaa !13
  %1057 = fneg double %1051
  %1058 = call double @llvm.fmuladd.f64(double %1057, double %1056, double %1042)
  %1059 = load ptr, ptr %81, align 8, !tbaa !9
  %1060 = load i32, ptr %68, align 4, !tbaa !5
  %1061 = sext i32 %1060 to i64
  %1062 = getelementptr inbounds double, ptr %1059, i64 %1061
  store double %1058, ptr %1062, align 8, !tbaa !13
  br label %1063

1063:                                             ; preds = %1037
  %1064 = load i32, ptr %71, align 4, !tbaa !5
  %1065 = add nsw i32 %1064, 1
  store i32 %1065, ptr %71, align 4, !tbaa !5
  br label %1032, !llvm.loop !30

1066:                                             ; preds = %1032
  %1067 = load ptr, ptr %81, align 8, !tbaa !9
  %1068 = load i32, ptr %68, align 4, !tbaa !5
  %1069 = sext i32 %1068 to i64
  %1070 = getelementptr inbounds double, ptr %1067, i64 %1069
  %1071 = load double, ptr %1070, align 8, !tbaa !13
  %1072 = load ptr, ptr %66, align 8, !tbaa !9
  %1073 = load i32, ptr %68, align 4, !tbaa !5
  %1074 = sext i32 %1073 to i64
  %1075 = getelementptr inbounds ptr, ptr %1072, i64 %1074
  %1076 = load ptr, ptr %1075, align 8, !tbaa !9
  %1077 = load i32, ptr %68, align 4, !tbaa !5
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds double, ptr %1076, i64 %1078
  %1080 = load double, ptr %1079, align 8, !tbaa !13
  %1081 = fdiv double %1071, %1080
  %1082 = load ptr, ptr %81, align 8, !tbaa !9
  %1083 = load i32, ptr %68, align 4, !tbaa !5
  %1084 = sext i32 %1083 to i64
  %1085 = getelementptr inbounds double, ptr %1082, i64 %1084
  store double %1081, ptr %1085, align 8, !tbaa !13
  br label %1086

1086:                                             ; preds = %1066
  %1087 = load i32, ptr %68, align 4, !tbaa !5
  %1088 = add nsw i32 %1087, -1
  store i32 %1088, ptr %68, align 4, !tbaa !5
  br label %1017, !llvm.loop !31

1089:                                             ; preds = %1017
  store i32 0, ptr %68, align 4, !tbaa !5
  br label %1090

1090:                                             ; preds = %1129, %1089
  %1091 = load i32, ptr %68, align 4, !tbaa !5
  %1092 = load i32, ptr %32, align 4, !tbaa !5
  %1093 = icmp slt i32 %1091, %1092
  br i1 %1093, label %1094, label %1132

1094:                                             ; preds = %1090
  store i32 0, ptr %71, align 4, !tbaa !5
  br label %1095

1095:                                             ; preds = %1125, %1094
  %1096 = load i32, ptr %71, align 4, !tbaa !5
  %1097 = load i32, ptr %72, align 4, !tbaa !5
  %1098 = add nsw i32 %1097, 1
  %1099 = icmp slt i32 %1096, %1098
  br i1 %1099, label %1100, label %1128

1100:                                             ; preds = %1095
  %1101 = load ptr, ptr %46, align 8, !tbaa !9
  %1102 = load i32, ptr %68, 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 %79, align 8, !tbaa !9
  %1107 = load i32, ptr %71, align 4, !tbaa !5
  %1108 = sext i32 %1107 to i64
  %1109 = getelementptr inbounds ptr, ptr %1106, i64 %1108
  %1110 = load ptr, ptr %1109, align 8, !tbaa !9
  %1111 = load i32, ptr %68, align 4, !tbaa !5
  %1112 = sext i32 %1111 to i64
  %1113 = getelementptr inbounds double, ptr %1110, i64 %1112
  %1114 = load double, ptr %1113, align 8, !tbaa !13
  %1115 = load ptr, ptr %81, align 8, !tbaa !9
  %1116 = load i32, ptr %71, align 4, !tbaa !5
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds double, ptr %1115, i64 %1117
  %1119 = load double, ptr %1118, align 8, !tbaa !13
  %1120 = call double @llvm.fmuladd.f64(double %1114, double %1119, double %1105)
  %1121 = load ptr, ptr %46, align 8, !tbaa !9
  %1122 = load i32, ptr %68, align 4, !tbaa !5
  %1123 = sext i32 %1122 to i64
  %1124 = getelementptr inbounds double, ptr %1121, i64 %1123
  store double %1120, ptr %1124, align 8, !tbaa !13
  br label %1125

1125:                                             ; preds = %1100
  %1126 = load i32, ptr %71, align 4, !tbaa !5
  %1127 = add nsw i32 %1126, 1
  store i32 %1127, ptr %71, align 4, !tbaa !5
  br label %1095, !llvm.loop !32

1128:                                             ; preds = %1095
  br label %1129

1129:                                             ; preds = %1128
  %1130 = load i32, ptr %68, align 4, !tbaa !5
  %1131 = add nsw i32 %1130, 1
  store i32 %1131, ptr %68, align 4, !tbaa !5
  br label %1090, !llvm.loop !33

1132:                                             ; preds = %1090
  %1133 = load double, ptr %76, align 8, !tbaa !13
  %1134 = load double, ptr %77, align 8, !tbaa !13
  %1135 = fcmp ole double %1133, %1134
  br i1 %1135, label %1136, label %1141

1136:                                             ; preds = %1132
  %1137 = load double, ptr %76, align 8, !tbaa !13
  %1138 = load double, ptr %50, align 8, !tbaa !13
  %1139 = fcmp ole double %1137, %1138
  br i1 %1139, label %1140, label %1141

1140:                                             ; preds = %1136
  br label %1145

1141:                                             ; preds = %1136, %1132
  br label %1142

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

1145:                                             ; preds = %1140, %118
  %1146 = load ptr, ptr %61, align 8, !tbaa !9
  %1147 = load ptr, ptr %63, align 8, !tbaa !9
  %1148 = load ptr, ptr %65, align 8, !tbaa !9
  %1149 = load ptr, ptr %66, align 8, !tbaa !9
  %1150 = load i32, ptr %49, align 4, !tbaa !5
  %1151 = load ptr, ptr %75, align 8, !tbaa !9
  %1152 = load ptr, ptr %78, align 8, !tbaa !9
  %1153 = load ptr, ptr %79, align 8, !tbaa !9
  %1154 = load i32, ptr %32, align 4, !tbaa !5
  %1155 = load ptr, ptr %81, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %1146, ptr noundef %1147, ptr noundef %1148, ptr noundef %1149, i32 noundef %1150, ptr noundef %1151, ptr noundef %1152, ptr noundef %1153, i32 noundef %1154, ptr noundef %1155)
  %1156 = load i32, ptr %70, align 4, !tbaa !5
  store i32 %1156, ptr %31, align 4
  store i32 1, ptr %85, align 4
  br label %1157

1157:                                             ; preds = %1145, %983, %844, %234
  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 4, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 4, 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 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, 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
  %1158 = load i32, ptr %31, align 4
  ret i32 %1158
}

declare void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

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 = { 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "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 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 #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}


; 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._ZN5nasoq17pmgmres_ldlt_autoEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_iS1_.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 @_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 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 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) #4

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

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 #6

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 #6

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 #6

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5nasoq17pmgmres_ldlt_autoEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_iS1_(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, ptr noundef %29) local_unnamed_addr #8 {
  %31 = alloca [2 x double], align 16
  %32 = alloca [2 x double], align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %31, ptr noundef nonnull align 16 dereferenceable(16) @__const._ZN5nasoq17pmgmres_ldlt_autoEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddiiiS0_S0_iS0_S0_iS1_.alp, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %32, i8 0, i64 16, i1 false)
  %33 = add i32 %17, 1
  %34 = sext i32 %33 to i64
  %35 = shl nsw i64 %34, 3
  %36 = tail call noalias ptr @malloc(i64 noundef %35) #11
  %37 = tail call noalias ptr @malloc(i64 noundef %35) #11
  %38 = add nsw i32 %17, -1
  %39 = tail call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %38)
  %40 = sext i32 %0 to i64
  %41 = shl nsw i64 %40, 3
  %42 = tail call noalias ptr @malloc(i64 noundef %41) #11
  %43 = tail call noalias ptr @malloc(i64 noundef %35) #11
  %44 = add nsw i32 %0, -1
  %45 = tail call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %44)
  %46 = tail call noalias ptr @malloc(i64 noundef %35) #11
  %47 = icmp sgt i32 %16, 0
  br i1 %47, label %.lr.ph571, label %._crit_edge572

.lr.ph571:                                        ; preds = %30
  %48 = ptrtoint ptr %42 to i64
  %.not = icmp eq i32 %20, 0
  %49 = icmp slt i32 %0, 1
  %50 = icmp eq i32 %21, 2
  %51 = icmp eq i32 %21, 1
  %52 = sext i32 %12 to i64
  %53 = trunc i64 %8 to i32
  %.not484511 = icmp slt i32 %17, 1
  %54 = icmp sgt i32 %17, 0
  %invariant.gep = getelementptr inbounds i8, ptr %45, i64 8
  %55 = icmp slt i32 %0, 1
  %scevgep = getelementptr i8, ptr %37, i64 8
  %56 = zext i32 %17 to i64
  %57 = shl nuw nsw i64 %56, 3
  %58 = sext i32 %17 to i64
  %wide.trip.count = zext i32 %0 to i64
  %wide.trip.count592 = zext nneg i32 %0 to i64
  %wide.trip.count603 = zext i32 %33 to i64
  %wide.trip.count608 = zext nneg i32 %0 to i64
  %wide.trip.count620 = zext nneg i32 %0 to i64
  %wide.trip.count630 = zext nneg i32 %0 to i64
  %wide.trip.count674 = zext nneg i32 %0 to i64
  %59 = shl nuw nsw i64 %wide.trip.count, 3
  %60 = shl nuw nsw i64 %wide.trip.count, 3
  %61 = shl nuw nsw i64 %wide.trip.count, 3
  %min.iters.check771 = icmp ult i32 %0, 4
  %n.vec774 = and i64 %wide.trip.count, 2147483644
  %cmp.n783 = icmp eq i64 %n.vec774, %wide.trip.count
  %min.iters.check757 = icmp eq i32 %0, 1
  %n.vec760 = and i64 %wide.trip.count, 2147483646
  %cmp.n768 = icmp eq i64 %n.vec760, %wide.trip.count
  %xtraiter795 = and i64 %wide.trip.count603, 7
  %62 = icmp ult i32 %33, 8
  %unroll_iter = and i64 %wide.trip.count603, 4294967288
  %lcmp.mod796.not = icmp eq i64 %xtraiter795, 0
  %min.iters.check737 = icmp ult i32 %0, 4
  %n.vec740 = and i64 %wide.trip.count, 2147483644
  %cmp.n753 = icmp eq i64 %n.vec740, %wide.trip.count
  %xtraiter797 = and i64 %wide.trip.count, 1
  %lcmp.mod798.not = icmp eq i64 %xtraiter797, 0
  %63 = add nsw i64 %wide.trip.count, -1
  %min.iters.check710 = icmp ult i32 %0, 4
  %n.vec713 = and i64 %wide.trip.count, 2147483644
  %cmp.n724 = icmp eq i64 %n.vec713, %wide.trip.count
  %xtraiter800 = and i64 %wide.trip.count, 1
  %lcmp.mod801.not = icmp eq i64 %xtraiter800, 0
  %64 = add nsw i64 %wide.trip.count, -1
  %min.iters.check = icmp ult i32 %0, 2
  %n.vec = and i64 %wide.trip.count, 2147483646
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br label %65

65:                                               ; preds = %._crit_edge565, %.lr.ph571
  %.0454569 = phi i32 [ 0, %.lr.ph571 ], [ %431, %._crit_edge565 ]
  %.0455568 = phi i32 [ 0, %.lr.ph571 ], [ %.2457, %._crit_edge565 ]
  %.0465567 = phi double [ undef, %.lr.ph571 ], [ %.1466, %._crit_edge565 ]
  %.0470566 = phi i32 [ undef, %.lr.ph571 ], [ %.2472, %._crit_edge565 ]
  br i1 %.not, label %66, label %67

66:                                               ; preds = %65
  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 %42)
  br label %68

67:                                               ; preds = %65
  call void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef -1, ptr noundef nonnull %31, ptr noundef nonnull %32, i32 noundef 1, ptr noundef %14, ptr noundef %42)
  br label %68

68:                                               ; preds = %67, %66
  br i1 %49, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %68
  br i1 %min.iters.check771, label %.lr.ph.preheader786, label %vector.body776

vector.body776:                                   ; preds = %.lr.ph.preheader, %vector.body776
  %index777 = phi i64 [ %index.next782, %vector.body776 ], [ 0, %.lr.ph.preheader ]
  %69 = getelementptr inbounds double, ptr %15, i64 %index777
  %70 = getelementptr inbounds i8, ptr %69, i64 16
  %wide.load778 = load <2 x double>, ptr %69, align 8, !tbaa !5
  %wide.load779 = load <2 x double>, ptr %70, align 8, !tbaa !5
  %71 = getelementptr inbounds double, ptr %42, i64 %index777
  %72 = getelementptr inbounds i8, ptr %71, i64 16
  %wide.load780 = load <2 x double>, ptr %71, align 8, !tbaa !5
  %wide.load781 = load <2 x double>, ptr %72, align 8, !tbaa !5
  %73 = fsub <2 x double> %wide.load778, %wide.load780
  %74 = fsub <2 x double> %wide.load779, %wide.load781
  store <2 x double> %73, ptr %71, align 8, !tbaa !5
  store <2 x double> %74, ptr %72, align 8, !tbaa !5
  %index.next782 = add nuw i64 %index777, 4
  %75 = icmp eq i64 %index.next782, %n.vec774
  br i1 %75, label %middle.block769, label %vector.body776, !llvm.loop !9

middle.block769:                                  ; preds = %vector.body776
  br i1 %cmp.n783, label %._crit_edge, label %.lr.ph.preheader786

.lr.ph.preheader786:                              ; preds = %middle.block769, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec774, %middle.block769 ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader786, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader786 ]
  %76 = getelementptr inbounds double, ptr %15, i64 %indvars.iv
  %77 = load double, ptr %76, align 8, !tbaa !5
  %78 = getelementptr inbounds double, ptr %42, i64 %indvars.iv
  %79 = load double, ptr %78, align 8, !tbaa !5
  %80 = fsub double %77, %79
  store double %80, ptr %78, align 8, !tbaa !5
  %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 !13

._crit_edge:                                      ; preds = %.lr.ph, %middle.block769, %68
  br i1 %50, label %81, label %82

81:                                               ; preds = %._crit_edge
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %40, ptr noundef %13, ptr noundef %42, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %52, i32 noundef %53, i32 noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, ptr noundef %26, ptr noundef %27, i32 noundef %28)
  br label %85

82:                                               ; preds = %._crit_edge
  br i1 %51, label %83, label %84

83:                                               ; preds = %82
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %40, ptr noundef %13, ptr noundef %42, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %52, i32 noundef %53)
  br label %85

84:                                               ; preds = %82
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %40, ptr noundef %13, ptr noundef %42, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %52, i32 noundef %53)
  br label %85

85:                                               ; preds = %83, %84, %81
  %86 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %42, ptr noundef %42)
  %87 = call double @sqrt(double noundef %86) #10
  %88 = fcmp olt double %87, %18
  br i1 %88, label %89, label %90

89:                                               ; preds = %85
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %29, ptr noundef %36, ptr noundef %37, ptr noundef %39, i32 noundef %17, ptr noundef %42, ptr noundef %43, ptr noundef %45, i32 noundef %0, ptr noundef %46)
  br label %432

90:                                               ; preds = %85
  %91 = icmp eq i32 %.0454569, 0
  %92 = fmul double %87, %19
  %.1466 = select i1 %91, double %92, double %.0465567
  br i1 %49, label %._crit_edge510, label %.lr.ph509

.lr.ph509:                                        ; preds = %90
  %93 = load ptr, ptr %45, align 8, !tbaa !14
  %94 = ptrtoint ptr %93 to i64
  %95 = sub i64 %94, %48
  %diff.check = icmp ult i64 %95, 16
  %or.cond785 = select i1 %min.iters.check757, i1 true, i1 %diff.check
  br i1 %or.cond785, label %scalar.ph756.preheader, label %vector.ph758

vector.ph758:                                     ; preds = %.lr.ph509
  %broadcast.splatinsert765 = insertelement <2 x double> poison, double %87, i64 0
  %broadcast.splat766 = shufflevector <2 x double> %broadcast.splatinsert765, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body762

vector.body762:                                   ; preds = %vector.body762, %vector.ph758
  %index763 = phi i64 [ 0, %vector.ph758 ], [ %index.next767, %vector.body762 ]
  %96 = getelementptr inbounds double, ptr %42, i64 %index763
  %wide.load764 = load <2 x double>, ptr %96, align 8, !tbaa !5
  %97 = fdiv <2 x double> %wide.load764, %broadcast.splat766
  %98 = getelementptr inbounds double, ptr %93, i64 %index763
  store <2 x double> %97, ptr %98, align 8, !tbaa !5
  %index.next767 = add nuw i64 %index763, 2
  %99 = icmp eq i64 %index.next767, %n.vec760
  br i1 %99, label %middle.block755, label %vector.body762, !llvm.loop !16

middle.block755:                                  ; preds = %vector.body762
  br i1 %cmp.n768, label %._crit_edge510, label %scalar.ph756.preheader

scalar.ph756.preheader:                           ; preds = %middle.block755, %.lr.ph509
  %indvars.iv589.ph = phi i64 [ 0, %.lr.ph509 ], [ %n.vec760, %middle.block755 ]
  %100 = sub nsw i64 %wide.trip.count, %indvars.iv589.ph
  %xtraiter = and i64 %100, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph756.prol.loopexit, label %scalar.ph756.prol

scalar.ph756.prol:                                ; preds = %scalar.ph756.preheader, %scalar.ph756.prol
  %indvars.iv589.prol = phi i64 [ %indvars.iv.next590.prol, %scalar.ph756.prol ], [ %indvars.iv589.ph, %scalar.ph756.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph756.prol ], [ 0, %scalar.ph756.preheader ]
  %101 = getelementptr inbounds double, ptr %42, i64 %indvars.iv589.prol
  %102 = load double, ptr %101, align 8, !tbaa !5
  %103 = fdiv double %102, %87
  %104 = getelementptr inbounds double, ptr %93, i64 %indvars.iv589.prol
  store double %103, ptr %104, align 8, !tbaa !5
  %indvars.iv.next590.prol = add nuw nsw i64 %indvars.iv589.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.ph756.prol.loopexit, label %scalar.ph756.prol, !llvm.loop !17

scalar.ph756.prol.loopexit:                       ; preds = %scalar.ph756.prol, %scalar.ph756.preheader
  %indvars.iv589.unr = phi i64 [ %indvars.iv589.ph, %scalar.ph756.preheader ], [ %indvars.iv.next590.prol, %scalar.ph756.prol ]
  %105 = sub nsw i64 %indvars.iv589.ph, %wide.trip.count
  %106 = icmp ugt i64 %105, -4
  br i1 %106, label %._crit_edge510, label %scalar.ph756

scalar.ph756:                                     ; preds = %scalar.ph756.prol.loopexit, %scalar.ph756
  %indvars.iv589 = phi i64 [ %indvars.iv.next590.3, %scalar.ph756 ], [ %indvars.iv589.unr, %scalar.ph756.prol.loopexit ]
  %107 = getelementptr inbounds double, ptr %42, i64 %indvars.iv589
  %108 = load double, ptr %107, align 8, !tbaa !5
  %109 = fdiv double %108, %87
  %110 = getelementptr inbounds double, ptr %93, i64 %indvars.iv589
  store double %109, ptr %110, align 8, !tbaa !5
  %indvars.iv.next590 = add nuw nsw i64 %indvars.iv589, 1
  %111 = getelementptr inbounds double, ptr %42, i64 %indvars.iv.next590
  %112 = load double, ptr %111, align 8, !tbaa !5
  %113 = fdiv double %112, %87
  %114 = getelementptr inbounds double, ptr %93, i64 %indvars.iv.next590
  store double %113, ptr %114, align 8, !tbaa !5
  %indvars.iv.next590.1 = add nuw nsw i64 %indvars.iv589, 2
  %115 = getelementptr inbounds double, ptr %42, i64 %indvars.iv.next590.1
  %116 = load double, ptr %115, align 8, !tbaa !5
  %117 = fdiv double %116, %87
  %118 = getelementptr inbounds double, ptr %93, i64 %indvars.iv.next590.1
  store double %117, ptr %118, align 8, !tbaa !5
  %indvars.iv.next590.2 = add nuw nsw i64 %indvars.iv589, 3
  %119 = getelementptr inbounds double, ptr %42, i64 %indvars.iv.next590.2
  %120 = load double, ptr %119, align 8, !tbaa !5
  %121 = fdiv double %120, %87
  %122 = getelementptr inbounds double, ptr %93, i64 %indvars.iv.next590.2
  store double %121, ptr %122, align 8, !tbaa !5
  %indvars.iv.next590.3 = add nuw nsw i64 %indvars.iv589, 4
  %exitcond593.not.3 = icmp eq i64 %indvars.iv.next590.3, %wide.trip.count592
  br i1 %exitcond593.not.3, label %._crit_edge510, label %scalar.ph756, !llvm.loop !19

._crit_edge510:                                   ; preds = %scalar.ph756.prol.loopexit, %scalar.ph756, %middle.block755, %90
  store double %87, ptr %37, align 8, !tbaa !5
  br i1 %.not484511, label %._crit_edge542, label %.preheader498.us.preheader

.preheader498.us.preheader:                       ; preds = %._crit_edge510
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %57, i1 false), !tbaa !5
  br i1 %62, label %.preheader500.unr-lcssa, label %.preheader498.us

.preheader498.us:                                 ; preds = %.preheader498.us.preheader, %.preheader498.us
  %indvars.iv600 = phi i64 [ %indvars.iv.next601.7, %.preheader498.us ], [ 0, %.preheader498.us.preheader ]
  %niter = phi i64 [ %niter.next.7, %.preheader498.us ], [ 0, %.preheader498.us.preheader ]
  %123 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv600
  %124 = load ptr, ptr %123, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %124, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601 = or disjoint i64 %indvars.iv600, 1
  %125 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next601
  %126 = load ptr, ptr %125, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %126, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.1 = or disjoint i64 %indvars.iv600, 2
  %127 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next601.1
  %128 = load ptr, ptr %127, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %128, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.2 = or disjoint i64 %indvars.iv600, 3
  %129 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next601.2
  %130 = load ptr, ptr %129, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %130, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.3 = or disjoint i64 %indvars.iv600, 4
  %131 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next601.3
  %132 = load ptr, ptr %131, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %132, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.4 = or disjoint i64 %indvars.iv600, 5
  %133 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next601.4
  %134 = load ptr, ptr %133, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %134, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.5 = or disjoint i64 %indvars.iv600, 6
  %135 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next601.5
  %136 = load ptr, ptr %135, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %136, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.6 = or disjoint i64 %indvars.iv600, 7
  %137 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next601.6
  %138 = load ptr, ptr %137, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %138, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.7 = add nuw nsw i64 %indvars.iv600, 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 %.preheader500.unr-lcssa, label %.preheader498.us, !llvm.loop !20

.preheader500.unr-lcssa:                          ; preds = %.preheader498.us, %.preheader498.us.preheader
  %indvars.iv600.unr = phi i64 [ 0, %.preheader498.us.preheader ], [ %indvars.iv.next601.7, %.preheader498.us ]
  br i1 %lcmp.mod796.not, label %.preheader500, label %.preheader498.us.epil

.preheader498.us.epil:                            ; preds = %.preheader500.unr-lcssa, %.preheader498.us.epil
  %indvars.iv600.epil = phi i64 [ %indvars.iv.next601.epil, %.preheader498.us.epil ], [ %indvars.iv600.unr, %.preheader500.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.preheader498.us.epil ], [ 0, %.preheader500.unr-lcssa ]
  %139 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv600.epil
  %140 = load ptr, ptr %139, align 8, !tbaa !14
  call void @llvm.memset.p0.i64(ptr align 8 %140, i8 0, i64 %57, i1 false), !tbaa !5
  %indvars.iv.next601.epil = add nuw nsw i64 %indvars.iv600.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter795
  br i1 %epil.iter.cmp.not, label %.preheader500, label %.preheader498.us.epil, !llvm.loop !21

.preheader500:                                    ; preds = %.preheader498.us.epil, %.preheader500.unr-lcssa
  br i1 %54, label %.lr.ph541, label %._crit_edge542

.lr.ph541:                                        ; preds = %.preheader500, %352
  %indvars.iv653 = phi i64 [ %indvars.iv.next654, %352 ], [ 0, %.preheader500 ]
  %indvars.iv651 = phi i64 [ %indvars.iv.next652, %352 ], [ 1, %.preheader500 ]
  %indvars.iv649 = phi i64 [ %indvars.iv.next650, %352 ], [ 2, %.preheader500 ]
  %.1456540 = phi i32 [ %370, %352 ], [ %.0455568, %.preheader500 ]
  %141 = shl nuw nsw i64 %indvars.iv653, 3
  %142 = shl nuw nsw i64 %indvars.iv653, 3
  %143 = add nuw i64 %142, 8
  %144 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv653
  %145 = load ptr, ptr %144, align 8, !tbaa !14
  %146 = getelementptr inbounds i8, ptr %144, i64 8
  %147 = load ptr, ptr %146, align 8, !tbaa !14
  br i1 %.not, label %148, label %149

148:                                              ; preds = %.lr.ph541
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %145, ptr noundef %147)
  br label %150

149:                                              ; preds = %.lr.ph541
  call void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef -1, ptr noundef nonnull %31, ptr noundef nonnull %32, i32 noundef 1, ptr noundef %145, ptr noundef %147)
  br label %150

150:                                              ; preds = %149, %148
  %gep538 = getelementptr inbounds ptr, ptr %invariant.gep, i64 %indvars.iv653
  %151 = load ptr, ptr %gep538, align 8, !tbaa !14
  br i1 %50, label %152, label %153

152:                                              ; preds = %150
  call void @_ZN5nasoq32solve_phase_ldl_blocked_parallelEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_i(i64 noundef %40, ptr noundef %13, ptr noundef %151, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %52, i32 noundef %53, i32 noundef %22, ptr noundef %23, ptr noundef %24, i32 noundef %25, ptr noundef %26, ptr noundef %27, i32 noundef %28)
  br label %156

153:                                              ; preds = %150
  br i1 %51, label %154, label %155

154:                                              ; preds = %153
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %40, ptr noundef %13, ptr noundef %151, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %52, i32 noundef %53)
  br label %156

155:                                              ; preds = %153
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %40, ptr noundef %13, ptr noundef %151, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %52, i32 noundef %53)
  br label %156

156:                                              ; preds = %154, %155, %152
  %indvars.iv.next654 = add nuw nsw i64 %indvars.iv653, 1
  %157 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv.next654
  %158 = load ptr, ptr %157, align 8, !tbaa !14
  %159 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %158, ptr noundef %158)
  %160 = call double @sqrt(double noundef %159) #10
  br label %161

161:                                              ; preds = %156, %._crit_edge523
  %indvars.iv610 = phi i64 [ 0, %156 ], [ %indvars.iv.next611, %._crit_edge523 ]
  %162 = load ptr, ptr %157, align 8, !tbaa !14
  %163 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv610
  %164 = load ptr, ptr %163, align 8, !tbaa !14
  %165 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %162, ptr noundef %164)
  %166 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv610
  %167 = load ptr, ptr %166, align 8, !tbaa !14
  %168 = getelementptr inbounds double, ptr %167, i64 %indvars.iv653
  store double %165, ptr %168, align 8, !tbaa !5
  br i1 %49, label %._crit_edge523, label %.lr.ph522

.lr.ph522:                                        ; preds = %161
  %169 = load ptr, ptr %157, align 8, !tbaa !14
  %170 = load ptr, ptr %163, align 8, !tbaa !14
  br i1 %min.iters.check737, label %scalar.ph736.preheader, label %vector.memcheck725

vector.memcheck725:                               ; preds = %.lr.ph522
  %scevgep726 = getelementptr i8, ptr %169, i64 %61
  %171 = getelementptr i8, ptr %167, i64 %141
  %scevgep727 = getelementptr i8, ptr %171, i64 8
  %scevgep728 = getelementptr i8, ptr %170, i64 %61
  %bound0729 = icmp ult ptr %169, %scevgep727
  %bound1730 = icmp ult ptr %168, %scevgep726
  %found.conflict731 = and i1 %bound0729, %bound1730
  %bound0732 = icmp ult ptr %169, %scevgep728
  %bound1733 = icmp ult ptr %170, %scevgep726
  %found.conflict734 = and i1 %bound0732, %bound1733
  %conflict.rdx = or i1 %found.conflict731, %found.conflict734
  br i1 %conflict.rdx, label %scalar.ph736.preheader, label %vector.ph738

vector.ph738:                                     ; preds = %vector.memcheck725
  %172 = load double, ptr %168, align 8, !tbaa !5, !alias.scope !22
  %broadcast.splatinsert750 = insertelement <2 x double> poison, double %172, i64 0
  %broadcast.splat751 = shufflevector <2 x double> %broadcast.splatinsert750, <2 x double> poison, <2 x i32> zeroinitializer
  %173 = fneg <2 x double> %broadcast.splat751
  %174 = fneg <2 x double> %broadcast.splat751
  br label %vector.body742

vector.body742:                                   ; preds = %vector.body742, %vector.ph738
  %index743 = phi i64 [ 0, %vector.ph738 ], [ %index.next752, %vector.body742 ]
  %175 = getelementptr inbounds double, ptr %169, i64 %index743
  %176 = getelementptr inbounds i8, ptr %175, i64 16
  %wide.load744 = load <2 x double>, ptr %175, align 8, !tbaa !5, !alias.scope !25, !noalias !27
  %wide.load745 = load <2 x double>, ptr %176, align 8, !tbaa !5, !alias.scope !25, !noalias !27
  %177 = getelementptr inbounds double, ptr %170, i64 %index743
  %178 = getelementptr inbounds i8, ptr %177, i64 16
  %wide.load746 = load <2 x double>, ptr %177, align 8, !tbaa !5, !alias.scope !29
  %wide.load747 = load <2 x double>, ptr %178, align 8, !tbaa !5, !alias.scope !29
  %179 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %173, <2 x double> %wide.load746, <2 x double> %wide.load744)
  %180 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %174, <2 x double> %wide.load747, <2 x double> %wide.load745)
  store <2 x double> %179, ptr %175, align 8, !tbaa !5, !alias.scope !25, !noalias !27
  store <2 x double> %180, ptr %176, align 8, !tbaa !5, !alias.scope !25, !noalias !27
  %index.next752 = add nuw i64 %index743, 4
  %181 = icmp eq i64 %index.next752, %n.vec740
  br i1 %181, label %middle.block735, label %vector.body742, !llvm.loop !30

middle.block735:                                  ; preds = %vector.body742
  br i1 %cmp.n753, label %._crit_edge523, label %scalar.ph736.preheader

scalar.ph736.preheader:                           ; preds = %middle.block735, %vector.memcheck725, %.lr.ph522
  %indvars.iv605.ph = phi i64 [ 0, %vector.memcheck725 ], [ 0, %.lr.ph522 ], [ %n.vec740, %middle.block735 ]
  br i1 %lcmp.mod798.not, label %scalar.ph736.prol.loopexit, label %scalar.ph736.prol

scalar.ph736.prol:                                ; preds = %scalar.ph736.preheader
  %182 = getelementptr inbounds double, ptr %169, i64 %indvars.iv605.ph
  %183 = load double, ptr %182, align 8, !tbaa !5
  %184 = load double, ptr %168, align 8, !tbaa !5
  %185 = getelementptr inbounds double, ptr %170, i64 %indvars.iv605.ph
  %186 = load double, ptr %185, align 8, !tbaa !5
  %187 = fneg double %184
  %188 = call double @llvm.fmuladd.f64(double %187, double %186, double %183)
  store double %188, ptr %182, align 8, !tbaa !5
  %indvars.iv.next606.prol = or disjoint i64 %indvars.iv605.ph, 1
  br label %scalar.ph736.prol.loopexit

scalar.ph736.prol.loopexit:                       ; preds = %scalar.ph736.prol, %scalar.ph736.preheader
  %indvars.iv605.unr = phi i64 [ %indvars.iv605.ph, %scalar.ph736.preheader ], [ %indvars.iv.next606.prol, %scalar.ph736.prol ]
  %189 = icmp eq i64 %indvars.iv605.ph, %63
  br i1 %189, label %._crit_edge523, label %scalar.ph736

scalar.ph736:                                     ; preds = %scalar.ph736.prol.loopexit, %scalar.ph736
  %indvars.iv605 = phi i64 [ %indvars.iv.next606.1, %scalar.ph736 ], [ %indvars.iv605.unr, %scalar.ph736.prol.loopexit ]
  %190 = getelementptr inbounds double, ptr %169, i64 %indvars.iv605
  %191 = load double, ptr %190, align 8, !tbaa !5
  %192 = load double, ptr %168, align 8, !tbaa !5
  %193 = getelementptr inbounds double, ptr %170, i64 %indvars.iv605
  %194 = load double, ptr %193, align 8, !tbaa !5
  %195 = fneg double %192
  %196 = call double @llvm.fmuladd.f64(double %195, double %194, double %191)
  store double %196, ptr %190, align 8, !tbaa !5
  %indvars.iv.next606 = add nuw nsw i64 %indvars.iv605, 1
  %197 = getelementptr inbounds double, ptr %169, i64 %indvars.iv.next606
  %198 = load double, ptr %197, align 8, !tbaa !5
  %199 = load double, ptr %168, align 8, !tbaa !5
  %200 = getelementptr inbounds double, ptr %170, i64 %indvars.iv.next606
  %201 = load double, ptr %200, align 8, !tbaa !5
  %202 = fneg double %199
  %203 = call double @llvm.fmuladd.f64(double %202, double %201, double %198)
  store double %203, ptr %197, align 8, !tbaa !5
  %indvars.iv.next606.1 = add nuw nsw i64 %indvars.iv605, 2
  %exitcond609.not.1 = icmp eq i64 %indvars.iv.next606.1, %wide.trip.count608
  br i1 %exitcond609.not.1, label %._crit_edge523, label %scalar.ph736, !llvm.loop !31

._crit_edge523:                                   ; preds = %scalar.ph736.prol.loopexit, %scalar.ph736, %middle.block735, %161
  %indvars.iv.next611 = add nuw nsw i64 %indvars.iv610, 1
  %exitcond616.not = icmp eq i64 %indvars.iv.next611, %indvars.iv651
  br i1 %exitcond616.not, label %204, label %161, !llvm.loop !32

204:                                              ; preds = %._crit_edge523
  %205 = load ptr, ptr %157, align 8, !tbaa !14
  %206 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %205, ptr noundef %205)
  %207 = call double @sqrt(double noundef %206) #10
  %208 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next654
  %209 = load ptr, ptr %208, align 8, !tbaa !14
  %210 = getelementptr inbounds double, ptr %209, i64 %indvars.iv653
  store double %207, ptr %210, align 8, !tbaa !5
  %211 = call double @llvm.fmuladd.f64(double %207, double 1.000000e-03, double %160)
  %212 = fcmp oeq double %211, %160
  br i1 %212, label %.preheader497, label %254

.preheader497:                                    ; preds = %204, %._crit_edge528
  %indvars.iv622 = phi i64 [ %indvars.iv.next623, %._crit_edge528 ], [ 0, %204 ]
  %213 = load ptr, ptr %157, align 8, !tbaa !14
  %214 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv622
  %215 = load ptr, ptr %214, align 8, !tbaa !14
  %216 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %213, ptr noundef %215)
  %217 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv622
  %218 = load ptr, ptr %217, align 8, !tbaa !14
  %219 = getelementptr inbounds double, ptr %218, i64 %indvars.iv653
  %220 = load double, ptr %219, align 8, !tbaa !5
  %221 = fadd double %216, %220
  store double %221, ptr %219, align 8, !tbaa !5
  br i1 %49, label %._crit_edge528, label %.lr.ph527

.lr.ph527:                                        ; preds = %.preheader497
  %222 = load ptr, ptr %157, align 8, !tbaa !14
  %223 = load ptr, ptr %214, align 8, !tbaa !14
  %224 = fneg double %216
  br i1 %min.iters.check710, label %scalar.ph709.preheader, label %vector.memcheck702

vector.memcheck702:                               ; preds = %.lr.ph527
  %scevgep703 = getelementptr i8, ptr %222, i64 %60
  %scevgep704 = getelementptr i8, ptr %223, i64 %60
  %bound0705 = icmp ult ptr %222, %scevgep704
  %bound1706 = icmp ult ptr %223, %scevgep703
  %found.conflict707 = and i1 %bound0705, %bound1706
  br i1 %found.conflict707, label %scalar.ph709.preheader, label %vector.ph711

vector.ph711:                                     ; preds = %vector.memcheck702
  %broadcast.splatinsert721 = insertelement <2 x double> poison, double %224, i64 0
  %broadcast.splat722 = shufflevector <2 x double> %broadcast.splatinsert721, <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.next723, %vector.body715 ]
  %225 = getelementptr inbounds double, ptr %222, i64 %index716
  %226 = getelementptr inbounds i8, ptr %225, i64 16
  %wide.load717 = load <2 x double>, ptr %225, align 8, !tbaa !5, !alias.scope !33, !noalias !36
  %wide.load718 = load <2 x double>, ptr %226, align 8, !tbaa !5, !alias.scope !33, !noalias !36
  %227 = getelementptr inbounds double, ptr %223, i64 %index716
  %228 = getelementptr inbounds i8, ptr %227, i64 16
  %wide.load719 = load <2 x double>, ptr %227, align 8, !tbaa !5, !alias.scope !36
  %wide.load720 = load <2 x double>, ptr %228, align 8, !tbaa !5, !alias.scope !36
  %229 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat722, <2 x double> %wide.load719, <2 x double> %wide.load717)
  %230 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat722, <2 x double> %wide.load720, <2 x double> %wide.load718)
  store <2 x double> %229, ptr %225, align 8, !tbaa !5, !alias.scope !33, !noalias !36
  store <2 x double> %230, ptr %226, align 8, !tbaa !5, !alias.scope !33, !noalias !36
  %index.next723 = add nuw i64 %index716, 4
  %231 = icmp eq i64 %index.next723, %n.vec713
  br i1 %231, label %middle.block708, label %vector.body715, !llvm.loop !38

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

scalar.ph709.preheader:                           ; preds = %middle.block708, %vector.memcheck702, %.lr.ph527
  %indvars.iv617.ph = phi i64 [ 0, %vector.memcheck702 ], [ 0, %.lr.ph527 ], [ %n.vec713, %middle.block708 ]
  br i1 %lcmp.mod801.not, label %scalar.ph709.prol.loopexit, label %scalar.ph709.prol

scalar.ph709.prol:                                ; preds = %scalar.ph709.preheader
  %232 = getelementptr inbounds double, ptr %222, i64 %indvars.iv617.ph
  %233 = load double, ptr %232, align 8, !tbaa !5
  %234 = getelementptr inbounds double, ptr %223, i64 %indvars.iv617.ph
  %235 = load double, ptr %234, align 8, !tbaa !5
  %236 = call double @llvm.fmuladd.f64(double %224, double %235, double %233)
  store double %236, ptr %232, align 8, !tbaa !5
  %indvars.iv.next618.prol = or disjoint i64 %indvars.iv617.ph, 1
  br label %scalar.ph709.prol.loopexit

scalar.ph709.prol.loopexit:                       ; preds = %scalar.ph709.prol, %scalar.ph709.preheader
  %indvars.iv617.unr = phi i64 [ %indvars.iv617.ph, %scalar.ph709.preheader ], [ %indvars.iv.next618.prol, %scalar.ph709.prol ]
  %237 = icmp eq i64 %indvars.iv617.ph, %64
  br i1 %237, label %._crit_edge528, label %scalar.ph709

scalar.ph709:                                     ; preds = %scalar.ph709.prol.loopexit, %scalar.ph709
  %indvars.iv617 = phi i64 [ %indvars.iv.next618.1, %scalar.ph709 ], [ %indvars.iv617.unr, %scalar.ph709.prol.loopexit ]
  %238 = getelementptr inbounds double, ptr %222, i64 %indvars.iv617
  %239 = load double, ptr %238, align 8, !tbaa !5
  %240 = getelementptr inbounds double, ptr %223, i64 %indvars.iv617
  %241 = load double, ptr %240, align 8, !tbaa !5
  %242 = call double @llvm.fmuladd.f64(double %224, double %241, double %239)
  store double %242, ptr %238, align 8, !tbaa !5
  %indvars.iv.next618 = add nuw nsw i64 %indvars.iv617, 1
  %243 = getelementptr inbounds double, ptr %222, i64 %indvars.iv.next618
  %244 = load double, ptr %243, align 8, !tbaa !5
  %245 = getelementptr inbounds double, ptr %223, i64 %indvars.iv.next618
  %246 = load double, ptr %245, align 8, !tbaa !5
  %247 = call double @llvm.fmuladd.f64(double %224, double %246, double %244)
  store double %247, ptr %243, align 8, !tbaa !5
  %indvars.iv.next618.1 = add nuw nsw i64 %indvars.iv617, 2
  %exitcond621.not.1 = icmp eq i64 %indvars.iv.next618.1, %wide.trip.count620
  br i1 %exitcond621.not.1, label %._crit_edge528, label %scalar.ph709, !llvm.loop !39

._crit_edge528:                                   ; preds = %scalar.ph709.prol.loopexit, %scalar.ph709, %middle.block708, %.preheader497
  %indvars.iv.next623 = add nuw nsw i64 %indvars.iv622, 1
  %exitcond626.not = icmp eq i64 %indvars.iv.next623, %indvars.iv651
  br i1 %exitcond626.not, label %248, label %.preheader497, !llvm.loop !40

248:                                              ; preds = %._crit_edge528
  %249 = load ptr, ptr %157, align 8, !tbaa !14
  %250 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %249, ptr noundef %249)
  %251 = call double @sqrt(double noundef %250) #10
  %252 = load ptr, ptr %208, align 8, !tbaa !14
  %253 = getelementptr inbounds double, ptr %252, i64 %indvars.iv653
  store double %251, ptr %253, align 8, !tbaa !5
  br label %254

254:                                              ; preds = %248, %204
  %255 = phi double [ %251, %248 ], [ %207, %204 ]
  %256 = phi ptr [ %252, %248 ], [ %209, %204 ]
  %257 = getelementptr double, ptr %256, i64 %indvars.iv653
  %258 = fcmp oeq double %255, 0.000000e+00
  %brmerge = or i1 %258, %55
  br i1 %brmerge, label %.loopexit496, label %.lr.ph531

.lr.ph531:                                        ; preds = %254
  %259 = load ptr, ptr %157, align 8, !tbaa !14
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph531
  %scevgep700 = getelementptr i8, ptr %259, i64 %59
  %scevgep701 = getelementptr i8, ptr %256, i64 %143
  %bound0 = icmp ult ptr %259, %scevgep701
  %bound1 = icmp ult ptr %257, %scevgep700
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %260 = load double, ptr %257, align 8, !tbaa !5, !alias.scope !41
  %broadcast.splatinsert = insertelement <2 x double> poison, double %260, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %261 = getelementptr inbounds double, ptr %259, i64 %index
  %wide.load = load <2 x double>, ptr %261, align 8, !tbaa !5, !alias.scope !44, !noalias !41
  %262 = fdiv <2 x double> %wide.load, %broadcast.splat
  store <2 x double> %262, ptr %261, align 8, !tbaa !5, !alias.scope !44, !noalias !41
  %index.next = add nuw i64 %index, 2
  %263 = icmp eq i64 %index.next, %n.vec
  br i1 %263, label %middle.block, label %vector.body, !llvm.loop !46

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit496, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph531
  %indvars.iv627.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph531 ], [ %n.vec, %middle.block ]
  %264 = sub nsw i64 %wide.trip.count, %indvars.iv627.ph
  %xtraiter803 = and i64 %264, 3
  %lcmp.mod804.not = icmp eq i64 %xtraiter803, 0
  br i1 %lcmp.mod804.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv627.prol = phi i64 [ %indvars.iv.next628.prol, %scalar.ph.prol ], [ %indvars.iv627.ph, %scalar.ph.preheader ]
  %prol.iter805 = phi i64 [ %prol.iter805.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %265 = getelementptr inbounds double, ptr %259, i64 %indvars.iv627.prol
  %266 = load double, ptr %265, align 8, !tbaa !5
  %267 = load double, ptr %257, align 8, !tbaa !5
  %268 = fdiv double %266, %267
  store double %268, ptr %265, align 8, !tbaa !5
  %indvars.iv.next628.prol = add nuw nsw i64 %indvars.iv627.prol, 1
  %prol.iter805.next = add i64 %prol.iter805, 1
  %prol.iter805.cmp.not = icmp eq i64 %prol.iter805.next, %xtraiter803
  br i1 %prol.iter805.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !47

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv627.unr = phi i64 [ %indvars.iv627.ph, %scalar.ph.preheader ], [ %indvars.iv.next628.prol, %scalar.ph.prol ]
  %269 = sub nsw i64 %indvars.iv627.ph, %wide.trip.count
  %270 = icmp ugt i64 %269, -4
  br i1 %270, label %.loopexit496, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %invariant.gep830 = getelementptr i8, ptr %259, i64 8
  %invariant.gep831 = getelementptr i8, ptr %259, i64 16
  %invariant.gep833 = getelementptr i8, ptr %259, i64 24
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %indvars.iv627 = phi i64 [ %indvars.iv627.unr, %scalar.ph.preheader.new ], [ %indvars.iv.next628.3, %scalar.ph ]
  %271 = getelementptr inbounds double, ptr %259, i64 %indvars.iv627
  %272 = load double, ptr %271, align 8, !tbaa !5
  %273 = load double, ptr %257, align 8, !tbaa !5
  %274 = fdiv double %272, %273
  store double %274, ptr %271, align 8, !tbaa !5
  %gep = getelementptr double, ptr %invariant.gep830, i64 %indvars.iv627
  %275 = load double, ptr %gep, align 8, !tbaa !5
  %276 = load double, ptr %257, align 8, !tbaa !5
  %277 = fdiv double %275, %276
  store double %277, ptr %gep, align 8, !tbaa !5
  %gep832 = getelementptr double, ptr %invariant.gep831, i64 %indvars.iv627
  %278 = load double, ptr %gep832, align 8, !tbaa !5
  %279 = load double, ptr %257, align 8, !tbaa !5
  %280 = fdiv double %278, %279
  store double %280, ptr %gep832, align 8, !tbaa !5
  %gep834 = getelementptr double, ptr %invariant.gep833, i64 %indvars.iv627
  %281 = load double, ptr %gep834, align 8, !tbaa !5
  %282 = load double, ptr %257, align 8, !tbaa !5
  %283 = fdiv double %281, %282
  store double %283, ptr %gep834, align 8, !tbaa !5
  %indvars.iv.next628.3 = add nuw nsw i64 %indvars.iv627, 4
  %exitcond631.not.3 = icmp eq i64 %indvars.iv.next628.3, %wide.trip.count630
  br i1 %exitcond631.not.3, label %.loopexit496, label %scalar.ph, !llvm.loop !48

.loopexit496:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %254
  %.not488 = icmp eq i64 %indvars.iv653, 0
  br i1 %.not488, label %.loopexit, label %.preheader494.preheader

.preheader494.preheader:                          ; preds = %.loopexit496
  %xtraiter806 = and i64 %indvars.iv649, 3
  %284 = icmp eq i64 %indvars.iv653, 1
  br i1 %284, label %.preheader493.preheader.unr-lcssa, label %.preheader494.preheader.new

.preheader494.preheader.new:                      ; preds = %.preheader494.preheader
  %unroll_iter809 = and i64 %indvars.iv649, 9223372036854775804
  br label %.preheader494

.preheader494:                                    ; preds = %.preheader494, %.preheader494.preheader.new
  %indvars.iv632 = phi i64 [ 0, %.preheader494.preheader.new ], [ %indvars.iv.next633.3, %.preheader494 ]
  %niter810 = phi i64 [ 0, %.preheader494.preheader.new ], [ %niter810.next.3, %.preheader494 ]
  %285 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv632
  %286 = load ptr, ptr %285, align 8, !tbaa !14
  %287 = getelementptr inbounds double, ptr %286, i64 %indvars.iv653
  %288 = load double, ptr %287, align 8, !tbaa !5
  %289 = getelementptr inbounds double, ptr %46, i64 %indvars.iv632
  store double %288, ptr %289, align 8, !tbaa !5
  %indvars.iv.next633 = or disjoint i64 %indvars.iv632, 1
  %290 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next633
  %291 = load ptr, ptr %290, align 8, !tbaa !14
  %292 = getelementptr inbounds double, ptr %291, i64 %indvars.iv653
  %293 = load double, ptr %292, align 8, !tbaa !5
  %294 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next633
  store double %293, ptr %294, align 8, !tbaa !5
  %indvars.iv.next633.1 = or disjoint i64 %indvars.iv632, 2
  %295 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next633.1
  %296 = load ptr, ptr %295, align 8, !tbaa !14
  %297 = getelementptr inbounds double, ptr %296, i64 %indvars.iv653
  %298 = load double, ptr %297, align 8, !tbaa !5
  %299 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next633.1
  store double %298, ptr %299, align 8, !tbaa !5
  %indvars.iv.next633.2 = or disjoint i64 %indvars.iv632, 3
  %300 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next633.2
  %301 = load ptr, ptr %300, align 8, !tbaa !14
  %302 = getelementptr inbounds double, ptr %301, i64 %indvars.iv653
  %303 = load double, ptr %302, align 8, !tbaa !5
  %304 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next633.2
  store double %303, ptr %304, align 8, !tbaa !5
  %indvars.iv.next633.3 = add nuw nsw i64 %indvars.iv632, 4
  %niter810.next.3 = add i64 %niter810, 4
  %niter810.ncmp.3 = icmp eq i64 %niter810.next.3, %unroll_iter809
  br i1 %niter810.ncmp.3, label %.preheader493.preheader.unr-lcssa, label %.preheader494, !llvm.loop !49

.preheader493.preheader.unr-lcssa:                ; preds = %.preheader494, %.preheader494.preheader
  %indvars.iv632.unr = phi i64 [ 0, %.preheader494.preheader ], [ %indvars.iv.next633.3, %.preheader494 ]
  %lcmp.mod808.not = icmp eq i64 %xtraiter806, 0
  br i1 %lcmp.mod808.not, label %.preheader493.preheader, label %.preheader494.epil

.preheader494.epil:                               ; preds = %.preheader493.preheader.unr-lcssa, %.preheader494.epil
  %indvars.iv632.epil = phi i64 [ %indvars.iv.next633.epil, %.preheader494.epil ], [ %indvars.iv632.unr, %.preheader493.preheader.unr-lcssa ]
  %epil.iter807 = phi i64 [ %epil.iter807.next, %.preheader494.epil ], [ 0, %.preheader493.preheader.unr-lcssa ]
  %305 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv632.epil
  %306 = load ptr, ptr %305, align 8, !tbaa !14
  %307 = getelementptr inbounds double, ptr %306, i64 %indvars.iv653
  %308 = load double, ptr %307, align 8, !tbaa !5
  %309 = getelementptr inbounds double, ptr %46, i64 %indvars.iv632.epil
  store double %308, ptr %309, align 8, !tbaa !5
  %indvars.iv.next633.epil = add nuw nsw i64 %indvars.iv632.epil, 1
  %epil.iter807.next = add i64 %epil.iter807, 1
  %epil.iter807.cmp.not = icmp eq i64 %epil.iter807.next, %xtraiter806
  br i1 %epil.iter807.cmp.not, label %.preheader493.preheader, label %.preheader494.epil, !llvm.loop !50

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

.preheader493:                                    ; preds = %.preheader493.preheader, %.preheader493
  %indvars.iv639 = phi i64 [ %indvars.iv.next640, %.preheader493 ], [ 0, %.preheader493.preheader ]
  %310 = getelementptr inbounds double, ptr %36, i64 %indvars.iv639
  %311 = load double, ptr %310, align 8, !tbaa !5
  %312 = getelementptr inbounds double, ptr %43, i64 %indvars.iv639
  %313 = load double, ptr %312, align 8, !tbaa !5
  %314 = trunc nuw nsw i64 %indvars.iv639 to i32
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %311, double noundef %313, i32 noundef %314, ptr noundef %46)
  %indvars.iv.next640 = add nuw nsw i64 %indvars.iv639, 1
  %exitcond643.not = icmp eq i64 %indvars.iv.next640, %indvars.iv653
  br i1 %exitcond643.not, label %.preheader492.preheader, label %.preheader493, !llvm.loop !51

.preheader492.preheader:                          ; preds = %.preheader493
  %xtraiter811 = and i64 %indvars.iv649, 3
  %315 = icmp ult i64 %indvars.iv651, 3
  br i1 %315, label %.loopexit.loopexit.unr-lcssa, label %.preheader492.preheader.new

.preheader492.preheader.new:                      ; preds = %.preheader492.preheader
  %unroll_iter814 = and i64 %indvars.iv649, 9223372036854775804
  br label %.preheader492

.preheader492:                                    ; preds = %.preheader492, %.preheader492.preheader.new
  %indvars.iv644 = phi i64 [ 0, %.preheader492.preheader.new ], [ %indvars.iv.next645.3, %.preheader492 ]
  %niter815 = phi i64 [ 0, %.preheader492.preheader.new ], [ %niter815.next.3, %.preheader492 ]
  %316 = getelementptr inbounds double, ptr %46, i64 %indvars.iv644
  %317 = load double, ptr %316, align 8, !tbaa !5
  %318 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv644
  %319 = load ptr, ptr %318, align 8, !tbaa !14
  %320 = getelementptr inbounds double, ptr %319, i64 %indvars.iv653
  store double %317, ptr %320, align 8, !tbaa !5
  %indvars.iv.next645 = or disjoint i64 %indvars.iv644, 1
  %321 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next645
  %322 = load double, ptr %321, align 8, !tbaa !5
  %323 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next645
  %324 = load ptr, ptr %323, align 8, !tbaa !14
  %325 = getelementptr inbounds double, ptr %324, i64 %indvars.iv653
  store double %322, ptr %325, align 8, !tbaa !5
  %indvars.iv.next645.1 = or disjoint i64 %indvars.iv644, 2
  %326 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next645.1
  %327 = load double, ptr %326, align 8, !tbaa !5
  %328 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next645.1
  %329 = load ptr, ptr %328, align 8, !tbaa !14
  %330 = getelementptr inbounds double, ptr %329, i64 %indvars.iv653
  store double %327, ptr %330, align 8, !tbaa !5
  %indvars.iv.next645.2 = or disjoint i64 %indvars.iv644, 3
  %331 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next645.2
  %332 = load double, ptr %331, align 8, !tbaa !5
  %333 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next645.2
  %334 = load ptr, ptr %333, align 8, !tbaa !14
  %335 = getelementptr inbounds double, ptr %334, i64 %indvars.iv653
  store double %332, ptr %335, align 8, !tbaa !5
  %indvars.iv.next645.3 = add nuw nsw i64 %indvars.iv644, 4
  %niter815.next.3 = add i64 %niter815, 4
  %niter815.ncmp.3 = icmp eq i64 %niter815.next.3, %unroll_iter814
  br i1 %niter815.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.preheader492, !llvm.loop !52

.loopexit.loopexit.unr-lcssa:                     ; preds = %.preheader492, %.preheader492.preheader
  %indvars.iv644.unr = phi i64 [ 0, %.preheader492.preheader ], [ %indvars.iv.next645.3, %.preheader492 ]
  %lcmp.mod813.not = icmp eq i64 %xtraiter811, 0
  br i1 %lcmp.mod813.not, label %.loopexit.loopexit, label %.preheader492.epil

.preheader492.epil:                               ; preds = %.loopexit.loopexit.unr-lcssa, %.preheader492.epil
  %indvars.iv644.epil = phi i64 [ %indvars.iv.next645.epil, %.preheader492.epil ], [ %indvars.iv644.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter812 = phi i64 [ %epil.iter812.next, %.preheader492.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %336 = getelementptr inbounds double, ptr %46, i64 %indvars.iv644.epil
  %337 = load double, ptr %336, align 8, !tbaa !5
  %338 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv644.epil
  %339 = load ptr, ptr %338, align 8, !tbaa !14
  %340 = getelementptr inbounds double, ptr %339, i64 %indvars.iv653
  store double %337, ptr %340, align 8, !tbaa !5
  %indvars.iv.next645.epil = add nuw nsw i64 %indvars.iv644.epil, 1
  %epil.iter812.next = add i64 %epil.iter812, 1
  %epil.iter812.cmp.not = icmp eq i64 %epil.iter812.next, %xtraiter811
  br i1 %epil.iter812.cmp.not, label %.loopexit.loopexit, label %.preheader492.epil, !llvm.loop !53

.loopexit.loopexit:                               ; preds = %.preheader492.epil, %.loopexit.loopexit.unr-lcssa
  %.pre = load ptr, ptr %208, align 8, !tbaa !14
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.loopexit496
  %341 = phi ptr [ %.pre, %.loopexit.loopexit ], [ %256, %.loopexit496 ]
  %342 = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv653
  %343 = load ptr, ptr %342, align 8, !tbaa !14
  %344 = getelementptr inbounds double, ptr %343, i64 %indvars.iv653
  %345 = load double, ptr %344, align 8, !tbaa !5
  %346 = getelementptr inbounds double, ptr %341, i64 %indvars.iv653
  %347 = load double, ptr %346, align 8, !tbaa !5
  %348 = fmul double %347, %347
  %349 = call double @llvm.fmuladd.f64(double %345, double %345, double %348)
  %sqrt = call double @llvm.sqrt.f64(double %349)
  %350 = fcmp oeq double %sqrt, 0.000000e+00
  br i1 %350, label %351, label %352

351:                                              ; preds = %.loopexit
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %29, ptr noundef %36, ptr noundef nonnull %37, ptr noundef nonnull %39, i32 noundef %17, ptr noundef %42, ptr noundef %43, ptr noundef %45, i32 noundef %0, ptr noundef %46)
  br label %432

352:                                              ; preds = %.loopexit
  %353 = fdiv double %345, %sqrt
  %354 = getelementptr inbounds double, ptr %36, i64 %indvars.iv653
  store double %353, ptr %354, align 8, !tbaa !5
  %355 = load double, ptr %346, align 8, !tbaa !5
  %356 = fneg double %355
  %357 = fdiv double %356, %sqrt
  %358 = getelementptr inbounds double, ptr %43, i64 %indvars.iv653
  store double %357, ptr %358, align 8, !tbaa !5
  %359 = load double, ptr %344, align 8, !tbaa !5
  %360 = load double, ptr %346, align 8, !tbaa !5
  %361 = fneg double %357
  %362 = fmul double %360, %361
  %363 = call double @llvm.fmuladd.f64(double %353, double %359, double %362)
  store double %363, ptr %344, align 8, !tbaa !5
  store double 0.000000e+00, ptr %346, align 8, !tbaa !5
  %364 = load double, ptr %354, align 8, !tbaa !5
  %365 = load double, ptr %358, align 8, !tbaa !5
  %366 = trunc nuw nsw i64 %indvars.iv653 to i32
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %364, double noundef %365, i32 noundef %366, ptr noundef nonnull %37)
  %367 = getelementptr inbounds double, ptr %37, i64 %indvars.iv.next654
  %368 = load double, ptr %367, align 8, !tbaa !5
  %369 = call double @llvm.fabs.f64(double %368)
  %370 = add nsw i32 %.1456540, 1
  %371 = fcmp ugt double %369, %.1466
  %372 = fcmp ugt double %369, %18
  %or.cond = or i1 %371, %372
  %373 = icmp slt i64 %indvars.iv.next654, %58
  %or.cond576 = and i1 %or.cond, %373
  %indvars.iv.next652 = add nuw nsw i64 %indvars.iv651, 1
  %indvars.iv.next650 = add nuw nsw i64 %indvars.iv649, 1
  br i1 %or.cond576, label %.lr.ph541, label %._crit_edge542, !llvm.loop !54

._crit_edge542:                                   ; preds = %352, %._crit_edge510, %.preheader500
  %.2472 = phi i32 [ %.0470566, %.preheader500 ], [ %.0470566, %._crit_edge510 ], [ %366, %352 ]
  %.1468 = phi double [ %87, %.preheader500 ], [ %87, %._crit_edge510 ], [ %369, %352 ]
  %.2457 = phi i32 [ %.0455568, %.preheader500 ], [ %.0455568, %._crit_edge510 ], [ %370, %352 ]
  %374 = sext i32 %.2472 to i64
  %375 = getelementptr inbounds ptr, ptr %39, i64 %374
  %376 = load ptr, ptr %375, align 8, !tbaa !14
  %377 = getelementptr inbounds double, ptr %376, i64 %374
  %378 = load double, ptr %377, align 8, !tbaa !5
  %379 = fcmp oeq double %378, 0.000000e+00
  br i1 %379, label %380, label %381

380:                                              ; preds = %._crit_edge542
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %29, ptr noundef %36, ptr noundef nonnull %37, ptr noundef nonnull %39, i32 noundef %17, ptr noundef %42, ptr noundef %43, ptr noundef %45, i32 noundef %0, ptr noundef %46)
  br label %432

381:                                              ; preds = %._crit_edge542
  %382 = getelementptr inbounds double, ptr %37, i64 %374
  %383 = load double, ptr %382, align 8, !tbaa !5
  %384 = fdiv double %383, %378
  %385 = getelementptr inbounds double, ptr %46, i64 %374
  store double %384, ptr %385, align 8, !tbaa !5
  %386 = icmp sgt i32 %.2472, 0
  br i1 %386, label %.lr.ph558.preheader, label %.preheader499

.lr.ph558.preheader:                              ; preds = %381
  %387 = zext nneg i32 %.2472 to i64
  br label %.lr.ph558

.preheader499:                                    ; preds = %._crit_edge553, %381
  %.not489559 = icmp slt i32 %.2472, 0
  %or.cond688 = or i1 %49, %.not489559
  br i1 %or.cond688, label %._crit_edge565, label %.preheader.preheader

.preheader.preheader:                             ; preds = %.preheader499
  %388 = add nuw i32 %.2472, 1
  %wide.trip.count669 = zext i32 %388 to i64
  %xtraiter816 = and i64 %wide.trip.count669, 1
  %389 = icmp eq i32 %.2472, 0
  %unroll_iter819 = and i64 %wide.trip.count669, 4294967294
  %lcmp.mod818.not = icmp eq i64 %xtraiter816, 0
  br label %.preheader

.lr.ph558:                                        ; preds = %.lr.ph558.preheader, %._crit_edge553
  %indvars.iv660 = phi i64 [ %387, %.lr.ph558.preheader ], [ %indvars.iv.next661, %._crit_edge553 ]
  %indvars.iv.next661 = add nsw i64 %indvars.iv660, -1
  %390 = getelementptr inbounds double, ptr %37, i64 %indvars.iv.next661
  %391 = load double, ptr %390, align 8, !tbaa !5
  %392 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next661
  store double %391, ptr %392, align 8, !tbaa !5
  %.not490549 = icmp sgt i64 %indvars.iv660, %374
  %.phi.trans.insert = getelementptr inbounds ptr, ptr %39, i64 %indvars.iv.next661
  %.pre677 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !14
  br i1 %.not490549, label %._crit_edge553, label %.lr.ph552

.lr.ph552:                                        ; preds = %.lr.ph558, %.lr.ph552
  %indvars.iv662 = phi i64 [ %indvars.iv.next663, %.lr.ph552 ], [ %indvars.iv660, %.lr.ph558 ]
  %393 = phi double [ %399, %.lr.ph552 ], [ %391, %.lr.ph558 ]
  %394 = getelementptr inbounds double, ptr %.pre677, i64 %indvars.iv662
  %395 = load double, ptr %394, align 8, !tbaa !5
  %396 = getelementptr inbounds double, ptr %46, i64 %indvars.iv662
  %397 = load double, ptr %396, align 8, !tbaa !5
  %398 = fneg double %395
  %399 = call double @llvm.fmuladd.f64(double %398, double %397, double %393)
  store double %399, ptr %392, align 8, !tbaa !5
  %indvars.iv.next663 = add nuw nsw i64 %indvars.iv662, 1
  %400 = trunc nuw i64 %indvars.iv662 to i32
  %.not490.not = icmp sgt i32 %.2472, %400
  br i1 %.not490.not, label %.lr.ph552, label %._crit_edge553, !llvm.loop !55

._crit_edge553:                                   ; preds = %.lr.ph552, %.lr.ph558
  %401 = phi double [ %391, %.lr.ph558 ], [ %399, %.lr.ph552 ]
  %402 = getelementptr inbounds double, ptr %.pre677, i64 %indvars.iv.next661
  %403 = load double, ptr %402, align 8, !tbaa !5
  %404 = fdiv double %401, %403
  store double %404, ptr %392, align 8, !tbaa !5
  %405 = icmp sgt i64 %indvars.iv660, 1
  br i1 %405, label %.lr.ph558, label %.preheader499, !llvm.loop !56

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge562
  %indvars.iv671 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next672, %._crit_edge562 ]
  %406 = getelementptr inbounds double, ptr %14, i64 %indvars.iv671
  %.promoted563 = load double, ptr %406, align 8, !tbaa !5
  br i1 %389, label %._crit_edge562.unr-lcssa, label %.preheader.new

.preheader.new:                                   ; preds = %.preheader, %.preheader.new
  %indvars.iv666 = phi i64 [ %indvars.iv.next667.1, %.preheader.new ], [ 0, %.preheader ]
  %407 = phi double [ %421, %.preheader.new ], [ %.promoted563, %.preheader ]
  %niter820 = phi i64 [ %niter820.next.1, %.preheader.new ], [ 0, %.preheader ]
  %408 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv666
  %409 = load ptr, ptr %408, align 8, !tbaa !14
  %410 = getelementptr inbounds double, ptr %409, i64 %indvars.iv671
  %411 = load double, ptr %410, align 8, !tbaa !5
  %412 = getelementptr inbounds double, ptr %46, i64 %indvars.iv666
  %413 = load double, ptr %412, align 8, !tbaa !5
  %414 = call double @llvm.fmuladd.f64(double %411, double %413, double %407)
  store double %414, ptr %406, align 8, !tbaa !5
  %indvars.iv.next667 = or disjoint i64 %indvars.iv666, 1
  %415 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv.next667
  %416 = load ptr, ptr %415, align 8, !tbaa !14
  %417 = getelementptr inbounds double, ptr %416, i64 %indvars.iv671
  %418 = load double, ptr %417, align 8, !tbaa !5
  %419 = getelementptr inbounds double, ptr %46, i64 %indvars.iv.next667
  %420 = load double, ptr %419, align 8, !tbaa !5
  %421 = call double @llvm.fmuladd.f64(double %418, double %420, double %414)
  store double %421, ptr %406, align 8, !tbaa !5
  %indvars.iv.next667.1 = add nuw nsw i64 %indvars.iv666, 2
  %niter820.next.1 = add i64 %niter820, 2
  %niter820.ncmp.1 = icmp eq i64 %niter820.next.1, %unroll_iter819
  br i1 %niter820.ncmp.1, label %._crit_edge562.unr-lcssa, label %.preheader.new, !llvm.loop !57

._crit_edge562.unr-lcssa:                         ; preds = %.preheader.new, %.preheader
  %indvars.iv666.unr = phi i64 [ 0, %.preheader ], [ %indvars.iv.next667.1, %.preheader.new ]
  %.unr = phi double [ %.promoted563, %.preheader ], [ %421, %.preheader.new ]
  br i1 %lcmp.mod818.not, label %._crit_edge562, label %._crit_edge562.epilog-lcssa

._crit_edge562.epilog-lcssa:                      ; preds = %._crit_edge562.unr-lcssa
  %422 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv666.unr
  %423 = load ptr, ptr %422, align 8, !tbaa !14
  %424 = getelementptr inbounds double, ptr %423, i64 %indvars.iv671
  %425 = load double, ptr %424, align 8, !tbaa !5
  %426 = getelementptr inbounds double, ptr %46, i64 %indvars.iv666.unr
  %427 = load double, ptr %426, align 8, !tbaa !5
  %428 = call double @llvm.fmuladd.f64(double %425, double %427, double %.unr)
  store double %428, ptr %406, align 8, !tbaa !5
  br label %._crit_edge562

._crit_edge562:                                   ; preds = %._crit_edge562.unr-lcssa, %._crit_edge562.epilog-lcssa
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %exitcond675.not = icmp eq i64 %indvars.iv.next672, %wide.trip.count674
  br i1 %exitcond675.not, label %._crit_edge565, label %.preheader, !llvm.loop !58

._crit_edge565:                                   ; preds = %._crit_edge562, %.preheader499
  %429 = fcmp ole double %.1468, %.1466
  %430 = fcmp ole double %.1468, %18
  %or.cond491.not691 = and i1 %429, %430
  %431 = add nuw nsw i32 %.0454569, 1
  %exitcond676.not = icmp eq i32 %431, %16
  %or.cond686 = select i1 %or.cond491.not691, i1 true, i1 %exitcond676.not
  br i1 %or.cond686, label %._crit_edge572, label %65, !llvm.loop !59

._crit_edge572:                                   ; preds = %._crit_edge565, %30
  %.3458 = phi i32 [ 0, %30 ], [ %.2457, %._crit_edge565 ]
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %29, ptr noundef %36, ptr noundef %37, ptr noundef %39, i32 noundef %17, ptr noundef %42, ptr noundef %43, ptr noundef %45, i32 noundef %0, ptr noundef %46)
  br label %432

432:                                              ; preds = %._crit_edge572, %380, %351, %89
  %.0 = phi i32 [ %.0455568, %89 ], [ %.1456540, %351 ], [ %.2457, %380 ], [ %.3458, %._crit_edge572 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #10
  ret i32 %.0
}

declare void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

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


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