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

; 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.ipx::IndexedVector" = type <{ %"class.std::valarray", %"class.std::vector", i32, [4 x i8] }>
%"class.std::valarray" = type { i64, 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 }
%class.anon.23 = type { ptr, ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"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 }
%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.12 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [47 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE = external hidden unnamed_addr constant [54 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [28 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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; 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 @_ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(584) %0, ptr noundef %1, ptr noundef %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.ipx::IndexedVector", align 8
  %14 = alloca double, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca double, align 8
  %18 = alloca %"class.std::vector", align 8
  %19 = alloca i32, align 4
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"class.std::valarray", align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  %30 = alloca %class.anon.23, align 8
  %31 = alloca double, align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca i32, align 4
  %34 = alloca i8, align 1
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %35 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %36 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 2
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  %38 = call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %37)
  store i32 %38, ptr %7, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %39 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 2
  %40 = load ptr, ptr %39, align 8, !tbaa !9
  %41 = call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %40)
  store i32 %41, ptr %8, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %42)
  store ptr %43, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %44)
  store ptr %45, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %46)
  store ptr %47, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %48)
  store ptr %49, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %13) #7
  %50 = load i32, ptr %7, align 4, !tbaa !28
  call void @_ZN3ipx13IndexedVectorC1Ei(ptr noundef nonnull align 8 dereferenceable(44) %13, i32 noundef %50)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %51 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 1
  %52 = load ptr, ptr %51, align 8, !tbaa !29
  %53 = invoke noundef double @_ZNK3ipx7Control13ipm_drop_dualEv(ptr noundef nonnull align 8 dereferenceable(1496) %52)
          to label %54 unwind label %64

54:                                               ; preds = %3
  store double %53, ptr %14, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  store double 2.000000e+00, ptr %17, align 8, !tbaa !30
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.ipx_info, ptr %55, i32 0, i32 3
  store i32 0, ptr %56, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #7
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !28
  br label %57

57:                                               ; preds = %190, %54
  %58 = load i32, ptr %19, align 4, !tbaa !28
  %59 = load i32, ptr %8, align 4, !tbaa !28
  %60 = load i32, ptr %7, align 4, !tbaa !28
  %61 = add nsw i32 %59, %60
  %62 = icmp slt i32 %58, %61
  br i1 %62, label %68, label %63

63:                                               ; preds = %57
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %194

64:                                               ; preds = %3
  %65 = landingpad { ptr, i32 }
          cleanup
  %66 = extractvalue { ptr, i32 } %65, 0
  store ptr %66, ptr %15, align 8
  %67 = extractvalue { ptr, i32 } %65, 1
  store i32 %67, ptr %16, align 4
  br label %432

68:                                               ; preds = %57
  %69 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 3
  %70 = load ptr, ptr %69, align 8, !tbaa !33
  %71 = load i32, ptr %19, align 4, !tbaa !28
  %72 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %70, i32 noundef %71)
          to label %73 unwind label %76

73:                                               ; preds = %68
  %74 = icmp ne i32 %72, -1
  br i1 %74, label %75, label %80

75:                                               ; preds = %73
  br label %190

76:                                               ; preds = %88, %80, %68
  %77 = landingpad { ptr, i32 }
          cleanup
  %78 = extractvalue { ptr, i32 } %77, 0
  store ptr %78, ptr %15, align 8
  %79 = extractvalue { ptr, i32 } %77, 1
  store i32 %79, ptr %16, align 4
  br label %193

80:                                               ; preds = %73
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  %82 = load i32, ptr %19, align 4, !tbaa !28
  %83 = sext i32 %82 to i64
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %81, i64 noundef %83) #7
  %85 = load double, ptr %84, align 8, !tbaa !30
  %86 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %85)
          to label %87 unwind label %76

87:                                               ; preds = %80
  br i1 %86, label %96, label %88

88:                                               ; preds = %87
  %89 = load ptr, ptr %10, align 8, !tbaa !5
  %90 = load i32, ptr %19, align 4, !tbaa !28
  %91 = sext i32 %90 to i64
  %92 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %89, i64 noundef %91) #7
  %93 = load double, ptr %92, align 8, !tbaa !30
  %94 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %93)
          to label %95 unwind label %76

95:                                               ; preds = %88
  br label %96

96:                                               ; preds = %95, %87
  %97 = phi i1 [ true, %87 ], [ %94, %95 ]
  br i1 %97, label %98, label %99

98:                                               ; preds = %96
  br label %101

99:                                               ; preds = %96
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.12, i32 noundef 309, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

100:                                              ; No predecessors!
  br label %101

101:                                              ; preds = %100, %98
  %102 = load ptr, ptr %9, align 8, !tbaa !5
  %103 = load i32, ptr %19, align 4, !tbaa !28
  %104 = sext i32 %103 to i64
  %105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %102, i64 noundef %104) #7
  %106 = load double, ptr %105, align 8, !tbaa !30
  %107 = fcmp ogt double %106, 0.000000e+00
  br i1 %107, label %108, label %109

108:                                              ; preds = %101
  br label %111

109:                                              ; preds = %101
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.12, i32 noundef 310, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

110:                                              ; No predecessors!
  br label %111

111:                                              ; preds = %110, %108
  %112 = load ptr, ptr %10, align 8, !tbaa !5
  %113 = load i32, ptr %19, align 4, !tbaa !28
  %114 = sext i32 %113 to i64
  %115 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %112, i64 noundef %114) #7
  %116 = load double, ptr %115, align 8, !tbaa !30
  %117 = fcmp ogt double %116, 0.000000e+00
  br i1 %117, label %118, label %119

118:                                              ; preds = %111
  br label %121

119:                                              ; preds = %111
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.12, i32 noundef 311, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

120:                                              ; No predecessors!
  br label %121

121:                                              ; preds = %120, %118
  %122 = load ptr, ptr %11, align 8, !tbaa !5
  %123 = load i32, ptr %19, align 4, !tbaa !28
  %124 = sext i32 %123 to i64
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %122, i64 noundef %124) #7
  %126 = load double, ptr %125, align 8, !tbaa !30
  %127 = fcmp ogt double %126, 0.000000e+00
  br i1 %127, label %135, label %128

128:                                              ; preds = %121
  %129 = load ptr, ptr %12, align 8, !tbaa !5
  %130 = load i32, ptr %19, align 4, !tbaa !28
  %131 = sext i32 %130 to i64
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %129, i64 noundef %131) #7
  %133 = load double, ptr %132, align 8, !tbaa !30
  %134 = fcmp ogt double %133, 0.000000e+00
  br label %135

135:                                              ; preds = %128, %121
  %136 = phi i1 [ true, %121 ], [ %134, %128 ]
  br i1 %136, label %137, label %138

137:                                              ; preds = %135
  br label %140

138:                                              ; preds = %135
  call void @__assert_fail(ptr noundef @.str.31, ptr noundef @.str.12, i32 noundef 312, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

139:                                              ; No predecessors!
  br label %140

140:                                              ; preds = %139, %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %141 = load ptr, ptr %11, align 8, !tbaa !5
  %142 = load i32, ptr %19, align 4, !tbaa !28
  %143 = sext i32 %142 to i64
  %144 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %141, i64 noundef %143) #7
  %145 = load double, ptr %144, align 8, !tbaa !30
  %146 = load ptr, ptr %12, align 8, !tbaa !5
  %147 = load i32, ptr %19, align 4, !tbaa !28
  %148 = sext i32 %147 to i64
  %149 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %146, i64 noundef %148) #7
  %150 = load double, ptr %149, align 8, !tbaa !30
  %151 = fcmp oge double %145, %150
  br i1 %151, label %152, label %163

152:                                              ; preds = %140
  %153 = load ptr, ptr %9, align 8, !tbaa !5
  %154 = load i32, ptr %19, align 4, !tbaa !28
  %155 = sext i32 %154 to i64
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %153, i64 noundef %155) #7
  %157 = load double, ptr %156, align 8, !tbaa !30
  store double %157, ptr %20, align 8, !tbaa !30
  %158 = load ptr, ptr %11, align 8, !tbaa !5
  %159 = load i32, ptr %19, align 4, !tbaa !28
  %160 = sext i32 %159 to i64
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %158, i64 noundef %160) #7
  %162 = load double, ptr %161, align 8, !tbaa !30
  store double %162, ptr %21, align 8, !tbaa !30
  br label %174

163:                                              ; preds = %140
  %164 = load ptr, ptr %10, align 8, !tbaa !5
  %165 = load i32, ptr %19, align 4, !tbaa !28
  %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) #7
  %168 = load double, ptr %167, align 8, !tbaa !30
  store double %168, ptr %20, align 8, !tbaa !30
  %169 = load ptr, ptr %12, align 8, !tbaa !5
  %170 = load i32, ptr %19, align 4, !tbaa !28
  %171 = sext i32 %170 to i64
  %172 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %169, i64 noundef %171) #7
  %173 = load double, ptr %172, align 8, !tbaa !30
  store double %173, ptr %21, align 8, !tbaa !30
  br label %174

174:                                              ; preds = %163, %152
  %175 = load double, ptr %21, align 8, !tbaa !30
  %176 = load double, ptr %20, align 8, !tbaa !30
  %177 = fmul double 1.000000e-02, %176
  %178 = fcmp olt double %175, %177
  br i1 %178, label %179, label %189

179:                                              ; preds = %174
  %180 = load double, ptr %21, align 8, !tbaa !30
  %181 = load double, ptr %14, align 8, !tbaa !30
  %182 = fcmp ole double %180, %181
  br i1 %182, label %183, label %189

183:                                              ; preds = %179
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %184 unwind label %185

184:                                              ; preds = %183
  br label %189

185:                                              ; preds = %183
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %15, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br label %193

189:                                              ; preds = %184, %179, %174
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  br label %190

190:                                              ; preds = %189, %75
  %191 = load i32, ptr %19, align 4, !tbaa !28
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %19, align 4, !tbaa !28
  br label %57, !llvm.loop !34

193:                                              ; preds = %185, %76
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %431

194:                                              ; preds = %63
  %195 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  br i1 %195, label %196, label %197

196:                                              ; preds = %194
  store i32 1, ptr %22, align 4
  br label %426

197:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #7
  %198 = load i32, ptr %7, align 4, !tbaa !28
  %199 = sext i32 %198 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %199)
          to label %200 unwind label %206

200:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  store i32 0, ptr %24, align 4, !tbaa !28
  br label %201

201:                                              ; preds = %248, %200
  %202 = load i32, ptr %24, align 4, !tbaa !28
  %203 = load i32, ptr %7, align 4, !tbaa !28
  %204 = icmp slt i32 %202, %203
  br i1 %204, label %210, label %205

205:                                              ; preds = %201
  store i32 5, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %251

206:                                              ; preds = %197
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %15, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %16, align 4
  br label %430

210:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  %211 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 3
  %212 = load ptr, ptr %211, align 8, !tbaa !33
  %213 = load i32, ptr %24, align 4, !tbaa !28
  %214 = invoke noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %212, i32 noundef %213)
          to label %215 unwind label %233

215:                                              ; preds = %210
  store i32 %214, ptr %25, align 4, !tbaa !28
  %216 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 5
  %217 = load i32, ptr %25, align 4, !tbaa !28
  %218 = sext i32 %217 to i64
  %219 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %216, i64 noundef %218) #7
  %220 = load double, ptr %219, align 8, !tbaa !30
  %221 = fdiv double 1.000000e+00, %220
  %222 = load i32, ptr %24, align 4, !tbaa !28
  %223 = sext i32 %222 to i64
  %224 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %223) #7
  store double %221, ptr %224, align 8, !tbaa !30
  %225 = load i32, ptr %24, align 4, !tbaa !28
  %226 = sext i32 %225 to i64
  %227 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %226) #7
  %228 = load double, ptr %227, align 8, !tbaa !30
  %229 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %228)
          to label %230 unwind label %233

230:                                              ; preds = %215
  br i1 %229, label %231, label %232

231:                                              ; preds = %230
  br label %238

232:                                              ; preds = %230
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.12, i32 noundef 333, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

233:                                              ; preds = %215, %210
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %15, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %429

237:                                              ; No predecessors!
  br label %238

238:                                              ; preds = %237, %231
  %239 = load i32, ptr %24, align 4, !tbaa !28
  %240 = sext i32 %239 to i64
  %241 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %240) #7
  %242 = load double, ptr %241, align 8, !tbaa !30
  %243 = fcmp oge double %242, 0.000000e+00
  br i1 %243, label %244, label %245

244:                                              ; preds = %238
  br label %247

245:                                              ; preds = %238
  call void @__assert_fail(ptr noundef @.str.23, ptr noundef @.str.12, i32 noundef 334, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

246:                                              ; No predecessors!
  br label %247

247:                                              ; preds = %246, %244
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  br label %248

248:                                              ; preds = %247
  %249 = load i32, ptr %24, align 4, !tbaa !28
  %250 = add nsw i32 %249, 1
  store i32 %250, ptr %24, align 4, !tbaa !28
  br label %201, !llvm.loop !36

251:                                              ; preds = %205
  br label %252

252:                                              ; preds = %421, %419, %251
  %253 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  %254 = xor i1 %253, true
  br i1 %254, label %255, label %424

255:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %256 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  %257 = load i32, ptr %256, align 4, !tbaa !28
  store i32 %257, ptr %26, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %258 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 5
  %259 = load i32, ptr %26, align 4, !tbaa !28
  %260 = sext i32 %259 to i64
  %261 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %258, i64 noundef %260) #7
  %262 = load double, ptr %261, align 8, !tbaa !30
  store double %262, ptr %27, align 8, !tbaa !30
  %263 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 3
  %264 = load ptr, ptr %263, align 8, !tbaa !33
  %265 = load i32, ptr %26, align 4, !tbaa !28
  invoke void @_ZN3ipx5Basis14SolveForUpdateEiRNS_13IndexedVectorE(ptr noundef nonnull align 8 dereferenceable(176) %264, i32 noundef %265, ptr noundef nonnull align 8 dereferenceable(44) %13)
          to label %266 unwind label %298

266:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  store i32 -1, ptr %28, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  store double 2.000000e+00, ptr %29, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #7
  %267 = getelementptr inbounds %class.anon.23, ptr %30, i32 0, i32 0
  store ptr %23, ptr %267, align 8, !tbaa !5
  %268 = getelementptr inbounds %class.anon.23, ptr %30, i32 0, i32 1
  store ptr %27, ptr %268, align 8, !tbaa !5
  %269 = getelementptr inbounds %class.anon.23, ptr %30, i32 0, i32 2
  store ptr %29, ptr %269, align 8, !tbaa !5
  %270 = getelementptr inbounds %class.anon.23, ptr %30, i32 0, i32 3
  store ptr %28, ptr %270, align 8, !tbaa !5
  invoke void @"_ZN3ipx16for_each_nonzeroIZNS_14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoEE3$_0EEvRNS_13IndexedVectorERT_"(ptr noundef nonnull align 8 dereferenceable(44) %13, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %271 unwind label %302

271:                                              ; preds = %266
  %272 = load i32, ptr %28, align 4, !tbaa !28
  %273 = icmp sge i32 %272, 0
  br i1 %273, label %274, label %402

274:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %275 = load i32, ptr %28, align 4, !tbaa !28
  %276 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3ipx13IndexedVectorixEi(ptr noundef nonnull align 8 dereferenceable(44) %13, i32 noundef %275)
          to label %277 unwind label %306

277:                                              ; preds = %274
  %278 = load double, ptr %276, align 8, !tbaa !30
  store double %278, ptr %31, align 8, !tbaa !30
  %279 = load double, ptr %31, align 8, !tbaa !30
  %280 = invoke noundef double @_ZSt3absd(double noundef %279)
          to label %281 unwind label %306

281:                                              ; preds = %277
  %282 = fcmp olt double %280, 1.000000e-03
  br i1 %282, label %283, label %319

283:                                              ; preds = %281
  %284 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 1
  %285 = load ptr, ptr %284, align 8, !tbaa !29
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3ipx7Control5DebugEi(ptr noundef nonnull align 8 dereferenceable(1496) %285, i32 noundef 3)
          to label %287 unwind label %306

287:                                              ; preds = %283
  %288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %286, ptr noundef @.str.25)
          to label %289 unwind label %306

289:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #7
  %290 = load double, ptr %31, align 8, !tbaa !30
  %291 = invoke noundef double @_ZSt3absd(double noundef %290)
          to label %292 unwind label %310

292:                                              ; preds = %289
  invoke void @_ZN3ipx4sci2B5cxx11Ed(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, double noundef %291)
          to label %293 unwind label %310

293:                                              ; preds = %292
  %294 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %288, ptr noundef nonnull align 8 dereferenceable(32) %32)
          to label %295 unwind label %314

295:                                              ; preds = %293
  %296 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %294, ptr noundef @.str.32)
          to label %297 unwind label %314

297:                                              ; preds = %295
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  br label %319

298:                                              ; preds = %255
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %15, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %16, align 4
  br label %423

302:                                              ; preds = %405, %402, %266
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %15, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %16, align 4
  br label %422

306:                                              ; preds = %287, %283, %277, %274
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %15, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %16, align 4
  br label %401

310:                                              ; preds = %292, %289
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %15, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %16, align 4
  br label %318

314:                                              ; preds = %295, %293
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %15, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %16, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #7
  br label %318

318:                                              ; preds = %314, %310
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #7
  br label %401

319:                                              ; preds = %297, %281
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  %320 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 3
  %321 = load ptr, ptr %320, align 8, !tbaa !33
  %322 = load i32, ptr %28, align 4, !tbaa !28
  %323 = invoke noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %321, i32 noundef %322)
          to label %324 unwind label %333

324:                                              ; preds = %319
  store i32 %323, ptr %33, align 4, !tbaa !28
  %325 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 3
  %326 = load ptr, ptr %325, align 8, !tbaa !33
  %327 = load i32, ptr %33, align 4, !tbaa !28
  %328 = invoke noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %326, i32 noundef %327)
          to label %329 unwind label %333

329:                                              ; preds = %324
  %330 = icmp eq i32 %328, 0
  br i1 %330, label %331, label %332

331:                                              ; preds = %329
  br label %338

332:                                              ; preds = %329
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.12, i32 noundef 363, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

333:                                              ; preds = %324, %319
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %15, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %16, align 4
  br label %400

337:                                              ; No predecessors!
  br label %338

338:                                              ; preds = %337, %331
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #7
  %339 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 3
  %340 = load ptr, ptr %339, align 8, !tbaa !33
  %341 = load i32, ptr %33, align 4, !tbaa !28
  %342 = load i32, ptr %26, align 4, !tbaa !28
  %343 = load double, ptr %31, align 8, !tbaa !30
  %344 = invoke noundef i32 @_ZN3ipx5Basis16ExchangeIfStableEiidiPb(ptr noundef nonnull align 8 dereferenceable(176) %340, i32 noundef %341, i32 noundef %342, double noundef %343, i32 noundef -1, ptr noundef %34)
          to label %345 unwind label %353

345:                                              ; preds = %338
  %346 = load ptr, ptr %6, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.ipx_info, ptr %346, i32 0, i32 3
  store i32 %344, ptr %347, align 4, !tbaa !31
  %348 = load ptr, ptr %6, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.ipx_info, ptr %348, i32 0, i32 3
  %350 = load i32, ptr %349, align 4, !tbaa !31
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %352, label %357

352:                                              ; preds = %345
  store i32 1, ptr %22, align 4
  br label %397

353:                                              ; preds = %361, %338
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %15, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  br label %400

357:                                              ; preds = %345
  %358 = load i8, ptr %34, align 1, !tbaa !37, !range !38, !noundef !39
  %359 = trunc i8 %358 to i1
  br i1 %359, label %361, label %360

360:                                              ; preds = %357
  store i32 8, ptr %22, align 4
  br label %397, !llvm.loop !40

361:                                              ; preds = %357
  %362 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 5
  %363 = load i32, ptr %26, align 4, !tbaa !28
  %364 = sext i32 %363 to i64
  %365 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %362, i64 noundef %364) #7
  %366 = load double, ptr %365, align 8, !tbaa !30
  %367 = fdiv double 1.000000e+00, %366
  %368 = load i32, ptr %28, align 4, !tbaa !28
  %369 = sext i32 %368 to i64
  %370 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %369) #7
  store double %367, ptr %370, align 8, !tbaa !30
  %371 = load i32, ptr %28, align 4, !tbaa !28
  %372 = sext i32 %371 to i64
  %373 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %372) #7
  %374 = load double, ptr %373, align 8, !tbaa !30
  %375 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %374)
          to label %376 unwind label %353

376:                                              ; preds = %361
  br i1 %375, label %377, label %378

377:                                              ; preds = %376
  br label %380

378:                                              ; preds = %376
  call void @__assert_fail(ptr noundef @.str.34, ptr noundef @.str.12, i32 noundef 372, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

379:                                              ; No predecessors!
  br label %380

380:                                              ; preds = %379, %377
  %381 = load i32, ptr %28, align 4, !tbaa !28
  %382 = sext i32 %381 to i64
  %383 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %382) #7
  %384 = load double, ptr %383, align 8, !tbaa !30
  %385 = fcmp oge double %384, 0.000000e+00
  br i1 %385, label %386, label %387

386:                                              ; preds = %380
  br label %389

387:                                              ; preds = %380
  call void @__assert_fail(ptr noundef @.str.35, ptr noundef @.str.12, i32 noundef 373, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

388:                                              ; No predecessors!
  br label %389

389:                                              ; preds = %388, %386
  %390 = load ptr, ptr %6, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.ipx_info, ptr %390, i32 0, i32 39
  %392 = load i32, ptr %391, align 4, !tbaa !41
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %391, align 4, !tbaa !41
  %394 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 9
  %395 = load i32, ptr %394, align 4, !tbaa !42
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr %394, align 4, !tbaa !42
  store i32 0, ptr %22, align 4
  br label %397

397:                                              ; preds = %389, %360, %352
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  %398 = load i32, ptr %22, align 4
  switch i32 %398, label %419 [
    i32 0, label %399
  ]

399:                                              ; preds = %397
  br label %418

400:                                              ; preds = %353, %333
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %401

401:                                              ; preds = %400, %318, %306
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %422

402:                                              ; preds = %271
  %403 = load ptr, ptr %5, align 8, !tbaa !5
  %404 = load i32, ptr %26, align 4, !tbaa !28
  invoke void @_ZN3ipx7Iterate10make_fixedEi(ptr noundef nonnull align 8 dereferenceable(296) %403, i32 noundef %404)
          to label %405 unwind label %302

405:                                              ; preds = %402
  %406 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 3
  %407 = load ptr, ptr %406, align 8, !tbaa !33
  %408 = load i32, ptr %26, align 4, !tbaa !28
  invoke void @_ZN3ipx5Basis19FixNonbasicVariableEi(ptr noundef nonnull align 8 dereferenceable(176) %407, i32 noundef %408)
          to label %409 unwind label %302

409:                                              ; preds = %405
  %410 = getelementptr inbounds %"class.ipx::KKTSolverBasis", ptr %35, i32 0, i32 5
  %411 = load i32, ptr %26, align 4, !tbaa !28
  %412 = sext i32 %411 to i64
  %413 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %410, i64 noundef %412) #7
  store double 0.000000e+00, ptr %413, align 8, !tbaa !30
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.ipx_info, ptr %414, i32 0, i32 19
  %416 = load i32, ptr %415, align 4, !tbaa !43
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %415, align 4, !tbaa !43
  br label %418

418:                                              ; preds = %409, %399
  call void @_ZNSt6vectorIiSaIiEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  store i32 0, ptr %22, align 4
  br label %419

419:                                              ; preds = %418, %397
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  %420 = load i32, ptr %22, align 4
  switch i32 %420, label %425 [
    i32 0, label %421
    i32 8, label %252
  ]

421:                                              ; preds = %419
  br label %252, !llvm.loop !40

422:                                              ; preds = %401, %302
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %423

423:                                              ; preds = %422, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %429

424:                                              ; preds = %252
  store i32 0, ptr %22, align 4
  br label %425

425:                                              ; preds = %424, %419
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  br label %426

426:                                              ; preds = %425, %196
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @_ZN3ipx13IndexedVectorD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %13) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  %427 = load i32, ptr %22, align 4
  switch i32 %427, label %438 [
    i32 0, label %428
    i32 1, label %428
  ]

428:                                              ; preds = %426, %426
  ret void

429:                                              ; preds = %423, %233
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #7
  br label %430

430:                                              ; preds = %429, %206
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #7
  br label %431

431:                                              ; preds = %430, %193
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %432

432:                                              ; preds = %431, %64
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @_ZN3ipx13IndexedVectorD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %13) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  br label %433

433:                                              ; preds = %432
  %434 = load ptr, ptr %15, align 8
  %435 = load i32, ptr %16, align 4
  %436 = insertvalue { ptr, i32 } poison, ptr %434, 0
  %437 = insertvalue { ptr, i32 } %436, i32 %435, 1
  resume { ptr, i32 } %437

438:                                              ; preds = %426
  unreachable
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296)) #1 align 2

declare void @_ZN3ipx13IndexedVectorC1Ei(ptr noundef nonnull align 8 dereferenceable(44), i32 noundef) unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #4

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3ipx7Control5DebugEi(ptr noundef nonnull align 8 dereferenceable(1496), i32 noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3ipx4sci2B5cxx11Ed(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, double noundef) #4

declare noundef i32 @_ZN3ipx5Basis16ExchangeIfStableEiidiPb(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, i32 noundef, double noundef, i32 noundef, ptr noundef) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK3ipx7Control13ipm_drop_dualEv(ptr noundef nonnull align 8 dereferenceable(1496)) #1 align 2

declare void @_ZN3ipx5Basis14SolveForUpdateEiRNS_13IndexedVectorE(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, ptr noundef nonnull align 8 dereferenceable(44)) #6

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN3ipx16for_each_nonzeroIZNS_14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoEE3$_0EEvRNS_13IndexedVectorERT_"(ptr noundef nonnull align 8 dereferenceable(44), ptr noundef nonnull align 8 dereferenceable(32)) #3

declare void @_ZN3ipx7Iterate10make_fixedEi(ptr noundef nonnull align 8 dereferenceable(296), i32 noundef) #6

declare void @_ZN3ipx5Basis19FixNonbasicVariableEi(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef) #6

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 = { nounwind }
attributes #8 = { 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, !6, i64 16}
!10 = !{!"_ZTSN3ipx14KKTSolverBasisE", !11, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !12, i64 32, !24, i64 552, !26, i64 568, !15, i64 572, !15, i64 576, !15, i64 580}
!11 = !{!"_ZTSN3ipx9KKTSolverE"}
!12 = !{!"_ZTSN3ipx20SplittedNormalMatrixE", !13, i64 0, !6, i64 8, !14, i64 16, !14, i64 144, !14, i64 272, !16, i64 400, !16, i64 424, !16, i64 448, !24, i64 472, !26, i64 488, !27, i64 496, !27, i64 504, !27, i64 512}
!13 = !{!"_ZTSN3ipx14LinearOperatorE"}
!14 = !{!"_ZTSN3ipx12SparseMatrixE", !15, i64 0, !16, i64 8, !16, i64 32, !20, i64 56, !16, i64 80, !20, i64 104}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSSt6vectorIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSSt8valarrayIdE", !25, i64 0, !6, i64 8}
!25 = !{!"long", !7, i64 0}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"double", !7, i64 0}
!28 = !{!15, !15, i64 0}
!29 = !{!10, !6, i64 8}
!30 = !{!27, !27, i64 0}
!31 = !{!32, !15, i64 12}
!32 = !{!"_ZTS8ipx_info", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !15, i64 36, !15, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !15, i64 56, !15, i64 60, !15, i64 64, !15, i64 68, !15, i64 72, !15, i64 76, !27, i64 80, !27, i64 88, !27, i64 96, !27, i64 104, !27, i64 112, !27, i64 120, !27, i64 128, !27, i64 136, !27, i64 144, !27, i64 152, !27, i64 160, !27, i64 168, !27, i64 176, !27, i64 184, !15, i64 192, !15, i64 196, !15, i64 200, !15, i64 204, !15, i64 208, !15, i64 212, !15, i64 216, !27, i64 224, !27, i64 232, !27, i64 240, !27, i64 248, !27, i64 256, !27, i64 264, !27, i64 272, !27, i64 280, !27, i64 288, !27, i64 296, !27, i64 304, !27, i64 312, !27, i64 320, !27, i64 328, !27, i64 336, !27, i64 344, !27, i64 352, !27, i64 360, !27, i64 368, !27, i64 376, !27, i64 384, !27, i64 392, !27, i64 400, !27, i64 408, !15, i64 416, !15, i64 420, !15, i64 424, !15, i64 428, !27, i64 432, !27, i64 440, !27, i64 448, !27, i64 456}
!33 = !{!10, !6, i64 24}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !35}
!37 = !{!26, !26, i64 0}
!38 = !{i8 0, i8 2}
!39 = !{}
!40 = distinct !{!40, !35}
!41 = !{!32, !15, i64 212}
!42 = !{!10, !15, i64 580}
!43 = !{!32, !15, i64 76}


; 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.ipx::IndexedVector" = type <{ %"class.std::valarray", %"class.std::vector", i32, [4 x i8] }>
%"class.std::valarray" = type { i64, 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 }
%class.anon.23 = type { ptr, ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

@.str.12 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [47 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE = external hidden unnamed_addr constant [54 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [28 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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; 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 @_ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(584) %0, ptr noundef %1, ptr nocapture noundef %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.ipx::IndexedVector", align 8
  %5 = alloca %"class.std::vector", align 8
  %6 = alloca i32, align 4
  %7 = alloca %"class.std::valarray", align 8
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  %10 = alloca double, align 8
  %11 = alloca %class.anon.23, align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca i8, align 1
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = tail call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %15)
  %17 = load ptr, ptr %14, align 8, !tbaa !5
  %18 = tail call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %17)
  %19 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %1)
  %20 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %1)
  %21 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %1)
  %22 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %1)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %4) #7
  call void @_ZN3ipx13IndexedVectorC1Ei(ptr noundef nonnull align 8 dereferenceable(44) %4, i32 noundef %16)
  %23 = getelementptr inbounds i8, ptr %0, i64 8
  %24 = load ptr, ptr %23, align 8, !tbaa !27
  %25 = call noundef double @_ZNK3ipx7Control13ipm_drop_dualEv(ptr noundef nonnull align 8 dereferenceable(1496) %24)
  %26 = getelementptr inbounds i8, ptr %2, i64 12
  store i32 0, ptr %26, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #7
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  %27 = add nsw i32 %18, %16
  store i32 0, ptr %6, align 4, !tbaa !30
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %3
  %29 = getelementptr inbounds i8, ptr %0, i64 24
  br label %31

._crit_edge:                                      ; preds = %93, %3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  %30 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  br i1 %30, label %224, label %97

31:                                               ; preds = %.lr.ph, %93
  %storemerge81 = phi i32 [ 0, %.lr.ph ], [ %95, %93 ]
  %32 = load ptr, ptr %29, align 8, !tbaa !31
  %33 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %32, i32 noundef %storemerge81)
  %.not75 = icmp eq i32 %33, -1
  br i1 %.not75, label %34, label %93

34:                                               ; preds = %31
  %35 = load i32, ptr %6, align 4, !tbaa !30
  %36 = sext i32 %35 to i64
  %37 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %36) #7
  %38 = load double, ptr %37, align 8, !tbaa !32
  %39 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %38)
  br i1 %39, label %.critedge, label %40

40:                                               ; preds = %34
  %41 = load i32, ptr %6, align 4, !tbaa !30
  %42 = sext i32 %41 to i64
  %43 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %42) #7
  %44 = load double, ptr %43, align 8, !tbaa !32
  %45 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %44)
  br i1 %45, label %.critedge, label %46

46:                                               ; preds = %40
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.12, i32 noundef 309, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

.critedge:                                        ; preds = %34, %40
  %47 = load i32, ptr %6, align 4, !tbaa !30
  %48 = sext i32 %47 to i64
  %49 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %48) #7
  %50 = load double, ptr %49, align 8, !tbaa !32
  %51 = fcmp ogt double %50, 0.000000e+00
  br i1 %51, label %53, label %52

52:                                               ; preds = %.critedge
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.12, i32 noundef 310, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

53:                                               ; preds = %.critedge
  %54 = load i32, ptr %6, align 4, !tbaa !30
  %55 = sext i32 %54 to i64
  %56 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %55) #7
  %57 = load double, ptr %56, align 8, !tbaa !32
  %58 = fcmp ogt double %57, 0.000000e+00
  br i1 %58, label %60, label %59

59:                                               ; preds = %53
  call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.12, i32 noundef 311, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

60:                                               ; preds = %53
  %61 = load i32, ptr %6, align 4, !tbaa !30
  %62 = sext i32 %61 to i64
  %63 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %62) #7
  %64 = load double, ptr %63, align 8, !tbaa !32
  %65 = fcmp ogt double %64, 0.000000e+00
  br i1 %65, label %.critedge2, label %66

66:                                               ; preds = %60
  %67 = load i32, ptr %6, align 4, !tbaa !30
  %68 = sext i32 %67 to i64
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %68) #7
  %70 = load double, ptr %69, align 8, !tbaa !32
  %71 = fcmp ogt double %70, 0.000000e+00
  br i1 %71, label %.critedge2, label %72

72:                                               ; preds = %66
  call void @__assert_fail(ptr noundef nonnull @.str.31, ptr noundef nonnull @.str.12, i32 noundef 312, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

.critedge2:                                       ; preds = %60, %66
  %73 = load i32, ptr %6, align 4, !tbaa !30
  %74 = sext i32 %73 to i64
  %75 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %74) #7
  %76 = load double, ptr %75, align 8, !tbaa !32
  %77 = load i32, ptr %6, align 4, !tbaa !30
  %78 = sext i32 %77 to i64
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %78) #7
  %80 = load double, ptr %79, align 8, !tbaa !32
  %81 = fcmp ult double %76, %80
  %82 = load i32, ptr %6, align 4, !tbaa !30
  %83 = sext i32 %82 to i64
  %. = select i1 %81, ptr %20, ptr %19
  %.95 = select i1 %81, ptr %22, ptr %21
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %., i64 noundef %83) #7
  %.062 = load double, ptr %84, align 8, !tbaa !32
  %.sink93 = load i32, ptr %6, align 4, !tbaa !30
  %85 = sext i32 %.sink93 to i64
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.95, i64 noundef %85) #7
  %.063 = load double, ptr %86, align 8, !tbaa !32
  %87 = fmul double %.062, 1.000000e-02
  %88 = fcmp uge double %.063, %87
  %89 = fcmp ugt double %.063, %25
  %or.cond = or i1 %88, %89
  br i1 %or.cond, label %93, label %90

90:                                               ; preds = %.critedge2
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %93 unwind label %91

91:                                               ; preds = %90
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  br label %226

93:                                               ; preds = %.critedge2, %90, %31
  %94 = load i32, ptr %6, align 4, !tbaa !30
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %6, align 4, !tbaa !30
  %96 = icmp slt i32 %95, %27
  br i1 %96, label %31, label %._crit_edge, !llvm.loop !33

97:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #7
  %98 = sext i32 %16 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %98)
          to label %.preheader80 unwind label %112

.preheader80:                                     ; preds = %97
  %99 = icmp sgt i32 %16, 0
  br i1 %99, label %.lr.ph83, label %.preheader

.lr.ph83:                                         ; preds = %.preheader80
  %100 = getelementptr inbounds i8, ptr %0, i64 24
  %101 = getelementptr inbounds i8, ptr %0, i64 552
  %wide.trip.count = zext nneg i32 %16 to i64
  br label %114

102:                                              ; preds = %127
  %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 %.preheader, label %114, !llvm.loop !35

.preheader:                                       ; preds = %102, %.preheader80
  %103 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  br i1 %103, label %._crit_edge85, label %.lr.ph84

.lr.ph84:                                         ; preds = %.preheader
  %104 = getelementptr inbounds i8, ptr %0, i64 552
  %105 = getelementptr inbounds i8, ptr %0, i64 24
  %106 = getelementptr inbounds i8, ptr %11, i64 8
  %107 = getelementptr inbounds i8, ptr %11, i64 16
  %108 = getelementptr inbounds i8, ptr %11, i64 24
  %109 = getelementptr inbounds i8, ptr %2, i64 76
  %110 = getelementptr inbounds i8, ptr %2, i64 212
  %111 = getelementptr inbounds i8, ptr %0, i64 580
  br label %132

112:                                              ; preds = %97
  %113 = landingpad { ptr, i32 }
          cleanup
  br label %225

114:                                              ; preds = %.lr.ph83, %102
  %indvars.iv = phi i64 [ 0, %.lr.ph83 ], [ %indvars.iv.next, %102 ]
  %115 = load ptr, ptr %100, align 8, !tbaa !31
  %116 = trunc nuw nsw i64 %indvars.iv to i32
  %117 = call noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %115, i32 noundef %116)
  %118 = sext i32 %117 to i64
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %101, i64 noundef %118) #7
  %120 = load double, ptr %119, align 8, !tbaa !32
  %121 = fdiv double 1.000000e+00, %120
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #7
  store double %121, ptr %122, align 8, !tbaa !32
  %123 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #7
  %124 = load double, ptr %123, align 8, !tbaa !32
  %125 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %124)
  br i1 %125, label %127, label %126

126:                                              ; preds = %114
  call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.12, i32 noundef 333, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

127:                                              ; preds = %114
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #7
  %129 = load double, ptr %128, align 8, !tbaa !32
  %130 = fcmp ult double %129, 0.000000e+00
  br i1 %130, label %131, label %102

131:                                              ; preds = %127
  call void @__assert_fail(ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.12, i32 noundef 334, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

132:                                              ; preds = %.lr.ph84, %.backedge
  %133 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  %134 = load i32, ptr %133, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %135 = sext i32 %134 to i64
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %104, i64 noundef %135) #7
  %137 = load double, ptr %136, align 8, !tbaa !32
  store double %137, ptr %8, align 8, !tbaa !32
  %138 = load ptr, ptr %105, align 8, !tbaa !31
  invoke void @_ZN3ipx5Basis14SolveForUpdateEiRNS_13IndexedVectorE(ptr noundef nonnull align 8 dereferenceable(176) %138, i32 noundef %134, ptr noundef nonnull align 8 dereferenceable(44) %4)
          to label %139 unwind label %160

139:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  store i32 -1, ptr %9, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  store double 2.000000e+00, ptr %10, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #7
  store ptr %7, ptr %11, align 8, !tbaa !36
  store ptr %8, ptr %106, align 8, !tbaa !36
  store ptr %10, ptr %107, align 8, !tbaa !36
  store ptr %9, ptr %108, align 8, !tbaa !36
  invoke void @"_ZN3ipx16for_each_nonzeroIZNS_14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoEE3$_0EEvRNS_13IndexedVectorERT_"(ptr noundef nonnull align 8 dereferenceable(44) %4, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %140 unwind label %162

140:                                              ; preds = %139
  %141 = load i32, ptr %9, align 4, !tbaa !30
  %142 = icmp sgt i32 %141, -1
  br i1 %142, label %143, label %213

143:                                              ; preds = %140
  %144 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3ipx13IndexedVectorixEi(ptr noundef nonnull align 8 dereferenceable(44) %4, i32 noundef %141)
  %145 = load double, ptr %144, align 8, !tbaa !32
  %146 = call noundef double @_ZSt3absd(double noundef %145)
  %147 = fcmp olt double %146, 1.000000e-03
  br i1 %147, label %148, label %171

148:                                              ; preds = %143
  %149 = load ptr, ptr %23, align 8, !tbaa !27
  %150 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3ipx7Control5DebugEi(ptr noundef nonnull align 8 dereferenceable(1496) %149, i32 noundef 3)
          to label %151 unwind label %164

151:                                              ; preds = %148
  %152 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %150, ptr noundef nonnull @.str.25)
          to label %153 unwind label %164

153:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  %154 = call noundef double @_ZSt3absd(double noundef %145)
  invoke void @_ZN3ipx4sci2B5cxx11Ed(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, double noundef %154)
          to label %155 unwind label %166

155:                                              ; preds = %153
  %156 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %152, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %157 unwind label %168

157:                                              ; preds = %155
  %158 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %156, ptr noundef nonnull @.str.32)
          to label %159 unwind label %168

159:                                              ; preds = %157
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %171

160:                                              ; preds = %132
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %223

162:                                              ; preds = %214, %213, %139
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %222

164:                                              ; preds = %151, %148
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %222

166:                                              ; preds = %153
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %170

168:                                              ; preds = %157, %155
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %170

170:                                              ; preds = %168, %166
  %.pn = phi { ptr, i32 } [ %169, %168 ], [ %167, %166 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %222

171:                                              ; preds = %159, %143
  %172 = load ptr, ptr %105, align 8, !tbaa !31
  %173 = load i32, ptr %9, align 4, !tbaa !30
  %174 = call noundef i32 @_ZNK3ipx5BasisixEi(ptr noundef nonnull align 8 dereferenceable(176) %172, i32 noundef %173)
  %175 = load ptr, ptr %105, align 8, !tbaa !31
  %176 = call noundef i32 @_ZNK3ipx5Basis8StatusOfEi(ptr noundef nonnull align 8 dereferenceable(176) %175, i32 noundef %174)
  %177 = icmp eq i32 %176, 0
  br i1 %177, label %179, label %178

178:                                              ; preds = %171
  call void @__assert_fail(ptr noundef nonnull @.str.33, ptr noundef nonnull @.str.12, i32 noundef 363, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

179:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #7
  %180 = load ptr, ptr %105, align 8, !tbaa !31
  %181 = invoke noundef i32 @_ZN3ipx5Basis16ExchangeIfStableEiidiPb(ptr noundef nonnull align 8 dereferenceable(176) %180, i32 noundef %174, i32 noundef %134, double noundef %145, i32 noundef -1, ptr noundef nonnull %13)
          to label %182 unwind label %183

182:                                              ; preds = %179
  store i32 %181, ptr %26, align 4, !tbaa !28
  %.not = icmp eq i32 %181, 0
  br i1 %.not, label %185, label %.thread90

.thread90:                                        ; preds = %182
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %._crit_edge85

183:                                              ; preds = %179
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  br label %222

185:                                              ; preds = %182
  %186 = load i8, ptr %13, align 1, !tbaa !37, !range !38, !noundef !39
  %187 = trunc nuw i8 %186 to i1
  br i1 %187, label %188, label %220, !llvm.loop !40

188:                                              ; preds = %185
  %189 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %104, i64 noundef %135) #7
  %190 = load double, ptr %189, align 8, !tbaa !32
  %191 = fdiv double 1.000000e+00, %190
  %192 = load i32, ptr %9, align 4, !tbaa !30
  %193 = sext i32 %192 to i64
  %194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %193) #7
  store double %191, ptr %194, align 8, !tbaa !32
  %195 = load i32, ptr %9, align 4, !tbaa !30
  %196 = sext i32 %195 to i64
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %196) #7
  %198 = load double, ptr %197, align 8, !tbaa !32
  %199 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %198)
  br i1 %199, label %201, label %200

200:                                              ; preds = %188
  call void @__assert_fail(ptr noundef nonnull @.str.34, ptr noundef nonnull @.str.12, i32 noundef 372, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

201:                                              ; preds = %188
  %202 = load i32, ptr %9, align 4, !tbaa !30
  %203 = sext i32 %202 to i64
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %203) #7
  %205 = load double, ptr %204, align 8, !tbaa !32
  %206 = fcmp ult double %205, 0.000000e+00
  br i1 %206, label %207, label %208

207:                                              ; preds = %201
  call void @__assert_fail(ptr noundef nonnull @.str.35, ptr noundef nonnull @.str.12, i32 noundef 373, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoE) #8
  unreachable

208:                                              ; preds = %201
  %209 = load i32, ptr %110, align 4, !tbaa !41
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %110, align 4, !tbaa !41
  %211 = load i32, ptr %111, align 4, !tbaa !42
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %111, align 4, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  br label %.thread88

213:                                              ; preds = %140
  invoke void @_ZN3ipx7Iterate10make_fixedEi(ptr noundef nonnull align 8 dereferenceable(296) %1, i32 noundef %134)
          to label %214 unwind label %162

214:                                              ; preds = %213
  %215 = load ptr, ptr %105, align 8, !tbaa !31
  invoke void @_ZN3ipx5Basis19FixNonbasicVariableEi(ptr noundef nonnull align 8 dereferenceable(176) %215, i32 noundef %134)
          to label %216 unwind label %162

216:                                              ; preds = %214
  %217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %104, i64 noundef %135) #7
  store double 0.000000e+00, ptr %217, align 8, !tbaa !32
  %218 = load i32, ptr %109, align 4, !tbaa !43
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %109, align 4, !tbaa !43
  br label %.thread88

.thread88:                                        ; preds = %216, %208
  call void @_ZNSt6vectorIiSaIiEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %.backedge

220:                                              ; preds = %185
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %.backedge

.backedge:                                        ; preds = %220, %.thread88
  %221 = call noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  br i1 %221, label %._crit_edge85, label %132, !llvm.loop !40

222:                                              ; preds = %164, %170, %183, %162
  %.pn70.pn = phi { ptr, i32 } [ %163, %162 ], [ %184, %183 ], [ %.pn, %170 ], [ %165, %164 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %223

223:                                              ; preds = %222, %160
  %.pn70.pn.pn = phi { ptr, i32 } [ %.pn70.pn, %222 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #7
  br label %225

._crit_edge85:                                    ; preds = %.backedge, %.thread90, %.preheader
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  br label %224

224:                                              ; preds = %._crit_edge, %._crit_edge85
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  call void @_ZN3ipx13IndexedVectorD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %4) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #7
  ret void

225:                                              ; preds = %223, %112
  %.pn70.pn.pn.pn = phi { ptr, i32 } [ %.pn70.pn.pn, %223 ], [ %113, %112 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  br label %226

226:                                              ; preds = %225, %91
  %.pn76 = phi { ptr, i32 } [ %92, %91 ], [ %.pn70.pn.pn.pn, %225 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  call void @_ZN3ipx13IndexedVectorD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %4) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #7
  resume { ptr, i32 } %.pn76
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #1 align 2

declare void @_ZN3ipx13IndexedVectorC1Ei(ptr noundef nonnull align 8 dereferenceable(44), i32 noundef) unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIiSaIiEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3ipx7Control5DebugEi(ptr noundef nonnull align 8 dereferenceable(1496), i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3ipx4sci2B5cxx11Ed(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, double noundef) local_unnamed_addr #4

declare noundef i32 @_ZN3ipx5Basis16ExchangeIfStableEiidiPb(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, i32 noundef, double noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK3ipx7Control13ipm_drop_dualEv(ptr noundef nonnull align 8 dereferenceable(1496)) local_unnamed_addr #1 align 2

declare void @_ZN3ipx5Basis14SolveForUpdateEiRNS_13IndexedVectorE(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef, ptr noundef nonnull align 8 dereferenceable(44)) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN3ipx16for_each_nonzeroIZNS_14KKTSolverBasis8DropDualEPNS_7IterateEPNS_4InfoEE3$_0EEvRNS_13IndexedVectorERT_"(ptr noundef nonnull align 8 dereferenceable(44), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

declare void @_ZN3ipx7Iterate10make_fixedEi(ptr noundef nonnull align 8 dereferenceable(296), i32 noundef) local_unnamed_addr #6

declare void @_ZN3ipx5Basis19FixNonbasicVariableEi(ptr noundef nonnull align 8 dereferenceable(176), i32 noundef) local_unnamed_addr #6

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 = { nounwind }
attributes #8 = { 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 = !{!6, !8, i64 8}
!28 = !{!29, !14, i64 12}
!29 = !{!"_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}
!30 = !{!14, !14, i64 0}
!31 = !{!6, !8, i64 24}
!32 = !{!26, !26, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = !{!8, !8, i64 0}
!37 = !{!25, !25, i64 0}
!38 = !{i8 0, i8 2}
!39 = !{}
!40 = distinct !{!40, !34}
!41 = !{!29, !14, i64 212}
!42 = !{!6, !14, i64 580}
!43 = !{!29, !14, i64 76}


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