; LLVM IR from ERGO-Code/HiGHS :: src/ipm/ipx/ipm.ll (ZN3ipx3IPM12AddCorrectorERNS0_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" }

@.str.16 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE = external hidden unnamed_addr constant [36 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx3IPM12AddCorrectorERNS0_4StepE(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull align 8 dereferenceable(96) %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %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 double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca %"class.std::valarray", align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca %"class.std::valarray", align 8
  %33 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %34 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  %35 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %36 = load ptr, ptr %35, align 8, !tbaa !9
  %37 = call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %36)
  store ptr %37, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %38)
  store i32 %39, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %40)
  store i32 %41, ptr %7, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %42 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %43 = load ptr, ptr %42, align 8, !tbaa !9
  %44 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %43)
  store ptr %44, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %45 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %46 = load ptr, ptr %45, align 8, !tbaa !9
  %47 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %46)
  store ptr %47, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %48 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %49)
  store ptr %50, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %51 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %52 = load ptr, ptr %51, align 8, !tbaa !9
  %53 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %52)
  store ptr %53, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %54, i32 0, i32 1
  store ptr %55, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %56, i32 0, i32 2
  store ptr %57, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %58, i32 0, i32 4
  store ptr %59, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %60 = load ptr, ptr %4, align 8, !tbaa !5
  %61 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %60, i32 0, i32 5
  store ptr %61, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %62 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  %64 = call noundef double @_ZNK3ipx7Iterate2muEv(ptr noundef nonnull align 8 dereferenceable(296) %63)
  store double %64, ptr %16, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %65 = load ptr, ptr %8, align 8, !tbaa !5
  %66 = load ptr, ptr %12, align 8, !tbaa !5
  %67 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %65, ptr noundef nonnull align 8 dereferenceable(16) %66, ptr noundef null, double noundef 1.000000e+00)
  store double %67, ptr %17, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %68 = load ptr, ptr %9, align 8, !tbaa !5
  %69 = load ptr, ptr %13, align 8, !tbaa !5
  %70 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %68, ptr noundef nonnull align 8 dereferenceable(16) %69, ptr noundef null, double noundef 1.000000e+00)
  store double %70, ptr %18, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = load ptr, ptr %14, align 8, !tbaa !5
  %73 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(16) %72, ptr noundef null, double noundef 1.000000e+00)
  store double %73, ptr %19, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %74 = load ptr, ptr %11, align 8, !tbaa !5
  %75 = load ptr, ptr %15, align 8, !tbaa !5
  %76 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %74, ptr noundef nonnull align 8 dereferenceable(16) %75, ptr noundef null, double noundef 1.000000e+00)
  store double %76, ptr %20, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %77 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18)
  %78 = load double, ptr %77, align 8, !tbaa !14
  store double %78, ptr %21, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20)
  %80 = load double, ptr %79, align 8, !tbaa !14
  store double %80, ptr %22, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  store double 0.000000e+00, ptr %23, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  store i32 0, ptr %25, align 4, !tbaa !13
  br label %81

81:                                               ; preds = %197, %2
  %82 = load i32, ptr %25, align 4, !tbaa !13
  %83 = load i32, ptr %7, align 4, !tbaa !13
  %84 = load i32, ptr %6, align 4, !tbaa !13
  %85 = add nsw i32 %83, %84
  %86 = icmp slt i32 %82, %85
  br i1 %86, label %88, label %87

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

88:                                               ; preds = %81
  %89 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %90 = load ptr, ptr %89, align 8, !tbaa !9
  %91 = load i32, ptr %25, align 4, !tbaa !13
  %92 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %90, i32 noundef %91)
  br i1 %92, label %93, label %142

93:                                               ; preds = %88
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = load i32, ptr %25, align 4, !tbaa !13
  %96 = sext i32 %95 to i64
  %97 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %94, i64 noundef %96) #8
  %98 = load double, ptr %97, align 8, !tbaa !14
  %99 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %98)
  br i1 %99, label %100, label %101

100:                                              ; preds = %93
  br label %103

101:                                              ; preds = %93
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.17, i32 noundef 409, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

102:                                              ; No predecessors!
  br label %103

103:                                              ; preds = %102, %100
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = load i32, ptr %25, align 4, !tbaa !13
  %106 = sext i32 %105 to i64
  %107 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %104, i64 noundef %106) #8
  %108 = load double, ptr %107, align 8, !tbaa !14
  %109 = fcmp une double %108, 0.000000e+00
  br i1 %109, label %110, label %111

110:                                              ; preds = %103
  br label %113

111:                                              ; preds = %103
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.17, i32 noundef 410, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

112:                                              ; No predecessors!
  br label %113

113:                                              ; preds = %112, %110
  %114 = load ptr, ptr %8, align 8, !tbaa !5
  %115 = load i32, ptr %25, align 4, !tbaa !13
  %116 = sext i32 %115 to i64
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %114, i64 noundef %116) #8
  %118 = load double, ptr %117, align 8, !tbaa !14
  %119 = load double, ptr %21, align 8, !tbaa !14
  %120 = load ptr, ptr %12, align 8, !tbaa !5
  %121 = load i32, ptr %25, align 4, !tbaa !13
  %122 = sext i32 %121 to i64
  %123 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %120, i64 noundef %122) #8
  %124 = load double, ptr %123, align 8, !tbaa !14
  %125 = call double @llvm.fmuladd.f64(double %119, double %124, double %118)
  %126 = load ptr, ptr %10, align 8, !tbaa !5
  %127 = load i32, ptr %25, align 4, !tbaa !13
  %128 = sext i32 %127 to i64
  %129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %126, i64 noundef %128) #8
  %130 = load double, ptr %129, align 8, !tbaa !14
  %131 = load double, ptr %22, align 8, !tbaa !14
  %132 = load ptr, ptr %14, align 8, !tbaa !5
  %133 = load i32, ptr %25, align 4, !tbaa !13
  %134 = sext i32 %133 to i64
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %132, i64 noundef %134) #8
  %136 = load double, ptr %135, align 8, !tbaa !14
  %137 = call double @llvm.fmuladd.f64(double %131, double %136, double %130)
  %138 = load double, ptr %23, align 8, !tbaa !14
  %139 = call double @llvm.fmuladd.f64(double %125, double %137, double %138)
  store double %139, ptr %23, align 8, !tbaa !14
  %140 = load i32, ptr %24, align 4, !tbaa !13
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %24, align 4, !tbaa !13
  br label %142

142:                                              ; preds = %113, %88
  %143 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %144 = load ptr, ptr %143, align 8, !tbaa !9
  %145 = load i32, ptr %25, align 4, !tbaa !13
  %146 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %144, i32 noundef %145)
  br i1 %146, label %147, label %196

147:                                              ; preds = %142
  %148 = load ptr, ptr %9, align 8, !tbaa !5
  %149 = load i32, ptr %25, align 4, !tbaa !13
  %150 = sext i32 %149 to i64
  %151 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %148, i64 noundef %150) #8
  %152 = load double, ptr %151, align 8, !tbaa !14
  %153 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %152)
  br i1 %153, label %154, label %155

154:                                              ; preds = %147
  br label %157

155:                                              ; preds = %147
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.17, i32 noundef 415, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

156:                                              ; No predecessors!
  br label %157

157:                                              ; preds = %156, %154
  %158 = load ptr, ptr %9, align 8, !tbaa !5
  %159 = load i32, ptr %25, align 4, !tbaa !13
  %160 = sext i32 %159 to i64
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %158, i64 noundef %160) #8
  %162 = load double, ptr %161, align 8, !tbaa !14
  %163 = fcmp une double %162, 0.000000e+00
  br i1 %163, label %164, label %165

164:                                              ; preds = %157
  br label %167

165:                                              ; preds = %157
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.17, i32 noundef 416, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

166:                                              ; No predecessors!
  br label %167

167:                                              ; preds = %166, %164
  %168 = load ptr, ptr %9, align 8, !tbaa !5
  %169 = load i32, ptr %25, 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) #8
  %172 = load double, ptr %171, align 8, !tbaa !14
  %173 = load double, ptr %21, align 8, !tbaa !14
  %174 = load ptr, ptr %13, align 8, !tbaa !5
  %175 = load i32, ptr %25, align 4, !tbaa !13
  %176 = sext i32 %175 to i64
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %174, i64 noundef %176) #8
  %178 = load double, ptr %177, align 8, !tbaa !14
  %179 = call double @llvm.fmuladd.f64(double %173, double %178, double %172)
  %180 = load ptr, ptr %11, align 8, !tbaa !5
  %181 = load i32, ptr %25, align 4, !tbaa !13
  %182 = sext i32 %181 to i64
  %183 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %180, i64 noundef %182) #8
  %184 = load double, ptr %183, align 8, !tbaa !14
  %185 = load double, ptr %22, align 8, !tbaa !14
  %186 = load ptr, ptr %15, align 8, !tbaa !5
  %187 = load i32, ptr %25, align 4, !tbaa !13
  %188 = sext i32 %187 to i64
  %189 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %186, i64 noundef %188) #8
  %190 = load double, ptr %189, align 8, !tbaa !14
  %191 = call double @llvm.fmuladd.f64(double %185, double %190, double %184)
  %192 = load double, ptr %23, align 8, !tbaa !14
  %193 = call double @llvm.fmuladd.f64(double %179, double %191, double %192)
  store double %193, ptr %23, align 8, !tbaa !14
  %194 = load i32, ptr %24, align 4, !tbaa !13
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr %24, align 4, !tbaa !13
  br label %196

196:                                              ; preds = %167, %142
  br label %197

197:                                              ; preds = %196
  %198 = load i32, ptr %25, align 4, !tbaa !13
  %199 = add nsw i32 %198, 1
  store i32 %199, ptr %25, align 4, !tbaa !13
  br label %81, !llvm.loop !15

200:                                              ; preds = %87
  %201 = load double, ptr %23, align 8, !tbaa !14
  %202 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %201)
  br i1 %202, label %203, label %204

203:                                              ; preds = %200
  br label %206

204:                                              ; preds = %200
  call void @__assert_fail(ptr noundef @.str.23, ptr noundef @.str.17, i32 noundef 421, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

205:                                              ; No predecessors!
  br label %206

206:                                              ; preds = %205, %203
  %207 = load i32, ptr %24, align 4, !tbaa !13
  %208 = sitofp i32 %207 to double
  %209 = load double, ptr %23, align 8, !tbaa !14
  %210 = fdiv double %209, %208
  store double %210, ptr %23, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %211 = load double, ptr %23, align 8, !tbaa !14
  %212 = load double, ptr %16, align 8, !tbaa !14
  %213 = fdiv double %211, %212
  store double %213, ptr %26, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %214 = load double, ptr %26, align 8, !tbaa !14
  %215 = load double, ptr %26, align 8, !tbaa !14
  %216 = fmul double %214, %215
  %217 = load double, ptr %26, align 8, !tbaa !14
  %218 = fmul double %216, %217
  store double %218, ptr %27, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #8
  %219 = load i32, ptr %7, align 4, !tbaa !13
  %220 = load i32, ptr %6, align 4, !tbaa !13
  %221 = add nsw i32 %219, %220
  %222 = sext i32 %221 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %222)
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  store i32 0, ptr %29, align 4, !tbaa !13
  br label %223

223:                                              ; preds = %276, %206
  %224 = load i32, ptr %29, align 4, !tbaa !13
  %225 = load i32, ptr %7, align 4, !tbaa !13
  %226 = load i32, ptr %6, align 4, !tbaa !13
  %227 = add nsw i32 %225, %226
  %228 = icmp slt i32 %224, %227
  br i1 %228, label %230, label %229

229:                                              ; preds = %223
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  br label %279

230:                                              ; preds = %223
  %231 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %232 = load ptr, ptr %231, align 8, !tbaa !9
  %233 = load i32, ptr %29, align 4, !tbaa !13
  %234 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %232, i32 noundef %233)
          to label %235 unwind label %267

235:                                              ; preds = %230
  br i1 %234, label %236, label %271

236:                                              ; preds = %235
  %237 = load ptr, ptr %8, align 8, !tbaa !5
  %238 = load i32, ptr %29, align 4, !tbaa !13
  %239 = sext i32 %238 to i64
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %237, i64 noundef %239) #8
  %241 = load double, ptr %240, align 8, !tbaa !14
  %242 = fneg double %241
  %243 = load ptr, ptr %10, align 8, !tbaa !5
  %244 = load i32, ptr %29, align 4, !tbaa !13
  %245 = sext i32 %244 to i64
  %246 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %243, i64 noundef %245) #8
  %247 = load double, ptr %246, align 8, !tbaa !14
  %248 = load double, ptr %27, align 8, !tbaa !14
  %249 = load double, ptr %16, align 8, !tbaa !14
  %250 = fmul double %248, %249
  %251 = call double @llvm.fmuladd.f64(double %242, double %247, double %250)
  %252 = load ptr, ptr %12, align 8, !tbaa !5
  %253 = load i32, ptr %29, align 4, !tbaa !13
  %254 = sext i32 %253 to i64
  %255 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %252, i64 noundef %254) #8
  %256 = load double, ptr %255, align 8, !tbaa !14
  %257 = load ptr, ptr %14, align 8, !tbaa !5
  %258 = load i32, ptr %29, align 4, !tbaa !13
  %259 = sext i32 %258 to i64
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %257, i64 noundef %259) #8
  %261 = load double, ptr %260, align 8, !tbaa !14
  %262 = fneg double %256
  %263 = call double @llvm.fmuladd.f64(double %262, double %261, double %251)
  %264 = load i32, ptr %29, align 4, !tbaa !13
  %265 = sext i32 %264 to i64
  %266 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %265) #8
  store double %263, ptr %266, align 8, !tbaa !14
  br label %275

267:                                              ; preds = %230
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %30, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  br label %392

271:                                              ; preds = %235
  %272 = load i32, ptr %29, align 4, !tbaa !13
  %273 = sext i32 %272 to i64
  %274 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %273) #8
  store double 0.000000e+00, ptr %274, align 8, !tbaa !14
  br label %275

275:                                              ; preds = %271, %236
  br label %276

276:                                              ; preds = %275
  %277 = load i32, ptr %29, align 4, !tbaa !13
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %29, align 4, !tbaa !13
  br label %223, !llvm.loop !17

279:                                              ; preds = %229
  %280 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %28)
          to label %281 unwind label %284

281:                                              ; preds = %279
  br i1 %280, label %282, label %283

282:                                              ; preds = %281
  br label %289

283:                                              ; preds = %281
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.17, i32 noundef 433, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

284:                                              ; preds = %279
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %30, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %31, align 4
  br label %392

288:                                              ; No predecessors!
  br label %289

289:                                              ; preds = %288, %282
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #8
  %290 = load i32, ptr %7, align 4, !tbaa !13
  %291 = load i32, ptr %6, align 4, !tbaa !13
  %292 = add nsw i32 %290, %291
  %293 = sext i32 %292 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef %293)
          to label %294 unwind label %302

294:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !13
  br label %295

295:                                              ; preds = %352, %294
  %296 = load i32, ptr %33, align 4, !tbaa !13
  %297 = load i32, ptr %7, align 4, !tbaa !13
  %298 = load i32, ptr %6, align 4, !tbaa !13
  %299 = add nsw i32 %297, %298
  %300 = icmp slt i32 %296, %299
  br i1 %300, label %306, label %301

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

302:                                              ; preds = %289
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %30, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %31, align 4
  br label %391

306:                                              ; preds = %295
  %307 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %308 = load ptr, ptr %307, align 8, !tbaa !9
  %309 = load i32, ptr %33, align 4, !tbaa !13
  %310 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %308, i32 noundef %309)
          to label %311 unwind label %343

311:                                              ; preds = %306
  br i1 %310, label %312, label %347

312:                                              ; preds = %311
  %313 = load ptr, ptr %9, align 8, !tbaa !5
  %314 = load i32, ptr %33, align 4, !tbaa !13
  %315 = sext i32 %314 to i64
  %316 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %313, i64 noundef %315) #8
  %317 = load double, ptr %316, align 8, !tbaa !14
  %318 = fneg double %317
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = load i32, ptr %33, align 4, !tbaa !13
  %321 = sext i32 %320 to i64
  %322 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %319, i64 noundef %321) #8
  %323 = load double, ptr %322, align 8, !tbaa !14
  %324 = load double, ptr %27, align 8, !tbaa !14
  %325 = load double, ptr %16, align 8, !tbaa !14
  %326 = fmul double %324, %325
  %327 = call double @llvm.fmuladd.f64(double %318, double %323, double %326)
  %328 = load ptr, ptr %13, align 8, !tbaa !5
  %329 = load i32, ptr %33, align 4, !tbaa !13
  %330 = sext i32 %329 to i64
  %331 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %328, i64 noundef %330) #8
  %332 = load double, ptr %331, align 8, !tbaa !14
  %333 = load ptr, ptr %15, align 8, !tbaa !5
  %334 = load i32, ptr %33, align 4, !tbaa !13
  %335 = sext i32 %334 to i64
  %336 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %333, i64 noundef %335) #8
  %337 = load double, ptr %336, align 8, !tbaa !14
  %338 = fneg double %332
  %339 = call double @llvm.fmuladd.f64(double %338, double %337, double %327)
  %340 = load i32, ptr %33, align 4, !tbaa !13
  %341 = sext i32 %340 to i64
  %342 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef %341) #8
  store double %339, ptr %342, align 8, !tbaa !14
  br label %351

343:                                              ; preds = %306
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %30, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %31, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %390

347:                                              ; preds = %311
  %348 = load i32, ptr %33, align 4, !tbaa !13
  %349 = sext i32 %348 to i64
  %350 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef %349) #8
  store double 0.000000e+00, ptr %350, align 8, !tbaa !14
  br label %351

351:                                              ; preds = %347, %312
  br label %352

352:                                              ; preds = %351
  %353 = load i32, ptr %33, align 4, !tbaa !13
  %354 = add nsw i32 %353, 1
  store i32 %354, ptr %33, align 4, !tbaa !13
  br label %295, !llvm.loop !18

355:                                              ; preds = %301
  %356 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %32)
          to label %357 unwind label %360

357:                                              ; preds = %355
  br i1 %356, label %358, label %359

358:                                              ; preds = %357
  br label %365

359:                                              ; preds = %357
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.17, i32 noundef 442, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

360:                                              ; preds = %384, %379, %374, %369, %365, %355
  %361 = landingpad { ptr, i32 }
          cleanup
  %362 = extractvalue { ptr, i32 } %361, 0
  store ptr %362, ptr %30, align 8
  %363 = extractvalue { ptr, i32 } %361, 1
  store i32 %363, ptr %31, align 4
  br label %390

364:                                              ; No predecessors!
  br label %365

365:                                              ; preds = %364, %358
  %366 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %367 = load ptr, ptr %366, align 8, !tbaa !9
  %368 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rbEv(ptr noundef nonnull align 8 dereferenceable(296) %367)
          to label %369 unwind label %360

369:                                              ; preds = %365
  %370 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %368, i64 noundef 0) #8
  %371 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %372 = load ptr, ptr %371, align 8, !tbaa !9
  %373 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rcEv(ptr noundef nonnull align 8 dereferenceable(296) %372)
          to label %374 unwind label %360

374:                                              ; preds = %369
  %375 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %373, i64 noundef 0) #8
  %376 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %377 = load ptr, ptr %376, align 8, !tbaa !9
  %378 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rlEv(ptr noundef nonnull align 8 dereferenceable(296) %377)
          to label %379 unwind label %360

379:                                              ; preds = %374
  %380 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %378, i64 noundef 0) #8
  %381 = getelementptr inbounds %"class.ipx::IPM", ptr %34, i32 0, i32 2
  %382 = load ptr, ptr %381, align 8, !tbaa !9
  %383 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2ruEv(ptr noundef nonnull align 8 dereferenceable(296) %382)
          to label %384 unwind label %360

384:                                              ; preds = %379
  %385 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %383, i64 noundef 0) #8
  %386 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef 0) #8
  %387 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef 0) #8
  %388 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE(ptr noundef nonnull align 8 dereferenceable(84) %34, ptr noundef %370, ptr noundef %375, ptr noundef %380, ptr noundef %385, ptr noundef %386, ptr noundef %387, ptr noundef nonnull align 8 dereferenceable(96) %388)
          to label %389 unwind label %360

389:                                              ; preds = %384
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  ret void

390:                                              ; preds = %360, %343
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %32) #8
  br label %391

391:                                              ; preds = %390, %302
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #8
  br label %392

392:                                              ; preds = %391, %284, %267
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  br label %393

393:                                              ; preds = %392
  %394 = load ptr, ptr %30, align 8
  %395 = load i32, ptr %31, align 4
  %396 = insertvalue { ptr, i32 } poison, ptr %394, 0
  %397 = insertvalue { ptr, i32 } %396, i32 %395, 1
  resume { ptr, i32 } %397
}

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 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) #5 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE(ptr noundef nonnull align 8 dereferenceable(84), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(96)) #2 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rbEv(ptr noundef nonnull align 8 dereferenceable(296)) #3

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rcEv(ptr noundef nonnull align 8 dereferenceable(296)) #3

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rlEv(ptr noundef nonnull align 8 dereferenceable(296)) #3

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2ruEv(ptr noundef nonnull align 8 dereferenceable(296)) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, double noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !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 = distinct !{!18, !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.16 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE = external hidden unnamed_addr constant [36 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [21 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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx3IPM12AddCorrectorERNS0_4StepE(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull align 8 dereferenceable(96) %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca double, align 8
  %4 = alloca double, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca %"class.std::valarray", align 8
  %8 = alloca %"class.std::valarray", align 8
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !5
  %11 = tail call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %10)
  %12 = tail call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %11)
  %13 = tail call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %11)
  %14 = load ptr, ptr %9, align 8, !tbaa !5
  %15 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %14)
  %16 = load ptr, ptr %9, align 8, !tbaa !5
  %17 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %16)
  %18 = load ptr, ptr %9, align 8, !tbaa !5
  %19 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %18)
  %20 = load ptr, ptr %9, align 8, !tbaa !5
  %21 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %20)
  %22 = getelementptr inbounds i8, ptr %1, i64 16
  %23 = getelementptr inbounds i8, ptr %1, i64 32
  %24 = getelementptr inbounds i8, ptr %1, i64 64
  %25 = getelementptr inbounds i8, ptr %1, i64 80
  %26 = load ptr, ptr %9, align 8, !tbaa !5
  %27 = tail call noundef double @_ZNK3ipx7Iterate2muEv(ptr noundef nonnull align 8 dereferenceable(296) %26)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  %28 = tail call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef null, double noundef 1.000000e+00)
  store double %28, ptr %3, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  %29 = tail call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef null, double noundef 1.000000e+00)
  store double %29, ptr %4, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %30 = tail call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %24, ptr noundef null, double noundef 1.000000e+00)
  store double %30, ptr %5, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  %31 = tail call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %21, ptr noundef nonnull align 8 dereferenceable(16) %25, ptr noundef null, double noundef 1.000000e+00)
  store double %31, ptr %6, align 8, !tbaa !12
  %32 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4)
  %33 = load double, ptr %32, align 8, !tbaa !12
  %34 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6)
  %35 = load double, ptr %34, align 8, !tbaa !12
  %36 = add nsw i32 %13, %12
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %.lr.ph.preheader, label %._crit_edge

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

._crit_edge.loopexit:                             ; preds = %92
  %38 = sitofp i32 %.2109 to double
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %2
  %.0107.lcssa = phi double [ 0.000000e+00, %2 ], [ %38, %._crit_edge.loopexit ]
  %.0105.lcssa = phi double [ 0.000000e+00, %2 ], [ %.2, %._crit_edge.loopexit ]
  %39 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %.0105.lcssa)
  br i1 %39, label %94, label %93

.lr.ph:                                           ; preds = %.lr.ph.preheader, %92
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %92 ]
  %.0105128 = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %.2, %92 ]
  %.0107127 = phi i32 [ 0, %.lr.ph.preheader ], [ %.2109, %92 ]
  %40 = load ptr, ptr %9, align 8, !tbaa !5
  %41 = trunc nuw nsw i64 %indvars.iv to i32
  %42 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %40, i32 noundef %41)
  br i1 %42, label %43, label %66

43:                                               ; preds = %.lr.ph
  %44 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %indvars.iv) #8
  %45 = load double, ptr %44, align 8, !tbaa !12
  %46 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %45)
  br i1 %46, label %48, label %47

47:                                               ; preds = %43
  call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.17, i32 noundef 409, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

48:                                               ; preds = %43
  %49 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %indvars.iv) #8
  %50 = load double, ptr %49, align 8, !tbaa !12
  %51 = fcmp une double %50, 0.000000e+00
  br i1 %51, label %53, label %52

52:                                               ; preds = %48
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.17, i32 noundef 410, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

53:                                               ; preds = %48
  %54 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %indvars.iv) #8
  %55 = load double, ptr %54, align 8, !tbaa !12
  %56 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %indvars.iv) #8
  %57 = load double, ptr %56, align 8, !tbaa !12
  %58 = call double @llvm.fmuladd.f64(double %33, double %57, double %55)
  %59 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv) #8
  %60 = load double, ptr %59, align 8, !tbaa !12
  %61 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %24, i64 noundef %indvars.iv) #8
  %62 = load double, ptr %61, align 8, !tbaa !12
  %63 = call double @llvm.fmuladd.f64(double %35, double %62, double %60)
  %64 = call double @llvm.fmuladd.f64(double %58, double %63, double %.0105128)
  %65 = add nsw i32 %.0107127, 1
  br label %66

66:                                               ; preds = %53, %.lr.ph
  %.1108 = phi i32 [ %65, %53 ], [ %.0107127, %.lr.ph ]
  %.1106 = phi double [ %64, %53 ], [ %.0105128, %.lr.ph ]
  %67 = load ptr, ptr %9, align 8, !tbaa !5
  %68 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %67, i32 noundef %41)
  br i1 %68, label %69, label %92

69:                                               ; preds = %66
  %70 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %indvars.iv) #8
  %71 = load double, ptr %70, align 8, !tbaa !12
  %72 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %71)
  br i1 %72, label %74, label %73

73:                                               ; preds = %69
  call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.17, i32 noundef 415, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

74:                                               ; preds = %69
  %75 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %indvars.iv) #8
  %76 = load double, ptr %75, align 8, !tbaa !12
  %77 = fcmp une double %76, 0.000000e+00
  br i1 %77, label %79, label %78

78:                                               ; preds = %74
  call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.17, i32 noundef 416, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

79:                                               ; preds = %74
  %80 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %indvars.iv) #8
  %81 = load double, ptr %80, align 8, !tbaa !12
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %indvars.iv) #8
  %83 = load double, ptr %82, align 8, !tbaa !12
  %84 = call double @llvm.fmuladd.f64(double %33, double %83, double %81)
  %85 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %indvars.iv) #8
  %86 = load double, ptr %85, align 8, !tbaa !12
  %87 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %25, i64 noundef %indvars.iv) #8
  %88 = load double, ptr %87, align 8, !tbaa !12
  %89 = call double @llvm.fmuladd.f64(double %35, double %88, double %86)
  %90 = call double @llvm.fmuladd.f64(double %84, double %89, double %.1106)
  %91 = add nsw i32 %.1108, 1
  br label %92

92:                                               ; preds = %66, %79
  %.2109 = phi i32 [ %91, %79 ], [ %.1108, %66 ]
  %.2 = phi double [ %90, %79 ], [ %.1106, %66 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph, !llvm.loop !13

93:                                               ; preds = %._crit_edge
  call void @__assert_fail(ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.17, i32 noundef 421, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

94:                                               ; preds = %._crit_edge
  %95 = fdiv double %.0105.lcssa, %.0107.lcssa
  %96 = fdiv double %95, %27
  %97 = fmul double %96, %96
  %98 = fmul double %96, %97
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #8
  %99 = sext i32 %36 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %99)
  br i1 %37, label %.lr.ph133, label %._crit_edge134

.lr.ph133:                                        ; preds = %94
  %100 = fmul double %27, %98
  %wide.trip.count142 = zext nneg i32 %36 to i64
  br label %102

._crit_edge134:                                   ; preds = %119, %94
  %101 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %7)
          to label %121 unwind label %123

102:                                              ; preds = %.lr.ph133, %119
  %indvars.iv139 = phi i64 [ 0, %.lr.ph133 ], [ %indvars.iv.next140, %119 ]
  %103 = load ptr, ptr %9, align 8, !tbaa !5
  %104 = trunc nuw nsw i64 %indvars.iv139 to i32
  %105 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %103, i32 noundef %104)
  br i1 %105, label %106, label %119

106:                                              ; preds = %102
  %107 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %indvars.iv139) #8
  %108 = load double, ptr %107, align 8, !tbaa !12
  %109 = fneg double %108
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv139) #8
  %111 = load double, ptr %110, align 8, !tbaa !12
  %112 = call double @llvm.fmuladd.f64(double %109, double %111, double %100)
  %113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %indvars.iv139) #8
  %114 = load double, ptr %113, align 8, !tbaa !12
  %115 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %24, i64 noundef %indvars.iv139) #8
  %116 = load double, ptr %115, align 8, !tbaa !12
  %117 = fneg double %114
  %118 = call double @llvm.fmuladd.f64(double %117, double %116, double %112)
  br label %119

119:                                              ; preds = %102, %106
  %.sink = phi double [ %118, %106 ], [ 0.000000e+00, %102 ]
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv139) #8
  store double %.sink, ptr %120, align 8, !tbaa !12
  %indvars.iv.next140 = add nuw nsw i64 %indvars.iv139, 1
  %exitcond143.not = icmp eq i64 %indvars.iv.next140, %wide.trip.count142
  br i1 %exitcond143.not, label %._crit_edge134, label %102, !llvm.loop !15

121:                                              ; preds = %._crit_edge134
  br i1 %101, label %125, label %122

122:                                              ; preds = %121
  call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.17, i32 noundef 433, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

123:                                              ; preds = %._crit_edge134
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %174

125:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #8
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %99)
          to label %.preheader unwind label %128

.preheader:                                       ; preds = %125
  br i1 %37, label %.lr.ph136, label %._crit_edge137

.lr.ph136:                                        ; preds = %.preheader
  %126 = fmul double %27, %98
  %wide.trip.count147 = zext nneg i32 %36 to i64
  br label %130

._crit_edge137:                                   ; preds = %147, %.preheader
  %127 = invoke noundef zeroext i1 @_ZN3ipx9AllFiniteERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %8)
          to label %149 unwind label %151

128:                                              ; preds = %125
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %173

130:                                              ; preds = %.lr.ph136, %147
  %indvars.iv144 = phi i64 [ 0, %.lr.ph136 ], [ %indvars.iv.next145, %147 ]
  %131 = load ptr, ptr %9, align 8, !tbaa !5
  %132 = trunc nuw nsw i64 %indvars.iv144 to i32
  %133 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %131, i32 noundef %132)
  br i1 %133, label %134, label %147

134:                                              ; preds = %130
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %indvars.iv144) #8
  %136 = load double, ptr %135, align 8, !tbaa !12
  %137 = fneg double %136
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %21, i64 noundef %indvars.iv144) #8
  %139 = load double, ptr %138, align 8, !tbaa !12
  %140 = call double @llvm.fmuladd.f64(double %137, double %139, double %126)
  %141 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %23, i64 noundef %indvars.iv144) #8
  %142 = load double, ptr %141, align 8, !tbaa !12
  %143 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %25, i64 noundef %indvars.iv144) #8
  %144 = load double, ptr %143, align 8, !tbaa !12
  %145 = fneg double %142
  %146 = call double @llvm.fmuladd.f64(double %145, double %144, double %140)
  br label %147

147:                                              ; preds = %130, %134
  %.sink150 = phi double [ %146, %134 ], [ 0.000000e+00, %130 ]
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv144) #8
  store double %.sink150, ptr %148, align 8, !tbaa !12
  %indvars.iv.next145 = add nuw nsw i64 %indvars.iv144, 1
  %exitcond148.not = icmp eq i64 %indvars.iv.next145, %wide.trip.count147
  br i1 %exitcond148.not, label %._crit_edge137, label %130, !llvm.loop !16

149:                                              ; preds = %._crit_edge137
  br i1 %127, label %153, label %150

150:                                              ; preds = %149
  call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.17, i32 noundef 442, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM12AddCorrectorERNS0_4StepE) #9
  unreachable

151:                                              ; preds = %168, %164, %160, %156, %153, %._crit_edge137
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  br label %173

153:                                              ; preds = %149
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rbEv(ptr noundef nonnull align 8 dereferenceable(296) %154)
          to label %156 unwind label %151

156:                                              ; preds = %153
  %157 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %155, i64 noundef 0) #8
  %158 = load ptr, ptr %9, align 8, !tbaa !5
  %159 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rcEv(ptr noundef nonnull align 8 dereferenceable(296) %158)
          to label %160 unwind label %151

160:                                              ; preds = %156
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %159, i64 noundef 0) #8
  %162 = load ptr, ptr %9, align 8, !tbaa !5
  %163 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rlEv(ptr noundef nonnull align 8 dereferenceable(296) %162)
          to label %164 unwind label %151

164:                                              ; preds = %160
  %165 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %163, i64 noundef 0) #8
  %166 = load ptr, ptr %9, align 8, !tbaa !5
  %167 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2ruEv(ptr noundef nonnull align 8 dereferenceable(296) %166)
          to label %168 unwind label %151

168:                                              ; preds = %164
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %167, i64 noundef 0) #8
  %170 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef 0) #8
  %171 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef 0) #8
  invoke void @_ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull %157, ptr noundef nonnull %161, ptr noundef nonnull %165, ptr noundef nonnull %169, ptr noundef nonnull %170, ptr noundef nonnull %171, ptr noundef nonnull align 8 dereferenceable(96) %1)
          to label %172 unwind label %151

172:                                              ; preds = %168
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  ret void

173:                                              ; preds = %151, %128
  %.pn = phi { ptr, i32 } [ %152, %151 ], [ %129, %128 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  br label %174

174:                                              ; preds = %173, %123
  %.pn.pn = phi { ptr, i32 } [ %.pn, %173 ], [ %124, %123 ]
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  resume { ptr, i32 } %.pn.pn
}

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 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 #5 align 2

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

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

; 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 #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3ipx3IPM17SolveNewtonSystemEPKdS2_S2_S2_S2_S2_RNS0_4StepE(ptr noundef nonnull align 8 dereferenceable(84), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #2 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rbEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rcEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2rlEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2ruEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef, double noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = distinct !{!16, !14}


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