; 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._ZN5nasoq24pmgmres_ldlt_auto_updateEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddPbS0_iiiS0_S0_iS0_S0_iS0_S0_iS1_S1_.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: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN5nasoq16dmatrix_preallocEiiiiPd(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #0

; 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 @_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

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

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

100:                                              ; preds = %36
  %101 = load i32, ptr %55, align 4, !tbaa !5
  %102 = add nsw i32 %101, 1
  %103 = sext i32 %102 to i64
  %104 = mul i64 %103, 8
  %105 = call noalias ptr @malloc(i64 noundef %104) #10
  store ptr %105, ptr %75, align 8, !tbaa !9
  %106 = load i32, ptr %55, align 4, !tbaa !5
  %107 = add nsw i32 %106, 1
  %108 = sext i32 %107 to i64
  %109 = mul i64 %108, 8
  %110 = call noalias ptr @malloc(i64 noundef %109) #10
  store ptr %110, ptr %77, align 8, !tbaa !9
  %111 = load i32, ptr %55, align 4, !tbaa !5
  %112 = load i32, ptr %55, align 4, !tbaa !5
  %113 = sub nsw i32 %112, 1
  %114 = call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %111, i32 noundef 0, i32 noundef %113)
  store ptr %114, ptr %78, align 8, !tbaa !9
  %115 = load i32, ptr %38, align 4, !tbaa !5
  %116 = sext i32 %115 to i64
  %117 = mul i64 %116, 8
  %118 = call noalias ptr @malloc(i64 noundef %117) #10
  store ptr %118, ptr %87, align 8, !tbaa !9
  %119 = load i32, ptr %55, align 4, !tbaa !5
  %120 = add nsw i32 %119, 1
  %121 = sext i32 %120 to i64
  %122 = mul i64 %121, 8
  %123 = call noalias ptr @malloc(i64 noundef %122) #10
  store ptr %123, ptr %90, align 8, !tbaa !9
  %124 = load i32, ptr %55, align 4, !tbaa !5
  %125 = load i32, ptr %38, align 4, !tbaa !5
  %126 = sub nsw i32 %125, 1
  %127 = call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %124, i32 noundef 0, i32 noundef %126)
  store ptr %127, ptr %91, align 8, !tbaa !9
  %128 = load i32, ptr %55, align 4, !tbaa !5
  %129 = add nsw i32 %128, 1
  %130 = sext i32 %129 to i64
  %131 = mul i64 %130, 8
  %132 = call noalias ptr @malloc(i64 noundef %131) #10
  store ptr %132, ptr %93, align 8, !tbaa !9
  br label %196

133:                                              ; preds = %36
  %134 = load ptr, ptr %72, align 8, !tbaa !9
  store ptr %134, ptr %75, align 8, !tbaa !9
  %135 = load ptr, ptr %72, align 8, !tbaa !9
  %136 = load i32, ptr %55, align 4, !tbaa !5
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds double, ptr %135, i64 %137
  %139 = getelementptr inbounds double, ptr %138, i64 1
  store ptr %139, ptr %77, align 8, !tbaa !9
  %140 = load ptr, ptr %72, align 8, !tbaa !9
  %141 = load i32, ptr %55, align 4, !tbaa !5
  %142 = add nsw i32 %141, 1
  %143 = mul nsw i32 2, %142
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds double, ptr %140, i64 %144
  store ptr %145, ptr %87, align 8, !tbaa !9
  %146 = load ptr, ptr %72, align 8, !tbaa !9
  %147 = load i32, ptr %55, align 4, !tbaa !5
  %148 = add nsw i32 %147, 1
  %149 = mul nsw i32 2, %148
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds double, ptr %146, i64 %150
  %152 = load i32, ptr %38, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds double, ptr %151, i64 %153
  store ptr %154, ptr %90, align 8, !tbaa !9
  %155 = load ptr, ptr %72, align 8, !tbaa !9
  %156 = load i32, ptr %55, align 4, !tbaa !5
  %157 = add nsw i32 %156, 1
  %158 = mul nsw i32 3, %157
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds double, ptr %155, i64 %159
  %161 = load i32, ptr %38, align 4, !tbaa !5
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds double, ptr %160, i64 %162
  store ptr %163, ptr %93, align 8, !tbaa !9
  %164 = load i32, ptr %55, align 4, !tbaa !5
  %165 = load i32, ptr %55, align 4, !tbaa !5
  %166 = sub nsw i32 %165, 1
  %167 = load ptr, ptr %72, align 8, !tbaa !9
  %168 = load i32, ptr %55, align 4, !tbaa !5
  %169 = add nsw i32 %168, 1
  %170 = mul nsw i32 4, %169
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds double, ptr %167, i64 %171
  %173 = load i32, ptr %38, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %172, i64 %174
  %176 = call noundef ptr @_ZN5nasoq16dmatrix_preallocEiiiiPd(i32 noundef 0, i32 noundef %164, i32 noundef 0, i32 noundef %166, ptr noundef %175)
  store ptr %176, ptr %78, align 8, !tbaa !9
  %177 = load i32, ptr %55, align 4, !tbaa !5
  %178 = load i32, ptr %38, align 4, !tbaa !5
  %179 = sub nsw i32 %178, 1
  %180 = load ptr, ptr %72, align 8, !tbaa !9
  %181 = load i32, ptr %55, align 4, !tbaa !5
  %182 = add nsw i32 %181, 1
  %183 = mul nsw i32 4, %182
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds double, ptr %180, i64 %184
  %186 = load i32, ptr %55, align 4, !tbaa !5
  %187 = load i32, ptr %55, align 4, !tbaa !5
  %188 = add nsw i32 %187, 1
  %189 = mul nsw i32 %186, %188
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds double, ptr %185, i64 %190
  %192 = load i32, ptr %38, align 4, !tbaa !5
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds double, ptr %191, i64 %193
  %195 = call noundef ptr @_ZN5nasoq16dmatrix_preallocEiiiiPd(i32 noundef 0, i32 noundef %177, i32 noundef 0, i32 noundef %179, ptr noundef %194)
  store ptr %195, ptr %91, align 8, !tbaa !9
  br label %196

196:                                              ; preds = %133, %100
  store i32 0, ptr %81, align 4, !tbaa !5
  br label %197

197:                                              ; preds = %1233, %196
  %198 = load i32, ptr %81, align 4, !tbaa !5
  %199 = load i32, ptr %54, align 4, !tbaa !5
  %200 = icmp slt i32 %198, %199
  br i1 %200, label %201, label %1236

201:                                              ; preds = %197
  %202 = load i32, ptr %60, align 4, !tbaa !5
  %203 = icmp ne i32 %202, 0
  br i1 %203, label %212, label %204

204:                                              ; preds = %201
  %205 = load i32, ptr %38, align 4, !tbaa !5
  %206 = load i32, ptr %39, align 4, !tbaa !5
  %207 = load ptr, ptr %40, align 8, !tbaa !9
  %208 = load ptr, ptr %41, align 8, !tbaa !9
  %209 = load ptr, ptr %42, align 8, !tbaa !9
  %210 = load ptr, ptr %52, align 8, !tbaa !9
  %211 = load ptr, ptr %87, align 8, !tbaa !9
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %205, i32 noundef %206, ptr noundef %207, ptr noundef %208, ptr noundef %209, ptr noundef %210, ptr noundef %211)
  br label %221

212:                                              ; preds = %201
  %213 = load i32, ptr %38, align 4, !tbaa !5
  %214 = load ptr, ptr %40, align 8, !tbaa !9
  %215 = load ptr, ptr %41, align 8, !tbaa !9
  %216 = load ptr, ptr %42, align 8, !tbaa !9
  %217 = getelementptr inbounds [2 x double], ptr %94, i64 0, i64 0
  %218 = getelementptr inbounds [2 x double], ptr %95, i64 0, i64 0
  %219 = load ptr, ptr %52, align 8, !tbaa !9
  %220 = load ptr, ptr %87, align 8, !tbaa !9
  call void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef %213, ptr noundef %214, ptr noundef %215, ptr noundef %216, i32 noundef -1, ptr noundef %217, ptr noundef %218, i32 noundef 1, ptr noundef %219, ptr noundef %220)
  br label %221

221:                                              ; preds = %212, %204
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %222

222:                                              ; preds = %242, %221
  %223 = load i32, ptr %80, align 4, !tbaa !5
  %224 = load i32, ptr %38, align 4, !tbaa !5
  %225 = icmp slt i32 %223, %224
  br i1 %225, label %226, label %245

226:                                              ; preds = %222
  %227 = load ptr, ptr %53, align 8, !tbaa !9
  %228 = load i32, ptr %80, align 4, !tbaa !5
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds double, ptr %227, i64 %229
  %231 = load double, ptr %230, align 8, !tbaa !13
  %232 = load ptr, ptr %87, align 8, !tbaa !9
  %233 = load i32, ptr %80, align 4, !tbaa !5
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds double, ptr %232, i64 %234
  %236 = load double, ptr %235, align 8, !tbaa !13
  %237 = fsub double %231, %236
  %238 = load ptr, ptr %87, align 8, !tbaa !9
  %239 = load i32, ptr %80, align 4, !tbaa !5
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds double, ptr %238, i64 %240
  store double %237, ptr %241, align 8, !tbaa !13
  br label %242

242:                                              ; preds = %226
  %243 = load i32, ptr %80, align 4, !tbaa !5
  %244 = add nsw i32 %243, 1
  store i32 %244, ptr %80, align 4, !tbaa !5
  br label %222, !llvm.loop !15

245:                                              ; preds = %222
  %246 = load i32, ptr %61, align 4, !tbaa !5
  %247 = icmp eq i32 %246, 2
  br i1 %247, label %248, label %276

248:                                              ; preds = %245
  %249 = load i32, ptr %38, align 4, !tbaa !5
  %250 = sext i32 %249 to i64
  %251 = load ptr, ptr %51, align 8, !tbaa !9
  %252 = load ptr, ptr %87, align 8, !tbaa !9
  %253 = load ptr, ptr %48, align 8, !tbaa !9
  %254 = load ptr, ptr %49, align 8, !tbaa !9
  %255 = load ptr, ptr %43, align 8, !tbaa !9
  %256 = load ptr, ptr %44, align 8, !tbaa !9
  %257 = load ptr, ptr %45, align 8, !tbaa !9
  %258 = load ptr, ptr %47, align 8, !tbaa !9
  %259 = load i32, ptr %50, align 4, !tbaa !5
  %260 = sext i32 %259 to i64
  %261 = load i64, ptr %46, align 8, !tbaa !11
  %262 = trunc i64 %261 to i32
  %263 = load i32, ptr %62, align 4, !tbaa !5
  %264 = load ptr, ptr %63, align 8, !tbaa !9
  %265 = load ptr, ptr %64, align 8, !tbaa !9
  %266 = load i32, ptr %65, align 4, !tbaa !5
  %267 = load ptr, ptr %66, align 8, !tbaa !9
  %268 = load ptr, ptr %67, align 8, !tbaa !9
  %269 = load i32, ptr %71, align 4, !tbaa !5
  %270 = load i32, ptr %68, align 4, !tbaa !5
  %271 = load ptr, ptr %69, align 8, !tbaa !9
  %272 = load ptr, ptr %70, align 8, !tbaa !9
  %273 = load ptr, ptr %58, align 8, !tbaa !9
  %274 = load ptr, ptr %59, align 8, !tbaa !9
  %275 = load ptr, ptr %73, align 8, !tbaa !9
  call void @_ZN5nasoq48solve_phase_ldl_blocked_parallel_permuted_updateEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_iiS1_S1_PbS1_S0_(i64 noundef %250, ptr noundef %251, ptr noundef %252, ptr noundef %253, ptr noundef %254, ptr noundef %255, ptr noundef %256, ptr noundef %257, ptr noundef %258, i64 noundef %260, i32 noundef %262, i32 noundef %263, ptr noundef %264, ptr noundef %265, i32 noundef %266, ptr noundef %267, ptr noundef %268, i32 noundef %269, i32 noundef %270, ptr noundef %271, ptr noundef %272, ptr noundef %273, ptr noundef %274, ptr noundef %275)
  br label %310

276:                                              ; preds = %245
  %277 = load i32, ptr %61, align 4, !tbaa !5
  %278 = icmp eq i32 %277, 1
  br i1 %278, label %279, label %294

279:                                              ; preds = %276
  %280 = load i32, ptr %38, align 4, !tbaa !5
  %281 = sext i32 %280 to i64
  %282 = load ptr, ptr %51, align 8, !tbaa !9
  %283 = load ptr, ptr %87, align 8, !tbaa !9
  %284 = load ptr, ptr %48, align 8, !tbaa !9
  %285 = load ptr, ptr %49, align 8, !tbaa !9
  %286 = load ptr, ptr %43, align 8, !tbaa !9
  %287 = load ptr, ptr %44, align 8, !tbaa !9
  %288 = load ptr, ptr %45, align 8, !tbaa !9
  %289 = load ptr, ptr %47, align 8, !tbaa !9
  %290 = load i32, ptr %50, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = load i64, ptr %46, align 8, !tbaa !11
  %293 = trunc i64 %292 to i32
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %281, ptr noundef %282, ptr noundef %283, ptr noundef %284, ptr noundef %285, ptr noundef %286, ptr noundef %287, ptr noundef %288, ptr noundef %289, i64 noundef %291, i32 noundef %293)
  br label %309

294:                                              ; preds = %276
  %295 = load i32, ptr %38, align 4, !tbaa !5
  %296 = sext i32 %295 to i64
  %297 = load ptr, ptr %51, align 8, !tbaa !9
  %298 = load ptr, ptr %87, align 8, !tbaa !9
  %299 = load ptr, ptr %48, align 8, !tbaa !9
  %300 = load ptr, ptr %49, align 8, !tbaa !9
  %301 = load ptr, ptr %43, align 8, !tbaa !9
  %302 = load ptr, ptr %44, align 8, !tbaa !9
  %303 = load ptr, ptr %45, align 8, !tbaa !9
  %304 = load ptr, ptr %47, align 8, !tbaa !9
  %305 = load i32, ptr %50, align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = load i64, ptr %46, align 8, !tbaa !11
  %308 = trunc i64 %307 to i32
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %296, ptr noundef %297, ptr noundef %298, ptr noundef %299, ptr noundef %300, ptr noundef %301, ptr noundef %302, ptr noundef %303, ptr noundef %304, i64 noundef %306, i32 noundef %308)
  br label %309

309:                                              ; preds = %294, %279
  br label %310

310:                                              ; preds = %309, %248
  %311 = load i32, ptr %38, align 4, !tbaa !5
  %312 = load ptr, ptr %87, align 8, !tbaa !9
  %313 = load ptr, ptr %87, align 8, !tbaa !9
  %314 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %311, ptr noundef %312, ptr noundef %313)
  %315 = call double @sqrt(double noundef %314) #9
  store double %315, ptr %88, align 8, !tbaa !13
  %316 = load double, ptr %88, align 8, !tbaa !13
  %317 = load double, ptr %56, align 8, !tbaa !13
  %318 = fcmp olt double %316, %317
  br i1 %318, label %319, label %331

319:                                              ; preds = %310
  %320 = load ptr, ptr %72, align 8, !tbaa !9
  %321 = load ptr, ptr %75, align 8, !tbaa !9
  %322 = load ptr, ptr %77, align 8, !tbaa !9
  %323 = load ptr, ptr %78, align 8, !tbaa !9
  %324 = load i32, ptr %55, align 4, !tbaa !5
  %325 = load ptr, ptr %87, align 8, !tbaa !9
  %326 = load ptr, ptr %90, align 8, !tbaa !9
  %327 = load ptr, ptr %91, align 8, !tbaa !9
  %328 = load i32, ptr %38, align 4, !tbaa !5
  %329 = load ptr, ptr %93, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %320, ptr noundef %321, ptr noundef %322, ptr noundef %323, i32 noundef %324, ptr noundef %325, ptr noundef %326, ptr noundef %327, i32 noundef %328, ptr noundef %329)
  %330 = load i32, ptr %82, align 4, !tbaa !5
  store i32 %330, ptr %37, align 4
  store i32 1, ptr %97, align 4
  br label %1248

331:                                              ; preds = %310
  %332 = load i32, ptr %81, align 4, !tbaa !5
  %333 = icmp eq i32 %332, 0
  br i1 %333, label %334, label %338

334:                                              ; preds = %331
  %335 = load double, ptr %88, align 8, !tbaa !13
  %336 = load double, ptr %57, align 8, !tbaa !13
  %337 = fmul double %335, %336
  store double %337, ptr %89, align 8, !tbaa !13
  br label %338

338:                                              ; preds = %334, %331
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %339

339:                                              ; preds = %357, %338
  %340 = load i32, ptr %80, align 4, !tbaa !5
  %341 = load i32, ptr %38, align 4, !tbaa !5
  %342 = icmp slt i32 %340, %341
  br i1 %342, label %343, label %360

343:                                              ; preds = %339
  %344 = load ptr, ptr %87, align 8, !tbaa !9
  %345 = load i32, ptr %80, align 4, !tbaa !5
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds double, ptr %344, i64 %346
  %348 = load double, ptr %347, align 8, !tbaa !13
  %349 = load double, ptr %88, align 8, !tbaa !13
  %350 = fdiv double %348, %349
  %351 = load ptr, ptr %91, align 8, !tbaa !9
  %352 = getelementptr inbounds ptr, ptr %351, i64 0
  %353 = load ptr, ptr %352, align 8, !tbaa !9
  %354 = load i32, ptr %80, align 4, !tbaa !5
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds double, ptr %353, i64 %355
  store double %350, ptr %356, align 8, !tbaa !13
  br label %357

357:                                              ; preds = %343
  %358 = load i32, ptr %80, align 4, !tbaa !5
  %359 = add nsw i32 %358, 1
  store i32 %359, ptr %80, align 4, !tbaa !5
  br label %339, !llvm.loop !17

360:                                              ; preds = %339
  %361 = load double, ptr %88, align 8, !tbaa !13
  %362 = load ptr, ptr %77, align 8, !tbaa !9
  %363 = getelementptr inbounds double, ptr %362, i64 0
  store double %361, ptr %363, align 8, !tbaa !13
  store i32 1, ptr %80, align 4, !tbaa !5
  br label %364

364:                                              ; preds = %374, %360
  %365 = load i32, ptr %80, align 4, !tbaa !5
  %366 = load i32, ptr %55, align 4, !tbaa !5
  %367 = add nsw i32 %366, 1
  %368 = icmp slt i32 %365, %367
  br i1 %368, label %369, label %377

369:                                              ; preds = %364
  %370 = load ptr, ptr %77, align 8, !tbaa !9
  %371 = load i32, ptr %80, align 4, !tbaa !5
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %370, i64 %372
  store double 0.000000e+00, ptr %373, align 8, !tbaa !13
  br label %374

374:                                              ; preds = %369
  %375 = load i32, ptr %80, align 4, !tbaa !5
  %376 = add nsw i32 %375, 1
  store i32 %376, ptr %80, align 4, !tbaa !5
  br label %364, !llvm.loop !18

377:                                              ; preds = %364
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %378

378:                                              ; preds = %401, %377
  %379 = load i32, ptr %80, align 4, !tbaa !5
  %380 = load i32, ptr %55, align 4, !tbaa !5
  %381 = add nsw i32 %380, 1
  %382 = icmp slt i32 %379, %381
  br i1 %382, label %383, label %404

383:                                              ; preds = %378
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %384

384:                                              ; preds = %397, %383
  %385 = load i32, ptr %83, align 4, !tbaa !5
  %386 = load i32, ptr %55, align 4, !tbaa !5
  %387 = icmp slt i32 %385, %386
  br i1 %387, label %388, label %400

388:                                              ; preds = %384
  %389 = load ptr, ptr %78, align 8, !tbaa !9
  %390 = load i32, ptr %80, align 4, !tbaa !5
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds ptr, ptr %389, i64 %391
  %393 = load ptr, ptr %392, align 8, !tbaa !9
  %394 = load i32, ptr %83, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds double, ptr %393, i64 %395
  store double 0.000000e+00, ptr %396, align 8, !tbaa !13
  br label %397

397:                                              ; preds = %388
  %398 = load i32, ptr %83, align 4, !tbaa !5
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %83, align 4, !tbaa !5
  br label %384, !llvm.loop !19

400:                                              ; preds = %384
  br label %401

401:                                              ; preds = %400
  %402 = load i32, ptr %80, align 4, !tbaa !5
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %80, align 4, !tbaa !5
  br label %378, !llvm.loop !20

404:                                              ; preds = %378
  store i32 0, ptr %84, align 4, !tbaa !5
  br label %405

405:                                              ; preds = %1059, %404
  %406 = load i32, ptr %84, align 4, !tbaa !5
  %407 = load i32, ptr %55, align 4, !tbaa !5
  %408 = icmp slt i32 %406, %407
  br i1 %408, label %409, label %1062

409:                                              ; preds = %405
  %410 = load i32, ptr %84, align 4, !tbaa !5
  store i32 %410, ptr %85, align 4, !tbaa !5
  %411 = load i32, ptr %60, align 4, !tbaa !5
  %412 = icmp ne i32 %411, 0
  br i1 %412, label %430, label %413

413:                                              ; preds = %409
  %414 = load i32, ptr %38, align 4, !tbaa !5
  %415 = load i32, ptr %39, align 4, !tbaa !5
  %416 = load ptr, ptr %40, align 8, !tbaa !9
  %417 = load ptr, ptr %41, align 8, !tbaa !9
  %418 = load ptr, ptr %42, align 8, !tbaa !9
  %419 = load ptr, ptr %91, align 8, !tbaa !9
  %420 = load i32, ptr %84, align 4, !tbaa !5
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds ptr, ptr %419, i64 %421
  %423 = load ptr, ptr %422, align 8, !tbaa !9
  %424 = load ptr, ptr %91, align 8, !tbaa !9
  %425 = load i32, ptr %84, align 4, !tbaa !5
  %426 = add nsw i32 %425, 1
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds ptr, ptr %424, i64 %427
  %429 = load ptr, ptr %428, align 8, !tbaa !9
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %414, i32 noundef %415, ptr noundef %416, ptr noundef %417, ptr noundef %418, ptr noundef %423, ptr noundef %429)
  br label %448

430:                                              ; preds = %409
  %431 = load i32, ptr %38, align 4, !tbaa !5
  %432 = load ptr, ptr %40, align 8, !tbaa !9
  %433 = load ptr, ptr %41, align 8, !tbaa !9
  %434 = load ptr, ptr %42, align 8, !tbaa !9
  %435 = getelementptr inbounds [2 x double], ptr %94, i64 0, i64 0
  %436 = getelementptr inbounds [2 x double], ptr %95, i64 0, i64 0
  %437 = load ptr, ptr %91, align 8, !tbaa !9
  %438 = load i32, ptr %84, align 4, !tbaa !5
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds ptr, ptr %437, i64 %439
  %441 = load ptr, ptr %440, align 8, !tbaa !9
  %442 = load ptr, ptr %91, align 8, !tbaa !9
  %443 = load i32, ptr %84, align 4, !tbaa !5
  %444 = add nsw i32 %443, 1
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds ptr, ptr %442, i64 %445
  %447 = load ptr, ptr %446, align 8, !tbaa !9
  call void @_ZN5nasoq20spmv_csc_sym_one_intEiPiS0_PdiS1_S1_iS1_S1_(i32 noundef %431, ptr noundef %432, ptr noundef %433, ptr noundef %434, i32 noundef -1, ptr noundef %435, ptr noundef %436, i32 noundef 1, ptr noundef %441, ptr noundef %447)
  br label %448

448:                                              ; preds = %430, %413
  %449 = load i32, ptr %61, align 4, !tbaa !5
  %450 = icmp eq i32 %449, 2
  br i1 %450, label %451, label %484

451:                                              ; preds = %448
  %452 = load i32, ptr %38, align 4, !tbaa !5
  %453 = sext i32 %452 to i64
  %454 = load ptr, ptr %51, align 8, !tbaa !9
  %455 = load ptr, ptr %91, align 8, !tbaa !9
  %456 = load i32, ptr %84, align 4, !tbaa !5
  %457 = add nsw i32 %456, 1
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds ptr, ptr %455, i64 %458
  %460 = load ptr, ptr %459, align 8, !tbaa !9
  %461 = load ptr, ptr %48, align 8, !tbaa !9
  %462 = load ptr, ptr %49, align 8, !tbaa !9
  %463 = load ptr, ptr %43, align 8, !tbaa !9
  %464 = load ptr, ptr %44, align 8, !tbaa !9
  %465 = load ptr, ptr %45, align 8, !tbaa !9
  %466 = load ptr, ptr %47, align 8, !tbaa !9
  %467 = load i32, ptr %50, align 4, !tbaa !5
  %468 = sext i32 %467 to i64
  %469 = load i64, ptr %46, align 8, !tbaa !11
  %470 = trunc i64 %469 to i32
  %471 = load i32, ptr %62, align 4, !tbaa !5
  %472 = load ptr, ptr %63, align 8, !tbaa !9
  %473 = load ptr, ptr %64, align 8, !tbaa !9
  %474 = load i32, ptr %65, align 4, !tbaa !5
  %475 = load ptr, ptr %66, align 8, !tbaa !9
  %476 = load ptr, ptr %67, align 8, !tbaa !9
  %477 = load i32, ptr %71, align 4, !tbaa !5
  %478 = load i32, ptr %68, align 4, !tbaa !5
  %479 = load ptr, ptr %69, align 8, !tbaa !9
  %480 = load ptr, ptr %70, align 8, !tbaa !9
  %481 = load ptr, ptr %58, align 8, !tbaa !9
  %482 = load ptr, ptr %59, align 8, !tbaa !9
  %483 = load ptr, ptr %73, align 8, !tbaa !9
  call void @_ZN5nasoq48solve_phase_ldl_blocked_parallel_permuted_updateEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_iiS1_S1_PbS1_S0_(i64 noundef %453, ptr noundef %454, ptr noundef %460, ptr noundef %461, ptr noundef %462, ptr noundef %463, ptr noundef %464, ptr noundef %465, ptr noundef %466, i64 noundef %468, i32 noundef %470, i32 noundef %471, ptr noundef %472, ptr noundef %473, i32 noundef %474, ptr noundef %475, ptr noundef %476, i32 noundef %477, i32 noundef %478, ptr noundef %479, ptr noundef %480, ptr noundef %481, ptr noundef %482, ptr noundef %483)
  br label %528

484:                                              ; preds = %448
  %485 = load i32, ptr %61, align 4, !tbaa !5
  %486 = icmp eq i32 %485, 1
  br i1 %486, label %487, label %507

487:                                              ; preds = %484
  %488 = load i32, ptr %38, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = load ptr, ptr %51, align 8, !tbaa !9
  %491 = load ptr, ptr %91, align 8, !tbaa !9
  %492 = load i32, ptr %84, align 4, !tbaa !5
  %493 = add nsw i32 %492, 1
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds ptr, ptr %491, i64 %494
  %496 = load ptr, ptr %495, align 8, !tbaa !9
  %497 = load ptr, ptr %48, align 8, !tbaa !9
  %498 = load ptr, ptr %49, align 8, !tbaa !9
  %499 = load ptr, ptr %43, align 8, !tbaa !9
  %500 = load ptr, ptr %44, align 8, !tbaa !9
  %501 = load ptr, ptr %45, align 8, !tbaa !9
  %502 = load ptr, ptr %47, align 8, !tbaa !9
  %503 = load i32, ptr %50, align 4, !tbaa !5
  %504 = sext i32 %503 to i64
  %505 = load i64, ptr %46, align 8, !tbaa !11
  %506 = trunc i64 %505 to i32
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %489, ptr noundef %490, ptr noundef %496, ptr noundef %497, ptr noundef %498, ptr noundef %499, ptr noundef %500, ptr noundef %501, ptr noundef %502, i64 noundef %504, i32 noundef %506)
  br label %527

507:                                              ; preds = %484
  %508 = load i32, ptr %38, align 4, !tbaa !5
  %509 = sext i32 %508 to i64
  %510 = load ptr, ptr %51, align 8, !tbaa !9
  %511 = load ptr, ptr %91, align 8, !tbaa !9
  %512 = load i32, ptr %84, align 4, !tbaa !5
  %513 = add nsw i32 %512, 1
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds ptr, ptr %511, i64 %514
  %516 = load ptr, ptr %515, align 8, !tbaa !9
  %517 = load ptr, ptr %48, align 8, !tbaa !9
  %518 = load ptr, ptr %49, align 8, !tbaa !9
  %519 = load ptr, ptr %43, align 8, !tbaa !9
  %520 = load ptr, ptr %44, align 8, !tbaa !9
  %521 = load ptr, ptr %45, align 8, !tbaa !9
  %522 = load ptr, ptr %47, align 8, !tbaa !9
  %523 = load i32, ptr %50, align 4, !tbaa !5
  %524 = sext i32 %523 to i64
  %525 = load i64, ptr %46, align 8, !tbaa !11
  %526 = trunc i64 %525 to i32
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %509, ptr noundef %510, ptr noundef %516, ptr noundef %517, ptr noundef %518, ptr noundef %519, ptr noundef %520, ptr noundef %521, ptr noundef %522, i64 noundef %524, i32 noundef %526)
  br label %527

527:                                              ; preds = %507, %487
  br label %528

528:                                              ; preds = %527, %451
  %529 = load i32, ptr %38, align 4, !tbaa !5
  %530 = load ptr, ptr %91, align 8, !tbaa !9
  %531 = load i32, ptr %84, align 4, !tbaa !5
  %532 = add nsw i32 %531, 1
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds ptr, ptr %530, i64 %533
  %535 = load ptr, ptr %534, align 8, !tbaa !9
  %536 = load ptr, ptr %91, align 8, !tbaa !9
  %537 = load i32, ptr %84, align 4, !tbaa !5
  %538 = add nsw i32 %537, 1
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds ptr, ptr %536, i64 %539
  %541 = load ptr, ptr %540, align 8, !tbaa !9
  %542 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %529, ptr noundef %535, ptr noundef %541)
  %543 = call double @sqrt(double noundef %542) #9
  store double %543, ptr %74, align 8, !tbaa !13
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %544

544:                                              ; preds = %618, %528
  %545 = load i32, ptr %83, align 4, !tbaa !5
  %546 = load i32, ptr %84, align 4, !tbaa !5
  %547 = icmp sle i32 %545, %546
  br i1 %547, label %548, label %621

548:                                              ; preds = %544
  %549 = load i32, ptr %38, align 4, !tbaa !5
  %550 = load ptr, ptr %91, align 8, !tbaa !9
  %551 = load i32, ptr %84, align 4, !tbaa !5
  %552 = add nsw i32 %551, 1
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds ptr, ptr %550, i64 %553
  %555 = load ptr, ptr %554, align 8, !tbaa !9
  %556 = load ptr, ptr %91, align 8, !tbaa !9
  %557 = load i32, ptr %83, align 4, !tbaa !5
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds ptr, ptr %556, i64 %558
  %560 = load ptr, ptr %559, align 8, !tbaa !9
  %561 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %549, ptr noundef %555, ptr noundef %560)
  %562 = load ptr, ptr %78, align 8, !tbaa !9
  %563 = load i32, ptr %83, align 4, !tbaa !5
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds ptr, ptr %562, i64 %564
  %566 = load ptr, ptr %565, align 8, !tbaa !9
  %567 = load i32, ptr %84, align 4, !tbaa !5
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds double, ptr %566, i64 %568
  store double %561, ptr %569, align 8, !tbaa !13
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %570

570:                                              ; preds = %614, %548
  %571 = load i32, ptr %80, align 4, !tbaa !5
  %572 = load i32, ptr %38, align 4, !tbaa !5
  %573 = icmp slt i32 %571, %572
  br i1 %573, label %574, label %617

574:                                              ; preds = %570
  %575 = load ptr, ptr %91, align 8, !tbaa !9
  %576 = load i32, ptr %84, align 4, !tbaa !5
  %577 = add nsw i32 %576, 1
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds ptr, ptr %575, i64 %578
  %580 = load ptr, ptr %579, align 8, !tbaa !9
  %581 = load i32, ptr %80, align 4, !tbaa !5
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds double, ptr %580, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !13
  %585 = load ptr, ptr %78, align 8, !tbaa !9
  %586 = load i32, ptr %83, align 4, !tbaa !5
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds ptr, ptr %585, i64 %587
  %589 = load ptr, ptr %588, align 8, !tbaa !9
  %590 = load i32, ptr %84, align 4, !tbaa !5
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds double, ptr %589, i64 %591
  %593 = load double, ptr %592, align 8, !tbaa !13
  %594 = load ptr, ptr %91, align 8, !tbaa !9
  %595 = load i32, ptr %83, align 4, !tbaa !5
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds ptr, ptr %594, i64 %596
  %598 = load ptr, ptr %597, align 8, !tbaa !9
  %599 = load i32, ptr %80, align 4, !tbaa !5
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds double, ptr %598, i64 %600
  %602 = load double, ptr %601, align 8, !tbaa !13
  %603 = fneg double %593
  %604 = call double @llvm.fmuladd.f64(double %603, double %602, double %584)
  %605 = load ptr, ptr %91, align 8, !tbaa !9
  %606 = load i32, ptr %84, align 4, !tbaa !5
  %607 = add nsw i32 %606, 1
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds ptr, ptr %605, i64 %608
  %610 = load ptr, ptr %609, align 8, !tbaa !9
  %611 = load i32, ptr %80, align 4, !tbaa !5
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds double, ptr %610, i64 %612
  store double %604, ptr %613, align 8, !tbaa !13
  br label %614

614:                                              ; preds = %574
  %615 = load i32, ptr %80, align 4, !tbaa !5
  %616 = add nsw i32 %615, 1
  store i32 %616, ptr %80, align 4, !tbaa !5
  br label %570, !llvm.loop !21

617:                                              ; preds = %570
  br label %618

618:                                              ; preds = %617
  %619 = load i32, ptr %83, align 4, !tbaa !5
  %620 = add nsw i32 %619, 1
  store i32 %620, ptr %83, align 4, !tbaa !5
  br label %544, !llvm.loop !22

621:                                              ; preds = %544
  %622 = load i32, ptr %38, align 4, !tbaa !5
  %623 = load ptr, ptr %91, align 8, !tbaa !9
  %624 = load i32, ptr %84, align 4, !tbaa !5
  %625 = add nsw i32 %624, 1
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds ptr, ptr %623, i64 %626
  %628 = load ptr, ptr %627, align 8, !tbaa !9
  %629 = load ptr, ptr %91, align 8, !tbaa !9
  %630 = load i32, ptr %84, align 4, !tbaa !5
  %631 = add nsw i32 %630, 1
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds ptr, ptr %629, i64 %632
  %634 = load ptr, ptr %633, align 8, !tbaa !9
  %635 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %622, ptr noundef %628, ptr noundef %634)
  %636 = call double @sqrt(double noundef %635) #9
  %637 = load ptr, ptr %78, align 8, !tbaa !9
  %638 = load i32, ptr %84, align 4, !tbaa !5
  %639 = add nsw i32 %638, 1
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds ptr, ptr %637, i64 %640
  %642 = load ptr, ptr %641, align 8, !tbaa !9
  %643 = load i32, ptr %84, align 4, !tbaa !5
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds double, ptr %642, i64 %644
  store double %636, ptr %645, align 8, !tbaa !13
  %646 = load double, ptr %74, align 8, !tbaa !13
  %647 = load double, ptr %76, align 8, !tbaa !13
  %648 = load ptr, ptr %78, align 8, !tbaa !9
  %649 = load i32, ptr %84, align 4, !tbaa !5
  %650 = add nsw i32 %649, 1
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds ptr, ptr %648, i64 %651
  %653 = load ptr, ptr %652, align 8, !tbaa !9
  %654 = load i32, ptr %84, align 4, !tbaa !5
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds double, ptr %653, i64 %655
  %657 = load double, ptr %656, align 8, !tbaa !13
  %658 = call double @llvm.fmuladd.f64(double %647, double %657, double %646)
  %659 = load double, ptr %74, align 8, !tbaa !13
  %660 = fcmp oeq double %658, %659
  br i1 %660, label %661, label %768

661:                                              ; preds = %621
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %662

662:                                              ; preds = %740, %661
  %663 = load i32, ptr %83, align 4, !tbaa !5
  %664 = load i32, ptr %84, align 4, !tbaa !5
  %665 = add nsw i32 %664, 1
  %666 = icmp slt i32 %663, %665
  br i1 %666, label %667, label %743

667:                                              ; preds = %662
  %668 = load i32, ptr %38, align 4, !tbaa !5
  %669 = load ptr, ptr %91, align 8, !tbaa !9
  %670 = load i32, ptr %84, align 4, !tbaa !5
  %671 = add nsw i32 %670, 1
  %672 = sext i32 %671 to i64
  %673 = getelementptr inbounds ptr, ptr %669, i64 %672
  %674 = load ptr, ptr %673, align 8, !tbaa !9
  %675 = load ptr, ptr %91, align 8, !tbaa !9
  %676 = load i32, ptr %83, align 4, !tbaa !5
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds ptr, ptr %675, i64 %677
  %679 = load ptr, ptr %678, align 8, !tbaa !9
  %680 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %668, ptr noundef %674, ptr noundef %679)
  store double %680, ptr %79, align 8, !tbaa !13
  %681 = load ptr, ptr %78, align 8, !tbaa !9
  %682 = load i32, ptr %83, align 4, !tbaa !5
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds ptr, ptr %681, i64 %683
  %685 = load ptr, ptr %684, align 8, !tbaa !9
  %686 = load i32, ptr %84, align 4, !tbaa !5
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds double, ptr %685, i64 %687
  %689 = load double, ptr %688, align 8, !tbaa !13
  %690 = load double, ptr %79, align 8, !tbaa !13
  %691 = fadd double %689, %690
  %692 = load ptr, ptr %78, align 8, !tbaa !9
  %693 = load i32, ptr %83, align 4, !tbaa !5
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds ptr, ptr %692, i64 %694
  %696 = load ptr, ptr %695, align 8, !tbaa !9
  %697 = load i32, ptr %84, align 4, !tbaa !5
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds double, ptr %696, i64 %698
  store double %691, ptr %699, align 8, !tbaa !13
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %700

700:                                              ; preds = %736, %667
  %701 = load i32, ptr %80, align 4, !tbaa !5
  %702 = load i32, ptr %38, align 4, !tbaa !5
  %703 = icmp slt i32 %701, %702
  br i1 %703, label %704, label %739

704:                                              ; preds = %700
  %705 = load ptr, ptr %91, align 8, !tbaa !9
  %706 = load i32, ptr %84, 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 %80, 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 = load double, ptr %79, align 8, !tbaa !13
  %716 = load ptr, ptr %91, align 8, !tbaa !9
  %717 = load i32, ptr %83, align 4, !tbaa !5
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds ptr, ptr %716, i64 %718
  %720 = load ptr, ptr %719, align 8, !tbaa !9
  %721 = load i32, ptr %80, align 4, !tbaa !5
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds double, ptr %720, i64 %722
  %724 = load double, ptr %723, align 8, !tbaa !13
  %725 = fneg double %715
  %726 = call double @llvm.fmuladd.f64(double %725, double %724, double %714)
  %727 = load ptr, ptr %91, align 8, !tbaa !9
  %728 = load i32, ptr %84, align 4, !tbaa !5
  %729 = add nsw i32 %728, 1
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds ptr, ptr %727, i64 %730
  %732 = load ptr, ptr %731, align 8, !tbaa !9
  %733 = load i32, ptr %80, align 4, !tbaa !5
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds double, ptr %732, i64 %734
  store double %726, ptr %735, align 8, !tbaa !13
  br label %736

736:                                              ; preds = %704
  %737 = load i32, ptr %80, align 4, !tbaa !5
  %738 = add nsw i32 %737, 1
  store i32 %738, ptr %80, align 4, !tbaa !5
  br label %700, !llvm.loop !23

739:                                              ; preds = %700
  br label %740

740:                                              ; preds = %739
  %741 = load i32, ptr %83, align 4, !tbaa !5
  %742 = add nsw i32 %741, 1
  store i32 %742, ptr %83, align 4, !tbaa !5
  br label %662, !llvm.loop !24

743:                                              ; preds = %662
  %744 = load i32, ptr %38, align 4, !tbaa !5
  %745 = load ptr, ptr %91, align 8, !tbaa !9
  %746 = load i32, ptr %84, align 4, !tbaa !5
  %747 = add nsw i32 %746, 1
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds ptr, ptr %745, i64 %748
  %750 = load ptr, ptr %749, align 8, !tbaa !9
  %751 = load ptr, ptr %91, align 8, !tbaa !9
  %752 = load i32, ptr %84, align 4, !tbaa !5
  %753 = add nsw i32 %752, 1
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds ptr, ptr %751, i64 %754
  %756 = load ptr, ptr %755, align 8, !tbaa !9
  %757 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %744, ptr noundef %750, ptr noundef %756)
  %758 = call double @sqrt(double noundef %757) #9
  %759 = load ptr, ptr %78, align 8, !tbaa !9
  %760 = load i32, ptr %84, align 4, !tbaa !5
  %761 = add nsw i32 %760, 1
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds ptr, ptr %759, i64 %762
  %764 = load ptr, ptr %763, align 8, !tbaa !9
  %765 = load i32, ptr %84, align 4, !tbaa !5
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds double, ptr %764, i64 %766
  store double %758, ptr %767, align 8, !tbaa !13
  br label %768

768:                                              ; preds = %743, %621
  %769 = load ptr, ptr %78, align 8, !tbaa !9
  %770 = load i32, ptr %84, align 4, !tbaa !5
  %771 = add nsw i32 %770, 1
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds ptr, ptr %769, i64 %772
  %774 = load ptr, ptr %773, align 8, !tbaa !9
  %775 = load i32, ptr %84, align 4, !tbaa !5
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds double, ptr %774, i64 %776
  %778 = load double, ptr %777, align 8, !tbaa !13
  %779 = fcmp une double %778, 0.000000e+00
  br i1 %779, label %780, label %820

780:                                              ; preds = %768
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %781

781:                                              ; preds = %816, %780
  %782 = load i32, ptr %80, align 4, !tbaa !5
  %783 = load i32, ptr %38, align 4, !tbaa !5
  %784 = icmp slt i32 %782, %783
  br i1 %784, label %785, label %819

785:                                              ; preds = %781
  %786 = load ptr, ptr %91, align 8, !tbaa !9
  %787 = load i32, ptr %84, align 4, !tbaa !5
  %788 = add nsw i32 %787, 1
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds ptr, ptr %786, i64 %789
  %791 = load ptr, ptr %790, align 8, !tbaa !9
  %792 = load i32, ptr %80, align 4, !tbaa !5
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds double, ptr %791, i64 %793
  %795 = load double, ptr %794, align 8, !tbaa !13
  %796 = load ptr, ptr %78, align 8, !tbaa !9
  %797 = load i32, ptr %84, align 4, !tbaa !5
  %798 = add nsw i32 %797, 1
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds ptr, ptr %796, i64 %799
  %801 = load ptr, ptr %800, align 8, !tbaa !9
  %802 = load i32, ptr %84, align 4, !tbaa !5
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds double, ptr %801, i64 %803
  %805 = load double, ptr %804, align 8, !tbaa !13
  %806 = fdiv double %795, %805
  %807 = load ptr, ptr %91, align 8, !tbaa !9
  %808 = load i32, ptr %84, align 4, !tbaa !5
  %809 = add nsw i32 %808, 1
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds ptr, ptr %807, i64 %810
  %812 = load ptr, ptr %811, align 8, !tbaa !9
  %813 = load i32, ptr %80, align 4, !tbaa !5
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds double, ptr %812, i64 %814
  store double %806, ptr %815, align 8, !tbaa !13
  br label %816

816:                                              ; preds = %785
  %817 = load i32, ptr %80, align 4, !tbaa !5
  %818 = add nsw i32 %817, 1
  store i32 %818, ptr %80, align 4, !tbaa !5
  br label %781, !llvm.loop !25

819:                                              ; preds = %781
  br label %820

820:                                              ; preds = %819, %768
  %821 = load i32, ptr %84, align 4, !tbaa !5
  %822 = icmp slt i32 0, %821
  br i1 %822, label %823, label %891

823:                                              ; preds = %820
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %824

824:                                              ; preds = %843, %823
  %825 = load i32, ptr %80, align 4, !tbaa !5
  %826 = load i32, ptr %84, align 4, !tbaa !5
  %827 = add nsw i32 %826, 2
  %828 = icmp slt i32 %825, %827
  br i1 %828, label %829, label %846

829:                                              ; preds = %824
  %830 = load ptr, ptr %78, align 8, !tbaa !9
  %831 = load i32, ptr %80, align 4, !tbaa !5
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds ptr, ptr %830, i64 %832
  %834 = load ptr, ptr %833, align 8, !tbaa !9
  %835 = load i32, ptr %84, 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 = load ptr, ptr %93, align 8, !tbaa !9
  %840 = load i32, ptr %80, align 4, !tbaa !5
  %841 = sext i32 %840 to i64
  %842 = getelementptr inbounds double, ptr %839, i64 %841
  store double %838, ptr %842, align 8, !tbaa !13
  br label %843

843:                                              ; preds = %829
  %844 = load i32, ptr %80, align 4, !tbaa !5
  %845 = add nsw i32 %844, 1
  store i32 %845, ptr %80, align 4, !tbaa !5
  br label %824, !llvm.loop !26

846:                                              ; preds = %824
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %847

847:                                              ; preds = %864, %846
  %848 = load i32, ptr %83, align 4, !tbaa !5
  %849 = load i32, ptr %84, align 4, !tbaa !5
  %850 = icmp slt i32 %848, %849
  br i1 %850, label %851, label %867

851:                                              ; preds = %847
  %852 = load ptr, ptr %75, align 8, !tbaa !9
  %853 = load i32, ptr %83, align 4, !tbaa !5
  %854 = sext i32 %853 to i64
  %855 = getelementptr inbounds double, ptr %852, i64 %854
  %856 = load double, ptr %855, align 8, !tbaa !13
  %857 = load ptr, ptr %90, align 8, !tbaa !9
  %858 = load i32, ptr %83, align 4, !tbaa !5
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds double, ptr %857, i64 %859
  %861 = load double, ptr %860, align 8, !tbaa !13
  %862 = load i32, ptr %83, align 4, !tbaa !5
  %863 = load ptr, ptr %93, align 8, !tbaa !9
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %856, double noundef %861, i32 noundef %862, ptr noundef %863)
  br label %864

864:                                              ; preds = %851
  %865 = load i32, ptr %83, align 4, !tbaa !5
  %866 = add nsw i32 %865, 1
  store i32 %866, ptr %83, align 4, !tbaa !5
  br label %847, !llvm.loop !27

867:                                              ; preds = %847
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %868

868:                                              ; preds = %887, %867
  %869 = load i32, ptr %80, align 4, !tbaa !5
  %870 = load i32, ptr %84, align 4, !tbaa !5
  %871 = add nsw i32 %870, 2
  %872 = icmp slt i32 %869, %871
  br i1 %872, label %873, label %890

873:                                              ; preds = %868
  %874 = load ptr, ptr %93, align 8, !tbaa !9
  %875 = load i32, ptr %80, align 4, !tbaa !5
  %876 = sext i32 %875 to i64
  %877 = getelementptr inbounds double, ptr %874, i64 %876
  %878 = load double, ptr %877, align 8, !tbaa !13
  %879 = load ptr, ptr %78, align 8, !tbaa !9
  %880 = load i32, ptr %80, align 4, !tbaa !5
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds ptr, ptr %879, i64 %881
  %883 = load ptr, ptr %882, align 8, !tbaa !9
  %884 = load i32, ptr %84, align 4, !tbaa !5
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds double, ptr %883, i64 %885
  store double %878, ptr %886, align 8, !tbaa !13
  br label %887

887:                                              ; preds = %873
  %888 = load i32, ptr %80, align 4, !tbaa !5
  %889 = add nsw i32 %888, 1
  store i32 %889, ptr %80, align 4, !tbaa !5
  br label %868, !llvm.loop !28

890:                                              ; preds = %868
  br label %891

891:                                              ; preds = %890, %820
  %892 = load ptr, ptr %78, align 8, !tbaa !9
  %893 = load i32, ptr %84, align 4, !tbaa !5
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds ptr, ptr %892, i64 %894
  %896 = load ptr, ptr %895, align 8, !tbaa !9
  %897 = load i32, ptr %84, align 4, !tbaa !5
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds double, ptr %896, i64 %898
  %900 = load double, ptr %899, align 8, !tbaa !13
  %901 = load ptr, ptr %78, align 8, !tbaa !9
  %902 = load i32, ptr %84, align 4, !tbaa !5
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds ptr, ptr %901, i64 %903
  %905 = load ptr, ptr %904, align 8, !tbaa !9
  %906 = load i32, ptr %84, align 4, !tbaa !5
  %907 = sext i32 %906 to i64
  %908 = getelementptr inbounds double, ptr %905, i64 %907
  %909 = load double, ptr %908, align 8, !tbaa !13
  %910 = load ptr, ptr %78, align 8, !tbaa !9
  %911 = load i32, ptr %84, align 4, !tbaa !5
  %912 = add nsw i32 %911, 1
  %913 = sext i32 %912 to i64
  %914 = getelementptr inbounds ptr, ptr %910, i64 %913
  %915 = load ptr, ptr %914, align 8, !tbaa !9
  %916 = load i32, ptr %84, align 4, !tbaa !5
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds double, ptr %915, i64 %917
  %919 = load double, ptr %918, align 8, !tbaa !13
  %920 = load ptr, ptr %78, align 8, !tbaa !9
  %921 = load i32, ptr %84, align 4, !tbaa !5
  %922 = add nsw i32 %921, 1
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds ptr, ptr %920, i64 %923
  %925 = load ptr, ptr %924, align 8, !tbaa !9
  %926 = load i32, ptr %84, align 4, !tbaa !5
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds double, ptr %925, i64 %927
  %929 = load double, ptr %928, align 8, !tbaa !13
  %930 = fmul double %919, %929
  %931 = call double @llvm.fmuladd.f64(double %900, double %909, double %930)
  %932 = call double @sqrt(double noundef %931) #9
  store double %932, ptr %86, align 8, !tbaa !13
  %933 = load double, ptr %86, align 8, !tbaa !13
  %934 = fcmp oeq double %933, 0.000000e+00
  br i1 %934, label %935, label %947

935:                                              ; preds = %891
  %936 = load ptr, ptr %72, align 8, !tbaa !9
  %937 = load ptr, ptr %75, align 8, !tbaa !9
  %938 = load ptr, ptr %77, align 8, !tbaa !9
  %939 = load ptr, ptr %78, align 8, !tbaa !9
  %940 = load i32, ptr %55, align 4, !tbaa !5
  %941 = load ptr, ptr %87, align 8, !tbaa !9
  %942 = load ptr, ptr %90, align 8, !tbaa !9
  %943 = load ptr, ptr %91, align 8, !tbaa !9
  %944 = load i32, ptr %38, align 4, !tbaa !5
  %945 = load ptr, ptr %93, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %936, ptr noundef %937, ptr noundef %938, ptr noundef %939, i32 noundef %940, ptr noundef %941, ptr noundef %942, ptr noundef %943, i32 noundef %944, ptr noundef %945)
  %946 = load i32, ptr %82, align 4, !tbaa !5
  store i32 %946, ptr %37, align 4
  store i32 1, ptr %97, align 4
  br label %1248

947:                                              ; preds = %891
  %948 = load ptr, ptr %78, align 8, !tbaa !9
  %949 = load i32, ptr %84, align 4, !tbaa !5
  %950 = sext i32 %949 to i64
  %951 = getelementptr inbounds ptr, ptr %948, i64 %950
  %952 = load ptr, ptr %951, align 8, !tbaa !9
  %953 = load i32, ptr %84, align 4, !tbaa !5
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds double, ptr %952, i64 %954
  %956 = load double, ptr %955, align 8, !tbaa !13
  %957 = load double, ptr %86, align 8, !tbaa !13
  %958 = fdiv double %956, %957
  %959 = load ptr, ptr %75, align 8, !tbaa !9
  %960 = load i32, ptr %84, align 4, !tbaa !5
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds double, ptr %959, i64 %961
  store double %958, ptr %962, align 8, !tbaa !13
  %963 = load ptr, ptr %78, align 8, !tbaa !9
  %964 = load i32, ptr %84, align 4, !tbaa !5
  %965 = add nsw i32 %964, 1
  %966 = sext i32 %965 to i64
  %967 = getelementptr inbounds ptr, ptr %963, i64 %966
  %968 = load ptr, ptr %967, align 8, !tbaa !9
  %969 = load i32, ptr %84, align 4, !tbaa !5
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds double, ptr %968, i64 %970
  %972 = load double, ptr %971, align 8, !tbaa !13
  %973 = fneg double %972
  %974 = load double, ptr %86, align 8, !tbaa !13
  %975 = fdiv double %973, %974
  %976 = load ptr, ptr %90, align 8, !tbaa !9
  %977 = load i32, ptr %84, align 4, !tbaa !5
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds double, ptr %976, i64 %978
  store double %975, ptr %979, align 8, !tbaa !13
  %980 = load ptr, ptr %75, align 8, !tbaa !9
  %981 = load i32, ptr %84, align 4, !tbaa !5
  %982 = sext i32 %981 to i64
  %983 = getelementptr inbounds double, ptr %980, i64 %982
  %984 = load double, ptr %983, align 8, !tbaa !13
  %985 = load ptr, ptr %78, align 8, !tbaa !9
  %986 = load i32, ptr %84, align 4, !tbaa !5
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds ptr, ptr %985, i64 %987
  %989 = load ptr, ptr %988, align 8, !tbaa !9
  %990 = load i32, ptr %84, align 4, !tbaa !5
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds double, ptr %989, i64 %991
  %993 = load double, ptr %992, align 8, !tbaa !13
  %994 = load ptr, ptr %90, align 8, !tbaa !9
  %995 = load i32, ptr %84, align 4, !tbaa !5
  %996 = sext i32 %995 to i64
  %997 = getelementptr inbounds double, ptr %994, i64 %996
  %998 = load double, ptr %997, align 8, !tbaa !13
  %999 = load ptr, ptr %78, align 8, !tbaa !9
  %1000 = load i32, ptr %84, align 4, !tbaa !5
  %1001 = add nsw i32 %1000, 1
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds ptr, ptr %999, i64 %1002
  %1004 = load ptr, ptr %1003, align 8, !tbaa !9
  %1005 = load i32, ptr %84, align 4, !tbaa !5
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds double, ptr %1004, i64 %1006
  %1008 = load double, ptr %1007, align 8, !tbaa !13
  %1009 = fmul double %998, %1008
  %1010 = fneg double %1009
  %1011 = call double @llvm.fmuladd.f64(double %984, double %993, double %1010)
  %1012 = load ptr, ptr %78, align 8, !tbaa !9
  %1013 = load i32, ptr %84, align 4, !tbaa !5
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds ptr, ptr %1012, i64 %1014
  %1016 = load ptr, ptr %1015, align 8, !tbaa !9
  %1017 = load i32, ptr %84, align 4, !tbaa !5
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds double, ptr %1016, i64 %1018
  store double %1011, ptr %1019, align 8, !tbaa !13
  %1020 = load ptr, ptr %78, align 8, !tbaa !9
  %1021 = load i32, ptr %84, align 4, !tbaa !5
  %1022 = add nsw i32 %1021, 1
  %1023 = sext i32 %1022 to i64
  %1024 = getelementptr inbounds ptr, ptr %1020, i64 %1023
  %1025 = load ptr, ptr %1024, align 8, !tbaa !9
  %1026 = load i32, ptr %84, align 4, !tbaa !5
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds double, ptr %1025, i64 %1027
  store double 0.000000e+00, ptr %1028, align 8, !tbaa !13
  %1029 = load ptr, ptr %75, align 8, !tbaa !9
  %1030 = load i32, ptr %84, align 4, !tbaa !5
  %1031 = sext i32 %1030 to i64
  %1032 = getelementptr inbounds double, ptr %1029, i64 %1031
  %1033 = load double, ptr %1032, align 8, !tbaa !13
  %1034 = load ptr, ptr %90, align 8, !tbaa !9
  %1035 = load i32, ptr %84, align 4, !tbaa !5
  %1036 = sext i32 %1035 to i64
  %1037 = getelementptr inbounds double, ptr %1034, i64 %1036
  %1038 = load double, ptr %1037, align 8, !tbaa !13
  %1039 = load i32, ptr %84, align 4, !tbaa !5
  %1040 = load ptr, ptr %77, align 8, !tbaa !9
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %1033, double noundef %1038, i32 noundef %1039, ptr noundef %1040)
  %1041 = load ptr, ptr %77, align 8, !tbaa !9
  %1042 = load i32, ptr %84, align 4, !tbaa !5
  %1043 = add nsw i32 %1042, 1
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds double, ptr %1041, i64 %1044
  %1046 = load double, ptr %1045, align 8, !tbaa !13
  %1047 = call double @llvm.fabs.f64(double %1046)
  store double %1047, ptr %88, align 8, !tbaa !13
  %1048 = load i32, ptr %82, align 4, !tbaa !5
  %1049 = add nsw i32 %1048, 1
  store i32 %1049, ptr %82, align 4, !tbaa !5
  %1050 = load double, ptr %88, align 8, !tbaa !13
  %1051 = load double, ptr %89, align 8, !tbaa !13
  %1052 = fcmp ole double %1050, %1051
  br i1 %1052, label %1053, label %1058

1053:                                             ; preds = %947
  %1054 = load double, ptr %88, align 8, !tbaa !13
  %1055 = load double, ptr %56, align 8, !tbaa !13
  %1056 = fcmp ole double %1054, %1055
  br i1 %1056, label %1057, label %1058

1057:                                             ; preds = %1053
  br label %1062

1058:                                             ; preds = %1053, %947
  br label %1059

1059:                                             ; preds = %1058
  %1060 = load i32, ptr %84, align 4, !tbaa !5
  %1061 = add nsw i32 %1060, 1
  store i32 %1061, ptr %84, align 4, !tbaa !5
  br label %405, !llvm.loop !29

1062:                                             ; preds = %1057, %405
  %1063 = load i32, ptr %85, align 4, !tbaa !5
  store i32 %1063, ptr %84, align 4, !tbaa !5
  %1064 = load ptr, ptr %78, align 8, !tbaa !9
  %1065 = load i32, ptr %84, align 4, !tbaa !5
  %1066 = sext i32 %1065 to i64
  %1067 = getelementptr inbounds ptr, ptr %1064, i64 %1066
  %1068 = load ptr, ptr %1067, align 8, !tbaa !9
  %1069 = load i32, ptr %84, align 4, !tbaa !5
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds double, ptr %1068, i64 %1070
  %1072 = load double, ptr %1071, align 8, !tbaa !13
  %1073 = fcmp oeq double %1072, 0.000000e+00
  br i1 %1073, label %1074, label %1086

1074:                                             ; preds = %1062
  %1075 = load ptr, ptr %72, align 8, !tbaa !9
  %1076 = load ptr, ptr %75, align 8, !tbaa !9
  %1077 = load ptr, ptr %77, align 8, !tbaa !9
  %1078 = load ptr, ptr %78, align 8, !tbaa !9
  %1079 = load i32, ptr %55, align 4, !tbaa !5
  %1080 = load ptr, ptr %87, align 8, !tbaa !9
  %1081 = load ptr, ptr %90, align 8, !tbaa !9
  %1082 = load ptr, ptr %91, align 8, !tbaa !9
  %1083 = load i32, ptr %38, align 4, !tbaa !5
  %1084 = load ptr, ptr %93, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %1075, ptr noundef %1076, ptr noundef %1077, ptr noundef %1078, i32 noundef %1079, ptr noundef %1080, ptr noundef %1081, ptr noundef %1082, i32 noundef %1083, ptr noundef %1084)
  %1085 = load i32, ptr %82, align 4, !tbaa !5
  store i32 %1085, ptr %37, align 4
  store i32 1, ptr %97, align 4
  br label %1248

1086:                                             ; preds = %1062
  %1087 = load ptr, ptr %77, align 8, !tbaa !9
  %1088 = load i32, ptr %84, align 4, !tbaa !5
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds double, ptr %1087, i64 %1089
  %1091 = load double, ptr %1090, align 8, !tbaa !13
  %1092 = load ptr, ptr %78, align 8, !tbaa !9
  %1093 = load i32, ptr %84, align 4, !tbaa !5
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds ptr, ptr %1092, i64 %1094
  %1096 = load ptr, ptr %1095, align 8, !tbaa !9
  %1097 = load i32, ptr %84, align 4, !tbaa !5
  %1098 = sext i32 %1097 to i64
  %1099 = getelementptr inbounds double, ptr %1096, i64 %1098
  %1100 = load double, ptr %1099, align 8, !tbaa !13
  %1101 = fdiv double %1091, %1100
  %1102 = load ptr, ptr %93, align 8, !tbaa !9
  %1103 = load i32, ptr %84, align 4, !tbaa !5
  %1104 = sext i32 %1103 to i64
  %1105 = getelementptr inbounds double, ptr %1102, i64 %1104
  store double %1101, ptr %1105, align 8, !tbaa !13
  %1106 = load i32, ptr %84, align 4, !tbaa !5
  %1107 = sub nsw i32 %1106, 1
  store i32 %1107, ptr %80, align 4, !tbaa !5
  br label %1108

1108:                                             ; preds = %1177, %1086
  %1109 = load i32, ptr %80, align 4, !tbaa !5
  %1110 = icmp sle i32 0, %1109
  br i1 %1110, label %1111, label %1180

1111:                                             ; preds = %1108
  %1112 = load ptr, ptr %77, align 8, !tbaa !9
  %1113 = load i32, ptr %80, align 4, !tbaa !5
  %1114 = sext i32 %1113 to i64
  %1115 = getelementptr inbounds double, ptr %1112, i64 %1114
  %1116 = load double, ptr %1115, align 8, !tbaa !13
  %1117 = load ptr, ptr %93, align 8, !tbaa !9
  %1118 = load i32, ptr %80, align 4, !tbaa !5
  %1119 = sext i32 %1118 to i64
  %1120 = getelementptr inbounds double, ptr %1117, i64 %1119
  store double %1116, ptr %1120, align 8, !tbaa !13
  %1121 = load i32, ptr %80, align 4, !tbaa !5
  %1122 = add nsw i32 %1121, 1
  store i32 %1122, ptr %83, align 4, !tbaa !5
  br label %1123

1123:                                             ; preds = %1154, %1111
  %1124 = load i32, ptr %83, align 4, !tbaa !5
  %1125 = load i32, ptr %84, align 4, !tbaa !5
  %1126 = add nsw i32 %1125, 1
  %1127 = icmp slt i32 %1124, %1126
  br i1 %1127, label %1128, label %1157

1128:                                             ; preds = %1123
  %1129 = load ptr, ptr %93, align 8, !tbaa !9
  %1130 = load i32, ptr %80, align 4, !tbaa !5
  %1131 = sext i32 %1130 to i64
  %1132 = getelementptr inbounds double, ptr %1129, i64 %1131
  %1133 = load double, ptr %1132, align 8, !tbaa !13
  %1134 = load ptr, ptr %78, align 8, !tbaa !9
  %1135 = load i32, ptr %80, align 4, !tbaa !5
  %1136 = sext i32 %1135 to i64
  %1137 = getelementptr inbounds ptr, ptr %1134, i64 %1136
  %1138 = load ptr, ptr %1137, align 8, !tbaa !9
  %1139 = load i32, ptr %83, align 4, !tbaa !5
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds double, ptr %1138, i64 %1140
  %1142 = load double, ptr %1141, align 8, !tbaa !13
  %1143 = load ptr, ptr %93, align 8, !tbaa !9
  %1144 = load i32, ptr %83, align 4, !tbaa !5
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds double, ptr %1143, i64 %1145
  %1147 = load double, ptr %1146, align 8, !tbaa !13
  %1148 = fneg double %1142
  %1149 = call double @llvm.fmuladd.f64(double %1148, double %1147, double %1133)
  %1150 = load ptr, ptr %93, align 8, !tbaa !9
  %1151 = load i32, ptr %80, align 4, !tbaa !5
  %1152 = sext i32 %1151 to i64
  %1153 = getelementptr inbounds double, ptr %1150, i64 %1152
  store double %1149, ptr %1153, align 8, !tbaa !13
  br label %1154

1154:                                             ; preds = %1128
  %1155 = load i32, ptr %83, align 4, !tbaa !5
  %1156 = add nsw i32 %1155, 1
  store i32 %1156, ptr %83, align 4, !tbaa !5
  br label %1123, !llvm.loop !30

1157:                                             ; preds = %1123
  %1158 = load ptr, ptr %93, align 8, !tbaa !9
  %1159 = load i32, ptr %80, align 4, !tbaa !5
  %1160 = sext i32 %1159 to i64
  %1161 = getelementptr inbounds double, ptr %1158, i64 %1160
  %1162 = load double, ptr %1161, align 8, !tbaa !13
  %1163 = load ptr, ptr %78, align 8, !tbaa !9
  %1164 = load i32, ptr %80, align 4, !tbaa !5
  %1165 = sext i32 %1164 to i64
  %1166 = getelementptr inbounds ptr, ptr %1163, i64 %1165
  %1167 = load ptr, ptr %1166, align 8, !tbaa !9
  %1168 = load i32, ptr %80, align 4, !tbaa !5
  %1169 = sext i32 %1168 to i64
  %1170 = getelementptr inbounds double, ptr %1167, i64 %1169
  %1171 = load double, ptr %1170, align 8, !tbaa !13
  %1172 = fdiv double %1162, %1171
  %1173 = load ptr, ptr %93, align 8, !tbaa !9
  %1174 = load i32, ptr %80, align 4, !tbaa !5
  %1175 = sext i32 %1174 to i64
  %1176 = getelementptr inbounds double, ptr %1173, i64 %1175
  store double %1172, ptr %1176, align 8, !tbaa !13
  br label %1177

1177:                                             ; preds = %1157
  %1178 = load i32, ptr %80, align 4, !tbaa !5
  %1179 = add nsw i32 %1178, -1
  store i32 %1179, ptr %80, align 4, !tbaa !5
  br label %1108, !llvm.loop !31

1180:                                             ; preds = %1108
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %1181

1181:                                             ; preds = %1220, %1180
  %1182 = load i32, ptr %80, align 4, !tbaa !5
  %1183 = load i32, ptr %38, align 4, !tbaa !5
  %1184 = icmp slt i32 %1182, %1183
  br i1 %1184, label %1185, label %1223

1185:                                             ; preds = %1181
  store i32 0, ptr %83, align 4, !tbaa !5
  br label %1186

1186:                                             ; preds = %1216, %1185
  %1187 = load i32, ptr %83, align 4, !tbaa !5
  %1188 = load i32, ptr %84, align 4, !tbaa !5
  %1189 = add nsw i32 %1188, 1
  %1190 = icmp slt i32 %1187, %1189
  br i1 %1190, label %1191, label %1219

1191:                                             ; preds = %1186
  %1192 = load ptr, ptr %52, align 8, !tbaa !9
  %1193 = load i32, ptr %80, align 4, !tbaa !5
  %1194 = sext i32 %1193 to i64
  %1195 = getelementptr inbounds double, ptr %1192, i64 %1194
  %1196 = load double, ptr %1195, align 8, !tbaa !13
  %1197 = load ptr, ptr %91, align 8, !tbaa !9
  %1198 = load i32, ptr %83, align 4, !tbaa !5
  %1199 = sext i32 %1198 to i64
  %1200 = getelementptr inbounds ptr, ptr %1197, i64 %1199
  %1201 = load ptr, ptr %1200, align 8, !tbaa !9
  %1202 = load i32, ptr %80, align 4, !tbaa !5
  %1203 = sext i32 %1202 to i64
  %1204 = getelementptr inbounds double, ptr %1201, i64 %1203
  %1205 = load double, ptr %1204, align 8, !tbaa !13
  %1206 = load ptr, ptr %93, align 8, !tbaa !9
  %1207 = load i32, ptr %83, align 4, !tbaa !5
  %1208 = sext i32 %1207 to i64
  %1209 = getelementptr inbounds double, ptr %1206, i64 %1208
  %1210 = load double, ptr %1209, align 8, !tbaa !13
  %1211 = call double @llvm.fmuladd.f64(double %1205, double %1210, double %1196)
  %1212 = load ptr, ptr %52, align 8, !tbaa !9
  %1213 = load i32, ptr %80, align 4, !tbaa !5
  %1214 = sext i32 %1213 to i64
  %1215 = getelementptr inbounds double, ptr %1212, i64 %1214
  store double %1211, ptr %1215, align 8, !tbaa !13
  br label %1216

1216:                                             ; preds = %1191
  %1217 = load i32, ptr %83, align 4, !tbaa !5
  %1218 = add nsw i32 %1217, 1
  store i32 %1218, ptr %83, align 4, !tbaa !5
  br label %1186, !llvm.loop !32

1219:                                             ; preds = %1186
  br label %1220

1220:                                             ; preds = %1219
  %1221 = load i32, ptr %80, align 4, !tbaa !5
  %1222 = add nsw i32 %1221, 1
  store i32 %1222, ptr %80, align 4, !tbaa !5
  br label %1181, !llvm.loop !33

1223:                                             ; preds = %1181
  %1224 = load double, ptr %88, align 8, !tbaa !13
  %1225 = load double, ptr %89, align 8, !tbaa !13
  %1226 = fcmp ole double %1224, %1225
  br i1 %1226, label %1227, label %1232

1227:                                             ; preds = %1223
  %1228 = load double, ptr %88, align 8, !tbaa !13
  %1229 = load double, ptr %56, align 8, !tbaa !13
  %1230 = fcmp ole double %1228, %1229
  br i1 %1230, label %1231, label %1232

1231:                                             ; preds = %1227
  br label %1236

1232:                                             ; preds = %1227, %1223
  br label %1233

1233:                                             ; preds = %1232
  %1234 = load i32, ptr %81, align 4, !tbaa !5
  %1235 = add nsw i32 %1234, 1
  store i32 %1235, ptr %81, align 4, !tbaa !5
  br label %197, !llvm.loop !34

1236:                                             ; preds = %1231, %197
  %1237 = load ptr, ptr %72, align 8, !tbaa !9
  %1238 = load ptr, ptr %75, align 8, !tbaa !9
  %1239 = load ptr, ptr %77, align 8, !tbaa !9
  %1240 = load ptr, ptr %78, align 8, !tbaa !9
  %1241 = load i32, ptr %55, align 4, !tbaa !5
  %1242 = load ptr, ptr %87, align 8, !tbaa !9
  %1243 = load ptr, ptr %90, align 8, !tbaa !9
  %1244 = load ptr, ptr %91, align 8, !tbaa !9
  %1245 = load i32, ptr %38, align 4, !tbaa !5
  %1246 = load ptr, ptr %93, align 8, !tbaa !9
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %1237, ptr noundef %1238, ptr noundef %1239, ptr noundef %1240, i32 noundef %1241, ptr noundef %1242, ptr noundef %1243, ptr noundef %1244, i32 noundef %1245, ptr noundef %1246)
  %1247 = load i32, ptr %82, align 4, !tbaa !5
  store i32 %1247, ptr %37, align 4
  store i32 1, ptr %97, align 4
  br label %1248

1248:                                             ; preds = %1236, %1074, %935, %319
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, 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
  %1249 = load i32, ptr %37, align 4
  ret i32 %1249
}

declare void @_ZN5nasoq48solve_phase_ldl_blocked_parallel_permuted_updateEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_iiS1_S1_PbS1_S0_(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, i32 noundef, ptr noundef, ptr noundef, ptr 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._ZN5nasoq24pmgmres_ldlt_auto_updateEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddPbS0_iiiS0_S0_iS0_S0_iS0_S0_iS1_S1_.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 nounwind uwtable
declare dso_local noundef ptr @_ZN5nasoq16dmatrix_preallocEiiiiPd(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

; 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 @_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

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: mustprogress uwtable
define dso_local noundef i32 @_ZN5nasoq24pmgmres_ldlt_auto_updateEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddPbS0_iiiS0_S0_iS0_S0_iS0_S0_iS1_S1_(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, ptr noundef %20, ptr noundef %21, i32 noundef %22, i32 noundef %23, i32 noundef %24, ptr noundef %25, ptr noundef %26, i32 noundef %27, ptr noundef %28, ptr noundef %29, i32 noundef %30, ptr noundef %31, ptr noundef %32, i32 noundef %33, ptr noundef %34, ptr noundef %35) local_unnamed_addr #8 {
  %37 = alloca [2 x double], align 16
  %38 = alloca [2 x double], align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %37, ptr noundef nonnull align 16 dereferenceable(16) @__const._ZN5nasoq24pmgmres_ldlt_auto_updateEiiPiS0_PdPmS0_S1_mS2_S0_S0_iS1_S1_S1_iiddPbS0_iiiS0_S0_iS0_S0_iS0_S0_iS1_S1_.alp, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %38) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %38, i8 0, i64 16, i1 false)
  %39 = icmp eq ptr %34, null
  %40 = sext i32 %0 to i64
  br i1 %39, label %41, label %55

41:                                               ; preds = %36
  %42 = add nsw i32 %17, 1
  %43 = sext i32 %42 to i64
  %44 = shl nsw i64 %43, 3
  %45 = tail call noalias ptr @malloc(i64 noundef %44) #11
  %46 = tail call noalias ptr @malloc(i64 noundef %44) #11
  %47 = add nsw i32 %17, -1
  %48 = tail call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %47)
  %49 = shl nsw i64 %40, 3
  %50 = tail call noalias ptr @malloc(i64 noundef %49) #11
  %51 = tail call noalias ptr @malloc(i64 noundef %44) #11
  %52 = add nsw i32 %0, -1
  %53 = tail call noundef ptr @_ZN5nasoq7dmatrixEiiii(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %52)
  %54 = tail call noalias ptr @malloc(i64 noundef %44) #11
  br label %80

55:                                               ; preds = %36
  %56 = sext i32 %17 to i64
  %57 = getelementptr inbounds double, ptr %34, i64 %56
  %58 = getelementptr inbounds i8, ptr %57, i64 8
  %59 = add nsw i32 %17, 1
  %60 = shl nsw i32 %59, 1
  %61 = sext i32 %60 to i64
  %62 = getelementptr inbounds double, ptr %34, i64 %61
  %63 = getelementptr inbounds double, ptr %62, i64 %40
  %64 = mul nsw i32 %59, 3
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds double, ptr %34, i64 %65
  %67 = getelementptr inbounds double, ptr %66, i64 %40
  %68 = add nsw i32 %17, -1
  %69 = shl nsw i32 %59, 2
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds double, ptr %34, i64 %70
  %72 = getelementptr inbounds double, ptr %71, i64 %40
  %73 = tail call noundef ptr @_ZN5nasoq16dmatrix_preallocEiiiiPd(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %68, ptr noundef nonnull %72)
  %74 = add nsw i32 %0, -1
  %75 = mul nsw i32 %59, %17
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds double, ptr %71, i64 %76
  %78 = getelementptr inbounds double, ptr %77, i64 %40
  %79 = tail call noundef ptr @_ZN5nasoq16dmatrix_preallocEiiiiPd(i32 noundef 0, i32 noundef %17, i32 noundef 0, i32 noundef %74, ptr noundef nonnull %78)
  br label %80

80:                                               ; preds = %55, %41
  %.0515 = phi ptr [ %48, %41 ], [ %73, %55 ]
  %.0497 = phi ptr [ %46, %41 ], [ %58, %55 ]
  %.0496 = phi ptr [ %50, %41 ], [ %62, %55 ]
  %.0492 = phi ptr [ %51, %41 ], [ %63, %55 ]
  %.0491 = phi ptr [ %53, %41 ], [ %79, %55 ]
  %.0490 = phi ptr [ %45, %41 ], [ %34, %55 ]
  %.0489 = phi ptr [ %54, %41 ], [ %67, %55 ]
  %81 = icmp sgt i32 %16, 0
  br i1 %81, label %.lr.ph611, label %._crit_edge612

.lr.ph611:                                        ; preds = %80
  %.0496795 = ptrtoint ptr %.0496 to i64
  %.not = icmp eq i32 %22, 0
  %82 = icmp slt i32 %0, 1
  %83 = icmp eq i32 %23, 2
  %84 = icmp eq i32 %23, 1
  %85 = sext i32 %0 to i64
  %86 = sext i32 %12 to i64
  %87 = trunc i64 %8 to i32
  %.not528555 = icmp slt i32 %17, 1
  %88 = icmp sgt i32 %17, 0
  %89 = icmp slt i32 %0, 1
  %scevgep = getelementptr i8, ptr %.0497, i64 8
  %90 = zext i32 %17 to i64
  %91 = shl nuw nsw i64 %90, 3
  %92 = add i32 %17, 1
  %93 = sext i32 %17 to i64
  %wide.trip.count = zext i32 %0 to i64
  %wide.trip.count632 = zext nneg i32 %0 to i64
  %wide.trip.count643 = zext i32 %92 to i64
  %wide.trip.count648 = zext nneg i32 %0 to i64
  %wide.trip.count660 = zext nneg i32 %0 to i64
  %wide.trip.count670 = zext nneg i32 %0 to i64
  %wide.trip.count714 = zext nneg i32 %0 to i64
  %94 = shl nuw nsw i64 %wide.trip.count, 3
  %95 = shl nuw nsw i64 %wide.trip.count, 3
  %96 = shl nuw nsw i64 %wide.trip.count, 3
  %97 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep811 = getelementptr i8, ptr %.0496, i64 %97
  %scevgep812 = getelementptr i8, ptr %15, i64 %97
  %min.iters.check818 = icmp ult i32 %0, 4
  %bound0813 = icmp ult ptr %.0496, %scevgep812
  %bound1814 = icmp ugt ptr %scevgep811, %15
  %found.conflict815 = and i1 %bound0813, %bound1814
  %n.vec821 = and i64 %wide.trip.count, 2147483644
  %cmp.n830 = icmp eq i64 %n.vec821, %wide.trip.count
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %min.iters.check798 = icmp eq i32 %0, 1
  %n.vec801 = and i64 %wide.trip.count, 2147483646
  %cmp.n809 = icmp eq i64 %n.vec801, %wide.trip.count
  %xtraiter845 = and i64 %wide.trip.count643, 7
  %98 = icmp ult i32 %92, 8
  %unroll_iter = and i64 %wide.trip.count643, 4294967288
  %lcmp.mod846.not = icmp eq i64 %xtraiter845, 0
  %min.iters.check777 = icmp ult i32 %0, 4
  %n.vec780 = and i64 %wide.trip.count, 2147483644
  %cmp.n793 = icmp eq i64 %n.vec780, %wide.trip.count
  %xtraiter847 = and i64 %wide.trip.count, 1
  %lcmp.mod848.not = icmp eq i64 %xtraiter847, 0
  %99 = add nsw i64 %wide.trip.count, -1
  %min.iters.check750 = icmp ult i32 %0, 4
  %n.vec753 = and i64 %wide.trip.count, 2147483644
  %cmp.n764 = icmp eq i64 %n.vec753, %wide.trip.count
  %xtraiter850 = and i64 %wide.trip.count, 1
  %lcmp.mod851.not = icmp eq i64 %xtraiter850, 0
  %100 = 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 %101

101:                                              ; preds = %._crit_edge605, %.lr.ph611
  %.0493609 = phi double [ undef, %.lr.ph611 ], [ %.1, %._crit_edge605 ]
  %.0498608 = phi i32 [ undef, %.lr.ph611 ], [ %.2, %._crit_edge605 ]
  %.0504607 = phi i32 [ 0, %.lr.ph611 ], [ %.2506, %._crit_edge605 ]
  %.0508606 = phi i32 [ 0, %.lr.ph611 ], [ %493, %._crit_edge605 ]
  br i1 %.not, label %102, label %103

102:                                              ; preds = %101
  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 %.0496)
  br label %104

103:                                              ; preds = %101
  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 %37, ptr noundef nonnull %38, i32 noundef 1, ptr noundef %14, ptr noundef %.0496)
  br label %104

104:                                              ; preds = %103, %102
  br i1 %82, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %104
  %brmerge884 = select i1 %min.iters.check818, i1 true, i1 %found.conflict815
  br i1 %brmerge884, label %.lr.ph.preheader833, label %vector.body823

vector.body823:                                   ; preds = %.lr.ph.preheader, %vector.body823
  %index824 = phi i64 [ %index.next829, %vector.body823 ], [ 0, %.lr.ph.preheader ]
  %105 = getelementptr inbounds double, ptr %15, i64 %index824
  %106 = getelementptr inbounds i8, ptr %105, i64 16
  %wide.load825 = load <2 x double>, ptr %105, align 8, !tbaa !5, !alias.scope !9
  %wide.load826 = load <2 x double>, ptr %106, align 8, !tbaa !5, !alias.scope !9
  %107 = getelementptr inbounds double, ptr %.0496, i64 %index824
  %108 = getelementptr inbounds i8, ptr %107, i64 16
  %wide.load827 = load <2 x double>, ptr %107, align 8, !tbaa !5, !alias.scope !12, !noalias !9
  %wide.load828 = load <2 x double>, ptr %108, align 8, !tbaa !5, !alias.scope !12, !noalias !9
  %109 = fsub <2 x double> %wide.load825, %wide.load827
  %110 = fsub <2 x double> %wide.load826, %wide.load828
  store <2 x double> %109, ptr %107, align 8, !tbaa !5, !alias.scope !12, !noalias !9
  store <2 x double> %110, ptr %108, align 8, !tbaa !5, !alias.scope !12, !noalias !9
  %index.next829 = add nuw i64 %index824, 4
  %111 = icmp eq i64 %index.next829, %n.vec821
  br i1 %111, label %middle.block816, label %vector.body823, !llvm.loop !14

middle.block816:                                  ; preds = %vector.body823
  br i1 %cmp.n830, label %._crit_edge, label %.lr.ph.preheader833

.lr.ph.preheader833:                              ; preds = %.lr.ph.preheader, %middle.block816
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec821, %middle.block816 ]
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader833, %.lr.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %.lr.ph.prol ], [ %indvars.iv.ph, %.lr.ph.preheader833 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader833 ]
  %112 = getelementptr inbounds double, ptr %15, i64 %indvars.iv.prol
  %113 = load double, ptr %112, align 8, !tbaa !5
  %114 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv.prol
  %115 = load double, ptr %114, align 8, !tbaa !5
  %116 = fsub double %113, %115
  store double %116, ptr %114, align 8, !tbaa !5
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.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 %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !18

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader833
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader833 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %117 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %118 = icmp ugt i64 %117, -4
  br i1 %118, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %.lr.ph ], [ %indvars.iv.unr, %.lr.ph.prol.loopexit ]
  %119 = getelementptr inbounds double, ptr %15, i64 %indvars.iv
  %120 = load double, ptr %119, align 8, !tbaa !5
  %121 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv
  %122 = load double, ptr %121, align 8, !tbaa !5
  %123 = fsub double %120, %122
  store double %123, ptr %121, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %124 = getelementptr inbounds double, ptr %15, i64 %indvars.iv.next
  %125 = load double, ptr %124, align 8, !tbaa !5
  %126 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv.next
  %127 = load double, ptr %126, align 8, !tbaa !5
  %128 = fsub double %125, %127
  store double %128, ptr %126, align 8, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %129 = getelementptr inbounds double, ptr %15, i64 %indvars.iv.next.1
  %130 = load double, ptr %129, align 8, !tbaa !5
  %131 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv.next.1
  %132 = load double, ptr %131, align 8, !tbaa !5
  %133 = fsub double %130, %132
  store double %133, ptr %131, align 8, !tbaa !5
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %134 = getelementptr inbounds double, ptr %15, i64 %indvars.iv.next.2
  %135 = load double, ptr %134, align 8, !tbaa !5
  %136 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv.next.2
  %137 = load double, ptr %136, align 8, !tbaa !5
  %138 = fsub double %135, %137
  store double %138, ptr %136, align 8, !tbaa !5
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %._crit_edge, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block816, %104
  br i1 %83, label %139, label %140

139:                                              ; preds = %._crit_edge
  call void @_ZN5nasoq48solve_phase_ldl_blocked_parallel_permuted_updateEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_iiS1_S1_PbS1_S0_(i64 noundef %85, ptr noundef %13, ptr noundef %.0496, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %86, i32 noundef %87, i32 noundef %24, ptr noundef %25, ptr noundef %26, i32 noundef %27, ptr noundef %28, ptr noundef %29, i32 noundef %33, i32 noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %20, ptr noundef %21, ptr noundef %35)
  br label %143

140:                                              ; preds = %._crit_edge
  br i1 %84, label %141, label %142

141:                                              ; preds = %140
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %85, ptr noundef %13, ptr noundef %.0496, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %86, i32 noundef %87)
  br label %143

142:                                              ; preds = %140
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %85, ptr noundef %13, ptr noundef %.0496, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %86, i32 noundef %87)
  br label %143

143:                                              ; preds = %141, %142, %139
  %144 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %.0496, ptr noundef %.0496)
  %145 = call double @sqrt(double noundef %144) #10
  %146 = fcmp olt double %145, %18
  br i1 %146, label %147, label %148

147:                                              ; preds = %143
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %34, ptr noundef %.0490, ptr noundef %.0497, ptr noundef %.0515, i32 noundef %17, ptr noundef %.0496, ptr noundef %.0492, ptr noundef %.0491, i32 noundef %0, ptr noundef %.0489)
  br label %494

148:                                              ; preds = %143
  %149 = icmp eq i32 %.0508606, 0
  %150 = fmul double %145, %19
  %.1 = select i1 %149, double %150, double %.0493609
  br i1 %82, label %._crit_edge554, label %.lr.ph553

.lr.ph553:                                        ; preds = %148
  %151 = load ptr, ptr %.0491, align 8, !tbaa !21
  %152 = ptrtoint ptr %151 to i64
  %153 = sub i64 %152, %.0496795
  %diff.check = icmp ult i64 %153, 16
  %or.cond832 = select i1 %min.iters.check798, i1 true, i1 %diff.check
  br i1 %or.cond832, label %scalar.ph797.preheader, label %vector.ph799

vector.ph799:                                     ; preds = %.lr.ph553
  %broadcast.splatinsert806 = insertelement <2 x double> poison, double %145, i64 0
  %broadcast.splat807 = shufflevector <2 x double> %broadcast.splatinsert806, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body803

vector.body803:                                   ; preds = %vector.body803, %vector.ph799
  %index804 = phi i64 [ 0, %vector.ph799 ], [ %index.next808, %vector.body803 ]
  %154 = getelementptr inbounds double, ptr %.0496, i64 %index804
  %wide.load805 = load <2 x double>, ptr %154, align 8, !tbaa !5
  %155 = fdiv <2 x double> %wide.load805, %broadcast.splat807
  %156 = getelementptr inbounds double, ptr %151, i64 %index804
  store <2 x double> %155, ptr %156, align 8, !tbaa !5
  %index.next808 = add nuw i64 %index804, 2
  %157 = icmp eq i64 %index.next808, %n.vec801
  br i1 %157, label %middle.block796, label %vector.body803, !llvm.loop !23

middle.block796:                                  ; preds = %vector.body803
  br i1 %cmp.n809, label %._crit_edge554, label %scalar.ph797.preheader

scalar.ph797.preheader:                           ; preds = %middle.block796, %.lr.ph553
  %indvars.iv629.ph = phi i64 [ 0, %.lr.ph553 ], [ %n.vec801, %middle.block796 ]
  %158 = sub nsw i64 %wide.trip.count, %indvars.iv629.ph
  %xtraiter842 = and i64 %158, 3
  %lcmp.mod843.not = icmp eq i64 %xtraiter842, 0
  br i1 %lcmp.mod843.not, label %scalar.ph797.prol.loopexit, label %scalar.ph797.prol

scalar.ph797.prol:                                ; preds = %scalar.ph797.preheader, %scalar.ph797.prol
  %indvars.iv629.prol = phi i64 [ %indvars.iv.next630.prol, %scalar.ph797.prol ], [ %indvars.iv629.ph, %scalar.ph797.preheader ]
  %prol.iter844 = phi i64 [ %prol.iter844.next, %scalar.ph797.prol ], [ 0, %scalar.ph797.preheader ]
  %159 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv629.prol
  %160 = load double, ptr %159, align 8, !tbaa !5
  %161 = fdiv double %160, %145
  %162 = getelementptr inbounds double, ptr %151, i64 %indvars.iv629.prol
  store double %161, ptr %162, align 8, !tbaa !5
  %indvars.iv.next630.prol = add nuw nsw i64 %indvars.iv629.prol, 1
  %prol.iter844.next = add i64 %prol.iter844, 1
  %prol.iter844.cmp.not = icmp eq i64 %prol.iter844.next, %xtraiter842
  br i1 %prol.iter844.cmp.not, label %scalar.ph797.prol.loopexit, label %scalar.ph797.prol, !llvm.loop !24

scalar.ph797.prol.loopexit:                       ; preds = %scalar.ph797.prol, %scalar.ph797.preheader
  %indvars.iv629.unr = phi i64 [ %indvars.iv629.ph, %scalar.ph797.preheader ], [ %indvars.iv.next630.prol, %scalar.ph797.prol ]
  %163 = sub nsw i64 %indvars.iv629.ph, %wide.trip.count
  %164 = icmp ugt i64 %163, -4
  br i1 %164, label %._crit_edge554, label %scalar.ph797

scalar.ph797:                                     ; preds = %scalar.ph797.prol.loopexit, %scalar.ph797
  %indvars.iv629 = phi i64 [ %indvars.iv.next630.3, %scalar.ph797 ], [ %indvars.iv629.unr, %scalar.ph797.prol.loopexit ]
  %165 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv629
  %166 = load double, ptr %165, align 8, !tbaa !5
  %167 = fdiv double %166, %145
  %168 = getelementptr inbounds double, ptr %151, i64 %indvars.iv629
  store double %167, ptr %168, align 8, !tbaa !5
  %indvars.iv.next630 = add nuw nsw i64 %indvars.iv629, 1
  %169 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv.next630
  %170 = load double, ptr %169, align 8, !tbaa !5
  %171 = fdiv double %170, %145
  %172 = getelementptr inbounds double, ptr %151, i64 %indvars.iv.next630
  store double %171, ptr %172, align 8, !tbaa !5
  %indvars.iv.next630.1 = add nuw nsw i64 %indvars.iv629, 2
  %173 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv.next630.1
  %174 = load double, ptr %173, align 8, !tbaa !5
  %175 = fdiv double %174, %145
  %176 = getelementptr inbounds double, ptr %151, i64 %indvars.iv.next630.1
  store double %175, ptr %176, align 8, !tbaa !5
  %indvars.iv.next630.2 = add nuw nsw i64 %indvars.iv629, 3
  %177 = getelementptr inbounds double, ptr %.0496, i64 %indvars.iv.next630.2
  %178 = load double, ptr %177, align 8, !tbaa !5
  %179 = fdiv double %178, %145
  %180 = getelementptr inbounds double, ptr %151, i64 %indvars.iv.next630.2
  store double %179, ptr %180, align 8, !tbaa !5
  %indvars.iv.next630.3 = add nuw nsw i64 %indvars.iv629, 4
  %exitcond633.not.3 = icmp eq i64 %indvars.iv.next630.3, %wide.trip.count632
  br i1 %exitcond633.not.3, label %._crit_edge554, label %scalar.ph797, !llvm.loop !25

._crit_edge554:                                   ; preds = %scalar.ph797.prol.loopexit, %scalar.ph797, %middle.block796, %148
  store double %145, ptr %.0497, align 8, !tbaa !5
  br i1 %.not528555, label %._crit_edge582, label %.preheader542.us.preheader

.preheader542.us.preheader:                       ; preds = %._crit_edge554
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %91, i1 false), !tbaa !5
  br i1 %98, label %.preheader544.unr-lcssa, label %.preheader542.us

.preheader542.us:                                 ; preds = %.preheader542.us.preheader, %.preheader542.us
  %indvars.iv640 = phi i64 [ %indvars.iv.next641.7, %.preheader542.us ], [ 0, %.preheader542.us.preheader ]
  %niter = phi i64 [ %niter.next.7, %.preheader542.us ], [ 0, %.preheader542.us.preheader ]
  %181 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv640
  %182 = load ptr, ptr %181, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %182, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641 = or disjoint i64 %indvars.iv640, 1
  %183 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next641
  %184 = load ptr, ptr %183, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %184, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.1 = or disjoint i64 %indvars.iv640, 2
  %185 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next641.1
  %186 = load ptr, ptr %185, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %186, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.2 = or disjoint i64 %indvars.iv640, 3
  %187 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next641.2
  %188 = load ptr, ptr %187, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %188, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.3 = or disjoint i64 %indvars.iv640, 4
  %189 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next641.3
  %190 = load ptr, ptr %189, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %190, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.4 = or disjoint i64 %indvars.iv640, 5
  %191 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next641.4
  %192 = load ptr, ptr %191, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %192, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.5 = or disjoint i64 %indvars.iv640, 6
  %193 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next641.5
  %194 = load ptr, ptr %193, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %194, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.6 = or disjoint i64 %indvars.iv640, 7
  %195 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next641.6
  %196 = load ptr, ptr %195, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %196, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.7 = add nuw nsw i64 %indvars.iv640, 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 %.preheader544.unr-lcssa, label %.preheader542.us, !llvm.loop !26

.preheader544.unr-lcssa:                          ; preds = %.preheader542.us, %.preheader542.us.preheader
  %indvars.iv640.unr = phi i64 [ 0, %.preheader542.us.preheader ], [ %indvars.iv.next641.7, %.preheader542.us ]
  br i1 %lcmp.mod846.not, label %.preheader544, label %.preheader542.us.epil

.preheader542.us.epil:                            ; preds = %.preheader544.unr-lcssa, %.preheader542.us.epil
  %indvars.iv640.epil = phi i64 [ %indvars.iv.next641.epil, %.preheader542.us.epil ], [ %indvars.iv640.unr, %.preheader544.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.preheader542.us.epil ], [ 0, %.preheader544.unr-lcssa ]
  %197 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv640.epil
  %198 = load ptr, ptr %197, align 8, !tbaa !21
  call void @llvm.memset.p0.i64(ptr align 8 %198, i8 0, i64 %91, i1 false), !tbaa !5
  %indvars.iv.next641.epil = add nuw nsw i64 %indvars.iv640.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter845
  br i1 %epil.iter.cmp.not, label %.preheader544, label %.preheader542.us.epil, !llvm.loop !27

.preheader544:                                    ; preds = %.preheader542.us.epil, %.preheader544.unr-lcssa
  br i1 %88, label %.lr.ph581, label %._crit_edge582

.lr.ph581:                                        ; preds = %.preheader544, %413
  %indvars.iv693 = phi i64 [ %210, %413 ], [ 0, %.preheader544 ]
  %indvars.iv691 = phi i64 [ %indvars.iv.next692, %413 ], [ 1, %.preheader544 ]
  %indvars.iv689 = phi i64 [ %indvars.iv.next690, %413 ], [ 2, %.preheader544 ]
  %.1505579 = phi i32 [ %432, %413 ], [ %.0504607, %.preheader544 ]
  %199 = shl nuw nsw i64 %indvars.iv693, 3
  %200 = shl nuw nsw i64 %indvars.iv693, 3
  %201 = add nuw i64 %200, 8
  %202 = getelementptr inbounds ptr, ptr %.0491, i64 %indvars.iv693
  %203 = load ptr, ptr %202, align 8, !tbaa !21
  %204 = add nuw nsw i64 %indvars.iv693, 1
  %205 = getelementptr inbounds ptr, ptr %.0491, i64 %204
  %206 = load ptr, ptr %205, align 8, !tbaa !21
  br i1 %.not, label %207, label %208

207:                                              ; preds = %.lr.ph581
  call void @_ZN5nasoq5ax_crEiiPiS0_PdS1_S1_(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %203, ptr noundef %206)
  br label %209

208:                                              ; preds = %.lr.ph581
  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 %37, ptr noundef nonnull %38, i32 noundef 1, ptr noundef %203, ptr noundef %206)
  br label %209

209:                                              ; preds = %208, %207
  %210 = add nuw nsw i64 %indvars.iv693, 1
  %211 = getelementptr inbounds ptr, ptr %.0491, i64 %210
  %212 = load ptr, ptr %211, align 8, !tbaa !21
  br i1 %83, label %213, label %214

213:                                              ; preds = %209
  call void @_ZN5nasoq48solve_phase_ldl_blocked_parallel_permuted_updateEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_iiS1_S1_PbS1_S0_(i64 noundef %85, ptr noundef %13, ptr noundef %212, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %86, i32 noundef %87, i32 noundef %24, ptr noundef %25, ptr noundef %26, i32 noundef %27, ptr noundef %28, ptr noundef %29, i32 noundef %33, i32 noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %20, ptr noundef %21, ptr noundef %35)
  br label %217

214:                                              ; preds = %209
  br i1 %84, label %215, label %216

215:                                              ; preds = %214
  call void @_ZN5nasoq23solve_phase_ldl_blockedEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %85, ptr noundef %13, ptr noundef %212, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %86, i32 noundef %87)
  br label %217

216:                                              ; preds = %214
  call void @_ZN5nasoq15solve_phase_ldlEmPdS0_PiS1_PmS1_S0_S2_mi(i64 noundef %85, ptr noundef %13, ptr noundef %212, ptr noundef %10, ptr noundef %11, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %9, i64 noundef %86, i32 noundef %87)
  br label %217

217:                                              ; preds = %215, %216, %213
  %218 = getelementptr inbounds ptr, ptr %.0491, i64 %210
  %219 = load ptr, ptr %218, align 8, !tbaa !21
  %220 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %219, ptr noundef %219)
  %221 = call double @sqrt(double noundef %220) #10
  br label %222

222:                                              ; preds = %217, %._crit_edge567
  %indvars.iv650 = phi i64 [ 0, %217 ], [ %indvars.iv.next651, %._crit_edge567 ]
  %223 = load ptr, ptr %218, align 8, !tbaa !21
  %224 = getelementptr inbounds ptr, ptr %.0491, i64 %indvars.iv650
  %225 = load ptr, ptr %224, align 8, !tbaa !21
  %226 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %223, ptr noundef %225)
  %227 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv650
  %228 = load ptr, ptr %227, align 8, !tbaa !21
  %229 = getelementptr inbounds double, ptr %228, i64 %indvars.iv693
  store double %226, ptr %229, align 8, !tbaa !5
  br i1 %82, label %._crit_edge567, label %.lr.ph566

.lr.ph566:                                        ; preds = %222
  %230 = load ptr, ptr %218, align 8, !tbaa !21
  %231 = load ptr, ptr %224, align 8, !tbaa !21
  br i1 %min.iters.check777, label %scalar.ph776.preheader, label %vector.memcheck765

vector.memcheck765:                               ; preds = %.lr.ph566
  %scevgep766 = getelementptr i8, ptr %230, i64 %96
  %232 = getelementptr i8, ptr %228, i64 %199
  %scevgep767 = getelementptr i8, ptr %232, i64 8
  %scevgep768 = getelementptr i8, ptr %231, i64 %96
  %bound0769 = icmp ult ptr %230, %scevgep767
  %bound1770 = icmp ult ptr %229, %scevgep766
  %found.conflict771 = and i1 %bound0769, %bound1770
  %bound0772 = icmp ult ptr %230, %scevgep768
  %bound1773 = icmp ult ptr %231, %scevgep766
  %found.conflict774 = and i1 %bound0772, %bound1773
  %conflict.rdx = or i1 %found.conflict771, %found.conflict774
  br i1 %conflict.rdx, label %scalar.ph776.preheader, label %vector.ph778

vector.ph778:                                     ; preds = %vector.memcheck765
  %233 = load double, ptr %229, align 8, !tbaa !5, !alias.scope !28
  %broadcast.splatinsert790 = insertelement <2 x double> poison, double %233, i64 0
  %broadcast.splat791 = shufflevector <2 x double> %broadcast.splatinsert790, <2 x double> poison, <2 x i32> zeroinitializer
  %234 = fneg <2 x double> %broadcast.splat791
  %235 = fneg <2 x double> %broadcast.splat791
  br label %vector.body782

vector.body782:                                   ; preds = %vector.body782, %vector.ph778
  %index783 = phi i64 [ 0, %vector.ph778 ], [ %index.next792, %vector.body782 ]
  %236 = getelementptr inbounds double, ptr %230, i64 %index783
  %237 = getelementptr inbounds i8, ptr %236, i64 16
  %wide.load784 = load <2 x double>, ptr %236, align 8, !tbaa !5, !alias.scope !31, !noalias !33
  %wide.load785 = load <2 x double>, ptr %237, align 8, !tbaa !5, !alias.scope !31, !noalias !33
  %238 = getelementptr inbounds double, ptr %231, i64 %index783
  %239 = getelementptr inbounds i8, ptr %238, i64 16
  %wide.load786 = load <2 x double>, ptr %238, align 8, !tbaa !5, !alias.scope !35
  %wide.load787 = load <2 x double>, ptr %239, align 8, !tbaa !5, !alias.scope !35
  %240 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %234, <2 x double> %wide.load786, <2 x double> %wide.load784)
  %241 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %235, <2 x double> %wide.load787, <2 x double> %wide.load785)
  store <2 x double> %240, ptr %236, align 8, !tbaa !5, !alias.scope !31, !noalias !33
  store <2 x double> %241, ptr %237, align 8, !tbaa !5, !alias.scope !31, !noalias !33
  %index.next792 = add nuw i64 %index783, 4
  %242 = icmp eq i64 %index.next792, %n.vec780
  br i1 %242, label %middle.block775, label %vector.body782, !llvm.loop !36

middle.block775:                                  ; preds = %vector.body782
  br i1 %cmp.n793, label %._crit_edge567, label %scalar.ph776.preheader

scalar.ph776.preheader:                           ; preds = %middle.block775, %vector.memcheck765, %.lr.ph566
  %indvars.iv645.ph = phi i64 [ 0, %vector.memcheck765 ], [ 0, %.lr.ph566 ], [ %n.vec780, %middle.block775 ]
  br i1 %lcmp.mod848.not, label %scalar.ph776.prol.loopexit, label %scalar.ph776.prol

scalar.ph776.prol:                                ; preds = %scalar.ph776.preheader
  %243 = getelementptr inbounds double, ptr %230, i64 %indvars.iv645.ph
  %244 = load double, ptr %243, align 8, !tbaa !5
  %245 = load double, ptr %229, align 8, !tbaa !5
  %246 = getelementptr inbounds double, ptr %231, i64 %indvars.iv645.ph
  %247 = load double, ptr %246, align 8, !tbaa !5
  %248 = fneg double %245
  %249 = call double @llvm.fmuladd.f64(double %248, double %247, double %244)
  store double %249, ptr %243, align 8, !tbaa !5
  %indvars.iv.next646.prol = or disjoint i64 %indvars.iv645.ph, 1
  br label %scalar.ph776.prol.loopexit

scalar.ph776.prol.loopexit:                       ; preds = %scalar.ph776.prol, %scalar.ph776.preheader
  %indvars.iv645.unr = phi i64 [ %indvars.iv645.ph, %scalar.ph776.preheader ], [ %indvars.iv.next646.prol, %scalar.ph776.prol ]
  %250 = icmp eq i64 %indvars.iv645.ph, %99
  br i1 %250, label %._crit_edge567, label %scalar.ph776

scalar.ph776:                                     ; preds = %scalar.ph776.prol.loopexit, %scalar.ph776
  %indvars.iv645 = phi i64 [ %indvars.iv.next646.1, %scalar.ph776 ], [ %indvars.iv645.unr, %scalar.ph776.prol.loopexit ]
  %251 = getelementptr inbounds double, ptr %230, i64 %indvars.iv645
  %252 = load double, ptr %251, align 8, !tbaa !5
  %253 = load double, ptr %229, align 8, !tbaa !5
  %254 = getelementptr inbounds double, ptr %231, i64 %indvars.iv645
  %255 = load double, ptr %254, align 8, !tbaa !5
  %256 = fneg double %253
  %257 = call double @llvm.fmuladd.f64(double %256, double %255, double %252)
  store double %257, ptr %251, align 8, !tbaa !5
  %indvars.iv.next646 = add nuw nsw i64 %indvars.iv645, 1
  %258 = getelementptr inbounds double, ptr %230, i64 %indvars.iv.next646
  %259 = load double, ptr %258, align 8, !tbaa !5
  %260 = load double, ptr %229, align 8, !tbaa !5
  %261 = getelementptr inbounds double, ptr %231, i64 %indvars.iv.next646
  %262 = load double, ptr %261, align 8, !tbaa !5
  %263 = fneg double %260
  %264 = call double @llvm.fmuladd.f64(double %263, double %262, double %259)
  store double %264, ptr %258, align 8, !tbaa !5
  %indvars.iv.next646.1 = add nuw nsw i64 %indvars.iv645, 2
  %exitcond649.not.1 = icmp eq i64 %indvars.iv.next646.1, %wide.trip.count648
  br i1 %exitcond649.not.1, label %._crit_edge567, label %scalar.ph776, !llvm.loop !37

._crit_edge567:                                   ; preds = %scalar.ph776.prol.loopexit, %scalar.ph776, %middle.block775, %222
  %indvars.iv.next651 = add nuw nsw i64 %indvars.iv650, 1
  %exitcond656.not = icmp eq i64 %indvars.iv.next651, %indvars.iv691
  br i1 %exitcond656.not, label %265, label %222, !llvm.loop !38

265:                                              ; preds = %._crit_edge567
  %266 = load ptr, ptr %218, align 8, !tbaa !21
  %267 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %266, ptr noundef %266)
  %268 = call double @sqrt(double noundef %267) #10
  %269 = getelementptr inbounds ptr, ptr %.0515, i64 %210
  %270 = load ptr, ptr %269, align 8, !tbaa !21
  %271 = getelementptr inbounds double, ptr %270, i64 %indvars.iv693
  store double %268, ptr %271, align 8, !tbaa !5
  %272 = call double @llvm.fmuladd.f64(double %268, double 1.000000e-03, double %221)
  %273 = fcmp oeq double %272, %221
  br i1 %273, label %.preheader541, label %315

.preheader541:                                    ; preds = %265, %._crit_edge572
  %indvars.iv662 = phi i64 [ %indvars.iv.next663, %._crit_edge572 ], [ 0, %265 ]
  %274 = load ptr, ptr %218, align 8, !tbaa !21
  %275 = getelementptr inbounds ptr, ptr %.0491, i64 %indvars.iv662
  %276 = load ptr, ptr %275, align 8, !tbaa !21
  %277 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %274, ptr noundef %276)
  %278 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv662
  %279 = load ptr, ptr %278, align 8, !tbaa !21
  %280 = getelementptr inbounds double, ptr %279, i64 %indvars.iv693
  %281 = load double, ptr %280, align 8, !tbaa !5
  %282 = fadd double %277, %281
  store double %282, ptr %280, align 8, !tbaa !5
  br i1 %82, label %._crit_edge572, label %.lr.ph571

.lr.ph571:                                        ; preds = %.preheader541
  %283 = load ptr, ptr %218, align 8, !tbaa !21
  %284 = load ptr, ptr %275, align 8, !tbaa !21
  %285 = fneg double %277
  br i1 %min.iters.check750, label %scalar.ph749.preheader, label %vector.memcheck742

vector.memcheck742:                               ; preds = %.lr.ph571
  %scevgep743 = getelementptr i8, ptr %283, i64 %95
  %scevgep744 = getelementptr i8, ptr %284, i64 %95
  %bound0745 = icmp ult ptr %283, %scevgep744
  %bound1746 = icmp ult ptr %284, %scevgep743
  %found.conflict747 = and i1 %bound0745, %bound1746
  br i1 %found.conflict747, label %scalar.ph749.preheader, label %vector.ph751

vector.ph751:                                     ; preds = %vector.memcheck742
  %broadcast.splatinsert761 = insertelement <2 x double> poison, double %285, i64 0
  %broadcast.splat762 = shufflevector <2 x double> %broadcast.splatinsert761, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body755

vector.body755:                                   ; preds = %vector.body755, %vector.ph751
  %index756 = phi i64 [ 0, %vector.ph751 ], [ %index.next763, %vector.body755 ]
  %286 = getelementptr inbounds double, ptr %283, i64 %index756
  %287 = getelementptr inbounds i8, ptr %286, i64 16
  %wide.load757 = load <2 x double>, ptr %286, align 8, !tbaa !5, !alias.scope !39, !noalias !42
  %wide.load758 = load <2 x double>, ptr %287, align 8, !tbaa !5, !alias.scope !39, !noalias !42
  %288 = getelementptr inbounds double, ptr %284, i64 %index756
  %289 = getelementptr inbounds i8, ptr %288, i64 16
  %wide.load759 = load <2 x double>, ptr %288, align 8, !tbaa !5, !alias.scope !42
  %wide.load760 = load <2 x double>, ptr %289, align 8, !tbaa !5, !alias.scope !42
  %290 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat762, <2 x double> %wide.load759, <2 x double> %wide.load757)
  %291 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat762, <2 x double> %wide.load760, <2 x double> %wide.load758)
  store <2 x double> %290, ptr %286, align 8, !tbaa !5, !alias.scope !39, !noalias !42
  store <2 x double> %291, ptr %287, align 8, !tbaa !5, !alias.scope !39, !noalias !42
  %index.next763 = add nuw i64 %index756, 4
  %292 = icmp eq i64 %index.next763, %n.vec753
  br i1 %292, label %middle.block748, label %vector.body755, !llvm.loop !44

middle.block748:                                  ; preds = %vector.body755
  br i1 %cmp.n764, label %._crit_edge572, label %scalar.ph749.preheader

scalar.ph749.preheader:                           ; preds = %middle.block748, %vector.memcheck742, %.lr.ph571
  %indvars.iv657.ph = phi i64 [ 0, %vector.memcheck742 ], [ 0, %.lr.ph571 ], [ %n.vec753, %middle.block748 ]
  br i1 %lcmp.mod851.not, label %scalar.ph749.prol.loopexit, label %scalar.ph749.prol

scalar.ph749.prol:                                ; preds = %scalar.ph749.preheader
  %293 = getelementptr inbounds double, ptr %283, i64 %indvars.iv657.ph
  %294 = load double, ptr %293, align 8, !tbaa !5
  %295 = getelementptr inbounds double, ptr %284, i64 %indvars.iv657.ph
  %296 = load double, ptr %295, align 8, !tbaa !5
  %297 = call double @llvm.fmuladd.f64(double %285, double %296, double %294)
  store double %297, ptr %293, align 8, !tbaa !5
  %indvars.iv.next658.prol = or disjoint i64 %indvars.iv657.ph, 1
  br label %scalar.ph749.prol.loopexit

scalar.ph749.prol.loopexit:                       ; preds = %scalar.ph749.prol, %scalar.ph749.preheader
  %indvars.iv657.unr = phi i64 [ %indvars.iv657.ph, %scalar.ph749.preheader ], [ %indvars.iv.next658.prol, %scalar.ph749.prol ]
  %298 = icmp eq i64 %indvars.iv657.ph, %100
  br i1 %298, label %._crit_edge572, label %scalar.ph749

scalar.ph749:                                     ; preds = %scalar.ph749.prol.loopexit, %scalar.ph749
  %indvars.iv657 = phi i64 [ %indvars.iv.next658.1, %scalar.ph749 ], [ %indvars.iv657.unr, %scalar.ph749.prol.loopexit ]
  %299 = getelementptr inbounds double, ptr %283, i64 %indvars.iv657
  %300 = load double, ptr %299, align 8, !tbaa !5
  %301 = getelementptr inbounds double, ptr %284, i64 %indvars.iv657
  %302 = load double, ptr %301, align 8, !tbaa !5
  %303 = call double @llvm.fmuladd.f64(double %285, double %302, double %300)
  store double %303, ptr %299, align 8, !tbaa !5
  %indvars.iv.next658 = add nuw nsw i64 %indvars.iv657, 1
  %304 = getelementptr inbounds double, ptr %283, i64 %indvars.iv.next658
  %305 = load double, ptr %304, align 8, !tbaa !5
  %306 = getelementptr inbounds double, ptr %284, i64 %indvars.iv.next658
  %307 = load double, ptr %306, align 8, !tbaa !5
  %308 = call double @llvm.fmuladd.f64(double %285, double %307, double %305)
  store double %308, ptr %304, align 8, !tbaa !5
  %indvars.iv.next658.1 = add nuw nsw i64 %indvars.iv657, 2
  %exitcond661.not.1 = icmp eq i64 %indvars.iv.next658.1, %wide.trip.count660
  br i1 %exitcond661.not.1, label %._crit_edge572, label %scalar.ph749, !llvm.loop !45

._crit_edge572:                                   ; preds = %scalar.ph749.prol.loopexit, %scalar.ph749, %middle.block748, %.preheader541
  %indvars.iv.next663 = add nuw nsw i64 %indvars.iv662, 1
  %exitcond666.not = icmp eq i64 %indvars.iv.next663, %indvars.iv691
  br i1 %exitcond666.not, label %309, label %.preheader541, !llvm.loop !46

309:                                              ; preds = %._crit_edge572
  %310 = load ptr, ptr %218, align 8, !tbaa !21
  %311 = call noundef double @_ZN5nasoq9r8vec_dotEiPdS0_(i32 noundef %0, ptr noundef %310, ptr noundef %310)
  %312 = call double @sqrt(double noundef %311) #10
  %313 = load ptr, ptr %269, align 8, !tbaa !21
  %314 = getelementptr inbounds double, ptr %313, i64 %indvars.iv693
  store double %312, ptr %314, align 8, !tbaa !5
  br label %315

315:                                              ; preds = %309, %265
  %316 = phi double [ %312, %309 ], [ %268, %265 ]
  %317 = phi ptr [ %313, %309 ], [ %270, %265 ]
  %318 = getelementptr double, ptr %317, i64 %indvars.iv693
  %319 = fcmp oeq double %316, 0.000000e+00
  %brmerge = or i1 %319, %89
  br i1 %brmerge, label %.loopexit540, label %.lr.ph575

.lr.ph575:                                        ; preds = %315
  %320 = load ptr, ptr %218, align 8, !tbaa !21
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph575
  %scevgep740 = getelementptr i8, ptr %320, i64 %94
  %scevgep741 = getelementptr i8, ptr %317, i64 %201
  %bound0 = icmp ult ptr %320, %scevgep741
  %bound1 = icmp ult ptr %318, %scevgep740
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %321 = load double, ptr %318, align 8, !tbaa !5, !alias.scope !47
  %broadcast.splatinsert = insertelement <2 x double> poison, double %321, 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 ]
  %322 = getelementptr inbounds double, ptr %320, i64 %index
  %wide.load = load <2 x double>, ptr %322, align 8, !tbaa !5, !alias.scope !50, !noalias !47
  %323 = fdiv <2 x double> %wide.load, %broadcast.splat
  store <2 x double> %323, ptr %322, align 8, !tbaa !5, !alias.scope !50, !noalias !47
  %index.next = add nuw i64 %index, 2
  %324 = icmp eq i64 %index.next, %n.vec
  br i1 %324, label %middle.block, label %vector.body, !llvm.loop !52

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph575
  %indvars.iv667.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph575 ], [ %n.vec, %middle.block ]
  %325 = sub nsw i64 %wide.trip.count, %indvars.iv667.ph
  %xtraiter853 = and i64 %325, 3
  %lcmp.mod854.not = icmp eq i64 %xtraiter853, 0
  br i1 %lcmp.mod854.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv667.prol = phi i64 [ %indvars.iv.next668.prol, %scalar.ph.prol ], [ %indvars.iv667.ph, %scalar.ph.preheader ]
  %prol.iter855 = phi i64 [ %prol.iter855.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %326 = getelementptr inbounds double, ptr %320, i64 %indvars.iv667.prol
  %327 = load double, ptr %326, align 8, !tbaa !5
  %328 = load double, ptr %318, align 8, !tbaa !5
  %329 = fdiv double %327, %328
  store double %329, ptr %326, align 8, !tbaa !5
  %indvars.iv.next668.prol = add nuw nsw i64 %indvars.iv667.prol, 1
  %prol.iter855.next = add i64 %prol.iter855, 1
  %prol.iter855.cmp.not = icmp eq i64 %prol.iter855.next, %xtraiter853
  br i1 %prol.iter855.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !53

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv667.unr = phi i64 [ %indvars.iv667.ph, %scalar.ph.preheader ], [ %indvars.iv.next668.prol, %scalar.ph.prol ]
  %330 = sub nsw i64 %indvars.iv667.ph, %wide.trip.count
  %331 = icmp ugt i64 %330, -4
  br i1 %331, label %.loopexit540, label %scalar.ph.preheader.new

scalar.ph.preheader.new:                          ; preds = %scalar.ph.prol.loopexit
  %invariant.gep = getelementptr i8, ptr %320, i64 8
  %invariant.gep880 = getelementptr i8, ptr %320, i64 16
  %invariant.gep882 = getelementptr i8, ptr %320, i64 24
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph, %scalar.ph.preheader.new
  %indvars.iv667 = phi i64 [ %indvars.iv667.unr, %scalar.ph.preheader.new ], [ %indvars.iv.next668.3, %scalar.ph ]
  %332 = getelementptr inbounds double, ptr %320, i64 %indvars.iv667
  %333 = load double, ptr %332, align 8, !tbaa !5
  %334 = load double, ptr %318, align 8, !tbaa !5
  %335 = fdiv double %333, %334
  store double %335, ptr %332, align 8, !tbaa !5
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv667
  %336 = load double, ptr %gep, align 8, !tbaa !5
  %337 = load double, ptr %318, align 8, !tbaa !5
  %338 = fdiv double %336, %337
  store double %338, ptr %gep, align 8, !tbaa !5
  %gep881 = getelementptr double, ptr %invariant.gep880, i64 %indvars.iv667
  %339 = load double, ptr %gep881, align 8, !tbaa !5
  %340 = load double, ptr %318, align 8, !tbaa !5
  %341 = fdiv double %339, %340
  store double %341, ptr %gep881, align 8, !tbaa !5
  %gep883 = getelementptr double, ptr %invariant.gep882, i64 %indvars.iv667
  %342 = load double, ptr %gep883, align 8, !tbaa !5
  %343 = load double, ptr %318, align 8, !tbaa !5
  %344 = fdiv double %342, %343
  store double %344, ptr %gep883, align 8, !tbaa !5
  %indvars.iv.next668.3 = add nuw nsw i64 %indvars.iv667, 4
  %exitcond671.not.3 = icmp eq i64 %indvars.iv.next668.3, %wide.trip.count670
  br i1 %exitcond671.not.3, label %.loopexit540, label %scalar.ph, !llvm.loop !54

.loopexit540:                                     ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %315
  %.not532 = icmp eq i64 %indvars.iv693, 0
  br i1 %.not532, label %.loopexit, label %.preheader538.preheader

.preheader538.preheader:                          ; preds = %.loopexit540
  %xtraiter856 = and i64 %indvars.iv689, 3
  %345 = icmp eq i64 %indvars.iv693, 1
  br i1 %345, label %.preheader537.preheader.unr-lcssa, label %.preheader538.preheader.new

.preheader538.preheader.new:                      ; preds = %.preheader538.preheader
  %unroll_iter859 = and i64 %indvars.iv689, 9223372036854775804
  br label %.preheader538

.preheader538:                                    ; preds = %.preheader538, %.preheader538.preheader.new
  %indvars.iv672 = phi i64 [ 0, %.preheader538.preheader.new ], [ %indvars.iv.next673.3, %.preheader538 ]
  %niter860 = phi i64 [ 0, %.preheader538.preheader.new ], [ %niter860.next.3, %.preheader538 ]
  %346 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv672
  %347 = load ptr, ptr %346, align 8, !tbaa !21
  %348 = getelementptr inbounds double, ptr %347, i64 %indvars.iv693
  %349 = load double, ptr %348, align 8, !tbaa !5
  %350 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv672
  store double %349, ptr %350, align 8, !tbaa !5
  %indvars.iv.next673 = or disjoint i64 %indvars.iv672, 1
  %351 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next673
  %352 = load ptr, ptr %351, align 8, !tbaa !21
  %353 = getelementptr inbounds double, ptr %352, i64 %indvars.iv693
  %354 = load double, ptr %353, align 8, !tbaa !5
  %355 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next673
  store double %354, ptr %355, align 8, !tbaa !5
  %indvars.iv.next673.1 = or disjoint i64 %indvars.iv672, 2
  %356 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next673.1
  %357 = load ptr, ptr %356, align 8, !tbaa !21
  %358 = getelementptr inbounds double, ptr %357, i64 %indvars.iv693
  %359 = load double, ptr %358, align 8, !tbaa !5
  %360 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next673.1
  store double %359, ptr %360, align 8, !tbaa !5
  %indvars.iv.next673.2 = or disjoint i64 %indvars.iv672, 3
  %361 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next673.2
  %362 = load ptr, ptr %361, align 8, !tbaa !21
  %363 = getelementptr inbounds double, ptr %362, i64 %indvars.iv693
  %364 = load double, ptr %363, align 8, !tbaa !5
  %365 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next673.2
  store double %364, ptr %365, align 8, !tbaa !5
  %indvars.iv.next673.3 = add nuw nsw i64 %indvars.iv672, 4
  %niter860.next.3 = add i64 %niter860, 4
  %niter860.ncmp.3 = icmp eq i64 %niter860.next.3, %unroll_iter859
  br i1 %niter860.ncmp.3, label %.preheader537.preheader.unr-lcssa, label %.preheader538, !llvm.loop !55

.preheader537.preheader.unr-lcssa:                ; preds = %.preheader538, %.preheader538.preheader
  %indvars.iv672.unr = phi i64 [ 0, %.preheader538.preheader ], [ %indvars.iv.next673.3, %.preheader538 ]
  %lcmp.mod858.not = icmp eq i64 %xtraiter856, 0
  br i1 %lcmp.mod858.not, label %.preheader537.preheader, label %.preheader538.epil

.preheader538.epil:                               ; preds = %.preheader537.preheader.unr-lcssa, %.preheader538.epil
  %indvars.iv672.epil = phi i64 [ %indvars.iv.next673.epil, %.preheader538.epil ], [ %indvars.iv672.unr, %.preheader537.preheader.unr-lcssa ]
  %epil.iter857 = phi i64 [ %epil.iter857.next, %.preheader538.epil ], [ 0, %.preheader537.preheader.unr-lcssa ]
  %366 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv672.epil
  %367 = load ptr, ptr %366, align 8, !tbaa !21
  %368 = getelementptr inbounds double, ptr %367, i64 %indvars.iv693
  %369 = load double, ptr %368, align 8, !tbaa !5
  %370 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv672.epil
  store double %369, ptr %370, align 8, !tbaa !5
  %indvars.iv.next673.epil = add nuw nsw i64 %indvars.iv672.epil, 1
  %epil.iter857.next = add i64 %epil.iter857, 1
  %epil.iter857.cmp.not = icmp eq i64 %epil.iter857.next, %xtraiter856
  br i1 %epil.iter857.cmp.not, label %.preheader537.preheader, label %.preheader538.epil, !llvm.loop !56

.preheader537.preheader:                          ; preds = %.preheader538.epil, %.preheader537.preheader.unr-lcssa
  br label %.preheader537

.preheader537:                                    ; preds = %.preheader537.preheader, %.preheader537
  %indvars.iv679 = phi i64 [ %indvars.iv.next680, %.preheader537 ], [ 0, %.preheader537.preheader ]
  %371 = getelementptr inbounds double, ptr %.0490, i64 %indvars.iv679
  %372 = load double, ptr %371, align 8, !tbaa !5
  %373 = getelementptr inbounds double, ptr %.0492, i64 %indvars.iv679
  %374 = load double, ptr %373, align 8, !tbaa !5
  %375 = trunc nuw nsw i64 %indvars.iv679 to i32
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %372, double noundef %374, i32 noundef %375, ptr noundef %.0489)
  %indvars.iv.next680 = add nuw nsw i64 %indvars.iv679, 1
  %exitcond683.not = icmp eq i64 %indvars.iv.next680, %indvars.iv693
  br i1 %exitcond683.not, label %.preheader536.preheader, label %.preheader537, !llvm.loop !57

.preheader536.preheader:                          ; preds = %.preheader537
  %xtraiter861 = and i64 %indvars.iv689, 3
  %376 = icmp ult i64 %indvars.iv691, 3
  br i1 %376, label %.loopexit.loopexit.unr-lcssa, label %.preheader536.preheader.new

.preheader536.preheader.new:                      ; preds = %.preheader536.preheader
  %unroll_iter864 = and i64 %indvars.iv689, 9223372036854775804
  br label %.preheader536

.preheader536:                                    ; preds = %.preheader536, %.preheader536.preheader.new
  %indvars.iv684 = phi i64 [ 0, %.preheader536.preheader.new ], [ %indvars.iv.next685.3, %.preheader536 ]
  %niter865 = phi i64 [ 0, %.preheader536.preheader.new ], [ %niter865.next.3, %.preheader536 ]
  %377 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv684
  %378 = load double, ptr %377, align 8, !tbaa !5
  %379 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv684
  %380 = load ptr, ptr %379, align 8, !tbaa !21
  %381 = getelementptr inbounds double, ptr %380, i64 %indvars.iv693
  store double %378, ptr %381, align 8, !tbaa !5
  %indvars.iv.next685 = or disjoint i64 %indvars.iv684, 1
  %382 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next685
  %383 = load double, ptr %382, align 8, !tbaa !5
  %384 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next685
  %385 = load ptr, ptr %384, align 8, !tbaa !21
  %386 = getelementptr inbounds double, ptr %385, i64 %indvars.iv693
  store double %383, ptr %386, align 8, !tbaa !5
  %indvars.iv.next685.1 = or disjoint i64 %indvars.iv684, 2
  %387 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next685.1
  %388 = load double, ptr %387, align 8, !tbaa !5
  %389 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next685.1
  %390 = load ptr, ptr %389, align 8, !tbaa !21
  %391 = getelementptr inbounds double, ptr %390, i64 %indvars.iv693
  store double %388, ptr %391, align 8, !tbaa !5
  %indvars.iv.next685.2 = or disjoint i64 %indvars.iv684, 3
  %392 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next685.2
  %393 = load double, ptr %392, align 8, !tbaa !5
  %394 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next685.2
  %395 = load ptr, ptr %394, align 8, !tbaa !21
  %396 = getelementptr inbounds double, ptr %395, i64 %indvars.iv693
  store double %393, ptr %396, align 8, !tbaa !5
  %indvars.iv.next685.3 = add nuw nsw i64 %indvars.iv684, 4
  %niter865.next.3 = add i64 %niter865, 4
  %niter865.ncmp.3 = icmp eq i64 %niter865.next.3, %unroll_iter864
  br i1 %niter865.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.preheader536, !llvm.loop !58

.loopexit.loopexit.unr-lcssa:                     ; preds = %.preheader536, %.preheader536.preheader
  %indvars.iv684.unr = phi i64 [ 0, %.preheader536.preheader ], [ %indvars.iv.next685.3, %.preheader536 ]
  %lcmp.mod863.not = icmp eq i64 %xtraiter861, 0
  br i1 %lcmp.mod863.not, label %.loopexit.loopexit, label %.preheader536.epil

.preheader536.epil:                               ; preds = %.loopexit.loopexit.unr-lcssa, %.preheader536.epil
  %indvars.iv684.epil = phi i64 [ %indvars.iv.next685.epil, %.preheader536.epil ], [ %indvars.iv684.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter862 = phi i64 [ %epil.iter862.next, %.preheader536.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %397 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv684.epil
  %398 = load double, ptr %397, align 8, !tbaa !5
  %399 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv684.epil
  %400 = load ptr, ptr %399, align 8, !tbaa !21
  %401 = getelementptr inbounds double, ptr %400, i64 %indvars.iv693
  store double %398, ptr %401, align 8, !tbaa !5
  %indvars.iv.next685.epil = add nuw nsw i64 %indvars.iv684.epil, 1
  %epil.iter862.next = add i64 %epil.iter862, 1
  %epil.iter862.cmp.not = icmp eq i64 %epil.iter862.next, %xtraiter861
  br i1 %epil.iter862.cmp.not, label %.loopexit.loopexit, label %.preheader536.epil, !llvm.loop !59

.loopexit.loopexit:                               ; preds = %.preheader536.epil, %.loopexit.loopexit.unr-lcssa
  %.pre = load ptr, ptr %269, align 8, !tbaa !21
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.loopexit540
  %402 = phi ptr [ %.pre, %.loopexit.loopexit ], [ %317, %.loopexit540 ]
  %403 = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv693
  %404 = load ptr, ptr %403, align 8, !tbaa !21
  %405 = getelementptr inbounds double, ptr %404, i64 %indvars.iv693
  %406 = load double, ptr %405, align 8, !tbaa !5
  %407 = getelementptr inbounds double, ptr %402, i64 %indvars.iv693
  %408 = load double, ptr %407, align 8, !tbaa !5
  %409 = fmul double %408, %408
  %410 = call double @llvm.fmuladd.f64(double %406, double %406, double %409)
  %sqrt = call double @llvm.sqrt.f64(double %410)
  %411 = fcmp oeq double %sqrt, 0.000000e+00
  br i1 %411, label %412, label %413

412:                                              ; preds = %.loopexit
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %34, ptr noundef %.0490, ptr noundef nonnull %.0497, ptr noundef nonnull %.0515, i32 noundef %17, ptr noundef %.0496, ptr noundef %.0492, ptr noundef %.0491, i32 noundef %0, ptr noundef %.0489)
  br label %494

413:                                              ; preds = %.loopexit
  %414 = fdiv double %406, %sqrt
  %415 = getelementptr inbounds double, ptr %.0490, i64 %indvars.iv693
  store double %414, ptr %415, align 8, !tbaa !5
  %416 = load double, ptr %407, align 8, !tbaa !5
  %417 = fneg double %416
  %418 = fdiv double %417, %sqrt
  %419 = getelementptr inbounds double, ptr %.0492, i64 %indvars.iv693
  store double %418, ptr %419, align 8, !tbaa !5
  %420 = load double, ptr %415, align 8, !tbaa !5
  %421 = load double, ptr %405, align 8, !tbaa !5
  %422 = load double, ptr %407, align 8, !tbaa !5
  %423 = fneg double %418
  %424 = fmul double %422, %423
  %425 = call double @llvm.fmuladd.f64(double %420, double %421, double %424)
  store double %425, ptr %405, align 8, !tbaa !5
  store double 0.000000e+00, ptr %407, align 8, !tbaa !5
  %426 = load double, ptr %415, align 8, !tbaa !5
  %427 = load double, ptr %419, align 8, !tbaa !5
  %428 = trunc nuw nsw i64 %indvars.iv693 to i32
  call void @_ZN5nasoq11mult_givensEddiPd(double noundef %426, double noundef %427, i32 noundef %428, ptr noundef nonnull %.0497)
  %429 = getelementptr inbounds double, ptr %.0497, i64 %210
  %430 = load double, ptr %429, align 8, !tbaa !5
  %431 = call double @llvm.fabs.f64(double %430)
  %432 = add nsw i32 %.1505579, 1
  %433 = fcmp ugt double %431, %.1
  %434 = fcmp ugt double %431, %18
  %or.cond = or i1 %433, %434
  %435 = icmp slt i64 %210, %93
  %or.cond616 = and i1 %or.cond, %435
  %indvars.iv.next692 = add nuw nsw i64 %indvars.iv691, 1
  %indvars.iv.next690 = add nuw nsw i64 %indvars.iv689, 1
  br i1 %or.cond616, label %.lr.ph581, label %._crit_edge582, !llvm.loop !60

._crit_edge582:                                   ; preds = %413, %._crit_edge554, %.preheader544
  %.2506 = phi i32 [ %.0504607, %.preheader544 ], [ %.0504607, %._crit_edge554 ], [ %432, %413 ]
  %.2 = phi i32 [ %.0498608, %.preheader544 ], [ %.0498608, %._crit_edge554 ], [ %428, %413 ]
  %.1495 = phi double [ %145, %.preheader544 ], [ %145, %._crit_edge554 ], [ %431, %413 ]
  %436 = sext i32 %.2 to i64
  %437 = getelementptr inbounds ptr, ptr %.0515, i64 %436
  %438 = load ptr, ptr %437, align 8, !tbaa !21
  %439 = getelementptr inbounds double, ptr %438, i64 %436
  %440 = load double, ptr %439, align 8, !tbaa !5
  %441 = fcmp oeq double %440, 0.000000e+00
  br i1 %441, label %442, label %443

442:                                              ; preds = %._crit_edge582
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %34, ptr noundef %.0490, ptr noundef nonnull %.0497, ptr noundef nonnull %.0515, i32 noundef %17, ptr noundef %.0496, ptr noundef %.0492, ptr noundef %.0491, i32 noundef %0, ptr noundef %.0489)
  br label %494

443:                                              ; preds = %._crit_edge582
  %444 = getelementptr inbounds double, ptr %.0497, i64 %436
  %445 = load double, ptr %444, align 8, !tbaa !5
  %446 = fdiv double %445, %440
  %447 = getelementptr inbounds double, ptr %.0489, i64 %436
  store double %446, ptr %447, align 8, !tbaa !5
  %448 = icmp sgt i32 %.2, 0
  br i1 %448, label %.lr.ph598.preheader, label %.preheader543

.lr.ph598.preheader:                              ; preds = %443
  %449 = zext nneg i32 %.2 to i64
  br label %.lr.ph598

.preheader543:                                    ; preds = %._crit_edge593, %443
  %.not533599 = icmp slt i32 %.2, 0
  %or.cond728 = or i1 %82, %.not533599
  br i1 %or.cond728, label %._crit_edge605, label %.preheader.preheader

.preheader.preheader:                             ; preds = %.preheader543
  %450 = add nuw i32 %.2, 1
  %wide.trip.count709 = zext i32 %450 to i64
  %xtraiter866 = and i64 %wide.trip.count709, 1
  %451 = icmp eq i32 %.2, 0
  %unroll_iter869 = and i64 %wide.trip.count709, 4294967294
  %lcmp.mod868.not = icmp eq i64 %xtraiter866, 0
  br label %.preheader

.lr.ph598:                                        ; preds = %.lr.ph598.preheader, %._crit_edge593
  %indvars.iv700 = phi i64 [ %449, %.lr.ph598.preheader ], [ %indvars.iv.next701, %._crit_edge593 ]
  %indvars.iv.next701 = add nsw i64 %indvars.iv700, -1
  %452 = getelementptr inbounds double, ptr %.0497, i64 %indvars.iv.next701
  %453 = load double, ptr %452, align 8, !tbaa !5
  %454 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next701
  store double %453, ptr %454, align 8, !tbaa !5
  %.not534589 = icmp sgt i64 %indvars.iv700, %436
  %.phi.trans.insert = getelementptr inbounds ptr, ptr %.0515, i64 %indvars.iv.next701
  %.pre717 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !21
  br i1 %.not534589, label %._crit_edge593, label %.lr.ph592

.lr.ph592:                                        ; preds = %.lr.ph598, %.lr.ph592
  %indvars.iv702 = phi i64 [ %indvars.iv.next703, %.lr.ph592 ], [ %indvars.iv700, %.lr.ph598 ]
  %455 = phi double [ %461, %.lr.ph592 ], [ %453, %.lr.ph598 ]
  %456 = getelementptr inbounds double, ptr %.pre717, i64 %indvars.iv702
  %457 = load double, ptr %456, align 8, !tbaa !5
  %458 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv702
  %459 = load double, ptr %458, align 8, !tbaa !5
  %460 = fneg double %457
  %461 = call double @llvm.fmuladd.f64(double %460, double %459, double %455)
  store double %461, ptr %454, align 8, !tbaa !5
  %indvars.iv.next703 = add nuw nsw i64 %indvars.iv702, 1
  %462 = trunc nuw i64 %indvars.iv702 to i32
  %.not534.not = icmp sgt i32 %.2, %462
  br i1 %.not534.not, label %.lr.ph592, label %._crit_edge593, !llvm.loop !61

._crit_edge593:                                   ; preds = %.lr.ph592, %.lr.ph598
  %463 = phi double [ %453, %.lr.ph598 ], [ %461, %.lr.ph592 ]
  %464 = getelementptr inbounds double, ptr %.pre717, i64 %indvars.iv.next701
  %465 = load double, ptr %464, align 8, !tbaa !5
  %466 = fdiv double %463, %465
  store double %466, ptr %454, align 8, !tbaa !5
  %467 = icmp sgt i64 %indvars.iv700, 1
  br i1 %467, label %.lr.ph598, label %.preheader543, !llvm.loop !62

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge602
  %indvars.iv711 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next712, %._crit_edge602 ]
  %468 = getelementptr inbounds double, ptr %14, i64 %indvars.iv711
  %.promoted603 = load double, ptr %468, align 8, !tbaa !5
  br i1 %451, label %._crit_edge602.unr-lcssa, label %.preheader.new

.preheader.new:                                   ; preds = %.preheader, %.preheader.new
  %indvars.iv706 = phi i64 [ %indvars.iv.next707.1, %.preheader.new ], [ 0, %.preheader ]
  %469 = phi double [ %483, %.preheader.new ], [ %.promoted603, %.preheader ]
  %niter870 = phi i64 [ %niter870.next.1, %.preheader.new ], [ 0, %.preheader ]
  %470 = getelementptr inbounds ptr, ptr %.0491, i64 %indvars.iv706
  %471 = load ptr, ptr %470, align 8, !tbaa !21
  %472 = getelementptr inbounds double, ptr %471, i64 %indvars.iv711
  %473 = load double, ptr %472, align 8, !tbaa !5
  %474 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv706
  %475 = load double, ptr %474, align 8, !tbaa !5
  %476 = call double @llvm.fmuladd.f64(double %473, double %475, double %469)
  store double %476, ptr %468, align 8, !tbaa !5
  %indvars.iv.next707 = or disjoint i64 %indvars.iv706, 1
  %477 = getelementptr inbounds ptr, ptr %.0491, i64 %indvars.iv.next707
  %478 = load ptr, ptr %477, align 8, !tbaa !21
  %479 = getelementptr inbounds double, ptr %478, i64 %indvars.iv711
  %480 = load double, ptr %479, align 8, !tbaa !5
  %481 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv.next707
  %482 = load double, ptr %481, align 8, !tbaa !5
  %483 = call double @llvm.fmuladd.f64(double %480, double %482, double %476)
  store double %483, ptr %468, align 8, !tbaa !5
  %indvars.iv.next707.1 = add nuw nsw i64 %indvars.iv706, 2
  %niter870.next.1 = add i64 %niter870, 2
  %niter870.ncmp.1 = icmp eq i64 %niter870.next.1, %unroll_iter869
  br i1 %niter870.ncmp.1, label %._crit_edge602.unr-lcssa, label %.preheader.new, !llvm.loop !63

._crit_edge602.unr-lcssa:                         ; preds = %.preheader.new, %.preheader
  %indvars.iv706.unr = phi i64 [ 0, %.preheader ], [ %indvars.iv.next707.1, %.preheader.new ]
  %.unr = phi double [ %.promoted603, %.preheader ], [ %483, %.preheader.new ]
  br i1 %lcmp.mod868.not, label %._crit_edge602, label %._crit_edge602.epilog-lcssa

._crit_edge602.epilog-lcssa:                      ; preds = %._crit_edge602.unr-lcssa
  %484 = getelementptr inbounds ptr, ptr %.0491, i64 %indvars.iv706.unr
  %485 = load ptr, ptr %484, align 8, !tbaa !21
  %486 = getelementptr inbounds double, ptr %485, i64 %indvars.iv711
  %487 = load double, ptr %486, align 8, !tbaa !5
  %488 = getelementptr inbounds double, ptr %.0489, i64 %indvars.iv706.unr
  %489 = load double, ptr %488, align 8, !tbaa !5
  %490 = call double @llvm.fmuladd.f64(double %487, double %489, double %.unr)
  store double %490, ptr %468, align 8, !tbaa !5
  br label %._crit_edge602

._crit_edge602:                                   ; preds = %._crit_edge602.unr-lcssa, %._crit_edge602.epilog-lcssa
  %indvars.iv.next712 = add nuw nsw i64 %indvars.iv711, 1
  %exitcond715.not = icmp eq i64 %indvars.iv.next712, %wide.trip.count714
  br i1 %exitcond715.not, label %._crit_edge605, label %.preheader, !llvm.loop !64

._crit_edge605:                                   ; preds = %._crit_edge602, %.preheader543
  %491 = fcmp ole double %.1495, %.1
  %492 = fcmp ole double %.1495, %18
  %or.cond535.not731 = and i1 %491, %492
  %493 = add nuw nsw i32 %.0508606, 1
  %exitcond716.not = icmp eq i32 %493, %16
  %or.cond726 = select i1 %or.cond535.not731, i1 true, i1 %exitcond716.not
  br i1 %or.cond726, label %._crit_edge612, label %101, !llvm.loop !65

._crit_edge612:                                   ; preds = %._crit_edge605, %80
  %.3507 = phi i32 [ 0, %80 ], [ %.2506, %._crit_edge605 ]
  call void @_ZN5nasoq10free_ws_irEPdS0_S0_PS0_iS0_S0_S1_iS0_(ptr noundef %34, ptr noundef %.0490, ptr noundef %.0497, ptr noundef %.0515, i32 noundef %17, ptr noundef %.0496, ptr noundef %.0492, ptr noundef %.0491, i32 noundef %0, ptr noundef %.0489)
  br label %494

494:                                              ; preds = %._crit_edge612, %442, %412, %147
  %.0 = phi i32 [ %.0504607, %147 ], [ %.1505579, %412 ], [ %.2506, %442 ], [ %.3507, %._crit_edge612 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #10
  ret i32 %.0
}

declare void @_ZN5nasoq48solve_phase_ldl_blocked_parallel_permuted_updateEmPdS0_PiS1_PmS1_S0_S2_miiS1_S1_iS1_S1_iiS1_S1_PbS1_S0_(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, i32 noundef, ptr noundef, ptr noundef, ptr 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 = !{!10}
!10 = distinct !{!10, !11}
!11 = distinct !{!11, !"LVerDomain"}
!12 = !{!13}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !15, !16, !17}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = distinct !{!20, !15, !16}
!21 = !{!22, !22, i64 0}
!22 = !{!"any pointer", !7, i64 0}
!23 = distinct !{!23, !15, !16, !17}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !15, !16}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !19}
!28 = !{!29}
!29 = distinct !{!29, !30}
!30 = distinct !{!30, !"LVerDomain"}
!31 = !{!32}
!32 = distinct !{!32, !30}
!33 = !{!29, !34}
!34 = distinct !{!34, !30}
!35 = !{!34}
!36 = distinct !{!36, !15, !16, !17}
!37 = distinct !{!37, !15, !16}
!38 = distinct !{!38, !15}
!39 = !{!40}
!40 = distinct !{!40, !41}
!41 = distinct !{!41, !"LVerDomain"}
!42 = !{!43}
!43 = distinct !{!43, !41}
!44 = distinct !{!44, !15, !16, !17}
!45 = distinct !{!45, !15, !16}
!46 = distinct !{!46, !15}
!47 = !{!48}
!48 = distinct !{!48, !49}
!49 = distinct !{!49, !"LVerDomain"}
!50 = !{!51}
!51 = distinct !{!51, !49}
!52 = distinct !{!52, !15, !16, !17}
!53 = distinct !{!53, !19}
!54 = distinct !{!54, !15, !16}
!55 = distinct !{!55, !15}
!56 = distinct !{!56, !19}
!57 = distinct !{!57, !15}
!58 = distinct !{!58, !15}
!59 = distinct !{!59, !19}
!60 = distinct !{!60, !15}
!61 = distinct !{!61, !15}
!62 = distinct !{!62, !15}
!63 = distinct !{!63, !15}
!64 = distinct !{!64, !15}
!65 = distinct !{!65, !15}


; 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