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

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

%"class.ipx::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" }
%"class.std::valarray" = type { i64, ptr }

@.str.17 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 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
@__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb = external hidden unnamed_addr constant [45 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [14 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

; 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #2 align 2

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

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

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

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

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

; 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) #5

; 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)) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx3IPM9StepSizesERKNS0_4StepEb(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, i1 noundef zeroext %2) #5 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %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 double, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %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 double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %47 = zext i1 %2 to i8
  store i8 %47, ptr %6, align 1, !tbaa !9
  %48 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %49 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 2
  %50 = load ptr, ptr %49, align 8, !tbaa !11
  %51 = call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %50)
  store ptr %51, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %52)
  store i32 %53, ptr %8, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %54)
  store i32 %55, ptr %9, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %56 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 2
  %57 = load ptr, ptr %56, align 8, !tbaa !11
  %58 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %57)
  store ptr %58, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %59 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 2
  %60 = load ptr, ptr %59, align 8, !tbaa !11
  %61 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %60)
  store ptr %61, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %62 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 2
  %63 = load ptr, ptr %62, align 8, !tbaa !11
  %64 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %63)
  store ptr %64, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %65 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 2
  %66 = load ptr, ptr %65, align 8, !tbaa !11
  %67 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %66)
  store ptr %67, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %68, i32 0, i32 1
  store ptr %69, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %70, i32 0, i32 2
  store ptr %71, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %72, i32 0, i32 4
  store ptr %73, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %74, i32 0, i32 5
  store ptr %75, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  store double 9.000000e-01, ptr %18, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  store double 0x4024000000000001, ptr %19, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %76 = load ptr, ptr %10, align 8, !tbaa !5
  %77 = load ptr, ptr %14, align 8, !tbaa !5
  %78 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %76, ptr noundef nonnull align 8 dereferenceable(16) %77, ptr noundef %20, double noundef 1.000000e+00)
  store double %78, ptr %24, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %79 = load ptr, ptr %11, align 8, !tbaa !5
  %80 = load ptr, ptr %15, align 8, !tbaa !5
  %81 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %79, ptr noundef nonnull align 8 dereferenceable(16) %80, ptr noundef %21, double noundef 1.000000e+00)
  store double %81, ptr %25, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = load ptr, ptr %16, align 8, !tbaa !5
  %84 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %82, ptr noundef nonnull align 8 dereferenceable(16) %83, ptr noundef %22, double noundef 1.000000e+00)
  store double %84, ptr %26, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %85 = load ptr, ptr %13, align 8, !tbaa !5
  %86 = load ptr, ptr %17, align 8, !tbaa !5
  %87 = call noundef double @_ZN3ipxL14StepToBoundaryERKSt8valarrayIdES3_Pid(ptr noundef nonnull align 8 dereferenceable(16) %85, ptr noundef nonnull align 8 dereferenceable(16) %86, ptr noundef %23, double noundef 1.000000e+00)
  store double %87, ptr %27, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %88 = load double, ptr %24, align 8, !tbaa !16
  %89 = load double, ptr %25, align 8, !tbaa !16
  %90 = call double @llvm.minnum.f64(double %88, double %89)
  store double %90, ptr %28, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %91 = load double, ptr %26, align 8, !tbaa !16
  %92 = load double, ptr %27, align 8, !tbaa !16
  %93 = call double @llvm.minnum.f64(double %91, double %92)
  store double %93, ptr %29, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  store double 0.000000e+00, ptr %30, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 0, ptr %31, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  store i32 0, ptr %32, align 4, !tbaa !15
  br label %94

94:                                               ; preds = %210, %3
  %95 = load i32, ptr %32, align 4, !tbaa !15
  %96 = load i32, ptr %9, align 4, !tbaa !15
  %97 = load i32, ptr %8, align 4, !tbaa !15
  %98 = add nsw i32 %96, %97
  %99 = icmp slt i32 %95, %98
  br i1 %99, label %101, label %100

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

101:                                              ; preds = %94
  %102 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 2
  %103 = load ptr, ptr %102, align 8, !tbaa !11
  %104 = load i32, ptr %32, align 4, !tbaa !15
  %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 %155

106:                                              ; preds = %101
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = load i32, ptr %32, align 4, !tbaa !15
  %109 = sext i32 %108 to i64
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %107, i64 noundef %109) #6
  %111 = load double, ptr %110, align 8, !tbaa !16
  %112 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %111)
  br i1 %112, label %113, label %114

113:                                              ; preds = %106
  br label %116

114:                                              ; preds = %106
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.17, i32 noundef 627, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

115:                                              ; No predecessors!
  br label %116

116:                                              ; preds = %115, %113
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = load i32, ptr %32, align 4, !tbaa !15
  %119 = sext i32 %118 to i64
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %117, i64 noundef %119) #6
  %121 = load double, ptr %120, align 8, !tbaa !16
  %122 = fcmp une double %121, 0.000000e+00
  br i1 %122, label %123, label %124

123:                                              ; preds = %116
  br label %126

124:                                              ; preds = %116
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.17, i32 noundef 628, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

125:                                              ; No predecessors!
  br label %126

126:                                              ; preds = %125, %123
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = load i32, ptr %32, align 4, !tbaa !15
  %129 = sext i32 %128 to i64
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %127, i64 noundef %129) #6
  %131 = load double, ptr %130, align 8, !tbaa !16
  %132 = load double, ptr %28, align 8, !tbaa !16
  %133 = load ptr, ptr %14, align 8, !tbaa !5
  %134 = load i32, ptr %32, align 4, !tbaa !15
  %135 = sext i32 %134 to i64
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %133, i64 noundef %135) #6
  %137 = load double, ptr %136, align 8, !tbaa !16
  %138 = call double @llvm.fmuladd.f64(double %132, double %137, double %131)
  %139 = load ptr, ptr %12, align 8, !tbaa !5
  %140 = load i32, ptr %32, align 4, !tbaa !15
  %141 = sext i32 %140 to i64
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %139, i64 noundef %141) #6
  %143 = load double, ptr %142, align 8, !tbaa !16
  %144 = load double, ptr %29, align 8, !tbaa !16
  %145 = load ptr, ptr %16, align 8, !tbaa !5
  %146 = load i32, ptr %32, align 4, !tbaa !15
  %147 = sext i32 %146 to i64
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %145, i64 noundef %147) #6
  %149 = load double, ptr %148, align 8, !tbaa !16
  %150 = call double @llvm.fmuladd.f64(double %144, double %149, double %143)
  %151 = load double, ptr %30, align 8, !tbaa !16
  %152 = call double @llvm.fmuladd.f64(double %138, double %150, double %151)
  store double %152, ptr %30, align 8, !tbaa !16
  %153 = load i32, ptr %31, align 4, !tbaa !15
  %154 = add nsw i32 %153, 1
  store i32 %154, ptr %31, align 4, !tbaa !15
  br label %155

155:                                              ; preds = %126, %101
  %156 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 2
  %157 = load ptr, ptr %156, align 8, !tbaa !11
  %158 = load i32, ptr %32, align 4, !tbaa !15
  %159 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %157, i32 noundef %158)
  br i1 %159, label %160, label %209

160:                                              ; preds = %155
  %161 = load ptr, ptr %11, align 8, !tbaa !5
  %162 = load i32, ptr %32, align 4, !tbaa !15
  %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) #6
  %165 = load double, ptr %164, align 8, !tbaa !16
  %166 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %165)
  br i1 %166, label %167, label %168

167:                                              ; preds = %160
  br label %170

168:                                              ; preds = %160
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.17, i32 noundef 633, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

169:                                              ; No predecessors!
  br label %170

170:                                              ; preds = %169, %167
  %171 = load ptr, ptr %11, align 8, !tbaa !5
  %172 = load i32, ptr %32, align 4, !tbaa !15
  %173 = sext i32 %172 to i64
  %174 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %171, i64 noundef %173) #6
  %175 = load double, ptr %174, align 8, !tbaa !16
  %176 = fcmp une double %175, 0.000000e+00
  br i1 %176, label %177, label %178

177:                                              ; preds = %170
  br label %180

178:                                              ; preds = %170
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.17, i32 noundef 634, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

179:                                              ; No predecessors!
  br label %180

180:                                              ; preds = %179, %177
  %181 = load ptr, ptr %11, align 8, !tbaa !5
  %182 = load i32, ptr %32, align 4, !tbaa !15
  %183 = sext i32 %182 to i64
  %184 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %181, i64 noundef %183) #6
  %185 = load double, ptr %184, align 8, !tbaa !16
  %186 = load double, ptr %28, align 8, !tbaa !16
  %187 = load ptr, ptr %15, align 8, !tbaa !5
  %188 = load i32, ptr %32, align 4, !tbaa !15
  %189 = sext i32 %188 to i64
  %190 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %187, i64 noundef %189) #6
  %191 = load double, ptr %190, align 8, !tbaa !16
  %192 = call double @llvm.fmuladd.f64(double %186, double %191, double %185)
  %193 = load ptr, ptr %13, align 8, !tbaa !5
  %194 = load i32, ptr %32, align 4, !tbaa !15
  %195 = sext i32 %194 to i64
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %193, i64 noundef %195) #6
  %197 = load double, ptr %196, align 8, !tbaa !16
  %198 = load double, ptr %29, align 8, !tbaa !16
  %199 = load ptr, ptr %17, align 8, !tbaa !5
  %200 = load i32, ptr %32, align 4, !tbaa !15
  %201 = sext i32 %200 to i64
  %202 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %199, i64 noundef %201) #6
  %203 = load double, ptr %202, align 8, !tbaa !16
  %204 = call double @llvm.fmuladd.f64(double %198, double %203, double %197)
  %205 = load double, ptr %30, align 8, !tbaa !16
  %206 = call double @llvm.fmuladd.f64(double %192, double %204, double %205)
  store double %206, ptr %30, align 8, !tbaa !16
  %207 = load i32, ptr %31, align 4, !tbaa !15
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %31, align 4, !tbaa !15
  br label %209

209:                                              ; preds = %180, %155
  br label %210

210:                                              ; preds = %209
  %211 = load i32, ptr %32, align 4, !tbaa !15
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %32, align 4, !tbaa !15
  br label %94, !llvm.loop !17

213:                                              ; preds = %100
  %214 = load double, ptr %30, align 8, !tbaa !16
  %215 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %214)
  br i1 %215, label %216, label %217

216:                                              ; preds = %213
  br label %219

217:                                              ; preds = %213
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.17, i32 noundef 639, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

218:                                              ; No predecessors!
  br label %219

219:                                              ; preds = %218, %216
  %220 = load i32, ptr %31, align 4, !tbaa !15
  %221 = sitofp i32 %220 to double
  %222 = load double, ptr %30, align 8, !tbaa !16
  %223 = fdiv double %222, %221
  store double %223, ptr %30, align 8, !tbaa !16
  %224 = load double, ptr %30, align 8, !tbaa !16
  %225 = fdiv double %224, 0x4024000000000001
  store double %225, ptr %30, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  store double 1.000000e+00, ptr %33, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  store double 1.000000e+00, ptr %34, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  store i32 -1, ptr %35, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 -1, ptr %36, align 4, !tbaa !15
  %226 = load double, ptr %28, align 8, !tbaa !16
  %227 = fcmp olt double %226, 1.000000e+00
  br i1 %227, label %228, label %306

228:                                              ; preds = %219
  %229 = load double, ptr %24, align 8, !tbaa !16
  %230 = load double, ptr %25, align 8, !tbaa !16
  %231 = fcmp ole double %229, %230
  br i1 %231, label %232, label %262

232:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %233 = load i32, ptr %20, align 4, !tbaa !15
  store i32 %233, ptr %35, align 4, !tbaa !15
  %234 = load double, ptr %30, align 8, !tbaa !16
  %235 = load ptr, ptr %12, align 8, !tbaa !5
  %236 = load i32, ptr %35, align 4, !tbaa !15
  %237 = sext i32 %236 to i64
  %238 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %235, i64 noundef %237) #6
  %239 = load double, ptr %238, align 8, !tbaa !16
  %240 = load double, ptr %29, align 8, !tbaa !16
  %241 = load ptr, ptr %16, align 8, !tbaa !5
  %242 = load i32, ptr %35, align 4, !tbaa !15
  %243 = sext i32 %242 to i64
  %244 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %241, i64 noundef %243) #6
  %245 = load double, ptr %244, align 8, !tbaa !16
  %246 = call double @llvm.fmuladd.f64(double %240, double %245, double %239)
  %247 = fdiv double %234, %246
  store double %247, ptr %37, align 8, !tbaa !16
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = load i32, ptr %35, align 4, !tbaa !15
  %250 = sext i32 %249 to i64
  %251 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %248, i64 noundef %250) #6
  %252 = load double, ptr %251, align 8, !tbaa !16
  %253 = load double, ptr %37, align 8, !tbaa !16
  %254 = fsub double %252, %253
  %255 = load ptr, ptr %14, align 8, !tbaa !5
  %256 = load i32, ptr %35, align 4, !tbaa !15
  %257 = sext i32 %256 to i64
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %255, i64 noundef %257) #6
  %259 = load double, ptr %258, align 8, !tbaa !16
  %260 = fneg double %259
  %261 = fdiv double %254, %260
  store double %261, ptr %33, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %292

262:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %263 = load i32, ptr %21, align 4, !tbaa !15
  store i32 %263, ptr %35, align 4, !tbaa !15
  %264 = load double, ptr %30, align 8, !tbaa !16
  %265 = load ptr, ptr %13, align 8, !tbaa !5
  %266 = load i32, ptr %35, align 4, !tbaa !15
  %267 = sext i32 %266 to i64
  %268 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %265, i64 noundef %267) #6
  %269 = load double, ptr %268, align 8, !tbaa !16
  %270 = load double, ptr %29, align 8, !tbaa !16
  %271 = load ptr, ptr %17, align 8, !tbaa !5
  %272 = load i32, ptr %35, align 4, !tbaa !15
  %273 = sext i32 %272 to i64
  %274 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %271, i64 noundef %273) #6
  %275 = load double, ptr %274, align 8, !tbaa !16
  %276 = call double @llvm.fmuladd.f64(double %270, double %275, double %269)
  %277 = fdiv double %264, %276
  store double %277, ptr %38, align 8, !tbaa !16
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  %279 = load i32, ptr %35, align 4, !tbaa !15
  %280 = sext i32 %279 to i64
  %281 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %278, i64 noundef %280) #6
  %282 = load double, ptr %281, align 8, !tbaa !16
  %283 = load double, ptr %38, align 8, !tbaa !16
  %284 = fsub double %282, %283
  %285 = load ptr, ptr %15, align 8, !tbaa !5
  %286 = load i32, ptr %35, align 4, !tbaa !15
  %287 = sext i32 %286 to i64
  %288 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %285, i64 noundef %287) #6
  %289 = load double, ptr %288, align 8, !tbaa !16
  %290 = fneg double %289
  %291 = fdiv double %284, %290
  store double %291, ptr %33, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %292

292:                                              ; preds = %262, %232
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %293 = load double, ptr %28, align 8, !tbaa !16
  %294 = fmul double 9.000000e-01, %293
  store double %294, ptr %39, align 8, !tbaa !16
  %295 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %39)
  %296 = load double, ptr %295, align 8, !tbaa !16
  store double %296, ptr %33, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  store double 1.000000e+00, ptr %40, align 8, !tbaa !16
  %297 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %40)
  %298 = load double, ptr %297, align 8, !tbaa !16
  store double %298, ptr %33, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  %299 = load i32, ptr %35, align 4, !tbaa !15
  %300 = sitofp i32 %299 to double
  %301 = fcmp oge double %300, 0.000000e+00
  br i1 %301, label %302, label %303

302:                                              ; preds = %292
  br label %305

303:                                              ; preds = %292
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.17, i32 noundef 661, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

304:                                              ; No predecessors!
  br label %305

305:                                              ; preds = %304, %302
  br label %306

306:                                              ; preds = %305, %219
  %307 = load double, ptr %29, align 8, !tbaa !16
  %308 = fcmp olt double %307, 1.000000e+00
  br i1 %308, label %309, label %387

309:                                              ; preds = %306
  %310 = load double, ptr %26, align 8, !tbaa !16
  %311 = load double, ptr %27, align 8, !tbaa !16
  %312 = fcmp ole double %310, %311
  br i1 %312, label %313, label %343

313:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %314 = load i32, ptr %22, align 4, !tbaa !15
  store i32 %314, ptr %36, align 4, !tbaa !15
  %315 = load double, ptr %30, align 8, !tbaa !16
  %316 = load ptr, ptr %10, align 8, !tbaa !5
  %317 = load i32, ptr %36, align 4, !tbaa !15
  %318 = sext i32 %317 to i64
  %319 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %316, i64 noundef %318) #6
  %320 = load double, ptr %319, align 8, !tbaa !16
  %321 = load double, ptr %28, align 8, !tbaa !16
  %322 = load ptr, ptr %14, align 8, !tbaa !5
  %323 = load i32, ptr %36, align 4, !tbaa !15
  %324 = sext i32 %323 to i64
  %325 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %322, i64 noundef %324) #6
  %326 = load double, ptr %325, align 8, !tbaa !16
  %327 = call double @llvm.fmuladd.f64(double %321, double %326, double %320)
  %328 = fdiv double %315, %327
  store double %328, ptr %41, align 8, !tbaa !16
  %329 = load ptr, ptr %12, align 8, !tbaa !5
  %330 = load i32, ptr %36, align 4, !tbaa !15
  %331 = sext i32 %330 to i64
  %332 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %329, i64 noundef %331) #6
  %333 = load double, ptr %332, align 8, !tbaa !16
  %334 = load double, ptr %41, align 8, !tbaa !16
  %335 = fsub double %333, %334
  %336 = load ptr, ptr %16, align 8, !tbaa !5
  %337 = load i32, ptr %36, align 4, !tbaa !15
  %338 = sext i32 %337 to i64
  %339 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %336, i64 noundef %338) #6
  %340 = load double, ptr %339, align 8, !tbaa !16
  %341 = fneg double %340
  %342 = fdiv double %335, %341
  store double %342, ptr %34, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  br label %373

343:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %344 = load i32, ptr %23, align 4, !tbaa !15
  store i32 %344, ptr %36, align 4, !tbaa !15
  %345 = load double, ptr %30, align 8, !tbaa !16
  %346 = load ptr, ptr %11, align 8, !tbaa !5
  %347 = load i32, ptr %36, align 4, !tbaa !15
  %348 = sext i32 %347 to i64
  %349 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %346, i64 noundef %348) #6
  %350 = load double, ptr %349, align 8, !tbaa !16
  %351 = load double, ptr %28, align 8, !tbaa !16
  %352 = load ptr, ptr %15, align 8, !tbaa !5
  %353 = load i32, ptr %36, align 4, !tbaa !15
  %354 = sext i32 %353 to i64
  %355 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %352, i64 noundef %354) #6
  %356 = load double, ptr %355, align 8, !tbaa !16
  %357 = call double @llvm.fmuladd.f64(double %351, double %356, double %350)
  %358 = fdiv double %345, %357
  store double %358, ptr %42, align 8, !tbaa !16
  %359 = load ptr, ptr %13, align 8, !tbaa !5
  %360 = load i32, ptr %36, align 4, !tbaa !15
  %361 = sext i32 %360 to i64
  %362 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %359, i64 noundef %361) #6
  %363 = load double, ptr %362, align 8, !tbaa !16
  %364 = load double, ptr %42, align 8, !tbaa !16
  %365 = fsub double %363, %364
  %366 = load ptr, ptr %17, align 8, !tbaa !5
  %367 = load i32, ptr %36, align 4, !tbaa !15
  %368 = sext i32 %367 to i64
  %369 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %366, i64 noundef %368) #6
  %370 = load double, ptr %369, align 8, !tbaa !16
  %371 = fneg double %370
  %372 = fdiv double %365, %371
  store double %372, ptr %34, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %373

373:                                              ; preds = %343, %313
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %374 = load double, ptr %29, align 8, !tbaa !16
  %375 = fmul double 9.000000e-01, %374
  store double %375, ptr %43, align 8, !tbaa !16
  %376 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %43)
  %377 = load double, ptr %376, align 8, !tbaa !16
  store double %377, ptr %34, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  store double 1.000000e+00, ptr %44, align 8, !tbaa !16
  %378 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %44)
  %379 = load double, ptr %378, align 8, !tbaa !16
  store double %379, ptr %34, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  %380 = load i32, ptr %36, align 4, !tbaa !15
  %381 = sitofp i32 %380 to double
  %382 = fcmp oge double %381, 0.000000e+00
  br i1 %382, label %383, label %384

383:                                              ; preds = %373
  br label %386

384:                                              ; preds = %373
  call void @__assert_fail(ptr noundef @.str.31, ptr noundef @.str.17, i32 noundef 677, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

385:                                              ; No predecessors!
  br label %386

386:                                              ; preds = %385, %383
  br label %387

387:                                              ; preds = %386, %306
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  store double 0x3FEFFFFDE7210BE9, ptr %45, align 8, !tbaa !16
  %388 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %45)
  %389 = load double, ptr %388, align 8, !tbaa !16
  %390 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 4
  store double %389, ptr %390, align 8, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  store double 0x3FEFFFFDE7210BE9, ptr %46, align 8, !tbaa !16
  %391 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %392 = load double, ptr %391, align 8, !tbaa !16
  %393 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 5
  store double %392, ptr %393, align 8, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  %394 = load i8, ptr %6, align 1, !tbaa !9, !range !21, !noundef !22
  %395 = trunc i8 %394 to i1
  br i1 %395, label %396, label %409

396:                                              ; preds = %387
  %397 = load double, ptr %33, align 8, !tbaa !16
  %398 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 0
  %399 = load ptr, ptr %398, align 8, !tbaa !23
  %400 = call noundef double @_ZNK3ipx7Control20centringAlphaScalingEv(ptr noundef nonnull align 8 dereferenceable(1496) %399)
  %401 = fmul double %397, %400
  %402 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 4
  store double %401, ptr %402, align 8, !tbaa !19
  %403 = load double, ptr %34, align 8, !tbaa !16
  %404 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 0
  %405 = load ptr, ptr %404, align 8, !tbaa !23
  %406 = call noundef double @_ZNK3ipx7Control20centringAlphaScalingEv(ptr noundef nonnull align 8 dereferenceable(1496) %405)
  %407 = fmul double %403, %406
  %408 = getelementptr inbounds %"class.ipx::IPM", ptr %48, i32 0, i32 5
  store double %407, ptr %408, align 8, !tbaa !20
  br label %409

409:                                              ; preds = %396, %387
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  ret void
}

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !6, i64 16}
!12 = !{!"_ZTSN3ipx3IPME", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 40, !14, i64 48, !13, i64 56, !14, i64 64, !13, i64 72, !14, i64 80}
!13 = !{!"double", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!14, !14, i64 0}
!16 = !{!13, !13, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!12, !13, i64 32}
!20 = !{!12, !13, i64 40}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!12, !6, i64 0}


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

@.str.17 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 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
@__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb = external hidden unnamed_addr constant [45 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [14 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

; 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #2 align 2

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

; 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 noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296), i32 noundef) local_unnamed_addr #2 align 2

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

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

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

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

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

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

._crit_edge.loopexit:                             ; preds = %95
  %41 = sitofp i32 %.2117 to double
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %3
  %.0115.lcssa = phi double [ 0.000000e+00, %3 ], [ %41, %._crit_edge.loopexit ]
  %.0.lcssa = phi double [ 0.000000e+00, %3 ], [ %.2, %._crit_edge.loopexit ]
  %42 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %.0.lcssa)
  br i1 %42, label %97, label %96

.lr.ph:                                           ; preds = %.lr.ph.preheader, %95
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %95 ]
  %.0134 = phi double [ 0.000000e+00, %.lr.ph.preheader ], [ %.2, %95 ]
  %.0115133 = phi i32 [ 0, %.lr.ph.preheader ], [ %.2117, %95 ]
  %43 = load ptr, ptr %16, align 8, !tbaa !5
  %44 = trunc nuw nsw i64 %indvars.iv to i32
  %45 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %43, i32 noundef %44)
  br i1 %45, label %46, label %69

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

50:                                               ; preds = %46
  call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.17, i32 noundef 627, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

51:                                               ; preds = %46
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %indvars.iv) #6
  %53 = load double, ptr %52, align 8, !tbaa !12
  %54 = fcmp une double %53, 0.000000e+00
  br i1 %54, label %56, label %55

55:                                               ; preds = %51
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.17, i32 noundef 628, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

56:                                               ; preds = %51
  %57 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %indvars.iv) #6
  %58 = load double, ptr %57, align 8, !tbaa !12
  %59 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %indvars.iv) #6
  %60 = load double, ptr %59, align 8, !tbaa !12
  %61 = call double @llvm.fmuladd.f64(double %37, double %60, double %58)
  %62 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %26, i64 noundef %indvars.iv) #6
  %63 = load double, ptr %62, align 8, !tbaa !12
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %indvars.iv) #6
  %65 = load double, ptr %64, align 8, !tbaa !12
  %66 = call double @llvm.fmuladd.f64(double %38, double %65, double %63)
  %67 = call double @llvm.fmuladd.f64(double %61, double %66, double %.0134)
  %68 = add nsw i32 %.0115133, 1
  br label %69

69:                                               ; preds = %56, %.lr.ph
  %.1116 = phi i32 [ %68, %56 ], [ %.0115133, %.lr.ph ]
  %.1 = phi double [ %67, %56 ], [ %.0134, %.lr.ph ]
  %70 = load ptr, ptr %16, align 8, !tbaa !5
  %71 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %70, i32 noundef %44)
  br i1 %71, label %72, label %95

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

76:                                               ; preds = %72
  call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.17, i32 noundef 633, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

77:                                               ; preds = %72
  %78 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %24, i64 noundef %indvars.iv) #6
  %79 = load double, ptr %78, align 8, !tbaa !12
  %80 = fcmp une double %79, 0.000000e+00
  br i1 %80, label %82, label %81

81:                                               ; preds = %77
  call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.17, i32 noundef 634, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

82:                                               ; preds = %77
  %83 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %24, i64 noundef %indvars.iv) #6
  %84 = load double, ptr %83, align 8, !tbaa !12
  %85 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv) #6
  %86 = load double, ptr %85, align 8, !tbaa !12
  %87 = call double @llvm.fmuladd.f64(double %37, double %86, double %84)
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %indvars.iv) #6
  %89 = load double, ptr %88, align 8, !tbaa !12
  %90 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef %indvars.iv) #6
  %91 = load double, ptr %90, align 8, !tbaa !12
  %92 = call double @llvm.fmuladd.f64(double %38, double %91, double %89)
  %93 = call double @llvm.fmuladd.f64(double %87, double %92, double %.1)
  %94 = add nsw i32 %.1116, 1
  br label %95

95:                                               ; preds = %69, %82
  %.2117 = phi i32 [ %94, %82 ], [ %.1116, %69 ]
  %.2 = phi double [ %93, %82 ], [ %.1, %69 ]
  %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

96:                                               ; preds = %._crit_edge
  call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.17, i32 noundef 639, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

97:                                               ; preds = %._crit_edge
  %98 = fdiv double %.0.lcssa, %.0115.lcssa
  %99 = fdiv double %98, 0x4024000000000001
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  store double 1.000000e+00, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  store double 1.000000e+00, ptr %9, align 8, !tbaa !12
  %100 = fcmp olt double %37, 1.000000e+00
  br i1 %100, label %101, label %124

101:                                              ; preds = %97
  %102 = fcmp ugt double %33, %34
  %.173 = select i1 %102, ptr %28, ptr %26
  %.174 = select i1 %102, ptr %32, ptr %31
  %.175 = select i1 %102, ptr %24, ptr %22
  %.176 = select i1 %102, ptr %30, ptr %29
  %.val = load i32, ptr %5, align 4
  %.val182 = load i32, ptr %4, align 4
  %.sink = select i1 %102, i32 %.val, i32 %.val182
  %103 = sext i32 %.sink to i64
  %104 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.173, i64 noundef %103) #6
  %105 = load double, ptr %104, align 8, !tbaa !12
  %106 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.174, i64 noundef %103) #6
  %107 = load double, ptr %106, align 8, !tbaa !12
  %108 = call double @llvm.fmuladd.f64(double %38, double %107, double %105)
  %109 = fdiv double %99, %108
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.175, i64 noundef %103) #6
  %111 = load double, ptr %110, align 8, !tbaa !12
  %112 = fsub double %111, %109
  %113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.176, i64 noundef %103) #6
  %114 = load double, ptr %113, align 8, !tbaa !12
  %115 = fneg double %114
  %116 = fdiv double %112, %115
  store double %116, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %117 = fmul double %37, 9.000000e-01
  store double %117, ptr %10, align 8, !tbaa !12
  %118 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %10)
  %119 = load double, ptr %118, align 8, !tbaa !12
  store double %119, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  store double 1.000000e+00, ptr %11, align 8, !tbaa !12
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %11)
  %121 = load double, ptr %120, align 8, !tbaa !12
  store double %121, ptr %8, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  %122 = icmp sgt i32 %.sink, -1
  br i1 %122, label %124, label %123

123:                                              ; preds = %101
  call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.17, i32 noundef 661, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

124:                                              ; preds = %101, %97
  %125 = fcmp olt double %38, 1.000000e+00
  br i1 %125, label %126, label %149

126:                                              ; preds = %124
  %127 = fcmp ugt double %35, %36
  %.178 = select i1 %127, ptr %24, ptr %22
  %.179 = select i1 %127, ptr %30, ptr %29
  %.180 = select i1 %127, ptr %28, ptr %26
  %.181 = select i1 %127, ptr %32, ptr %31
  %.val183 = load i32, ptr %7, align 4
  %.val184 = load i32, ptr %6, align 4
  %.sink172 = select i1 %127, i32 %.val183, i32 %.val184
  %128 = sext i32 %.sink172 to i64
  %129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.178, i64 noundef %128) #6
  %130 = load double, ptr %129, align 8, !tbaa !12
  %131 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.179, i64 noundef %128) #6
  %132 = load double, ptr %131, align 8, !tbaa !12
  %133 = call double @llvm.fmuladd.f64(double %37, double %132, double %130)
  %134 = fdiv double %99, %133
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.180, i64 noundef %128) #6
  %136 = load double, ptr %135, align 8, !tbaa !12
  %137 = fsub double %136, %134
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %.181, i64 noundef %128) #6
  %139 = load double, ptr %138, align 8, !tbaa !12
  %140 = fneg double %139
  %141 = fdiv double %137, %140
  store double %141, ptr %9, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %142 = fmul double %38, 9.000000e-01
  store double %142, ptr %12, align 8, !tbaa !12
  %143 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %12)
  %144 = load double, ptr %143, align 8, !tbaa !12
  store double %144, ptr %9, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  store double 1.000000e+00, ptr %13, align 8, !tbaa !12
  %145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %13)
  %146 = load double, ptr %145, align 8, !tbaa !12
  store double %146, ptr %9, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  %147 = icmp sgt i32 %.sink172, -1
  br i1 %147, label %149, label %148

148:                                              ; preds = %126
  call void @__assert_fail(ptr noundef nonnull @.str.31, ptr noundef nonnull @.str.17, i32 noundef 677, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx3IPM9StepSizesERKNS0_4StepEb) #7
  unreachable

149:                                              ; preds = %126, %124
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  store double 0x3FEFFFFDE7210BE9, ptr %14, align 8, !tbaa !12
  %150 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %14)
  %151 = load double, ptr %150, align 8, !tbaa !12
  %152 = getelementptr inbounds i8, ptr %0, i64 32
  store double %151, ptr %152, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  store double 0x3FEFFFFDE7210BE9, ptr %15, align 8, !tbaa !12
  %153 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %154 = load double, ptr %153, align 8, !tbaa !12
  %155 = getelementptr inbounds i8, ptr %0, i64 40
  store double %154, ptr %155, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br i1 %2, label %156, label %165

156:                                              ; preds = %149
  %157 = load double, ptr %8, align 8, !tbaa !12
  %158 = load ptr, ptr %0, align 8, !tbaa !17
  %159 = call noundef double @_ZNK3ipx7Control20centringAlphaScalingEv(ptr noundef nonnull align 8 dereferenceable(1496) %158)
  %160 = fmul double %157, %159
  store double %160, ptr %152, align 8, !tbaa !15
  %161 = load double, ptr %9, align 8, !tbaa !12
  %162 = load ptr, ptr %0, align 8, !tbaa !17
  %163 = call noundef double @_ZNK3ipx7Control20centringAlphaScalingEv(ptr noundef nonnull align 8 dereferenceable(1496) %162)
  %164 = fmul double %161, %163
  store double %164, ptr %155, align 8, !tbaa !16
  br label %165

165:                                              ; preds = %156, %149
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  ret void
}

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

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

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


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