; LLVM IR from libxsmm/libxsmm :: src (generator_spgemm_csc_bsparse)

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

%struct.libxsmm_gemm_descriptor = type <{ i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], i8, i64, i64, i8, i32, i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, i32, i32, i32, i8 }>

@.str = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [58 x i8], align 1
@__func__.libxsmm_generator_spgemm_csc_bsparse = external hidden unnamed_addr constant [37 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [84 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@.str.23 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [96 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_spgemm_csc_bsparse(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca [512 x i8], align 16
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 512, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 511, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  %21 = load ptr, ptr %12, align 8, !tbaa !5
  %22 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %23 = load i32, ptr %18, align 4, !tbaa !9
  %24 = sext i32 %23 to i64
  %25 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %22, i64 noundef %24, ptr noundef @.str) #5
  store i32 %25, ptr %19, align 4, !tbaa !9
  %26 = load ptr, ptr %7, align 8, !tbaa !5
  %27 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %28 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %26, ptr noundef %27, i32 noundef %28)
  %29 = load ptr, ptr %8, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %29, i32 0, i32 6
  %31 = load i32, ptr %30, align 1, !tbaa !11
  %32 = and i32 4, %31
  %33 = icmp ne i32 0, %32
  br i1 %33, label %34, label %110

34:                                               ; preds = %6
  %35 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %36 = load i32, ptr %18, align 4, !tbaa !9
  %37 = sext i32 %36 to i64
  %38 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %35, i64 noundef %37, ptr noundef @.str.1) #5
  store i32 %38, ptr %19, align 4, !tbaa !9
  %39 = load ptr, ptr %7, align 8, !tbaa !5
  %40 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %41 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %39, ptr noundef %40, i32 noundef %41)
  %42 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %43 = load i32, ptr %18, align 4, !tbaa !9
  %44 = sext i32 %43 to i64
  %45 = load ptr, ptr %8, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %45, i32 0, i32 1
  %47 = load i32, ptr %46, align 1, !tbaa !15
  %48 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %42, i64 noundef %44, ptr noundef @.str.2, i32 noundef %47) #5
  store i32 %48, ptr %19, align 4, !tbaa !9
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %51 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %49, ptr noundef %50, i32 noundef %51)
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %52, i32 0, i32 0
  %54 = load i32, ptr %53, align 1, !tbaa !16
  %55 = icmp ugt i32 %54, 1
  br i1 %55, label %56, label %71

56:                                               ; preds = %34
  %57 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %58 = load i32, ptr %18, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %57, i64 noundef %59, ptr noundef @.str.3) #5
  store i32 %60, ptr %19, align 4, !tbaa !9
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %63 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %61, ptr noundef %62, i32 noundef %63)
  %64 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %65 = load i32, ptr %18, align 4, !tbaa !9
  %66 = sext i32 %65 to i64
  %67 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %64, i64 noundef %66, ptr noundef @.str.4) #5
  store i32 %67, ptr %19, align 4, !tbaa !9
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %70 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %68, ptr noundef %69, i32 noundef %70)
  br label %71

71:                                               ; preds = %56, %34
  %72 = load ptr, ptr %8, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %72, i32 0, i32 8
  %74 = getelementptr inbounds [3 x i8], ptr %73, i64 0, i64 0
  %75 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %74)
  %76 = icmp eq i32 0, %75
  br i1 %76, label %77, label %88

77:                                               ; preds = %71
  %78 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %79 = load i32, ptr %18, align 4, !tbaa !9
  %80 = sext i32 %79 to i64
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %81, i32 0, i32 0
  %83 = load i32, ptr %82, align 1, !tbaa !16
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %84, i32 0, i32 5
  %86 = load i32, ptr %85, align 1, !tbaa !17
  %87 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %78, i64 noundef %80, ptr noundef @.str.5, i32 noundef %83, i32 noundef %86) #5
  store i32 %87, ptr %19, align 4, !tbaa !9
  br label %99

88:                                               ; preds = %71
  %89 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %90 = load i32, ptr %18, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = load ptr, ptr %8, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %92, i32 0, i32 0
  %94 = load i32, ptr %93, align 1, !tbaa !16
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %95, i32 0, i32 5
  %97 = load i32, ptr %96, align 1, !tbaa !17
  %98 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %89, i64 noundef %91, ptr noundef @.str.6, i32 noundef %94, i32 noundef %97) #5
  store i32 %98, ptr %19, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %88, %77
  %100 = load ptr, ptr %7, align 8, !tbaa !5
  %101 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %102 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %100, ptr noundef %101, i32 noundef %102)
  %103 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %104 = load i32, ptr %18, align 4, !tbaa !9
  %105 = sext i32 %104 to i64
  %106 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %103, i64 noundef %105, ptr noundef @.str.7) #5
  store i32 %106, ptr %19, align 4, !tbaa !9
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  %108 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %109 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %107, ptr noundef %108, i32 noundef %109)
  br label %110

110:                                              ; preds = %99, %6
  %111 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %112 = load i32, ptr %18, align 4, !tbaa !9
  %113 = sext i32 %112 to i64
  %114 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %111, i64 noundef %113, ptr noundef @.str.8) #5
  store i32 %114, ptr %19, align 4, !tbaa !9
  %115 = load ptr, ptr %7, align 8, !tbaa !5
  %116 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %117 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %115, ptr noundef %116, i32 noundef %117)
  %118 = load ptr, ptr %9, align 8, !tbaa !5
  %119 = call i32 @strcmp(ptr noundef %118, ptr noundef @.str.9) #6
  %120 = icmp eq i32 %119, 0
  br i1 %120, label %133, label %121

121:                                              ; preds = %110
  %122 = load ptr, ptr %9, align 8, !tbaa !5
  %123 = call i32 @strcmp(ptr noundef %122, ptr noundef @.str.10) #6
  %124 = icmp eq i32 %123, 0
  br i1 %124, label %133, label %125

125:                                              ; preds = %121
  %126 = load ptr, ptr %9, align 8, !tbaa !5
  %127 = call i32 @strcmp(ptr noundef %126, ptr noundef @.str.11) #6
  %128 = icmp eq i32 %127, 0
  br i1 %128, label %133, label %129

129:                                              ; preds = %125
  %130 = load ptr, ptr %9, align 8, !tbaa !5
  %131 = call i32 @strcmp(ptr noundef %130, ptr noundef @.str.12) #6
  %132 = icmp eq i32 %131, 0
  br i1 %132, label %133, label %201

133:                                              ; preds = %129, %125, %121, %110
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %134, i32 0, i32 0
  %136 = load i32, ptr %135, align 1, !tbaa !16
  %137 = icmp ugt i32 %136, 7
  br i1 %137, label %138, label %146

138:                                              ; preds = %133
  %139 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %140 = load i32, ptr %18, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %139, i64 noundef %141, ptr noundef @.str.13) #5
  store i32 %142, ptr %19, align 4, !tbaa !9
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %145 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %143, ptr noundef %144, i32 noundef %145)
  br label %175

146:                                              ; preds = %133
  %147 = load ptr, ptr %8, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %147, i32 0, i32 0
  %149 = load i32, ptr %148, align 1, !tbaa !16
  %150 = icmp ugt i32 %149, 3
  br i1 %150, label %151, label %159

151:                                              ; preds = %146
  %152 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %153 = load i32, ptr %18, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %152, i64 noundef %154, ptr noundef @.str.14) #5
  store i32 %155, ptr %19, align 4, !tbaa !9
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  %157 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %158 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %156, ptr noundef %157, i32 noundef %158)
  br label %174

159:                                              ; preds = %146
  %160 = load ptr, ptr %8, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %160, i32 0, i32 0
  %162 = load i32, ptr %161, align 1, !tbaa !16
  %163 = icmp ugt i32 %162, 1
  br i1 %163, label %164, label %172

164:                                              ; preds = %159
  %165 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %166 = load i32, ptr %18, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %165, i64 noundef %167, ptr noundef @.str.15) #5
  store i32 %168, ptr %19, align 4, !tbaa !9
  %169 = load ptr, ptr %7, align 8, !tbaa !5
  %170 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %171 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %169, ptr noundef %170, i32 noundef %171)
  br label %173

172:                                              ; preds = %159
  br label %173

173:                                              ; preds = %172, %164
  br label %174

174:                                              ; preds = %173, %151
  br label %175

175:                                              ; preds = %174, %138
  %176 = load ptr, ptr %8, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %176, i32 0, i32 0
  %178 = load i32, ptr %177, align 1, !tbaa !16
  %179 = icmp ugt i32 %178, 1
  br i1 %179, label %180, label %200

180:                                              ; preds = %175
  %181 = load ptr, ptr %8, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %181, i32 0, i32 6
  %183 = load i32, ptr %182, align 1, !tbaa !11
  %184 = and i32 8, %183
  %185 = icmp ne i32 %184, 0
  br i1 %185, label %186, label %200

186:                                              ; preds = %180
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %187, i32 0, i32 6
  %189 = load i32, ptr %188, align 1, !tbaa !11
  %190 = and i32 16, %189
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %200

192:                                              ; preds = %186
  %193 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %194 = load i32, ptr %18, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %193, i64 noundef %195, ptr noundef @.str.16) #5
  store i32 %196, ptr %19, align 4, !tbaa !9
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %199 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %197, ptr noundef %198, i32 noundef %199)
  br label %200

200:                                              ; preds = %192, %186, %180, %175
  br label %253

201:                                              ; preds = %129
  %202 = load ptr, ptr %9, align 8, !tbaa !5
  %203 = call i32 @strcmp(ptr noundef %202, ptr noundef @.str.17) #6
  %204 = icmp eq i32 %203, 0
  br i1 %204, label %217, label %205

205:                                              ; preds = %201
  %206 = load ptr, ptr %9, align 8, !tbaa !5
  %207 = call i32 @strcmp(ptr noundef %206, ptr noundef @.str.18) #6
  %208 = icmp eq i32 %207, 0
  br i1 %208, label %217, label %209

209:                                              ; preds = %205
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = call i32 @strcmp(ptr noundef %210, ptr noundef @.str.19) #6
  %212 = icmp eq i32 %211, 0
  br i1 %212, label %217, label %213

213:                                              ; preds = %209
  %214 = load ptr, ptr %9, align 8, !tbaa !5
  %215 = call i32 @strcmp(ptr noundef %214, ptr noundef @.str.20) #6
  %216 = icmp eq i32 %215, 0
  br i1 %216, label %217, label %243

217:                                              ; preds = %213, %209, %205, %201
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %218, i32 0, i32 0
  %220 = load i32, ptr %219, align 1, !tbaa !16
  %221 = icmp ugt i32 %220, 1
  br i1 %221, label %222, label %242

222:                                              ; preds = %217
  %223 = load ptr, ptr %8, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %223, i32 0, i32 6
  %225 = load i32, ptr %224, align 1, !tbaa !11
  %226 = and i32 8, %225
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %228, label %242

228:                                              ; preds = %222
  %229 = load ptr, ptr %8, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %229, i32 0, i32 6
  %231 = load i32, ptr %230, align 1, !tbaa !11
  %232 = and i32 16, %231
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %234, label %242

234:                                              ; preds = %228
  %235 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %236 = load i32, ptr %18, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %235, i64 noundef %237, ptr noundef @.str.21) #5
  store i32 %238, ptr %19, align 4, !tbaa !9
  %239 = load ptr, ptr %7, align 8, !tbaa !5
  %240 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %241 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %239, ptr noundef %240, i32 noundef %241)
  br label %242

242:                                              ; preds = %234, %228, %222, %217
  br label %252

243:                                              ; preds = %213
  %244 = load ptr, ptr %7, align 8, !tbaa !5
  %245 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %246 = icmp ult i32 1, %245
  br i1 %246, label %247, label %249

247:                                              ; preds = %243
  %248 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %250

249:                                              ; preds = %243
  br label %250

250:                                              ; preds = %249, %247
  %251 = phi i32 [ %248, %247 ], [ 1, %249 ]
  call void @libxsmm_handle_error(ptr noundef %244, i32 noundef 90005, ptr noundef @__func__.libxsmm_generator_spgemm_csc_bsparse, ptr noundef @.str.22, i32 noundef 132, i32 noundef %251)
  store i32 1, ptr %20, align 4
  br label %368

252:                                              ; preds = %242
  br label %253

253:                                              ; preds = %252, %200
  %254 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %255 = load i32, ptr %18, align 4, !tbaa !9
  %256 = sext i32 %255 to i64
  %257 = load ptr, ptr %8, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %257, i32 0, i32 0
  %259 = load i32, ptr %258, align 1, !tbaa !16
  %260 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %254, i64 noundef %256, ptr noundef @.str.23, i32 noundef %259) #5
  store i32 %260, ptr %19, align 4, !tbaa !9
  %261 = load ptr, ptr %7, align 8, !tbaa !5
  %262 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %263 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %261, ptr noundef %262, i32 noundef %263)
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %264

264:                                              ; preds = %345, %253
  %265 = load i32, ptr %13, align 4, !tbaa !9
  %266 = load ptr, ptr %8, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %266, i32 0, i32 1
  %268 = load i32, ptr %267, align 1, !tbaa !15
  %269 = icmp ult i32 %265, %268
  br i1 %269, label %270, label %348

270:                                              ; preds = %264
  %271 = load ptr, ptr %11, align 8, !tbaa !5
  %272 = load i32, ptr %13, align 4, !tbaa !9
  %273 = add i32 %272, 1
  %274 = zext i32 %273 to i64
  %275 = getelementptr inbounds i32, ptr %271, i64 %274
  %276 = load i32, ptr %275, align 4, !tbaa !9
  %277 = load ptr, ptr %11, align 8, !tbaa !5
  %278 = load i32, ptr %13, align 4, !tbaa !9
  %279 = zext i32 %278 to i64
  %280 = getelementptr inbounds i32, ptr %277, i64 %279
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = sub i32 %276, %281
  store i32 %282, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %341, %270
  %284 = load i32, ptr %14, align 4, !tbaa !9
  %285 = load i32, ptr %15, align 4, !tbaa !9
  %286 = icmp ult i32 %284, %285
  br i1 %286, label %287, label %344

287:                                              ; preds = %283
  %288 = load ptr, ptr %10, align 8, !tbaa !5
  %289 = load ptr, ptr %11, align 8, !tbaa !5
  %290 = load i32, ptr %13, align 4, !tbaa !9
  %291 = zext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %289, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !9
  %294 = load i32, ptr %14, align 4, !tbaa !9
  %295 = add i32 %293, %294
  %296 = zext i32 %295 to i64
  %297 = getelementptr inbounds i32, ptr %288, i64 %296
  %298 = load i32, ptr %297, align 4, !tbaa !9
  %299 = load ptr, ptr %8, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %299, i32 0, i32 2
  %301 = load i32, ptr %300, align 1, !tbaa !18
  %302 = icmp ult i32 %298, %301
  br i1 %302, label %303, label %340

303:                                              ; preds = %287
  %304 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %305 = load i32, ptr %18, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = load i32, ptr %13, align 4, !tbaa !9
  %308 = load ptr, ptr %8, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %308, i32 0, i32 5
  %310 = load i32, ptr %309, align 1, !tbaa !17
  %311 = mul i32 %307, %310
  %312 = load ptr, ptr %10, align 8, !tbaa !5
  %313 = load ptr, ptr %11, align 8, !tbaa !5
  %314 = load i32, ptr %13, align 4, !tbaa !9
  %315 = zext i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %313, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !9
  %318 = load i32, ptr %14, align 4, !tbaa !9
  %319 = add i32 %317, %318
  %320 = zext i32 %319 to i64
  %321 = getelementptr inbounds i32, ptr %312, i64 %320
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = load ptr, ptr %8, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %323, i32 0, i32 3
  %325 = load i32, ptr %324, align 1, !tbaa !19
  %326 = mul i32 %322, %325
  %327 = load ptr, ptr %11, align 8, !tbaa !5
  %328 = load i32, ptr %13, align 4, !tbaa !9
  %329 = zext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %327, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !9
  %332 = load i32, ptr %14, align 4, !tbaa !9
  %333 = add i32 %331, %332
  %334 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %304, i64 noundef %306, ptr noundef @.str.24, i32 noundef %311, i32 noundef %326, i32 noundef %333) #5
  store i32 %334, ptr %19, align 4, !tbaa !9
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  %336 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %337 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %335, ptr noundef %336, i32 noundef %337)
  %338 = load i32, ptr %16, align 4, !tbaa !9
  %339 = add i32 %338, 2
  store i32 %339, ptr %16, align 4, !tbaa !9
  br label %340

340:                                              ; preds = %303, %287
  br label %341

341:                                              ; preds = %340
  %342 = load i32, ptr %14, align 4, !tbaa !9
  %343 = add i32 %342, 1
  store i32 %343, ptr %14, align 4, !tbaa !9
  br label %283, !llvm.loop !20

344:                                              ; preds = %283
  br label %345

345:                                              ; preds = %344
  %346 = load i32, ptr %13, align 4, !tbaa !9
  %347 = add i32 %346, 1
  store i32 %347, ptr %13, align 4, !tbaa !9
  br label %264, !llvm.loop !22

348:                                              ; preds = %264
  %349 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %350 = load i32, ptr %18, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %349, i64 noundef %351, ptr noundef @.str.7) #5
  store i32 %352, ptr %19, align 4, !tbaa !9
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %355 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %353, ptr noundef %354, i32 noundef %355)
  %356 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %357 = load i32, ptr %18, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = load i32, ptr %16, align 4, !tbaa !9
  %360 = load ptr, ptr %8, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %360, i32 0, i32 0
  %362 = load i32, ptr %361, align 1, !tbaa !16
  %363 = mul i32 %359, %362
  %364 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %356, i64 noundef %358, ptr noundef @.str.25, i32 noundef %363) #5
  store i32 %364, ptr %19, align 4, !tbaa !9
  %365 = load ptr, ptr %7, align 8, !tbaa !5
  %366 = getelementptr inbounds [512 x i8], ptr %17, i64 0, i64 0
  %367 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %365, ptr noundef %366, i32 noundef %367)
  store i32 0, ptr %20, align 4
  br label %368

368:                                              ; preds = %348, %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 512, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  %369 = load i32, ptr %20, align 4
  switch i32 %369, label %371 [
    i32 0, label %370
    i32 1, label %370
  ]

370:                                              ; preds = %368, %368
  ret void

371:                                              ; preds = %368
  unreachable
}

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

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #2

declare void @libxsmm_append_code_as_string(ptr noundef, ptr noundef, i32 noundef) #3

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #3

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 24}
!12 = !{!"libxsmm_gemm_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !7, i64 28, !7, i64 29, !7, i64 32, !13, i64 33, !13, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !14, i64 62, !14, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !14, i64 70, !14, i64 72, !14, i64 74, !14, i64 76, !14, i64 78, !14, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!12, !10, i64 4}
!16 = !{!12, !10, i64 0}
!17 = !{!12, !10, i64 20}
!18 = !{!12, !10, i64 8}
!19 = !{!12, !10, i64 12}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}


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

@.str = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [58 x i8], align 1
@__func__.libxsmm_generator_spgemm_csc_bsparse = external hidden unnamed_addr constant [37 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [84 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@.str.23 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [96 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_spgemm_csc_bsparse(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readnone %5) local_unnamed_addr #0 {
  %7 = alloca [512 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %7) #5
  %8 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %8) #5
  %9 = getelementptr inbounds i8, ptr %1, i64 24
  %10 = load i32, ptr %9, align 1, !tbaa !5
  %11 = and i32 %10, 4
  %.not = icmp eq i32 %11, 0
  br i1 %.not, label %31, label %12

12:                                               ; preds = %6
  %13 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.1) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %13) #5
  %14 = getelementptr inbounds i8, ptr %1, i64 4
  %15 = load i32, ptr %14, align 1, !tbaa !12
  %16 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.2, i32 noundef %15) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %16) #5
  %17 = load i32, ptr %1, align 1, !tbaa !13
  %18 = icmp ugt i32 %17, 1
  br i1 %18, label %19, label %22

19:                                               ; preds = %12
  %20 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.3) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %20) #5
  %21 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.4) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %21) #5
  br label %22

22:                                               ; preds = %19, %12
  %23 = getelementptr inbounds i8, ptr %1, i64 29
  %24 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %23) #5
  %25 = icmp eq i32 %24, 0
  %26 = load i32, ptr %1, align 1, !tbaa !13
  %27 = getelementptr inbounds i8, ptr %1, i64 20
  %28 = load i32, ptr %27, align 1, !tbaa !14
  %.str.5..str.6 = select i1 %25, ptr @.str.5, ptr @.str.6
  %29 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull %.str.5..str.6, i32 noundef %26, i32 noundef %28) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %29) #5
  %30 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.7) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %30) #5
  br label %31

31:                                               ; preds = %22, %6
  %32 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.8) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %32) #5
  %33 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.9) #6
  %34 = icmp eq i32 %33, 0
  br i1 %34, label %44, label %35

35:                                               ; preds = %31
  %36 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.10) #6
  %37 = icmp eq i32 %36, 0
  br i1 %37, label %44, label %38

38:                                               ; preds = %35
  %39 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.11) #6
  %40 = icmp eq i32 %39, 0
  br i1 %40, label %44, label %41

41:                                               ; preds = %38
  %42 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.12) #6
  %43 = icmp eq i32 %42, 0
  br i1 %43, label %44, label %58

44:                                               ; preds = %41, %38, %35, %31
  %45 = load i32, ptr %1, align 1, !tbaa !13
  %46 = icmp ugt i32 %45, 7
  br i1 %46, label %.sink.split, label %47

47:                                               ; preds = %44
  %48 = icmp ugt i32 %45, 3
  br i1 %48, label %.sink.split, label %49

49:                                               ; preds = %47
  %50 = icmp ugt i32 %45, 1
  br i1 %50, label %.sink.split, label %52

.sink.split:                                      ; preds = %49, %47, %44
  %.str.14.sink = phi ptr [ @.str.13, %44 ], [ @.str.14, %47 ], [ @.str.15, %49 ]
  %51 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull %.str.14.sink) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %51) #5
  br label %52

52:                                               ; preds = %.sink.split, %49
  %53 = load i32, ptr %1, align 1, !tbaa !13
  %54 = icmp ugt i32 %53, 1
  br i1 %54, label %55, label %82

55:                                               ; preds = %52
  %56 = load i32, ptr %9, align 1, !tbaa !5
  %57 = and i32 %56, 24
  %or.cond.not = icmp eq i32 %57, 24
  br i1 %or.cond.not, label %.sink.split126, label %82

58:                                               ; preds = %41
  %59 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.17) #6
  %60 = icmp eq i32 %59, 0
  br i1 %60, label %70, label %61

61:                                               ; preds = %58
  %62 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.18) #6
  %63 = icmp eq i32 %62, 0
  br i1 %63, label %70, label %64

64:                                               ; preds = %61
  %65 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.19) #6
  %66 = icmp eq i32 %65, 0
  br i1 %66, label %70, label %67

67:                                               ; preds = %64
  %68 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.20) #6
  %69 = icmp eq i32 %68, 0
  br i1 %69, label %70, label %76

70:                                               ; preds = %67, %64, %61, %58
  %71 = load i32, ptr %1, align 1, !tbaa !13
  %72 = icmp ugt i32 %71, 1
  br i1 %72, label %73, label %82

73:                                               ; preds = %70
  %74 = load i32, ptr %9, align 1, !tbaa !5
  %75 = and i32 %74, 24
  %or.cond116.not = icmp eq i32 %75, 24
  br i1 %or.cond116.not, label %.sink.split126, label %82

76:                                               ; preds = %67
  %77 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !15
  %78 = icmp ugt i32 %77, 1
  %79 = load i32, ptr @libxsmm_verbosity, align 4
  %80 = select i1 %78, i32 %79, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90005, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csc_bsparse, ptr noundef nonnull @.str.22, i32 noundef 132, i32 noundef %80) #5
  br label %121

.sink.split126:                                   ; preds = %73, %55
  %.str.21.sink = phi ptr [ @.str.16, %55 ], [ @.str.21, %73 ]
  %81 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull %.str.21.sink) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %81) #5
  br label %82

82:                                               ; preds = %.sink.split126, %73, %70, %52, %55
  %83 = load i32, ptr %1, align 1, !tbaa !13
  %84 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.23, i32 noundef %83) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %84) #5
  %85 = getelementptr inbounds i8, ptr %1, i64 4
  %86 = load i32, ptr %85, align 1, !tbaa !12
  %.not123 = icmp eq i32 %86, 0
  br i1 %.not123, label %._crit_edge, label %.lr.ph121

.lr.ph121:                                        ; preds = %82
  %87 = getelementptr inbounds i8, ptr %1, i64 8
  %88 = getelementptr inbounds i8, ptr %1, i64 20
  %89 = getelementptr inbounds i8, ptr %1, i64 12
  br label %93

.loopexit.loopexit:                               ; preds = %115
  %.pre = load i32, ptr %85, align 1, !tbaa !12
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %93
  %90 = phi i32 [ %94, %93 ], [ %.pre, %.loopexit.loopexit ]
  %.1.lcssa = phi i32 [ %.0108119, %93 ], [ %.2, %.loopexit.loopexit ]
  %91 = zext i32 %90 to i64
  %92 = icmp ult i64 %indvars.iv.next, %91
  br i1 %92, label %93, label %._crit_edge, !llvm.loop !16

93:                                               ; preds = %.lr.ph121, %.loopexit
  %94 = phi i32 [ %86, %.lr.ph121 ], [ %90, %.loopexit ]
  %indvars.iv = phi i64 [ 0, %.lr.ph121 ], [ %indvars.iv.next, %.loopexit ]
  %.0108119 = phi i32 [ 0, %.lr.ph121 ], [ %.1.lcssa, %.loopexit ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %95 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv.next
  %96 = load i32, ptr %95, align 4, !tbaa !15
  %97 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv
  %98 = load i32, ptr %97, align 4, !tbaa !15
  %99 = sub i32 %96, %98
  %.not124 = icmp eq i32 %96, %98
  br i1 %.not124, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %93
  %100 = trunc nuw i64 %indvars.iv to i32
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %115
  %.1118 = phi i32 [ %.2, %115 ], [ %.0108119, %.lr.ph.preheader ]
  %.0109117 = phi i32 [ %116, %115 ], [ 0, %.lr.ph.preheader ]
  %101 = load i32, ptr %97, align 4, !tbaa !15
  %102 = add i32 %101, %.0109117
  %103 = zext i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %3, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !15
  %106 = load i32, ptr %87, align 1, !tbaa !18
  %107 = icmp ult i32 %105, %106
  br i1 %107, label %108, label %115

108:                                              ; preds = %.lr.ph
  %109 = load i32, ptr %88, align 1, !tbaa !14
  %110 = mul i32 %109, %100
  %111 = load i32, ptr %89, align 1, !tbaa !19
  %112 = mul i32 %111, %105
  %113 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.24, i32 noundef %110, i32 noundef %112, i32 noundef %102) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %113) #5
  %114 = add i32 %.1118, 2
  br label %115

115:                                              ; preds = %.lr.ph, %108
  %.2 = phi i32 [ %114, %108 ], [ %.1118, %.lr.ph ]
  %116 = add nuw i32 %.0109117, 1
  %exitcond.not = icmp eq i32 %116, %99
  br i1 %exitcond.not, label %.loopexit.loopexit, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %.loopexit, %82
  %.0108.lcssa = phi i32 [ 0, %82 ], [ %.1.lcssa, %.loopexit ]
  %117 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.7) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %117) #5
  %118 = load i32, ptr %1, align 1, !tbaa !13
  %119 = mul i32 %118, %.0108.lcssa
  %120 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.25, i32 noundef %119) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %120) #5
  br label %121

121:                                              ; preds = %._crit_edge, %76
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %7) #5
  ret void
}

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

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

declare void @libxsmm_append_code_as_string(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

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

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

!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, !7, i64 24}
!6 = !{!"libxsmm_gemm_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !8, i64 28, !8, i64 29, !8, i64 32, !10, i64 33, !10, i64 41, !8, i64 49, !7, i64 50, !7, i64 54, !7, i64 58, !11, i64 62, !11, i64 64, !8, i64 66, !8, i64 67, !8, i64 68, !8, i64 69, !11, i64 70, !11, i64 72, !11, i64 74, !11, i64 76, !11, i64 78, !11, i64 80, !7, i64 82, !7, i64 86, !7, i64 90, !8, i64 94}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = !{!6, !7, i64 4}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !7, i64 20}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!6, !7, i64 8}
!19 = !{!6, !7, i64 12}
!20 = distinct !{!20, !17}


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