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

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

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

@.str.18 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [17 x i8], align 1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx5Model8LoadDualEv(ptr noundef nonnull align 8 dereferenceable(704) %0) #2 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca %"class.ipx::SparseMatrix", align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca double, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca double, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %23 = load ptr, ptr %2, align 8
  %24 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 15
  %25 = load i32, ptr %24, align 8, !tbaa !9
  %26 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 1
  store i32 %25, ptr %26, align 4, !tbaa !29
  %27 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 13
  %28 = load i32, ptr %27, align 8, !tbaa !30
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 18
  %31 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %30) #7
  %32 = add i64 %29, %31
  %33 = trunc i64 %32 to i32
  %34 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  store i32 %33, ptr %34, align 8, !tbaa !31
  %35 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 0
  store i8 1, ptr %35, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #7
  store i32 0, ptr %3, align 4, !tbaa !33
  br label %36

36:                                               ; preds = %61, %1
  %37 = load i32, ptr %3, align 4, !tbaa !33
  %38 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 15
  %39 = load i32, ptr %38, align 8, !tbaa !9
  %40 = icmp slt i32 %37, %39
  br i1 %40, label %42, label %41

41:                                               ; preds = %36
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #7
  br label %64

42:                                               ; preds = %36
  %43 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 26
  %44 = load i32, ptr %3, align 4, !tbaa !33
  %45 = sext i32 %44 to i64
  %46 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %43, i64 noundef %45) #7
  %47 = load double, ptr %46, align 8, !tbaa !34
  %48 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %47)
  br i1 %48, label %49, label %60

49:                                               ; preds = %42
  %50 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 25
  %51 = load i32, ptr %3, align 4, !tbaa !33
  %52 = sext i32 %51 to i64
  %53 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %50, i64 noundef %52) #7
  %54 = load double, ptr %53, align 8, !tbaa !34
  %55 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %54)
  br i1 %55, label %56, label %57

56:                                               ; preds = %49
  br label %59

57:                                               ; preds = %49
  call void @__assert_fail(ptr noundef @.str.34, ptr noundef @.str.18, i32 noundef 669, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv) #8
  unreachable

58:                                               ; No predecessors!
  br label %59

59:                                               ; preds = %58, %56
  br label %60

60:                                               ; preds = %59, %42
  br label %61

61:                                               ; preds = %60
  %62 = load i32, ptr %3, align 4, !tbaa !33
  %63 = add nsw i32 %62, 1
  store i32 %63, ptr %3, align 4, !tbaa !33
  br label %36, !llvm.loop !35

64:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 128, ptr %4) #7
  %65 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 27
  call void @_ZN3ipx9TransposeERKNS_12SparseMatrixE(ptr dead_on_unwind writable sret(%"class.ipx::SparseMatrix") align 8 %4, ptr noundef nonnull align 8 dereferenceable(128) %65)
  %66 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 5
  %67 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZN3ipx12SparseMatrixaSEOS0_(ptr noundef nonnull align 8 dereferenceable(128) %66, ptr noundef nonnull align 8 dereferenceable(128) %4) #7
  call void @_ZN3ipx12SparseMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %4) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  store i32 0, ptr %5, align 4, !tbaa !33
  br label %68

68:                                               ; preds = %86, %64
  %69 = load i32, ptr %5, align 4, !tbaa !33
  %70 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 15
  %71 = load i32, ptr %70, align 8, !tbaa !9
  %72 = icmp slt i32 %69, %71
  br i1 %72, label %74, label %73

73:                                               ; preds = %68
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %89

74:                                               ; preds = %68
  %75 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 26
  %76 = load i32, ptr %5, align 4, !tbaa !33
  %77 = sext i32 %76 to i64
  %78 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %75, i64 noundef %77) #7
  %79 = load double, ptr %78, align 8, !tbaa !34
  %80 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %79)
  br i1 %80, label %81, label %85

81:                                               ; preds = %74
  %82 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 5
  %83 = load i32, ptr %5, align 4, !tbaa !33
  call void @_ZN3ipx12SparseMatrix9push_backEid(ptr noundef nonnull align 8 dereferenceable(128) %82, i32 noundef %83, double noundef -1.000000e+00)
  %84 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 5
  call void @_ZN3ipx12SparseMatrix10add_columnEv(ptr noundef nonnull align 8 dereferenceable(128) %84)
  br label %85

85:                                               ; preds = %81, %74
  br label %86

86:                                               ; preds = %85
  %87 = load i32, ptr %5, align 4, !tbaa !33
  %88 = add nsw i32 %87, 1
  store i32 %88, ptr %5, align 4, !tbaa !33
  br label %68, !llvm.loop !37

89:                                               ; preds = %73
  %90 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 5
  %91 = call noundef i32 @_ZNK3ipx12SparseMatrix4colsEv(ptr noundef nonnull align 8 dereferenceable(128) %90)
  %92 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %93 = load i32, ptr %92, align 8, !tbaa !31
  %94 = icmp eq i32 %91, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %89
  br label %98

96:                                               ; preds = %89
  call void @__assert_fail(ptr noundef @.str.35, ptr noundef @.str.18, i32 noundef 680, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv) #8
  unreachable

97:                                               ; No predecessors!
  br label %98

98:                                               ; preds = %97, %95
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  store i32 0, ptr %6, align 4, !tbaa !33
  br label %99

99:                                               ; preds = %109, %98
  %100 = load i32, ptr %6, align 4, !tbaa !33
  %101 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 1
  %102 = load i32, ptr %101, align 4, !tbaa !29
  %103 = icmp slt i32 %100, %102
  br i1 %103, label %105, label %104

104:                                              ; preds = %99
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  br label %112

105:                                              ; preds = %99
  %106 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 5
  %107 = load i32, ptr %6, align 4, !tbaa !33
  call void @_ZN3ipx12SparseMatrix9push_backEid(ptr noundef nonnull align 8 dereferenceable(128) %106, i32 noundef %107, double noundef 1.000000e+00)
  %108 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 5
  call void @_ZN3ipx12SparseMatrix10add_columnEv(ptr noundef nonnull align 8 dereferenceable(128) %108)
  br label %109

109:                                              ; preds = %105
  %110 = load i32, ptr %6, align 4, !tbaa !33
  %111 = add nsw i32 %110, 1
  store i32 %111, ptr %6, align 4, !tbaa !33
  br label %99, !llvm.loop !38

112:                                              ; preds = %104
  %113 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 23
  %114 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 7
  %115 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %114, ptr noundef nonnull align 8 dereferenceable(16) %113)
  %116 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 8
  %117 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %118 = load i32, ptr %117, align 8, !tbaa !31
  %119 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 1
  %120 = load i32, ptr %119, align 4, !tbaa !29
  %121 = add nsw i32 %118, %120
  %122 = sext i32 %121 to i64
  call void @_ZNSt8valarrayIdE6resizeEmd(ptr noundef nonnull align 8 dereferenceable(16) %116, i64 noundef %122, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  store i32 0, ptr %7, align 4, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %123 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 24
  store ptr %123, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %124 = load ptr, ptr %8, align 8, !tbaa !5
  %125 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %124) #7
  store ptr %125, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = call noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %126) #7
  store ptr %127, ptr %10, align 8, !tbaa !5
  br label %128

128:                                              ; preds = %143, %112
  %129 = load ptr, ptr %9, align 8, !tbaa !5
  %130 = load ptr, ptr %10, align 8, !tbaa !5
  %131 = icmp ne ptr %129, %130
  br i1 %131, label %133, label %132

132:                                              ; preds = %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br label %146

133:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %134 = load ptr, ptr %9, align 8, !tbaa !5
  %135 = load double, ptr %134, align 8, !tbaa !34
  store double %135, ptr %11, align 8, !tbaa !34
  %136 = load double, ptr %11, align 8, !tbaa !34
  %137 = fneg double %136
  %138 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 8
  %139 = load i32, ptr %7, align 4, !tbaa !33
  %140 = add nsw i32 %139, 1
  store i32 %140, ptr %7, align 4, !tbaa !33
  %141 = sext i32 %139 to i64
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %138, i64 noundef %141) #7
  store double %137, ptr %142, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %143

143:                                              ; preds = %133
  %144 = load ptr, ptr %9, align 8, !tbaa !5
  %145 = getelementptr inbounds double, ptr %144, i32 1
  store ptr %145, ptr %9, align 8, !tbaa !5
  br label %128

146:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %147 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 26
  store ptr %147, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  %149 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %148) #7
  store ptr %149, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %150 = load ptr, ptr %12, align 8, !tbaa !5
  %151 = call noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %150) #7
  store ptr %151, ptr %14, align 8, !tbaa !5
  br label %152

152:                                              ; preds = %170, %146
  %153 = load ptr, ptr %13, align 8, !tbaa !5
  %154 = load ptr, ptr %14, align 8, !tbaa !5
  %155 = icmp ne ptr %153, %154
  br i1 %155, label %157, label %156

156:                                              ; preds = %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  br label %173

157:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %158 = load ptr, ptr %13, align 8, !tbaa !5
  %159 = load double, ptr %158, align 8, !tbaa !34
  store double %159, ptr %15, align 8, !tbaa !34
  %160 = load double, ptr %15, align 8, !tbaa !34
  %161 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %160)
  br i1 %161, label %162, label %169

162:                                              ; preds = %157
  %163 = load double, ptr %15, align 8, !tbaa !34
  %164 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 8
  %165 = load i32, ptr %7, align 4, !tbaa !33
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %7, align 4, !tbaa !33
  %167 = sext i32 %165 to i64
  %168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %164, i64 noundef %167) #7
  store double %163, ptr %168, align 8, !tbaa !34
  br label %169

169:                                              ; preds = %162, %157
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %170

170:                                              ; preds = %169
  %171 = load ptr, ptr %13, align 8, !tbaa !5
  %172 = getelementptr inbounds double, ptr %171, i32 1
  store ptr %172, ptr %13, align 8, !tbaa !5
  br label %152

173:                                              ; preds = %156
  %174 = load i32, ptr %7, align 4, !tbaa !33
  %175 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %176 = load i32, ptr %175, align 8, !tbaa !31
  %177 = icmp eq i32 %174, %176
  br i1 %177, label %178, label %179

178:                                              ; preds = %173
  br label %181

179:                                              ; preds = %173
  call void @__assert_fail(ptr noundef @.str.36, ptr noundef @.str.18, i32 noundef 695, ptr noundef @__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv) #8
  unreachable

180:                                              ; No predecessors!
  br label %181

181:                                              ; preds = %180, %178
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %182 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 25
  store ptr %182, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %183 = load ptr, ptr %16, align 8, !tbaa !5
  %184 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %183) #7
  store ptr %184, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %185 = load ptr, ptr %16, align 8, !tbaa !5
  %186 = call noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %185) #7
  store ptr %186, ptr %18, align 8, !tbaa !5
  br label %187

187:                                              ; preds = %208, %181
  %188 = load ptr, ptr %17, align 8, !tbaa !5
  %189 = load ptr, ptr %18, align 8, !tbaa !5
  %190 = icmp ne ptr %188, %189
  br i1 %190, label %192, label %191

191:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %211

192:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %193 = load ptr, ptr %17, align 8, !tbaa !5
  %194 = load double, ptr %193, align 8, !tbaa !34
  store double %194, ptr %19, align 8, !tbaa !34
  %195 = load double, ptr %19, align 8, !tbaa !34
  %196 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %195)
  br i1 %196, label %197, label %200

197:                                              ; preds = %192
  %198 = load double, ptr %19, align 8, !tbaa !34
  %199 = fneg double %198
  br label %201

200:                                              ; preds = %192
  br label %201

201:                                              ; preds = %200, %197
  %202 = phi double [ %199, %197 ], [ 0.000000e+00, %200 ]
  %203 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 8
  %204 = load i32, ptr %7, align 4, !tbaa !33
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %7, align 4, !tbaa !33
  %206 = sext i32 %204 to i64
  %207 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %203, i64 noundef %206) #7
  store double %202, ptr %207, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %208

208:                                              ; preds = %201
  %209 = load ptr, ptr %17, align 8, !tbaa !5
  %210 = getelementptr inbounds double, ptr %209, i32 1
  store ptr %210, ptr %17, align 8, !tbaa !5
  br label %187

211:                                              ; preds = %191
  %212 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 9
  %213 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %214 = load i32, ptr %213, align 8, !tbaa !31
  %215 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 1
  %216 = load i32, ptr %215, align 4, !tbaa !29
  %217 = add nsw i32 %214, %216
  %218 = sext i32 %217 to i64
  call void @_ZNSt8valarrayIdE6resizeEmd(ptr noundef nonnull align 8 dereferenceable(16) %212, i64 noundef %218, double noundef 0.000000e+00)
  %219 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 10
  %220 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %221 = load i32, ptr %220, align 8, !tbaa !31
  %222 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 1
  %223 = load i32, ptr %222, align 4, !tbaa !29
  %224 = add nsw i32 %221, %223
  %225 = sext i32 %224 to i64
  call void @_ZNSt8valarrayIdE6resizeEmd(ptr noundef nonnull align 8 dereferenceable(16) %219, i64 noundef %225, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 0, ptr %20, align 4, !tbaa !33
  br label %226

226:                                              ; preds = %267, %211
  %227 = load i32, ptr %20, align 4, !tbaa !33
  %228 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 13
  %229 = load i32, ptr %228, align 8, !tbaa !30
  %230 = icmp slt i32 %227, %229
  br i1 %230, label %232, label %231

231:                                              ; preds = %226
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %270

232:                                              ; preds = %226
  %233 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 19
  %234 = load i32, ptr %20, align 4, !tbaa !33
  %235 = sext i32 %234 to i64
  %236 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %233, i64 noundef %235) #7
  %237 = load i8, ptr %236, align 1, !tbaa !39
  %238 = sext i8 %237 to i32
  switch i32 %238, label %266 [
    i32 61, label %239
    i32 60, label %248
    i32 62, label %257
  ]

239:                                              ; preds = %232
  %240 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 9
  %241 = load i32, ptr %20, align 4, !tbaa !33
  %242 = sext i32 %241 to i64
  %243 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %240, i64 noundef %242) #7
  store double 0xFFF0000000000000, ptr %243, align 8, !tbaa !34
  %244 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 10
  %245 = load i32, ptr %20, align 4, !tbaa !33
  %246 = sext i32 %245 to i64
  %247 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %244, i64 noundef %246) #7
  store double 0x7FF0000000000000, ptr %247, align 8, !tbaa !34
  br label %266

248:                                              ; preds = %232
  %249 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 9
  %250 = load i32, ptr %20, align 4, !tbaa !33
  %251 = sext i32 %250 to i64
  %252 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %249, i64 noundef %251) #7
  store double 0xFFF0000000000000, ptr %252, align 8, !tbaa !34
  %253 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 10
  %254 = load i32, ptr %20, align 4, !tbaa !33
  %255 = sext i32 %254 to i64
  %256 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %253, i64 noundef %255) #7
  store double 0.000000e+00, ptr %256, align 8, !tbaa !34
  br label %266

257:                                              ; preds = %232
  %258 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 9
  %259 = load i32, ptr %20, align 4, !tbaa !33
  %260 = sext i32 %259 to i64
  %261 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %258, i64 noundef %260) #7
  store double 0.000000e+00, ptr %261, align 8, !tbaa !34
  %262 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 10
  %263 = load i32, ptr %20, align 4, !tbaa !33
  %264 = sext i32 %263 to i64
  %265 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %262, i64 noundef %264) #7
  store double 0x7FF0000000000000, ptr %265, align 8, !tbaa !34
  br label %266

266:                                              ; preds = %257, %248, %239, %232
  br label %267

267:                                              ; preds = %266
  %268 = load i32, ptr %20, align 4, !tbaa !33
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %20, align 4, !tbaa !33
  br label %226, !llvm.loop !40

270:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %271 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 13
  %272 = load i32, ptr %271, align 8, !tbaa !30
  store i32 %272, ptr %21, align 4, !tbaa !33
  br label %273

273:                                              ; preds = %288, %270
  %274 = load i32, ptr %21, align 4, !tbaa !33
  %275 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %276 = load i32, ptr %275, align 8, !tbaa !31
  %277 = icmp slt i32 %274, %276
  br i1 %277, label %279, label %278

278:                                              ; preds = %273
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %291

279:                                              ; preds = %273
  %280 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 9
  %281 = load i32, ptr %21, align 4, !tbaa !33
  %282 = sext i32 %281 to i64
  %283 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %280, i64 noundef %282) #7
  store double 0.000000e+00, ptr %283, align 8, !tbaa !34
  %284 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 10
  %285 = load i32, ptr %21, align 4, !tbaa !33
  %286 = sext i32 %285 to i64
  %287 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %284, i64 noundef %286) #7
  store double 0x7FF0000000000000, ptr %287, align 8, !tbaa !34
  br label %288

288:                                              ; preds = %279
  %289 = load i32, ptr %21, align 4, !tbaa !33
  %290 = add nsw i32 %289, 1
  store i32 %290, ptr %21, align 4, !tbaa !33
  br label %273, !llvm.loop !41

291:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !33
  br label %292

292:                                              ; preds = %321, %291
  %293 = load i32, ptr %22, align 4, !tbaa !33
  %294 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 15
  %295 = load i32, ptr %294, align 8, !tbaa !9
  %296 = icmp slt i32 %293, %295
  br i1 %296, label %298, label %297

297:                                              ; preds = %292
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %324

298:                                              ; preds = %292
  %299 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 9
  %300 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %301 = load i32, ptr %300, align 8, !tbaa !31
  %302 = load i32, ptr %22, align 4, !tbaa !33
  %303 = add nsw i32 %301, %302
  %304 = sext i32 %303 to i64
  %305 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %299, i64 noundef %304) #7
  store double 0.000000e+00, ptr %305, align 8, !tbaa !34
  %306 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 25
  %307 = load i32, ptr %22, align 4, !tbaa !33
  %308 = sext i32 %307 to i64
  %309 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %306, i64 noundef %308) #7
  %310 = load double, ptr %309, align 8, !tbaa !34
  %311 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %310)
  %312 = zext i1 %311 to i64
  %313 = select i1 %311, double 0x7FF0000000000000, double 0.000000e+00
  %314 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 10
  %315 = getelementptr inbounds %"class.ipx::Model", ptr %23, i32 0, i32 2
  %316 = load i32, ptr %315, align 8, !tbaa !31
  %317 = load i32, ptr %22, align 4, !tbaa !33
  %318 = add nsw i32 %316, %317
  %319 = sext i32 %318 to i64
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %314, i64 noundef %319) #7
  store double %313, ptr %320, align 8, !tbaa !34
  br label %321

321:                                              ; preds = %298
  %322 = load i32, ptr %22, align 4, !tbaa !33
  %323 = add nsw i32 %322, 1
  store i32 %323, ptr %22, align 4, !tbaa !33
  br label %292, !llvm.loop !42

324:                                              ; preds = %297
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  ret void
}

declare void @_ZN3ipx9TransposeERKNS_12SparseMatrixE(ptr dead_on_unwind writable sret(%"class.ipx::SparseMatrix") align 8, ptr noundef nonnull align 8 dereferenceable(128)) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZN3ipx12SparseMatrixaSEOS0_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16)) #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3ipx12SparseMatrix9push_backEid(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, double noundef) #2 align 2

declare void @_ZN3ipx12SparseMatrix10add_columnEv(ptr noundef nonnull align 8 dereferenceable(128)) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #5 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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #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, !12, i64 368}
!10 = !{!"_ZTSN3ipx5ModelE", !11, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !13, i64 24, !13, i64 152, !22, i64 280, !22, i64 296, !22, i64 312, !22, i64 328, !24, i64 344, !24, i64 352, !12, i64 360, !12, i64 364, !12, i64 368, !12, i64 372, !12, i64 376, !14, i64 384, !25, i64 408, !24, i64 432, !24, i64 440, !24, i64 448, !22, i64 456, !22, i64 472, !22, i64 488, !22, i64 504, !13, i64 520, !14, i64 648, !22, i64 672, !22, i64 688}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"_ZTSN3ipx12SparseMatrixE", !12, i64 0, !14, i64 8, !14, i64 32, !18, i64 56, !14, i64 80, !18, i64 104}
!14 = !{!"_ZTSSt6vectorIiSaIiEE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!"_ZTSSt6vectorIdSaIdEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTSSt8valarrayIdE", !23, i64 0, !6, i64 8}
!23 = !{!"long", !7, i64 0}
!24 = !{!"double", !7, i64 0}
!25 = !{!"_ZTSSt6vectorIcSaIcEE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIcSaIcEE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!10, !12, i64 4}
!30 = !{!10, !12, i64 360}
!31 = !{!10, !12, i64 8}
!32 = !{!10, !11, i64 0}
!33 = !{!12, !12, i64 0}
!34 = !{!24, !24, i64 0}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !36}
!38 = distinct !{!38, !36}
!39 = !{!7, !7, i64 0}
!40 = distinct !{!40, !36}
!41 = distinct !{!41, !36}
!42 = distinct !{!42, !36}


; 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.ipx::SparseMatrix" = type { i32, %"class.std::vector", %"class.std::vector", %"class.std::vector.3", %"class.std::vector", %"class.std::vector.3" }
%"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::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 }

@.str.18 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [17 x i8], align 1
@switch.table._ZN3ipx5Model8LoadDualEv = private unnamed_addr constant [3 x double] [double 0xFFF0000000000000, double 0xFFF0000000000000, double 0.000000e+00], align 8
@switch.table._ZN3ipx5Model8LoadDualEv.1 = private unnamed_addr constant [3 x double] [double 0.000000e+00, double 0x7FF0000000000000, double 0x7FF0000000000000], align 8

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3ipx5Model8LoadDualEv(ptr noundef nonnull align 8 dereferenceable(704) %0) local_unnamed_addr #2 align 2 {
  %2 = alloca %"class.ipx::SparseMatrix", align 8
  %3 = getelementptr inbounds i8, ptr %0, i64 368
  %4 = load i32, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 4
  store i32 %4, ptr %5, align 4, !tbaa !28
  %6 = getelementptr inbounds i8, ptr %0, i64 360
  %7 = load i32, ptr %6, align 8, !tbaa !29
  %8 = getelementptr inbounds i8, ptr %0, i64 384
  %9 = tail call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #7
  %10 = trunc i64 %9 to i32
  %11 = add i32 %7, %10
  %12 = getelementptr inbounds i8, ptr %0, i64 8
  store i32 %11, ptr %12, align 8, !tbaa !30
  store i8 1, ptr %0, align 8, !tbaa !31
  %13 = load i32, ptr %3, align 8, !tbaa !5
  %14 = icmp sgt i32 %13, 0
  br i1 %14, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %1
  %15 = getelementptr inbounds i8, ptr %0, i64 504
  %16 = getelementptr inbounds i8, ptr %0, i64 488
  br label %23

._crit_edge:                                      ; preds = %32, %1
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %2) #7
  %17 = getelementptr inbounds i8, ptr %0, i64 520
  call void @_ZN3ipx9TransposeERKNS_12SparseMatrixE(ptr dead_on_unwind nonnull writable sret(%"class.ipx::SparseMatrix") align 8 %2, ptr noundef nonnull align 8 dereferenceable(128) %17)
  %18 = getelementptr inbounds i8, ptr %0, i64 24
  %19 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZN3ipx12SparseMatrixaSEOS0_(ptr noundef nonnull align 8 dereferenceable(128) %18, ptr noundef nonnull align 8 dereferenceable(128) %2) #7
  call void @_ZN3ipx12SparseMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %2) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %2) #7
  %20 = load i32, ptr %3, align 8, !tbaa !5
  %21 = icmp sgt i32 %20, 0
  br i1 %21, label %.lr.ph73, label %._crit_edge74

.lr.ph73:                                         ; preds = %._crit_edge
  %22 = getelementptr inbounds i8, ptr %0, i64 504
  br label %41

23:                                               ; preds = %.lr.ph, %32
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %32 ]
  %24 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %indvars.iv) #7
  %25 = load double, ptr %24, align 8, !tbaa !32
  %26 = tail call noundef zeroext i1 @_ZSt8isfinited(double noundef %25)
  br i1 %26, label %27, label %32

27:                                               ; preds = %23
  %28 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %indvars.iv) #7
  %29 = load double, ptr %28, align 8, !tbaa !32
  %30 = tail call noundef zeroext i1 @_ZSt8isfinited(double noundef %29)
  br i1 %30, label %32, label %31

31:                                               ; preds = %27
  tail call void @__assert_fail(ptr noundef nonnull @.str.34, ptr noundef nonnull @.str.18, i32 noundef 669, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv) #8
  unreachable

32:                                               ; preds = %23, %27
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %33 = load i32, ptr %3, align 8, !tbaa !5
  %34 = sext i32 %33 to i64
  %35 = icmp slt i64 %indvars.iv.next, %34
  br i1 %35, label %23, label %._crit_edge, !llvm.loop !33

._crit_edge74:                                    ; preds = %47, %._crit_edge
  %36 = call noundef i32 @_ZNK3ipx12SparseMatrix4colsEv(ptr noundef nonnull align 8 dereferenceable(128) %18)
  %37 = load i32, ptr %12, align 8, !tbaa !30
  %38 = icmp eq i32 %36, %37
  br i1 %38, label %.preheader69, label %51

.preheader69:                                     ; preds = %._crit_edge74
  %39 = load i32, ptr %5, align 4, !tbaa !28
  %40 = icmp sgt i32 %39, 0
  br i1 %40, label %.lr.ph76, label %._crit_edge77

41:                                               ; preds = %.lr.ph73, %47
  %indvars.iv109 = phi i64 [ 0, %.lr.ph73 ], [ %indvars.iv.next110, %47 ]
  %42 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %indvars.iv109) #7
  %43 = load double, ptr %42, align 8, !tbaa !32
  %44 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %43)
  br i1 %44, label %45, label %47

45:                                               ; preds = %41
  %46 = trunc nuw nsw i64 %indvars.iv109 to i32
  call void @_ZN3ipx12SparseMatrix9push_backEid(ptr noundef nonnull align 8 dereferenceable(128) %18, i32 noundef %46, double noundef -1.000000e+00)
  call void @_ZN3ipx12SparseMatrix10add_columnEv(ptr noundef nonnull align 8 dereferenceable(128) %18)
  br label %47

47:                                               ; preds = %41, %45
  %indvars.iv.next110 = add nuw nsw i64 %indvars.iv109, 1
  %48 = load i32, ptr %3, align 8, !tbaa !5
  %49 = sext i32 %48 to i64
  %50 = icmp slt i64 %indvars.iv.next110, %49
  br i1 %50, label %41, label %._crit_edge74, !llvm.loop !35

51:                                               ; preds = %._crit_edge74
  call void @__assert_fail(ptr noundef nonnull @.str.35, ptr noundef nonnull @.str.18, i32 noundef 680, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv) #8
  unreachable

._crit_edge77:                                    ; preds = %.lr.ph76, %.preheader69
  %52 = getelementptr inbounds i8, ptr %0, i64 456
  %53 = getelementptr inbounds i8, ptr %0, i64 280
  %54 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %53, ptr noundef nonnull align 8 dereferenceable(16) %52)
  %55 = getelementptr inbounds i8, ptr %0, i64 296
  %56 = load i32, ptr %12, align 8, !tbaa !30
  %57 = load i32, ptr %5, align 4, !tbaa !28
  %58 = add nsw i32 %57, %56
  %59 = sext i32 %58 to i64
  call void @_ZNSt8valarrayIdE6resizeEmd(ptr noundef nonnull align 8 dereferenceable(16) %55, i64 noundef %59, double noundef 0.000000e+00)
  %60 = getelementptr inbounds i8, ptr %0, i64 472
  %61 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %60) #7
  %62 = call noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %60) #7
  %.not78 = icmp eq ptr %61, %62
  br i1 %.not78, label %._crit_edge83, label %.lr.ph82

.lr.ph76:                                         ; preds = %.preheader69, %.lr.ph76
  %.06175 = phi i32 [ %63, %.lr.ph76 ], [ 0, %.preheader69 ]
  call void @_ZN3ipx12SparseMatrix9push_backEid(ptr noundef nonnull align 8 dereferenceable(128) %18, i32 noundef %.06175, double noundef 1.000000e+00)
  call void @_ZN3ipx12SparseMatrix10add_columnEv(ptr noundef nonnull align 8 dereferenceable(128) %18)
  %63 = add nuw nsw i32 %.06175, 1
  %64 = load i32, ptr %5, align 4, !tbaa !28
  %65 = icmp slt i32 %63, %64
  br i1 %65, label %.lr.ph76, label %._crit_edge77, !llvm.loop !36

._crit_edge83.loopexit:                           ; preds = %.lr.ph82
  %66 = trunc nuw i64 %indvars.iv.next113 to i32
  br label %._crit_edge83

._crit_edge83:                                    ; preds = %._crit_edge83.loopexit, %._crit_edge77
  %.062.lcssa = phi i32 [ 0, %._crit_edge77 ], [ %66, %._crit_edge83.loopexit ]
  %67 = getelementptr inbounds i8, ptr %0, i64 504
  %68 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %67) #7
  %69 = call noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %67) #7
  %.not6684 = icmp eq ptr %68, %69
  br i1 %.not6684, label %._crit_edge89, label %.lr.ph88

.lr.ph82:                                         ; preds = %._crit_edge77, %.lr.ph82
  %indvars.iv112 = phi i64 [ %indvars.iv.next113, %.lr.ph82 ], [ 0, %._crit_edge77 ]
  %.06379 = phi ptr [ %73, %.lr.ph82 ], [ %61, %._crit_edge77 ]
  %70 = load double, ptr %.06379, align 8, !tbaa !32
  %71 = fneg double %70
  %indvars.iv.next113 = add nuw nsw i64 %indvars.iv112, 1
  %72 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %55, i64 noundef %indvars.iv112) #7
  store double %71, ptr %72, align 8, !tbaa !32
  %73 = getelementptr inbounds i8, ptr %.06379, i64 8
  %.not = icmp eq ptr %73, %62
  br i1 %.not, label %._crit_edge83.loopexit, label %.lr.ph82

._crit_edge89:                                    ; preds = %82, %._crit_edge83
  %.1.lcssa = phi i32 [ %.062.lcssa, %._crit_edge83 ], [ %.2, %82 ]
  %74 = load i32, ptr %12, align 8, !tbaa !30
  %75 = icmp eq i32 %.1.lcssa, %74
  br i1 %75, label %85, label %84

.lr.ph88:                                         ; preds = %._crit_edge83, %82
  %.186 = phi i32 [ %.2, %82 ], [ %.062.lcssa, %._crit_edge83 ]
  %.06485 = phi ptr [ %83, %82 ], [ %68, %._crit_edge83 ]
  %76 = load double, ptr %.06485, align 8, !tbaa !32
  %77 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %76)
  br i1 %77, label %78, label %82

78:                                               ; preds = %.lr.ph88
  %79 = add nsw i32 %.186, 1
  %80 = sext i32 %.186 to i64
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %55, i64 noundef %80) #7
  store double %76, ptr %81, align 8, !tbaa !32
  br label %82

82:                                               ; preds = %78, %.lr.ph88
  %.2 = phi i32 [ %79, %78 ], [ %.186, %.lr.ph88 ]
  %83 = getelementptr inbounds i8, ptr %.06485, i64 8
  %.not66 = icmp eq ptr %83, %69
  br i1 %.not66, label %._crit_edge89, label %.lr.ph88

84:                                               ; preds = %._crit_edge89
  call void @__assert_fail(ptr noundef nonnull @.str.36, ptr noundef nonnull @.str.18, i32 noundef 695, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3ipx5Model8LoadDualEv) #8
  unreachable

85:                                               ; preds = %._crit_edge89
  %86 = getelementptr inbounds i8, ptr %0, i64 488
  %87 = call noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %86) #7
  %88 = call noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16) %86) #7
  %.not6791 = icmp eq ptr %87, %88
  br i1 %.not6791, label %._crit_edge96, label %.lr.ph95.preheader

.lr.ph95.preheader:                               ; preds = %85
  %89 = sext i32 %.1.lcssa to i64
  br label %.lr.ph95

._crit_edge96:                                    ; preds = %.lr.ph95, %85
  %90 = getelementptr inbounds i8, ptr %0, i64 312
  %91 = load i32, ptr %12, align 8, !tbaa !30
  %92 = load i32, ptr %5, align 4, !tbaa !28
  %93 = add nsw i32 %92, %91
  %94 = sext i32 %93 to i64
  call void @_ZNSt8valarrayIdE6resizeEmd(ptr noundef nonnull align 8 dereferenceable(16) %90, i64 noundef %94, double noundef 0.000000e+00)
  %95 = getelementptr inbounds i8, ptr %0, i64 328
  %96 = load i32, ptr %12, align 8, !tbaa !30
  %97 = load i32, ptr %5, align 4, !tbaa !28
  %98 = add nsw i32 %97, %96
  %99 = sext i32 %98 to i64
  call void @_ZNSt8valarrayIdE6resizeEmd(ptr noundef nonnull align 8 dereferenceable(16) %95, i64 noundef %99, double noundef 0.000000e+00)
  %100 = load i32, ptr %6, align 8, !tbaa !29
  %101 = icmp sgt i32 %100, 0
  br i1 %101, label %.lr.ph99, label %.preheader68

.lr.ph99:                                         ; preds = %._crit_edge96
  %102 = getelementptr inbounds i8, ptr %0, i64 408
  br label %112

.lr.ph95:                                         ; preds = %.lr.ph95.preheader, %.lr.ph95
  %indvars.iv115 = phi i64 [ %89, %.lr.ph95.preheader ], [ %indvars.iv.next116, %.lr.ph95 ]
  %.06093 = phi ptr [ %87, %.lr.ph95.preheader ], [ %108, %.lr.ph95 ]
  %103 = load double, ptr %.06093, align 8, !tbaa !32
  %104 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %103)
  %105 = fneg double %103
  %106 = select i1 %104, double %105, double 0.000000e+00
  %indvars.iv.next116 = add nsw i64 %indvars.iv115, 1
  %107 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %55, i64 noundef %indvars.iv115) #7
  store double %106, ptr %107, align 8, !tbaa !32
  %108 = getelementptr inbounds i8, ptr %.06093, i64 8
  %.not67 = icmp eq ptr %108, %88
  br i1 %.not67, label %._crit_edge96, label %.lr.ph95

.preheader68:                                     ; preds = %120, %._crit_edge96
  %.lcssa = phi i32 [ %100, %._crit_edge96 ], [ %121, %120 ]
  %109 = load i32, ptr %12, align 8, !tbaa !30
  %110 = icmp slt i32 %.lcssa, %109
  br i1 %110, label %.lr.ph102.preheader, label %.preheader

.lr.ph102.preheader:                              ; preds = %.preheader68
  %111 = sext i32 %.lcssa to i64
  br label %.lr.ph102

112:                                              ; preds = %.lr.ph99, %120
  %indvars.iv118 = phi i64 [ 0, %.lr.ph99 ], [ %indvars.iv.next119, %120 ]
  %113 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %102, i64 noundef %indvars.iv118) #7
  %114 = load i8, ptr %113, align 1, !tbaa !37
  %switch.tableidx = add i8 %114, -60
  %115 = icmp ult i8 %switch.tableidx, 3
  br i1 %115, label %switch.lookup, label %120

switch.lookup:                                    ; preds = %112
  %116 = zext nneg i8 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [3 x double], ptr @switch.table._ZN3ipx5Model8LoadDualEv, i64 0, i64 %116
  %switch.load = load double, ptr %switch.gep, align 8
  %117 = zext nneg i8 %switch.tableidx to i64
  %switch.gep132 = getelementptr inbounds [3 x double], ptr @switch.table._ZN3ipx5Model8LoadDualEv.1, i64 0, i64 %117
  %switch.load133 = load double, ptr %switch.gep132, align 8
  %118 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %90, i64 noundef %indvars.iv118) #7
  store double %switch.load, ptr %118, align 8, !tbaa !32
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %95, i64 noundef %indvars.iv118) #7
  store double %switch.load133, ptr %119, align 8, !tbaa !32
  br label %120

120:                                              ; preds = %112, %switch.lookup
  %indvars.iv.next119 = add nuw nsw i64 %indvars.iv118, 1
  %121 = load i32, ptr %6, align 8, !tbaa !29
  %122 = sext i32 %121 to i64
  %123 = icmp slt i64 %indvars.iv.next119, %122
  br i1 %123, label %112, label %.preheader68, !llvm.loop !38

.preheader:                                       ; preds = %.lr.ph102, %.preheader68
  %124 = load i32, ptr %3, align 8, !tbaa !5
  %125 = icmp sgt i32 %124, 0
  br i1 %125, label %.lr.ph104, label %._crit_edge105

.lr.ph102:                                        ; preds = %.lr.ph102.preheader, %.lr.ph102
  %indvars.iv121 = phi i64 [ %111, %.lr.ph102.preheader ], [ %indvars.iv.next122, %.lr.ph102 ]
  %126 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %90, i64 noundef %indvars.iv121) #7
  store double 0.000000e+00, ptr %126, align 8, !tbaa !32
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %95, i64 noundef %indvars.iv121) #7
  store double 0x7FF0000000000000, ptr %127, align 8, !tbaa !32
  %indvars.iv.next122 = add nsw i64 %indvars.iv121, 1
  %128 = load i32, ptr %12, align 8, !tbaa !30
  %129 = sext i32 %128 to i64
  %130 = icmp slt i64 %indvars.iv.next122, %129
  br i1 %130, label %.lr.ph102, label %.preheader, !llvm.loop !39

._crit_edge105:                                   ; preds = %.lr.ph104, %.preheader
  ret void

.lr.ph104:                                        ; preds = %.preheader, %.lr.ph104
  %indvars.iv124 = phi i64 [ %indvars.iv.next125, %.lr.ph104 ], [ 0, %.preheader ]
  %131 = load i32, ptr %12, align 8, !tbaa !30
  %132 = trunc nuw nsw i64 %indvars.iv124 to i32
  %133 = add nsw i32 %131, %132
  %134 = sext i32 %133 to i64
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %90, i64 noundef %134) #7
  store double 0.000000e+00, ptr %135, align 8, !tbaa !32
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %86, i64 noundef %indvars.iv124) #7
  %137 = load double, ptr %136, align 8, !tbaa !32
  %138 = call noundef zeroext i1 @_ZSt8isfinited(double noundef %137)
  %139 = select i1 %138, double 0x7FF0000000000000, double 0.000000e+00
  %140 = load i32, ptr %12, align 8, !tbaa !30
  %141 = add nsw i32 %140, %132
  %142 = sext i32 %141 to i64
  %143 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8valarrayIdEixEm(ptr noundef nonnull align 8 dereferenceable(16) %95, i64 noundef %142) #7
  store double %139, ptr %143, align 8, !tbaa !32
  %indvars.iv.next125 = add nuw nsw i64 %indvars.iv124, 1
  %144 = load i32, ptr %3, align 8, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = icmp slt i64 %indvars.iv.next125, %145
  br i1 %146, label %.lr.ph104, label %._crit_edge105, !llvm.loop !40
}

declare void @_ZN3ipx9TransposeERKNS_12SparseMatrixE(ptr dead_on_unwind writable sret(%"class.ipx::SparseMatrix") align 8, ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZN3ipx12SparseMatrixaSEOS0_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt5beginIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZSt3endIdEPT_RSt8valarrayIS0_E(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3ipx12SparseMatrix9push_backEid(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, double noundef) local_unnamed_addr #2 align 2

declare void @_ZN3ipx12SparseMatrix10add_columnEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt8valarrayIdEaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #5 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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress 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 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #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, !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 4}
!29 = !{!6, !10, i64 360}
!30 = !{!6, !10, i64 8}
!31 = !{!6, !7, i64 0}
!32 = !{!23, !23, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !34}
!37 = !{!8, !8, i64 0}
!38 = distinct !{!38, !34}
!39 = distinct !{!39, !34}
!40 = distinct !{!40, !34}


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