; LLVM IR from stonne-simulator/omega :: omega-code/stonne/src/main.ll (Z20runSparseGEMMCommandiPPc)

; 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_ostream" = type { ptr, %"class.std::basic_ios" }
%"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::locale" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%class.Config = type { i32, %class.DSNetworkConfig, %class.DSwitchConfig, %class.MSNetworkConfig, %class.MSwitchConfig, %class.ASNetworkConfig, %class.ASwitchConfig, %class.LookUpTableConfig, %class.SDMemoryConfig }
%class.DSNetworkConfig = type { i32 }
%class.DSwitchConfig = type { i32, i32, i32, i32 }
%class.MSNetworkConfig = type { i32, i32, i32, i32 }
%class.MSwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.ASNetworkConfig = type { i32, i32 }
%class.ASwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.LookUpTableConfig = type { i32, i32 }
%class.SDMemoryConfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.14 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__._Z20runSparseGEMMCommandiPPc = external hidden unnamed_addr constant [40 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: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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) #0

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z20runSparseGEMMCommandiPPc(i32 noundef %0, ptr noundef %1) #2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca float, align 4
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::allocator", align 1
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %class.Config, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca %class.Config, align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca float, align 4
  store i32 %0, ptr %3, align 4, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #12
  store float 0x3FA99999A0000000, ptr %5, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %6) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #12
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #12
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %39 unwind label %85

39:                                               ; preds = %2
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #12
  store i32 4, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #12
  store i32 4, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #12
  store i32 8, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  store i32 0, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #12
  store i32 20, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #12
  store i32 20, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #12
  store i32 1, ptr %16, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 160, ptr %17) #12
  invoke void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160) %17)
          to label %40 unwind label %89

40:                                               ; preds = %39
  %41 = getelementptr inbounds %class.Config, ptr %17, i32 0, i32 8
  %42 = getelementptr inbounds %class.SDMemoryConfig, ptr %41, i32 0, i32 0
  store i32 1, ptr %42, align 4, !tbaa !15
  %43 = load i32, ptr %3, align 4, !tbaa !5
  %44 = load ptr, ptr %4, align 8, !tbaa !9
  invoke void @_Z26configSparseGEMMParametersiPPcR6ConfigRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjSA_SA_SA_SA_R8DataflowSA_(i32 noundef %43, ptr noundef %44, ptr noundef nonnull align 4 dereferenceable(160) %17, ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %45 unwind label %89

45:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #12
  %46 = load i32, ptr %10, align 4, !tbaa !5
  %47 = load i32, ptr %12, align 4, !tbaa !5
  %48 = load i32, ptr %14, align 4, !tbaa !5
  %49 = uitofp i32 %48 to float
  %50 = invoke noundef ptr @_Z19generateMatrixDensejjf(i32 noundef %46, i32 noundef %47, float noundef %49)
          to label %51 unwind label %93

51:                                               ; preds = %45
  store ptr %50, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #12
  %52 = load i32, ptr %10, align 4, !tbaa !5
  %53 = load i32, ptr %12, align 4, !tbaa !5
  %54 = mul i32 %52, %53
  %55 = zext i32 %54 to i64
  %56 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %55, i64 4)
  %57 = extractvalue { i64, i1 } %56, 1
  %58 = extractvalue { i64, i1 } %56, 0
  %59 = select i1 %57, i64 -1, i64 %58
  %60 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %59) #13
          to label %61 unwind label %97

61:                                               ; preds = %51
  store ptr %60, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #12
  %62 = load i32, ptr %12, align 4, !tbaa !5
  %63 = load i32, ptr %11, align 4, !tbaa !5
  %64 = load i32, ptr %15, align 4, !tbaa !5
  %65 = uitofp i32 %64 to float
  %66 = invoke noundef ptr @_Z19generateMatrixDensejjf(i32 noundef %62, i32 noundef %63, float noundef %65)
          to label %67 unwind label %101

67:                                               ; preds = %61
  store ptr %66, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #12
  %68 = load i32, ptr %12, align 4, !tbaa !5
  %69 = load i32, ptr %11, align 4, !tbaa !5
  %70 = mul i32 %68, %69
  %71 = zext i32 %70 to i64
  %72 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %71, i64 4)
  %73 = extractvalue { i64, i1 } %72, 1
  %74 = extractvalue { i64, i1 } %72, 0
  %75 = select i1 %73, i64 -1, i64 %74
  %76 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %75) #13
          to label %77 unwind label %105

77:                                               ; preds = %67
  store ptr %76, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #12
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %78

78:                                               ; preds = %119, %77
  %79 = load i32, ptr %22, align 4, !tbaa !5
  %80 = load i32, ptr %10, align 4, !tbaa !5
  %81 = load i32, ptr %12, align 4, !tbaa !5
  %82 = mul i32 %80, %81
  %83 = icmp ult i32 %79, %82
  br i1 %83, label %109, label %84

84:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #12
  br label %122

85:                                               ; preds = %2
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %8, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %9, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #12
  br label %561

89:                                               ; preds = %40, %39
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %8, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %9, align 4
  br label %560

93:                                               ; preds = %45
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %8, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %9, align 4
  br label %559

97:                                               ; preds = %51
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %8, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %9, align 4
  br label %558

101:                                              ; preds = %61
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %8, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %9, align 4
  br label %557

105:                                              ; preds = %67
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %8, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %9, align 4
  br label %556

109:                                              ; preds = %78
  %110 = load ptr, ptr %18, align 8, !tbaa !9
  %111 = load i32, ptr %22, align 4, !tbaa !5
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds float, ptr %110, i64 %112
  %114 = load float, ptr %113, align 4, !tbaa !11
  %115 = load ptr, ptr %19, align 8, !tbaa !9
  %116 = load i32, ptr %22, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds float, ptr %115, i64 %117
  store float %114, ptr %118, align 4, !tbaa !11
  br label %119

119:                                              ; preds = %109
  %120 = load i32, ptr %22, align 4, !tbaa !5
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %22, align 4, !tbaa !5
  br label %78, !llvm.loop !29

122:                                              ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #12
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %123

123:                                              ; preds = %140, %122
  %124 = load i32, ptr %23, align 4, !tbaa !5
  %125 = load i32, ptr %12, align 4, !tbaa !5
  %126 = load i32, ptr %11, align 4, !tbaa !5
  %127 = mul i32 %125, %126
  %128 = icmp ult i32 %124, %127
  br i1 %128, label %130, label %129

129:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #12
  br label %143

130:                                              ; preds = %123
  %131 = load ptr, ptr %20, align 8, !tbaa !9
  %132 = load i32, ptr %23, align 4, !tbaa !5
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds float, ptr %131, i64 %133
  %135 = load float, ptr %134, align 4, !tbaa !11
  %136 = load ptr, ptr %21, align 8, !tbaa !9
  %137 = load i32, ptr %23, align 4, !tbaa !5
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds float, ptr %136, i64 %138
  store float %135, ptr %139, align 4, !tbaa !11
  br label %140

140:                                              ; preds = %130
  %141 = load i32, ptr %23, align 4, !tbaa !5
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %23, align 4, !tbaa !5
  br label %123, !llvm.loop !31

143:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #12
  %144 = load i32, ptr %13, align 4, !tbaa !5
  %145 = load i32, ptr %16, align 4, !tbaa !13
  %146 = icmp eq i32 %145, 1
  %147 = zext i1 %146 to i32
  %148 = and i32 %144, %147
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %150, label %168

150:                                              ; preds = %143
  %151 = load ptr, ptr %18, align 8, !tbaa !9
  %152 = load i32, ptr %10, align 4, !tbaa !5
  %153 = load i32, ptr %12, align 4, !tbaa !5
  %154 = getelementptr inbounds %class.Config, ptr %17, i32 0, i32 3
  %155 = getelementptr inbounds %class.MSNetworkConfig, ptr %154, i32 0, i32 1
  %156 = load i32, ptr %155, align 4, !tbaa !32
  %157 = invoke noundef ptr @_Z17calculateOrderingPfjj15GENERATION_TYPEi(ptr noundef %151, i32 noundef %152, i32 noundef %153, i32 noundef 0, i32 noundef %156)
          to label %158 unwind label %164

158:                                              ; preds = %150
  store ptr %157, ptr %24, align 8, !tbaa !9
  %159 = load ptr, ptr %19, align 8, !tbaa !9
  %160 = load i32, ptr %10, align 4, !tbaa !5
  %161 = load i32, ptr %12, align 4, !tbaa !5
  %162 = load ptr, ptr %24, align 8, !tbaa !9
  invoke void @_Z14organizeMatrixPfjjPj15GENERATION_TYPE(ptr noundef %159, i32 noundef %160, i32 noundef %161, ptr noundef %162, i32 noundef 0)
          to label %163 unwind label %164

163:                                              ; preds = %158
  br label %190

164:                                              ; preds = %183, %175, %158, %150
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %8, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %9, align 4
  br label %555

168:                                              ; preds = %143
  %169 = load i32, ptr %13, align 4, !tbaa !5
  %170 = load i32, ptr %16, align 4, !tbaa !13
  %171 = icmp eq i32 %170, 2
  %172 = zext i1 %171 to i32
  %173 = and i32 %169, %172
  %174 = icmp ne i32 %173, 0
  br i1 %174, label %175, label %189

175:                                              ; preds = %168
  %176 = load ptr, ptr %20, align 8, !tbaa !9
  %177 = load i32, ptr %12, align 4, !tbaa !5
  %178 = load i32, ptr %11, align 4, !tbaa !5
  %179 = getelementptr inbounds %class.Config, ptr %17, i32 0, i32 3
  %180 = getelementptr inbounds %class.MSNetworkConfig, ptr %179, i32 0, i32 1
  %181 = load i32, ptr %180, align 4, !tbaa !32
  %182 = invoke noundef ptr @_Z17calculateOrderingPfjj15GENERATION_TYPEi(ptr noundef %176, i32 noundef %177, i32 noundef %178, i32 noundef 1, i32 noundef %181)
          to label %183 unwind label %164

183:                                              ; preds = %175
  store ptr %182, ptr %24, align 8, !tbaa !9
  %184 = load ptr, ptr %21, align 8, !tbaa !9
  %185 = load i32, ptr %12, align 4, !tbaa !5
  %186 = load i32, ptr %11, align 4, !tbaa !5
  %187 = load ptr, ptr %24, align 8, !tbaa !9
  invoke void @_Z14organizeMatrixPfjjPj15GENERATION_TYPE(ptr noundef %184, i32 noundef %185, i32 noundef %186, ptr noundef %187, i32 noundef 1)
          to label %188 unwind label %164

188:                                              ; preds = %183
  br label %189

189:                                              ; preds = %188, %168
  br label %190

190:                                              ; preds = %189, %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #12
  %191 = load i32, ptr %10, align 4, !tbaa !5
  %192 = load i32, ptr %11, align 4, !tbaa !5
  %193 = mul i32 %191, %192
  %194 = zext i32 %193 to i64
  %195 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %194, i64 4)
  %196 = extractvalue { i64, i1 } %195, 1
  %197 = extractvalue { i64, i1 } %195, 0
  %198 = select i1 %196, i64 -1, i64 %197
  %199 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %198) #13
          to label %200 unwind label %272

200:                                              ; preds = %190
  store ptr %199, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #12
  %201 = load i32, ptr %10, align 4, !tbaa !5
  %202 = load i32, ptr %11, align 4, !tbaa !5
  %203 = mul i32 %201, %202
  %204 = zext i32 %203 to i64
  %205 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %204, i64 4)
  %206 = extractvalue { i64, i1 } %205, 1
  %207 = extractvalue { i64, i1 } %205, 0
  %208 = select i1 %206, i64 -1, i64 %207
  %209 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %208) #13
          to label %210 unwind label %276

210:                                              ; preds = %200
  store ptr %209, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #12
  %211 = load i32, ptr %10, align 4, !tbaa !5
  %212 = load i32, ptr %11, align 4, !tbaa !5
  %213 = mul i32 %211, %212
  %214 = zext i32 %213 to i64
  %215 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %214, i64 4)
  %216 = extractvalue { i64, i1 } %215, 1
  %217 = extractvalue { i64, i1 } %215, 0
  %218 = select i1 %216, i64 -1, i64 %217
  %219 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %218) #13
          to label %220 unwind label %280

220:                                              ; preds = %210
  store ptr %219, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #12
  %221 = load ptr, ptr %19, align 8, !tbaa !9
  %222 = load i32, ptr %10, align 4, !tbaa !5
  %223 = load i32, ptr %12, align 4, !tbaa !5
  %224 = invoke noundef ptr @_Z23generateBitMapFromDensePfjj15GENERATION_TYPE(ptr noundef %221, i32 noundef %222, i32 noundef %223, i32 noundef 0)
          to label %225 unwind label %284

225:                                              ; preds = %220
  store ptr %224, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #12
  %226 = load ptr, ptr %21, align 8, !tbaa !9
  %227 = load i32, ptr %12, align 4, !tbaa !5
  %228 = load i32, ptr %11, align 4, !tbaa !5
  %229 = invoke noundef ptr @_Z23generateBitMapFromDensePfjj15GENERATION_TYPE(ptr noundef %226, i32 noundef %227, i32 noundef %228, i32 noundef 1)
          to label %230 unwind label %288

230:                                              ; preds = %225
  store ptr %229, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #12
  %231 = load ptr, ptr %19, align 8, !tbaa !9
  %232 = load ptr, ptr %28, align 8, !tbaa !9
  %233 = load i32, ptr %10, align 4, !tbaa !5
  %234 = load i32, ptr %12, align 4, !tbaa !5
  %235 = invoke noundef ptr @_Z29generateMatrixSparseFromDensePfPjjj15GENERATION_TYPE(ptr noundef %231, ptr noundef %232, i32 noundef %233, i32 noundef %234, i32 noundef 0)
          to label %236 unwind label %292

236:                                              ; preds = %230
  store ptr %235, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #12
  %237 = load ptr, ptr %21, align 8, !tbaa !9
  %238 = load ptr, ptr %29, align 8, !tbaa !9
  %239 = load i32, ptr %12, align 4, !tbaa !5
  %240 = load i32, ptr %11, align 4, !tbaa !5
  %241 = invoke noundef ptr @_Z29generateMatrixSparseFromDensePfPjjj15GENERATION_TYPE(ptr noundef %237, ptr noundef %238, i32 noundef %239, i32 noundef %240, i32 noundef 1)
          to label %242 unwind label %296

242:                                              ; preds = %236
  store ptr %241, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #12
  %243 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 320) #13
          to label %244 unwind label %300

244:                                              ; preds = %242
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %17, i64 160, i1 false), !tbaa.struct !33
  invoke void @_ZN6StonneC1E6Config(ptr noundef nonnull align 8 dereferenceable(316) %243, ptr noundef byval(%class.Config) align 8 %33)
          to label %245 unwind label %304

245:                                              ; preds = %244
  store ptr %243, ptr %32, align 8, !tbaa !9
  %246 = load ptr, ptr %32, align 8, !tbaa !9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %247 unwind label %300

247:                                              ; preds = %245
  %248 = load i32, ptr %11, align 4, !tbaa !5
  %249 = load i32, ptr %12, align 4, !tbaa !5
  %250 = load i32, ptr %10, align 4, !tbaa !5
  %251 = load ptr, ptr %30, align 8, !tbaa !9
  %252 = load ptr, ptr %31, align 8, !tbaa !9
  %253 = load ptr, ptr %28, align 8, !tbaa !9
  %254 = load ptr, ptr %29, align 8, !tbaa !9
  %255 = load ptr, ptr %26, align 8, !tbaa !9
  %256 = load ptr, ptr %27, align 8, !tbaa !9
  %257 = load i32, ptr %16, align 4, !tbaa !13
  invoke void @_ZN6Stonne8loadGEMMENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjjjPfS6_PjS7_S6_S7_8Dataflow(ptr noundef nonnull align 8 dereferenceable(316) %246, ptr noundef %34, i32 noundef %248, i32 noundef %249, i32 noundef %250, ptr noundef %251, ptr noundef %252, ptr noundef %253, ptr noundef %254, ptr noundef %255, ptr noundef %256, i32 noundef %257)
          to label %258 unwind label %308

258:                                              ; preds = %247
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #12
  %259 = load ptr, ptr %32, align 8, !tbaa !9
  invoke void @_ZN6Stonne3runEv(ptr noundef nonnull align 8 dereferenceable(316) %259)
          to label %260 unwind label %300

260:                                              ; preds = %258
  %261 = load i32, ptr %13, align 4, !tbaa !5
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %263, label %312

263:                                              ; preds = %260
  %264 = load i32, ptr %16, align 4, !tbaa !13
  %265 = icmp eq i32 %264, 1
  br i1 %265, label %266, label %312

266:                                              ; preds = %263
  %267 = load ptr, ptr %26, align 8, !tbaa !9
  %268 = load i32, ptr %10, align 4, !tbaa !5
  %269 = load i32, ptr %11, align 4, !tbaa !5
  %270 = load ptr, ptr %24, align 8, !tbaa !9
  invoke void @_Z18organizeMatrixBackPfjjPj15GENERATION_TYPE(ptr noundef %267, i32 noundef %268, i32 noundef %269, ptr noundef %270, i32 noundef 0)
          to label %271 unwind label %300

271:                                              ; preds = %266
  br label %325

272:                                              ; preds = %190
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %8, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %9, align 4
  br label %554

276:                                              ; preds = %200
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %8, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %9, align 4
  br label %553

280:                                              ; preds = %210
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %8, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %9, align 4
  br label %552

284:                                              ; preds = %220
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %8, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %9, align 4
  br label %551

288:                                              ; preds = %225
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %8, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %9, align 4
  br label %550

292:                                              ; preds = %230
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %8, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %9, align 4
  br label %549

296:                                              ; preds = %236
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %8, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %9, align 4
  br label %548

300:                                              ; preds = %488, %486, %484, %329, %327, %325, %318, %266, %258, %245, %242
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %8, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %9, align 4
  br label %547

304:                                              ; preds = %244
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %8, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %9, align 4
  call void @_ZdlPvm(ptr noundef %243, i64 noundef 320) #14
  br label %547

308:                                              ; preds = %247
  %309 = landingpad { ptr, i32 }
          cleanup
  %310 = extractvalue { ptr, i32 } %309, 0
  store ptr %310, ptr %8, align 8
  %311 = extractvalue { ptr, i32 } %309, 1
  store i32 %311, ptr %9, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #12
  br label %547

312:                                              ; preds = %263, %260
  %313 = load i32, ptr %13, align 4, !tbaa !5
  %314 = icmp ne i32 %313, 0
  br i1 %314, label %315, label %324

315:                                              ; preds = %312
  %316 = load i32, ptr %16, align 4, !tbaa !13
  %317 = icmp eq i32 %316, 2
  br i1 %317, label %318, label %324

318:                                              ; preds = %315
  %319 = load ptr, ptr %26, align 8, !tbaa !9
  %320 = load i32, ptr %10, align 4, !tbaa !5
  %321 = load i32, ptr %11, align 4, !tbaa !5
  %322 = load ptr, ptr %24, align 8, !tbaa !9
  invoke void @_Z18organizeMatrixBackPfjjPj15GENERATION_TYPE(ptr noundef %319, i32 noundef %320, i32 noundef %321, ptr noundef %322, i32 noundef 1)
          to label %323 unwind label %300

323:                                              ; preds = %318
  br label %324

324:                                              ; preds = %323, %315, %312
  br label %325

325:                                              ; preds = %324, %271
  %326 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.36)
          to label %327 unwind label %300

327:                                              ; preds = %325
  %328 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %326, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %329 unwind label %300

329:                                              ; preds = %327
  %330 = load ptr, ptr %18, align 8, !tbaa !9
  %331 = load ptr, ptr %20, align 8, !tbaa !9
  %332 = load ptr, ptr %25, align 8, !tbaa !9
  %333 = load i32, ptr %10, align 4, !tbaa !5
  %334 = load i32, ptr %11, align 4, !tbaa !5
  %335 = load i32, ptr %12, align 4, !tbaa !5
  invoke void @_Z8cpu_gemmPfS_S_jjj(ptr noundef %330, ptr noundef %331, ptr noundef %332, i32 noundef %333, i32 noundef %334, i32 noundef %335)
          to label %336 unwind label %300

336:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #12
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %337

337:                                              ; preds = %481, %336
  %338 = load i32, ptr %35, align 4, !tbaa !5
  %339 = load i32, ptr %10, align 4, !tbaa !5
  %340 = icmp ult i32 %338, %339
  br i1 %340, label %342, label %341

341:                                              ; preds = %337
  store i32 8, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #12
  br label %484

342:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #12
  store i32 0, ptr %37, align 4, !tbaa !5
  br label %343

343:                                              ; preds = %477, %342
  %344 = load i32, ptr %37, align 4, !tbaa !5
  %345 = load i32, ptr %11, align 4, !tbaa !5
  %346 = icmp ult i32 %344, %345
  br i1 %346, label %348, label %347

347:                                              ; preds = %343
  store i32 11, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  br label %480

348:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  %349 = load ptr, ptr %25, align 8, !tbaa !9
  %350 = load i32, ptr %35, align 4, !tbaa !5
  %351 = load i32, ptr %11, align 4, !tbaa !5
  %352 = mul i32 %350, %351
  %353 = load i32, ptr %37, align 4, !tbaa !5
  %354 = add i32 %352, %353
  %355 = zext i32 %354 to i64
  %356 = getelementptr inbounds float, ptr %349, i64 %355
  %357 = load float, ptr %356, align 4, !tbaa !11
  %358 = load ptr, ptr %26, align 8, !tbaa !9
  %359 = load i32, ptr %35, align 4, !tbaa !5
  %360 = load i32, ptr %11, align 4, !tbaa !5
  %361 = mul i32 %359, %360
  %362 = load i32, ptr %37, align 4, !tbaa !5
  %363 = add i32 %361, %362
  %364 = zext i32 %363 to i64
  %365 = getelementptr inbounds float, ptr %358, i64 %364
  %366 = load float, ptr %365, align 4, !tbaa !11
  %367 = fsub float %357, %366
  %368 = invoke noundef float @_ZSt4fabsf(float noundef %367)
          to label %369 unwind label %467

369:                                              ; preds = %348
  store float %368, ptr %38, align 4, !tbaa !11
  %370 = load float, ptr %38, align 4, !tbaa !11
  %371 = load float, ptr %5, align 4, !tbaa !11
  %372 = fcmp ogt float %370, %371
  br i1 %372, label %373, label %476

373:                                              ; preds = %369
  %374 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.37)
          to label %375 unwind label %467

375:                                              ; preds = %373
  %376 = load i32, ptr %35, align 4, !tbaa !5
  %377 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %374, i32 noundef %376)
          to label %378 unwind label %467

378:                                              ; preds = %375
  %379 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %377, ptr noundef @.str.38)
          to label %380 unwind label %467

380:                                              ; preds = %378
  %381 = load i32, ptr %37, align 4, !tbaa !5
  %382 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %379, i32 noundef %381)
          to label %383 unwind label %467

383:                                              ; preds = %380
  %384 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %382, ptr noundef @.str.39)
          to label %385 unwind label %467

385:                                              ; preds = %383
  %386 = load ptr, ptr %26, align 8, !tbaa !9
  %387 = load i32, ptr %35, align 4, !tbaa !5
  %388 = load i32, ptr %11, align 4, !tbaa !5
  %389 = mul i32 %387, %388
  %390 = load i32, ptr %37, align 4, !tbaa !5
  %391 = add i32 %389, %390
  %392 = zext i32 %391 to i64
  %393 = getelementptr inbounds float, ptr %386, i64 %392
  %394 = load float, ptr %393, align 4, !tbaa !11
  %395 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %384, float noundef %394)
          to label %396 unwind label %467

396:                                              ; preds = %385
  %397 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %395, ptr noundef @.str.40)
          to label %398 unwind label %467

398:                                              ; preds = %396
  %399 = load ptr, ptr %25, align 8, !tbaa !9
  %400 = load i32, ptr %35, align 4, !tbaa !5
  %401 = load i32, ptr %11, align 4, !tbaa !5
  %402 = mul i32 %400, %401
  %403 = load i32, ptr %37, align 4, !tbaa !5
  %404 = add i32 %402, %403
  %405 = zext i32 %404 to i64
  %406 = getelementptr inbounds float, ptr %399, i64 %405
  %407 = load float, ptr %406, align 4, !tbaa !11
  %408 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %397, float noundef %407)
          to label %409 unwind label %467

409:                                              ; preds = %398
  %410 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %408, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %411 unwind label %467

411:                                              ; preds = %409
  %412 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.14)
          to label %413 unwind label %467

413:                                              ; preds = %411
  %414 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %412, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %415 unwind label %467

415:                                              ; preds = %413
  %416 = load ptr, ptr %19, align 8, !tbaa !9
  %417 = icmp eq ptr %416, null
  br i1 %417, label %419, label %418

418:                                              ; preds = %415
  call void @_ZdaPv(ptr noundef %416) #14
  br label %419

419:                                              ; preds = %418, %415
  %420 = load ptr, ptr %21, align 8, !tbaa !9
  %421 = icmp eq ptr %420, null
  br i1 %421, label %423, label %422

422:                                              ; preds = %419
  call void @_ZdaPv(ptr noundef %420) #14
  br label %423

423:                                              ; preds = %422, %419
  %424 = load ptr, ptr %18, align 8, !tbaa !9
  %425 = icmp eq ptr %424, null
  br i1 %425, label %427, label %426

426:                                              ; preds = %423
  call void @_ZdaPv(ptr noundef %424) #14
  br label %427

427:                                              ; preds = %426, %423
  %428 = load ptr, ptr %20, align 8, !tbaa !9
  %429 = icmp eq ptr %428, null
  br i1 %429, label %431, label %430

430:                                              ; preds = %427
  call void @_ZdaPv(ptr noundef %428) #14
  br label %431

431:                                              ; preds = %430, %427
  %432 = load ptr, ptr %28, align 8, !tbaa !9
  %433 = icmp eq ptr %432, null
  br i1 %433, label %435, label %434

434:                                              ; preds = %431
  call void @_ZdaPv(ptr noundef %432) #14
  br label %435

435:                                              ; preds = %434, %431
  %436 = load ptr, ptr %29, align 8, !tbaa !9
  %437 = icmp eq ptr %436, null
  br i1 %437, label %439, label %438

438:                                              ; preds = %435
  call void @_ZdaPv(ptr noundef %436) #14
  br label %439

439:                                              ; preds = %438, %435
  %440 = load ptr, ptr %30, align 8, !tbaa !9
  %441 = icmp eq ptr %440, null
  br i1 %441, label %443, label %442

442:                                              ; preds = %439
  call void @_ZdaPv(ptr noundef %440) #14
  br label %443

443:                                              ; preds = %442, %439
  %444 = load ptr, ptr %31, align 8, !tbaa !9
  %445 = icmp eq ptr %444, null
  br i1 %445, label %447, label %446

446:                                              ; preds = %443
  call void @_ZdaPv(ptr noundef %444) #14
  br label %447

447:                                              ; preds = %446, %443
  %448 = load ptr, ptr %25, align 8, !tbaa !9
  %449 = icmp eq ptr %448, null
  br i1 %449, label %451, label %450

450:                                              ; preds = %447
  call void @_ZdaPv(ptr noundef %448) #14
  br label %451

451:                                              ; preds = %450, %447
  %452 = load ptr, ptr %26, align 8, !tbaa !9
  %453 = icmp eq ptr %452, null
  br i1 %453, label %455, label %454

454:                                              ; preds = %451
  call void @_ZdaPv(ptr noundef %452) #14
  br label %455

455:                                              ; preds = %454, %451
  %456 = load ptr, ptr %27, align 8, !tbaa !9
  %457 = icmp eq ptr %456, null
  br i1 %457, label %459, label %458

458:                                              ; preds = %455
  call void @_ZdaPv(ptr noundef %456) #14
  br label %459

459:                                              ; preds = %458, %455
  %460 = load i32, ptr %13, align 4, !tbaa !5
  %461 = icmp ne i32 %460, 0
  br i1 %461, label %462, label %471

462:                                              ; preds = %459
  %463 = load ptr, ptr %24, align 8, !tbaa !9
  %464 = icmp eq ptr %463, null
  br i1 %464, label %466, label %465

465:                                              ; preds = %462
  call void @_ZdaPv(ptr noundef %463) #14
  br label %466

466:                                              ; preds = %465, %462
  br label %471

467:                                              ; preds = %413, %411, %409, %398, %396, %385, %383, %380, %378, %375, %373, %348
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %8, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #12
  br label %547

471:                                              ; preds = %466, %459
  %472 = load ptr, ptr %32, align 8, !tbaa !9
  %473 = icmp eq ptr %472, null
  br i1 %473, label %475, label %474

474:                                              ; preds = %471
  call void @_ZN6StonneD1Ev(ptr noundef nonnull align 8 dereferenceable(316) %472) #12
  call void @_ZdlPvm(ptr noundef %472, i64 noundef 320) #14
  br label %475

475:                                              ; preds = %474, %471
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.16, i32 noundef 445, ptr noundef @__PRETTY_FUNCTION__._Z20runSparseGEMMCommandiPPc) #15
  unreachable

476:                                              ; preds = %369
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %477

477:                                              ; preds = %476
  %478 = load i32, ptr %37, align 4, !tbaa !5
  %479 = add nsw i32 %478, 1
  store i32 %479, ptr %37, align 4, !tbaa !5
  br label %343, !llvm.loop !38

480:                                              ; preds = %347
  br label %481

481:                                              ; preds = %480
  %482 = load i32, ptr %35, align 4, !tbaa !5
  %483 = add nsw i32 %482, 1
  store i32 %483, ptr %35, align 4, !tbaa !5
  br label %337, !llvm.loop !39

484:                                              ; preds = %341
  %485 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.17)
          to label %486 unwind label %300

486:                                              ; preds = %484
  %487 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %485, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %488 unwind label %300

488:                                              ; preds = %486
  %489 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %487, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %490 unwind label %300

490:                                              ; preds = %488
  %491 = load ptr, ptr %18, align 8, !tbaa !9
  %492 = icmp eq ptr %491, null
  br i1 %492, label %494, label %493

493:                                              ; preds = %490
  call void @_ZdaPv(ptr noundef %491) #14
  br label %494

494:                                              ; preds = %493, %490
  %495 = load ptr, ptr %20, align 8, !tbaa !9
  %496 = icmp eq ptr %495, null
  br i1 %496, label %498, label %497

497:                                              ; preds = %494
  call void @_ZdaPv(ptr noundef %495) #14
  br label %498

498:                                              ; preds = %497, %494
  %499 = load ptr, ptr %19, align 8, !tbaa !9
  %500 = icmp eq ptr %499, null
  br i1 %500, label %502, label %501

501:                                              ; preds = %498
  call void @_ZdaPv(ptr noundef %499) #14
  br label %502

502:                                              ; preds = %501, %498
  %503 = load ptr, ptr %21, align 8, !tbaa !9
  %504 = icmp eq ptr %503, null
  br i1 %504, label %506, label %505

505:                                              ; preds = %502
  call void @_ZdaPv(ptr noundef %503) #14
  br label %506

506:                                              ; preds = %505, %502
  %507 = load ptr, ptr %28, align 8, !tbaa !9
  %508 = icmp eq ptr %507, null
  br i1 %508, label %510, label %509

509:                                              ; preds = %506
  call void @_ZdaPv(ptr noundef %507) #14
  br label %510

510:                                              ; preds = %509, %506
  %511 = load ptr, ptr %29, align 8, !tbaa !9
  %512 = icmp eq ptr %511, null
  br i1 %512, label %514, label %513

513:                                              ; preds = %510
  call void @_ZdaPv(ptr noundef %511) #14
  br label %514

514:                                              ; preds = %513, %510
  %515 = load ptr, ptr %30, align 8, !tbaa !9
  %516 = icmp eq ptr %515, null
  br i1 %516, label %518, label %517

517:                                              ; preds = %514
  call void @_ZdaPv(ptr noundef %515) #14
  br label %518

518:                                              ; preds = %517, %514
  %519 = load ptr, ptr %31, align 8, !tbaa !9
  %520 = icmp eq ptr %519, null
  br i1 %520, label %522, label %521

521:                                              ; preds = %518
  call void @_ZdaPv(ptr noundef %519) #14
  br label %522

522:                                              ; preds = %521, %518
  %523 = load ptr, ptr %25, align 8, !tbaa !9
  %524 = icmp eq ptr %523, null
  br i1 %524, label %526, label %525

525:                                              ; preds = %522
  call void @_ZdaPv(ptr noundef %523) #14
  br label %526

526:                                              ; preds = %525, %522
  %527 = load ptr, ptr %26, align 8, !tbaa !9
  %528 = icmp eq ptr %527, null
  br i1 %528, label %530, label %529

529:                                              ; preds = %526
  call void @_ZdaPv(ptr noundef %527) #14
  br label %530

530:                                              ; preds = %529, %526
  %531 = load ptr, ptr %27, align 8, !tbaa !9
  %532 = icmp eq ptr %531, null
  br i1 %532, label %534, label %533

533:                                              ; preds = %530
  call void @_ZdaPv(ptr noundef %531) #14
  br label %534

534:                                              ; preds = %533, %530
  %535 = load i32, ptr %13, align 4, !tbaa !5
  %536 = icmp ne i32 %535, 0
  br i1 %536, label %537, label %542

537:                                              ; preds = %534
  %538 = load ptr, ptr %24, align 8, !tbaa !9
  %539 = icmp eq ptr %538, null
  br i1 %539, label %541, label %540

540:                                              ; preds = %537
  call void @_ZdaPv(ptr noundef %538) #14
  br label %541

541:                                              ; preds = %540, %537
  br label %542

542:                                              ; preds = %541, %534
  %543 = load ptr, ptr %32, align 8, !tbaa !9
  %544 = icmp eq ptr %543, null
  br i1 %544, label %546, label %545

545:                                              ; preds = %542
  call void @_ZN6StonneD1Ev(ptr noundef nonnull align 8 dereferenceable(316) %543) #12
  call void @_ZdlPvm(ptr noundef %543, i64 noundef 320) #14
  br label %546

546:                                              ; preds = %545, %542
  store i32 1, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 160, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #12
  ret i1 true

547:                                              ; preds = %467, %308, %304, %300
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #12
  br label %548

548:                                              ; preds = %547, %296
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #12
  br label %549

549:                                              ; preds = %548, %292
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  br label %550

550:                                              ; preds = %549, %288
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  br label %551

551:                                              ; preds = %550, %284
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  br label %552

552:                                              ; preds = %551, %280
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  br label %553

553:                                              ; preds = %552, %276
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  br label %554

554:                                              ; preds = %553, %272
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  br label %555

555:                                              ; preds = %554, %164
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #12
  br label %556

556:                                              ; preds = %555, %105
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  br label %557

557:                                              ; preds = %556, %101
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  br label %558

558:                                              ; preds = %557, %97
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #12
  br label %559

559:                                              ; preds = %558, %93
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  br label %560

560:                                              ; preds = %559, %89
  call void @llvm.lifetime.end.p0(i64 160, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #12
  br label %561

561:                                              ; preds = %560, %85
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #12
  br label %562

562:                                              ; preds = %561
  %563 = load ptr, ptr %8, align 8
  %564 = load i32, ptr %9, align 4
  %565 = insertvalue { ptr, i32 } poison, ptr %563, 0
  %566 = insertvalue { ptr, i32 } %565, i32 %564, 1
  resume { ptr, i32 } %566
}

; 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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 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 nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

declare void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160)) unnamed_addr #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #5

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #6

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #6

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

declare void @_ZN6StonneC1E6Config(ptr noundef nonnull align 8 dereferenceable(316), ptr noundef byval(%class.Config) align 8) unnamed_addr #4

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #8

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

declare void @_ZN6Stonne3runEv(ptr noundef nonnull align 8 dereferenceable(316)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) #9

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #8

; Function Attrs: nounwind
declare void @_ZN6StonneD1Ev(ptr noundef nonnull align 8 dereferenceable(316)) unnamed_addr #10

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z26configSparseGEMMParametersiPPcR6ConfigRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjSA_SA_SA_SA_R8DataflowSA_(i32 noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(160), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #2

declare noundef ptr @_Z19generateMatrixDensejjf(i32 noundef, i32 noundef, float noundef) #4

declare noundef ptr @_Z17calculateOrderingPfjj15GENERATION_TYPEi(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #4

declare void @_Z14organizeMatrixPfjjPj15GENERATION_TYPE(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) #4

declare noundef ptr @_Z23generateBitMapFromDensePfjj15GENERATION_TYPE(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #4

declare noundef ptr @_Z29generateMatrixSparseFromDensePfPjjj15GENERATION_TYPE(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #4

declare void @_ZN6Stonne8loadGEMMENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjjjPfS6_PjS7_S6_S7_8Dataflow(ptr noundef nonnull align 8 dereferenceable(316), ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

declare void @_Z18organizeMatrixBackPfjjPj15GENERATION_TYPE(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) #4

declare void @_Z8cpu_gemmPfS_S_jjj(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #4

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress 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 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nobuiltin allocsize(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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { nobuiltin 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 #9 = { 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 #10 = { 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 #11 = { 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 #12 = { nounwind }
attributes #13 = { builtin allocsize(0) }
attributes #14 = { builtin nounwind }
attributes #15 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTS8Dataflow", !7, i64 0}
!15 = !{!16, !27, i64 104}
!16 = !{!"_ZTS6Config", !6, i64 0, !17, i64 4, !18, i64 8, !19, i64 24, !21, i64 40, !22, i64 64, !24, i64 72, !25, i64 96, !26, i64 104}
!17 = !{!"_ZTS15DSNetworkConfig", !6, i64 0}
!18 = !{!"_ZTS13DSwitchConfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!19 = !{!"_ZTS15MSNetworkConfig", !20, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!20 = !{!"_ZTS19MultiplierNetwork_t", !7, i64 0}
!21 = !{!"_ZTS13MSwitchConfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20}
!22 = !{!"_ZTS15ASNetworkConfig", !23, i64 0, !6, i64 4}
!23 = !{!"_ZTS15ReduceNetwork_t", !7, i64 0}
!24 = !{!"_ZTS13ASwitchConfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20}
!25 = !{!"_ZTS17LookUpTableConfig", !6, i64 0, !6, i64 4}
!26 = !{!"_ZTS14SDMemoryConfig", !27, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !28, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52}
!27 = !{!"_ZTS18MemoryController_t", !7, i64 0}
!28 = !{!"_ZTS17MemoryHierarchy_t", !7, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!16, !6, i64 28}
!33 = !{i64 0, i64 4, !5, i64 4, i64 4, !5, i64 8, i64 4, !5, i64 12, i64 4, !5, i64 16, i64 4, !5, i64 20, i64 4, !5, i64 24, i64 4, !34, i64 28, i64 4, !5, i64 32, i64 4, !5, i64 36, i64 4, !5, i64 40, i64 4, !5, i64 44, i64 4, !5, i64 48, i64 4, !5, i64 52, i64 4, !5, i64 56, i64 4, !5, i64 60, i64 4, !5, i64 64, i64 4, !35, i64 68, i64 4, !5, i64 72, i64 4, !5, i64 76, i64 4, !5, i64 80, i64 4, !5, i64 84, i64 4, !5, i64 88, i64 4, !5, i64 92, i64 4, !5, i64 96, i64 4, !5, i64 100, i64 4, !5, i64 104, i64 4, !36, i64 108, i64 4, !5, i64 112, i64 4, !5, i64 116, i64 4, !5, i64 120, i64 4, !5, i64 124, i64 4, !5, i64 128, i64 4, !5, i64 132, i64 4, !37, i64 136, i64 4, !5, i64 140, i64 4, !5, i64 144, i64 4, !5, i64 148, i64 4, !5, i64 152, i64 4, !5, i64 156, i64 4, !5}
!34 = !{!20, !20, i64 0}
!35 = !{!23, !23, i64 0}
!36 = !{!27, !27, i64 0}
!37 = !{!28, !28, i64 0}
!38 = distinct !{!38, !30}
!39 = distinct !{!39, !30}


; 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_ostream" = type { ptr, %"class.std::basic_ios" }
%"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::locale" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%class.Config = type { i32, %class.DSNetworkConfig, %class.DSwitchConfig, %class.MSNetworkConfig, %class.MSwitchConfig, %class.ASNetworkConfig, %class.ASwitchConfig, %class.LookUpTableConfig, %class.SDMemoryConfig }
%class.DSNetworkConfig = type { i32 }
%class.DSwitchConfig = type { i32, i32, i32, i32 }
%class.MSNetworkConfig = type { i32, i32, i32, i32 }
%class.MSwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.ASNetworkConfig = type { i32, i32 }
%class.ASwitchConfig = type { i32, i32, i32, i32, i32, i32 }
%class.LookUpTableConfig = type { i32, i32 }
%class.SDMemoryConfig = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.14 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [87 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__._Z20runSparseGEMMCommandiPPc = external hidden unnamed_addr constant [40 x i8], align 1

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 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) #0

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z20runSparseGEMMCommandiPPc(i32 noundef %0, ptr noundef %1) local_unnamed_addr #2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::__cxx11::basic_string", align 8
  %4 = alloca %"class.std::allocator", align 1
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %class.Config, align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull @.str.35, ptr noundef nonnull align 1 dereferenceable(1) %4)
          to label %14 unwind label %70

14:                                               ; preds = %2
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #10
  store i32 4, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #10
  store i32 4, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #10
  store i32 8, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #10
  store i32 0, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #10
  store i32 20, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #10
  store i32 20, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #10
  store i32 1, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %12) #10
  invoke void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160) %12)
          to label %15 unwind label %72

15:                                               ; preds = %14
  %16 = getelementptr inbounds i8, ptr %12, i64 104
  store i32 1, ptr %16, align 8, !tbaa !11
  invoke void @_Z26configSparseGEMMParametersiPPcR6ConfigRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjSA_SA_SA_SA_R8DataflowSA_(i32 noundef %0, ptr noundef %1, ptr noundef nonnull align 4 dereferenceable(160) %12, ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %17 unwind label %72

17:                                               ; preds = %15
  %18 = load i32, ptr %5, align 4, !tbaa !5
  %19 = load i32, ptr %7, align 4, !tbaa !5
  %20 = load i32, ptr %9, align 4, !tbaa !5
  %21 = uitofp i32 %20 to float
  %22 = invoke noundef ptr @_Z19generateMatrixDensejjf(i32 noundef %18, i32 noundef %19, float noundef %21)
          to label %23 unwind label %74

23:                                               ; preds = %17
  %24 = ptrtoint ptr %22 to i64
  %25 = load i32, ptr %5, align 4, !tbaa !5
  %26 = load i32, ptr %7, align 4, !tbaa !5
  %27 = mul i32 %26, %25
  %28 = zext i32 %27 to i64
  %29 = shl nuw nsw i64 %28, 2
  %30 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %29) #11
          to label %31 unwind label %76

31:                                               ; preds = %23
  %32 = ptrtoint ptr %30 to i64
  %33 = load i32, ptr %6, align 4, !tbaa !5
  %34 = load i32, ptr %10, align 4, !tbaa !5
  %35 = uitofp i32 %34 to float
  %36 = invoke noundef ptr @_Z19generateMatrixDensejjf(i32 noundef %26, i32 noundef %33, float noundef %35)
          to label %37 unwind label %78

37:                                               ; preds = %31
  %38 = ptrtoint ptr %36 to i64
  %39 = load i32, ptr %7, align 4, !tbaa !5
  %40 = load i32, ptr %6, align 4, !tbaa !5
  %41 = mul i32 %40, %39
  %42 = zext i32 %41 to i64
  %43 = shl nuw nsw i64 %42, 2
  %44 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %43) #11
          to label %.preheader148 unwind label %80

.preheader148:                                    ; preds = %37
  %45 = ptrtoint ptr %44 to i64
  %46 = load i32, ptr %5, align 4, !tbaa !5
  %47 = mul i32 %46, %39
  %.not159 = icmp eq i32 %47, 0
  br i1 %.not159, label %.preheader147, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader148
  %wide.trip.count = zext i32 %47 to i64
  %min.iters.check = icmp ult i32 %47, 8
  %48 = sub i64 %32, %24
  %diff.check = icmp ult i64 %48, 32
  %or.cond194 = or i1 %min.iters.check, %diff.check
  br i1 %or.cond194, label %.lr.ph.preheader199, label %vector.ph

.lr.ph.preheader199:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader199, %.lr.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %.lr.ph.prol ], [ %indvars.iv.ph, %.lr.ph.preheader199 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader199 ]
  %49 = getelementptr inbounds float, ptr %22, i64 %indvars.iv.prol
  %50 = load float, ptr %49, align 4, !tbaa !25
  %51 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.prol
  store float %50, ptr %51, align 4, !tbaa !25
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !27

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader199
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph.preheader199 ], [ %indvars.iv.next.prol, %.lr.ph.prol ]
  %52 = sub nsw i64 %indvars.iv.ph, %wide.trip.count
  %53 = icmp ugt i64 %52, -4
  br i1 %53, label %.preheader147, label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 4294967288
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %54 = getelementptr inbounds float, ptr %22, i64 %index
  %55 = getelementptr inbounds i8, ptr %54, i64 16
  %wide.load = load <4 x float>, ptr %54, align 4, !tbaa !25
  %wide.load178 = load <4 x float>, ptr %55, align 4, !tbaa !25
  %56 = getelementptr inbounds float, ptr %30, i64 %index
  %57 = getelementptr inbounds i8, ptr %56, i64 16
  store <4 x float> %wide.load, ptr %56, align 4, !tbaa !25
  store <4 x float> %wide.load178, ptr %57, align 4, !tbaa !25
  %index.next = add nuw i64 %index, 8
  %58 = icmp eq i64 %index.next, %n.vec
  br i1 %58, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.preheader147, label %.lr.ph.preheader199

.preheader147:                                    ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %middle.block, %.preheader148
  %.not160 = icmp eq i32 %41, 0
  br i1 %.not160, label %._crit_edge, label %.lr.ph153.preheader

.lr.ph153.preheader:                              ; preds = %.preheader147
  %min.iters.check183 = icmp ult i32 %41, 8
  %59 = sub i64 %45, %38
  %diff.check180 = icmp ult i64 %59, 32
  %or.cond195 = or i1 %min.iters.check183, %diff.check180
  br i1 %or.cond195, label %.lr.ph153.preheader198, label %vector.ph184

.lr.ph153.preheader198:                           ; preds = %middle.block181, %.lr.ph153.preheader
  %indvars.iv168.ph = phi i64 [ 0, %.lr.ph153.preheader ], [ %n.vec186, %middle.block181 ]
  %xtraiter200 = and i64 %42, 3
  %lcmp.mod201.not = icmp eq i64 %xtraiter200, 0
  br i1 %lcmp.mod201.not, label %.lr.ph153.prol.loopexit, label %.lr.ph153.prol

.lr.ph153.prol:                                   ; preds = %.lr.ph153.preheader198, %.lr.ph153.prol
  %indvars.iv168.prol = phi i64 [ %indvars.iv.next169.prol, %.lr.ph153.prol ], [ %indvars.iv168.ph, %.lr.ph153.preheader198 ]
  %prol.iter202 = phi i64 [ %prol.iter202.next, %.lr.ph153.prol ], [ 0, %.lr.ph153.preheader198 ]
  %60 = getelementptr inbounds float, ptr %36, i64 %indvars.iv168.prol
  %61 = load float, ptr %60, align 4, !tbaa !25
  %62 = getelementptr inbounds float, ptr %44, i64 %indvars.iv168.prol
  store float %61, ptr %62, align 4, !tbaa !25
  %indvars.iv.next169.prol = add nuw nsw i64 %indvars.iv168.prol, 1
  %prol.iter202.next = add i64 %prol.iter202, 1
  %prol.iter202.cmp.not = icmp eq i64 %prol.iter202.next, %xtraiter200
  br i1 %prol.iter202.cmp.not, label %.lr.ph153.prol.loopexit, label %.lr.ph153.prol, !llvm.loop !33

.lr.ph153.prol.loopexit:                          ; preds = %.lr.ph153.prol, %.lr.ph153.preheader198
  %indvars.iv168.unr = phi i64 [ %indvars.iv168.ph, %.lr.ph153.preheader198 ], [ %indvars.iv.next169.prol, %.lr.ph153.prol ]
  %63 = sub nsw i64 %indvars.iv168.ph, %42
  %64 = icmp ugt i64 %63, -4
  br i1 %64, label %._crit_edge, label %.lr.ph153

vector.ph184:                                     ; preds = %.lr.ph153.preheader
  %n.vec186 = and i64 %42, 4294967288
  br label %vector.body188

vector.body188:                                   ; preds = %vector.body188, %vector.ph184
  %index189 = phi i64 [ 0, %vector.ph184 ], [ %index.next192, %vector.body188 ]
  %65 = getelementptr inbounds float, ptr %36, i64 %index189
  %66 = getelementptr inbounds i8, ptr %65, i64 16
  %wide.load190 = load <4 x float>, ptr %65, align 4, !tbaa !25
  %wide.load191 = load <4 x float>, ptr %66, align 4, !tbaa !25
  %67 = getelementptr inbounds float, ptr %44, i64 %index189
  %68 = getelementptr inbounds i8, ptr %67, i64 16
  store <4 x float> %wide.load190, ptr %67, align 4, !tbaa !25
  store <4 x float> %wide.load191, ptr %68, align 4, !tbaa !25
  %index.next192 = add nuw i64 %index189, 8
  %69 = icmp eq i64 %index.next192, %n.vec186
  br i1 %69, label %middle.block181, label %vector.body188, !llvm.loop !34

middle.block181:                                  ; preds = %vector.body188
  %cmp.n193 = icmp eq i64 %n.vec186, %42
  br i1 %cmp.n193, label %._crit_edge, label %.lr.ph153.preheader198

70:                                               ; preds = %2
  %71 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %4) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #10
  br label %313

72:                                               ; preds = %15, %14
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %312

74:                                               ; preds = %17
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %312

76:                                               ; preds = %23
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %312

78:                                               ; preds = %31
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %312

80:                                               ; preds = %37
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %312

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %.lr.ph ], [ %indvars.iv.unr, %.lr.ph.prol.loopexit ]
  %82 = getelementptr inbounds float, ptr %22, i64 %indvars.iv
  %83 = load float, ptr %82, align 4, !tbaa !25
  %84 = getelementptr inbounds float, ptr %30, i64 %indvars.iv
  store float %83, ptr %84, align 4, !tbaa !25
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %85 = getelementptr inbounds float, ptr %22, i64 %indvars.iv.next
  %86 = load float, ptr %85, align 4, !tbaa !25
  %87 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.next
  store float %86, ptr %87, align 4, !tbaa !25
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %88 = getelementptr inbounds float, ptr %22, i64 %indvars.iv.next.1
  %89 = load float, ptr %88, align 4, !tbaa !25
  %90 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.next.1
  store float %89, ptr %90, align 4, !tbaa !25
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %91 = getelementptr inbounds float, ptr %22, i64 %indvars.iv.next.2
  %92 = load float, ptr %91, align 4, !tbaa !25
  %93 = getelementptr inbounds float, ptr %30, i64 %indvars.iv.next.2
  store float %92, ptr %93, align 4, !tbaa !25
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %.preheader147, label %.lr.ph, !llvm.loop !35

._crit_edge:                                      ; preds = %.lr.ph153.prol.loopexit, %.lr.ph153, %middle.block181, %.preheader147
  %94 = load i32, ptr %8, align 4, !tbaa !5
  %95 = load i32, ptr %11, align 4, !tbaa !9
  %96 = icmp ne i32 %95, 1
  %97 = and i32 %94, 1
  %.not124 = icmp eq i32 %97, 0
  %.not = select i1 %96, i1 true, i1 %.not124
  br i1 %.not, label %119, label %110

.lr.ph153:                                        ; preds = %.lr.ph153.prol.loopexit, %.lr.ph153
  %indvars.iv168 = phi i64 [ %indvars.iv.next169.3, %.lr.ph153 ], [ %indvars.iv168.unr, %.lr.ph153.prol.loopexit ]
  %98 = getelementptr inbounds float, ptr %36, i64 %indvars.iv168
  %99 = load float, ptr %98, align 4, !tbaa !25
  %100 = getelementptr inbounds float, ptr %44, i64 %indvars.iv168
  store float %99, ptr %100, align 4, !tbaa !25
  %indvars.iv.next169 = add nuw nsw i64 %indvars.iv168, 1
  %101 = getelementptr inbounds float, ptr %36, i64 %indvars.iv.next169
  %102 = load float, ptr %101, align 4, !tbaa !25
  %103 = getelementptr inbounds float, ptr %44, i64 %indvars.iv.next169
  store float %102, ptr %103, align 4, !tbaa !25
  %indvars.iv.next169.1 = add nuw nsw i64 %indvars.iv168, 2
  %104 = getelementptr inbounds float, ptr %36, i64 %indvars.iv.next169.1
  %105 = load float, ptr %104, align 4, !tbaa !25
  %106 = getelementptr inbounds float, ptr %44, i64 %indvars.iv.next169.1
  store float %105, ptr %106, align 4, !tbaa !25
  %indvars.iv.next169.2 = add nuw nsw i64 %indvars.iv168, 3
  %107 = getelementptr inbounds float, ptr %36, i64 %indvars.iv.next169.2
  %108 = load float, ptr %107, align 4, !tbaa !25
  %109 = getelementptr inbounds float, ptr %44, i64 %indvars.iv.next169.2
  store float %108, ptr %109, align 4, !tbaa !25
  %indvars.iv.next169.3 = add nuw nsw i64 %indvars.iv168, 4
  %exitcond172.not.3 = icmp eq i64 %indvars.iv.next169.3, %42
  br i1 %exitcond172.not.3, label %._crit_edge, label %.lr.ph153, !llvm.loop !36

110:                                              ; preds = %._crit_edge
  %111 = getelementptr inbounds i8, ptr %12, i64 28
  %112 = load i32, ptr %111, align 4, !tbaa !37
  %113 = invoke noundef ptr @_Z17calculateOrderingPfjj15GENERATION_TYPEi(ptr noundef %22, i32 noundef %46, i32 noundef %39, i32 noundef 0, i32 noundef %112)
          to label %114 unwind label %117

114:                                              ; preds = %110
  %115 = load i32, ptr %5, align 4, !tbaa !5
  %116 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_Z14organizeMatrixPfjjPj15GENERATION_TYPE(ptr noundef nonnull %30, i32 noundef %115, i32 noundef %116, ptr noundef %113, i32 noundef 0)
          to label %128 unwind label %117

117:                                              ; preds = %125, %121, %114, %110
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %312

119:                                              ; preds = %._crit_edge
  %120 = icmp ne i32 %95, 2
  %.not125 = select i1 %120, i1 true, i1 %.not124
  br i1 %.not125, label %128, label %121

121:                                              ; preds = %119
  %122 = getelementptr inbounds i8, ptr %12, i64 28
  %123 = load i32, ptr %122, align 4, !tbaa !37
  %124 = invoke noundef ptr @_Z17calculateOrderingPfjj15GENERATION_TYPEi(ptr noundef %36, i32 noundef %39, i32 noundef %40, i32 noundef 1, i32 noundef %123)
          to label %125 unwind label %117

125:                                              ; preds = %121
  %126 = load i32, ptr %7, align 4, !tbaa !5
  %127 = load i32, ptr %6, align 4, !tbaa !5
  invoke void @_Z14organizeMatrixPfjjPj15GENERATION_TYPE(ptr noundef nonnull %44, i32 noundef %126, i32 noundef %127, ptr noundef %124, i32 noundef 1)
          to label %128 unwind label %117

128:                                              ; preds = %119, %125, %114
  %.0110 = phi ptr [ %113, %114 ], [ %124, %125 ], [ undef, %119 ]
  %129 = load i32, ptr %5, align 4, !tbaa !5
  %130 = load i32, ptr %6, align 4, !tbaa !5
  %131 = mul i32 %130, %129
  %132 = zext i32 %131 to i64
  %133 = shl nuw nsw i64 %132, 2
  %134 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %133) #11
          to label %135 unwind label %169

135:                                              ; preds = %128
  %136 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %133) #11
          to label %137 unwind label %171

137:                                              ; preds = %135
  %138 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %133) #11
          to label %139 unwind label %173

139:                                              ; preds = %137
  %140 = load i32, ptr %7, align 4, !tbaa !5
  %141 = invoke noundef ptr @_Z23generateBitMapFromDensePfjj15GENERATION_TYPE(ptr noundef nonnull %30, i32 noundef %129, i32 noundef %140, i32 noundef 0)
          to label %142 unwind label %175

142:                                              ; preds = %139
  %143 = load i32, ptr %7, align 4, !tbaa !5
  %144 = load i32, ptr %6, align 4, !tbaa !5
  %145 = invoke noundef ptr @_Z23generateBitMapFromDensePfjj15GENERATION_TYPE(ptr noundef nonnull %44, i32 noundef %143, i32 noundef %144, i32 noundef 1)
          to label %146 unwind label %177

146:                                              ; preds = %142
  %147 = load i32, ptr %5, align 4, !tbaa !5
  %148 = load i32, ptr %7, align 4, !tbaa !5
  %149 = invoke noundef ptr @_Z29generateMatrixSparseFromDensePfPjjj15GENERATION_TYPE(ptr noundef nonnull %30, ptr noundef %141, i32 noundef %147, i32 noundef %148, i32 noundef 0)
          to label %150 unwind label %179

150:                                              ; preds = %146
  %151 = load i32, ptr %7, align 4, !tbaa !5
  %152 = load i32, ptr %6, align 4, !tbaa !5
  %153 = invoke noundef ptr @_Z29generateMatrixSparseFromDensePfPjjj15GENERATION_TYPE(ptr noundef nonnull %44, ptr noundef %145, i32 noundef %151, i32 noundef %152, i32 noundef 1)
          to label %154 unwind label %181

154:                                              ; preds = %150
  %155 = invoke noalias noundef nonnull dereferenceable(320) ptr @_Znwm(i64 noundef 320) #11
          to label %156 unwind label %183

156:                                              ; preds = %154
  invoke void @_ZN6StonneC1E6Config(ptr noundef nonnull align 8 dereferenceable(316) %155, ptr noundef nonnull byval(%class.Config) align 8 %12)
          to label %157 unwind label %185

157:                                              ; preds = %156
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(32) %3)
          to label %158 unwind label %183

158:                                              ; preds = %157
  %159 = load i32, ptr %6, align 4, !tbaa !5
  %160 = load i32, ptr %7, align 4, !tbaa !5
  %161 = load i32, ptr %5, align 4, !tbaa !5
  %162 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN6Stonne8loadGEMMENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjjjPfS6_PjS7_S6_S7_8Dataflow(ptr noundef nonnull align 8 dereferenceable(316) %155, ptr noundef nonnull %13, i32 noundef %159, i32 noundef %160, i32 noundef %161, ptr noundef %149, ptr noundef %153, ptr noundef %141, ptr noundef %145, ptr noundef nonnull %136, ptr noundef nonnull %138, i32 noundef %162)
          to label %163 unwind label %187

163:                                              ; preds = %158
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  invoke void @_ZN6Stonne3runEv(ptr noundef nonnull align 8 dereferenceable(316) %155)
          to label %164 unwind label %183

164:                                              ; preds = %163
  %165 = load i32, ptr %8, align 4, !tbaa !5
  %166 = icmp ne i32 %165, 0
  %167 = load i32, ptr %11, align 4
  %168 = icmp eq i32 %167, 1
  %or.cond = select i1 %166, i1 %168, i1 false
  br i1 %or.cond, label %.invoke, label %189

169:                                              ; preds = %128
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %312

171:                                              ; preds = %135
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %312

173:                                              ; preds = %137
  %174 = landingpad { ptr, i32 }
          cleanup
  br label %312

175:                                              ; preds = %139
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %312

177:                                              ; preds = %142
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %312

179:                                              ; preds = %146
  %180 = landingpad { ptr, i32 }
          cleanup
  br label %312

181:                                              ; preds = %150
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %312

183:                                              ; preds = %.invoke, %287, %285, %._crit_edge158, %198, %196, %194, %163, %157, %154
  %184 = landingpad { ptr, i32 }
          cleanup
  br label %312

185:                                              ; preds = %156
  %186 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %155, i64 noundef 320) #12
  br label %312

187:                                              ; preds = %158
  %188 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #10
  br label %312

189:                                              ; preds = %164
  %190 = icmp eq i32 %167, 2
  %or.cond3 = select i1 %166, i1 %190, i1 false
  br i1 %or.cond3, label %.invoke, label %194

.invoke:                                          ; preds = %189, %164
  %191 = phi i32 [ 0, %164 ], [ 1, %189 ]
  %192 = load i32, ptr %6, align 4, !tbaa !5
  %193 = load i32, ptr %5, align 4, !tbaa !5
  invoke void @_Z18organizeMatrixBackPfjjPj15GENERATION_TYPE(ptr noundef nonnull %136, i32 noundef %193, i32 noundef %192, ptr noundef %.0110, i32 noundef %191)
          to label %194 unwind label %183

194:                                              ; preds = %.invoke, %189
  %195 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.36)
          to label %196 unwind label %183

196:                                              ; preds = %194
  %197 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %195, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %198 unwind label %183

198:                                              ; preds = %196
  %199 = load i32, ptr %5, align 4, !tbaa !5
  %200 = load i32, ptr %6, align 4, !tbaa !5
  %201 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_Z8cpu_gemmPfS_S_jjj(ptr noundef %22, ptr noundef %36, ptr noundef nonnull %134, i32 noundef %199, i32 noundef %200, i32 noundef %201)
          to label %.preheader146 unwind label %183

.preheader146:                                    ; preds = %198
  %202 = load i32, ptr %5, align 4, !tbaa !5
  %.not161 = icmp eq i32 %202, 0
  %203 = load i32, ptr %6, align 4
  %.not162 = icmp eq i32 %203, 0
  %or.cond175 = select i1 %.not161, i1 true, i1 %.not162
  br i1 %or.cond175, label %._crit_edge158, label %.preheader

.preheader:                                       ; preds = %.preheader146, %._crit_edge156
  %204 = phi i32 [ %207, %._crit_edge156 ], [ %202, %.preheader146 ]
  %205 = phi i32 [ %208, %._crit_edge156 ], [ %203, %.preheader146 ]
  %.092157 = phi i32 [ %209, %._crit_edge156 ], [ 0, %.preheader146 ]
  %.not163 = icmp eq i32 %205, 0
  br i1 %.not163, label %._crit_edge156, label %.lr.ph155

._crit_edge158:                                   ; preds = %._crit_edge156, %.preheader146
  %206 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.17)
          to label %285 unwind label %183

._crit_edge156.loopexit:                          ; preds = %281
  %.pre = load i32, ptr %5, align 4, !tbaa !5
  br label %._crit_edge156

._crit_edge156:                                   ; preds = %._crit_edge156.loopexit, %.preheader
  %207 = phi i32 [ %.pre, %._crit_edge156.loopexit ], [ %204, %.preheader ]
  %208 = phi i32 [ %283, %._crit_edge156.loopexit ], [ 0, %.preheader ]
  %209 = add nuw nsw i32 %.092157, 1
  %210 = icmp ult i32 %209, %207
  br i1 %210, label %.preheader, label %._crit_edge158, !llvm.loop !38

.lr.ph155:                                        ; preds = %.preheader, %281
  %211 = phi i32 [ %283, %281 ], [ %205, %.preheader ]
  %.091154 = phi i32 [ %282, %281 ], [ 0, %.preheader ]
  %212 = mul i32 %211, %.092157
  %213 = add i32 %212, %.091154
  %214 = zext i32 %213 to i64
  %215 = getelementptr inbounds float, ptr %134, i64 %214
  %216 = load float, ptr %215, align 4, !tbaa !25
  %217 = getelementptr inbounds float, ptr %136, i64 %214
  %218 = load float, ptr %217, align 4, !tbaa !25
  %219 = fsub float %216, %218
  %220 = call noundef float @_ZSt4fabsf(float noundef %219)
  %221 = fcmp ogt float %220, 0x3FA99999A0000000
  br i1 %221, label %222, label %281

222:                                              ; preds = %.lr.ph155
  %223 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.37)
          to label %224 unwind label %278

224:                                              ; preds = %222
  %225 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %223, i32 noundef %.092157)
          to label %226 unwind label %278

226:                                              ; preds = %224
  %227 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %225, ptr noundef nonnull @.str.38)
          to label %228 unwind label %278

228:                                              ; preds = %226
  %229 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %227, i32 noundef %.091154)
          to label %230 unwind label %278

230:                                              ; preds = %228
  %231 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %229, ptr noundef nonnull @.str.39)
          to label %232 unwind label %278

232:                                              ; preds = %230
  %233 = load i32, ptr %6, align 4, !tbaa !5
  %234 = mul i32 %233, %.092157
  %235 = add i32 %234, %.091154
  %236 = zext i32 %235 to i64
  %237 = getelementptr inbounds float, ptr %136, i64 %236
  %238 = load float, ptr %237, align 4, !tbaa !25
  %239 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %231, float noundef %238)
          to label %240 unwind label %278

240:                                              ; preds = %232
  %241 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %239, ptr noundef nonnull @.str.40)
          to label %242 unwind label %278

242:                                              ; preds = %240
  %243 = load i32, ptr %6, align 4, !tbaa !5
  %244 = mul i32 %243, %.092157
  %245 = add i32 %244, %.091154
  %246 = zext i32 %245 to i64
  %247 = getelementptr inbounds float, ptr %134, i64 %246
  %248 = load float, ptr %247, align 4, !tbaa !25
  %249 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %241, float noundef %248)
          to label %250 unwind label %278

250:                                              ; preds = %242
  %251 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %249, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %252 unwind label %278

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

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

256:                                              ; preds = %254
  call void @_ZdaPv(ptr noundef nonnull %30) #12
  call void @_ZdaPv(ptr noundef nonnull %44) #12
  %257 = icmp eq ptr %22, null
  br i1 %257, label %259, label %258

258:                                              ; preds = %256
  call void @_ZdaPv(ptr noundef nonnull %22) #12
  br label %259

259:                                              ; preds = %258, %256
  %260 = icmp eq ptr %36, null
  br i1 %260, label %262, label %261

261:                                              ; preds = %259
  call void @_ZdaPv(ptr noundef nonnull %36) #12
  br label %262

262:                                              ; preds = %261, %259
  %263 = icmp eq ptr %141, null
  br i1 %263, label %265, label %264

264:                                              ; preds = %262
  call void @_ZdaPv(ptr noundef nonnull %141) #12
  br label %265

265:                                              ; preds = %264, %262
  %266 = icmp eq ptr %145, null
  br i1 %266, label %268, label %267

267:                                              ; preds = %265
  call void @_ZdaPv(ptr noundef nonnull %145) #12
  br label %268

268:                                              ; preds = %267, %265
  %269 = icmp eq ptr %149, null
  br i1 %269, label %271, label %270

270:                                              ; preds = %268
  call void @_ZdaPv(ptr noundef nonnull %149) #12
  br label %271

271:                                              ; preds = %270, %268
  %272 = icmp eq ptr %153, null
  br i1 %272, label %274, label %273

273:                                              ; preds = %271
  call void @_ZdaPv(ptr noundef nonnull %153) #12
  br label %274

274:                                              ; preds = %271, %273
  call void @_ZdaPv(ptr noundef nonnull %134) #12
  call void @_ZdaPv(ptr noundef nonnull %136) #12
  call void @_ZdaPv(ptr noundef nonnull %138) #12
  %275 = load i32, ptr %8, align 4, !tbaa !5
  %.not143 = icmp eq i32 %275, 0
  %276 = icmp eq ptr %.0110, null
  %or.cond144 = or i1 %276, %.not143
  br i1 %or.cond144, label %280, label %277

277:                                              ; preds = %274
  call void @_ZdaPv(ptr noundef nonnull %.0110) #12
  br label %280

278:                                              ; preds = %254, %252, %250, %242, %240, %232, %230, %228, %226, %224, %222
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %312

280:                                              ; preds = %274, %277
  call void @_ZN6StonneD1Ev(ptr noundef nonnull align 8 dereferenceable(316) %155) #10
  call void @_ZdlPvm(ptr noundef nonnull %155, i64 noundef 320) #12
  call void @__assert_fail(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.16, i32 noundef 445, ptr noundef nonnull @__PRETTY_FUNCTION__._Z20runSparseGEMMCommandiPPc) #13
  unreachable

281:                                              ; preds = %.lr.ph155
  %282 = add nuw nsw i32 %.091154, 1
  %283 = load i32, ptr %6, align 4, !tbaa !5
  %284 = icmp ult i32 %282, %283
  br i1 %284, label %.lr.ph155, label %._crit_edge156.loopexit, !llvm.loop !40

285:                                              ; preds = %._crit_edge158
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %206, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %287 unwind label %183

287:                                              ; preds = %285
  %288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %286, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %289 unwind label %183

289:                                              ; preds = %287
  %290 = icmp eq ptr %22, null
  br i1 %290, label %292, label %291

291:                                              ; preds = %289
  call void @_ZdaPv(ptr noundef nonnull %22) #12
  br label %292

292:                                              ; preds = %291, %289
  %293 = icmp eq ptr %36, null
  br i1 %293, label %295, label %294

294:                                              ; preds = %292
  call void @_ZdaPv(ptr noundef nonnull %36) #12
  br label %295

295:                                              ; preds = %292, %294
  call void @_ZdaPv(ptr noundef nonnull %30) #12
  call void @_ZdaPv(ptr noundef nonnull %44) #12
  %296 = icmp eq ptr %141, null
  br i1 %296, label %298, label %297

297:                                              ; preds = %295
  call void @_ZdaPv(ptr noundef nonnull %141) #12
  br label %298

298:                                              ; preds = %297, %295
  %299 = icmp eq ptr %145, null
  br i1 %299, label %301, label %300

300:                                              ; preds = %298
  call void @_ZdaPv(ptr noundef nonnull %145) #12
  br label %301

301:                                              ; preds = %300, %298
  %302 = icmp eq ptr %149, null
  br i1 %302, label %304, label %303

303:                                              ; preds = %301
  call void @_ZdaPv(ptr noundef nonnull %149) #12
  br label %304

304:                                              ; preds = %303, %301
  %305 = icmp eq ptr %153, null
  br i1 %305, label %307, label %306

306:                                              ; preds = %304
  call void @_ZdaPv(ptr noundef nonnull %153) #12
  br label %307

307:                                              ; preds = %304, %306
  call void @_ZdaPv(ptr noundef nonnull %134) #12
  call void @_ZdaPv(ptr noundef nonnull %136) #12
  call void @_ZdaPv(ptr noundef nonnull %138) #12
  %308 = load i32, ptr %8, align 4, !tbaa !5
  %.not127 = icmp eq i32 %308, 0
  %309 = icmp eq ptr %.0110, null
  %or.cond145 = or i1 %309, %.not127
  br i1 %or.cond145, label %311, label %310

310:                                              ; preds = %307
  call void @_ZdaPv(ptr noundef nonnull %.0110) #12
  br label %311

311:                                              ; preds = %307, %310
  call void @_ZN6StonneD1Ev(ptr noundef nonnull align 8 dereferenceable(316) %155) #10
  call void @_ZdlPvm(ptr noundef nonnull %155, i64 noundef 320) #12
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #10
  ret i1 true

312:                                              ; preds = %74, %78, %117, %171, %175, %179, %183, %185, %187, %278, %181, %177, %173, %169, %80, %76, %72
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %73, %72 ], [ %75, %74 ], [ %77, %76 ], [ %79, %78 ], [ %81, %80 ], [ %118, %117 ], [ %170, %169 ], [ %172, %171 ], [ %174, %173 ], [ %176, %175 ], [ %178, %177 ], [ %180, %179 ], [ %182, %181 ], [ %279, %278 ], [ %184, %183 ], [ %188, %187 ], [ %186, %185 ]
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #10
  br label %313

313:                                              ; preds = %312, %70
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %312 ], [ %71, %70 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #10
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

; 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

; 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 #2 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 nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

declare void @_ZN6ConfigC1Ev(ptr noundef nonnull align 4 dereferenceable(160)) unnamed_addr #4

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #5

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #5

declare void @_ZN6StonneC1E6Config(ptr noundef nonnull align 8 dereferenceable(316), ptr noundef byval(%class.Config) align 8) unnamed_addr #4

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

declare void @_ZN6Stonne3runEv(ptr noundef nonnull align 8 dereferenceable(316)) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) local_unnamed_addr #7

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #6

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z26configSparseGEMMParametersiPPcR6ConfigRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjSA_SA_SA_SA_R8DataflowSA_(i32 noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(160), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

declare noundef ptr @_Z19generateMatrixDensejjf(i32 noundef, i32 noundef, float noundef) local_unnamed_addr #4

declare noundef ptr @_Z17calculateOrderingPfjj15GENERATION_TYPEi(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @_Z14organizeMatrixPfjjPj15GENERATION_TYPE(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

declare noundef ptr @_Z23generateBitMapFromDensePfjj15GENERATION_TYPE(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare noundef ptr @_Z29generateMatrixSparseFromDensePfPjjj15GENERATION_TYPE(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @_ZN6Stonne8loadGEMMENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjjjPfS6_PjS7_S6_S7_8Dataflow(ptr noundef nonnull align 8 dereferenceable(316), ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

declare void @_Z18organizeMatrixBackPfjjPj15GENERATION_TYPE(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

declare void @_Z8cpu_gemmPfS_S_jjj(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress 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 = { "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 = { nobuiltin allocsize(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 = { nobuiltin 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 #7 = { 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 #8 = { 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 #9 = { 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 #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin nounwind }
attributes #13 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTS8Dataflow", !7, i64 0}
!11 = !{!12, !23, i64 104}
!12 = !{!"_ZTS6Config", !6, i64 0, !13, i64 4, !14, i64 8, !15, i64 24, !17, i64 40, !18, i64 64, !20, i64 72, !21, i64 96, !22, i64 104}
!13 = !{!"_ZTS15DSNetworkConfig", !6, i64 0}
!14 = !{!"_ZTS13DSwitchConfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!15 = !{!"_ZTS15MSNetworkConfig", !16, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!16 = !{!"_ZTS19MultiplierNetwork_t", !7, i64 0}
!17 = !{!"_ZTS13MSwitchConfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20}
!18 = !{!"_ZTS15ASNetworkConfig", !19, i64 0, !6, i64 4}
!19 = !{!"_ZTS15ReduceNetwork_t", !7, i64 0}
!20 = !{!"_ZTS13ASwitchConfig", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20}
!21 = !{!"_ZTS17LookUpTableConfig", !6, i64 0, !6, i64 4}
!22 = !{!"_ZTS14SDMemoryConfig", !23, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !24, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52}
!23 = !{!"_ZTS18MemoryController_t", !7, i64 0}
!24 = !{!"_ZTS17MemoryHierarchy_t", !7, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"float", !7, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.unroll.disable"}
!29 = distinct !{!29, !30, !31, !32}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!"llvm.loop.isvectorized", i32 1}
!32 = !{!"llvm.loop.unroll.runtime.disable"}
!33 = distinct !{!33, !28}
!34 = distinct !{!34, !30, !31, !32}
!35 = distinct !{!35, !30, !31}
!36 = distinct !{!36, !30, !31}
!37 = !{!12, !6, i64 28}
!38 = distinct !{!38, !30, !39}
!39 = !{!"llvm.loop.unswitch.partial.disable"}
!40 = distinct !{!40, !30}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MemCpyOptPass,ReassociatePass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass