; LLVM IR from ERGO-Code/HiGHS :: src/ipm/ipx (model)

; 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.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.0" = type { i8 }
%"class.ipx::Model" = type { i8, i32, i32, i32, i32, %"class.ipx::SparseMatrix", %"class.ipx::SparseMatrix", %"class.std::valarray", %"class.std::valarray", %"class.std::valarray", %"class.std::valarray", double, double, i32, i32, i32, i32, i32, %"class.std::vector", %"class.std::vector.8", double, double, double, %"class.std::valarray", %"class.std::valarray", %"class.std::valarray", %"class.std::valarray", %"class.ipx::SparseMatrix", %"class.std::vector", %"class.std::valarray", %"class.std::valarray" }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.ipx::SparseMatrix" = type { i32, %"class.std::vector", %"class.std::vector", %"class.std::vector.3", %"class.std::vector", %"class.std::vector.3" }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.ipx_info = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, double, double, double, double }

@.str.18 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE = external hidden unnamed_addr constant [127 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

declare noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16)) #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)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704)) #4 align 2

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

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

; 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 nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(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 @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3ipx5Model24DualizeBackBasicSolutionERKSt8valarrayIdES4_S4_RS2_S5_S5_S5_(ptr noundef nonnull align 8 dereferenceable(704), 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), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3ipx5Model16DualizeBackBasisERKSt6vectorIiSaIiEERS3_S6_(ptr noundef nonnull align 8 dereferenceable(704), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3ipx5Model22ScaleBackBasicSolutionERSt8valarrayIdES3_S3_S3_(ptr noundef nonnull align 8 dereferenceable(704), 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)) #6 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(704) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef %5) #6 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::valarray", align 8
  %16 = alloca %"class.std::valarray", align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::valarray", align 8
  %20 = alloca %"class.std::valarray", align 8
  %21 = alloca %"class.std::vector", align 8
  %22 = alloca %"class.std::allocator.0", align 1
  %23 = alloca %"class.std::vector", align 8
  %24 = alloca %"class.std::allocator.0", align 1
  %25 = alloca %"class.std::vector", align 8
  %26 = alloca %"class.std::vector", align 8
  %27 = alloca double, align 8
  %28 = alloca %"class.std::valarray", align 8
  %29 = alloca %"class.std::valarray", align 8
  %30 = alloca %"class.std::valarray", align 8
  %31 = alloca %"class.std::valarray", align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %38 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %39 = call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %38)
  store i32 %39, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %40 = call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %38)
  store i32 %40, ptr %14, align 4, !tbaa !9
  %41 = load ptr, ptr %8, align 8, !tbaa !5
  %42 = call noundef i64 @_ZNKSt8valarrayIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %41)
  %43 = trunc i64 %42 to i32
  %44 = load i32, ptr %14, align 4, !tbaa !9
  %45 = load i32, ptr %13, align 4, !tbaa !9
  %46 = add nsw i32 %44, %45
  %47 = icmp eq i32 %43, %46
  br i1 %47, label %48, label %49

48:                                               ; preds = %6
  br label %51

49:                                               ; preds = %6
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.18, i32 noundef 419, ptr noundef @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #8
  unreachable

50:                                               ; No predecessors!
  br label %51

51:                                               ; preds = %50, %48
  %52 = load ptr, ptr %9, align 8, !tbaa !5
  %53 = call noundef i64 @_ZNKSt8valarrayIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %52)
  %54 = trunc i64 %53 to i32
  %55 = load i32, ptr %13, align 4, !tbaa !9
  %56 = icmp eq i32 %54, %55
  br i1 %56, label %57, label %58

57:                                               ; preds = %51
  br label %60

58:                                               ; preds = %51
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.18, i32 noundef 420, ptr noundef @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #8
  unreachable

59:                                               ; No predecessors!
  br label %60

60:                                               ; preds = %59, %57
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  %62 = call noundef i64 @_ZNKSt8valarrayIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %61)
  %63 = trunc i64 %62 to i32
  %64 = load i32, ptr %14, align 4, !tbaa !9
  %65 = load i32, ptr %13, align 4, !tbaa !9
  %66 = add nsw i32 %64, %65
  %67 = icmp eq i32 %63, %66
  br i1 %67, label %68, label %69

68:                                               ; preds = %60
  br label %71

69:                                               ; preds = %60
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.18, i32 noundef 421, ptr noundef @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #8
  unreachable

70:                                               ; No predecessors!
  br label %71

71:                                               ; preds = %70, %68
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  %73 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %72) #7
  %74 = trunc i64 %73 to i32
  %75 = load i32, ptr %14, align 4, !tbaa !9
  %76 = load i32, ptr %13, align 4, !tbaa !9
  %77 = add nsw i32 %75, %76
  %78 = icmp eq i32 %74, %77
  br i1 %78, label %79, label %80

79:                                               ; preds = %71
  br label %82

80:                                               ; preds = %71
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.18, i32 noundef 422, ptr noundef @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #8
  unreachable

81:                                               ; No predecessors!
  br label %82

82:                                               ; preds = %81, %79
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #7
  %83 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 15
  %84 = load i32, ptr %83, align 8, !tbaa !11
  %85 = sext i32 %84 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %85)
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #7
  %86 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 13
  %87 = load i32, ptr %86, align 8, !tbaa !30
  %88 = sext i32 %87 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %88)
          to label %89 unwind label %140

89:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #7
  %90 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 13
  %91 = load i32, ptr %90, align 8, !tbaa !30
  %92 = sext i32 %91 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %92)
          to label %93 unwind label %144

93:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #7
  %94 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 15
  %95 = load i32, ptr %94, align 8, !tbaa !11
  %96 = sext i32 %95 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %96)
          to label %97 unwind label %148

97:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #7
  %98 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 13
  %99 = load i32, ptr %98, align 8, !tbaa !30
  %100 = sext i32 %99 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %100, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %101 unwind label %152

101:                                              ; preds = %97
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #7
  %102 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 15
  %103 = load i32, ptr %102, align 8, !tbaa !11
  %104 = sext i32 %103 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #7
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %104, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %105 unwind label %156

105:                                              ; preds = %101
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = load ptr, ptr %9, align 8, !tbaa !5
  %108 = load ptr, ptr %10, align 8, !tbaa !5
  invoke void @_ZNK3ipx5Model24DualizeBackBasicSolutionERKSt8valarrayIdES4_S4_RS2_S5_S5_S5_(ptr noundef nonnull align 8 dereferenceable(704) %38, ptr noundef nonnull align 8 dereferenceable(16) %106, ptr noundef nonnull align 8 dereferenceable(16) %107, ptr noundef nonnull align 8 dereferenceable(16) %108, ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %109 unwind label %160

109:                                              ; preds = %105
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_ZNK3ipx5Model16DualizeBackBasisERKSt6vectorIiSaIiEERS3_S6_(ptr noundef nonnull align 8 dereferenceable(704) %38, ptr noundef nonnull align 8 dereferenceable(24) %110, ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %111 unwind label %160

111:                                              ; preds = %109
  invoke void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %112 unwind label %160

112:                                              ; preds = %111
  invoke void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %113 unwind label %164

113:                                              ; preds = %112
  invoke void @_ZNK3ipx5Model26CorrectScaledBasicSolutionERSt8valarrayIdES3_S3_S3_St6vectorIiSaIiEES6_(ptr noundef nonnull align 8 dereferenceable(704) %38, ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef %25, ptr noundef %26)
          to label %114 unwind label %168

114:                                              ; preds = %113
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %115 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 23
  %116 = invoke noundef double @_ZN3ipx3DotERKSt8valarrayIdES3_(ptr noundef nonnull align 8 dereferenceable(16) %115, ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %117 unwind label %173

117:                                              ; preds = %114
  store double %116, ptr %27, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #7
  %118 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 15
  %119 = load i32, ptr %118, align 8, !tbaa !11
  %120 = sext i32 %119 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %120)
          to label %121 unwind label %177

121:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #7
  %122 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 13
  %123 = load i32, ptr %122, align 8, !tbaa !30
  %124 = sext i32 %123 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %124)
          to label %125 unwind label %181

125:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #7
  %126 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 13
  %127 = load i32, ptr %126, align 8, !tbaa !30
  %128 = sext i32 %127 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %128)
          to label %129 unwind label %185

129:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #7
  %130 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 15
  %131 = load i32, ptr %130, align 8, !tbaa !11
  %132 = sext i32 %131 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %132)
          to label %133 unwind label %189

133:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %134

134:                                              ; preds = %284, %133
  %135 = load i32, ptr %32, align 4, !tbaa !9
  %136 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 15
  %137 = load i32, ptr %136, align 8, !tbaa !11
  %138 = icmp slt i32 %135, %137
  br i1 %138, label %193, label %139

139:                                              ; preds = %134
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  br label %287

140:                                              ; preds = %82
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %17, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %18, align 4
  br label %429

144:                                              ; preds = %89
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %17, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %18, align 4
  br label %428

148:                                              ; preds = %93
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %17, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %18, align 4
  br label %427

152:                                              ; preds = %97
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %17, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  br label %426

156:                                              ; preds = %101
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %17, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %18, align 4
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  br label %425

160:                                              ; preds = %111, %109, %105
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %17, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %18, align 4
  br label %424

164:                                              ; preds = %112
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %17, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %18, align 4
  br label %172

168:                                              ; preds = %113
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %17, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %18, align 4
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  br label %172

172:                                              ; preds = %168, %164
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #7
  br label %424

173:                                              ; preds = %114
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %17, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %18, align 4
  br label %423

177:                                              ; preds = %117
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %17, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %18, align 4
  br label %422

181:                                              ; preds = %121
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %17, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %18, align 4
  br label %421

185:                                              ; preds = %125
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %17, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %18, align 4
  br label %420

189:                                              ; preds = %129
  %190 = landingpad { ptr, i32 }
          cleanup
  %191 = extractvalue { ptr, i32 } %190, 0
  store ptr %191, ptr %17, align 8
  %192 = extractvalue { ptr, i32 } %190, 1
  store i32 %192, ptr %18, align 4
  br label %419

193:                                              ; preds = %134
  %194 = load i32, ptr %32, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %195) #7
  %197 = load double, ptr %196, align 8, !tbaa !31
  %198 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 25
  %199 = load i32, ptr %32, align 4, !tbaa !9
  %200 = sext i32 %199 to i64
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %198, i64 noundef %200) #7
  %202 = load double, ptr %201, align 8, !tbaa !31
  %203 = fcmp olt double %197, %202
  br i1 %203, label %204, label %218

204:                                              ; preds = %193
  %205 = load i32, ptr %32, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %206) #7
  %208 = load double, ptr %207, align 8, !tbaa !31
  %209 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 25
  %210 = load i32, ptr %32, align 4, !tbaa !9
  %211 = sext i32 %210 to i64
  %212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %209, i64 noundef %211) #7
  %213 = load double, ptr %212, align 8, !tbaa !31
  %214 = fsub double %208, %213
  %215 = load i32, ptr %32, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %216) #7
  store double %214, ptr %217, align 8, !tbaa !31
  br label %218

218:                                              ; preds = %204, %193
  %219 = load i32, ptr %32, align 4, !tbaa !9
  %220 = sext i32 %219 to i64
  %221 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %220) #7
  %222 = load double, ptr %221, align 8, !tbaa !31
  %223 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 26
  %224 = load i32, ptr %32, align 4, !tbaa !9
  %225 = sext i32 %224 to i64
  %226 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %223, i64 noundef %225) #7
  %227 = load double, ptr %226, align 8, !tbaa !31
  %228 = fcmp ogt double %222, %227
  br i1 %228, label %229, label %243

229:                                              ; preds = %218
  %230 = load i32, ptr %32, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %231) #7
  %233 = load double, ptr %232, align 8, !tbaa !31
  %234 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 26
  %235 = load i32, ptr %32, align 4, !tbaa !9
  %236 = sext i32 %235 to i64
  %237 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %234, i64 noundef %236) #7
  %238 = load double, ptr %237, align 8, !tbaa !31
  %239 = fsub double %233, %238
  %240 = load i32, ptr %32, align 4, !tbaa !9
  %241 = sext i32 %240 to i64
  %242 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %28, i64 noundef %241) #7
  store double %239, ptr %242, align 8, !tbaa !31
  br label %243

243:                                              ; preds = %229, %218
  %244 = load i32, ptr %32, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %245) #7
  %247 = load i32, ptr %246, align 4, !tbaa !9
  %248 = icmp ne i32 %247, -1
  br i1 %248, label %249, label %263

249:                                              ; preds = %243
  %250 = load i32, ptr %32, align 4, !tbaa !9
  %251 = sext i32 %250 to i64
  %252 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %251) #7
  %253 = load double, ptr %252, align 8, !tbaa !31
  %254 = fcmp ogt double %253, 0.000000e+00
  br i1 %254, label %255, label %263

255:                                              ; preds = %249
  %256 = load i32, ptr %32, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %257) #7
  %259 = load double, ptr %258, align 8, !tbaa !31
  %260 = load i32, ptr %32, align 4, !tbaa !9
  %261 = sext i32 %260 to i64
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %261) #7
  store double %259, ptr %262, align 8, !tbaa !31
  br label %263

263:                                              ; preds = %255, %249, %243
  %264 = load i32, ptr %32, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef %265) #7
  %267 = load i32, ptr %266, align 4, !tbaa !9
  %268 = icmp ne i32 %267, -2
  br i1 %268, label %269, label %283

269:                                              ; preds = %263
  %270 = load i32, ptr %32, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %271) #7
  %273 = load double, ptr %272, align 8, !tbaa !31
  %274 = fcmp olt double %273, 0.000000e+00
  br i1 %274, label %275, label %283

275:                                              ; preds = %269
  %276 = load i32, ptr %32, align 4, !tbaa !9
  %277 = sext i32 %276 to i64
  %278 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %277) #7
  %279 = load double, ptr %278, align 8, !tbaa !31
  %280 = load i32, ptr %32, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %281) #7
  store double %279, ptr %282, align 8, !tbaa !31
  br label %283

283:                                              ; preds = %275, %269, %263
  br label %284

284:                                              ; preds = %283
  %285 = load i32, ptr %32, align 4, !tbaa !9
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %32, align 4, !tbaa !9
  br label %134, !llvm.loop !32

287:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %369, %287
  %289 = load i32, ptr %33, align 4, !tbaa !9
  %290 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 13
  %291 = load i32, ptr %290, align 8, !tbaa !30
  %292 = icmp slt i32 %289, %291
  br i1 %292, label %294, label %293

293:                                              ; preds = %288
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %372

294:                                              ; preds = %288
  %295 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 19
  %296 = load i32, ptr %33, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %295, i64 noundef %297) #7
  %299 = load i8, ptr %298, align 1, !tbaa !34
  %300 = sext i8 %299 to i32
  %301 = icmp eq i32 %300, 60
  br i1 %301, label %302, label %331

302:                                              ; preds = %294
  %303 = load i32, ptr %33, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %304) #7
  %306 = load double, ptr %305, align 8, !tbaa !31
  %307 = fcmp olt double %306, 0.000000e+00
  br i1 %307, label %308, label %316

308:                                              ; preds = %302
  %309 = load i32, ptr %33, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %310) #7
  %312 = load double, ptr %311, align 8, !tbaa !31
  %313 = load i32, ptr %33, align 4, !tbaa !9
  %314 = sext i32 %313 to i64
  %315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %314) #7
  store double %312, ptr %315, align 8, !tbaa !31
  br label %316

316:                                              ; preds = %308, %302
  %317 = load i32, ptr %33, align 4, !tbaa !9
  %318 = sext i32 %317 to i64
  %319 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %318) #7
  %320 = load double, ptr %319, align 8, !tbaa !31
  %321 = fcmp ogt double %320, 0.000000e+00
  br i1 %321, label %322, label %330

322:                                              ; preds = %316
  %323 = load i32, ptr %33, align 4, !tbaa !9
  %324 = sext i32 %323 to i64
  %325 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %324) #7
  %326 = load double, ptr %325, align 8, !tbaa !31
  %327 = load i32, ptr %33, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %328) #7
  store double %326, ptr %329, align 8, !tbaa !31
  br label %330

330:                                              ; preds = %322, %316
  br label %331

331:                                              ; preds = %330, %294
  %332 = getelementptr inbounds %"class.ipx::Model", ptr %38, i32 0, i32 19
  %333 = load i32, ptr %33, align 4, !tbaa !9
  %334 = sext i32 %333 to i64
  %335 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %332, i64 noundef %334) #7
  %336 = load i8, ptr %335, align 1, !tbaa !34
  %337 = sext i8 %336 to i32
  %338 = icmp eq i32 %337, 62
  br i1 %338, label %339, label %368

339:                                              ; preds = %331
  %340 = load i32, ptr %33, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %341) #7
  %343 = load double, ptr %342, align 8, !tbaa !31
  %344 = fcmp ogt double %343, 0.000000e+00
  br i1 %344, label %345, label %353

345:                                              ; preds = %339
  %346 = load i32, ptr %33, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %347) #7
  %349 = load double, ptr %348, align 8, !tbaa !31
  %350 = load i32, ptr %33, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %351) #7
  store double %349, ptr %352, align 8, !tbaa !31
  br label %353

353:                                              ; preds = %345, %339
  %354 = load i32, ptr %33, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %355) #7
  %357 = load double, ptr %356, align 8, !tbaa !31
  %358 = fcmp olt double %357, 0.000000e+00
  br i1 %358, label %359, label %367

359:                                              ; preds = %353
  %360 = load i32, ptr %33, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %361) #7
  %363 = load double, ptr %362, align 8, !tbaa !31
  %364 = load i32, ptr %33, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef %365) #7
  store double %363, ptr %366, align 8, !tbaa !31
  br label %367

367:                                              ; preds = %359, %353
  br label %368

368:                                              ; preds = %367, %331
  br label %369

369:                                              ; preds = %368
  %370 = load i32, ptr %33, align 4, !tbaa !9
  %371 = add nsw i32 %370, 1
  store i32 %371, ptr %33, align 4, !tbaa !9
  br label %288, !llvm.loop !35

372:                                              ; preds = %293
  invoke void @_ZNK3ipx5Model22ScaleBackBasicSolutionERSt8valarrayIdES3_S3_S3_(ptr noundef nonnull align 8 dereferenceable(704) %38, ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %373 unwind label %396

373:                                              ; preds = %372
  invoke void @_ZNK3ipx5Model22ScaleBackBasicSolutionERSt8valarrayIdES3_S3_S3_(ptr noundef nonnull align 8 dereferenceable(704) %38, ptr noundef nonnull align 8 dereferenceable(16) %28, ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %374 unwind label %396

374:                                              ; preds = %373
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %375 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %28)
          to label %376 unwind label %400

376:                                              ; preds = %374
  store double %375, ptr %34, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %377 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %29)
          to label %378 unwind label %404

378:                                              ; preds = %376
  store double %377, ptr %35, align 8, !tbaa !31
  %379 = invoke 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) %35)
          to label %380 unwind label %404

380:                                              ; preds = %378
  %381 = load double, ptr %379, align 8, !tbaa !31
  %382 = load ptr, ptr %12, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.ipx_info, ptr %382, i32 0, i32 32
  store double %381, ptr %383, align 8, !tbaa !36
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %384 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %385 unwind label %409

385:                                              ; preds = %380
  store double %384, ptr %36, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %386 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %30)
          to label %387 unwind label %413

387:                                              ; preds = %385
  store double %386, ptr %37, align 8, !tbaa !31
  %388 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %389 unwind label %413

389:                                              ; preds = %387
  %390 = load double, ptr %388, align 8, !tbaa !31
  %391 = load ptr, ptr %12, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.ipx_info, ptr %391, i32 0, i32 33
  store double %390, ptr %392, align 8, !tbaa !38
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  %393 = load double, ptr %27, align 8, !tbaa !31
  %394 = load ptr, ptr %12, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.ipx_info, ptr %394, i32 0, i32 31
  store double %393, ptr %395, align 8, !tbaa !39
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #7
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  ret void

396:                                              ; preds = %373, %372
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %17, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %18, align 4
  br label %418

400:                                              ; preds = %374
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %17, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %18, align 4
  br label %408

404:                                              ; preds = %378, %376
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %17, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  br label %408

408:                                              ; preds = %404, %400
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  br label %418

409:                                              ; preds = %380
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %17, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %18, align 4
  br label %417

413:                                              ; preds = %387, %385
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %17, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %417

417:                                              ; preds = %413, %409
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  br label %418

418:                                              ; preds = %417, %408, %396
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #7
  br label %419

419:                                              ; preds = %418, %189
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #7
  br label %420

420:                                              ; preds = %419, %185
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #7
  br label %421

421:                                              ; preds = %420, %181
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #7
  br label %422

422:                                              ; preds = %421, %177
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #7
  br label %423

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

424:                                              ; preds = %423, %172, %160
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  br label %425

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

426:                                              ; preds = %425, %152
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #7
  br label %427

427:                                              ; preds = %426, %148
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #7
  br label %428

428:                                              ; preds = %427, %144
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #7
  br label %429

429:                                              ; preds = %428, %140
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #7
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %430

430:                                              ; preds = %429
  %431 = load ptr, ptr %17, align 8
  %432 = load i32, ptr %18, align 4
  %433 = insertvalue { ptr, i32 } poison, ptr %431, 0
  %434 = insertvalue { ptr, i32 } %433, i32 %432, 1
  resume { ptr, i32 } %434
}

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 368}
!12 = !{!"_ZTSN3ipx5ModelE", !13, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !14, i64 24, !14, i64 152, !23, i64 280, !23, i64 296, !23, i64 312, !23, i64 328, !25, i64 344, !25, i64 352, !10, i64 360, !10, i64 364, !10, i64 368, !10, i64 372, !10, i64 376, !15, i64 384, !26, i64 408, !25, i64 432, !25, i64 440, !25, i64 448, !23, i64 456, !23, i64 472, !23, i64 488, !23, i64 504, !14, i64 520, !15, i64 648, !23, i64 672, !23, i64 688}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN3ipx12SparseMatrixE", !10, i64 0, !15, i64 8, !15, i64 32, !19, i64 56, !15, i64 80, !19, i64 104}
!15 = !{!"_ZTSSt6vectorIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTSSt6vectorIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!"_ZTSSt8valarrayIdE", !24, i64 0, !6, i64 8}
!24 = !{!"long", !7, i64 0}
!25 = !{!"double", !7, i64 0}
!26 = !{!"_ZTSSt6vectorIcSaIcEE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIcSaIcEE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!12, !10, i64 360}
!31 = !{!25, !25, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!7, !7, i64 0}
!35 = distinct !{!35, !33}
!36 = !{!37, !25, i64 176}
!37 = !{!"_ZTS8ipx_info", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !25, i64 80, !25, i64 88, !25, i64 96, !25, i64 104, !25, i64 112, !25, i64 120, !25, i64 128, !25, i64 136, !25, i64 144, !25, i64 152, !25, i64 160, !25, i64 168, !25, i64 176, !25, i64 184, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !25, i64 224, !25, i64 232, !25, i64 240, !25, i64 248, !25, i64 256, !25, i64 264, !25, i64 272, !25, i64 280, !25, i64 288, !25, i64 296, !25, i64 304, !25, i64 312, !25, i64 320, !25, i64 328, !25, i64 336, !25, i64 344, !25, i64 352, !25, i64 360, !25, i64 368, !25, i64 376, !25, i64 384, !25, i64 392, !25, i64 400, !25, i64 408, !10, i64 416, !10, i64 420, !10, i64 424, !10, i64 428, !25, i64 432, !25, i64 440, !25, i64 448, !25, i64 456}
!38 = !{!37, !25, i64 184}
!39 = !{!37, !25, i64 168}


; 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 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.0" = type { i8 }

@.str.18 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE = external hidden unnamed_addr constant [127 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

declare noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #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 #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704)) local_unnamed_addr #4 align 2

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

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

; 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 nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(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 @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) local_unnamed_addr #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3ipx5Model24DualizeBackBasicSolutionERKSt8valarrayIdES4_S4_RS2_S5_S5_S5_(ptr noundef nonnull align 8 dereferenceable(704), 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), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3ipx5Model16DualizeBackBasisERKSt6vectorIiSaIiEERS3_S6_(ptr noundef nonnull align 8 dereferenceable(704), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNK3ipx5Model26CorrectScaledBasicSolutionERSt8valarrayIdES3_S3_S3_St6vectorIiSaIiEES6_(ptr noundef nonnull align 8 dereferenceable(704), 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), ptr noundef, ptr noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3ipx5Model22ScaleBackBasicSolutionERSt8valarrayIdES3_S3_S3_(ptr noundef nonnull align 8 dereferenceable(704), 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)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE(ptr noundef nonnull align 8 dereferenceable(704) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr nocapture noundef writeonly %5) local_unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca %"class.std::valarray", align 8
  %8 = alloca %"class.std::valarray", align 8
  %9 = alloca %"class.std::valarray", align 8
  %10 = alloca %"class.std::valarray", align 8
  %11 = alloca %"class.std::vector", align 8
  %12 = alloca %"class.std::allocator.0", align 1
  %13 = alloca %"class.std::vector", align 8
  %14 = alloca %"class.std::allocator.0", align 1
  %15 = alloca %"class.std::vector", align 8
  %16 = alloca %"class.std::vector", align 8
  %17 = alloca %"class.std::valarray", align 8
  %18 = alloca %"class.std::valarray", align 8
  %19 = alloca %"class.std::valarray", align 8
  %20 = alloca %"class.std::valarray", align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = tail call noundef i32 @_ZNK3ipx5Model4rowsEv(ptr noundef nonnull align 8 dereferenceable(704) %0)
  %26 = tail call noundef i32 @_ZNK3ipx5Model4colsEv(ptr noundef nonnull align 8 dereferenceable(704) %0)
  %27 = tail call noundef i64 @_ZNKSt8valarrayIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1)
  %28 = trunc i64 %27 to i32
  %29 = add nsw i32 %26, %25
  %30 = icmp eq i32 %29, %28
  br i1 %30, label %32, label %31

31:                                               ; preds = %6
  tail call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.18, i32 noundef 419, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #7
  unreachable

32:                                               ; preds = %6
  %33 = tail call noundef i64 @_ZNKSt8valarrayIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %2)
  %34 = trunc i64 %33 to i32
  %35 = icmp eq i32 %25, %34
  br i1 %35, label %37, label %36

36:                                               ; preds = %32
  tail call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.18, i32 noundef 420, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #7
  unreachable

37:                                               ; preds = %32
  %38 = tail call noundef i64 @_ZNKSt8valarrayIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %3)
  %39 = trunc i64 %38 to i32
  %40 = icmp eq i32 %28, %39
  br i1 %40, label %42, label %41

41:                                               ; preds = %37
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.18, i32 noundef 421, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #7
  unreachable

42:                                               ; preds = %37
  %43 = tail call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #8
  %44 = trunc i64 %43 to i32
  %45 = icmp eq i32 %28, %44
  br i1 %45, label %47, label %46

46:                                               ; preds = %42
  tail call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.18, i32 noundef 422, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK3ipx5Model21EvaluateBasicSolutionERKSt8valarrayIdES4_S4_RKSt6vectorIiSaIiEEPNS_4InfoE) #7
  unreachable

47:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #8
  %48 = getelementptr inbounds i8, ptr %0, i64 368
  %49 = load i32, ptr %48, align 8, !tbaa !5
  %50 = sext i32 %49 to i64
  call void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %50)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #8
  %51 = getelementptr inbounds i8, ptr %0, i64 360
  %52 = load i32, ptr %51, align 8, !tbaa !28
  %53 = sext i32 %52 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %53)
          to label %54 unwind label %92

54:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #8
  %55 = load i32, ptr %51, align 8, !tbaa !28
  %56 = sext i32 %55 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %56)
          to label %57 unwind label %94

57:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #8
  %58 = load i32, ptr %48, align 8, !tbaa !5
  %59 = sext i32 %58 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %59)
          to label %60 unwind label %96

60:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #8
  %61 = load i32, ptr %51, align 8, !tbaa !28
  %62 = sext i32 %61 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #8
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %62, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %63 unwind label %98

63:                                               ; preds = %60
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #8
  %64 = load i32, ptr %48, align 8, !tbaa !5
  %65 = sext i32 %64 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #8
  call void @_ZNSaIiEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  invoke void @_ZNSt6vectorIiSaIiEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %65, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %66 unwind label %100

66:                                               ; preds = %63
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  invoke void @_ZNK3ipx5Model24DualizeBackBasicSolutionERKSt8valarrayIdES4_S4_RS2_S5_S5_S5_(ptr noundef nonnull align 8 dereferenceable(704) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %67 unwind label %102

67:                                               ; preds = %66
  invoke void @_ZNK3ipx5Model16DualizeBackBasisERKSt6vectorIiSaIiEERS3_S6_(ptr noundef nonnull align 8 dereferenceable(704) %0, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %68 unwind label %102

68:                                               ; preds = %67
  invoke void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %69 unwind label %102

69:                                               ; preds = %68
  invoke void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %70 unwind label %104

70:                                               ; preds = %69
  call void @_ZNK3ipx5Model26CorrectScaledBasicSolutionERSt8valarrayIdES3_S3_S3_St6vectorIiSaIiEES6_(ptr noundef nonnull align 8 dereferenceable(704) %0, ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %10, ptr noundef nonnull %15, ptr noundef nonnull %16)
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  %71 = getelementptr inbounds i8, ptr %0, i64 456
  %72 = invoke noundef double @_ZN3ipx3DotERKSt8valarrayIdES3_(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(16) %7)
          to label %73 unwind label %106

73:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #8
  %74 = load i32, ptr %48, align 8, !tbaa !5
  %75 = sext i32 %74 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %75)
          to label %76 unwind label %108

76:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #8
  %77 = load i32, ptr %51, align 8, !tbaa !28
  %78 = sext i32 %77 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %78)
          to label %79 unwind label %110

79:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #8
  %80 = load i32, ptr %51, align 8, !tbaa !28
  %81 = sext i32 %80 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %81)
          to label %82 unwind label %112

82:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #8
  %83 = load i32, ptr %48, align 8, !tbaa !5
  %84 = sext i32 %83 to i64
  invoke void @_ZNSt8valarrayIdEC2Em(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %84)
          to label %.preheader90 unwind label %114

.preheader90:                                     ; preds = %82
  %85 = load i32, ptr %48, align 8, !tbaa !5
  %86 = icmp sgt i32 %85, 0
  br i1 %86, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %.preheader90
  %87 = getelementptr inbounds i8, ptr %0, i64 488
  %88 = getelementptr inbounds i8, ptr %0, i64 504
  br label %116

.preheader:                                       ; preds = %164, %.preheader90
  %89 = load i32, ptr %51, align 8, !tbaa !28
  %90 = icmp sgt i32 %89, 0
  br i1 %90, label %.lr.ph93, label %._crit_edge

.lr.ph93:                                         ; preds = %.preheader
  %91 = getelementptr inbounds i8, ptr %0, i64 408
  br label %168

92:                                               ; preds = %47
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %251

94:                                               ; preds = %54
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %250

96:                                               ; preds = %57
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %249

98:                                               ; preds = %60
  %99 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  br label %248

100:                                              ; preds = %63
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIiED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  br label %247

102:                                              ; preds = %68, %67, %66
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %246

104:                                              ; preds = %69
  %105 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  br label %246

106:                                              ; preds = %70
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %246

108:                                              ; preds = %73
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %245

110:                                              ; preds = %76
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %244

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

114:                                              ; preds = %82
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %242

116:                                              ; preds = %.lr.ph, %164
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %164 ]
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #8
  %118 = load double, ptr %117, align 8, !tbaa !29
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %87, i64 noundef %indvars.iv) #8
  %120 = load double, ptr %119, align 8, !tbaa !29
  %121 = fcmp olt double %118, %120
  br i1 %121, label %122, label %129

122:                                              ; preds = %116
  %123 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #8
  %124 = load double, ptr %123, align 8, !tbaa !29
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %87, i64 noundef %indvars.iv) #8
  %126 = load double, ptr %125, align 8, !tbaa !29
  %127 = fsub double %124, %126
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %indvars.iv) #8
  store double %127, ptr %128, align 8, !tbaa !29
  br label %129

129:                                              ; preds = %122, %116
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #8
  %131 = load double, ptr %130, align 8, !tbaa !29
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %88, i64 noundef %indvars.iv) #8
  %133 = load double, ptr %132, align 8, !tbaa !29
  %134 = fcmp ogt double %131, %133
  br i1 %134, label %135, label %142

135:                                              ; preds = %129
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %7, i64 noundef %indvars.iv) #8
  %137 = load double, ptr %136, align 8, !tbaa !29
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %88, i64 noundef %indvars.iv) #8
  %139 = load double, ptr %138, align 8, !tbaa !29
  %140 = fsub double %137, %139
  %141 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %17, i64 noundef %indvars.iv) #8
  store double %140, ptr %141, align 8, !tbaa !29
  br label %142

142:                                              ; preds = %135, %129
  %143 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv) #8
  %144 = load i32, ptr %143, align 4, !tbaa !30
  %.not = icmp eq i32 %144, -1
  br i1 %.not, label %153, label %145

145:                                              ; preds = %142
  %146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %indvars.iv) #8
  %147 = load double, ptr %146, align 8, !tbaa !29
  %148 = fcmp ogt double %147, 0.000000e+00
  br i1 %148, label %149, label %153

149:                                              ; preds = %145
  %150 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %indvars.iv) #8
  %151 = load double, ptr %150, align 8, !tbaa !29
  %152 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %indvars.iv) #8
  store double %151, ptr %152, align 8, !tbaa !29
  br label %153

153:                                              ; preds = %149, %145, %142
  %154 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv) #8
  %155 = load i32, ptr %154, align 4, !tbaa !30
  %.not89 = icmp eq i32 %155, -2
  br i1 %.not89, label %164, label %156

156:                                              ; preds = %153
  %157 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %indvars.iv) #8
  %158 = load double, ptr %157, align 8, !tbaa !29
  %159 = fcmp olt double %158, 0.000000e+00
  br i1 %159, label %160, label %164

160:                                              ; preds = %156
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %indvars.iv) #8
  %162 = load double, ptr %161, align 8, !tbaa !29
  %163 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %20, i64 noundef %indvars.iv) #8
  store double %162, ptr %163, align 8, !tbaa !29
  br label %164

164:                                              ; preds = %153, %156, %160
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %165 = load i32, ptr %48, align 8, !tbaa !5
  %166 = sext i32 %165 to i64
  %167 = icmp slt i64 %indvars.iv.next, %166
  br i1 %167, label %116, label %.preheader, !llvm.loop !31

._crit_edge:                                      ; preds = %208, %.preheader
  invoke void @_ZNK3ipx5Model22ScaleBackBasicSolutionERSt8valarrayIdES3_S3_S3_(ptr noundef nonnull align 8 dereferenceable(704) %0, ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %10)
          to label %212 unwind label %229

168:                                              ; preds = %.lr.ph93, %208
  %indvars.iv95 = phi i64 [ 0, %.lr.ph93 ], [ %indvars.iv.next96, %208 ]
  %169 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %91, i64 noundef %indvars.iv95) #8
  %170 = load i8, ptr %169, align 1, !tbaa !33
  %171 = icmp eq i8 %170, 60
  br i1 %171, label %172, label %188

172:                                              ; preds = %168
  %173 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv95) #8
  %174 = load double, ptr %173, align 8, !tbaa !29
  %175 = fcmp olt double %174, 0.000000e+00
  br i1 %175, label %176, label %180

176:                                              ; preds = %172
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv95) #8
  %178 = load double, ptr %177, align 8, !tbaa !29
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %indvars.iv95) #8
  store double %178, ptr %179, align 8, !tbaa !29
  br label %180

180:                                              ; preds = %176, %172
  %181 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv95) #8
  %182 = load double, ptr %181, align 8, !tbaa !29
  %183 = fcmp ogt double %182, 0.000000e+00
  br i1 %183, label %184, label %188

184:                                              ; preds = %180
  %185 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv95) #8
  %186 = load double, ptr %185, align 8, !tbaa !29
  %187 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv95) #8
  store double %186, ptr %187, align 8, !tbaa !29
  br label %188

188:                                              ; preds = %180, %184, %168
  %189 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNKSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %91, i64 noundef %indvars.iv95) #8
  %190 = load i8, ptr %189, align 1, !tbaa !33
  %191 = icmp eq i8 %190, 62
  br i1 %191, label %192, label %208

192:                                              ; preds = %188
  %193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv95) #8
  %194 = load double, ptr %193, align 8, !tbaa !29
  %195 = fcmp ogt double %194, 0.000000e+00
  br i1 %195, label %196, label %200

196:                                              ; preds = %192
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %8, i64 noundef %indvars.iv95) #8
  %198 = load double, ptr %197, align 8, !tbaa !29
  %199 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %18, i64 noundef %indvars.iv95) #8
  store double %198, ptr %199, align 8, !tbaa !29
  br label %200

200:                                              ; preds = %196, %192
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv95) #8
  %202 = load double, ptr %201, align 8, !tbaa !29
  %203 = fcmp olt double %202, 0.000000e+00
  br i1 %203, label %204, label %208

204:                                              ; preds = %200
  %205 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %9, i64 noundef %indvars.iv95) #8
  %206 = load double, ptr %205, align 8, !tbaa !29
  %207 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef %indvars.iv95) #8
  store double %206, ptr %207, align 8, !tbaa !29
  br label %208

208:                                              ; preds = %188, %204, %200
  %indvars.iv.next96 = add nuw nsw i64 %indvars.iv95, 1
  %209 = load i32, ptr %51, align 8, !tbaa !28
  %210 = sext i32 %209 to i64
  %211 = icmp slt i64 %indvars.iv.next96, %210
  br i1 %211, label %168, label %._crit_edge, !llvm.loop !34

212:                                              ; preds = %._crit_edge
  invoke void @_ZNK3ipx5Model22ScaleBackBasicSolutionERSt8valarrayIdES3_S3_S3_(ptr noundef nonnull align 8 dereferenceable(704) %0, ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %213 unwind label %229

213:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #8
  %214 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %215 unwind label %231

215:                                              ; preds = %213
  store double %214, ptr %21, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  %216 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %217 unwind label %233

217:                                              ; preds = %215
  store double %216, ptr %22, align 8, !tbaa !29
  %218 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %219 = load double, ptr %218, align 8, !tbaa !29
  %220 = getelementptr inbounds i8, ptr %5, i64 176
  store double %219, ptr %220, align 8, !tbaa !35
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  %221 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %222 unwind label %236

222:                                              ; preds = %217
  store double %221, ptr %23, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  %223 = invoke noundef double @_ZN3ipx7InfnormERKSt8valarrayIdE(ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %224 unwind label %238

224:                                              ; preds = %222
  store double %223, ptr %24, align 8, !tbaa !29
  %225 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %226 = load double, ptr %225, align 8, !tbaa !29
  %227 = getelementptr inbounds i8, ptr %5, i64 184
  store double %226, ptr %227, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  %228 = getelementptr inbounds i8, ptr %5, i64 168
  store double %72, ptr %228, align 8, !tbaa !38
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  ret void

229:                                              ; preds = %212, %._crit_edge
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %241

231:                                              ; preds = %213
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %235

233:                                              ; preds = %215
  %234 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  br label %235

235:                                              ; preds = %233, %231
  %.pn = phi { ptr, i32 } [ %234, %233 ], [ %232, %231 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  br label %241

236:                                              ; preds = %217
  %237 = landingpad { ptr, i32 }
          cleanup
  br label %240

238:                                              ; preds = %222
  %239 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  br label %240

240:                                              ; preds = %238, %236
  %.pn75 = phi { ptr, i32 } [ %239, %238 ], [ %237, %236 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  br label %241

241:                                              ; preds = %240, %235, %229
  %.pn75.pn = phi { ptr, i32 } [ %.pn75, %240 ], [ %.pn, %235 ], [ %230, %229 ]
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #8
  br label %242

242:                                              ; preds = %241, %114
  %.pn75.pn.pn = phi { ptr, i32 } [ %.pn75.pn, %241 ], [ %115, %114 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #8
  br label %243

243:                                              ; preds = %242, %112
  %.pn75.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn, %242 ], [ %113, %112 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  br label %244

244:                                              ; preds = %243, %110
  %.pn75.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn.pn, %243 ], [ %111, %110 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #8
  br label %245

245:                                              ; preds = %244, %108
  %.pn75.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn.pn.pn, %244 ], [ %109, %108 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  br label %246

246:                                              ; preds = %106, %245, %104, %102
  %.pn75.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %105, %104 ], [ %103, %102 ], [ %.pn75.pn.pn.pn.pn.pn, %245 ], [ %107, %106 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  br label %247

247:                                              ; preds = %246, %100
  %.pn75.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn.pn.pn.pn.pn.pn, %246 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #8
  br label %248

248:                                              ; preds = %247, %98
  %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn.pn.pn.pn.pn.pn.pn, %247 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #8
  br label %249

249:                                              ; preds = %248, %96
  %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn, %248 ], [ %97, %96 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  br label %250

250:                                              ; preds = %249, %94
  %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %249 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  br label %251

251:                                              ; preds = %250, %92
  %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %250 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  call void @_ZNSt8valarrayIdED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  resume { ptr, i32 } %.pn75.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { 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 #7 = { noreturn nounwind }
attributes #8 = { 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, !10, i64 368}
!6 = !{!"_ZTSN3ipx5ModelE", !7, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !11, i64 24, !11, i64 152, !21, i64 280, !21, i64 296, !21, i64 312, !21, i64 328, !23, i64 344, !23, i64 352, !10, i64 360, !10, i64 364, !10, i64 368, !10, i64 372, !10, i64 376, !12, i64 384, !24, i64 408, !23, i64 432, !23, i64 440, !23, i64 448, !21, i64 456, !21, i64 472, !21, i64 488, !21, i64 504, !11, i64 520, !12, i64 648, !21, i64 672, !21, i64 688}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"_ZTSN3ipx12SparseMatrixE", !10, i64 0, !12, i64 8, !12, i64 32, !17, i64 56, !12, i64 80, !17, i64 104}
!12 = !{!"_ZTSSt6vectorIiSaIiEE", !13, i64 0}
!13 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!16 = !{!"any pointer", !8, i64 0}
!17 = !{!"_ZTSSt6vectorIdSaIdEE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!21 = !{!"_ZTSSt8valarrayIdE", !22, i64 0, !16, i64 8}
!22 = !{!"long", !8, i64 0}
!23 = !{!"double", !8, i64 0}
!24 = !{!"_ZTSSt6vectorIcSaIcEE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIcSaIcEE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataE", !16, i64 0, !16, i64 8, !16, i64 16}
!28 = !{!6, !10, i64 360}
!29 = !{!23, !23, i64 0}
!30 = !{!10, !10, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!8, !8, i64 0}
!34 = distinct !{!34, !32}
!35 = !{!36, !23, i64 176}
!36 = !{!"_ZTS8ipx_info", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !23, i64 80, !23, i64 88, !23, i64 96, !23, i64 104, !23, i64 112, !23, i64 120, !23, i64 128, !23, i64 136, !23, i64 144, !23, i64 152, !23, i64 160, !23, i64 168, !23, i64 176, !23, i64 184, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !23, i64 224, !23, i64 232, !23, i64 240, !23, i64 248, !23, i64 256, !23, i64 264, !23, i64 272, !23, i64 280, !23, i64 288, !23, i64 296, !23, i64 304, !23, i64 312, !23, i64 320, !23, i64 328, !23, i64 336, !23, i64 344, !23, i64 352, !23, i64 360, !23, i64 368, !23, i64 376, !23, i64 384, !23, i64 392, !23, i64 400, !23, i64 408, !10, i64 416, !10, i64 420, !10, i64 424, !10, i64 428, !23, i64 432, !23, i64 440, !23, i64 448, !23, i64 456}
!37 = !{!36, !23, i64 184}
!38 = !{!36, !23, i64 168}


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