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

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

%"class.std::valarray" = type { i64, ptr }
%"class.ipx::IPM" = type <{ ptr, ptr, ptr, ptr, double, double, i32, [4 x i8], double, i32, [4 x i8], double, i32, [4 x i8] }>
%"struct.ipx::IPM::Step" = type { %"class.std::valarray", %"class.std::valarray", %"class.std::valarray", %"class.std::valarray", %"class.std::valarray", %"class.std::valarray" }
%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.17 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [16 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE = external hidden unnamed_addr constant [137 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [31 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296)) #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

declare noundef double @_ZNK3ipx7Iterate2muEv(ptr noundef nonnull align 8 dereferenceable(296)) #2

; 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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #3 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) #4 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) #4 align 2

declare void @_ZN3ipx9KKTSolver5SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), double noundef, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296), i32 noundef) #4 align 2

declare noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16)) #2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296), i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef nonnull align 8 dereferenceable(96) %7) #7 align 2 personality ptr @__gxx_personality_v0 {
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"class.std::valarray", align 8
  %32 = alloca %"class.std::valarray", align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca i32, align 4
  %41 = alloca double, align 8
  %42 = alloca i32, align 4
  %43 = alloca double, align 8
  %44 = alloca i32, align 4
  %45 = alloca double, align 8
  %46 = alloca i32, align 4
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store ptr %6, ptr %15, align 8, !tbaa !5
  store ptr %7, ptr %16, align 8, !tbaa !5
  %50 = load ptr, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %51 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %52 = load ptr, ptr %51, align 8, !tbaa !9
  %53 = call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %52)
  store ptr %53, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %54 = load ptr, ptr %17, align 8, !tbaa !5
  %55 = call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %54)
  store i32 %55, ptr %18, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %56 = load ptr, ptr %17, align 8, !tbaa !5
  %57 = call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %56)
  store i32 %57, ptr %19, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %58 = load ptr, ptr %17, align 8, !tbaa !5
  %59 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNK3ipx5Model2AIEv(ptr noundef nonnull align 8 dereferenceable(704) %58)
  store ptr %59, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %60 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %61 = load ptr, ptr %60, align 8, !tbaa !9
  %62 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %61)
  store ptr %62, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %63 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %64 = load ptr, ptr %63, align 8, !tbaa !9
  %65 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %64)
  store ptr %65, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %66 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %67 = load ptr, ptr %66, align 8, !tbaa !9
  %68 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %67)
  store ptr %68, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %69 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %70 = load ptr, ptr %69, align 8, !tbaa !9
  %71 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %70)
  store ptr %71, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %72 = load ptr, ptr %16, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %72, i32 0, i32 0
  store ptr %73, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %74 = load ptr, ptr %16, align 8, !tbaa !5
  %75 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %74, i32 0, i32 1
  store ptr %75, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %76 = load ptr, ptr %16, align 8, !tbaa !5
  %77 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %76, i32 0, i32 2
  store ptr %77, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %78 = load ptr, ptr %16, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %78, i32 0, i32 3
  store ptr %79, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %80 = load ptr, ptr %16, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %80, i32 0, i32 4
  store ptr %81, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %82 = load ptr, ptr %16, align 8, !tbaa !5
  %83 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %82, i32 0, i32 5
  store ptr %83, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #9
  %84 = load i32, ptr %19, align 4, !tbaa !13
  %85 = load i32, ptr %18, align 4, !tbaa !13
  %86 = add nsw i32 %84, %85
  %87 = sext i32 %86 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %87)
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #9
  %88 = load i32, ptr %18, align 4, !tbaa !13
  %89 = sext i32 %88 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef %89)
          to label %90 unwind label %101

90:                                               ; preds = %8
  %91 = load ptr, ptr %11, align 8, !tbaa !5
  %92 = icmp ne ptr %91, null
  br i1 %92, label %93, label %119

93:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  store i32 0, ptr %35, align 4, !tbaa !13
  br label %94

94:                                               ; preds = %115, %93
  %95 = load i32, ptr %35, align 4, !tbaa !13
  %96 = load i32, ptr %19, align 4, !tbaa !13
  %97 = load i32, ptr %18, align 4, !tbaa !13
  %98 = add nsw i32 %96, %97
  %99 = icmp slt i32 %95, %98
  br i1 %99, label %105, label %100

100:                                              ; preds = %94
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  br label %118

101:                                              ; preds = %8
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %33, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %34, align 4
  br label %847

105:                                              ; preds = %94
  %106 = load ptr, ptr %11, align 8, !tbaa !5
  %107 = load i32, ptr %35, align 4, !tbaa !13
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds double, ptr %106, i64 %108
  %110 = load double, ptr %109, align 8, !tbaa !14
  %111 = fneg double %110
  %112 = load i32, ptr %35, align 4, !tbaa !13
  %113 = sext i32 %112 to i64
  %114 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %113) #9
  store double %111, ptr %114, align 8, !tbaa !14
  br label %115

115:                                              ; preds = %105
  %116 = load i32, ptr %35, align 4, !tbaa !13
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %35, align 4, !tbaa !13
  br label %94, !llvm.loop !15

118:                                              ; preds = %100
  br label %119

119:                                              ; preds = %118, %90
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  store i32 0, ptr %36, align 4, !tbaa !13
  br label %120

120:                                              ; preds = %226, %119
  %121 = load i32, ptr %36, align 4, !tbaa !13
  %122 = load i32, ptr %19, align 4, !tbaa !13
  %123 = load i32, ptr %18, align 4, !tbaa !13
  %124 = add nsw i32 %122, %123
  %125 = icmp slt i32 %121, %124
  br i1 %125, label %127, label %126

126:                                              ; preds = %120
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %229

127:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  %129 = icmp ne ptr %128, null
  br i1 %129, label %130, label %136

130:                                              ; preds = %127
  %131 = load ptr, ptr %12, align 8, !tbaa !5
  %132 = load i32, ptr %36, align 4, !tbaa !13
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds double, ptr %131, i64 %133
  %135 = load double, ptr %134, align 8, !tbaa !14
  br label %137

136:                                              ; preds = %127
  br label %137

137:                                              ; preds = %136, %130
  %138 = phi double [ %135, %130 ], [ 0.000000e+00, %136 ]
  store double %138, ptr %37, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %139 = load ptr, ptr %13, align 8, !tbaa !5
  %140 = icmp ne ptr %139, null
  br i1 %140, label %141, label %147

141:                                              ; preds = %137
  %142 = load ptr, ptr %13, align 8, !tbaa !5
  %143 = load i32, ptr %36, align 4, !tbaa !13
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds double, ptr %142, i64 %144
  %146 = load double, ptr %145, align 8, !tbaa !14
  br label %148

147:                                              ; preds = %137
  br label %148

148:                                              ; preds = %147, %141
  %149 = phi double [ %146, %141 ], [ 0.000000e+00, %147 ]
  store double %149, ptr %38, align 8, !tbaa !14
  %150 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %151 = load ptr, ptr %150, align 8, !tbaa !9
  %152 = load i32, ptr %36, align 4, !tbaa !13
  %153 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %151, i32 noundef %152)
          to label %154 unwind label %179

154:                                              ; preds = %148
  br i1 %153, label %155, label %183

155:                                              ; preds = %154
  %156 = load ptr, ptr %14, align 8, !tbaa !5
  %157 = load i32, ptr %36, align 4, !tbaa !13
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds double, ptr %156, i64 %158
  %160 = load double, ptr %159, align 8, !tbaa !14
  %161 = load ptr, ptr %23, align 8, !tbaa !5
  %162 = load i32, ptr %36, align 4, !tbaa !13
  %163 = sext i32 %162 to i64
  %164 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %161, i64 noundef %163) #9
  %165 = load double, ptr %164, align 8, !tbaa !14
  %166 = load double, ptr %37, align 8, !tbaa !14
  %167 = call double @llvm.fmuladd.f64(double %165, double %166, double %160)
  %168 = load ptr, ptr %21, align 8, !tbaa !5
  %169 = load i32, ptr %36, align 4, !tbaa !13
  %170 = sext i32 %169 to i64
  %171 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %168, i64 noundef %170) #9
  %172 = load double, ptr %171, align 8, !tbaa !14
  %173 = fdiv double %167, %172
  %174 = load i32, ptr %36, align 4, !tbaa !13
  %175 = sext i32 %174 to i64
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %175) #9
  %177 = load double, ptr %176, align 8, !tbaa !14
  %178 = fadd double %177, %173
  store double %178, ptr %176, align 8, !tbaa !14
  br label %183

179:                                              ; preds = %214, %183, %148
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %33, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %846

183:                                              ; preds = %155, %154
  %184 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %185 = load ptr, ptr %184, align 8, !tbaa !9
  %186 = load i32, ptr %36, align 4, !tbaa !13
  %187 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %185, i32 noundef %186)
          to label %188 unwind label %179

188:                                              ; preds = %183
  br i1 %187, label %189, label %214

189:                                              ; preds = %188
  %190 = load ptr, ptr %15, align 8, !tbaa !5
  %191 = load i32, ptr %36, align 4, !tbaa !13
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds double, ptr %190, i64 %192
  %194 = load double, ptr %193, align 8, !tbaa !14
  %195 = load ptr, ptr %24, align 8, !tbaa !5
  %196 = load i32, ptr %36, align 4, !tbaa !13
  %197 = sext i32 %196 to i64
  %198 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %195, i64 noundef %197) #9
  %199 = load double, ptr %198, align 8, !tbaa !14
  %200 = load double, ptr %38, align 8, !tbaa !14
  %201 = fneg double %199
  %202 = call double @llvm.fmuladd.f64(double %201, double %200, double %194)
  %203 = load ptr, ptr %22, align 8, !tbaa !5
  %204 = load i32, ptr %36, align 4, !tbaa !13
  %205 = sext i32 %204 to i64
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %203, i64 noundef %205) #9
  %207 = load double, ptr %206, align 8, !tbaa !14
  %208 = fdiv double %202, %207
  %209 = load i32, ptr %36, align 4, !tbaa !13
  %210 = sext i32 %209 to i64
  %211 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %210) #9
  %212 = load double, ptr %211, align 8, !tbaa !14
  %213 = fsub double %212, %208
  store double %213, ptr %211, align 8, !tbaa !14
  br label %214

214:                                              ; preds = %189, %188
  %215 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %216 = load ptr, ptr %215, align 8, !tbaa !9
  %217 = load i32, ptr %36, align 4, !tbaa !13
  %218 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %216, i32 noundef %217)
          to label %219 unwind label %179

219:                                              ; preds = %214
  %220 = icmp eq i32 %218, 0
  br i1 %220, label %221, label %225

221:                                              ; preds = %219
  %222 = load i32, ptr %36, align 4, !tbaa !13
  %223 = sext i32 %222 to i64
  %224 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %223) #9
  store double 0.000000e+00, ptr %224, align 8, !tbaa !14
  br label %225

225:                                              ; preds = %221, %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %36, align 4, !tbaa !13
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %36, align 4, !tbaa !13
  br label %120, !llvm.loop !17

229:                                              ; preds = %126
  %230 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %231 unwind label %234

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

232:                                              ; preds = %231
  br label %239

233:                                              ; preds = %231
  call void @__assert_fail(ptr noundef @.str.32, ptr noundef @.str.17, i32 noundef 740, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

234:                                              ; preds = %242, %229
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %33, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %34, align 4
  br label %846

238:                                              ; No predecessors!
  br label %239

239:                                              ; preds = %238, %232
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = icmp ne ptr %240, null
  br i1 %241, label %242, label %251

242:                                              ; preds = %239
  %243 = load ptr, ptr %10, align 8, !tbaa !5
  %244 = load ptr, ptr %10, align 8, !tbaa !5
  %245 = load i32, ptr %18, align 4, !tbaa !13
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds double, ptr %244, i64 %246
  %248 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %32) #9
  %249 = invoke noundef ptr @_ZSt4copyIPKdPdET0_T_S4_S3_(ptr noundef %243, ptr noundef %247, ptr noundef %248)
          to label %250 unwind label %234

250:                                              ; preds = %242
  br label %251

251:                                              ; preds = %250, %239
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %252 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 0
  %253 = load ptr, ptr %252, align 8, !tbaa !18
  %254 = invoke noundef double @_ZNK3ipx7Control7kkt_tolEv(ptr noundef nonnull align 8 dereferenceable(1496) %253)
          to label %255 unwind label %276

255:                                              ; preds = %251
  %256 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %257 = load ptr, ptr %256, align 8, !tbaa !9
  %258 = invoke noundef double @_ZNK3ipx7Iterate2muEv(ptr noundef nonnull align 8 dereferenceable(296) %257)
          to label %259 unwind label %276

259:                                              ; preds = %255
  %260 = call double @sqrt(double noundef %258) #9
  %261 = fmul double %254, %260
  store double %261, ptr %39, align 8, !tbaa !14
  %262 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 1
  %263 = load ptr, ptr %262, align 8, !tbaa !19
  %264 = load double, ptr %39, align 8, !tbaa !14
  %265 = load ptr, ptr %25, align 8, !tbaa !5
  %266 = load ptr, ptr %28, align 8, !tbaa !5
  %267 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 3
  %268 = load ptr, ptr %267, align 8, !tbaa !20
  invoke void @_ZN3ipx9KKTSolver5SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(8) %263, ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef nonnull align 8 dereferenceable(16) %32, double noundef %264, ptr noundef nonnull align 8 dereferenceable(16) %265, ptr noundef nonnull align 8 dereferenceable(16) %266, ptr noundef %268)
          to label %269 unwind label %276

269:                                              ; preds = %259
  %270 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 3
  %271 = load ptr, ptr %270, align 8, !tbaa !20
  %272 = getelementptr inbounds %struct.ipx_info, ptr %271, i32 0, i32 3
  %273 = load i32, ptr %272, align 4, !tbaa !21
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %280

275:                                              ; preds = %269
  store i32 1, ptr %40, align 4
  br label %842

276:                                              ; preds = %556, %549, %542, %535, %259, %255, %251
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %33, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %34, align 4
  br label %845

280:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  store double -1.000000e+00, ptr %41, align 8, !tbaa !14
  %281 = load ptr, ptr %28, align 8, !tbaa !5
  %282 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEmLERKd(ptr noundef nonnull align 8 dereferenceable(16) %281, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %283 unwind label %291

283:                                              ; preds = %280
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store i32 0, ptr %42, align 4, !tbaa !13
  br label %284

284:                                              ; preds = %408, %283
  %285 = load i32, ptr %42, align 4, !tbaa !13
  %286 = load i32, ptr %19, align 4, !tbaa !13
  %287 = load i32, ptr %18, align 4, !tbaa !13
  %288 = add nsw i32 %286, %287
  %289 = icmp slt i32 %285, %288
  br i1 %289, label %295, label %290

290:                                              ; preds = %284
  store i32 8, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %411

291:                                              ; preds = %280
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %33, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %845

295:                                              ; preds = %284
  %296 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %297 = load ptr, ptr %296, align 8, !tbaa !9
  %298 = load i32, ptr %42, align 4, !tbaa !13
  %299 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %297, i32 noundef %298)
          to label %300 unwind label %311

300:                                              ; preds = %295
  %301 = icmp eq i32 %299, 0
  br i1 %301, label %302, label %325

302:                                              ; preds = %300
  %303 = load ptr, ptr %25, align 8, !tbaa !5
  %304 = load i32, ptr %42, align 4, !tbaa !13
  %305 = sext i32 %304 to i64
  %306 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %303, i64 noundef %305) #9
  %307 = load double, ptr %306, align 8, !tbaa !14
  %308 = fcmp oeq double %307, 0.000000e+00
  br i1 %308, label %309, label %310

309:                                              ; preds = %302
  br label %316

310:                                              ; preds = %302
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.17, i32 noundef 754, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

311:                                              ; preds = %325, %295
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %33, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %845

315:                                              ; No predecessors!
  br label %316

316:                                              ; preds = %315, %309
  %317 = load ptr, ptr %26, align 8, !tbaa !5
  %318 = load i32, ptr %42, align 4, !tbaa !13
  %319 = sext i32 %318 to i64
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %317, i64 noundef %319) #9
  store double 0.000000e+00, ptr %320, align 8, !tbaa !14
  %321 = load ptr, ptr %29, align 8, !tbaa !5
  %322 = load i32, ptr %42, align 4, !tbaa !13
  %323 = sext i32 %322 to i64
  %324 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %321, i64 noundef %323) #9
  store double 0.000000e+00, ptr %324, align 8, !tbaa !14
  br label %407

325:                                              ; preds = %300
  %326 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %327 = load ptr, ptr %326, align 8, !tbaa !9
  %328 = load i32, ptr %42, align 4, !tbaa !13
  %329 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %327, i32 noundef %328)
          to label %330 unwind label %311

330:                                              ; preds = %325
  %331 = icmp eq i32 %329, 1
  br i1 %331, label %332, label %356

332:                                              ; preds = %330
  %333 = load ptr, ptr %12, align 8, !tbaa !5
  %334 = icmp ne ptr %333, null
  br i1 %334, label %335, label %342

335:                                              ; preds = %332
  %336 = load ptr, ptr %12, align 8, !tbaa !5
  %337 = load i32, ptr %42, align 4, !tbaa !13
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds double, ptr %336, i64 %338
  %340 = load double, ptr %339, align 8, !tbaa !14
  %341 = fcmp oeq double %340, 0.000000e+00
  br label %342

342:                                              ; preds = %335, %332
  %343 = phi i1 [ true, %332 ], [ %341, %335 ]
  br i1 %343, label %344, label %345

344:                                              ; preds = %342
  br label %347

345:                                              ; preds = %342
  call void @__assert_fail(ptr noundef @.str.34, ptr noundef @.str.17, i32 noundef 758, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

346:                                              ; No predecessors!
  br label %347

347:                                              ; preds = %346, %344
  %348 = load ptr, ptr %26, align 8, !tbaa !5
  %349 = load i32, ptr %42, align 4, !tbaa !13
  %350 = sext i32 %349 to i64
  %351 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %348, i64 noundef %350) #9
  store double 0.000000e+00, ptr %351, align 8, !tbaa !14
  %352 = load ptr, ptr %29, align 8, !tbaa !5
  %353 = load i32, ptr %42, align 4, !tbaa !13
  %354 = sext i32 %353 to i64
  %355 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %352, i64 noundef %354) #9
  store double 0.000000e+00, ptr %355, align 8, !tbaa !14
  br label %406

356:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %357 = load ptr, ptr %12, align 8, !tbaa !5
  %358 = icmp ne ptr %357, null
  br i1 %358, label %359, label %365

359:                                              ; preds = %356
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = load i32, ptr %42, align 4, !tbaa !13
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %360, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !14
  br label %366

365:                                              ; preds = %356
  br label %366

366:                                              ; preds = %365, %359
  %367 = phi double [ %364, %359 ], [ 0.000000e+00, %365 ]
  store double %367, ptr %43, align 8, !tbaa !14
  %368 = load ptr, ptr %25, align 8, !tbaa !5
  %369 = load i32, ptr %42, align 4, !tbaa !13
  %370 = sext i32 %369 to i64
  %371 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %368, i64 noundef %370) #9
  %372 = load double, ptr %371, align 8, !tbaa !14
  %373 = load double, ptr %43, align 8, !tbaa !14
  %374 = fsub double %372, %373
  %375 = load ptr, ptr %26, align 8, !tbaa !5
  %376 = load i32, ptr %42, align 4, !tbaa !13
  %377 = sext i32 %376 to i64
  %378 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %375, i64 noundef %377) #9
  store double %374, ptr %378, align 8, !tbaa !14
  %379 = load ptr, ptr %14, align 8, !tbaa !5
  %380 = load i32, ptr %42, align 4, !tbaa !13
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds double, ptr %379, i64 %381
  %383 = load double, ptr %382, align 8, !tbaa !14
  %384 = load ptr, ptr %23, align 8, !tbaa !5
  %385 = load i32, ptr %42, align 4, !tbaa !13
  %386 = sext i32 %385 to i64
  %387 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %384, i64 noundef %386) #9
  %388 = load double, ptr %387, align 8, !tbaa !14
  %389 = load ptr, ptr %26, align 8, !tbaa !5
  %390 = load i32, ptr %42, align 4, !tbaa !13
  %391 = sext i32 %390 to i64
  %392 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %389, i64 noundef %391) #9
  %393 = load double, ptr %392, align 8, !tbaa !14
  %394 = fneg double %388
  %395 = call double @llvm.fmuladd.f64(double %394, double %393, double %383)
  %396 = load ptr, ptr %21, align 8, !tbaa !5
  %397 = load i32, ptr %42, align 4, !tbaa !13
  %398 = sext i32 %397 to i64
  %399 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %396, i64 noundef %398) #9
  %400 = load double, ptr %399, align 8, !tbaa !14
  %401 = fdiv double %395, %400
  %402 = load ptr, ptr %29, align 8, !tbaa !5
  %403 = load i32, ptr %42, align 4, !tbaa !13
  %404 = sext i32 %403 to i64
  %405 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %402, i64 noundef %404) #9
  store double %401, ptr %405, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  br label %406

406:                                              ; preds = %366, %347
  br label %407

407:                                              ; preds = %406, %316
  br label %408

408:                                              ; preds = %407
  %409 = load i32, ptr %42, align 4, !tbaa !13
  %410 = add nsw i32 %409, 1
  store i32 %410, ptr %42, align 4, !tbaa !13
  br label %284, !llvm.loop !23

411:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  store i32 0, ptr %44, align 4, !tbaa !13
  br label %412

412:                                              ; preds = %532, %411
  %413 = load i32, ptr %44, align 4, !tbaa !13
  %414 = load i32, ptr %19, align 4, !tbaa !13
  %415 = load i32, ptr %18, align 4, !tbaa !13
  %416 = add nsw i32 %414, %415
  %417 = icmp slt i32 %413, %416
  br i1 %417, label %419, label %418

418:                                              ; preds = %412
  store i32 11, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  br label %535

419:                                              ; preds = %412
  %420 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %421 = load ptr, ptr %420, align 8, !tbaa !9
  %422 = load i32, ptr %44, align 4, !tbaa !13
  %423 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %421, i32 noundef %422)
          to label %424 unwind label %435

424:                                              ; preds = %419
  %425 = icmp eq i32 %423, 0
  br i1 %425, label %426, label %449

426:                                              ; preds = %424
  %427 = load ptr, ptr %25, align 8, !tbaa !5
  %428 = load i32, ptr %44, align 4, !tbaa !13
  %429 = sext i32 %428 to i64
  %430 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %427, i64 noundef %429) #9
  %431 = load double, ptr %430, align 8, !tbaa !14
  %432 = fcmp oeq double %431, 0.000000e+00
  br i1 %432, label %433, label %434

433:                                              ; preds = %426
  br label %440

434:                                              ; preds = %426
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.17, i32 noundef 769, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

435:                                              ; preds = %449, %419
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %33, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  br label %845

439:                                              ; No predecessors!
  br label %440

440:                                              ; preds = %439, %433
  %441 = load ptr, ptr %27, align 8, !tbaa !5
  %442 = load i32, ptr %44, align 4, !tbaa !13
  %443 = sext i32 %442 to i64
  %444 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %441, i64 noundef %443) #9
  store double 0.000000e+00, ptr %444, align 8, !tbaa !14
  %445 = load ptr, ptr %30, align 8, !tbaa !5
  %446 = load i32, ptr %44, align 4, !tbaa !13
  %447 = sext i32 %446 to i64
  %448 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %445, i64 noundef %447) #9
  store double 0.000000e+00, ptr %448, align 8, !tbaa !14
  br label %531

449:                                              ; preds = %424
  %450 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %451 = load ptr, ptr %450, align 8, !tbaa !9
  %452 = load i32, ptr %44, align 4, !tbaa !13
  %453 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %451, i32 noundef %452)
          to label %454 unwind label %435

454:                                              ; preds = %449
  %455 = icmp eq i32 %453, 1
  br i1 %455, label %456, label %480

456:                                              ; preds = %454
  %457 = load ptr, ptr %13, align 8, !tbaa !5
  %458 = icmp ne ptr %457, null
  br i1 %458, label %459, label %466

459:                                              ; preds = %456
  %460 = load ptr, ptr %13, align 8, !tbaa !5
  %461 = load i32, ptr %44, align 4, !tbaa !13
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds double, ptr %460, i64 %462
  %464 = load double, ptr %463, align 8, !tbaa !14
  %465 = fcmp oeq double %464, 0.000000e+00
  br label %466

466:                                              ; preds = %459, %456
  %467 = phi i1 [ true, %456 ], [ %465, %459 ]
  br i1 %467, label %468, label %469

468:                                              ; preds = %466
  br label %471

469:                                              ; preds = %466
  call void @__assert_fail(ptr noundef @.str.35, ptr noundef @.str.17, i32 noundef 773, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

470:                                              ; No predecessors!
  br label %471

471:                                              ; preds = %470, %468
  %472 = load ptr, ptr %27, align 8, !tbaa !5
  %473 = load i32, ptr %44, align 4, !tbaa !13
  %474 = sext i32 %473 to i64
  %475 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %472, i64 noundef %474) #9
  store double 0.000000e+00, ptr %475, align 8, !tbaa !14
  %476 = load ptr, ptr %30, align 8, !tbaa !5
  %477 = load i32, ptr %44, align 4, !tbaa !13
  %478 = sext i32 %477 to i64
  %479 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %476, i64 noundef %478) #9
  store double 0.000000e+00, ptr %479, align 8, !tbaa !14
  br label %530

480:                                              ; preds = %454
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %481 = load ptr, ptr %13, align 8, !tbaa !5
  %482 = icmp ne ptr %481, null
  br i1 %482, label %483, label %489

483:                                              ; preds = %480
  %484 = load ptr, ptr %13, align 8, !tbaa !5
  %485 = load i32, ptr %44, align 4, !tbaa !13
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds double, ptr %484, i64 %486
  %488 = load double, ptr %487, align 8, !tbaa !14
  br label %490

489:                                              ; preds = %480
  br label %490

490:                                              ; preds = %489, %483
  %491 = phi double [ %488, %483 ], [ 0.000000e+00, %489 ]
  store double %491, ptr %45, align 8, !tbaa !14
  %492 = load double, ptr %45, align 8, !tbaa !14
  %493 = load ptr, ptr %25, align 8, !tbaa !5
  %494 = load i32, ptr %44, align 4, !tbaa !13
  %495 = sext i32 %494 to i64
  %496 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %493, i64 noundef %495) #9
  %497 = load double, ptr %496, align 8, !tbaa !14
  %498 = fsub double %492, %497
  %499 = load ptr, ptr %27, align 8, !tbaa !5
  %500 = load i32, ptr %44, align 4, !tbaa !13
  %501 = sext i32 %500 to i64
  %502 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %499, i64 noundef %501) #9
  store double %498, ptr %502, align 8, !tbaa !14
  %503 = load ptr, ptr %15, align 8, !tbaa !5
  %504 = load i32, ptr %44, align 4, !tbaa !13
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds double, ptr %503, i64 %505
  %507 = load double, ptr %506, align 8, !tbaa !14
  %508 = load ptr, ptr %24, align 8, !tbaa !5
  %509 = load i32, ptr %44, align 4, !tbaa !13
  %510 = sext i32 %509 to i64
  %511 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %508, i64 noundef %510) #9
  %512 = load double, ptr %511, align 8, !tbaa !14
  %513 = load ptr, ptr %27, align 8, !tbaa !5
  %514 = load i32, ptr %44, align 4, !tbaa !13
  %515 = sext i32 %514 to i64
  %516 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %513, i64 noundef %515) #9
  %517 = load double, ptr %516, align 8, !tbaa !14
  %518 = fneg double %512
  %519 = call double @llvm.fmuladd.f64(double %518, double %517, double %507)
  %520 = load ptr, ptr %22, align 8, !tbaa !5
  %521 = load i32, ptr %44, align 4, !tbaa !13
  %522 = sext i32 %521 to i64
  %523 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %520, i64 noundef %522) #9
  %524 = load double, ptr %523, align 8, !tbaa !14
  %525 = fdiv double %519, %524
  %526 = load ptr, ptr %30, align 8, !tbaa !5
  %527 = load i32, ptr %44, align 4, !tbaa !13
  %528 = sext i32 %527 to i64
  %529 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %526, i64 noundef %528) #9
  store double %525, ptr %529, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %530

530:                                              ; preds = %490, %471
  br label %531

531:                                              ; preds = %530, %440
  br label %532

532:                                              ; preds = %531
  %533 = load i32, ptr %44, align 4, !tbaa !13
  %534 = add nsw i32 %533, 1
  store i32 %534, ptr %44, align 4, !tbaa !13
  br label %412, !llvm.loop !24

535:                                              ; preds = %418
  %536 = load ptr, ptr %26, align 8, !tbaa !5
  %537 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %536)
          to label %538 unwind label %276

538:                                              ; preds = %535
  br i1 %537, label %539, label %540

539:                                              ; preds = %538
  br label %542

540:                                              ; preds = %538
  call void @__assert_fail(ptr noundef @.str.36, ptr noundef @.str.17, i32 noundef 782, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

541:                                              ; No predecessors!
  br label %542

542:                                              ; preds = %541, %539
  %543 = load ptr, ptr %27, align 8, !tbaa !5
  %544 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %543)
          to label %545 unwind label %276

545:                                              ; preds = %542
  br i1 %544, label %546, label %547

546:                                              ; preds = %545
  br label %549

547:                                              ; preds = %545
  call void @__assert_fail(ptr noundef @.str.37, ptr noundef @.str.17, i32 noundef 783, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

548:                                              ; No predecessors!
  br label %549

549:                                              ; preds = %548, %546
  %550 = load ptr, ptr %29, align 8, !tbaa !5
  %551 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %550)
          to label %552 unwind label %276

552:                                              ; preds = %549
  br i1 %551, label %553, label %554

553:                                              ; preds = %552
  br label %556

554:                                              ; preds = %552
  call void @__assert_fail(ptr noundef @.str.38, ptr noundef @.str.17, i32 noundef 784, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

555:                                              ; No predecessors!
  br label %556

556:                                              ; preds = %555, %553
  %557 = load ptr, ptr %30, align 8, !tbaa !5
  %558 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %557)
          to label %559 unwind label %276

559:                                              ; preds = %556
  br i1 %558, label %560, label %561

560:                                              ; preds = %559
  br label %563

561:                                              ; preds = %559
  call void @__assert_fail(ptr noundef @.str.39, ptr noundef @.str.17, i32 noundef 785, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

562:                                              ; No predecessors!
  br label %563

563:                                              ; preds = %562, %560
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  store i32 0, ptr %46, align 4, !tbaa !13
  br label %564

564:                                              ; preds = %738, %563
  %565 = load i32, ptr %46, align 4, !tbaa !13
  %566 = load i32, ptr %19, align 4, !tbaa !13
  %567 = load i32, ptr %18, align 4, !tbaa !13
  %568 = add nsw i32 %566, %567
  %569 = icmp slt i32 %565, %568
  br i1 %569, label %571, label %570

570:                                              ; preds = %564
  store i32 14, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %742

571:                                              ; preds = %564
  %572 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %573 = load ptr, ptr %572, align 8, !tbaa !9
  %574 = load i32, ptr %46, align 4, !tbaa !13
  %575 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %573, i32 noundef %574)
          to label %576 unwind label %598

576:                                              ; preds = %571
  %577 = icmp eq i32 %575, 2
  br i1 %577, label %578, label %737

578:                                              ; preds = %576
  %579 = load ptr, ptr %21, align 8, !tbaa !5
  %580 = load i32, ptr %46, align 4, !tbaa !13
  %581 = sext i32 %580 to i64
  %582 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %579, i64 noundef %581) #9
  %583 = load double, ptr %582, align 8, !tbaa !14
  %584 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %583)
          to label %585 unwind label %598

585:                                              ; preds = %578
  br i1 %584, label %594, label %586

586:                                              ; preds = %585
  %587 = load ptr, ptr %22, align 8, !tbaa !5
  %588 = load i32, ptr %46, align 4, !tbaa !13
  %589 = sext i32 %588 to i64
  %590 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %587, i64 noundef %589) #9
  %591 = load double, ptr %590, align 8, !tbaa !14
  %592 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %591)
          to label %593 unwind label %598

593:                                              ; preds = %586
  br label %594

594:                                              ; preds = %593, %585
  %595 = phi i1 [ true, %585 ], [ %592, %593 ]
  br i1 %595, label %596, label %597

596:                                              ; preds = %594
  br label %603

597:                                              ; preds = %594
  call void @__assert_fail(ptr noundef @.str.40, ptr noundef @.str.17, i32 noundef 790, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

598:                                              ; preds = %586, %578, %571
  %599 = landingpad { ptr, i32 }
          cleanup
  %600 = extractvalue { ptr, i32 } %599, 0
  store ptr %600, ptr %33, align 8
  %601 = extractvalue { ptr, i32 } %599, 1
  store i32 %601, ptr %34, align 4
  br label %741

602:                                              ; No predecessors!
  br label %603

603:                                              ; preds = %602, %596
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %604 = load ptr, ptr %20, align 8, !tbaa !5
  %605 = load i32, ptr %46, align 4, !tbaa !13
  %606 = load ptr, ptr %28, align 8, !tbaa !5
  %607 = invoke noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %604, i32 noundef %605, ptr noundef nonnull align 8 dereferenceable(16) %606)
          to label %608 unwind label %673

608:                                              ; preds = %603
  store double %607, ptr %47, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %609 = load ptr, ptr %11, align 8, !tbaa !5
  %610 = icmp ne ptr %609, null
  br i1 %610, label %611, label %617

611:                                              ; preds = %608
  %612 = load ptr, ptr %11, align 8, !tbaa !5
  %613 = load i32, ptr %46, align 4, !tbaa !13
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds double, ptr %612, i64 %614
  %616 = load double, ptr %615, align 8, !tbaa !14
  br label %618

617:                                              ; preds = %608
  br label %618

618:                                              ; preds = %617, %611
  %619 = phi double [ %616, %611 ], [ 0.000000e+00, %617 ]
  store double %619, ptr %48, align 8, !tbaa !14
  %620 = load ptr, ptr %21, align 8, !tbaa !5
  %621 = load i32, ptr %46, align 4, !tbaa !13
  %622 = sext i32 %621 to i64
  %623 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %620, i64 noundef %622) #9
  %624 = load double, ptr %623, align 8, !tbaa !14
  %625 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %624)
          to label %626 unwind label %677

626:                                              ; preds = %618
  br i1 %625, label %627, label %697

627:                                              ; preds = %626
  %628 = load ptr, ptr %22, align 8, !tbaa !5
  %629 = load i32, ptr %46, align 4, !tbaa !13
  %630 = sext i32 %629 to i64
  %631 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %628, i64 noundef %630) #9
  %632 = load double, ptr %631, align 8, !tbaa !14
  %633 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %632)
          to label %634 unwind label %677

634:                                              ; preds = %627
  br i1 %633, label %635, label %697

635:                                              ; preds = %634
  %636 = load ptr, ptr %23, align 8, !tbaa !5
  %637 = load i32, ptr %46, align 4, !tbaa !13
  %638 = sext i32 %637 to i64
  %639 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %636, i64 noundef %638) #9
  %640 = load double, ptr %639, align 8, !tbaa !14
  %641 = load ptr, ptr %22, align 8, !tbaa !5
  %642 = load i32, ptr %46, align 4, !tbaa !13
  %643 = sext i32 %642 to i64
  %644 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %641, i64 noundef %643) #9
  %645 = load double, ptr %644, align 8, !tbaa !14
  %646 = fmul double %640, %645
  %647 = load ptr, ptr %24, align 8, !tbaa !5
  %648 = load i32, ptr %46, align 4, !tbaa !13
  %649 = sext i32 %648 to i64
  %650 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %647, i64 noundef %649) #9
  %651 = load double, ptr %650, align 8, !tbaa !14
  %652 = load ptr, ptr %21, align 8, !tbaa !5
  %653 = load i32, ptr %46, align 4, !tbaa !13
  %654 = sext i32 %653 to i64
  %655 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %652, i64 noundef %654) #9
  %656 = load double, ptr %655, align 8, !tbaa !14
  %657 = fmul double %651, %656
  %658 = fcmp oge double %646, %657
  br i1 %658, label %659, label %681

659:                                              ; preds = %635
  %660 = load double, ptr %48, align 8, !tbaa !14
  %661 = load ptr, ptr %30, align 8, !tbaa !5
  %662 = load i32, ptr %46, align 4, !tbaa !13
  %663 = sext i32 %662 to i64
  %664 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %661, i64 noundef %663) #9
  %665 = load double, ptr %664, align 8, !tbaa !14
  %666 = fadd double %660, %665
  %667 = load double, ptr %47, align 8, !tbaa !14
  %668 = fsub double %666, %667
  %669 = load ptr, ptr %29, align 8, !tbaa !5
  %670 = load i32, ptr %46, align 4, !tbaa !13
  %671 = sext i32 %670 to i64
  %672 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %669, i64 noundef %671) #9
  store double %668, ptr %672, align 8, !tbaa !14
  br label %696

673:                                              ; preds = %603
  %674 = landingpad { ptr, i32 }
          cleanup
  %675 = extractvalue { ptr, i32 } %674, 0
  store ptr %675, ptr %33, align 8
  %676 = extractvalue { ptr, i32 } %674, 1
  store i32 %676, ptr %34, align 4
  br label %736

677:                                              ; preds = %697, %627, %618
  %678 = landingpad { ptr, i32 }
          cleanup
  %679 = extractvalue { ptr, i32 } %678, 0
  store ptr %679, ptr %33, align 8
  %680 = extractvalue { ptr, i32 } %678, 1
  store i32 %680, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %736

681:                                              ; preds = %635
  %682 = load double, ptr %48, align 8, !tbaa !14
  %683 = fneg double %682
  %684 = load ptr, ptr %29, align 8, !tbaa !5
  %685 = load i32, ptr %46, align 4, !tbaa !13
  %686 = sext i32 %685 to i64
  %687 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %684, i64 noundef %686) #9
  %688 = load double, ptr %687, align 8, !tbaa !14
  %689 = fadd double %683, %688
  %690 = load double, ptr %47, align 8, !tbaa !14
  %691 = fadd double %689, %690
  %692 = load ptr, ptr %30, align 8, !tbaa !5
  %693 = load i32, ptr %46, align 4, !tbaa !13
  %694 = sext i32 %693 to i64
  %695 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %692, i64 noundef %694) #9
  store double %691, ptr %695, align 8, !tbaa !14
  br label %696

696:                                              ; preds = %681, %659
  br label %735

697:                                              ; preds = %634, %626
  %698 = load ptr, ptr %21, align 8, !tbaa !5
  %699 = load i32, ptr %46, align 4, !tbaa !13
  %700 = sext i32 %699 to i64
  %701 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %698, i64 noundef %700) #9
  %702 = load double, ptr %701, align 8, !tbaa !14
  %703 = invoke noundef zeroext i1 @_ZSt8isfinited(double noundef %702)
          to label %704 unwind label %677

704:                                              ; preds = %697
  br i1 %703, label %705, label %719

705:                                              ; preds = %704
  %706 = load double, ptr %48, align 8, !tbaa !14
  %707 = load ptr, ptr %30, align 8, !tbaa !5
  %708 = load i32, ptr %46, align 4, !tbaa !13
  %709 = sext i32 %708 to i64
  %710 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %707, i64 noundef %709) #9
  %711 = load double, ptr %710, align 8, !tbaa !14
  %712 = fadd double %706, %711
  %713 = load double, ptr %47, align 8, !tbaa !14
  %714 = fsub double %712, %713
  %715 = load ptr, ptr %29, align 8, !tbaa !5
  %716 = load i32, ptr %46, align 4, !tbaa !13
  %717 = sext i32 %716 to i64
  %718 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %715, i64 noundef %717) #9
  store double %714, ptr %718, align 8, !tbaa !14
  br label %734

719:                                              ; preds = %704
  %720 = load double, ptr %48, align 8, !tbaa !14
  %721 = fneg double %720
  %722 = load ptr, ptr %29, align 8, !tbaa !5
  %723 = load i32, ptr %46, align 4, !tbaa !13
  %724 = sext i32 %723 to i64
  %725 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %722, i64 noundef %724) #9
  %726 = load double, ptr %725, align 8, !tbaa !14
  %727 = fadd double %721, %726
  %728 = load double, ptr %47, align 8, !tbaa !14
  %729 = fadd double %727, %728
  %730 = load ptr, ptr %30, align 8, !tbaa !5
  %731 = load i32, ptr %46, align 4, !tbaa !13
  %732 = sext i32 %731 to i64
  %733 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %730, i64 noundef %732) #9
  store double %729, ptr %733, align 8, !tbaa !14
  br label %734

734:                                              ; preds = %719, %705
  br label %735

735:                                              ; preds = %734, %696
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %737

736:                                              ; preds = %677, %673
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %741

737:                                              ; preds = %735, %576
  br label %738

738:                                              ; preds = %737
  %739 = load i32, ptr %46, align 4, !tbaa !13
  %740 = add nsw i32 %739, 1
  store i32 %740, ptr %46, align 4, !tbaa !13
  br label %564, !llvm.loop !25

741:                                              ; preds = %736, %598
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  br label %845

742:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  store i32 0, ptr %49, align 4, !tbaa !13
  br label %743

743:                                              ; preds = %838, %742
  %744 = load i32, ptr %49, align 4, !tbaa !13
  %745 = load i32, ptr %19, align 4, !tbaa !13
  %746 = load i32, ptr %18, align 4, !tbaa !13
  %747 = add nsw i32 %745, %746
  %748 = icmp slt i32 %744, %747
  br i1 %748, label %750, label %749

749:                                              ; preds = %743
  store i32 17, ptr %40, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %841

750:                                              ; preds = %743
  %751 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %752 = load ptr, ptr %751, align 8, !tbaa !9
  %753 = load i32, ptr %49, align 4, !tbaa !13
  %754 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %752, i32 noundef %753)
          to label %755 unwind label %766

755:                                              ; preds = %750
  %756 = icmp eq i32 %754, 0
  br i1 %756, label %757, label %810

757:                                              ; preds = %755
  %758 = load ptr, ptr %25, align 8, !tbaa !5
  %759 = load i32, ptr %49, align 4, !tbaa !13
  %760 = sext i32 %759 to i64
  %761 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %758, i64 noundef %760) #9
  %762 = load double, ptr %761, align 8, !tbaa !14
  %763 = fcmp oeq double %762, 0.000000e+00
  br i1 %763, label %764, label %765

764:                                              ; preds = %757
  br label %771

765:                                              ; preds = %757
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.17, i32 noundef 810, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

766:                                              ; preds = %810, %750
  %767 = landingpad { ptr, i32 }
          cleanup
  %768 = extractvalue { ptr, i32 } %767, 0
  store ptr %768, ptr %33, align 8
  %769 = extractvalue { ptr, i32 } %767, 1
  store i32 %769, ptr %34, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  br label %845

770:                                              ; No predecessors!
  br label %771

771:                                              ; preds = %770, %764
  %772 = load ptr, ptr %26, align 8, !tbaa !5
  %773 = load i32, ptr %49, align 4, !tbaa !13
  %774 = sext i32 %773 to i64
  %775 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %772, i64 noundef %774) #9
  %776 = load double, ptr %775, align 8, !tbaa !14
  %777 = fcmp oeq double %776, 0.000000e+00
  br i1 %777, label %778, label %785

778:                                              ; preds = %771
  %779 = load ptr, ptr %27, align 8, !tbaa !5
  %780 = load i32, ptr %49, align 4, !tbaa !13
  %781 = sext i32 %780 to i64
  %782 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %779, i64 noundef %781) #9
  %783 = load double, ptr %782, align 8, !tbaa !14
  %784 = fcmp oeq double %783, 0.000000e+00
  br label %785

785:                                              ; preds = %778, %771
  %786 = phi i1 [ false, %771 ], [ %784, %778 ]
  br i1 %786, label %787, label %788

787:                                              ; preds = %785
  br label %790

788:                                              ; preds = %785
  call void @__assert_fail(ptr noundef @.str.41, ptr noundef @.str.17, i32 noundef 811, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

789:                                              ; No predecessors!
  br label %790

790:                                              ; preds = %789, %787
  %791 = load ptr, ptr %29, align 8, !tbaa !5
  %792 = load i32, ptr %49, align 4, !tbaa !13
  %793 = sext i32 %792 to i64
  %794 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %791, i64 noundef %793) #9
  %795 = load double, ptr %794, align 8, !tbaa !14
  %796 = fcmp oeq double %795, 0.000000e+00
  br i1 %796, label %797, label %804

797:                                              ; preds = %790
  %798 = load ptr, ptr %30, align 8, !tbaa !5
  %799 = load i32, ptr %49, align 4, !tbaa !13
  %800 = sext i32 %799 to i64
  %801 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %798, i64 noundef %800) #9
  %802 = load double, ptr %801, align 8, !tbaa !14
  %803 = fcmp oeq double %802, 0.000000e+00
  br label %804

804:                                              ; preds = %797, %790
  %805 = phi i1 [ false, %790 ], [ %803, %797 ]
  br i1 %805, label %806, label %807

806:                                              ; preds = %804
  br label %809

807:                                              ; preds = %804
  call void @__assert_fail(ptr noundef @.str.42, ptr noundef @.str.17, i32 noundef 812, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

808:                                              ; No predecessors!
  br label %809

809:                                              ; preds = %808, %806
  br label %810

810:                                              ; preds = %809, %755
  %811 = getelementptr inbounds %"class.ipx::IPM", ptr %50, i32 0, i32 2
  %812 = load ptr, ptr %811, align 8, !tbaa !9
  %813 = load i32, ptr %49, align 4, !tbaa !13
  %814 = invoke noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %812, i32 noundef %813)
          to label %815 unwind label %766

815:                                              ; preds = %810
  %816 = icmp eq i32 %814, 1
  br i1 %816, label %817, label %837

817:                                              ; preds = %815
  %818 = load ptr, ptr %29, align 8, !tbaa !5
  %819 = load i32, ptr %49, align 4, !tbaa !13
  %820 = sext i32 %819 to i64
  %821 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %818, i64 noundef %820) #9
  %822 = load double, ptr %821, align 8, !tbaa !14
  %823 = fcmp oeq double %822, 0.000000e+00
  br i1 %823, label %824, label %831

824:                                              ; preds = %817
  %825 = load ptr, ptr %30, align 8, !tbaa !5
  %826 = load i32, ptr %49, align 4, !tbaa !13
  %827 = sext i32 %826 to i64
  %828 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %825, i64 noundef %827) #9
  %829 = load double, ptr %828, align 8, !tbaa !14
  %830 = fcmp oeq double %829, 0.000000e+00
  br label %831

831:                                              ; preds = %824, %817
  %832 = phi i1 [ false, %817 ], [ %830, %824 ]
  br i1 %832, label %833, label %834

833:                                              ; preds = %831
  br label %836

834:                                              ; preds = %831
  call void @__assert_fail(ptr noundef @.str.42, ptr noundef @.str.17, i32 noundef 815, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

835:                                              ; No predecessors!
  br label %836

836:                                              ; preds = %835, %833
  br label %837

837:                                              ; preds = %836, %815
  br label %838

838:                                              ; preds = %837
  %839 = load i32, ptr %49, align 4, !tbaa !13
  %840 = add nsw i32 %839, 1
  store i32 %840, ptr %49, align 4, !tbaa !13
  br label %743, !llvm.loop !26

841:                                              ; preds = %749
  store i32 0, ptr %40, align 4
  br label %842

842:                                              ; preds = %841, %275
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #9
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  %843 = load i32, ptr %40, align 4
  switch i32 %843, label %853 [
    i32 0, label %844
    i32 1, label %844
  ]

844:                                              ; preds = %842, %842
  ret void

845:                                              ; preds = %766, %741, %435, %311, %291, %276
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %846

846:                                              ; preds = %845, %234, %179
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #9
  br label %847

847:                                              ; preds = %846, %101
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #9
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %848

848:                                              ; preds = %847
  %849 = load ptr, ptr %33, align 8
  %850 = load i32, ptr %34, align 4
  %851 = insertvalue { ptr, i32 } poison, ptr %849, 0
  %852 = insertvalue { ptr, i32 } %851, i32 %850, 1
  resume { ptr, i32 } %852

853:                                              ; preds = %842
  unreachable
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt4copyIPKdPdET0_T_S4_S3_(ptr noundef, ptr noundef, ptr noundef) #3

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

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

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

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

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 = { "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 = { 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 #4 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { 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 #8 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { 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 = !{!"_ZTSN3ipx3IPME", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !11, i64 32, !11, i64 40, !12, i64 48, !11, i64 56, !12, i64 64, !11, i64 72, !12, i64 80}
!11 = !{!"double", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!12, !12, i64 0}
!14 = !{!11, !11, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!10, !6, i64 0}
!19 = !{!10, !6, i64 8}
!20 = !{!10, !6, i64 24}
!21 = !{!22, !12, i64 12}
!22 = !{!"_ZTS8ipx_info", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !11, i64 184, !12, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !11, i64 224, !11, i64 232, !11, i64 240, !11, i64 248, !11, i64 256, !11, i64 264, !11, i64 272, !11, i64 280, !11, i64 288, !11, i64 296, !11, i64 304, !11, i64 312, !11, i64 320, !11, i64 328, !11, i64 336, !11, i64 344, !11, i64 352, !11, i64 360, !11, i64 368, !11, i64 376, !11, i64 384, !11, i64 392, !11, i64 400, !11, i64 408, !12, i64 416, !12, i64 420, !12, i64 424, !12, i64 428, !11, i64 432, !11, i64 440, !11, i64 448, !11, i64 456}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::valarray" = type { i64, ptr }

@.str.17 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [16 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE = external hidden unnamed_addr constant [137 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [31 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296)) local_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

declare noundef double @_ZNK3ipx7Iterate2muEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #2

; 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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #3 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 #4 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 #4 align 2

declare void @_ZN3ipx9KKTSolver5SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), double noundef, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296), i32 noundef) local_unnamed_addr #4 align 2

declare noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296), i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(84) %0, ptr noundef %1, ptr noundef readonly %2, ptr noundef readonly %3, ptr noundef readonly %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, ptr noundef nonnull align 8 dereferenceable(96) %7) local_unnamed_addr #7 align 2 personality ptr @__gxx_personality_v0 {
  %9 = alloca %"class.std::valarray", align 8
  %10 = alloca %"class.std::valarray", align 8
  %11 = alloca double, align 8
  %12 = getelementptr inbounds i8, ptr %0, i64 16
  %13 = load ptr, ptr %12, align 8, !tbaa !5
  %14 = tail call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %13)
  %15 = tail call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %14)
  %16 = tail call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %14)
  %17 = tail call noundef nonnull align 8 dereferenceable(128) ptr @_ZNK3ipx5Model2AIEv(ptr noundef nonnull align 8 dereferenceable(704) %14)
  %18 = load ptr, ptr %12, align 8, !tbaa !5
  %19 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %18)
  %20 = load ptr, ptr %12, align 8, !tbaa !5
  %21 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %20)
  %22 = load ptr, ptr %12, align 8, !tbaa !5
  %23 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %22)
  %24 = load ptr, ptr %12, align 8, !tbaa !5
  %25 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %24)
  %26 = getelementptr inbounds i8, ptr %7, i64 16
  %27 = getelementptr inbounds i8, ptr %7, i64 32
  %28 = getelementptr inbounds i8, ptr %7, i64 48
  %29 = getelementptr inbounds i8, ptr %7, i64 64
  %30 = getelementptr inbounds i8, ptr %7, i64 80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #9
  %31 = add nsw i32 %16, %15
  %32 = sext i32 %31 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %32)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #9
  %33 = sext i32 %15 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %33)
          to label %34 unwind label %36

34:                                               ; preds = %8
  %.not = icmp ne ptr %2, null
  %35 = icmp sgt i32 %31, 0
  %or.cond = and i1 %.not, %35
  br i1 %or.cond, label %.lr.ph.preheader, label %.loopexit254

.lr.ph.preheader:                                 ; preds = %34
  %wide.trip.count = zext nneg i32 %31 to i64
  br label %.lr.ph

36:                                               ; preds = %8
  %37 = landingpad { ptr, i32 }
          cleanup
  br label %334

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %38 = getelementptr inbounds double, ptr %2, i64 %indvars.iv
  %39 = load double, ptr %38, align 8, !tbaa !12
  %40 = fneg double %39
  %41 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv) #9
  store double %40, ptr %41, align 8, !tbaa !12
  %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 %.loopexit254, label %.lr.ph, !llvm.loop !13

.loopexit254:                                     ; preds = %.lr.ph, %34
  br i1 %35, label %.lr.ph257, label %._crit_edge

.lr.ph257:                                        ; preds = %.loopexit254
  %.not249 = icmp eq ptr %3, null
  %.not250 = icmp eq ptr %4, null
  %wide.trip.count272 = zext nneg i32 %31 to i64
  br label %43

._crit_edge:                                      ; preds = %91, %.loopexit254
  %42 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %92 unwind label %94

43:                                               ; preds = %.lr.ph257, %91
  %indvars.iv269 = phi i64 [ 0, %.lr.ph257 ], [ %indvars.iv.next270, %91 ]
  br i1 %.not249, label %47, label %44

44:                                               ; preds = %43
  %45 = getelementptr inbounds double, ptr %3, i64 %indvars.iv269
  %46 = load double, ptr %45, align 8, !tbaa !12
  br label %47

47:                                               ; preds = %43, %44
  %48 = phi double [ %46, %44 ], [ 0.000000e+00, %43 ]
  br i1 %.not250, label %52, label %49

49:                                               ; preds = %47
  %50 = getelementptr inbounds double, ptr %4, i64 %indvars.iv269
  %51 = load double, ptr %50, align 8, !tbaa !12
  br label %52

52:                                               ; preds = %47, %49
  %53 = phi double [ %51, %49 ], [ 0.000000e+00, %47 ]
  %54 = load ptr, ptr %12, align 8, !tbaa !5
  %55 = trunc nuw nsw i64 %indvars.iv269 to i32
  %56 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %54, i32 noundef %55)
  br i1 %56, label %57, label %69

57:                                               ; preds = %52
  %58 = getelementptr inbounds double, ptr %5, i64 %indvars.iv269
  %59 = load double, ptr %58, align 8, !tbaa !12
  %60 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %indvars.iv269) #9
  %61 = load double, ptr %60, align 8, !tbaa !12
  %62 = call double @llvm.fmuladd.f64(double %61, double %48, double %59)
  %63 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv269) #9
  %64 = load double, ptr %63, align 8, !tbaa !12
  %65 = fdiv double %62, %64
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv269) #9
  %67 = load double, ptr %66, align 8, !tbaa !12
  %68 = fadd double %65, %67
  store double %68, ptr %66, align 8, !tbaa !12
  br label %69

69:                                               ; preds = %57, %52
  %70 = load ptr, ptr %12, align 8, !tbaa !5
  %71 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %70, i32 noundef %55)
  br i1 %71, label %72, label %85

72:                                               ; preds = %69
  %73 = getelementptr inbounds double, ptr %6, i64 %indvars.iv269
  %74 = load double, ptr %73, align 8, !tbaa !12
  %75 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %25, i64 noundef %indvars.iv269) #9
  %76 = load double, ptr %75, align 8, !tbaa !12
  %77 = fneg double %76
  %78 = call double @llvm.fmuladd.f64(double %77, double %53, double %74)
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %indvars.iv269) #9
  %80 = load double, ptr %79, align 8, !tbaa !12
  %81 = fdiv double %78, %80
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv269) #9
  %83 = load double, ptr %82, align 8, !tbaa !12
  %84 = fsub double %83, %81
  store double %84, ptr %82, align 8, !tbaa !12
  br label %85

85:                                               ; preds = %72, %69
  %86 = load ptr, ptr %12, align 8, !tbaa !5
  %87 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %86, i32 noundef %55)
  %88 = icmp eq i32 %87, 0
  br i1 %88, label %89, label %91

89:                                               ; preds = %85
  %90 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv269) #9
  store double 0.000000e+00, ptr %90, align 8, !tbaa !12
  br label %91

91:                                               ; preds = %89, %85
  %indvars.iv.next270 = add nuw nsw i64 %indvars.iv269, 1
  %exitcond273.not = icmp eq i64 %indvars.iv.next270, %wide.trip.count272
  br i1 %exitcond273.not, label %._crit_edge, label %43, !llvm.loop !15

92:                                               ; preds = %._crit_edge
  br i1 %42, label %96, label %93

93:                                               ; preds = %92
  call void @__assert_fail(ptr noundef nonnull @.str.32, ptr noundef nonnull @.str.17, i32 noundef 740, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

94:                                               ; preds = %97, %._crit_edge
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %333

96:                                               ; preds = %92
  %.not240 = icmp eq ptr %1, null
  br i1 %.not240, label %101, label %97

97:                                               ; preds = %96
  %98 = getelementptr inbounds double, ptr %1, i64 %33
  %99 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %10) #9
  %100 = invoke noundef ptr @_ZSt4copyIPKdPdET0_T_S4_S3_(ptr noundef nonnull %1, ptr noundef nonnull %98, ptr noundef %99)
          to label %101 unwind label %94

101:                                              ; preds = %97, %96
  %102 = load ptr, ptr %0, align 8, !tbaa !16
  %103 = call noundef double @_ZNK3ipx7Control7kkt_tolEv(ptr noundef nonnull align 8 dereferenceable(1496) %102)
  %104 = load ptr, ptr %12, align 8, !tbaa !5
  %105 = invoke noundef double @_ZNK3ipx7Iterate2muEv(ptr noundef nonnull align 8 dereferenceable(296) %104)
          to label %106 unwind label %117

106:                                              ; preds = %101
  %107 = call double @sqrt(double noundef %105) #9
  %108 = fmul double %103, %107
  %109 = getelementptr inbounds i8, ptr %0, i64 8
  %110 = load ptr, ptr %109, align 8, !tbaa !17
  %111 = getelementptr inbounds i8, ptr %0, i64 24
  %112 = load ptr, ptr %111, align 8, !tbaa !18
  invoke void @_ZN3ipx9KKTSolver5SolveERKSt8valarrayIdES4_dRS2_S5_PNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(8) %110, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %10, double noundef %108, ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %28, ptr noundef %112)
          to label %113 unwind label %117

113:                                              ; preds = %106
  %114 = load ptr, ptr %111, align 8, !tbaa !18
  %115 = getelementptr inbounds i8, ptr %114, i64 12
  %116 = load i32, ptr %115, align 4, !tbaa !19
  %.not241 = icmp eq i32 %116, 0
  br i1 %.not241, label %119, label %.loopexit

117:                                              ; preds = %227, %223, %219, %._crit_edge263, %106, %101
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %333

119:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  store double -1.000000e+00, ptr %11, align 8, !tbaa !12
  %120 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEmLERKd(ptr noundef nonnull align 8 dereferenceable(16) %28, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %121 unwind label %122

121:                                              ; preds = %119
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  br i1 %35, label %.lr.ph260, label %._crit_edge263

.lr.ph260:                                        ; preds = %121
  %.not247 = icmp eq ptr %3, null
  %wide.trip.count277 = zext nneg i32 %31 to i64
  br label %124

.preheader252:                                    ; preds = %168
  br i1 %35, label %.lr.ph262, label %._crit_edge263

.lr.ph262:                                        ; preds = %.preheader252
  %.not245 = icmp eq ptr %4, null
  %wide.trip.count282 = zext nneg i32 %31 to i64
  br label %171

122:                                              ; preds = %119
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  br label %333

124:                                              ; preds = %.lr.ph260, %168
  %indvars.iv274 = phi i64 [ 0, %.lr.ph260 ], [ %indvars.iv.next275, %168 ]
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = trunc nuw nsw i64 %indvars.iv274 to i32
  %127 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %125, i32 noundef %126)
  %128 = icmp eq i32 %127, 0
  br i1 %128, label %129, label %136

129:                                              ; preds = %124
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv274) #9
  %131 = load double, ptr %130, align 8, !tbaa !12
  %132 = fcmp oeq double %131, 0.000000e+00
  br i1 %132, label %134, label %133

133:                                              ; preds = %129
  call void @__assert_fail(ptr noundef nonnull @.str.33, ptr noundef nonnull @.str.17, i32 noundef 754, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

134:                                              ; preds = %129
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %26, i64 noundef %indvars.iv274) #9
  store double 0.000000e+00, ptr %135, align 8, !tbaa !12
  br label %168

136:                                              ; preds = %124
  %137 = load ptr, ptr %12, align 8, !tbaa !5
  %138 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %137, i32 noundef %126)
  %139 = icmp eq i32 %138, 1
  br i1 %139, label %140, label %147

140:                                              ; preds = %136
  br i1 %.not247, label %.critedge, label %141

141:                                              ; preds = %140
  %142 = getelementptr inbounds double, ptr %3, i64 %indvars.iv274
  %143 = load double, ptr %142, align 8, !tbaa !12
  %144 = fcmp oeq double %143, 0.000000e+00
  br i1 %144, label %.critedge, label %145

145:                                              ; preds = %141
  call void @__assert_fail(ptr noundef nonnull @.str.34, ptr noundef nonnull @.str.17, i32 noundef 758, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

.critedge:                                        ; preds = %140, %141
  %146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %26, i64 noundef %indvars.iv274) #9
  store double 0.000000e+00, ptr %146, align 8, !tbaa !12
  br label %168

147:                                              ; preds = %136
  br i1 %.not247, label %151, label %148

148:                                              ; preds = %147
  %149 = getelementptr inbounds double, ptr %3, i64 %indvars.iv274
  %150 = load double, ptr %149, align 8, !tbaa !12
  br label %151

151:                                              ; preds = %147, %148
  %152 = phi double [ %150, %148 ], [ 0.000000e+00, %147 ]
  %153 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv274) #9
  %154 = load double, ptr %153, align 8, !tbaa !12
  %155 = fsub double %154, %152
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %26, i64 noundef %indvars.iv274) #9
  store double %155, ptr %156, align 8, !tbaa !12
  %157 = getelementptr inbounds double, ptr %5, i64 %indvars.iv274
  %158 = load double, ptr %157, align 8, !tbaa !12
  %159 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %indvars.iv274) #9
  %160 = load double, ptr %159, align 8, !tbaa !12
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %26, i64 noundef %indvars.iv274) #9
  %162 = load double, ptr %161, align 8, !tbaa !12
  %163 = fneg double %160
  %164 = call double @llvm.fmuladd.f64(double %163, double %162, double %158)
  %165 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv274) #9
  %166 = load double, ptr %165, align 8, !tbaa !12
  %167 = fdiv double %164, %166
  br label %168

168:                                              ; preds = %134, %151, %.critedge
  %.sink = phi double [ 0.000000e+00, %134 ], [ %167, %151 ], [ 0.000000e+00, %.critedge ]
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %indvars.iv274) #9
  store double %.sink, ptr %169, align 8, !tbaa !12
  %indvars.iv.next275 = add nuw nsw i64 %indvars.iv274, 1
  %exitcond278.not = icmp eq i64 %indvars.iv.next275, %wide.trip.count277
  br i1 %exitcond278.not, label %.preheader252, label %124, !llvm.loop !21

._crit_edge263:                                   ; preds = %215, %121, %.preheader252
  %170 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %26)
          to label %217 unwind label %117

171:                                              ; preds = %.lr.ph262, %215
  %indvars.iv279 = phi i64 [ 0, %.lr.ph262 ], [ %indvars.iv.next280, %215 ]
  %172 = load ptr, ptr %12, align 8, !tbaa !5
  %173 = trunc nuw nsw i64 %indvars.iv279 to i32
  %174 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %172, i32 noundef %173)
  %175 = icmp eq i32 %174, 0
  br i1 %175, label %176, label %183

176:                                              ; preds = %171
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv279) #9
  %178 = load double, ptr %177, align 8, !tbaa !12
  %179 = fcmp oeq double %178, 0.000000e+00
  br i1 %179, label %181, label %180

180:                                              ; preds = %176
  call void @__assert_fail(ptr noundef nonnull @.str.33, ptr noundef nonnull @.str.17, i32 noundef 769, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

181:                                              ; preds = %176
  %182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef %indvars.iv279) #9
  store double 0.000000e+00, ptr %182, align 8, !tbaa !12
  br label %215

183:                                              ; preds = %171
  %184 = load ptr, ptr %12, align 8, !tbaa !5
  %185 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %184, i32 noundef %173)
  %186 = icmp eq i32 %185, 1
  br i1 %186, label %187, label %194

187:                                              ; preds = %183
  br i1 %.not245, label %.critedge2, label %188

188:                                              ; preds = %187
  %189 = getelementptr inbounds double, ptr %4, i64 %indvars.iv279
  %190 = load double, ptr %189, align 8, !tbaa !12
  %191 = fcmp oeq double %190, 0.000000e+00
  br i1 %191, label %.critedge2, label %192

192:                                              ; preds = %188
  call void @__assert_fail(ptr noundef nonnull @.str.35, ptr noundef nonnull @.str.17, i32 noundef 773, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

.critedge2:                                       ; preds = %187, %188
  %193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef %indvars.iv279) #9
  store double 0.000000e+00, ptr %193, align 8, !tbaa !12
  br label %215

194:                                              ; preds = %183
  br i1 %.not245, label %198, label %195

195:                                              ; preds = %194
  %196 = getelementptr inbounds double, ptr %4, i64 %indvars.iv279
  %197 = load double, ptr %196, align 8, !tbaa !12
  br label %198

198:                                              ; preds = %194, %195
  %199 = phi double [ %197, %195 ], [ 0.000000e+00, %194 ]
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv279) #9
  %201 = load double, ptr %200, align 8, !tbaa !12
  %202 = fsub double %199, %201
  %203 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef %indvars.iv279) #9
  store double %202, ptr %203, align 8, !tbaa !12
  %204 = getelementptr inbounds double, ptr %6, i64 %indvars.iv279
  %205 = load double, ptr %204, align 8, !tbaa !12
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %25, i64 noundef %indvars.iv279) #9
  %207 = load double, ptr %206, align 8, !tbaa !12
  %208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef %indvars.iv279) #9
  %209 = load double, ptr %208, align 8, !tbaa !12
  %210 = fneg double %207
  %211 = call double @llvm.fmuladd.f64(double %210, double %209, double %205)
  %212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %indvars.iv279) #9
  %213 = load double, ptr %212, align 8, !tbaa !12
  %214 = fdiv double %211, %213
  br label %215

215:                                              ; preds = %181, %198, %.critedge2
  %.sink295 = phi double [ 0.000000e+00, %181 ], [ %214, %198 ], [ 0.000000e+00, %.critedge2 ]
  %216 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv279) #9
  store double %.sink295, ptr %216, align 8, !tbaa !12
  %indvars.iv.next280 = add nuw nsw i64 %indvars.iv279, 1
  %exitcond283.not = icmp eq i64 %indvars.iv.next280, %wide.trip.count282
  br i1 %exitcond283.not, label %._crit_edge263, label %171, !llvm.loop !22

217:                                              ; preds = %._crit_edge263
  br i1 %170, label %219, label %218

218:                                              ; preds = %217
  call void @__assert_fail(ptr noundef nonnull @.str.36, ptr noundef nonnull @.str.17, i32 noundef 782, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

219:                                              ; preds = %217
  %220 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %221 unwind label %117

221:                                              ; preds = %219
  br i1 %220, label %223, label %222

222:                                              ; preds = %221
  call void @__assert_fail(ptr noundef nonnull @.str.37, ptr noundef nonnull @.str.17, i32 noundef 783, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

223:                                              ; preds = %221
  %224 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %29)
          to label %225 unwind label %117

225:                                              ; preds = %223
  br i1 %224, label %227, label %226

226:                                              ; preds = %225
  call void @__assert_fail(ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.17, i32 noundef 784, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

227:                                              ; preds = %225
  %228 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %30)
          to label %229 unwind label %117

229:                                              ; preds = %227
  br i1 %228, label %.preheader251, label %230

.preheader251:                                    ; preds = %229
  br i1 %35, label %.lr.ph265.preheader, label %.loopexit

.lr.ph265.preheader:                              ; preds = %.preheader251
  %wide.trip.count287 = zext nneg i32 %31 to i64
  br label %.lr.ph265

230:                                              ; preds = %229
  call void @__assert_fail(ptr noundef nonnull @.str.39, ptr noundef nonnull @.str.17, i32 noundef 785, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

.preheader:                                       ; preds = %294
  br i1 %35, label %.lr.ph267.preheader, label %.loopexit

.lr.ph267.preheader:                              ; preds = %.preheader
  %wide.trip.count292 = zext nneg i32 %31 to i64
  br label %.lr.ph267

.lr.ph265:                                        ; preds = %.lr.ph265.preheader, %294
  %indvars.iv284 = phi i64 [ 0, %.lr.ph265.preheader ], [ %indvars.iv.next285, %294 ]
  %231 = load ptr, ptr %12, align 8, !tbaa !5
  %232 = trunc nuw nsw i64 %indvars.iv284 to i32
  %233 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %231, i32 noundef %232)
  %234 = icmp eq i32 %233, 2
  br i1 %234, label %235, label %294

235:                                              ; preds = %.lr.ph265
  %236 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv284) #9
  %237 = load double, ptr %236, align 8, !tbaa !12
  %238 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %237)
  br i1 %238, label %.critedge4, label %239

239:                                              ; preds = %235
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %indvars.iv284) #9
  %241 = load double, ptr %240, align 8, !tbaa !12
  %242 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %241)
  br i1 %242, label %.critedge4, label %243

243:                                              ; preds = %239
  call void @__assert_fail(ptr noundef nonnull @.str.40, ptr noundef nonnull @.str.17, i32 noundef 790, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

.critedge4:                                       ; preds = %235, %239
  %244 = call noundef double @_ZN3ipx9DotColumnERKNS_12SparseMatrixEiRKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(128) %17, i32 noundef %232, ptr noundef nonnull align 8 dereferenceable(16) %28)
  br i1 %.not, label %245, label %248

245:                                              ; preds = %.critedge4
  %246 = getelementptr inbounds double, ptr %2, i64 %indvars.iv284
  %247 = load double, ptr %246, align 8, !tbaa !12
  br label %248

248:                                              ; preds = %.critedge4, %245
  %249 = phi double [ %247, %245 ], [ 0.000000e+00, %.critedge4 ]
  %250 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv284) #9
  %251 = load double, ptr %250, align 8, !tbaa !12
  %252 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %251)
  br i1 %252, label %253, label %279

253:                                              ; preds = %248
  %254 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %indvars.iv284) #9
  %255 = load double, ptr %254, align 8, !tbaa !12
  %256 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %255)
  br i1 %256, label %257, label %279

257:                                              ; preds = %253
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %indvars.iv284) #9
  %259 = load double, ptr %258, align 8, !tbaa !12
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %indvars.iv284) #9
  %261 = load double, ptr %260, align 8, !tbaa !12
  %262 = fmul double %259, %261
  %263 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %25, i64 noundef %indvars.iv284) #9
  %264 = load double, ptr %263, align 8, !tbaa !12
  %265 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv284) #9
  %266 = load double, ptr %265, align 8, !tbaa !12
  %267 = fmul double %264, %266
  %268 = fcmp ult double %262, %267
  br i1 %268, label %274, label %269

269:                                              ; preds = %257
  %270 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv284) #9
  %271 = load double, ptr %270, align 8, !tbaa !12
  %272 = fadd double %249, %271
  %273 = fsub double %272, %244
  br label %.sink.split

274:                                              ; preds = %257
  %275 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %indvars.iv284) #9
  %276 = load double, ptr %275, align 8, !tbaa !12
  %277 = fsub double %276, %249
  %278 = fadd double %244, %277
  br label %.sink.split

279:                                              ; preds = %253, %248
  %280 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv284) #9
  %281 = load double, ptr %280, align 8, !tbaa !12
  %282 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %281)
  br i1 %282, label %283, label %288

283:                                              ; preds = %279
  %284 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv284) #9
  %285 = load double, ptr %284, align 8, !tbaa !12
  %286 = fadd double %249, %285
  %287 = fsub double %286, %244
  br label %.sink.split

288:                                              ; preds = %279
  %289 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %indvars.iv284) #9
  %290 = load double, ptr %289, align 8, !tbaa !12
  %291 = fsub double %290, %249
  %292 = fadd double %244, %291
  br label %.sink.split

.sink.split:                                      ; preds = %283, %288, %269, %274
  %.sink299 = phi ptr [ %30, %274 ], [ %29, %269 ], [ %30, %288 ], [ %29, %283 ]
  %.sink297 = phi double [ %278, %274 ], [ %273, %269 ], [ %292, %288 ], [ %287, %283 ]
  %293 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.sink299, i64 noundef %indvars.iv284) #9
  store double %.sink297, ptr %293, align 8, !tbaa !12
  br label %294

294:                                              ; preds = %.sink.split, %.lr.ph265
  %indvars.iv.next285 = add nuw nsw i64 %indvars.iv284, 1
  %exitcond288.not = icmp eq i64 %indvars.iv.next285, %wide.trip.count287
  br i1 %exitcond288.not, label %.preheader, label %.lr.ph265, !llvm.loop !23

.lr.ph267:                                        ; preds = %.lr.ph267.preheader, %332
  %indvars.iv289 = phi i64 [ 0, %.lr.ph267.preheader ], [ %indvars.iv.next290, %332 ]
  %295 = load ptr, ptr %12, align 8, !tbaa !5
  %296 = trunc nuw nsw i64 %indvars.iv289 to i32
  %297 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %295, i32 noundef %296)
  %298 = icmp eq i32 %297, 0
  br i1 %298, label %299, label %320

299:                                              ; preds = %.lr.ph267
  %300 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv289) #9
  %301 = load double, ptr %300, align 8, !tbaa !12
  %302 = fcmp oeq double %301, 0.000000e+00
  br i1 %302, label %304, label %303

303:                                              ; preds = %299
  call void @__assert_fail(ptr noundef nonnull @.str.33, ptr noundef nonnull @.str.17, i32 noundef 810, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

304:                                              ; preds = %299
  %305 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %26, i64 noundef %indvars.iv289) #9
  %306 = load double, ptr %305, align 8, !tbaa !12
  %307 = fcmp oeq double %306, 0.000000e+00
  br i1 %307, label %308, label %.critedge6

308:                                              ; preds = %304
  %309 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %27, i64 noundef %indvars.iv289) #9
  %310 = load double, ptr %309, align 8, !tbaa !12
  %311 = fcmp oeq double %310, 0.000000e+00
  br i1 %311, label %312, label %.critedge6

.critedge6:                                       ; preds = %304, %308
  call void @__assert_fail(ptr noundef nonnull @.str.41, ptr noundef nonnull @.str.17, i32 noundef 811, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

312:                                              ; preds = %308
  %313 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %indvars.iv289) #9
  %314 = load double, ptr %313, align 8, !tbaa !12
  %315 = fcmp oeq double %314, 0.000000e+00
  br i1 %315, label %316, label %.critedge8

316:                                              ; preds = %312
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv289) #9
  %318 = load double, ptr %317, align 8, !tbaa !12
  %319 = fcmp oeq double %318, 0.000000e+00
  br i1 %319, label %320, label %.critedge8

.critedge8:                                       ; preds = %312, %316
  call void @__assert_fail(ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.17, i32 noundef 812, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

320:                                              ; preds = %316, %.lr.ph267
  %321 = load ptr, ptr %12, align 8, !tbaa !5
  %322 = call noundef i32 @_ZNK3ipx7Iterate7StateOfEi(ptr noundef nonnull align 8 dereferenceable(296) %321, i32 noundef %296)
  %323 = icmp eq i32 %322, 1
  br i1 %323, label %324, label %332

324:                                              ; preds = %320
  %325 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %indvars.iv289) #9
  %326 = load double, ptr %325, align 8, !tbaa !12
  %327 = fcmp oeq double %326, 0.000000e+00
  br i1 %327, label %328, label %.critedge10

328:                                              ; preds = %324
  %329 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv289) #9
  %330 = load double, ptr %329, align 8, !tbaa !12
  %331 = fcmp oeq double %330, 0.000000e+00
  br i1 %331, label %332, label %.critedge10

.critedge10:                                      ; preds = %324, %328
  call void @__assert_fail(ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.17, i32 noundef 815, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE) #10
  unreachable

332:                                              ; preds = %320, %328
  %indvars.iv.next290 = add nuw nsw i64 %indvars.iv289, 1
  %exitcond293.not = icmp eq i64 %indvars.iv.next290, %wide.trip.count292
  br i1 %exitcond293.not, label %.loopexit, label %.lr.ph267, !llvm.loop !24

.loopexit:                                        ; preds = %332, %.preheader251, %.preheader, %113
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  ret void

333:                                              ; preds = %117, %122, %94
  %.pn.pn = phi { ptr, i32 } [ %95, %94 ], [ %118, %117 ], [ %123, %122 ]
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #9
  br label %334

334:                                              ; preds = %333, %36
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %333 ], [ %37, %36 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #9
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  resume { ptr, i32 } %.pn.pn.pn
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt4copyIPKdPdET0_T_S4_S3_(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

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

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

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

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

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 = { "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 = { 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 #4 = { 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 #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { 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 #8 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { 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, !7, i64 16}
!6 = !{!"_ZTSN3ipx3IPME", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 40, !11, i64 48, !10, i64 56, !11, i64 64, !10, i64 72, !11, i64 80}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!10, !10, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!6, !7, i64 0}
!17 = !{!6, !7, i64 8}
!18 = !{!6, !7, i64 24}
!19 = !{!20, !11, i64 12}
!20 = !{!"_ZTS8ipx_info", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !10, i64 408, !11, i64 416, !11, i64 420, !11, i64 424, !11, i64 428, !10, i64 432, !10, i64 440, !10, i64 448, !10, i64 456}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}


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