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

; 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.28 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csc_asparse = external hidden unnamed_addr constant [175 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [139 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [96 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #0

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #2

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_sparse_csc_asparse_innerloop_two_vector(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_sparse_csc_asparse_innerloop_four_vector(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #0

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

37:                                               ; preds = %6
  %38 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %39 = load i32, ptr %14, align 4, !tbaa !9
  %40 = sext i32 %39 to i64
  %41 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %38, i64 noundef %40, ptr noundef @.str.29) #5
  store i32 %41, ptr %15, align 4, !tbaa !9
  %42 = load ptr, ptr %7, align 8, !tbaa !5
  %43 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %44 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %42, ptr noundef %43, i32 noundef %44)
  %45 = load ptr, ptr %8, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %45, i32 0, i32 0
  %47 = load i32, ptr %46, align 1, !tbaa !16
  %48 = icmp ugt i32 %47, 1
  br i1 %48, label %49, label %57

49:                                               ; preds = %37
  %50 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %51 = load i32, ptr %14, align 4, !tbaa !9
  %52 = sext i32 %51 to i64
  %53 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %50, i64 noundef %52, ptr noundef @.str.30) #5
  store i32 %53, ptr %15, align 4, !tbaa !9
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %56 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %54, ptr noundef %55, i32 noundef %56)
  br label %57

57:                                               ; preds = %49, %37
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %58, i32 0, i32 8
  %60 = getelementptr inbounds [3 x i8], ptr %59, i64 0, i64 0
  %61 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %60)
  %62 = icmp eq i32 0, %61
  br i1 %62, label %63, label %74

63:                                               ; preds = %57
  %64 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %65 = load i32, ptr %14, align 4, !tbaa !9
  %66 = sext i32 %65 to i64
  %67 = load ptr, ptr %8, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %67, i32 0, i32 0
  %69 = load i32, ptr %68, align 1, !tbaa !16
  %70 = load ptr, ptr %8, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %70, i32 0, i32 5
  %72 = load i32, ptr %71, align 1, !tbaa !17
  %73 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %64, i64 noundef %66, ptr noundef @.str.31, i32 noundef %69, i32 noundef %72) #5
  store i32 %73, ptr %15, align 4, !tbaa !9
  br label %85

74:                                               ; preds = %57
  %75 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %76 = load i32, ptr %14, align 4, !tbaa !9
  %77 = sext i32 %76 to i64
  %78 = load ptr, ptr %8, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 1, !tbaa !16
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %81, i32 0, i32 5
  %83 = load i32, ptr %82, align 1, !tbaa !17
  %84 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %75, i64 noundef %77, ptr noundef @.str.32, i32 noundef %80, i32 noundef %83) #5
  store i32 %84, ptr %15, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %74, %63
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %88 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %86, ptr noundef %87, i32 noundef %88)
  br label %89

89:                                               ; preds = %85, %6
  %90 = load ptr, ptr %11, align 8, !tbaa !5
  %91 = icmp ne ptr null, %90
  br i1 %91, label %92, label %93

92:                                               ; preds = %89
  br label %94

93:                                               ; preds = %89
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.34, i32 noundef 227, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csc_asparse) #6
  unreachable

94:                                               ; preds = %92
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %95

95:                                               ; preds = %572, %94
  %96 = load i32, ptr %16, align 4, !tbaa !9
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %97, i32 0, i32 2
  %99 = load i32, ptr %98, align 1, !tbaa !18
  %100 = icmp ult i32 %96, %99
  br i1 %100, label %101, label %575

101:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = load i32, ptr %16, align 4, !tbaa !9
  %104 = add i32 %103, 1
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds i32, ptr %102, i64 %105
  %107 = load i32, ptr %106, align 4, !tbaa !9
  %108 = load ptr, ptr %11, align 8, !tbaa !5
  %109 = load i32, ptr %16, align 4, !tbaa !9
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds i32, ptr %108, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !9
  %113 = sub i32 %107, %112
  store i32 %113, 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
  %114 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %115 = load i32, ptr %14, align 4, !tbaa !9
  %116 = sext i32 %115 to i64
  %117 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %114, i64 noundef %116, ptr noundef @.str.35) #5
  store i32 %117, ptr %15, align 4, !tbaa !9
  %118 = load ptr, ptr %7, align 8, !tbaa !5
  %119 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %120 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %118, ptr noundef %119, i32 noundef %120)
  %121 = load i32, ptr %18, align 4, !tbaa !9
  %122 = icmp ugt i32 %121, 0
  br i1 %122, label %123, label %183

123:                                              ; preds = %101
  %124 = load ptr, ptr %8, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %124, i32 0, i32 8
  %126 = getelementptr inbounds [3 x i8], ptr %125, i64 0, i64 0
  %127 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %126)
  %128 = icmp eq i32 0, %127
  br i1 %128, label %129, label %154

129:                                              ; preds = %123
  %130 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %131 = load i32, ptr %14, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = load i32, ptr %16, align 4, !tbaa !9
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %134, i32 0, i32 4
  %136 = load i32, ptr %135, align 1, !tbaa !19
  %137 = load i32, ptr %16, align 4, !tbaa !9
  %138 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %130, i64 noundef %132, ptr noundef @.str.36, i32 noundef %133, i32 noundef %136, i32 noundef %137) #5
  store i32 %138, ptr %15, align 4, !tbaa !9
  %139 = load ptr, ptr %7, align 8, !tbaa !5
  %140 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %141 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %139, ptr noundef %140, i32 noundef %141)
  %142 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %143 = load i32, ptr %14, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = load i32, ptr %16, align 4, !tbaa !9
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %146, i32 0, i32 4
  %148 = load i32, ptr %147, align 1, !tbaa !19
  %149 = load i32, ptr %16, align 4, !tbaa !9
  %150 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %142, i64 noundef %144, ptr noundef @.str.37, i32 noundef %145, i32 noundef %148, i32 noundef %149) #5
  store i32 %150, ptr %15, align 4, !tbaa !9
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  %152 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %153 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %151, ptr noundef %152, i32 noundef %153)
  br label %182

154:                                              ; preds = %123
  %155 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %156 = load i32, ptr %14, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = load i32, ptr %16, align 4, !tbaa !9
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %159, i32 0, i32 4
  %161 = load i32, ptr %160, align 1, !tbaa !19
  %162 = load i32, ptr %16, align 4, !tbaa !9
  %163 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %155, i64 noundef %157, ptr noundef @.str.38, i32 noundef %158, i32 noundef %161, i32 noundef %162) #5
  store i32 %163, ptr %15, align 4, !tbaa !9
  %164 = load ptr, ptr %7, align 8, !tbaa !5
  %165 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %166 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %164, ptr noundef %165, i32 noundef %166)
  %167 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %168 = load i32, ptr %14, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = load i32, ptr %16, align 4, !tbaa !9
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %171, i32 0, i32 4
  %173 = load i32, ptr %172, align 1, !tbaa !19
  %174 = load i32, ptr %16, align 4, !tbaa !9
  %175 = load i32, ptr %16, align 4, !tbaa !9
  %176 = load i32, ptr %16, align 4, !tbaa !9
  %177 = load i32, ptr %16, align 4, !tbaa !9
  %178 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %167, i64 noundef %169, ptr noundef @.str.39, i32 noundef %170, i32 noundef %173, i32 noundef %174, i32 noundef %175, i32 noundef %176, i32 noundef %177) #5
  store i32 %178, ptr %15, align 4, !tbaa !9
  %179 = load ptr, ptr %7, align 8, !tbaa !5
  %180 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %181 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %179, ptr noundef %180, i32 noundef %181)
  br label %182

182:                                              ; preds = %154, %129
  br label %183

183:                                              ; preds = %182, %101
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %494, %183
  %185 = load i32, ptr %19, align 4, !tbaa !9
  %186 = load i32, ptr %18, align 4, !tbaa !9
  %187 = icmp ult i32 %185, %186
  br i1 %187, label %188, label %497

188:                                              ; preds = %184
  %189 = load ptr, ptr %10, align 8, !tbaa !5
  %190 = icmp ne ptr null, %189
  br i1 %190, label %191, label %192

191:                                              ; preds = %188
  br label %193

192:                                              ; preds = %188
  call void @__assert_fail(ptr noundef @.str.40, ptr noundef @.str.34, i32 noundef 252, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csc_asparse) #6
  unreachable

193:                                              ; preds = %191
  %194 = load i32, ptr %19, align 4, !tbaa !9
  %195 = load i32, ptr %18, align 4, !tbaa !9
  %196 = sub i32 %195, 3
  %197 = icmp ult i32 %194, %196
  br i1 %197, label %198, label %383

198:                                              ; preds = %193
  %199 = load i32, ptr %18, align 4, !tbaa !9
  %200 = icmp ugt i32 %199, 3
  br i1 %200, label %201, label %383

201:                                              ; preds = %198
  %202 = load ptr, ptr %10, align 8, !tbaa !5
  %203 = load ptr, ptr %11, align 8, !tbaa !5
  %204 = load i32, ptr %16, align 4, !tbaa !9
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds i32, ptr %203, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !9
  %208 = load i32, ptr %19, align 4, !tbaa !9
  %209 = add i32 %207, %208
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds i32, ptr %202, i64 %210
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = add i32 %212, 1
  %214 = load ptr, ptr %10, align 8, !tbaa !5
  %215 = load ptr, ptr %11, align 8, !tbaa !5
  %216 = load i32, ptr %16, align 4, !tbaa !9
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %215, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = load i32, ptr %19, align 4, !tbaa !9
  %221 = add i32 %219, %220
  %222 = add i32 %221, 1
  %223 = zext i32 %222 to i64
  %224 = getelementptr inbounds i32, ptr %214, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !9
  %226 = icmp eq i32 %213, %225
  br i1 %226, label %227, label %305

227:                                              ; preds = %201
  %228 = load ptr, ptr %10, align 8, !tbaa !5
  %229 = load ptr, ptr %11, align 8, !tbaa !5
  %230 = load i32, ptr %16, align 4, !tbaa !9
  %231 = zext i32 %230 to i64
  %232 = getelementptr inbounds i32, ptr %229, i64 %231
  %233 = load i32, ptr %232, align 4, !tbaa !9
  %234 = load i32, ptr %19, align 4, !tbaa !9
  %235 = add i32 %233, %234
  %236 = zext i32 %235 to i64
  %237 = getelementptr inbounds i32, ptr %228, i64 %236
  %238 = load i32, ptr %237, align 4, !tbaa !9
  %239 = add i32 %238, 2
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = load ptr, ptr %11, align 8, !tbaa !5
  %242 = load i32, ptr %16, align 4, !tbaa !9
  %243 = zext i32 %242 to i64
  %244 = getelementptr inbounds i32, ptr %241, i64 %243
  %245 = load i32, ptr %244, align 4, !tbaa !9
  %246 = load i32, ptr %19, align 4, !tbaa !9
  %247 = add i32 %245, %246
  %248 = add i32 %247, 2
  %249 = zext i32 %248 to i64
  %250 = getelementptr inbounds i32, ptr %240, i64 %249
  %251 = load i32, ptr %250, align 4, !tbaa !9
  %252 = icmp eq i32 %239, %251
  br i1 %252, label %253, label %305

253:                                              ; preds = %227
  %254 = load ptr, ptr %10, align 8, !tbaa !5
  %255 = load ptr, ptr %11, align 8, !tbaa !5
  %256 = load i32, ptr %16, align 4, !tbaa !9
  %257 = zext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %255, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = load i32, ptr %19, align 4, !tbaa !9
  %261 = add i32 %259, %260
  %262 = zext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %254, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !9
  %265 = add i32 %264, 3
  %266 = load ptr, ptr %10, align 8, !tbaa !5
  %267 = load ptr, ptr %11, align 8, !tbaa !5
  %268 = load i32, ptr %16, align 4, !tbaa !9
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds i32, ptr %267, i64 %269
  %271 = load i32, ptr %270, align 4, !tbaa !9
  %272 = load i32, ptr %19, align 4, !tbaa !9
  %273 = add i32 %271, %272
  %274 = add i32 %273, 3
  %275 = zext i32 %274 to i64
  %276 = getelementptr inbounds i32, ptr %266, i64 %275
  %277 = load i32, ptr %276, align 4, !tbaa !9
  %278 = icmp eq i32 %265, %277
  br i1 %278, label %279, label %305

279:                                              ; preds = %253
  %280 = load ptr, ptr %10, align 8, !tbaa !5
  %281 = load ptr, ptr %11, align 8, !tbaa !5
  %282 = load i32, ptr %16, align 4, !tbaa !9
  %283 = zext i32 %282 to i64
  %284 = getelementptr inbounds i32, ptr %281, i64 %283
  %285 = load i32, ptr %284, align 4, !tbaa !9
  %286 = load i32, ptr %19, align 4, !tbaa !9
  %287 = add i32 %285, %286
  %288 = add i32 %287, 3
  %289 = zext i32 %288 to i64
  %290 = getelementptr inbounds i32, ptr %280, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !9
  %292 = load ptr, ptr %8, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %292, i32 0, i32 0
  %294 = load i32, ptr %293, align 1, !tbaa !16
  %295 = icmp ult i32 %291, %294
  br i1 %295, label %296, label %305

296:                                              ; preds = %279
  %297 = load ptr, ptr %7, align 8, !tbaa !5
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = load i32, ptr %16, align 4, !tbaa !9
  %300 = load i32, ptr %19, align 4, !tbaa !9
  %301 = load ptr, ptr %10, align 8, !tbaa !5
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_sparse_csc_asparse_innerloop_four_vector(ptr noundef %297, ptr noundef %298, i32 noundef %299, i32 noundef %300, ptr noundef %301, ptr noundef %302)
  %303 = load i32, ptr %19, align 4, !tbaa !9
  %304 = add i32 %303, 3
  store i32 %304, ptr %19, align 4, !tbaa !9
  br label %382

305:                                              ; preds = %279, %253, %227, %201
  %306 = load ptr, ptr %10, align 8, !tbaa !5
  %307 = load ptr, ptr %11, align 8, !tbaa !5
  %308 = load i32, ptr %16, align 4, !tbaa !9
  %309 = zext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %307, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !9
  %312 = load i32, ptr %19, align 4, !tbaa !9
  %313 = add i32 %311, %312
  %314 = zext i32 %313 to i64
  %315 = getelementptr inbounds i32, ptr %306, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !9
  %317 = add i32 %316, 1
  %318 = load ptr, ptr %10, align 8, !tbaa !5
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = load i32, ptr %16, align 4, !tbaa !9
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = load i32, ptr %19, align 4, !tbaa !9
  %325 = add i32 %323, %324
  %326 = add i32 %325, 1
  %327 = zext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %318, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !9
  %330 = icmp eq i32 %317, %329
  br i1 %330, label %331, label %357

331:                                              ; preds = %305
  %332 = load ptr, ptr %10, align 8, !tbaa !5
  %333 = load ptr, ptr %11, align 8, !tbaa !5
  %334 = load i32, ptr %16, align 4, !tbaa !9
  %335 = zext i32 %334 to i64
  %336 = getelementptr inbounds i32, ptr %333, i64 %335
  %337 = load i32, ptr %336, align 4, !tbaa !9
  %338 = load i32, ptr %19, align 4, !tbaa !9
  %339 = add i32 %337, %338
  %340 = add i32 %339, 1
  %341 = zext i32 %340 to i64
  %342 = getelementptr inbounds i32, ptr %332, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !9
  %344 = load ptr, ptr %8, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %344, i32 0, i32 0
  %346 = load i32, ptr %345, align 1, !tbaa !16
  %347 = icmp ult i32 %343, %346
  br i1 %347, label %348, label %357

348:                                              ; preds = %331
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %350 = load ptr, ptr %8, align 8, !tbaa !5
  %351 = load i32, ptr %16, align 4, !tbaa !9
  %352 = load i32, ptr %19, align 4, !tbaa !9
  %353 = load ptr, ptr %10, align 8, !tbaa !5
  %354 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_sparse_csc_asparse_innerloop_two_vector(ptr noundef %349, ptr noundef %350, i32 noundef %351, i32 noundef %352, ptr noundef %353, ptr noundef %354)
  %355 = load i32, ptr %19, align 4, !tbaa !9
  %356 = add i32 %355, 1
  store i32 %356, ptr %19, align 4, !tbaa !9
  br label %381

357:                                              ; preds = %331, %305
  %358 = load ptr, ptr %10, align 8, !tbaa !5
  %359 = load ptr, ptr %11, align 8, !tbaa !5
  %360 = load i32, ptr %16, align 4, !tbaa !9
  %361 = zext i32 %360 to i64
  %362 = getelementptr inbounds i32, ptr %359, i64 %361
  %363 = load i32, ptr %362, align 4, !tbaa !9
  %364 = load i32, ptr %19, align 4, !tbaa !9
  %365 = add i32 %363, %364
  %366 = zext i32 %365 to i64
  %367 = getelementptr inbounds i32, ptr %358, i64 %366
  %368 = load i32, ptr %367, align 4, !tbaa !9
  %369 = load ptr, ptr %8, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %369, i32 0, i32 0
  %371 = load i32, ptr %370, align 1, !tbaa !16
  %372 = icmp ult i32 %368, %371
  br i1 %372, label %373, label %380

373:                                              ; preds = %357
  %374 = load ptr, ptr %7, align 8, !tbaa !5
  %375 = load ptr, ptr %8, align 8, !tbaa !5
  %376 = load i32, ptr %16, align 4, !tbaa !9
  %377 = load i32, ptr %19, align 4, !tbaa !9
  %378 = load ptr, ptr %10, align 8, !tbaa !5
  %379 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef %374, ptr noundef %375, i32 noundef %376, i32 noundef %377, ptr noundef %378, ptr noundef %379)
  br label %380

380:                                              ; preds = %373, %357
  br label %381

381:                                              ; preds = %380, %348
  br label %382

382:                                              ; preds = %381, %296
  br label %493

383:                                              ; preds = %198, %193
  %384 = load i32, ptr %19, align 4, !tbaa !9
  %385 = load i32, ptr %18, align 4, !tbaa !9
  %386 = sub i32 %385, 1
  %387 = icmp ult i32 %384, %386
  br i1 %387, label %388, label %468

388:                                              ; preds = %383
  %389 = load i32, ptr %18, align 4, !tbaa !9
  %390 = icmp ugt i32 %389, 1
  br i1 %390, label %391, label %468

391:                                              ; preds = %388
  %392 = load ptr, ptr %10, align 8, !tbaa !5
  %393 = load ptr, ptr %11, align 8, !tbaa !5
  %394 = load i32, ptr %16, align 4, !tbaa !9
  %395 = zext i32 %394 to i64
  %396 = getelementptr inbounds i32, ptr %393, i64 %395
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = load i32, ptr %19, align 4, !tbaa !9
  %399 = add i32 %397, %398
  %400 = zext i32 %399 to i64
  %401 = getelementptr inbounds i32, ptr %392, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !9
  %403 = add i32 %402, 1
  %404 = load ptr, ptr %10, align 8, !tbaa !5
  %405 = load ptr, ptr %11, align 8, !tbaa !5
  %406 = load i32, ptr %16, align 4, !tbaa !9
  %407 = zext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = load i32, ptr %19, align 4, !tbaa !9
  %411 = add i32 %409, %410
  %412 = add i32 %411, 1
  %413 = zext i32 %412 to i64
  %414 = getelementptr inbounds i32, ptr %404, i64 %413
  %415 = load i32, ptr %414, align 4, !tbaa !9
  %416 = icmp eq i32 %403, %415
  br i1 %416, label %417, label %443

417:                                              ; preds = %391
  %418 = load ptr, ptr %10, align 8, !tbaa !5
  %419 = load ptr, ptr %11, align 8, !tbaa !5
  %420 = load i32, ptr %16, align 4, !tbaa !9
  %421 = zext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !9
  %424 = load i32, ptr %19, align 4, !tbaa !9
  %425 = add i32 %423, %424
  %426 = add i32 %425, 1
  %427 = zext i32 %426 to i64
  %428 = getelementptr inbounds i32, ptr %418, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !9
  %430 = load ptr, ptr %8, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %430, i32 0, i32 0
  %432 = load i32, ptr %431, align 1, !tbaa !16
  %433 = icmp ult i32 %429, %432
  br i1 %433, label %434, label %443

434:                                              ; preds = %417
  %435 = load ptr, ptr %7, align 8, !tbaa !5
  %436 = load ptr, ptr %8, align 8, !tbaa !5
  %437 = load i32, ptr %16, align 4, !tbaa !9
  %438 = load i32, ptr %19, align 4, !tbaa !9
  %439 = load ptr, ptr %10, align 8, !tbaa !5
  %440 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_sparse_csc_asparse_innerloop_two_vector(ptr noundef %435, ptr noundef %436, i32 noundef %437, i32 noundef %438, ptr noundef %439, ptr noundef %440)
  %441 = load i32, ptr %19, align 4, !tbaa !9
  %442 = add i32 %441, 1
  store i32 %442, ptr %19, align 4, !tbaa !9
  br label %467

443:                                              ; preds = %417, %391
  %444 = load ptr, ptr %10, align 8, !tbaa !5
  %445 = load ptr, ptr %11, align 8, !tbaa !5
  %446 = load i32, ptr %16, align 4, !tbaa !9
  %447 = zext i32 %446 to i64
  %448 = getelementptr inbounds i32, ptr %445, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !9
  %450 = load i32, ptr %19, align 4, !tbaa !9
  %451 = add i32 %449, %450
  %452 = zext i32 %451 to i64
  %453 = getelementptr inbounds i32, ptr %444, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !9
  %455 = load ptr, ptr %8, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %455, i32 0, i32 0
  %457 = load i32, ptr %456, align 1, !tbaa !16
  %458 = icmp ult i32 %454, %457
  br i1 %458, label %459, label %466

459:                                              ; preds = %443
  %460 = load ptr, ptr %7, align 8, !tbaa !5
  %461 = load ptr, ptr %8, align 8, !tbaa !5
  %462 = load i32, ptr %16, align 4, !tbaa !9
  %463 = load i32, ptr %19, align 4, !tbaa !9
  %464 = load ptr, ptr %10, align 8, !tbaa !5
  %465 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef %460, ptr noundef %461, i32 noundef %462, i32 noundef %463, ptr noundef %464, ptr noundef %465)
  br label %466

466:                                              ; preds = %459, %443
  br label %467

467:                                              ; preds = %466, %434
  br label %492

468:                                              ; preds = %388, %383
  %469 = load ptr, ptr %10, align 8, !tbaa !5
  %470 = load ptr, ptr %11, align 8, !tbaa !5
  %471 = load i32, ptr %16, align 4, !tbaa !9
  %472 = zext i32 %471 to i64
  %473 = getelementptr inbounds i32, ptr %470, i64 %472
  %474 = load i32, ptr %473, align 4, !tbaa !9
  %475 = load i32, ptr %19, align 4, !tbaa !9
  %476 = add i32 %474, %475
  %477 = zext i32 %476 to i64
  %478 = getelementptr inbounds i32, ptr %469, i64 %477
  %479 = load i32, ptr %478, align 4, !tbaa !9
  %480 = load ptr, ptr %8, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %480, i32 0, i32 0
  %482 = load i32, ptr %481, align 1, !tbaa !16
  %483 = icmp ult i32 %479, %482
  br i1 %483, label %484, label %491

484:                                              ; preds = %468
  %485 = load ptr, ptr %7, align 8, !tbaa !5
  %486 = load ptr, ptr %8, align 8, !tbaa !5
  %487 = load i32, ptr %16, align 4, !tbaa !9
  %488 = load i32, ptr %19, align 4, !tbaa !9
  %489 = load ptr, ptr %10, align 8, !tbaa !5
  %490 = load ptr, ptr %11, align 8, !tbaa !5
  call void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef %485, ptr noundef %486, i32 noundef %487, i32 noundef %488, ptr noundef %489, ptr noundef %490)
  br label %491

491:                                              ; preds = %484, %468
  br label %492

492:                                              ; preds = %491, %467
  br label %493

493:                                              ; preds = %492, %382
  br label %494

494:                                              ; preds = %493
  %495 = load i32, ptr %19, align 4, !tbaa !9
  %496 = add i32 %495, 1
  store i32 %496, ptr %19, align 4, !tbaa !9
  br label %184, !llvm.loop !20

497:                                              ; preds = %184
  %498 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %499 = load i32, ptr %14, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %498, i64 noundef %500, ptr noundef @.str.41) #5
  store i32 %501, ptr %15, align 4, !tbaa !9
  %502 = load ptr, ptr %7, align 8, !tbaa !5
  %503 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %504 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %502, ptr noundef %503, i32 noundef %504)
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %505

505:                                              ; preds = %561, %497
  %506 = load i32, ptr %19, align 4, !tbaa !9
  %507 = load i32, ptr %18, align 4, !tbaa !9
  %508 = icmp ult i32 %506, %507
  br i1 %508, label %509, label %564

509:                                              ; preds = %505
  %510 = load ptr, ptr %10, align 8, !tbaa !5
  %511 = load ptr, ptr %11, align 8, !tbaa !5
  %512 = load i32, ptr %16, align 4, !tbaa !9
  %513 = zext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !9
  %516 = load i32, ptr %19, align 4, !tbaa !9
  %517 = add i32 %515, %516
  %518 = zext i32 %517 to i64
  %519 = getelementptr inbounds i32, ptr %510, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = load ptr, ptr %8, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %521, i32 0, i32 0
  %523 = load i32, ptr %522, align 1, !tbaa !16
  %524 = icmp ult i32 %520, %523
  br i1 %524, label %525, label %560

525:                                              ; preds = %509
  %526 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %527 = load i32, ptr %14, align 4, !tbaa !9
  %528 = sext i32 %527 to i64
  %529 = load ptr, ptr %8, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %529, i32 0, i32 5
  %531 = load i32, ptr %530, align 1, !tbaa !17
  %532 = load ptr, ptr %10, align 8, !tbaa !5
  %533 = load ptr, ptr %11, align 8, !tbaa !5
  %534 = load i32, ptr %16, align 4, !tbaa !9
  %535 = zext i32 %534 to i64
  %536 = getelementptr inbounds i32, ptr %533, i64 %535
  %537 = load i32, ptr %536, align 4, !tbaa !9
  %538 = load i32, ptr %19, align 4, !tbaa !9
  %539 = add i32 %537, %538
  %540 = zext i32 %539 to i64
  %541 = getelementptr inbounds i32, ptr %532, i64 %540
  %542 = load i32, ptr %541, align 4, !tbaa !9
  %543 = load ptr, ptr %11, align 8, !tbaa !5
  %544 = load i32, ptr %16, align 4, !tbaa !9
  %545 = zext i32 %544 to i64
  %546 = getelementptr inbounds i32, ptr %543, i64 %545
  %547 = load i32, ptr %546, align 4, !tbaa !9
  %548 = load i32, ptr %19, align 4, !tbaa !9
  %549 = add i32 %547, %548
  %550 = load ptr, ptr %8, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %550, i32 0, i32 4
  %552 = load i32, ptr %551, align 1, !tbaa !19
  %553 = load i32, ptr %16, align 4, !tbaa !9
  %554 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %526, i64 noundef %528, ptr noundef @.str.42, i32 noundef %531, i32 noundef %542, i32 noundef %549, i32 noundef %552, i32 noundef %553) #5
  store i32 %554, ptr %15, align 4, !tbaa !9
  %555 = load ptr, ptr %7, align 8, !tbaa !5
  %556 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %557 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %555, ptr noundef %556, i32 noundef %557)
  %558 = load i32, ptr %17, align 4, !tbaa !9
  %559 = add i32 %558, 2
  store i32 %559, ptr %17, align 4, !tbaa !9
  br label %560

560:                                              ; preds = %525, %509
  br label %561

561:                                              ; preds = %560
  %562 = load i32, ptr %19, align 4, !tbaa !9
  %563 = add i32 %562, 1
  store i32 %563, ptr %19, align 4, !tbaa !9
  br label %505, !llvm.loop !22

564:                                              ; preds = %505
  %565 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %566 = load i32, ptr %14, align 4, !tbaa !9
  %567 = sext i32 %566 to i64
  %568 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %565, i64 noundef %567, ptr noundef @.str.43) #5
  store i32 %568, ptr %15, align 4, !tbaa !9
  %569 = load ptr, ptr %7, align 8, !tbaa !5
  %570 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %571 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %569, ptr noundef %570, i32 noundef %571)
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %572

572:                                              ; preds = %564
  %573 = load i32, ptr %16, align 4, !tbaa !9
  %574 = add i32 %573, 1
  store i32 %574, ptr %16, align 4, !tbaa !9
  br label %95, !llvm.loop !23

575:                                              ; preds = %95
  %576 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %577 = load i32, ptr %14, align 4, !tbaa !9
  %578 = sext i32 %577 to i64
  %579 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %576, i64 noundef %578, ptr noundef @.str.44) #5
  store i32 %579, ptr %15, align 4, !tbaa !9
  %580 = load ptr, ptr %7, align 8, !tbaa !5
  %581 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %582 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %580, ptr noundef %581, i32 noundef %582)
  %583 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %584 = load i32, ptr %14, align 4, !tbaa !9
  %585 = sext i32 %584 to i64
  %586 = load i32, ptr %17, align 4, !tbaa !9
  %587 = load ptr, ptr %8, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %587, i32 0, i32 1
  %589 = load i32, ptr %588, align 1, !tbaa !11
  %590 = mul i32 %586, %589
  %591 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %583, i64 noundef %585, ptr noundef @.str.45, i32 noundef %590) #5
  store i32 %591, ptr %15, align 4, !tbaa !9
  %592 = load ptr, ptr %7, align 8, !tbaa !5
  %593 = getelementptr inbounds [512 x i8], ptr %13, i64 0, i64 0
  %594 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_append_code_as_string(ptr noundef %592, ptr noundef %593, i32 noundef %594)
  call void @llvm.lifetime.end.p0(i64 4, 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 512, ptr %13) #5
  ret void
}

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

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 = { "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 = { 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 #4 = { 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 #5 = { nounwind }
attributes #6 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 4}
!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 24}
!16 = !{!12, !10, i64 0}
!17 = !{!12, !10, i64 20}
!18 = !{!12, !10, i64 8}
!19 = !{!12, !10, i64 16}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !21}
!23 = distinct !{!23, !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.28 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csc_asparse = external hidden unnamed_addr constant [175 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [139 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [96 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_sparse_csc_asparse_innerloop_two_vector(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_sparse_csc_asparse_innerloop_four_vector(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_spgemm_csc_asparse(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readnone %2, ptr noundef %3, ptr noundef %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 = getelementptr inbounds i8, ptr %1, i64 4
  %9 = load i32, ptr %8, align 1, !tbaa !5
  %10 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.28, i32 noundef %9) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %10) #5
  %11 = getelementptr inbounds i8, ptr %1, i64 24
  %12 = load i32, ptr %11, align 1, !tbaa !12
  %13 = and i32 %12, 4
  %.not = icmp eq i32 %13, 0
  br i1 %.not, label %28, label %14

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

18:                                               ; preds = %14
  %19 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.30) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %19) #5
  br label %20

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

28:                                               ; preds = %20, %6
  %.not233 = icmp eq ptr %4, null
  br i1 %.not233, label %34, label %.preheader

.preheader:                                       ; preds = %28
  %29 = getelementptr inbounds i8, ptr %1, i64 8
  %30 = load i32, ptr %29, align 1, !tbaa !15
  %.not248 = icmp eq i32 %30, 0
  br i1 %.not248, label %._crit_edge246, label %.lr.ph245

.lr.ph245:                                        ; preds = %.preheader
  %31 = getelementptr inbounds i8, ptr %1, i64 29
  %32 = getelementptr inbounds i8, ptr %1, i64 16
  %.not235 = icmp eq ptr %3, null
  %33 = getelementptr inbounds i8, ptr %1, i64 20
  br label %35

34:                                               ; preds = %28
  call void @__assert_fail(ptr noundef nonnull @.str.33, ptr noundef nonnull @.str.34, i32 noundef 227, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csc_asparse) #6
  unreachable

35:                                               ; preds = %.lr.ph245, %._crit_edge242
  %indvars.iv = phi i64 [ 0, %.lr.ph245 ], [ %indvars.iv.next, %._crit_edge242 ]
  %.0221244 = phi i32 [ 0, %.lr.ph245 ], [ %.1222.lcssa, %._crit_edge242 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %36 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv.next
  %37 = load i32, ptr %36, align 4, !tbaa !16
  %38 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv
  %39 = load i32, ptr %38, align 4, !tbaa !16
  %40 = sub i32 %37, %39
  %41 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.35) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %41) #5
  %.not234 = icmp eq i32 %37, %39
  br i1 %.not234, label %._crit_edge242.critedge, label %42

42:                                               ; preds = %35
  %43 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %31) #5
  %44 = icmp eq i32 %43, 0
  %45 = load i32, ptr %32, align 1, !tbaa !17
  %46 = trunc nuw i64 %indvars.iv to i32
  br i1 %44, label %47, label %51

47:                                               ; preds = %42
  %48 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.36, i32 noundef %46, i32 noundef %45, i32 noundef %46) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %48) #5
  %49 = load i32, ptr %32, align 1, !tbaa !17
  %50 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.37, i32 noundef %46, i32 noundef %49, i32 noundef %46) #5
  br label %.lr.ph

51:                                               ; preds = %42
  %52 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.38, i32 noundef %46, i32 noundef %45, i32 noundef %46) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %52) #5
  %53 = load i32, ptr %32, align 1, !tbaa !17
  %54 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.39, i32 noundef %46, i32 noundef %53, i32 noundef %46, i32 noundef %46, i32 noundef %46, i32 noundef %46) #5
  br label %.lr.ph

.lr.ph:                                           ; preds = %47, %51
  %.sink = phi i32 [ %50, %47 ], [ %54, %51 ]
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %.sink) #5
  %55 = add i32 %40, -3
  %56 = icmp ugt i32 %40, 3
  %57 = add i32 %40, -1
  br i1 %.not235, label %65, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %58 = trunc nuw i64 %indvars.iv to i32
  %59 = trunc nuw i64 %indvars.iv to i32
  %60 = trunc nuw i64 %indvars.iv to i32
  %61 = trunc nuw i64 %indvars.iv to i32
  %62 = trunc nuw i64 %indvars.iv to i32
  %63 = trunc nuw i64 %indvars.iv to i32
  br label %.lr.ph.split

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %128
  %.0237 = phi i32 [ %129, %128 ], [ 0, %.lr.ph.split.preheader ]
  %64 = icmp ult i32 %.0237, %55
  %or.cond = and i1 %56, %64
  br i1 %or.cond, label %66, label %104

65:                                               ; preds = %.lr.ph
  call void @__assert_fail(ptr noundef nonnull @.str.40, ptr noundef nonnull @.str.34, i32 noundef 252, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csc_asparse) #6
  unreachable

66:                                               ; preds = %.lr.ph.split
  %67 = load i32, ptr %38, align 4, !tbaa !16
  %68 = add i32 %67, %.0237
  %69 = zext i32 %68 to i64
  %70 = getelementptr inbounds i32, ptr %3, i64 %69
  %71 = load i32, ptr %70, align 4, !tbaa !16
  %72 = add i32 %71, 1
  %73 = add i32 %68, 1
  %74 = zext i32 %73 to i64
  %75 = getelementptr inbounds i32, ptr %3, i64 %74
  %76 = load i32, ptr %75, align 4, !tbaa !16
  %77 = icmp eq i32 %72, %76
  br i1 %77, label %78, label %._crit_edge255

._crit_edge255:                                   ; preds = %66
  %.pre256 = load i32, ptr %1, align 1, !tbaa !13
  br label %100

78:                                               ; preds = %66
  %79 = add i32 %71, 2
  %80 = add i32 %68, 2
  %81 = zext i32 %80 to i64
  %82 = getelementptr inbounds i32, ptr %3, i64 %81
  %83 = load i32, ptr %82, align 4, !tbaa !16
  %84 = icmp eq i32 %79, %83
  br i1 %84, label %85, label %._crit_edge252

._crit_edge252:                                   ; preds = %78
  %.pre253 = load i32, ptr %1, align 1, !tbaa !13
  br label %95

85:                                               ; preds = %78
  %86 = add i32 %71, 3
  %87 = add i32 %68, 3
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds i32, ptr %3, i64 %88
  %90 = load i32, ptr %89, align 4, !tbaa !16
  %91 = icmp eq i32 %86, %90
  %.pre254 = load i32, ptr %1, align 1, !tbaa !13
  %92 = icmp ult i32 %86, %.pre254
  %or.cond257 = select i1 %91, i1 %92, i1 false
  br i1 %or.cond257, label %93, label %95

93:                                               ; preds = %85
  call void @libxsmm_sparse_csc_asparse_innerloop_four_vector(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %63, i32 noundef %.0237, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %94 = add i32 %.0237, 3
  br label %128

95:                                               ; preds = %._crit_edge252, %85
  %96 = phi i32 [ %.pre253, %._crit_edge252 ], [ %.pre254, %85 ]
  %97 = icmp ult i32 %72, %96
  br i1 %97, label %98, label %100

98:                                               ; preds = %95
  call void @libxsmm_sparse_csc_asparse_innerloop_two_vector(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %62, i32 noundef %.0237, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %99 = add nuw i32 %.0237, 1
  br label %128

100:                                              ; preds = %._crit_edge255, %95
  %101 = phi i32 [ %.pre256, %._crit_edge255 ], [ %96, %95 ]
  %102 = icmp ult i32 %71, %101
  br i1 %102, label %103, label %128

103:                                              ; preds = %100
  call void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %61, i32 noundef %.0237, ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %128

104:                                              ; preds = %.lr.ph.split
  %105 = icmp ult i32 %.0237, %57
  %106 = load i32, ptr %38, align 4, !tbaa !16
  %107 = add i32 %106, %.0237
  %108 = zext i32 %107 to i64
  %109 = getelementptr inbounds i32, ptr %3, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !16
  br i1 %105, label %111, label %124

111:                                              ; preds = %104
  %112 = add i32 %110, 1
  %113 = add i32 %107, 1
  %114 = zext i32 %113 to i64
  %115 = getelementptr inbounds i32, ptr %3, i64 %114
  %116 = load i32, ptr %115, align 4, !tbaa !16
  %117 = icmp eq i32 %112, %116
  %.pre = load i32, ptr %1, align 1, !tbaa !13
  %118 = icmp ult i32 %112, %.pre
  %or.cond258 = select i1 %117, i1 %118, i1 false
  br i1 %or.cond258, label %119, label %121

119:                                              ; preds = %111
  call void @libxsmm_sparse_csc_asparse_innerloop_two_vector(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %60, i32 noundef %.0237, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %120 = add nuw i32 %.0237, 1
  br label %128

121:                                              ; preds = %111
  %122 = icmp ult i32 %110, %.pre
  br i1 %122, label %123, label %128

123:                                              ; preds = %121
  call void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %59, i32 noundef %.0237, ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %128

124:                                              ; preds = %104
  %125 = load i32, ptr %1, align 1, !tbaa !13
  %126 = icmp ult i32 %110, %125
  br i1 %126, label %127, label %128

127:                                              ; preds = %124
  call void @libxsmm_sparse_csc_asparse_innerloop_scalar(ptr noundef %0, ptr noundef nonnull %1, i32 noundef %58, i32 noundef %.0237, ptr noundef nonnull %3, ptr noundef nonnull %4)
  br label %128

128:                                              ; preds = %98, %103, %100, %93, %124, %127, %119, %123, %121
  %.1 = phi i32 [ %94, %93 ], [ %99, %98 ], [ %.0237, %103 ], [ %.0237, %100 ], [ %120, %119 ], [ %.0237, %123 ], [ %.0237, %121 ], [ %.0237, %127 ], [ %.0237, %124 ]
  %129 = add i32 %.1, 1
  %130 = icmp ult i32 %129, %40
  br i1 %130, label %.lr.ph.split, label %._crit_edge, !llvm.loop !18

._crit_edge:                                      ; preds = %128
  %131 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.41) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %131) #5
  br i1 %.not234, label %._crit_edge242, label %.lr.ph241.preheader

.lr.ph241.preheader:                              ; preds = %._crit_edge
  %132 = trunc nuw i64 %indvars.iv to i32
  br label %.lr.ph241

.lr.ph241:                                        ; preds = %.lr.ph241.preheader, %145
  %.2239 = phi i32 [ %146, %145 ], [ 0, %.lr.ph241.preheader ]
  %.1222238 = phi i32 [ %.2223, %145 ], [ %.0221244, %.lr.ph241.preheader ]
  %133 = load i32, ptr %38, align 4, !tbaa !16
  %134 = add i32 %133, %.2239
  %135 = zext i32 %134 to i64
  %136 = getelementptr inbounds i32, ptr %3, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !16
  %138 = load i32, ptr %1, align 1, !tbaa !13
  %139 = icmp ult i32 %137, %138
  br i1 %139, label %140, label %145

140:                                              ; preds = %.lr.ph241
  %141 = load i32, ptr %33, align 1, !tbaa !14
  %142 = load i32, ptr %32, align 1, !tbaa !17
  %143 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.42, i32 noundef %141, i32 noundef %137, i32 noundef %134, i32 noundef %142, i32 noundef %132) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %143) #5
  %144 = add i32 %.1222238, 2
  br label %145

145:                                              ; preds = %.lr.ph241, %140
  %.2223 = phi i32 [ %144, %140 ], [ %.1222238, %.lr.ph241 ]
  %146 = add nuw i32 %.2239, 1
  %exitcond.not = icmp eq i32 %146, %40
  br i1 %exitcond.not, label %._crit_edge242, label %.lr.ph241, !llvm.loop !20

._crit_edge242.critedge:                          ; preds = %35
  %147 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.41) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %147) #5
  br label %._crit_edge242

._crit_edge242:                                   ; preds = %145, %._crit_edge242.critedge, %._crit_edge
  %.1222.lcssa = phi i32 [ %.0221244, %._crit_edge ], [ %.0221244, %._crit_edge242.critedge ], [ %.2223, %145 ]
  %148 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.43) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %148) #5
  %149 = load i32, ptr %29, align 1, !tbaa !15
  %150 = zext i32 %149 to i64
  %151 = icmp ult i64 %indvars.iv.next, %150
  br i1 %151, label %35, label %._crit_edge246, !llvm.loop !21

._crit_edge246:                                   ; preds = %._crit_edge242, %.preheader
  %.0221.lcssa = phi i32 [ 0, %.preheader ], [ %.1222.lcssa, %._crit_edge242 ]
  %152 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.44) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %152) #5
  %153 = load i32, ptr %8, align 1, !tbaa !5
  %154 = mul i32 %153, %.0221.lcssa
  %155 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %7, i64 noundef 511, ptr noundef nonnull @.str.45, i32 noundef %154) #5
  call void @libxsmm_append_code_as_string(ptr noundef %0, ptr noundef nonnull %7, i32 noundef %155) #5
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %7) #5
  ret void
}

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

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 = { "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 = { 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 #4 = { 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 #5 = { nounwind }
attributes #6 = { 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, !7, i64 4}
!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 24}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !7, i64 20}
!15 = !{!6, !7, i64 8}
!16 = !{!7, !7, i64 0}
!17 = !{!6, !7, i64 16}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}


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