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

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

%"struct.ipx::BasicLuHelper" = type { %struct.basiclu_object }
%struct.basiclu_object = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, double }

@_ZTISt9bad_alloc = external constant ptr
@.str.11 = external hidden unnamed_addr constant [29 x i8], align 1
@_ZTISt11logic_error = external constant ptr
@.str.12 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_ = external hidden unnamed_addr constant [210 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [43 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_(ptr noundef nonnull align 8 dereferenceable(16) %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, double noundef %6, i1 noundef zeroext %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca double, align 8
  %21 = alloca i8, align 1
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"struct.ipx::BasicLuHelper", align 8
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  store ptr %0, ptr %14, align 8, !tbaa !5
  store i32 %1, ptr %15, align 4, !tbaa !9
  store ptr %2, ptr %16, align 8, !tbaa !5
  store ptr %3, ptr %17, align 8, !tbaa !5
  store ptr %4, ptr %18, align 8, !tbaa !5
  store ptr %5, ptr %19, align 8, !tbaa !5
  store double %6, ptr %20, align 8, !tbaa !11
  %34 = zext i1 %7 to i8
  store i8 %34, ptr %21, align 1, !tbaa !13
  store ptr %8, ptr %22, align 8, !tbaa !5
  store ptr %9, ptr %23, align 8, !tbaa !5
  store ptr %10, ptr %24, align 8, !tbaa !5
  store ptr %11, ptr %25, align 8, !tbaa !5
  store ptr %12, ptr %26, align 8, !tbaa !5
  %35 = load ptr, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 96, ptr %27) #6
  %36 = load i32, ptr %15, align 4, !tbaa !9
  call void @_ZN3ipx13BasicLuHelperC2Ei(ptr noundef nonnull align 8 dereferenceable(96) %27, i32 noundef %36)
  %37 = load double, ptr %20, align 8, !tbaa !11
  %38 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %39 = getelementptr inbounds %struct.basiclu_object, ptr %38, i32 0, i32 1
  %40 = load ptr, ptr %39, align 8, !tbaa !15
  %41 = getelementptr inbounds double, ptr %40, i64 6
  store double %37, ptr %41, align 8, !tbaa !11
  %42 = load i8, ptr %21, align 1, !tbaa !13, !range !18, !noundef !19
  %43 = trunc i8 %42 to i1
  br i1 %43, label %44, label %53

44:                                               ; preds = %13
  %45 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %46 = getelementptr inbounds %struct.basiclu_object, ptr %45, i32 0, i32 1
  %47 = load ptr, ptr %46, align 8, !tbaa !15
  %48 = getelementptr inbounds double, ptr %47, i64 5
  store double 1.000000e-03, ptr %48, align 8, !tbaa !11
  %49 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %50 = getelementptr inbounds %struct.basiclu_object, ptr %49, i32 0, i32 1
  %51 = load ptr, ptr %50, align 8, !tbaa !15
  %52 = getelementptr inbounds double, ptr %51, i64 13
  store double 1.000000e+00, ptr %52, align 8, !tbaa !11
  br label %53

53:                                               ; preds = %44, %13
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %54 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %55 = load ptr, ptr %16, align 8, !tbaa !5
  %56 = load ptr, ptr %17, align 8, !tbaa !5
  %57 = load ptr, ptr %18, align 8, !tbaa !5
  %58 = load ptr, ptr %19, align 8, !tbaa !5
  %59 = invoke i32 @basiclu_obj_factorize(ptr noundef %54, ptr noundef %55, ptr noundef %56, ptr noundef %57, ptr noundef %58)
          to label %60 unwind label %65

60:                                               ; preds = %53
  store i32 %59, ptr %28, align 4, !tbaa !9
  %61 = load i32, ptr %28, align 4, !tbaa !9
  %62 = icmp eq i32 %61, -9
  br i1 %62, label %63, label %69

63:                                               ; preds = %60
  %64 = call ptr @__cxa_allocate_exception(i64 8) #6
  call void @_ZNSt9bad_allocC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %64) #6
  invoke void @__cxa_throw(ptr %64, ptr @_ZTISt9bad_alloc, ptr @_ZNSt9bad_allocD1Ev) #7
          to label %215 unwind label %65

65:                                               ; preds = %77, %63, %53
  %66 = landingpad { ptr, i32 }
          cleanup
  %67 = extractvalue { ptr, i32 } %66, 0
  store ptr %67, ptr %29, align 8
  %68 = extractvalue { ptr, i32 } %66, 1
  store i32 %68, ptr %30, align 4
  br label %209

69:                                               ; preds = %60
  %70 = load i32, ptr %28, align 4, !tbaa !9
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %72, label %82

72:                                               ; preds = %69
  %73 = load i32, ptr %28, align 4, !tbaa !9
  %74 = icmp ne i32 %73, 2
  br i1 %74, label %75, label %82

75:                                               ; preds = %72
  %76 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZNSt11logic_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %76, ptr noundef @.str.11)
          to label %77 unwind label %78

77:                                               ; preds = %75
  invoke void @__cxa_throw(ptr %76, ptr @_ZTISt11logic_error, ptr @_ZNSt11logic_errorD1Ev) #7
          to label %215 unwind label %65

78:                                               ; preds = %75
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %29, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %30, align 4
  call void @__cxa_free_exception(ptr %76) #6
  br label %209

82:                                               ; preds = %72, %69
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %83 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %84 = getelementptr inbounds %struct.basiclu_object, ptr %83, i32 0, i32 1
  %85 = load ptr, ptr %84, align 8, !tbaa !15
  %86 = getelementptr inbounds double, ptr %85, i64 101
  %87 = load double, ptr %86, align 8, !tbaa !11
  %88 = fptosi double %87 to i32
  store i32 %88, ptr %31, align 4, !tbaa !9
  %89 = load ptr, ptr %26, align 8, !tbaa !5
  call void @_ZNSt6vectorIiSaIiEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %89) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %90 = load i32, ptr %31, align 4, !tbaa !9
  store i32 %90, ptr %32, align 4, !tbaa !9
  br label %91

91:                                               ; preds = %99, %82
  %92 = load i32, ptr %32, align 4, !tbaa !9
  %93 = load i32, ptr %15, align 4, !tbaa !9
  %94 = icmp slt i32 %92, %93
  br i1 %94, label %96, label %95

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

96:                                               ; preds = %91
  %97 = load ptr, ptr %26, align 8, !tbaa !5
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %97, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %98 unwind label %102

98:                                               ; preds = %96
  br label %99

99:                                               ; preds = %98
  %100 = load i32, ptr %32, align 4, !tbaa !9
  %101 = add nsw i32 %100, 1
  store i32 %101, ptr %32, align 4, !tbaa !9
  br label %91, !llvm.loop !20

102:                                              ; preds = %96
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %29, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %208

106:                                              ; preds = %95
  %107 = load ptr, ptr %22, align 8, !tbaa !5
  %108 = load i32, ptr %15, align 4, !tbaa !9
  %109 = load i32, ptr %15, align 4, !tbaa !9
  %110 = load i32, ptr %15, align 4, !tbaa !9
  %111 = sitofp i32 %110 to double
  %112 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %113 = getelementptr inbounds %struct.basiclu_object, ptr %112, i32 0, i32 1
  %114 = load ptr, ptr %113, align 8, !tbaa !15
  %115 = getelementptr inbounds double, ptr %114, i64 76
  %116 = load double, ptr %115, align 8, !tbaa !11
  %117 = fadd double %111, %116
  %118 = fptosi double %117 to i32
  invoke void @_ZN3ipx12SparseMatrix6resizeEiii(ptr noundef nonnull align 8 dereferenceable(128) %107, i32 noundef %108, i32 noundef %109, i32 noundef %118)
          to label %119 unwind label %171

119:                                              ; preds = %106
  %120 = load ptr, ptr %23, align 8, !tbaa !5
  %121 = load i32, ptr %15, align 4, !tbaa !9
  %122 = load i32, ptr %15, align 4, !tbaa !9
  %123 = load i32, ptr %15, align 4, !tbaa !9
  %124 = sitofp i32 %123 to double
  %125 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %126 = getelementptr inbounds %struct.basiclu_object, ptr %125, i32 0, i32 1
  %127 = load ptr, ptr %126, align 8, !tbaa !15
  %128 = getelementptr inbounds double, ptr %127, i64 77
  %129 = load double, ptr %128, align 8, !tbaa !11
  %130 = fadd double %124, %129
  %131 = fptosi double %130 to i32
  invoke void @_ZN3ipx12SparseMatrix6resizeEiii(ptr noundef nonnull align 8 dereferenceable(128) %120, i32 noundef %121, i32 noundef %122, i32 noundef %131)
          to label %132 unwind label %171

132:                                              ; preds = %119
  %133 = load ptr, ptr %24, align 8, !tbaa !5
  %134 = load i32, ptr %15, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %133, i64 noundef %135)
          to label %136 unwind label %171

136:                                              ; preds = %132
  %137 = load ptr, ptr %25, align 8, !tbaa !5
  %138 = load i32, ptr %15, align 4, !tbaa !9
  %139 = sext i32 %138 to i64
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %137, i64 noundef %139)
          to label %140 unwind label %171

140:                                              ; preds = %136
  %141 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %142 = load ptr, ptr %24, align 8, !tbaa !5
  %143 = call noundef ptr @_ZNSt6vectorIiSaIiEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %142) #6
  %144 = load ptr, ptr %25, align 8, !tbaa !5
  %145 = call noundef ptr @_ZNSt6vectorIiSaIiEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %144) #6
  %146 = load ptr, ptr %22, align 8, !tbaa !5
  %147 = invoke noundef ptr @_ZN3ipx12SparseMatrix6colptrEv(ptr noundef nonnull align 8 dereferenceable(128) %146)
          to label %148 unwind label %171

148:                                              ; preds = %140
  %149 = load ptr, ptr %22, align 8, !tbaa !5
  %150 = invoke noundef ptr @_ZN3ipx12SparseMatrix6rowidxEv(ptr noundef nonnull align 8 dereferenceable(128) %149)
          to label %151 unwind label %171

151:                                              ; preds = %148
  %152 = load ptr, ptr %22, align 8, !tbaa !5
  %153 = invoke noundef ptr @_ZN3ipx12SparseMatrix6valuesEv(ptr noundef nonnull align 8 dereferenceable(128) %152)
          to label %154 unwind label %171

154:                                              ; preds = %151
  %155 = load ptr, ptr %23, align 8, !tbaa !5
  %156 = invoke noundef ptr @_ZN3ipx12SparseMatrix6colptrEv(ptr noundef nonnull align 8 dereferenceable(128) %155)
          to label %157 unwind label %171

157:                                              ; preds = %154
  %158 = load ptr, ptr %23, align 8, !tbaa !5
  %159 = invoke noundef ptr @_ZN3ipx12SparseMatrix6rowidxEv(ptr noundef nonnull align 8 dereferenceable(128) %158)
          to label %160 unwind label %171

160:                                              ; preds = %157
  %161 = load ptr, ptr %23, align 8, !tbaa !5
  %162 = invoke noundef ptr @_ZN3ipx12SparseMatrix6valuesEv(ptr noundef nonnull align 8 dereferenceable(128) %161)
          to label %163 unwind label %171

163:                                              ; preds = %160
  %164 = invoke i32 @basiclu_obj_get_factors(ptr noundef %141, ptr noundef %143, ptr noundef %145, ptr noundef %147, ptr noundef %150, ptr noundef %153, ptr noundef %156, ptr noundef %159, ptr noundef %162)
          to label %165 unwind label %171

165:                                              ; preds = %163
  store i32 %164, ptr %28, align 4, !tbaa !9
  %166 = load i32, ptr %28, align 4, !tbaa !9
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %168, label %179

168:                                              ; preds = %165
  %169 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZNSt11logic_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %169, ptr noundef @.str.12)
          to label %170 unwind label %175

170:                                              ; preds = %168
  invoke void @__cxa_throw(ptr %169, ptr @_ZTISt11logic_error, ptr @_ZNSt11logic_errorD1Ev) #7
          to label %215 unwind label %171

171:                                              ; preds = %170, %163, %160, %157, %154, %151, %148, %140, %136, %132, %119, %106
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %29, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %30, align 4
  br label %208

175:                                              ; preds = %168
  %176 = landingpad { ptr, i32 }
          cleanup
  %177 = extractvalue { ptr, i32 } %176, 0
  store ptr %177, ptr %29, align 8
  %178 = extractvalue { ptr, i32 } %176, 1
  store i32 %178, ptr %30, align 4
  call void @__cxa_free_exception(ptr %169) #6
  br label %208

179:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  %180 = load ptr, ptr %22, align 8, !tbaa !5
  %181 = invoke noundef i32 @_ZN3ipx14RemoveDiagonalERNS_12SparseMatrixEPd(ptr noundef nonnull align 8 dereferenceable(128) %180, ptr noundef null)
          to label %182 unwind label %188

182:                                              ; preds = %179
  store i32 %181, ptr %33, align 4, !tbaa !9
  %183 = load i32, ptr %33, align 4, !tbaa !9
  %184 = load i32, ptr %15, align 4, !tbaa !9
  %185 = icmp eq i32 %183, %184
  br i1 %185, label %186, label %187

186:                                              ; preds = %182
  br label %193

187:                                              ; preds = %182
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.14, i32 noundef 67, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_) #8
  unreachable

188:                                              ; preds = %193, %179
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %29, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  br label %208

192:                                              ; No predecessors!
  br label %193

193:                                              ; preds = %192, %186
  %194 = load ptr, ptr %22, align 8, !tbaa !5
  %195 = invoke noundef i32 @_ZNK3ipx12SparseMatrix7entriesEv(ptr noundef nonnull align 8 dereferenceable(128) %194)
          to label %196 unwind label %188

196:                                              ; preds = %193
  %197 = sitofp i32 %195 to double
  %198 = getelementptr inbounds %"struct.ipx::BasicLuHelper", ptr %27, i32 0, i32 0
  %199 = getelementptr inbounds %struct.basiclu_object, ptr %198, i32 0, i32 1
  %200 = load ptr, ptr %199, align 8, !tbaa !15
  %201 = getelementptr inbounds double, ptr %200, i64 76
  %202 = load double, ptr %201, align 8, !tbaa !11
  %203 = fcmp oeq double %197, %202
  br i1 %203, label %204, label %205

204:                                              ; preds = %196
  br label %207

205:                                              ; preds = %196
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.14, i32 noundef 68, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_) #8
  unreachable

206:                                              ; No predecessors!
  br label %207

207:                                              ; preds = %206, %204
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @_ZN3ipx13BasicLuHelperD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %27) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr %27) #6
  ret void

208:                                              ; preds = %188, %175, %171, %102
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %209

209:                                              ; preds = %208, %78, %65
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @_ZN3ipx13BasicLuHelperD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %27) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr %27) #6
  br label %210

210:                                              ; preds = %209
  %211 = load ptr, ptr %29, align 8
  %212 = load i32, ptr %30, align 4
  %213 = insertvalue { ptr, i32 } poison, ptr %211, 0
  %214 = insertvalue { ptr, i32 } %213, i32 %212, 1
  resume { ptr, i32 } %214

215:                                              ; preds = %170, %77, %63
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3ipx13BasicLuHelperC2Ei(ptr noundef nonnull align 8 dereferenceable(96), i32 noundef) unnamed_addr #1 align 2

declare i32 @basiclu_obj_factorize(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare ptr @__cxa_allocate_exception(i64)

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

; Function Attrs: nounwind
declare void @_ZNSt9bad_allocD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4

declare void @__cxa_throw(ptr, ptr, ptr)

declare void @_ZNSt11logic_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #2

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt11logic_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4

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

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

declare void @_ZN3ipx12SparseMatrix6resizeEiii(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, i32 noundef, i32 noundef) #2

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

declare i32 @basiclu_obj_get_factors(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

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

declare noundef i32 @_ZN3ipx14RemoveDiagonalERNS_12SparseMatrixEPd(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx12SparseMatrix7entriesEv(ptr noundef nonnull align 8 dereferenceable(128)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3ipx13BasicLuHelperD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #3 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { 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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nounwind }
attributes #7 = { noreturn }
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, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !6, i64 8}
!16 = !{!"_ZTSN3ipx13BasicLuHelperE", !17, i64 0}
!17 = !{!"_ZTS14basiclu_object", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !10, i64 80, !12, i64 88}
!18 = !{i8 0, i8 2}
!19 = !{}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}


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

%"struct.ipx::BasicLuHelper" = type { %struct.basiclu_object }
%struct.basiclu_object = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, double }

@_ZTISt9bad_alloc = external constant ptr
@.str.11 = external hidden unnamed_addr constant [29 x i8], align 1
@_ZTISt11logic_error = external constant ptr
@.str.12 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [79 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_ = external hidden unnamed_addr constant [210 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [43 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_(ptr nocapture noundef nonnull readnone align 8 dereferenceable(16) %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, double noundef %6, i1 noundef zeroext %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %14 = alloca %"struct.ipx::BasicLuHelper", align 8
  %15 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %14) #6
  call void @_ZN3ipx13BasicLuHelperC2Ei(ptr noundef nonnull align 8 dereferenceable(96) %14, i32 noundef %1)
  %16 = getelementptr inbounds i8, ptr %14, i64 8
  %17 = load ptr, ptr %16, align 8, !tbaa !5
  %18 = getelementptr inbounds i8, ptr %17, i64 48
  store double %6, ptr %18, align 8, !tbaa !13
  br i1 %7, label %19, label %22

19:                                               ; preds = %13
  %20 = getelementptr inbounds i8, ptr %17, i64 40
  store double 1.000000e-03, ptr %20, align 8, !tbaa !13
  %21 = getelementptr inbounds i8, ptr %17, i64 104
  store double 1.000000e+00, ptr %21, align 8, !tbaa !13
  br label %22

22:                                               ; preds = %19, %13
  %23 = invoke i32 @basiclu_obj_factorize(ptr noundef nonnull %14, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5)
          to label %24 unwind label %28

24:                                               ; preds = %22
  %25 = icmp eq i32 %23, -9
  br i1 %25, label %26, label %30

26:                                               ; preds = %24
  %27 = call ptr @__cxa_allocate_exception(i64 8) #6
  call void @_ZNSt9bad_allocC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #6
  br label %.invoke

28:                                               ; preds = %.invoke, %22
  %29 = landingpad { ptr, i32 }
          cleanup
  br label %100

30:                                               ; preds = %24
  %31 = and i32 %23, -3
  %or.cond.not = icmp eq i32 %31, 0
  br i1 %or.cond.not, label %39, label %32

32:                                               ; preds = %30
  %33 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZNSt11logic_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef nonnull @.str.11)
          to label %.invoke unwind label %37

.invoke:                                          ; preds = %32, %26
  %34 = phi ptr [ %27, %26 ], [ %33, %32 ]
  %35 = phi ptr [ @_ZTISt9bad_alloc, %26 ], [ @_ZTISt11logic_error, %32 ]
  %36 = phi ptr [ @_ZNSt9bad_allocD1Ev, %26 ], [ @_ZNSt11logic_errorD1Ev, %32 ]
  invoke void @__cxa_throw(ptr nonnull %34, ptr nonnull %35, ptr nonnull %36) #7
          to label %.cont unwind label %28

.cont:                                            ; preds = %.invoke
  unreachable

37:                                               ; preds = %32
  %38 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %33) #6
  br label %100

39:                                               ; preds = %30
  %40 = load ptr, ptr %16, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %40, i64 808
  %42 = load double, ptr %41, align 8, !tbaa !13
  %43 = fptosi double %42 to i32
  call void @_ZNSt6vectorIiSaIiEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #6
  store i32 %43, ptr %15, align 4, !tbaa !14
  %44 = icmp slt i32 %43, %1
  br i1 %44, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %51, %39
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  %45 = sitofp i32 %1 to double
  %46 = load ptr, ptr %16, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %46, i64 608
  %48 = load double, ptr %47, align 8, !tbaa !13
  %49 = fadd double %48, %45
  %50 = fptosi double %49 to i32
  invoke void @_ZN3ipx12SparseMatrix6resizeEiii(ptr noundef nonnull align 8 dereferenceable(128) %8, i32 noundef %1, i32 noundef %1, i32 noundef %50)
          to label %57 unwind label %80

.lr.ph:                                           ; preds = %39, %51
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %51 unwind label %55

51:                                               ; preds = %.lr.ph
  %52 = load i32, ptr %15, align 4, !tbaa !14
  %53 = add nsw i32 %52, 1
  store i32 %53, ptr %15, align 4, !tbaa !14
  %54 = icmp slt i32 %53, %1
  br i1 %54, label %.lr.ph, label %._crit_edge, !llvm.loop !15

55:                                               ; preds = %.lr.ph
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #6
  br label %100

57:                                               ; preds = %._crit_edge
  %58 = load ptr, ptr %16, align 8, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %58, i64 616
  %60 = load double, ptr %59, align 8, !tbaa !13
  %61 = fadd double %60, %45
  %62 = fptosi double %61 to i32
  invoke void @_ZN3ipx12SparseMatrix6resizeEiii(ptr noundef nonnull align 8 dereferenceable(128) %9, i32 noundef %1, i32 noundef %1, i32 noundef %62)
          to label %63 unwind label %80

63:                                               ; preds = %57
  %64 = sext i32 %1 to i64
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %64)
          to label %65 unwind label %80

65:                                               ; preds = %63
  invoke void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %64)
          to label %66 unwind label %80

66:                                               ; preds = %65
  %67 = call noundef ptr @_ZNSt6vectorIiSaIiEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  %68 = call noundef ptr @_ZNSt6vectorIiSaIiEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  %69 = call noundef ptr @_ZN3ipx12SparseMatrix6colptrEv(ptr noundef nonnull align 8 dereferenceable(128) %8)
  %70 = call noundef ptr @_ZN3ipx12SparseMatrix6rowidxEv(ptr noundef nonnull align 8 dereferenceable(128) %8)
  %71 = call noundef ptr @_ZN3ipx12SparseMatrix6valuesEv(ptr noundef nonnull align 8 dereferenceable(128) %8)
  %72 = call noundef ptr @_ZN3ipx12SparseMatrix6colptrEv(ptr noundef nonnull align 8 dereferenceable(128) %9)
  %73 = call noundef ptr @_ZN3ipx12SparseMatrix6rowidxEv(ptr noundef nonnull align 8 dereferenceable(128) %9)
  %74 = call noundef ptr @_ZN3ipx12SparseMatrix6valuesEv(ptr noundef nonnull align 8 dereferenceable(128) %9)
  %75 = invoke i32 @basiclu_obj_get_factors(ptr noundef nonnull %14, ptr noundef %67, ptr noundef %68, ptr noundef %69, ptr noundef %70, ptr noundef %71, ptr noundef %72, ptr noundef %73, ptr noundef %74)
          to label %76 unwind label %80

76:                                               ; preds = %66
  %.not = icmp eq i32 %75, 0
  br i1 %.not, label %84, label %77

77:                                               ; preds = %76
  %78 = call ptr @__cxa_allocate_exception(i64 16) #6
  invoke void @_ZNSt11logic_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %78, ptr noundef nonnull @.str.12)
          to label %79 unwind label %82

79:                                               ; preds = %77
  invoke void @__cxa_throw(ptr nonnull %78, ptr nonnull @_ZTISt11logic_error, ptr nonnull @_ZNSt11logic_errorD1Ev) #7
          to label %101 unwind label %80

80:                                               ; preds = %79, %66, %65, %63, %57, %._crit_edge
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %100

82:                                               ; preds = %77
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %78) #6
  br label %100

84:                                               ; preds = %76
  %85 = invoke noundef i32 @_ZN3ipx14RemoveDiagonalERNS_12SparseMatrixEPd(ptr noundef nonnull align 8 dereferenceable(128) %8, ptr noundef null)
          to label %86 unwind label %89

86:                                               ; preds = %84
  %87 = icmp eq i32 %85, %1
  br i1 %87, label %91, label %88

88:                                               ; preds = %86
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14, i32 noundef 67, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_) #8
  unreachable

89:                                               ; preds = %84
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %100

91:                                               ; preds = %86
  %92 = call noundef i32 @_ZNK3ipx12SparseMatrix7entriesEv(ptr noundef nonnull align 8 dereferenceable(128) %8)
  %93 = sitofp i32 %92 to double
  %94 = load ptr, ptr %16, align 8, !tbaa !5
  %95 = getelementptr inbounds i8, ptr %94, i64 608
  %96 = load double, ptr %95, align 8, !tbaa !13
  %97 = fcmp oeq double %96, %93
  br i1 %97, label %99, label %98

98:                                               ; preds = %91
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.14, i32 noundef 68, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx13BasicLuKernel10_FactorizeEiPKiS2_S2_PKddbPNS_12SparseMatrixES6_PSt6vectorIiSaIiEESA_SA_) #8
  unreachable

99:                                               ; preds = %91
  call void @_ZN3ipx13BasicLuHelperD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %14) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %14) #6
  ret void

100:                                              ; preds = %55, %80, %82, %89, %37, %28
  %.pn47 = phi { ptr, i32 } [ %29, %28 ], [ %38, %37 ], [ %56, %55 ], [ %81, %80 ], [ %83, %82 ], [ %90, %89 ]
  call void @_ZN3ipx13BasicLuHelperD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %14) #6
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %14) #6
  resume { ptr, i32 } %.pn47

101:                                              ; preds = %79
  unreachable
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3ipx13BasicLuHelperC2Ei(ptr noundef nonnull align 8 dereferenceable(96), i32 noundef) unnamed_addr #1 align 2

declare i32 @basiclu_obj_factorize(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

; Function Attrs: nounwind
declare void @_ZNSt9bad_allocD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

declare void @_ZNSt11logic_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #2

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt11logic_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3 align 2

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

declare void @_ZN3ipx12SparseMatrix6resizeEiii(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

declare i32 @basiclu_obj_get_factors(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

declare noundef i32 @_ZN3ipx14RemoveDiagonalERNS_12SparseMatrixEPd(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3ipx12SparseMatrix7entriesEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3ipx13BasicLuHelperD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #3 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { 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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nounwind }
attributes #7 = { noreturn }
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, !8, i64 8}
!6 = !{!"_ZTSN3ipx13BasicLuHelperE", !7, i64 0}
!7 = !{!"_ZTS14basiclu_object", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !8, i64 48, !8, i64 56, !8, i64 64, !8, i64 72, !11, i64 80, !12, i64 88}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"double", !9, i64 0}
!13 = !{!12, !12, i64 0}
!14 = !{!11, !11, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}


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