; LLVM IR from hpcg-benchmark/hpcg :: src (TestCG)

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

%"class.std::basic_ofstream" = type { %"class.std::basic_ostream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon }
%union.anon = type { i32 }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.std::allocator" = type { i8 }
%struct.Vector_STRUCT = type { i32, ptr, ptr }
%struct.SparseMatrix_STRUCT = type { ptr, ptr, i64, i64, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, %"class.std::unordered_map", %"class.std::vector.5", i8, i8, i8, i8, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, ptr, ptr, ptr }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl" }
%"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl" = type { %"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<long long, std::allocator<long long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.TestCGData_STRUCT = type { i32, i32, i32, i32, i32, i32, double }
%struct.Geometry_STRUCT = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, i32, i64, i64, i64, i64, i64, i64 }

@HPCG_fout = external global %"class.std::basic_ofstream", align 8
@.str = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z6TestCGR19SparseMatrix_STRUCTR13CGData_STRUCTR13Vector_STRUCTS4_R17TestCGData_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(32) %4) #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"class.std::vector", align 8
  %12 = alloca double, align 8
  %13 = alloca %"class.std::allocator", align 1
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca %struct.Vector_STRUCT, align 8
  %17 = alloca %struct.Vector_STRUCT, align 8
  %18 = alloca %struct.Vector_STRUCT, align 8
  %19 = alloca i32, align 4
  %20 = alloca i64, align 8
  %21 = alloca double, align 8
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  store double 0.000000e+00, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #6
  call void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  invoke void @_ZNSt6vectorIdSaIdEEC2EmRKdRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 8, ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %33 unwind label %58

33:                                               ; preds = %5
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #6
  %34 = load ptr, ptr %6, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.SparseMatrix_STRUCT, ptr %34, i32 0, i32 4
  %36 = load i32, ptr %35, align 8, !tbaa !11
  invoke void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef %36)
          to label %37 unwind label %62

37:                                               ; preds = %33
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.SparseMatrix_STRUCT, ptr %38, i32 0, i32 4
  %40 = load i32, ptr %39, align 8, !tbaa !11
  invoke void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %40)
          to label %41 unwind label %62

41:                                               ; preds = %37
  %42 = load ptr, ptr %6, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.SparseMatrix_STRUCT, ptr %42, i32 0, i32 4
  %44 = load i32, ptr %43, align 8, !tbaa !11
  invoke void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24) %18, i32 noundef %44)
          to label %45 unwind label %62

45:                                               ; preds = %41
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_Z18CopyMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %46, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %47 unwind label %62

47:                                               ; preds = %45
  invoke void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %48 unwind label %62

48:                                               ; preds = %47
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24) %49, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %50 unwind label %62

50:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !26
  br label %51

51:                                               ; preds = %102, %50
  %52 = load i32, ptr %19, align 4, !tbaa !26
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.SparseMatrix_STRUCT, ptr %53, i32 0, i32 4
  %55 = load i32, ptr %54, align 8, !tbaa !11
  %56 = icmp slt i32 %52, %55
  br i1 %56, label %66, label %57

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

58:                                               ; preds = %5
  %59 = landingpad { ptr, i32 }
          cleanup
  %60 = extractvalue { ptr, i32 } %59, 0
  store ptr %60, ptr %14, align 8
  %61 = extractvalue { ptr, i32 } %59, 1
  store i32 %61, ptr %15, align 4
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %285

62:                                               ; preds = %106, %48, %47, %45, %41, %37, %33
  %63 = landingpad { ptr, i32 }
          cleanup
  %64 = extractvalue { ptr, i32 } %63, 0
  store ptr %64, ptr %14, align 8
  %65 = extractvalue { ptr, i32 } %63, 1
  store i32 %65, ptr %15, align 4
  br label %284

66:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.SparseMatrix_STRUCT, ptr %67, i32 0, i32 13
  %69 = load i32, ptr %19, align 4, !tbaa !26
  %70 = sext i32 %69 to i64
  %71 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIxSaIxEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %68, i64 noundef %70) #6
  %72 = load i64, ptr %71, align 8, !tbaa !27
  store i64 %72, ptr %20, align 8, !tbaa !27
  %73 = load i64, ptr %20, align 8, !tbaa !27
  %74 = icmp slt i64 %73, 9
  br i1 %74, label %75, label %91

75:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %76 = load i64, ptr %20, align 8, !tbaa !27
  %77 = add nsw i64 %76, 2
  %78 = sitofp i64 %77 to double
  %79 = fmul double %78, 1.000000e+06
  store double %79, ptr %21, align 8, !tbaa !9
  %80 = load i32, ptr %19, align 4, !tbaa !26
  %81 = load double, ptr %21, align 8, !tbaa !9
  invoke void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %80, double noundef %81)
          to label %82 unwind label %87

82:                                               ; preds = %75
  %83 = load ptr, ptr %8, align 8, !tbaa !5
  %84 = load i32, ptr %19, align 4, !tbaa !26
  %85 = load double, ptr %21, align 8, !tbaa !9
  invoke void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24) %83, i32 noundef %84, double noundef %85)
          to label %86 unwind label %87

86:                                               ; preds = %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %101

87:                                               ; preds = %82, %75
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %14, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %105

91:                                               ; preds = %66
  %92 = load i32, ptr %19, align 4, !tbaa !26
  invoke void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %92, double noundef 1.000000e+06)
          to label %93 unwind label %97

93:                                               ; preds = %91
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = load i32, ptr %19, align 4, !tbaa !26
  invoke void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24) %94, i32 noundef %95, double noundef 1.000000e+06)
          to label %96 unwind label %97

96:                                               ; preds = %93
  br label %101

97:                                               ; preds = %93, %91
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %14, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %15, align 4
  br label %105

101:                                              ; preds = %96, %86
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %102

102:                                              ; preds = %101
  %103 = load i32, ptr %19, align 4, !tbaa !26
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %19, align 4, !tbaa !26
  br label %51, !llvm.loop !28

105:                                              ; preds = %97, %87
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %284

106:                                              ; preds = %57
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_Z21ReplaceMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %107, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %108 unwind label %62

108:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 0, ptr %22, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  store double 0.000000e+00, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  store double 0.000000e+00, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 50, ptr %25, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store i32 2, ptr %26, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  store double 0x3D719799812DEA11, ptr %27, align 8, !tbaa !9
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %109, i32 0, i32 2
  store i32 12, ptr %110, align 8, !tbaa !30
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %111, i32 0, i32 3
  store i32 2, ptr %112, align 4, !tbaa !32
  %113 = load ptr, ptr %10, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %113, i32 0, i32 4
  store i32 0, ptr %114, align 8, !tbaa !33
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %115, i32 0, i32 5
  store i32 0, ptr %116, align 4, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store i32 0, ptr %28, align 4, !tbaa !26
  br label %117

117:                                              ; preds = %265, %108
  %118 = load i32, ptr %28, align 4, !tbaa !26
  %119 = icmp slt i32 %118, 2
  br i1 %119, label %121, label %120

120:                                              ; preds = %117
  store i32 5, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %268

121:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %122, i32 0, i32 2
  %124 = load i32, ptr %123, align 8, !tbaa !30
  store i32 %124, ptr %30, align 4, !tbaa !26
  %125 = load i32, ptr %28, align 4, !tbaa !26
  %126 = icmp eq i32 %125, 1
  br i1 %126, label %127, label %131

127:                                              ; preds = %121
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %128, i32 0, i32 3
  %130 = load i32, ptr %129, align 4, !tbaa !32
  store i32 %130, ptr %30, align 4, !tbaa !26
  br label %131

131:                                              ; preds = %127, %121
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 0, ptr %31, align 4, !tbaa !26
  br label %132

132:                                              ; preds = %260, %131
  %133 = load i32, ptr %31, align 4, !tbaa !26
  %134 = load i32, ptr %26, align 4, !tbaa !26
  %135 = icmp slt i32 %133, %134
  br i1 %135, label %137, label %136

136:                                              ; preds = %132
  store i32 8, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %264

137:                                              ; preds = %132
  %138 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_Z10ZeroVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %138)
          to label %139 unwind label %163

139:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  %141 = load ptr, ptr %7, align 8, !tbaa !5
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = load ptr, ptr %9, align 8, !tbaa !5
  %144 = load i32, ptr %25, align 4, !tbaa !26
  %145 = load double, ptr %27, align 8, !tbaa !9
  %146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef 0) #6
  %147 = load i32, ptr %28, align 4, !tbaa !26
  %148 = icmp eq i32 %147, 1
  %149 = invoke noundef i32 @_Z2CGRK19SparseMatrix_STRUCTR13CGData_STRUCTRK13Vector_STRUCTRS4_idRiRdS9_Pdb(ptr noundef nonnull align 8 dereferenceable(256) %140, ptr noundef nonnull align 8 dereferenceable(96) %141, ptr noundef nonnull align 8 dereferenceable(24) %142, ptr noundef nonnull align 8 dereferenceable(24) %143, i32 noundef %144, double noundef %145, ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef %146, i1 noundef zeroext %148)
          to label %150 unwind label %167

150:                                              ; preds = %139
  store i32 %149, ptr %32, align 4, !tbaa !26
  %151 = load i32, ptr %32, align 4, !tbaa !26
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %171

153:                                              ; preds = %150
  %154 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef @.str)
          to label %155 unwind label %167

155:                                              ; preds = %153
  %156 = load i32, ptr %32, align 4, !tbaa !26
  %157 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %154, i32 noundef %156)
          to label %158 unwind label %167

158:                                              ; preds = %155
  %159 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %157, ptr noundef @.str.1)
          to label %160 unwind label %167

160:                                              ; preds = %158
  %161 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %159, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %162 unwind label %167

162:                                              ; preds = %160
  br label %171

163:                                              ; preds = %137
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %14, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %15, align 4
  br label %263

167:                                              ; preds = %255, %253, %250, %248, %245, %243, %237, %235, %230, %228, %225, %223, %220, %218, %160, %158, %155, %153, %139
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %14, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %263

171:                                              ; preds = %162, %150
  %172 = load i32, ptr %22, align 4, !tbaa !26
  %173 = load i32, ptr %30, align 4, !tbaa !26
  %174 = icmp sle i32 %172, %173
  br i1 %174, label %175, label %180

175:                                              ; preds = %171
  %176 = load ptr, ptr %10, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %176, i32 0, i32 0
  %178 = load i32, ptr %177, align 8, !tbaa !35
  %179 = add nsw i32 %178, 1
  store i32 %179, ptr %177, align 8, !tbaa !35
  br label %185

180:                                              ; preds = %171
  %181 = load ptr, ptr %10, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %181, i32 0, i32 1
  %183 = load i32, ptr %182, align 4, !tbaa !36
  %184 = add nsw i32 %183, 1
  store i32 %184, ptr %182, align 4, !tbaa !36
  br label %185

185:                                              ; preds = %180, %175
  %186 = load i32, ptr %28, align 4, !tbaa !26
  %187 = icmp eq i32 %186, 0
  br i1 %187, label %188, label %198

188:                                              ; preds = %185
  %189 = load i32, ptr %22, align 4, !tbaa !26
  %190 = load ptr, ptr %10, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %190, i32 0, i32 4
  %192 = load i32, ptr %191, align 8, !tbaa !33
  %193 = icmp sgt i32 %189, %192
  br i1 %193, label %194, label %198

194:                                              ; preds = %188
  %195 = load i32, ptr %22, align 4, !tbaa !26
  %196 = load ptr, ptr %10, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %196, i32 0, i32 4
  store i32 %195, ptr %197, align 8, !tbaa !33
  br label %198

198:                                              ; preds = %194, %188, %185
  %199 = load i32, ptr %28, align 4, !tbaa !26
  %200 = icmp eq i32 %199, 1
  br i1 %200, label %201, label %211

201:                                              ; preds = %198
  %202 = load i32, ptr %22, align 4, !tbaa !26
  %203 = load ptr, ptr %10, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %203, i32 0, i32 5
  %205 = load i32, ptr %204, align 4, !tbaa !34
  %206 = icmp sgt i32 %202, %205
  br i1 %206, label %207, label %211

207:                                              ; preds = %201
  %208 = load i32, ptr %22, align 4, !tbaa !26
  %209 = load ptr, ptr %10, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %209, i32 0, i32 5
  store i32 %208, ptr %210, align 4, !tbaa !34
  br label %211

211:                                              ; preds = %207, %201, %198
  %212 = load ptr, ptr %6, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.SparseMatrix_STRUCT, ptr %212, i32 0, i32 1
  %214 = load ptr, ptr %213, align 8, !tbaa !37
  %215 = getelementptr inbounds %struct.Geometry_STRUCT, ptr %214, i32 0, i32 1
  %216 = load i32, ptr %215, align 4, !tbaa !38
  %217 = icmp eq i32 %216, 0
  br i1 %217, label %218, label %259

218:                                              ; preds = %211
  %219 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef @.str.2)
          to label %220 unwind label %167

220:                                              ; preds = %218
  %221 = load i32, ptr %31, align 4, !tbaa !26
  %222 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %219, i32 noundef %221)
          to label %223 unwind label %167

223:                                              ; preds = %220
  %224 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %222, ptr noundef @.str.3)
          to label %225 unwind label %167

225:                                              ; preds = %223
  %226 = load i32, ptr %22, align 4, !tbaa !26
  %227 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %224, i32 noundef %226)
          to label %228 unwind label %167

228:                                              ; preds = %225
  %229 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef @.str.4)
          to label %230 unwind label %167

230:                                              ; preds = %228
  %231 = load double, ptr %23, align 8, !tbaa !9
  %232 = load double, ptr %24, align 8, !tbaa !9
  %233 = fdiv double %231, %232
  %234 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %229, double noundef %233)
          to label %235 unwind label %167

235:                                              ; preds = %230
  %236 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %234, ptr noundef @.str.5)
          to label %237 unwind label %167

237:                                              ; preds = %235
  %238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %236, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %239 unwind label %167

239:                                              ; preds = %237
  %240 = load i32, ptr %22, align 4, !tbaa !26
  %241 = load i32, ptr %30, align 4, !tbaa !26
  %242 = icmp sgt i32 %240, %241
  br i1 %242, label %243, label %258

243:                                              ; preds = %239
  %244 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef @.str.6)
          to label %245 unwind label %167

245:                                              ; preds = %243
  %246 = load i32, ptr %30, align 4, !tbaa !26
  %247 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %244, i32 noundef %246)
          to label %248 unwind label %167

248:                                              ; preds = %245
  %249 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %247, ptr noundef @.str.7)
          to label %250 unwind label %167

250:                                              ; preds = %248
  %251 = load i32, ptr %22, align 4, !tbaa !26
  %252 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %249, i32 noundef %251)
          to label %253 unwind label %167

253:                                              ; preds = %250
  %254 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %252, ptr noundef @.str.8)
          to label %255 unwind label %167

255:                                              ; preds = %253
  %256 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %254, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %257 unwind label %167

257:                                              ; preds = %255
  br label %258

258:                                              ; preds = %257, %239
  br label %259

259:                                              ; preds = %258, %211
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %260

260:                                              ; preds = %259
  %261 = load i32, ptr %31, align 4, !tbaa !26
  %262 = add nsw i32 %261, 1
  store i32 %262, ptr %31, align 4, !tbaa !26
  br label %132, !llvm.loop !40

263:                                              ; preds = %167, %163
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %283

264:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  br label %265

265:                                              ; preds = %264
  %266 = load i32, ptr %28, align 4, !tbaa !26
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr %28, align 4, !tbaa !26
  br label %117, !llvm.loop !41

268:                                              ; preds = %120
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_Z21ReplaceMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %269, ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %270 unwind label %279

270:                                              ; preds = %268
  %271 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(24) %271)
          to label %272 unwind label %279

272:                                              ; preds = %270
  invoke void @_Z12DeleteVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %16)
          to label %273 unwind label %279

273:                                              ; preds = %272
  invoke void @_Z12DeleteVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %274 unwind label %279

274:                                              ; preds = %273
  invoke void @_Z12DeleteVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %275 unwind label %279

275:                                              ; preds = %274
  %276 = load double, ptr %23, align 8, !tbaa !9
  %277 = load ptr, ptr %10, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.TestCGData_STRUCT, ptr %277, i32 0, i32 6
  store double %276, ptr %278, align 8, !tbaa !42
  store i32 1, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #6
  ret i32 0

279:                                              ; preds = %274, %273, %272, %270, %268
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %14, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %15, align 4
  br label %283

283:                                              ; preds = %279, %263
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %284

284:                                              ; preds = %283, %105, %62
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  br label %285

285:                                              ; preds = %284, %58
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #6
  br label %286

286:                                              ; preds = %285
  %287 = load ptr, ptr %14, align 8
  %288 = load i32, ptr %15, align 4
  %289 = insertvalue { ptr, i32 } poison, ptr %287, 0
  %290 = insertvalue { ptr, i32 } %289, i32 %288, 1
  resume { ptr, i32 } %290
}

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

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

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

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) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z18CopyMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(24)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, double noundef) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z21ReplaceMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(24)) #4

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

declare noundef i32 @_Z2CGRK19SparseMatrix_STRUCTR13CGData_STRUCTRK13Vector_STRUCTRS4_idRiRdS9_Pdb(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, double noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, i1 noundef zeroext) #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #3

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) #0 align 2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !14, i64 32}
!12 = !{!"_ZTS19SparseMatrix_STRUCT", !6, i64 0, !6, i64 8, !13, i64 16, !13, i64 24, !14, i64 32, !14, i64 36, !14, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !15, i64 88, !21, i64 144, !25, i64 168, !25, i64 169, !25, i64 170, !25, i64 171, !6, i64 176, !6, i64 184, !6, i64 192, !14, i64 200, !14, i64 204, !14, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"_ZTSSt13unordered_mapIxiSt4hashIxESt8equal_toIxESaISt4pairIKxiEEE", !16, i64 0}
!16 = !{!"_ZTSSt10_HashtableIxSt4pairIKxiESaIS2_ENSt8__detail10_Select1stESt8equal_toIxESt4hashIxENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !17, i64 8, !18, i64 16, !17, i64 24, !19, i64 32, !6, i64 48}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!19 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !20, i64 0, !17, i64 8}
!20 = !{!"float", !7, i64 0}
!21 = !{!"_ZTSSt6vectorIxSaIxEE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIxSaIxEE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"bool", !7, i64 0}
!26 = !{!14, !14, i64 0}
!27 = !{!13, !13, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!31, !14, i64 8}
!31 = !{!"_ZTS17TestCGData_STRUCT", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !10, i64 24}
!32 = !{!31, !14, i64 12}
!33 = !{!31, !14, i64 16}
!34 = !{!31, !14, i64 20}
!35 = !{!31, !14, i64 0}
!36 = !{!31, !14, i64 4}
!37 = !{!12, !6, i64 8}
!38 = !{!39, !14, i64 4}
!39 = !{!"_ZTS15Geometry_STRUCT", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !6, i64 48, !6, i64 56, !14, i64 64, !14, i64 68, !14, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120}
!40 = distinct !{!40, !29}
!41 = distinct !{!41, !29}
!42 = !{!31, !10, i64 24}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::basic_ofstream" = type { %"class.std::basic_ostream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon }
%union.anon = type { i32 }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.std::allocator" = type { i8 }
%struct.Vector_STRUCT = type { i32, ptr, ptr }

@HPCG_fout = external global %"class.std::basic_ofstream", align 8
@.str = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z6TestCGR19SparseMatrix_STRUCTR13CGData_STRUCTR13Vector_STRUCTS4_R17TestCGData_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr nocapture noundef nonnull align 8 dereferenceable(32) %4) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::vector", align 8
  %7 = alloca double, align 8
  %8 = alloca %"class.std::allocator", align 1
  %9 = alloca %struct.Vector_STRUCT, align 8
  %10 = alloca %struct.Vector_STRUCT, align 8
  %11 = alloca %struct.Vector_STRUCT, align 8
  %12 = alloca i32, align 4
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  store double 0.000000e+00, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #6
  call void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  invoke void @_ZNSt6vectorIdSaIdEEC2EmRKdRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 8, ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %15 unwind label %32

15:                                               ; preds = %5
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #6
  %16 = getelementptr inbounds i8, ptr %0, i64 32
  %17 = load i32, ptr %16, align 8, !tbaa !9
  invoke void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24) %9, i32 noundef %17)
          to label %18 unwind label %34

18:                                               ; preds = %15
  %19 = load i32, ptr %16, align 8, !tbaa !9
  invoke void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef %19)
          to label %20 unwind label %34

20:                                               ; preds = %18
  %21 = load i32, ptr %16, align 8, !tbaa !9
  invoke void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24) %11, i32 noundef %21)
          to label %22 unwind label %34

22:                                               ; preds = %20
  call void @_Z18CopyMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(24) %9)
  call void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %10)
  call void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %11)
  %23 = load i32, ptr %16, align 8, !tbaa !9
  %24 = icmp sgt i32 %23, 0
  br i1 %24, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %22
  %25 = getelementptr inbounds i8, ptr %0, i64 144
  br label %36

._crit_edge:                                      ; preds = %36, %22
  call void @_Z21ReplaceMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(24) %10)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #6
  store i32 0, ptr %12, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  store double 0.000000e+00, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  store double 0.000000e+00, ptr %14, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %4, i64 8
  %27 = getelementptr inbounds i8, ptr %4, i64 12
  %28 = getelementptr inbounds i8, ptr %4, i64 16
  %29 = getelementptr inbounds i8, ptr %4, i64 20
  store <4 x i32> <i32 12, i32 2, i32 0, i32 0>, ptr %26, align 8, !tbaa !25
  %30 = getelementptr inbounds i8, ptr %4, i64 4
  %31 = getelementptr inbounds i8, ptr %0, i64 8
  br label %50

32:                                               ; preds = %5
  %33 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  br label %194

34:                                               ; preds = %20, %18, %15
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %193

36:                                               ; preds = %.lr.ph, %36
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %36 ]
  %37 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIxSaIxEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %indvars.iv) #6
  %38 = load i64, ptr %37, align 8, !tbaa !26
  %39 = icmp slt i64 %38, 9
  %40 = add nsw i64 %38, 2
  %41 = sitofp i64 %40 to double
  %42 = fmul double %41, 1.000000e+06
  %.sink81 = select i1 %39, double %42, double 1.000000e+06
  %43 = trunc nuw nsw i64 %indvars.iv to i32
  call void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef %43, double noundef %.sink81)
  call void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24) %2, i32 noundef %43, double noundef %.sink81)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %44 = load i32, ptr %16, align 8, !tbaa !9
  %45 = sext i32 %44 to i64
  %46 = icmp slt i64 %indvars.iv.next, %45
  br i1 %46, label %36, label %._crit_edge, !llvm.loop !27

47:                                               ; preds = %192
  call void @_Z21ReplaceMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(24) %9)
  call void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %2)
  call void @_Z12DeleteVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %9)
  call void @_Z12DeleteVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %10)
  call void @_Z12DeleteVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %11)
  %48 = load double, ptr %13, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %4, i64 24
  store double %48, ptr %49, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  ret i32 0

50:                                               ; preds = %._crit_edge, %192
  %51 = phi i1 [ false, %._crit_edge ], [ true, %192 ]
  %52 = phi i1 [ true, %._crit_edge ], [ false, %192 ]
  %.val = load i32, ptr %27, align 4
  %.val74 = load i32, ptr %26, align 8
  %.061 = select i1 %51, i32 %.val, i32 %.val74
  call void @_Z10ZeroVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %53 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #6
  %54 = invoke noundef i32 @_Z2CGRK19SparseMatrix_STRUCTR13CGData_STRUCTRK13Vector_STRUCTRS4_idRiRdS9_Pdb(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 50, double noundef 0x3D719799812DEA11, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull %53, i1 noundef zeroext %51)
          to label %55 unwind label %64

55:                                               ; preds = %50
  %.not = icmp eq i32 %54, 0
  br i1 %.not, label %66, label %56

56:                                               ; preds = %55
  %57 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef nonnull @.str)
          to label %58 unwind label %64

58:                                               ; preds = %56
  %59 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %57, i32 noundef %54)
          to label %60 unwind label %64

60:                                               ; preds = %58
  %61 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull @.str.1)
          to label %62 unwind label %64

62:                                               ; preds = %60
  %63 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %61, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %66 unwind label %64

64:                                               ; preds = %190, %188, %185, %183, %181, %179, %174, %172, %167, %165, %162, %160, %158, %156, %133, %131, %129, %127, %123, %121, %119, %116, %114, %112, %110, %105, %103, %98, %96, %93, %91, %89, %87, %62, %60, %58, %56, %50
  %65 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #6
  br label %193

66:                                               ; preds = %62, %55
  %67 = load i32, ptr %12, align 4, !tbaa !25
  %.not70 = icmp sgt i32 %67, %.061
  br i1 %.not70, label %71, label %68

68:                                               ; preds = %66
  %69 = load i32, ptr %4, align 8, !tbaa !31
  %70 = add nsw i32 %69, 1
  store i32 %70, ptr %4, align 8, !tbaa !31
  br label %74

71:                                               ; preds = %66
  %72 = load i32, ptr %30, align 4, !tbaa !32
  %73 = add nsw i32 %72, 1
  store i32 %73, ptr %30, align 4, !tbaa !32
  br label %74

74:                                               ; preds = %71, %68
  br i1 %52, label %75, label %79

75:                                               ; preds = %74
  %76 = load i32, ptr %28, align 8, !tbaa !33
  %77 = icmp sgt i32 %67, %76
  br i1 %77, label %78, label %.thread

78:                                               ; preds = %75
  store i32 %67, ptr %28, align 8, !tbaa !33
  br label %.thread

79:                                               ; preds = %74
  %80 = load i32, ptr %29, align 4
  %81 = icmp sgt i32 %67, %80
  br i1 %81, label %82, label %.thread

82:                                               ; preds = %79
  store i32 %67, ptr %29, align 4, !tbaa !34
  br label %.thread

.thread:                                          ; preds = %75, %78, %82, %79
  %83 = load ptr, ptr %31, align 8, !tbaa !35
  %84 = getelementptr inbounds i8, ptr %83, i64 4
  %85 = load i32, ptr %84, align 4, !tbaa !36
  %86 = icmp eq i32 %85, 0
  br i1 %86, label %87, label %123

87:                                               ; preds = %.thread
  %88 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef nonnull @.str.2)
          to label %89 unwind label %64

89:                                               ; preds = %87
  %90 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %88, i32 noundef 0)
          to label %91 unwind label %64

91:                                               ; preds = %89
  %92 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %90, ptr noundef nonnull @.str.3)
          to label %93 unwind label %64

93:                                               ; preds = %91
  %94 = load i32, ptr %12, align 4, !tbaa !25
  %95 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %92, i32 noundef %94)
          to label %96 unwind label %64

96:                                               ; preds = %93
  %97 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %95, ptr noundef nonnull @.str.4)
          to label %98 unwind label %64

98:                                               ; preds = %96
  %99 = load double, ptr %13, align 8, !tbaa !5
  %100 = load double, ptr %14, align 8, !tbaa !5
  %101 = fdiv double %99, %100
  %102 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %97, double noundef %101)
          to label %103 unwind label %64

103:                                              ; preds = %98
  %104 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %102, ptr noundef nonnull @.str.5)
          to label %105 unwind label %64

105:                                              ; preds = %103
  %106 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %104, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %107 unwind label %64

107:                                              ; preds = %105
  %108 = load i32, ptr %12, align 4, !tbaa !25
  %109 = icmp sgt i32 %108, %.061
  br i1 %109, label %110, label %123

110:                                              ; preds = %107
  %111 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef nonnull @.str.6)
          to label %112 unwind label %64

112:                                              ; preds = %110
  %113 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %111, i32 noundef %.061)
          to label %114 unwind label %64

114:                                              ; preds = %112
  %115 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %113, ptr noundef nonnull @.str.7)
          to label %116 unwind label %64

116:                                              ; preds = %114
  %117 = load i32, ptr %12, align 4, !tbaa !25
  %118 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %115, i32 noundef %117)
          to label %119 unwind label %64

119:                                              ; preds = %116
  %120 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %118, ptr noundef nonnull @.str.8)
          to label %121 unwind label %64

121:                                              ; preds = %119
  %122 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %120, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %123 unwind label %64

123:                                              ; preds = %107, %121, %.thread
  call void @_Z10ZeroVectorR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %124 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef 0) #6
  %125 = invoke noundef i32 @_Z2CGRK19SparseMatrix_STRUCTR13CGData_STRUCTRK13Vector_STRUCTRS4_idRiRdS9_Pdb(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 50, double noundef 0x3D719799812DEA11, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull %124, i1 noundef zeroext %51)
          to label %126 unwind label %64

126:                                              ; preds = %123
  %.not.1 = icmp eq i32 %125, 0
  br i1 %.not.1, label %135, label %127

127:                                              ; preds = %126
  %128 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef nonnull @.str)
          to label %129 unwind label %64

129:                                              ; preds = %127
  %130 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %128, i32 noundef %125)
          to label %131 unwind label %64

131:                                              ; preds = %129
  %132 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %130, ptr noundef nonnull @.str.1)
          to label %133 unwind label %64

133:                                              ; preds = %131
  %134 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %132, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %135 unwind label %64

135:                                              ; preds = %133, %126
  %136 = load i32, ptr %12, align 4, !tbaa !25
  %.not70.1 = icmp sgt i32 %136, %.061
  br i1 %.not70.1, label %140, label %137

137:                                              ; preds = %135
  %138 = load i32, ptr %4, align 8, !tbaa !31
  %139 = add nsw i32 %138, 1
  store i32 %139, ptr %4, align 8, !tbaa !31
  br label %143

140:                                              ; preds = %135
  %141 = load i32, ptr %30, align 4, !tbaa !32
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %30, align 4, !tbaa !32
  br label %143

143:                                              ; preds = %140, %137
  br i1 %52, label %148, label %144

144:                                              ; preds = %143
  %145 = load i32, ptr %29, align 4
  %146 = icmp sgt i32 %136, %145
  br i1 %146, label %147, label %.thread.1

147:                                              ; preds = %144
  store i32 %136, ptr %29, align 4, !tbaa !34
  br label %.thread.1

148:                                              ; preds = %143
  %149 = load i32, ptr %28, align 8, !tbaa !33
  %150 = icmp sgt i32 %136, %149
  br i1 %150, label %151, label %.thread.1

151:                                              ; preds = %148
  store i32 %136, ptr %28, align 8, !tbaa !33
  br label %.thread.1

.thread.1:                                        ; preds = %151, %148, %147, %144
  %152 = load ptr, ptr %31, align 8, !tbaa !35
  %153 = getelementptr inbounds i8, ptr %152, i64 4
  %154 = load i32, ptr %153, align 4, !tbaa !36
  %155 = icmp eq i32 %154, 0
  br i1 %155, label %156, label %192

156:                                              ; preds = %.thread.1
  %157 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef nonnull @.str.2)
          to label %158 unwind label %64

158:                                              ; preds = %156
  %159 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %157, i32 noundef 1)
          to label %160 unwind label %64

160:                                              ; preds = %158
  %161 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %159, ptr noundef nonnull @.str.3)
          to label %162 unwind label %64

162:                                              ; preds = %160
  %163 = load i32, ptr %12, align 4, !tbaa !25
  %164 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %161, i32 noundef %163)
          to label %165 unwind label %64

165:                                              ; preds = %162
  %166 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %164, ptr noundef nonnull @.str.4)
          to label %167 unwind label %64

167:                                              ; preds = %165
  %168 = load double, ptr %13, align 8, !tbaa !5
  %169 = load double, ptr %14, align 8, !tbaa !5
  %170 = fdiv double %168, %169
  %171 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %166, double noundef %170)
          to label %172 unwind label %64

172:                                              ; preds = %167
  %173 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %171, ptr noundef nonnull @.str.5)
          to label %174 unwind label %64

174:                                              ; preds = %172
  %175 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %173, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %176 unwind label %64

176:                                              ; preds = %174
  %177 = load i32, ptr %12, align 4, !tbaa !25
  %178 = icmp sgt i32 %177, %.061
  br i1 %178, label %179, label %192

179:                                              ; preds = %176
  %180 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @HPCG_fout, ptr noundef nonnull @.str.6)
          to label %181 unwind label %64

181:                                              ; preds = %179
  %182 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %180, i32 noundef %.061)
          to label %183 unwind label %64

183:                                              ; preds = %181
  %184 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %182, ptr noundef nonnull @.str.7)
          to label %185 unwind label %64

185:                                              ; preds = %183
  %186 = load i32, ptr %12, align 4, !tbaa !25
  %187 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %184, i32 noundef %186)
          to label %188 unwind label %64

188:                                              ; preds = %185
  %189 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %187, ptr noundef nonnull @.str.8)
          to label %190 unwind label %64

190:                                              ; preds = %188
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %189, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %192 unwind label %64

192:                                              ; preds = %190, %176, %.thread.1
  br i1 %52, label %50, label %47, !llvm.loop !38

193:                                              ; preds = %64, %34
  %.pn = phi { ptr, i32 } [ %65, %64 ], [ %35, %34 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  br label %194

194:                                              ; preds = %193, %32
  %.pn.pn = phi { ptr, i32 } [ %.pn, %193 ], [ %33, %32 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  resume { ptr, i32 } %.pn.pn
}

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

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

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

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) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z16InitializeVectorR13Vector_STRUCTi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z18CopyMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z10CopyVectorRK13Vector_STRUCTRS_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z16ScaleVectorValueR13Vector_STRUCTid(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, double noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z21ReplaceMatrixDiagonalR19SparseMatrix_STRUCTR13Vector_STRUCT(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

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

declare noundef i32 @_Z2CGRK19SparseMatrix_STRUCTR13CGData_STRUCTRK13Vector_STRUCTRS4_idRiRdS9_Pdb(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, double noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, i1 noundef zeroext) local_unnamed_addr #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #3

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) local_unnamed_addr #0 align 2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !13, i64 32}
!10 = !{!"_ZTS19SparseMatrix_STRUCT", !11, i64 0, !11, i64 8, !12, i64 16, !12, i64 24, !13, i64 32, !13, i64 36, !13, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !14, i64 88, !20, i64 144, !24, i64 168, !24, i64 169, !24, i64 170, !24, i64 171, !11, i64 176, !11, i64 184, !11, i64 192, !13, i64 200, !13, i64 204, !13, i64 208, !11, i64 216, !11, i64 224, !11, i64 232, !11, i64 240, !11, i64 248}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTSSt13unordered_mapIxiSt4hashIxESt8equal_toIxESaISt4pairIKxiEEE", !15, i64 0}
!15 = !{!"_ZTSSt10_HashtableIxSt4pairIKxiESaIS2_ENSt8__detail10_Select1stESt8equal_toIxESt4hashIxENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !11, i64 0, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !11, i64 48}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !11, i64 0}
!18 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !19, i64 0, !16, i64 8}
!19 = !{!"float", !7, i64 0}
!20 = !{!"_ZTSSt6vectorIxSaIxEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIxSaIxEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIxSaIxEE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!24 = !{!"bool", !7, i64 0}
!25 = !{!13, !13, i64 0}
!26 = !{!12, !12, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!30, !6, i64 24}
!30 = !{!"_ZTS17TestCGData_STRUCT", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !6, i64 24}
!31 = !{!30, !13, i64 0}
!32 = !{!30, !13, i64 4}
!33 = !{!30, !13, i64 16}
!34 = !{!30, !13, i64 20}
!35 = !{!10, !11, i64 8}
!36 = !{!37, !13, i64 4}
!37 = !{!"_ZTS15Geometry_STRUCT", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !11, i64 48, !11, i64 56, !13, i64 64, !13, i64 68, !13, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120}
!38 = distinct !{!38, !28}


; Effective O3 passes: ADCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass