; LLVM IR from ERGO-Code/HiGHS :: src/ipm/ipx (kkt_solver_basis)

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

%"class.std::valarray" = type { i64, ptr }
%"class.ipx::ConjugateResiduals" = type { ptr, i32, i32, double }
%"class.ipx::KKTSolverBasis" = type { %"class.ipx::KKTSolver", ptr, ptr, ptr, %"class.ipx::SplittedNormalMatrix", %"class.std::valarray", i8, i32, i32, i32 }
%"class.ipx::KKTSolver" = type { ptr }
%"class.ipx::SplittedNormalMatrix" = type { %"class.ipx::LinearOperator", ptr, %"class.ipx::SparseMatrix", %"class.ipx::SparseMatrix", %"class.ipx::SparseMatrix", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::valarray", i8, double, double, double }
%"class.ipx::LinearOperator" = type { ptr }
%"class.ipx::SparseMatrix" = type { i32, %"class.std::vector", %"class.std::vector", %"class.std::vector.3", %"class.std::vector", %"class.std::vector.3" }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.ipx_info = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, double, double, double, double }

@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [81 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE = external hidden unnamed_addr constant [109 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [18 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(584) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull align 8 dereferenceable(16) %2, double noundef %3, ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef %6) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca double, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca %"class.std::valarray", align 8
  %19 = alloca %"class.std::valarray", align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca double, align 8
  %27 = alloca i32, align 4
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca i32, align 4
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca double, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca %"class.std::valarray", align 8
  %39 = alloca double, align 8
  %40 = alloca %"class.ipx::ConjugateResiduals", align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca double, align 8
  %46 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store double %3, ptr %11, align 8, !tbaa !9
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  %47 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  %48 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 2
  %49 = load ptr, ptr %48, align 8, !tbaa !11
  %50 = call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %49)
  store i32 %50, ptr %15, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %51 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 2
  %52 = load ptr, ptr %51, align 8, !tbaa !11
  %53 = call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %52)
  store i32 %53, ptr %16, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %54 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 2
  %55 = load ptr, ptr %54, align 8, !tbaa !11
  %56 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNK3ipx5Model2AIEv(ptr noundef nonnull align 8 dereferenceable(704) %55)
  store ptr %56, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #8
  %57 = load i32, ptr %15, align 4, !tbaa !29
  %58 = sext i32 %57 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %58)
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #8
  %59 = load i32, ptr %15, align 4, !tbaa !29
  %60 = sext i32 %59 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %60)
          to label %61 unwind label %69

61:                                               ; preds = %7
  %62 = load ptr, ptr %14, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.ipx_info, ptr %62, i32 0, i32 3
  store i32 0, ptr %63, align 4, !tbaa !30
  %64 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 6
  %65 = load i8, ptr %64, align 8, !tbaa !32, !range !33, !noundef !34
  %66 = trunc i8 %65 to i1
  br i1 %66, label %67, label %68

67:                                               ; preds = %61
  br label %74

68:                                               ; preds = %61
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.12, i32 noundef 81, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

69:                                               ; preds = %7
  %70 = landingpad { ptr, i32 }
          cleanup
  %71 = extractvalue { ptr, i32 } %70, 0
  store ptr %71, ptr %20, align 8
  %72 = extractvalue { ptr, i32 } %70, 1
  store i32 %72, ptr %21, align 4
  br label %648

73:                                               ; No predecessors!
  br label %74

74:                                               ; preds = %73, %67
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  store double 0.000000e+00, ptr %23, align 8, !tbaa !9
  %75 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %76 unwind label %82

76:                                               ; preds = %74
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !29
  br label %77

77:                                               ; preds = %114, %76
  %78 = load i32, ptr %24, align 4, !tbaa !29
  %79 = load i32, ptr %15, align 4, !tbaa !29
  %80 = icmp slt i32 %78, %79
  br i1 %80, label %86, label %81

81:                                               ; preds = %77
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %117

82:                                               ; preds = %74
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %20, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %647

86:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %87 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %88 = load ptr, ptr %87, align 8, !tbaa !35
  %89 = load i32, ptr %24, align 4, !tbaa !29
  %90 = invoke noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %88, i32 noundef %89)
          to label %91 unwind label %109

91:                                               ; preds = %86
  store i32 %90, ptr %25, align 4, !tbaa !29
  %92 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %93 = load ptr, ptr %92, align 8, !tbaa !35
  %94 = load i32, ptr %25, align 4, !tbaa !29
  %95 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %93, i32 noundef %94)
          to label %96 unwind label %109

96:                                               ; preds = %91
  %97 = icmp eq i32 %95, 1
  br i1 %97, label %98, label %113

98:                                               ; preds = %96
  %99 = load ptr, ptr %9, align 8, !tbaa !5
  %100 = load i32, ptr %25, align 4, !tbaa !29
  %101 = sext i32 %100 to i64
  %102 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %99, i64 noundef %101) #8
  %103 = load double, ptr %102, align 8, !tbaa !9
  %104 = load i32, ptr %24, align 4, !tbaa !29
  %105 = sext i32 %104 to i64
  %106 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %105) #8
  store double %103, ptr %106, align 8, !tbaa !9
  %107 = load i32, ptr %22, align 4, !tbaa !29
  %108 = add nsw i32 %107, 1
  store i32 %108, ptr %22, align 4, !tbaa !29
  br label %113

109:                                              ; preds = %91, %86
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %20, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %647

113:                                              ; preds = %98, %96
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %114

114:                                              ; preds = %113
  %115 = load i32, ptr %24, align 4, !tbaa !29
  %116 = add nsw i32 %115, 1
  store i32 %116, ptr %24, align 4, !tbaa !29
  br label %77, !llvm.loop !36

117:                                              ; preds = %81
  %118 = load i32, ptr %22, align 4, !tbaa !29
  %119 = icmp sgt i32 %118, 0
  br i1 %119, label %120, label %128

120:                                              ; preds = %117
  %121 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %122 = load ptr, ptr %121, align 8, !tbaa !35
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %122, ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %19, i8 noundef signext 84)
          to label %123 unwind label %124

123:                                              ; preds = %120
  br label %128

124:                                              ; preds = %264, %261, %120
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %20, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %21, align 4
  br label %647

128:                                              ; preds = %123, %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  store double 0.000000e+00, ptr %26, align 8, !tbaa !9
  %129 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %130 unwind label %141

130:                                              ; preds = %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  %131 = load i32, ptr %22, align 4, !tbaa !29
  %132 = icmp sgt i32 %131, 0
  br i1 %132, label %133, label %202

133:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !29
  br label %134

134:                                              ; preds = %197, %133
  %135 = load i32, ptr %27, align 4, !tbaa !29
  %136 = load i32, ptr %16, align 4, !tbaa !29
  %137 = load i32, ptr %15, align 4, !tbaa !29
  %138 = add nsw i32 %136, %137
  %139 = icmp slt i32 %135, %138
  br i1 %139, label %145, label %140

140:                                              ; preds = %134
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %201

141:                                              ; preds = %128
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %20, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %647

145:                                              ; preds = %134
  %146 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %147 = load ptr, ptr %146, align 8, !tbaa !35
  %148 = load i32, ptr %27, align 4, !tbaa !29
  %149 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %147, i32 noundef %148)
          to label %150 unwind label %182

150:                                              ; preds = %145
  %151 = icmp eq i32 %149, -1
  br i1 %151, label %152, label %196

152:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %153 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %154 = load i32, ptr %27, align 4, !tbaa !29
  %155 = sext i32 %154 to i64
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %153, i64 noundef %155) #8
  %157 = load double, ptr %156, align 8, !tbaa !9
  %158 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %159 = load i32, ptr %27, align 4, !tbaa !29
  %160 = sext i32 %159 to i64
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %158, i64 noundef %160) #8
  %162 = load double, ptr %161, align 8, !tbaa !9
  %163 = fmul double %157, %162
  store double %163, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  %165 = load i32, ptr %27, align 4, !tbaa !29
  %166 = sext i32 %165 to i64
  %167 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %164, i64 noundef %166) #8
  %168 = load double, ptr %167, align 8, !tbaa !9
  %169 = load ptr, ptr %17, align 8, !tbaa !5
  %170 = load i32, ptr %27, align 4, !tbaa !29
  %171 = invoke noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %169, i32 noundef %170, ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %172 unwind label %186

172:                                              ; preds = %152
  %173 = fsub double %168, %171
  store double %173, ptr %29, align 8, !tbaa !9
  %174 = load double, ptr %28, align 8, !tbaa !9
  %175 = load double, ptr %29, align 8, !tbaa !9
  %176 = fmul double %175, %174
  store double %176, ptr %29, align 8, !tbaa !9
  %177 = load double, ptr %29, align 8, !tbaa !9
  %178 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %177)
          to label %179 unwind label %186

179:                                              ; preds = %172
  br i1 %178, label %180, label %181

180:                                              ; preds = %179
  br label %191

181:                                              ; preds = %179
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.12, i32 noundef 105, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

182:                                              ; preds = %145
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %20, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %21, align 4
  br label %200

186:                                              ; preds = %191, %172, %152
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %20, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %200

190:                                              ; No predecessors!
  br label %191

191:                                              ; preds = %190, %180
  %192 = load ptr, ptr %17, align 8, !tbaa !5
  %193 = load i32, ptr %27, align 4, !tbaa !29
  %194 = load double, ptr %29, align 8, !tbaa !9
  invoke void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %192, i32 noundef %193, double noundef %194, ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %195 unwind label %186

195:                                              ; preds = %191
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %196

196:                                              ; preds = %195, %150
  br label %197

197:                                              ; preds = %196
  %198 = load i32, ptr %27, align 4, !tbaa !29
  %199 = add nsw i32 %198, 1
  store i32 %199, ptr %27, align 4, !tbaa !29
  br label %134, !llvm.loop !38

200:                                              ; preds = %186, %182
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %647

201:                                              ; preds = %140
  br label %261

202:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 0, ptr %30, align 4, !tbaa !29
  br label %203

203:                                              ; preds = %256, %202
  %204 = load i32, ptr %30, align 4, !tbaa !29
  %205 = load i32, ptr %16, align 4, !tbaa !29
  %206 = load i32, ptr %15, align 4, !tbaa !29
  %207 = add nsw i32 %205, %206
  %208 = icmp slt i32 %204, %207
  br i1 %208, label %210, label %209

209:                                              ; preds = %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %260

210:                                              ; preds = %203
  %211 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %212 = load ptr, ptr %211, align 8, !tbaa !35
  %213 = load i32, ptr %30, align 4, !tbaa !29
  %214 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %212, i32 noundef %213)
          to label %215 unwind label %241

215:                                              ; preds = %210
  %216 = icmp eq i32 %214, -1
  br i1 %216, label %217, label %255

217:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %218 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %219 = load i32, ptr %30, align 4, !tbaa !29
  %220 = sext i32 %219 to i64
  %221 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %218, i64 noundef %220) #8
  %222 = load double, ptr %221, align 8, !tbaa !9
  %223 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %224 = load i32, ptr %30, align 4, !tbaa !29
  %225 = sext i32 %224 to i64
  %226 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %223, i64 noundef %225) #8
  %227 = load double, ptr %226, align 8, !tbaa !9
  %228 = fmul double %222, %227
  store double %228, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %229 = load double, ptr %31, align 8, !tbaa !9
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = load i32, ptr %30, align 4, !tbaa !29
  %232 = sext i32 %231 to i64
  %233 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %230, i64 noundef %232) #8
  %234 = load double, ptr %233, align 8, !tbaa !9
  %235 = fmul double %229, %234
  store double %235, ptr %32, align 8, !tbaa !9
  %236 = load double, ptr %32, align 8, !tbaa !9
  %237 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %236)
          to label %238 unwind label %245

238:                                              ; preds = %217
  br i1 %237, label %239, label %240

239:                                              ; preds = %238
  br label %250

240:                                              ; preds = %238
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.12, i32 noundef 114, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

241:                                              ; preds = %210
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %20, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %21, align 4
  br label %259

245:                                              ; preds = %250, %217
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %20, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %259

249:                                              ; No predecessors!
  br label %250

250:                                              ; preds = %249, %239
  %251 = load ptr, ptr %17, align 8, !tbaa !5
  %252 = load i32, ptr %30, align 4, !tbaa !29
  %253 = load double, ptr %32, align 8, !tbaa !9
  invoke void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %251, i32 noundef %252, double noundef %253, ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %254 unwind label %245

254:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %255

255:                                              ; preds = %254, %215
  br label %256

256:                                              ; preds = %255
  %257 = load i32, ptr %30, align 4, !tbaa !29
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %30, align 4, !tbaa !29
  br label %203, !llvm.loop !39

259:                                              ; preds = %245, %241
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %647

260:                                              ; preds = %209
  br label %261

261:                                              ; preds = %260, %201
  %262 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %263 = load ptr, ptr %262, align 8, !tbaa !35
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %263, ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(16) %18, i8 noundef signext 78)
          to label %264 unwind label %124

264:                                              ; preds = %261
  %265 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %266 = load ptr, ptr %265, align 8, !tbaa !35
  %267 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %266, ptr noundef nonnull align 8 dereferenceable(16) %267, ptr noundef nonnull align 8 dereferenceable(16) %19, i8 noundef signext 78)
          to label %268 unwind label %124

268:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !29
  br label %269

269:                                              ; preds = %346, %268
  %270 = load i32, ptr %33, align 4, !tbaa !29
  %271 = load i32, ptr %15, align 4, !tbaa !29
  %272 = icmp slt i32 %270, %271
  br i1 %272, label %274, label %273

273:                                              ; preds = %269
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %350

274:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  %275 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %276 = load ptr, ptr %275, align 8, !tbaa !35
  %277 = load i32, ptr %33, align 4, !tbaa !29
  %278 = invoke noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %276, i32 noundef %277)
          to label %279 unwind label %321

279:                                              ; preds = %274
  store i32 %278, ptr %34, align 4, !tbaa !29
  %280 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %281 = load ptr, ptr %280, align 8, !tbaa !35
  %282 = load i32, ptr %34, align 4, !tbaa !29
  %283 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %281, i32 noundef %282)
          to label %284 unwind label %321

284:                                              ; preds = %279
  %285 = icmp eq i32 %283, 0
  br i1 %285, label %286, label %331

286:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %287 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %288 = load i32, ptr %34, align 4, !tbaa !29
  %289 = sext i32 %288 to i64
  %290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %287, i64 noundef %289) #8
  %291 = load double, ptr %290, align 8, !tbaa !9
  store double %291, ptr %35, align 8, !tbaa !9
  %292 = load i32, ptr %33, align 4, !tbaa !29
  %293 = sext i32 %292 to i64
  %294 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %293) #8
  %295 = load double, ptr %294, align 8, !tbaa !9
  %296 = load i32, ptr %33, align 4, !tbaa !29
  %297 = sext i32 %296 to i64
  %298 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %297) #8
  %299 = load double, ptr %298, align 8, !tbaa !9
  %300 = fsub double %295, %299
  %301 = load double, ptr %35, align 8, !tbaa !9
  %302 = fdiv double %300, %301
  %303 = load ptr, ptr %9, align 8, !tbaa !5
  %304 = load i32, ptr %34, align 4, !tbaa !29
  %305 = sext i32 %304 to i64
  %306 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %303, i64 noundef %305) #8
  %307 = load double, ptr %306, align 8, !tbaa !9
  %308 = load double, ptr %35, align 8, !tbaa !9
  %309 = call double @llvm.fmuladd.f64(double %307, double %308, double %302)
  %310 = load i32, ptr %33, align 4, !tbaa !29
  %311 = sext i32 %310 to i64
  %312 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %311) #8
  store double %309, ptr %312, align 8, !tbaa !9
  %313 = load i32, ptr %33, align 4, !tbaa !29
  %314 = sext i32 %313 to i64
  %315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %314) #8
  %316 = load double, ptr %315, align 8, !tbaa !9
  %317 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %316)
          to label %318 unwind label %325

318:                                              ; preds = %286
  br i1 %317, label %319, label %320

319:                                              ; preds = %318
  br label %330

320:                                              ; preds = %318
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.12, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

321:                                              ; preds = %331, %279, %274
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %20, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %21, align 4
  br label %349

325:                                              ; preds = %286
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %20, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %349

329:                                              ; No predecessors!
  br label %330

330:                                              ; preds = %329, %319
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %345

331:                                              ; preds = %284
  %332 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %333 = load ptr, ptr %332, align 8, !tbaa !35
  %334 = load i32, ptr %34, align 4, !tbaa !29
  %335 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %333, i32 noundef %334)
          to label %336 unwind label %321

336:                                              ; preds = %331
  %337 = icmp eq i32 %335, 1
  br i1 %337, label %338, label %339

338:                                              ; preds = %336
  br label %341

339:                                              ; preds = %336
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.12, i32 noundef 133, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

340:                                              ; No predecessors!
  br label %341

341:                                              ; preds = %340, %338
  %342 = load i32, ptr %33, align 4, !tbaa !29
  %343 = sext i32 %342 to i64
  %344 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %343) #8
  store double 0.000000e+00, ptr %344, align 8, !tbaa !9
  br label %345

345:                                              ; preds = %341, %330
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %346

346:                                              ; preds = %345
  %347 = load i32, ptr %33, align 4, !tbaa !29
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %33, align 4, !tbaa !29
  br label %269, !llvm.loop !40

349:                                              ; preds = %325, %321
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %647

350:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %351 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 4
  %352 = invoke noundef ptr @_ZNK3ipx20SplittedNormalMatrix7colpermEv(ptr noundef nonnull align 8 dereferenceable(520) %351)
          to label %353 unwind label %359

353:                                              ; preds = %350
  store ptr %352, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 0, ptr %37, align 4, !tbaa !29
  br label %354

354:                                              ; preds = %375, %353
  %355 = load i32, ptr %37, align 4, !tbaa !29
  %356 = load i32, ptr %15, align 4, !tbaa !29
  %357 = icmp slt i32 %355, %356
  br i1 %357, label %363, label %358

358:                                              ; preds = %354
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %378

359:                                              ; preds = %378, %350
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %20, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %21, align 4
  br label %646

363:                                              ; preds = %354
  %364 = load ptr, ptr %36, align 8, !tbaa !5
  %365 = load i32, ptr %37, align 4, !tbaa !29
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds i32, ptr %364, i64 %366
  %368 = load i32, ptr %367, align 4, !tbaa !29
  %369 = sext i32 %368 to i64
  %370 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %369) #8
  %371 = load double, ptr %370, align 8, !tbaa !9
  %372 = load i32, ptr %37, align 4, !tbaa !29
  %373 = sext i32 %372 to i64
  %374 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %373) #8
  store double %371, ptr %374, align 8, !tbaa !9
  br label %375

375:                                              ; preds = %363
  %376 = load i32, ptr %37, align 4, !tbaa !29
  %377 = add nsw i32 %376, 1
  store i32 %377, ptr %37, align 4, !tbaa !29
  br label %354, !llvm.loop !41

378:                                              ; preds = %358
  %379 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 4
  invoke void @_ZN3ipx20SplittedNormalMatrix10reset_timeEv(ptr noundef nonnull align 8 dereferenceable(520) %379)
          to label %380 unwind label %359

380:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #8
  call void @_ZNSt8valarrayIdEC2EOS0_(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  store double 0.000000e+00, ptr %39, align 8, !tbaa !9
  %381 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %382 unwind label %438

382:                                              ; preds = %380
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #8
  %383 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 1
  %384 = load ptr, ptr %383, align 8, !tbaa !42
  invoke void @_ZN3ipx18ConjugateResidualsC1ERKNS_7ControlE(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 8 dereferenceable(1496) %384)
          to label %385 unwind label %442

385:                                              ; preds = %382
  %386 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 4
  %387 = load double, ptr %11, align 8, !tbaa !9
  %388 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 7
  %389 = load i32, ptr %388, align 4, !tbaa !43
  invoke void @_ZN3ipx18ConjugateResiduals5SolveERNS_14LinearOperatorERKSt8valarrayIdEdPKdiRS4_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 8 dereferenceable(8) %386, ptr noundef nonnull align 8 dereferenceable(16) %19, double noundef %387, ptr noundef null, i32 noundef %389, ptr noundef nonnull align 8 dereferenceable(16) %38)
          to label %390 unwind label %442

390:                                              ; preds = %385
  %391 = invoke noundef i32 @_ZNK3ipx18ConjugateResiduals7errflagEv(ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %392 unwind label %442

392:                                              ; preds = %390
  %393 = load ptr, ptr %14, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.ipx_info, ptr %393, i32 0, i32 3
  store i32 %391, ptr %394, align 4, !tbaa !30
  %395 = invoke noundef i32 @_ZNK3ipx18ConjugateResiduals4iterEv(ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %396 unwind label %442

396:                                              ; preds = %392
  %397 = load ptr, ptr %14, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.ipx_info, ptr %397, i32 0, i32 36
  %399 = load i32, ptr %398, align 8, !tbaa !44
  %400 = add nsw i32 %399, %395
  store i32 %400, ptr %398, align 8, !tbaa !44
  %401 = invoke noundef double @_ZNK3ipx18ConjugateResiduals4timeEv(ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %402 unwind label %442

402:                                              ; preds = %396
  %403 = load ptr, ptr %14, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.ipx_info, ptr %403, i32 0, i32 52
  %405 = load double, ptr %404, align 8, !tbaa !45
  %406 = fadd double %405, %401
  store double %406, ptr %404, align 8, !tbaa !45
  %407 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 4
  %408 = invoke noundef double @_ZNK3ipx20SplittedNormalMatrix8time_NNtEv(ptr noundef nonnull align 8 dereferenceable(520) %407)
          to label %409 unwind label %442

409:                                              ; preds = %402
  %410 = load ptr, ptr %14, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.ipx_info, ptr %410, i32 0, i32 53
  %412 = load double, ptr %411, align 8, !tbaa !46
  %413 = fadd double %412, %408
  store double %413, ptr %411, align 8, !tbaa !46
  %414 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 4
  %415 = invoke noundef double @_ZNK3ipx20SplittedNormalMatrix6time_BEv(ptr noundef nonnull align 8 dereferenceable(520) %414)
          to label %416 unwind label %442

416:                                              ; preds = %409
  %417 = load ptr, ptr %14, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.ipx_info, ptr %417, i32 0, i32 54
  %419 = load double, ptr %418, align 8, !tbaa !47
  %420 = fadd double %419, %415
  store double %420, ptr %418, align 8, !tbaa !47
  %421 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 4
  %422 = invoke noundef double @_ZNK3ipx20SplittedNormalMatrix7time_BtEv(ptr noundef nonnull align 8 dereferenceable(520) %421)
          to label %423 unwind label %442

423:                                              ; preds = %416
  %424 = load ptr, ptr %14, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.ipx_info, ptr %424, i32 0, i32 55
  %426 = load double, ptr %425, align 8, !tbaa !48
  %427 = fadd double %426, %422
  store double %427, ptr %425, align 8, !tbaa !48
  %428 = invoke noundef i32 @_ZNK3ipx18ConjugateResiduals4iterEv(ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %429 unwind label %442

429:                                              ; preds = %423
  %430 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 8
  %431 = load i32, ptr %430, align 8, !tbaa !49
  %432 = add nsw i32 %431, %428
  store i32 %432, ptr %430, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  store i32 0, ptr %41, align 4, !tbaa !29
  br label %433

433:                                              ; preds = %459, %429
  %434 = load i32, ptr %41, align 4, !tbaa !29
  %435 = load i32, ptr %15, align 4, !tbaa !29
  %436 = icmp slt i32 %434, %435
  br i1 %436, label %446, label %437

437:                                              ; preds = %433
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %462

438:                                              ; preds = %380
  %439 = landingpad { ptr, i32 }
          cleanup
  %440 = extractvalue { ptr, i32 } %439, 0
  store ptr %440, ptr %20, align 8
  %441 = extractvalue { ptr, i32 } %439, 1
  store i32 %441, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %645

442:                                              ; preds = %614, %546, %541, %423, %416, %409, %402, %396, %392, %390, %385, %382
  %443 = landingpad { ptr, i32 }
          cleanup
  %444 = extractvalue { ptr, i32 } %443, 0
  store ptr %444, ptr %20, align 8
  %445 = extractvalue { ptr, i32 } %443, 1
  store i32 %445, ptr %21, align 4
  br label %644

446:                                              ; preds = %433
  %447 = load i32, ptr %41, align 4, !tbaa !29
  %448 = sext i32 %447 to i64
  %449 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %38, i64 noundef %448) #8
  %450 = load double, ptr %449, align 8, !tbaa !9
  %451 = load ptr, ptr %13, align 8, !tbaa !5
  %452 = load ptr, ptr %36, align 8, !tbaa !5
  %453 = load i32, ptr %41, align 4, !tbaa !29
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds i32, ptr %452, i64 %454
  %456 = load i32, ptr %455, align 4, !tbaa !29
  %457 = sext i32 %456 to i64
  %458 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %451, i64 noundef %457) #8
  store double %450, ptr %458, align 8, !tbaa !9
  br label %459

459:                                              ; preds = %446
  %460 = load i32, ptr %41, align 4, !tbaa !29
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %41, align 4, !tbaa !29
  br label %433, !llvm.loop !50

462:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  store i32 0, ptr %42, align 4, !tbaa !29
  br label %463

463:                                              ; preds = %538, %462
  %464 = load i32, ptr %42, align 4, !tbaa !29
  %465 = load i32, ptr %15, align 4, !tbaa !29
  %466 = icmp slt i32 %464, %465
  br i1 %466, label %468, label %467

467:                                              ; preds = %463
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %541

468:                                              ; preds = %463
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  %469 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %470 = load ptr, ptr %469, align 8, !tbaa !35
  %471 = load i32, ptr %42, align 4, !tbaa !29
  %472 = invoke noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %470, i32 noundef %471)
          to label %473 unwind label %501

473:                                              ; preds = %468
  store i32 %472, ptr %43, align 4, !tbaa !29
  %474 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %475 = load ptr, ptr %474, align 8, !tbaa !35
  %476 = load i32, ptr %43, align 4, !tbaa !29
  %477 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %475, i32 noundef %476)
          to label %478 unwind label %501

478:                                              ; preds = %473
  %479 = icmp eq i32 %477, 0
  br i1 %479, label %480, label %507

480:                                              ; preds = %478
  %481 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %482 = load i32, ptr %43, align 4, !tbaa !29
  %483 = sext i32 %482 to i64
  %484 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %481, i64 noundef %483) #8
  %485 = load double, ptr %484, align 8, !tbaa !9
  %486 = load ptr, ptr %13, align 8, !tbaa !5
  %487 = load i32, ptr %42, align 4, !tbaa !29
  %488 = sext i32 %487 to i64
  %489 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %486, i64 noundef %488) #8
  %490 = load double, ptr %489, align 8, !tbaa !9
  %491 = fdiv double %490, %485
  store double %491, ptr %489, align 8, !tbaa !9
  %492 = load ptr, ptr %13, align 8, !tbaa !5
  %493 = load i32, ptr %42, align 4, !tbaa !29
  %494 = sext i32 %493 to i64
  %495 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %492, i64 noundef %494) #8
  %496 = load double, ptr %495, align 8, !tbaa !9
  %497 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %496)
          to label %498 unwind label %501

498:                                              ; preds = %480
  br i1 %497, label %499, label %500

499:                                              ; preds = %498
  br label %506

500:                                              ; preds = %498
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.12, i32 noundef 166, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

501:                                              ; preds = %507, %480, %473, %468
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %20, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %644

505:                                              ; No predecessors!
  br label %506

506:                                              ; preds = %505, %499
  br label %537

507:                                              ; preds = %478
  %508 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %509 = load ptr, ptr %508, align 8, !tbaa !35
  %510 = load i32, ptr %43, align 4, !tbaa !29
  %511 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %509, i32 noundef %510)
          to label %512 unwind label %501

512:                                              ; preds = %507
  %513 = icmp eq i32 %511, 1
  br i1 %513, label %514, label %515

514:                                              ; preds = %512
  br label %517

515:                                              ; preds = %512
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.12, i32 noundef 168, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

516:                                              ; No predecessors!
  br label %517

517:                                              ; preds = %516, %514
  %518 = load ptr, ptr %13, align 8, !tbaa !5
  %519 = load i32, ptr %42, align 4, !tbaa !29
  %520 = sext i32 %519 to i64
  %521 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %518, i64 noundef %520) #8
  %522 = load double, ptr %521, align 8, !tbaa !9
  %523 = fcmp oeq double %522, 0.000000e+00
  br i1 %523, label %524, label %525

524:                                              ; preds = %517
  br label %527

525:                                              ; preds = %517
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.12, i32 noundef 169, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

526:                                              ; No predecessors!
  br label %527

527:                                              ; preds = %526, %524
  %528 = load ptr, ptr %9, align 8, !tbaa !5
  %529 = load i32, ptr %43, align 4, !tbaa !29
  %530 = sext i32 %529 to i64
  %531 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %528, i64 noundef %530) #8
  %532 = load double, ptr %531, align 8, !tbaa !9
  %533 = load ptr, ptr %13, align 8, !tbaa !5
  %534 = load i32, ptr %42, align 4, !tbaa !29
  %535 = sext i32 %534 to i64
  %536 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %533, i64 noundef %535) #8
  store double %532, ptr %536, align 8, !tbaa !9
  br label %537

537:                                              ; preds = %527, %506
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %538

538:                                              ; preds = %537
  %539 = load i32, ptr %42, align 4, !tbaa !29
  %540 = add nsw i32 %539, 1
  store i32 %540, ptr %42, align 4, !tbaa !29
  br label %463, !llvm.loop !51

541:                                              ; preds = %467
  %542 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %543 = load ptr, ptr %542, align 8, !tbaa !35
  %544 = load ptr, ptr %13, align 8, !tbaa !5
  %545 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %543, ptr noundef nonnull align 8 dereferenceable(16) %544, ptr noundef nonnull align 8 dereferenceable(16) %545, i8 noundef signext 84)
          to label %546 unwind label %442

546:                                              ; preds = %541
  %547 = load ptr, ptr %10, align 8, !tbaa !5
  %548 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %547)
          to label %549 unwind label %442

549:                                              ; preds = %546
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  store i32 0, ptr %44, align 4, !tbaa !29
  br label %550

550:                                              ; preds = %611, %549
  %551 = load i32, ptr %44, align 4, !tbaa !29
  %552 = load i32, ptr %16, align 4, !tbaa !29
  %553 = load i32, ptr %15, align 4, !tbaa !29
  %554 = add nsw i32 %552, %553
  %555 = icmp slt i32 %551, %554
  br i1 %555, label %557, label %556

556:                                              ; preds = %550
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  br label %614

557:                                              ; preds = %550
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  store double 0.000000e+00, ptr %45, align 8, !tbaa !9
  %558 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %559 = load ptr, ptr %558, align 8, !tbaa !35
  %560 = load i32, ptr %44, align 4, !tbaa !29
  %561 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %559, i32 noundef %560)
          to label %562 unwind label %594

562:                                              ; preds = %557
  %563 = icmp eq i32 %561, -1
  br i1 %563, label %564, label %605

564:                                              ; preds = %562
  %565 = load ptr, ptr %9, align 8, !tbaa !5
  %566 = load i32, ptr %44, align 4, !tbaa !29
  %567 = sext i32 %566 to i64
  %568 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %565, i64 noundef %567) #8
  %569 = load double, ptr %568, align 8, !tbaa !9
  %570 = load ptr, ptr %17, align 8, !tbaa !5
  %571 = load i32, ptr %44, align 4, !tbaa !29
  %572 = load ptr, ptr %13, align 8, !tbaa !5
  %573 = invoke noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %570, i32 noundef %571, ptr noundef nonnull align 8 dereferenceable(16) %572)
          to label %574 unwind label %594

574:                                              ; preds = %564
  %575 = fsub double %569, %573
  store double %575, ptr %45, align 8, !tbaa !9
  %576 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %577 = load i32, ptr %44, align 4, !tbaa !29
  %578 = sext i32 %577 to i64
  %579 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %576, i64 noundef %578) #8
  %580 = load double, ptr %579, align 8, !tbaa !9
  %581 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 5
  %582 = load i32, ptr %44, align 4, !tbaa !29
  %583 = sext i32 %582 to i64
  %584 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %581, i64 noundef %583) #8
  %585 = load double, ptr %584, align 8, !tbaa !9
  %586 = fmul double %580, %585
  %587 = load double, ptr %45, align 8, !tbaa !9
  %588 = fmul double %587, %586
  store double %588, ptr %45, align 8, !tbaa !9
  %589 = load double, ptr %45, align 8, !tbaa !9
  %590 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %589)
          to label %591 unwind label %594

591:                                              ; preds = %574
  br i1 %590, label %592, label %593

592:                                              ; preds = %591
  br label %599

593:                                              ; preds = %591
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.12, i32 noundef 182, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

594:                                              ; preds = %599, %574, %564, %557
  %595 = landingpad { ptr, i32 }
          cleanup
  %596 = extractvalue { ptr, i32 } %595, 0
  store ptr %596, ptr %20, align 8
  %597 = extractvalue { ptr, i32 } %595, 1
  store i32 %597, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  br label %644

598:                                              ; No predecessors!
  br label %599

599:                                              ; preds = %598, %592
  %600 = load ptr, ptr %17, align 8, !tbaa !5
  %601 = load i32, ptr %44, align 4, !tbaa !29
  %602 = load double, ptr %45, align 8, !tbaa !9
  %603 = fneg double %602
  invoke void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %600, i32 noundef %601, double noundef %603, ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %604 unwind label %594

604:                                              ; preds = %599
  br label %605

605:                                              ; preds = %604, %562
  %606 = load double, ptr %45, align 8, !tbaa !9
  %607 = load ptr, ptr %12, align 8, !tbaa !5
  %608 = load i32, ptr %44, align 4, !tbaa !29
  %609 = sext i32 %608 to i64
  %610 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %607, i64 noundef %609) #8
  store double %606, ptr %610, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %611

611:                                              ; preds = %605
  %612 = load i32, ptr %44, align 4, !tbaa !29
  %613 = add nsw i32 %612, 1
  store i32 %613, ptr %44, align 4, !tbaa !29
  br label %550, !llvm.loop !52

614:                                              ; preds = %556
  %615 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %616 = load ptr, ptr %615, align 8, !tbaa !35
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %616, ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %19, i8 noundef signext 78)
          to label %617 unwind label %442

617:                                              ; preds = %614
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  store i32 0, ptr %46, align 4, !tbaa !29
  br label %618

618:                                              ; preds = %636, %617
  %619 = load i32, ptr %46, align 4, !tbaa !29
  %620 = load i32, ptr %15, align 4, !tbaa !29
  %621 = icmp slt i32 %619, %620
  br i1 %621, label %623, label %622

622:                                              ; preds = %618
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %643

623:                                              ; preds = %618
  %624 = load i32, ptr %46, align 4, !tbaa !29
  %625 = sext i32 %624 to i64
  %626 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %625) #8
  %627 = load double, ptr %626, align 8, !tbaa !9
  %628 = load ptr, ptr %12, align 8, !tbaa !5
  %629 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %47, i32 0, i32 3
  %630 = load ptr, ptr %629, align 8, !tbaa !35
  %631 = load i32, ptr %46, align 4, !tbaa !29
  %632 = invoke noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %630, i32 noundef %631)
          to label %633 unwind label %639

633:                                              ; preds = %623
  %634 = sext i32 %632 to i64
  %635 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %628, i64 noundef %634) #8
  store double %627, ptr %635, align 8, !tbaa !9
  br label %636

636:                                              ; preds = %633
  %637 = load i32, ptr %46, align 4, !tbaa !29
  %638 = add nsw i32 %637, 1
  store i32 %638, ptr %46, align 4, !tbaa !29
  br label %618, !llvm.loop !53

639:                                              ; preds = %623
  %640 = landingpad { ptr, i32 }
          cleanup
  %641 = extractvalue { ptr, i32 } %640, 0
  store ptr %641, ptr %20, align 8
  %642 = extractvalue { ptr, i32 } %640, 1
  store i32 %642, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %644

643:                                              ; preds = %622
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  ret void

644:                                              ; preds = %639, %594, %501, %442
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #8
  br label %645

645:                                              ; preds = %644, %438
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #8
  br label %646

646:                                              ; preds = %645, %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %647

647:                                              ; preds = %646, %349, %259, %200, %141, %124, %109, %82
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #8
  br label %648

648:                                              ; preds = %647, %69
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %649

649:                                              ; preds = %648
  %650 = load ptr, ptr %20, align 8
  %651 = load i32, ptr %21, align 4
  %652 = insertvalue { ptr, i32 } poison, ptr %650, 0
  %653 = insertvalue { ptr, i32 } %652, i32 %651, 1
  resume { ptr, i32 } %653
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZNK3ipx5Model2AIEv(ptr noundef nonnull align 8 dereferenceable(704)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #4 align 2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #2 align 2

declare void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), i8 noundef signext) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, ptr noundef nonnull align 8 dereferenceable(16)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt8isfinited(double noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, double noundef, ptr noundef nonnull align 8 dereferenceable(16)) #2

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

declare noundef ptr @_ZNK3ipx20SplittedNormalMatrix7colpermEv(ptr noundef nonnull align 8 dereferenceable(520)) #6

declare void @_ZN3ipx20SplittedNormalMatrix10reset_timeEv(ptr noundef nonnull align 8 dereferenceable(520)) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt8valarrayIdEC2EOS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

declare void @_ZN3ipx18ConjugateResidualsC1ERKNS_7ControlE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(1496)) unnamed_addr #6

declare void @_ZN3ipx18ConjugateResiduals5SolveERNS_14LinearOperatorERKSt8valarrayIdEdPKdiRS4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16), double noundef, ptr noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(16)) #6

declare noundef i32 @_ZNK3ipx18ConjugateResiduals7errflagEv(ptr noundef nonnull align 8 dereferenceable(24)) #6

declare noundef i32 @_ZNK3ipx18ConjugateResiduals4iterEv(ptr noundef nonnull align 8 dereferenceable(24)) #6

declare noundef double @_ZNK3ipx18ConjugateResiduals4timeEv(ptr noundef nonnull align 8 dereferenceable(24)) #6

declare noundef double @_ZNK3ipx20SplittedNormalMatrix8time_NNtEv(ptr noundef nonnull align 8 dereferenceable(520)) #6

declare noundef double @_ZNK3ipx20SplittedNormalMatrix6time_BEv(ptr noundef nonnull align 8 dereferenceable(520)) #6

declare noundef double @_ZNK3ipx20SplittedNormalMatrix7time_BtEv(ptr noundef nonnull align 8 dereferenceable(520)) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !6, i64 16}
!12 = !{!"_ZTSN3ipx14KKTSolverBasisE", !13, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !14, i64 32, !26, i64 552, !28, i64 568, !17, i64 572, !17, i64 576, !17, i64 580}
!13 = !{!"_ZTSN3ipx9KKTSolverE"}
!14 = !{!"_ZTSN3ipx20SplittedNormalMatrixE", !15, i64 0, !6, i64 8, !16, i64 16, !16, i64 144, !16, i64 272, !18, i64 400, !18, i64 424, !18, i64 448, !26, i64 472, !28, i64 488, !10, i64 496, !10, i64 504, !10, i64 512}
!15 = !{!"_ZTSN3ipx14LinearOperatorE"}
!16 = !{!"_ZTSN3ipx12SparseMatrixE", !17, i64 0, !18, i64 8, !18, i64 32, !22, i64 56, !18, i64 80, !22, i64 104}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSSt6vectorIiSaIiEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTSSt6vectorIdSaIdEE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"_ZTSSt8valarrayIdE", !27, i64 0, !6, i64 8}
!27 = !{!"long", !7, i64 0}
!28 = !{!"bool", !7, i64 0}
!29 = !{!17, !17, i64 0}
!30 = !{!31, !17, i64 12}
!31 = !{!"_ZTS8ipx_info", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !17, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !17, i64 40, !17, i64 44, !17, i64 48, !17, i64 52, !17, i64 56, !17, i64 60, !17, i64 64, !17, i64 68, !17, i64 72, !17, i64 76, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !17, i64 192, !17, i64 196, !17, i64 200, !17, i64 204, !17, i64 208, !17, i64 212, !17, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !10, i64 408, !17, i64 416, !17, i64 420, !17, i64 424, !17, i64 428, !10, i64 432, !10, i64 440, !10, i64 448, !10, i64 456}
!32 = !{!12, !28, i64 568}
!33 = !{i8 0, i8 2}
!34 = !{}
!35 = !{!12, !6, i64 24}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = distinct !{!38, !37}
!39 = distinct !{!39, !37}
!40 = distinct !{!40, !37}
!41 = distinct !{!41, !37}
!42 = !{!12, !6, i64 8}
!43 = !{!12, !17, i64 572}
!44 = !{!31, !17, i64 200}
!45 = !{!31, !10, i64 312}
!46 = !{!31, !10, i64 320}
!47 = !{!31, !10, i64 328}
!48 = !{!31, !10, i64 336}
!49 = !{!12, !17, i64 576}
!50 = distinct !{!50, !37}
!51 = distinct !{!51, !37}
!52 = distinct !{!52, !37}
!53 = distinct !{!53, !37}


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

%"class.std::valarray" = type { i64, ptr }
%"class.ipx::ConjugateResiduals" = type { ptr, i32, i32, double }

@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [81 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE = external hidden unnamed_addr constant [109 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [18 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(584) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull align 8 dereferenceable(16) %2, double noundef %3, ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %5, ptr nocapture noundef %6) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca %"class.std::valarray", align 8
  %9 = alloca %"class.std::valarray", align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca %"class.std::valarray", align 8
  %13 = alloca double, align 8
  %14 = alloca %"class.ipx::ConjugateResiduals", align 8
  %15 = getelementptr inbounds i8, ptr %0, i64 16
  %16 = load ptr, ptr %15, align 8, !tbaa !5
  %17 = tail call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %16)
  %18 = load ptr, ptr %15, align 8, !tbaa !5
  %19 = tail call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %18)
  %20 = load ptr, ptr %15, align 8, !tbaa !5
  %21 = tail call noundef nonnull align 8 dereferenceable(128) ptr @_ZNK3ipx5Model2AIEv(ptr noundef nonnull align 8 dereferenceable(704) %20)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #8
  %22 = sext i32 %17 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %22)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #8
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %22)
          to label %23 unwind label %29

23:                                               ; preds = %7
  %24 = getelementptr inbounds i8, ptr %6, i64 12
  store i32 0, ptr %24, align 4, !tbaa !27
  %25 = getelementptr inbounds i8, ptr %0, i64 568
  %26 = load i8, ptr %25, align 8, !tbaa !29, !range !30, !noundef !31
  %27 = trunc nuw i8 %26 to i1
  br i1 %27, label %31, label %28

28:                                               ; preds = %23
  call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.12, i32 noundef 81, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

29:                                               ; preds = %7
  %30 = landingpad { ptr, i32 }
          cleanup
  br label %286

31:                                               ; preds = %23
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  store double 0.000000e+00, ptr %10, align 8, !tbaa !32
  %32 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %33 unwind label %37

33:                                               ; preds = %31
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  %34 = icmp sgt i32 %17, 0
  br i1 %34, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %33
  %35 = getelementptr inbounds i8, ptr %0, i64 24
  %wide.trip.count = zext nneg i32 %17 to i64
  br label %39

._crit_edge:                                      ; preds = %52
  %36 = icmp sgt i32 %.1142, 0
  br i1 %36, label %53, label %._crit_edge.thread

37:                                               ; preds = %31
  %38 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %285

39:                                               ; preds = %.lr.ph, %52
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %52 ]
  %.0141162 = phi i32 [ 0, %.lr.ph ], [ %.1142, %52 ]
  %40 = load ptr, ptr %35, align 8, !tbaa !33
  %41 = trunc nuw nsw i64 %indvars.iv to i32
  %42 = call noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %40, i32 noundef %41)
  %43 = load ptr, ptr %35, align 8, !tbaa !33
  %44 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %43, i32 noundef %42)
  %45 = icmp eq i32 %44, 1
  br i1 %45, label %46, label %52

46:                                               ; preds = %39
  %47 = sext i32 %42 to i64
  %48 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1, i64 noundef %47) #8
  %49 = load double, ptr %48, align 8, !tbaa !32
  %50 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv) #8
  store double %49, ptr %50, align 8, !tbaa !32
  %51 = add nsw i32 %.0141162, 1
  br label %52

52:                                               ; preds = %46, %39
  %.1142 = phi i32 [ %51, %46 ], [ %.0141162, %39 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %39, !llvm.loop !34

53:                                               ; preds = %._crit_edge
  %54 = getelementptr inbounds i8, ptr %0, i64 24
  %55 = load ptr, ptr %54, align 8, !tbaa !33
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %55, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %9, i8 noundef signext 84)
          to label %._crit_edge.thread unwind label %56

56:                                               ; preds = %112, %.loopexit, %53
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %285

._crit_edge.thread:                               ; preds = %33, %53, %._crit_edge
  %58 = phi i1 [ true, %53 ], [ false, %._crit_edge ], [ false, %33 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  store double 0.000000e+00, ptr %11, align 8, !tbaa !32
  %59 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %60 unwind label %67

60:                                               ; preds = %._crit_edge.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  %61 = add nsw i32 %19, %17
  %62 = icmp sgt i32 %61, 0
  br i1 %58, label %.preheader158, label %.preheader159

.preheader159:                                    ; preds = %60
  br i1 %62, label %.lr.ph164, label %.loopexit

.lr.ph164:                                        ; preds = %.preheader159
  %63 = getelementptr inbounds i8, ptr %0, i64 24
  %64 = getelementptr inbounds i8, ptr %0, i64 552
  %wide.trip.count190 = zext nneg i32 %61 to i64
  br label %92

.preheader158:                                    ; preds = %60
  br i1 %62, label %.lr.ph166, label %.loopexit

.lr.ph166:                                        ; preds = %.preheader158
  %65 = getelementptr inbounds i8, ptr %0, i64 24
  %66 = getelementptr inbounds i8, ptr %0, i64 552
  %wide.trip.count195 = zext nneg i32 %61 to i64
  br label %69

67:                                               ; preds = %._crit_edge.thread
  %68 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %285

69:                                               ; preds = %.lr.ph166, %91
  %indvars.iv192 = phi i64 [ 0, %.lr.ph166 ], [ %indvars.iv.next193, %91 ]
  %70 = load ptr, ptr %65, align 8, !tbaa !33
  %71 = trunc nuw nsw i64 %indvars.iv192 to i32
  %72 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %70, i32 noundef %71)
  %73 = icmp eq i32 %72, -1
  br i1 %73, label %74, label %91

74:                                               ; preds = %69
  %75 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %66, i64 noundef %indvars.iv192) #8
  %76 = load double, ptr %75, align 8, !tbaa !32
  %77 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %66, i64 noundef %indvars.iv192) #8
  %78 = load double, ptr %77, align 8, !tbaa !32
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1, i64 noundef %indvars.iv192) #8
  %80 = load double, ptr %79, align 8, !tbaa !32
  %81 = invoke noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %21, i32 noundef %71, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %82 unwind label %88

82:                                               ; preds = %74
  %83 = fmul double %76, %78
  %84 = fsub double %80, %81
  %85 = fmul double %83, %84
  %86 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %85)
  br i1 %86, label %90, label %87

87:                                               ; preds = %82
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.12, i32 noundef 105, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

88:                                               ; preds = %74
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %285

90:                                               ; preds = %82
  call void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %21, i32 noundef %71, double noundef %85, ptr noundef nonnull align 8 dereferenceable(16) %8)
  br label %91

91:                                               ; preds = %69, %90
  %indvars.iv.next193 = add nuw nsw i64 %indvars.iv192, 1
  %exitcond196.not = icmp eq i64 %indvars.iv.next193, %wide.trip.count195
  br i1 %exitcond196.not, label %.loopexit, label %69, !llvm.loop !36

92:                                               ; preds = %.lr.ph164, %109
  %indvars.iv187 = phi i64 [ 0, %.lr.ph164 ], [ %indvars.iv.next188, %109 ]
  %93 = load ptr, ptr %63, align 8, !tbaa !33
  %94 = trunc nuw nsw i64 %indvars.iv187 to i32
  %95 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %93, i32 noundef %94)
  %96 = icmp eq i32 %95, -1
  br i1 %96, label %97, label %109

97:                                               ; preds = %92
  %98 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %64, i64 noundef %indvars.iv187) #8
  %99 = load double, ptr %98, align 8, !tbaa !32
  %100 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %64, i64 noundef %indvars.iv187) #8
  %101 = load double, ptr %100, align 8, !tbaa !32
  %102 = fmul double %99, %101
  %103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1, i64 noundef %indvars.iv187) #8
  %104 = load double, ptr %103, align 8, !tbaa !32
  %105 = fmul double %102, %104
  %106 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %105)
  br i1 %106, label %108, label %107

107:                                              ; preds = %97
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.12, i32 noundef 114, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

108:                                              ; preds = %97
  call void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %21, i32 noundef %94, double noundef %105, ptr noundef nonnull align 8 dereferenceable(16) %8)
  br label %109

109:                                              ; preds = %92, %108
  %indvars.iv.next188 = add nuw nsw i64 %indvars.iv187, 1
  %exitcond191.not = icmp eq i64 %indvars.iv.next188, %wide.trip.count190
  br i1 %exitcond191.not, label %.loopexit, label %92, !llvm.loop !37

.loopexit:                                        ; preds = %109, %91, %.preheader159, %.preheader158
  %110 = getelementptr inbounds i8, ptr %0, i64 24
  %111 = load ptr, ptr %110, align 8, !tbaa !33
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %111, ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %8, i8 noundef signext 78)
          to label %112 unwind label %56

112:                                              ; preds = %.loopexit
  %113 = load ptr, ptr %110, align 8, !tbaa !33
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %113, ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 8 dereferenceable(16) %9, i8 noundef signext 78)
          to label %.preheader157 unwind label %56

.preheader157:                                    ; preds = %112
  br i1 %34, label %.lr.ph168, label %._crit_edge169

.lr.ph168:                                        ; preds = %.preheader157
  %114 = getelementptr inbounds i8, ptr %0, i64 552
  %wide.trip.count200 = zext nneg i32 %17 to i64
  br label %117

._crit_edge169:                                   ; preds = %149, %.preheader157
  %115 = getelementptr inbounds i8, ptr %0, i64 32
  %116 = invoke noundef ptr @_ZNK3ipx20SplittedNormalMatrix7colpermEv(ptr noundef nonnull align 8 dereferenceable(520) %115)
          to label %.preheader156 unwind label %150

.preheader156:                                    ; preds = %._crit_edge169
  br i1 %34, label %.lr.ph171.preheader, label %._crit_edge172

.lr.ph171.preheader:                              ; preds = %.preheader156
  %wide.trip.count205 = zext nneg i32 %17 to i64
  br label %.lr.ph171

117:                                              ; preds = %.lr.ph168, %149
  %indvars.iv197 = phi i64 [ 0, %.lr.ph168 ], [ %indvars.iv.next198, %149 ]
  %118 = load ptr, ptr %110, align 8, !tbaa !33
  %119 = trunc nuw nsw i64 %indvars.iv197 to i32
  %120 = call noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %118, i32 noundef %119)
  %121 = load ptr, ptr %110, align 8, !tbaa !33
  %122 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %121, i32 noundef %120)
  %123 = icmp eq i32 %122, 0
  br i1 %123, label %124, label %142

124:                                              ; preds = %117
  %125 = sext i32 %120 to i64
  %126 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %114, i64 noundef %125) #8
  %127 = load double, ptr %126, align 8, !tbaa !32
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv197) #8
  %129 = load double, ptr %128, align 8, !tbaa !32
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv197) #8
  %131 = load double, ptr %130, align 8, !tbaa !32
  %132 = fsub double %129, %131
  %133 = fdiv double %132, %127
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1, i64 noundef %125) #8
  %135 = load double, ptr %134, align 8, !tbaa !32
  %136 = call double @llvm.fmuladd.f64(double %135, double %127, double %133)
  %137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv197) #8
  store double %136, ptr %137, align 8, !tbaa !32
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv197) #8
  %139 = load double, ptr %138, align 8, !tbaa !32
  %140 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %139)
  br i1 %140, label %149, label %141

141:                                              ; preds = %124
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.12, i32 noundef 131, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

142:                                              ; preds = %117
  %143 = load ptr, ptr %110, align 8, !tbaa !33
  %144 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %143, i32 noundef %120)
  %145 = icmp eq i32 %144, 1
  br i1 %145, label %147, label %146

146:                                              ; preds = %142
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.12, i32 noundef 133, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

147:                                              ; preds = %142
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv197) #8
  store double 0.000000e+00, ptr %148, align 8, !tbaa !32
  br label %149

149:                                              ; preds = %124, %147
  %indvars.iv.next198 = add nuw nsw i64 %indvars.iv197, 1
  %exitcond201.not = icmp eq i64 %indvars.iv.next198, %wide.trip.count200
  br i1 %exitcond201.not, label %._crit_edge169, label %117, !llvm.loop !38

._crit_edge172:                                   ; preds = %.lr.ph171, %.preheader156
  invoke void @_ZN3ipx20SplittedNormalMatrix10reset_timeEv(ptr noundef nonnull align 8 dereferenceable(520) %115)
          to label %158 unwind label %150

150:                                              ; preds = %._crit_edge172, %._crit_edge169
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %285

.lr.ph171:                                        ; preds = %.lr.ph171.preheader, %.lr.ph171
  %indvars.iv202 = phi i64 [ 0, %.lr.ph171.preheader ], [ %indvars.iv.next203, %.lr.ph171 ]
  %152 = getelementptr inbounds i32, ptr %116, i64 %indvars.iv202
  %153 = load i32, ptr %152, align 4, !tbaa !39
  %154 = sext i32 %153 to i64
  %155 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %154) #8
  %156 = load double, ptr %155, align 8, !tbaa !32
  %157 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv202) #8
  store double %156, ptr %157, align 8, !tbaa !32
  %indvars.iv.next203 = add nuw nsw i64 %indvars.iv202, 1
  %exitcond206.not = icmp eq i64 %indvars.iv.next203, %wide.trip.count205
  br i1 %exitcond206.not, label %._crit_edge172, label %.lr.ph171, !llvm.loop !40

158:                                              ; preds = %._crit_edge172
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #8
  call void @_ZNSt8valarrayIdEC2EOS0_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  store double 0.000000e+00, ptr %13, align 8, !tbaa !32
  %159 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %160 unwind label %200

160:                                              ; preds = %158
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #8
  %161 = getelementptr inbounds i8, ptr %0, i64 8
  %162 = load ptr, ptr %161, align 8, !tbaa !41
  invoke void @_ZN3ipx18ConjugateResidualsC1ERKNS_7ControlE(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(1496) %162)
          to label %163 unwind label %202

163:                                              ; preds = %160
  %164 = getelementptr inbounds i8, ptr %0, i64 572
  %165 = load i32, ptr %164, align 4, !tbaa !42
  invoke void @_ZN3ipx18ConjugateResiduals5SolveERNS_14LinearOperatorERKSt8valarrayIdEdPKdiRS4_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(8) %115, ptr noundef nonnull align 8 dereferenceable(16) %9, double noundef %3, ptr noundef null, i32 noundef %165, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %166 unwind label %202

166:                                              ; preds = %163
  %167 = invoke noundef i32 @_ZNK3ipx18ConjugateResiduals7errflagEv(ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %168 unwind label %202

168:                                              ; preds = %166
  store i32 %167, ptr %24, align 4, !tbaa !27
  %169 = invoke noundef i32 @_ZNK3ipx18ConjugateResiduals4iterEv(ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %170 unwind label %202

170:                                              ; preds = %168
  %171 = getelementptr inbounds i8, ptr %6, i64 200
  %172 = load i32, ptr %171, align 8, !tbaa !43
  %173 = add nsw i32 %172, %169
  store i32 %173, ptr %171, align 8, !tbaa !43
  %174 = invoke noundef double @_ZNK3ipx18ConjugateResiduals4timeEv(ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %175 unwind label %202

175:                                              ; preds = %170
  %176 = getelementptr inbounds i8, ptr %6, i64 312
  %177 = load double, ptr %176, align 8, !tbaa !44
  %178 = fadd double %174, %177
  store double %178, ptr %176, align 8, !tbaa !44
  %179 = invoke noundef double @_ZNK3ipx20SplittedNormalMatrix8time_NNtEv(ptr noundef nonnull align 8 dereferenceable(520) %115)
          to label %180 unwind label %202

180:                                              ; preds = %175
  %181 = getelementptr inbounds i8, ptr %6, i64 320
  %182 = load double, ptr %181, align 8, !tbaa !45
  %183 = fadd double %179, %182
  store double %183, ptr %181, align 8, !tbaa !45
  %184 = invoke noundef double @_ZNK3ipx20SplittedNormalMatrix6time_BEv(ptr noundef nonnull align 8 dereferenceable(520) %115)
          to label %185 unwind label %202

185:                                              ; preds = %180
  %186 = getelementptr inbounds i8, ptr %6, i64 328
  %187 = load double, ptr %186, align 8, !tbaa !46
  %188 = fadd double %184, %187
  store double %188, ptr %186, align 8, !tbaa !46
  %189 = invoke noundef double @_ZNK3ipx20SplittedNormalMatrix7time_BtEv(ptr noundef nonnull align 8 dereferenceable(520) %115)
          to label %190 unwind label %202

190:                                              ; preds = %185
  %191 = getelementptr inbounds i8, ptr %6, i64 336
  %192 = load double, ptr %191, align 8, !tbaa !47
  %193 = fadd double %189, %192
  store double %193, ptr %191, align 8, !tbaa !47
  %194 = invoke noundef i32 @_ZNK3ipx18ConjugateResiduals4iterEv(ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %195 unwind label %202

195:                                              ; preds = %190
  %196 = getelementptr inbounds i8, ptr %0, i64 576
  %197 = load i32, ptr %196, align 8, !tbaa !48
  %198 = add nsw i32 %197, %194
  store i32 %198, ptr %196, align 8, !tbaa !48
  br i1 %34, label %.lr.ph175.preheader, label %._crit_edge178

.lr.ph175.preheader:                              ; preds = %195
  %wide.trip.count210 = zext nneg i32 %17 to i64
  br label %.lr.ph175

.preheader155:                                    ; preds = %.lr.ph175
  br i1 %34, label %.lr.ph177, label %._crit_edge178

.lr.ph177:                                        ; preds = %.preheader155
  %199 = getelementptr inbounds i8, ptr %0, i64 552
  %wide.trip.count215 = zext nneg i32 %17 to i64
  br label %211

200:                                              ; preds = %158
  %201 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  br label %284

202:                                              ; preds = %._crit_edge181, %245, %._crit_edge178, %190, %185, %180, %175, %170, %168, %166, %163, %160
  %203 = landingpad { ptr, i32 }
          cleanup
  br label %283

.lr.ph175:                                        ; preds = %.lr.ph175.preheader, %.lr.ph175
  %indvars.iv207 = phi i64 [ 0, %.lr.ph175.preheader ], [ %indvars.iv.next208, %.lr.ph175 ]
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %12, i64 noundef %indvars.iv207) #8
  %205 = load double, ptr %204, align 8, !tbaa !32
  %206 = getelementptr inbounds i32, ptr %116, i64 %indvars.iv207
  %207 = load i32, ptr %206, align 4, !tbaa !39
  %208 = sext i32 %207 to i64
  %209 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %208) #8
  store double %205, ptr %209, align 8, !tbaa !32
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  %exitcond211.not = icmp eq i64 %indvars.iv.next208, %wide.trip.count210
  br i1 %exitcond211.not, label %.preheader155, label %.lr.ph175, !llvm.loop !49

._crit_edge178:                                   ; preds = %244, %195, %.preheader155
  %210 = load ptr, ptr %110, align 8, !tbaa !33
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %210, ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %5, i8 noundef signext 84)
          to label %245 unwind label %202

211:                                              ; preds = %.lr.ph177, %244
  %indvars.iv212 = phi i64 [ 0, %.lr.ph177 ], [ %indvars.iv.next213, %244 ]
  %212 = load ptr, ptr %110, align 8, !tbaa !33
  %213 = trunc nuw nsw i64 %indvars.iv212 to i32
  %214 = call noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %212, i32 noundef %213)
  %215 = load ptr, ptr %110, align 8, !tbaa !33
  %216 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %215, i32 noundef %214)
  %217 = icmp eq i32 %216, 0
  br i1 %217, label %218, label %229

218:                                              ; preds = %211
  %219 = sext i32 %214 to i64
  %220 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %199, i64 noundef %219) #8
  %221 = load double, ptr %220, align 8, !tbaa !32
  %222 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv212) #8
  %223 = load double, ptr %222, align 8, !tbaa !32
  %224 = fdiv double %223, %221
  store double %224, ptr %222, align 8, !tbaa !32
  %225 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv212) #8
  %226 = load double, ptr %225, align 8, !tbaa !32
  %227 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %226)
  br i1 %227, label %244, label %228

228:                                              ; preds = %218
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.12, i32 noundef 166, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

229:                                              ; preds = %211
  %230 = load ptr, ptr %110, align 8, !tbaa !33
  %231 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %230, i32 noundef %214)
  %232 = icmp eq i32 %231, 1
  br i1 %232, label %234, label %233

233:                                              ; preds = %229
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.12, i32 noundef 168, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

234:                                              ; preds = %229
  %235 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv212) #8
  %236 = load double, ptr %235, align 8, !tbaa !32
  %237 = fcmp oeq double %236, 0.000000e+00
  br i1 %237, label %239, label %238

238:                                              ; preds = %234
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.12, i32 noundef 169, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

239:                                              ; preds = %234
  %240 = sext i32 %214 to i64
  %241 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1, i64 noundef %240) #8
  %242 = load double, ptr %241, align 8, !tbaa !32
  %243 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv212) #8
  store double %242, ptr %243, align 8, !tbaa !32
  br label %244

244:                                              ; preds = %218, %239
  %indvars.iv.next213 = add nuw nsw i64 %indvars.iv212, 1
  %exitcond216.not = icmp eq i64 %indvars.iv.next213, %wide.trip.count215
  br i1 %exitcond216.not, label %._crit_edge178, label %211, !llvm.loop !50

245:                                              ; preds = %._crit_edge178
  %246 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %2)
          to label %.preheader154 unwind label %202

.preheader154:                                    ; preds = %245
  %247 = add nsw i32 %19, %17
  %248 = icmp sgt i32 %247, 0
  br i1 %248, label %.lr.ph180, label %._crit_edge181

.lr.ph180:                                        ; preds = %.preheader154
  %249 = getelementptr inbounds i8, ptr %0, i64 552
  %wide.trip.count220 = zext nneg i32 %247 to i64
  br label %251

._crit_edge181:                                   ; preds = %274, %.preheader154
  %250 = load ptr, ptr %110, align 8, !tbaa !33
  invoke void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176) %250, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %9, i8 noundef signext 78)
          to label %.preheader unwind label %202

.preheader:                                       ; preds = %._crit_edge181
  br i1 %34, label %.lr.ph183.preheader, label %._crit_edge184

.lr.ph183.preheader:                              ; preds = %.preheader
  %wide.trip.count225 = zext nneg i32 %17 to i64
  br label %.lr.ph183

251:                                              ; preds = %.lr.ph180, %274
  %indvars.iv217 = phi i64 [ 0, %.lr.ph180 ], [ %indvars.iv.next218, %274 ]
  %252 = load ptr, ptr %110, align 8, !tbaa !33
  %253 = trunc nuw nsw i64 %indvars.iv217 to i32
  %254 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %252, i32 noundef %253)
  %255 = icmp eq i32 %254, -1
  br i1 %255, label %256, label %274

256:                                              ; preds = %251
  %257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1, i64 noundef %indvars.iv217) #8
  %258 = load double, ptr %257, align 8, !tbaa !32
  %259 = invoke noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %21, i32 noundef %253, ptr noundef nonnull align 8 dereferenceable(16) %5)
          to label %260 unwind label %270

260:                                              ; preds = %256
  %261 = fsub double %258, %259
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %249, i64 noundef %indvars.iv217) #8
  %263 = load double, ptr %262, align 8, !tbaa !32
  %264 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %249, i64 noundef %indvars.iv217) #8
  %265 = load double, ptr %264, align 8, !tbaa !32
  %266 = fmul double %263, %265
  %267 = fmul double %261, %266
  %268 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %267)
  br i1 %268, label %272, label %269

269:                                              ; preds = %260
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.12, i32 noundef 182, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis6_SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE) #9
  unreachable

270:                                              ; preds = %256
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %283

272:                                              ; preds = %260
  %273 = fneg double %267
  call void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %21, i32 noundef %253, double noundef %273, ptr noundef nonnull align 8 dereferenceable(16) %9)
  br label %274

274:                                              ; preds = %272, %251
  %.0130 = phi double [ %267, %272 ], [ 0.000000e+00, %251 ]
  %275 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %indvars.iv217) #8
  store double %.0130, ptr %275, align 8, !tbaa !32
  %indvars.iv.next218 = add nuw nsw i64 %indvars.iv217, 1
  %exitcond221.not = icmp eq i64 %indvars.iv.next218, %wide.trip.count220
  br i1 %exitcond221.not, label %._crit_edge181, label %251, !llvm.loop !51

._crit_edge184:                                   ; preds = %.lr.ph183, %.preheader
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  ret void

.lr.ph183:                                        ; preds = %.lr.ph183.preheader, %.lr.ph183
  %indvars.iv222 = phi i64 [ 0, %.lr.ph183.preheader ], [ %indvars.iv.next223, %.lr.ph183 ]
  %276 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv222) #8
  %277 = load double, ptr %276, align 8, !tbaa !32
  %278 = load ptr, ptr %110, align 8, !tbaa !33
  %279 = trunc nuw nsw i64 %indvars.iv222 to i32
  %280 = call noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %278, i32 noundef %279)
  %281 = sext i32 %280 to i64
  %282 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %4, i64 noundef %281) #8
  store double %277, ptr %282, align 8, !tbaa !32
  %indvars.iv.next223 = add nuw nsw i64 %indvars.iv222, 1
  %exitcond226.not = icmp eq i64 %indvars.iv.next223, %wide.trip.count225
  br i1 %exitcond226.not, label %._crit_edge184, label %.lr.ph183, !llvm.loop !52

283:                                              ; preds = %270, %202
  %.pn = phi { ptr, i32 } [ %271, %270 ], [ %203, %202 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  br label %284

284:                                              ; preds = %283, %200
  %.pn.pn = phi { ptr, i32 } [ %.pn, %283 ], [ %201, %200 ]
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  br label %285

285:                                              ; preds = %150, %284, %88, %67, %56, %37
  %.pn151 = phi { ptr, i32 } [ %89, %88 ], [ %57, %56 ], [ %68, %67 ], [ %38, %37 ], [ %.pn.pn, %284 ], [ %151, %150 ]
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  br label %286

286:                                              ; preds = %285, %29
  %.pn151.pn = phi { ptr, i32 } [ %.pn151, %285 ], [ %30, %29 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  resume { ptr, i32 } %.pn151.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZNK3ipx5Model2AIEv(ptr noundef nonnull align 8 dereferenceable(704)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #4 align 2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKd(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #2 align 2

declare void @_ZNK3ipx5Basis10SolveDenseERKSt8valarrayIdERS2_c(ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), i8 noundef signext) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt8isfinited(double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3ipx13ScatterColumnERKNS_12SparseMatrixEidRSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, double noundef, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2

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

declare noundef ptr @_ZNK3ipx20SplittedNormalMatrix7colpermEv(ptr noundef nonnull align 8 dereferenceable(520)) local_unnamed_addr #6

declare void @_ZN3ipx20SplittedNormalMatrix10reset_timeEv(ptr noundef nonnull align 8 dereferenceable(520)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt8valarrayIdEC2EOS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #2 align 2

declare void @_ZN3ipx18ConjugateResidualsC1ERKNS_7ControlE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(1496)) unnamed_addr #6

declare void @_ZN3ipx18ConjugateResiduals5SolveERNS_14LinearOperatorERKSt8valarrayIdEdPKdiRS4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16), double noundef, ptr noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6

declare noundef i32 @_ZNK3ipx18ConjugateResiduals7errflagEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6

declare noundef i32 @_ZNK3ipx18ConjugateResiduals4iterEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6

declare noundef double @_ZNK3ipx18ConjugateResiduals4timeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6

declare noundef double @_ZNK3ipx20SplittedNormalMatrix8time_NNtEv(ptr noundef nonnull align 8 dereferenceable(520)) local_unnamed_addr #6

declare noundef double @_ZNK3ipx20SplittedNormalMatrix6time_BEv(ptr noundef nonnull align 8 dereferenceable(520)) local_unnamed_addr #6

declare noundef double @_ZNK3ipx20SplittedNormalMatrix7time_BtEv(ptr noundef nonnull align 8 dereferenceable(520)) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !8, i64 16}
!6 = !{!"_ZTSN3ipx14KKTSolverBasisE", !7, i64 0, !8, i64 8, !8, i64 16, !8, i64 24, !11, i64 32, !23, i64 552, !25, i64 568, !14, i64 572, !14, i64 576, !14, i64 580}
!7 = !{!"_ZTSN3ipx9KKTSolverE"}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"_ZTSN3ipx20SplittedNormalMatrixE", !12, i64 0, !8, i64 8, !13, i64 16, !13, i64 144, !13, i64 272, !15, i64 400, !15, i64 424, !15, i64 448, !23, i64 472, !25, i64 488, !26, i64 496, !26, i64 504, !26, i64 512}
!12 = !{!"_ZTSN3ipx14LinearOperatorE"}
!13 = !{!"_ZTSN3ipx12SparseMatrixE", !14, i64 0, !15, i64 8, !15, i64 32, !19, i64 56, !15, i64 80, !19, i64 104}
!14 = !{!"int", !9, i64 0}
!15 = !{!"_ZTSSt6vectorIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!19 = !{!"_ZTSSt6vectorIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!23 = !{!"_ZTSSt8valarrayIdE", !24, i64 0, !8, i64 8}
!24 = !{!"long", !9, i64 0}
!25 = !{!"bool", !9, i64 0}
!26 = !{!"double", !9, i64 0}
!27 = !{!28, !14, i64 12}
!28 = !{!"_ZTS8ipx_info", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !14, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !14, i64 76, !26, i64 80, !26, i64 88, !26, i64 96, !26, i64 104, !26, i64 112, !26, i64 120, !26, i64 128, !26, i64 136, !26, i64 144, !26, i64 152, !26, i64 160, !26, i64 168, !26, i64 176, !26, i64 184, !14, i64 192, !14, i64 196, !14, i64 200, !14, i64 204, !14, i64 208, !14, i64 212, !14, i64 216, !26, i64 224, !26, i64 232, !26, i64 240, !26, i64 248, !26, i64 256, !26, i64 264, !26, i64 272, !26, i64 280, !26, i64 288, !26, i64 296, !26, i64 304, !26, i64 312, !26, i64 320, !26, i64 328, !26, i64 336, !26, i64 344, !26, i64 352, !26, i64 360, !26, i64 368, !26, i64 376, !26, i64 384, !26, i64 392, !26, i64 400, !26, i64 408, !14, i64 416, !14, i64 420, !14, i64 424, !14, i64 428, !26, i64 432, !26, i64 440, !26, i64 448, !26, i64 456}
!29 = !{!6, !25, i64 568}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!26, !26, i64 0}
!33 = !{!6, !8, i64 24}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !35}
!37 = distinct !{!37, !35}
!38 = distinct !{!38, !35}
!39 = !{!14, !14, i64 0}
!40 = distinct !{!40, !35}
!41 = !{!6, !8, i64 8}
!42 = !{!6, !14, i64 572}
!43 = !{!28, !14, i64 200}
!44 = !{!28, !26, i64 312}
!45 = !{!28, !26, i64 320}
!46 = !{!28, !26, i64 328}
!47 = !{!28, !26, i64 336}
!48 = !{!6, !14, i64 576}
!49 = distinct !{!49, !35}
!50 = distinct !{!50, !35}
!51 = distinct !{!51, !35}
!52 = distinct !{!52, !35}


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