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

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

; 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
declare dso_local void @_ZN3ipx3IPM16AssessCentralityERKSt8valarrayIdES4_S4_S4_db(ptr noundef nonnull align 8 dereferenceable(84), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), double noundef, i1 noundef zeroext) #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3ipx3IPM20EvaluateCentringStepERKNS0_4StepEdi(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, double noundef %2, i32 noundef %3) #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca double, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %"class.std::valarray", align 8
  %12 = alloca %"class.std::valarray", align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::valarray", align 8
  %16 = alloca %"class.std::valarray", align 8
  %17 = alloca i32, align 4
  %18 = alloca double, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store double %2, ptr %7, align 8, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !11
  %21 = load ptr, ptr %5, align 8
  %22 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN3ipx3IPM9StepSizesERKNS0_4StepEb(ptr noundef nonnull align 8 dereferenceable(84) %21, ptr noundef nonnull align 8 dereferenceable(96) %22, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  %23 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %24 = load ptr, ptr %23, align 8, !tbaa !13
  %25 = call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %24)
  %26 = call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %25)
  store i32 %26, ptr %9, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  %27 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %28 = load ptr, ptr %27, align 8, !tbaa !13
  %29 = call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %28)
  %30 = call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %29)
  store i32 %30, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #6
  %31 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %32 = load ptr, ptr %31, align 8, !tbaa !13
  %33 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %32)
  call void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %33)
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #6
  %34 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %35 = load ptr, ptr %34, align 8, !tbaa !13
  %36 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %35)
          to label %37 unwind label %56

37:                                               ; preds = %4
  invoke void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %36)
          to label %38 unwind label %56

38:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #6
  %39 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %40 = load ptr, ptr %39, align 8, !tbaa !13
  %41 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %40)
          to label %42 unwind label %60

42:                                               ; preds = %38
  invoke void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %41)
          to label %43 unwind label %60

43:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #6
  %44 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %45 = load ptr, ptr %44, align 8, !tbaa !13
  %46 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %45)
          to label %47 unwind label %64

47:                                               ; preds = %43
  invoke void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %46)
          to label %48 unwind label %64

48:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !11
  br label %49

49:                                               ; preds = %153, %48
  %50 = load i32, ptr %17, align 4, !tbaa !11
  %51 = load i32, ptr %9, align 4, !tbaa !11
  %52 = load i32, ptr %10, align 4, !tbaa !11
  %53 = add nsw i32 %51, %52
  %54 = icmp slt i32 %50, %53
  br i1 %54, label %68, label %55

55:                                               ; preds = %49
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %156

56:                                               ; preds = %37, %4
  %57 = landingpad { ptr, i32 }
          cleanup
  %58 = extractvalue { ptr, i32 } %57, 0
  store ptr %58, ptr %13, align 8
  %59 = extractvalue { ptr, i32 } %57, 1
  store i32 %59, ptr %14, align 4
  br label %241

60:                                               ; preds = %42, %38
  %61 = landingpad { ptr, i32 }
          cleanup
  %62 = extractvalue { ptr, i32 } %61, 0
  store ptr %62, ptr %13, align 8
  %63 = extractvalue { ptr, i32 } %61, 1
  store i32 %63, ptr %14, align 4
  br label %240

64:                                               ; preds = %47, %43
  %65 = landingpad { ptr, i32 }
          cleanup
  %66 = extractvalue { ptr, i32 } %65, 0
  store ptr %66, ptr %13, align 8
  %67 = extractvalue { ptr, i32 } %65, 1
  store i32 %67, ptr %14, align 4
  br label %239

68:                                               ; preds = %49
  %69 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %70 = load ptr, ptr %69, align 8, !tbaa !13
  %71 = load i32, ptr %17, align 4, !tbaa !11
  %72 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %70, i32 noundef %71)
          to label %73 unwind label %88

73:                                               ; preds = %68
  br i1 %72, label %74, label %92

74:                                               ; preds = %73
  %75 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 4
  %76 = load double, ptr %75, align 8, !tbaa !15
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %77, i32 0, i32 1
  %79 = load i32, ptr %17, align 4, !tbaa !11
  %80 = sext i32 %79 to i64
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %78, i64 noundef %80) #6
  %82 = load double, ptr %81, align 8, !tbaa !9
  %83 = load i32, ptr %17, align 4, !tbaa !11
  %84 = sext i32 %83 to i64
  %85 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %11, i64 noundef %84) #6
  %86 = load double, ptr %85, align 8, !tbaa !9
  %87 = call double @llvm.fmuladd.f64(double %76, double %82, double %86)
  store double %87, ptr %85, align 8, !tbaa !9
  br label %92

88:                                               ; preds = %132, %112, %92, %68
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %13, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %238

92:                                               ; preds = %74, %73
  %93 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %94 = load ptr, ptr %93, align 8, !tbaa !13
  %95 = load i32, ptr %17, align 4, !tbaa !11
  %96 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %94, i32 noundef %95)
          to label %97 unwind label %88

97:                                               ; preds = %92
  br i1 %96, label %98, label %112

98:                                               ; preds = %97
  %99 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 4
  %100 = load double, ptr %99, align 8, !tbaa !15
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %101, i32 0, i32 2
  %103 = load i32, ptr %17, align 4, !tbaa !11
  %104 = sext i32 %103 to i64
  %105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %102, i64 noundef %104) #6
  %106 = load double, ptr %105, align 8, !tbaa !9
  %107 = load i32, ptr %17, align 4, !tbaa !11
  %108 = sext i32 %107 to i64
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %12, i64 noundef %108) #6
  %110 = load double, ptr %109, align 8, !tbaa !9
  %111 = call double @llvm.fmuladd.f64(double %100, double %106, double %110)
  store double %111, ptr %109, align 8, !tbaa !9
  br label %112

112:                                              ; preds = %98, %97
  %113 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %114 = load ptr, ptr %113, align 8, !tbaa !13
  %115 = load i32, ptr %17, align 4, !tbaa !11
  %116 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %114, i32 noundef %115)
          to label %117 unwind label %88

117:                                              ; preds = %112
  br i1 %116, label %118, label %132

118:                                              ; preds = %117
  %119 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 5
  %120 = load double, ptr %119, align 8, !tbaa !16
  %121 = load ptr, ptr %6, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %121, i32 0, i32 4
  %123 = load i32, ptr %17, align 4, !tbaa !11
  %124 = sext i32 %123 to i64
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %122, i64 noundef %124) #6
  %126 = load double, ptr %125, align 8, !tbaa !9
  %127 = load i32, ptr %17, align 4, !tbaa !11
  %128 = sext i32 %127 to i64
  %129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %128) #6
  %130 = load double, ptr %129, align 8, !tbaa !9
  %131 = call double @llvm.fmuladd.f64(double %120, double %126, double %130)
  store double %131, ptr %129, align 8, !tbaa !9
  br label %132

132:                                              ; preds = %118, %117
  %133 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %134 = load ptr, ptr %133, align 8, !tbaa !13
  %135 = load i32, ptr %17, align 4, !tbaa !11
  %136 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %134, i32 noundef %135)
          to label %137 unwind label %88

137:                                              ; preds = %132
  br i1 %136, label %138, label %152

138:                                              ; preds = %137
  %139 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 5
  %140 = load double, ptr %139, align 8, !tbaa !16
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = getelementptr inbounds %"struct.ipx::IPM::Step", ptr %141, i32 0, i32 5
  %143 = load i32, ptr %17, align 4, !tbaa !11
  %144 = sext i32 %143 to i64
  %145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %142, i64 noundef %144) #6
  %146 = load double, ptr %145, align 8, !tbaa !9
  %147 = load i32, ptr %17, align 4, !tbaa !11
  %148 = sext i32 %147 to i64
  %149 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %148) #6
  %150 = load double, ptr %149, align 8, !tbaa !9
  %151 = call double @llvm.fmuladd.f64(double %140, double %146, double %150)
  store double %151, ptr %149, align 8, !tbaa !9
  br label %152

152:                                              ; preds = %138, %137
  br label %153

153:                                              ; preds = %152
  %154 = load i32, ptr %17, align 4, !tbaa !11
  %155 = add nsw i32 %154, 1
  store i32 %155, ptr %17, align 4, !tbaa !11
  br label %49, !llvm.loop !17

156:                                              ; preds = %55
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  store double 0.000000e+00, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %157

157:                                              ; preds = %207, %156
  %158 = load i32, ptr %20, align 4, !tbaa !11
  %159 = load i32, ptr %9, align 4, !tbaa !11
  %160 = load i32, ptr %10, align 4, !tbaa !11
  %161 = add nsw i32 %159, %160
  %162 = icmp slt i32 %158, %161
  br i1 %162, label %164, label %163

163:                                              ; preds = %157
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %210

164:                                              ; preds = %157
  %165 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %166 = load ptr, ptr %165, align 8, !tbaa !13
  %167 = load i32, ptr %20, align 4, !tbaa !11
  %168 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %166, i32 noundef %167)
          to label %169 unwind label %183

169:                                              ; preds = %164
  br i1 %168, label %170, label %187

170:                                              ; preds = %169
  %171 = load i32, ptr %20, align 4, !tbaa !11
  %172 = sext i32 %171 to i64
  %173 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %11, i64 noundef %172) #6
  %174 = load double, ptr %173, align 8, !tbaa !9
  %175 = load i32, ptr %20, align 4, !tbaa !11
  %176 = sext i32 %175 to i64
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %176) #6
  %178 = load double, ptr %177, align 8, !tbaa !9
  %179 = load double, ptr %18, align 8, !tbaa !9
  %180 = call double @llvm.fmuladd.f64(double %174, double %178, double %179)
  store double %180, ptr %18, align 8, !tbaa !9
  %181 = load i32, ptr %19, align 4, !tbaa !11
  %182 = add nsw i32 %181, 1
  store i32 %182, ptr %19, align 4, !tbaa !11
  br label %187

183:                                              ; preds = %187, %164
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %13, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %237

187:                                              ; preds = %170, %169
  %188 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 2
  %189 = load ptr, ptr %188, align 8, !tbaa !13
  %190 = load i32, ptr %20, align 4, !tbaa !11
  %191 = invoke noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %189, i32 noundef %190)
          to label %192 unwind label %183

192:                                              ; preds = %187
  br i1 %191, label %193, label %206

193:                                              ; preds = %192
  %194 = load i32, ptr %20, align 4, !tbaa !11
  %195 = sext i32 %194 to i64
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %12, i64 noundef %195) #6
  %197 = load double, ptr %196, align 8, !tbaa !9
  %198 = load i32, ptr %20, align 4, !tbaa !11
  %199 = sext i32 %198 to i64
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %199) #6
  %201 = load double, ptr %200, align 8, !tbaa !9
  %202 = load double, ptr %18, align 8, !tbaa !9
  %203 = call double @llvm.fmuladd.f64(double %197, double %201, double %202)
  store double %203, ptr %18, align 8, !tbaa !9
  %204 = load i32, ptr %19, align 4, !tbaa !11
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %19, align 4, !tbaa !11
  br label %206

206:                                              ; preds = %193, %192
  br label %207

207:                                              ; preds = %206
  %208 = load i32, ptr %20, align 4, !tbaa !11
  %209 = add nsw i32 %208, 1
  store i32 %209, ptr %20, align 4, !tbaa !11
  br label %157, !llvm.loop !19

210:                                              ; preds = %163
  %211 = load i32, ptr %19, align 4, !tbaa !11
  %212 = sitofp i32 %211 to double
  %213 = load double, ptr %18, align 8, !tbaa !9
  %214 = fdiv double %213, %212
  store double %214, ptr %18, align 8, !tbaa !9
  %215 = load double, ptr %18, align 8, !tbaa !9
  invoke void @_ZN3ipx3IPM16AssessCentralityERKSt8valarrayIdES4_S4_S4_db(ptr noundef nonnull align 8 dereferenceable(84) %21, ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(16) %12, ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %16, double noundef %215, i1 noundef zeroext false)
          to label %216 unwind label %233

216:                                              ; preds = %210
  %217 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 11
  %218 = load double, ptr %217, align 8, !tbaa !20
  %219 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 0
  %220 = load ptr, ptr %219, align 8, !tbaa !21
  %221 = invoke noundef double @_ZNK3ipx7Control22centringRatioReductionEv(ptr noundef nonnull align 8 dereferenceable(1496) %220)
          to label %222 unwind label %233

222:                                              ; preds = %216
  %223 = load double, ptr %7, align 8, !tbaa !9
  %224 = fmul double %221, %223
  %225 = fcmp olt double %218, %224
  br i1 %225, label %231, label %226

226:                                              ; preds = %222
  %227 = getelementptr inbounds %"class.ipx::IPM", ptr %21, i32 0, i32 12
  %228 = load i32, ptr %227, align 8, !tbaa !22
  %229 = load i32, ptr %8, align 4, !tbaa !11
  %230 = icmp slt i32 %228, %229
  br label %231

231:                                              ; preds = %226, %222
  %232 = phi i1 [ true, %222 ], [ %230, %226 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  ret i1 %232

233:                                              ; preds = %216, %210
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %13, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %14, align 4
  br label %237

237:                                              ; preds = %233, %183
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %238

238:                                              ; preds = %237, %88
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  br label %239

239:                                              ; preds = %238, %64
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  br label %240

240:                                              ; preds = %239, %60
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  br label %241

241:                                              ; preds = %240, %56
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  br label %242

242:                                              ; preds = %241
  %243 = load ptr, ptr %13, align 8
  %244 = load i32, ptr %14, align 4
  %245 = insertvalue { ptr, i32 } poison, ptr %243, 0
  %246 = insertvalue { ptr, i32 } %245, i32 %244, 1
  resume { ptr, i32 } %246
}

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK3ipx7Control22centringRatioReductionEv(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 = { 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 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { nounwind }

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

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


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

; 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
declare dso_local void @_ZN3ipx3IPM16AssessCentralityERKSt8valarrayIdES4_S4_S4_db(ptr noundef nonnull align 8 dereferenceable(84), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), double noundef, i1 noundef zeroext) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3ipx3IPM20EvaluateCentringStepERKNS0_4StepEdi(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, double noundef %2, i32 noundef %3) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.std::valarray", align 8
  %6 = alloca %"class.std::valarray", align 8
  %7 = alloca %"class.std::valarray", align 8
  %8 = alloca %"class.std::valarray", align 8
  tail call void @_ZN3ipx3IPM9StepSizesERKNS0_4StepEb(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, i1 noundef zeroext true)
  %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 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %11)
  %13 = load ptr, ptr %9, align 8, !tbaa !5
  %14 = tail call noundef nonnull align 8 dereferenceable(704) ptr @_ZNK3ipx7Iterate5modelEv(ptr noundef nonnull align 8 dereferenceable(296) %13)
  %15 = tail call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %14)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #6
  %16 = load ptr, ptr %9, align 8, !tbaa !5
  %17 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xlEv(ptr noundef nonnull align 8 dereferenceable(296) %16)
  call void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %17)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #6
  %18 = load ptr, ptr %9, align 8, !tbaa !5
  %19 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2xuEv(ptr noundef nonnull align 8 dereferenceable(296) %18)
  invoke void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %20 unwind label %34

20:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #6
  %21 = load ptr, ptr %9, align 8, !tbaa !5
  %22 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zlEv(ptr noundef nonnull align 8 dereferenceable(296) %21)
  invoke void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %23 unwind label %36

23:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  %24 = load ptr, ptr %9, align 8, !tbaa !5
  %25 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3ipx7Iterate2zuEv(ptr noundef nonnull align 8 dereferenceable(296) %24)
  invoke void @_ZNSt8valarrayIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %25)
          to label %.preheader57 unwind label %38

.preheader57:                                     ; preds = %23
  %26 = add nsw i32 %15, %12
  %27 = icmp sgt i32 %26, 0
  br i1 %27, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader57
  %28 = getelementptr inbounds i8, ptr %0, i64 32
  %29 = getelementptr inbounds i8, ptr %1, i64 16
  %30 = getelementptr inbounds i8, ptr %1, i64 32
  %31 = getelementptr inbounds i8, ptr %0, i64 40
  %32 = getelementptr inbounds i8, ptr %1, i64 64
  %33 = getelementptr inbounds i8, ptr %1, i64 80
  %wide.trip.count = zext nneg i32 %26 to i64
  br label %40

.preheader:                                       ; preds = %81
  br i1 %27, label %.lr.ph62.preheader, label %._crit_edge

.lr.ph62.preheader:                               ; preds = %.preheader
  %wide.trip.count69 = zext nneg i32 %26 to i64
  br label %.lr.ph62

34:                                               ; preds = %4
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %121

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

38:                                               ; preds = %23
  %39 = landingpad { ptr, i32 }
          cleanup
  br label %119

40:                                               ; preds = %.lr.ph, %81
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %81 ]
  %41 = load ptr, ptr %9, align 8, !tbaa !5
  %42 = trunc nuw nsw i64 %indvars.iv to i32
  %43 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %41, i32 noundef %42)
  br i1 %43, label %44, label %51

44:                                               ; preds = %40
  %45 = load double, ptr %28, align 8, !tbaa !12
  %46 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %indvars.iv) #6
  %47 = load double, ptr %46, align 8, !tbaa !13
  %48 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv) #6
  %49 = load double, ptr %48, align 8, !tbaa !13
  %50 = call double @llvm.fmuladd.f64(double %45, double %47, double %49)
  store double %50, ptr %48, align 8, !tbaa !13
  br label %51

51:                                               ; preds = %44, %40
  %52 = load ptr, ptr %9, align 8, !tbaa !5
  %53 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %52, i32 noundef %42)
  br i1 %53, label %54, label %61

54:                                               ; preds = %51
  %55 = load double, ptr %28, align 8, !tbaa !12
  %56 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %indvars.iv) #6
  %57 = load double, ptr %56, align 8, !tbaa !13
  %58 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %indvars.iv) #6
  %59 = load double, ptr %58, align 8, !tbaa !13
  %60 = call double @llvm.fmuladd.f64(double %55, double %57, double %59)
  store double %60, ptr %58, align 8, !tbaa !13
  br label %61

61:                                               ; preds = %54, %51
  %62 = load ptr, ptr %9, align 8, !tbaa !5
  %63 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %62, i32 noundef %42)
  br i1 %63, label %64, label %71

64:                                               ; preds = %61
  %65 = load double, ptr %31, align 8, !tbaa !14
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %32, i64 noundef %indvars.iv) #6
  %67 = load double, ptr %66, align 8, !tbaa !13
  %68 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #6
  %69 = load double, ptr %68, align 8, !tbaa !13
  %70 = call double @llvm.fmuladd.f64(double %65, double %67, double %69)
  store double %70, ptr %68, align 8, !tbaa !13
  br label %71

71:                                               ; preds = %64, %61
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  %73 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %72, i32 noundef %42)
  br i1 %73, label %74, label %81

74:                                               ; preds = %71
  %75 = load double, ptr %31, align 8, !tbaa !14
  %76 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %33, i64 noundef %indvars.iv) #6
  %77 = load double, ptr %76, align 8, !tbaa !13
  %78 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv) #6
  %79 = load double, ptr %78, align 8, !tbaa !13
  %80 = call double @llvm.fmuladd.f64(double %75, double %77, double %79)
  store double %80, ptr %78, align 8, !tbaa !13
  br label %81

81:                                               ; preds = %71, %74
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader, label %40, !llvm.loop !15

._crit_edge.loopexit:                             ; preds = %105
  %82 = sitofp i32 %.2 to double
  %83 = fdiv double %.245, %82
  br label %._crit_edge

._crit_edge:                                      ; preds = %.preheader57, %._crit_edge.loopexit, %.preheader
  %84 = phi double [ 0x7FF8000000000000, %.preheader ], [ %83, %._crit_edge.loopexit ], [ 0x7FF8000000000000, %.preheader57 ]
  invoke void @_ZN3ipx3IPM16AssessCentralityERKSt8valarrayIdES4_S4_S4_db(ptr noundef nonnull align 8 dereferenceable(84) %0, ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8, double noundef %84, i1 noundef zeroext false)
          to label %106 unwind label %117

.lr.ph62:                                         ; preds = %.lr.ph62.preheader, %105
  %indvars.iv66 = phi i64 [ 0, %.lr.ph62.preheader ], [ %indvars.iv.next67, %105 ]
  %.04260 = phi i32 [ 0, %.lr.ph62.preheader ], [ %.2, %105 ]
  %.04359 = phi double [ 0.000000e+00, %.lr.ph62.preheader ], [ %.245, %105 ]
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = trunc nuw nsw i64 %indvars.iv66 to i32
  %87 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_lbEi(ptr noundef nonnull align 8 dereferenceable(296) %85, i32 noundef %86)
  br i1 %87, label %88, label %95

88:                                               ; preds = %.lr.ph62
  %89 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %5, i64 noundef %indvars.iv66) #6
  %90 = load double, ptr %89, align 8, !tbaa !13
  %91 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv66) #6
  %92 = load double, ptr %91, align 8, !tbaa !13
  %93 = call double @llvm.fmuladd.f64(double %90, double %92, double %.04359)
  %94 = add nsw i32 %.04260, 1
  br label %95

95:                                               ; preds = %88, %.lr.ph62
  %.144 = phi double [ %93, %88 ], [ %.04359, %.lr.ph62 ]
  %.1 = phi i32 [ %94, %88 ], [ %.04260, %.lr.ph62 ]
  %96 = load ptr, ptr %9, align 8, !tbaa !5
  %97 = call noundef zeroext i1 @_ZNK3ipx7Iterate14has_barrier_ubEi(ptr noundef nonnull align 8 dereferenceable(296) %96, i32 noundef %86)
  br i1 %97, label %98, label %105

98:                                               ; preds = %95
  %99 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %6, i64 noundef %indvars.iv66) #6
  %100 = load double, ptr %99, align 8, !tbaa !13
  %101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv66) #6
  %102 = load double, ptr %101, align 8, !tbaa !13
  %103 = call double @llvm.fmuladd.f64(double %100, double %102, double %.144)
  %104 = add nsw i32 %.1, 1
  br label %105

105:                                              ; preds = %95, %98
  %.245 = phi double [ %103, %98 ], [ %.144, %95 ]
  %.2 = phi i32 [ %104, %98 ], [ %.1, %95 ]
  %indvars.iv.next67 = add nuw nsw i64 %indvars.iv66, 1
  %exitcond70.not = icmp eq i64 %indvars.iv.next67, %wide.trip.count69
  br i1 %exitcond70.not, label %._crit_edge.loopexit, label %.lr.ph62, !llvm.loop !17

106:                                              ; preds = %._crit_edge
  %107 = getelementptr inbounds i8, ptr %0, i64 72
  %108 = load double, ptr %107, align 8, !tbaa !18
  %109 = load ptr, ptr %0, align 8, !tbaa !19
  %110 = call noundef double @_ZNK3ipx7Control22centringRatioReductionEv(ptr noundef nonnull align 8 dereferenceable(1496) %109)
  %111 = fmul double %110, %2
  %112 = fcmp olt double %108, %111
  %113 = getelementptr inbounds i8, ptr %0, i64 80
  %114 = load i32, ptr %113, align 8
  %115 = icmp slt i32 %114, %3
  %116 = select i1 %112, i1 true, i1 %115
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  ret i1 %116

117:                                              ; preds = %._crit_edge
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #6
  br label %119

119:                                              ; preds = %117, %38
  %.pn = phi { ptr, i32 } [ %118, %117 ], [ %39, %38 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #6
  br label %120

120:                                              ; preds = %119, %36
  %.pn.pn = phi { ptr, i32 } [ %.pn, %119 ], [ %37, %36 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  br label %121

121:                                              ; preds = %120, %34
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %120 ], [ %35, %34 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #6
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  resume { ptr, i32 } %.pn.pn.pn
}

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK3ipx7Control22centringRatioReductionEv(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 = { 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 = { 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 #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { 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 = !{!6, !10, i64 32}
!13 = !{!10, !10, i64 0}
!14 = !{!6, !10, i64 40}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!6, !10, i64 72}
!19 = !{!6, !7, i64 0}


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