; LLVM IR from libxsmm/libxsmm :: samples/edge (bsparse_packed_csc)

; 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_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_gemm_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.edge_mat_desc = type { i32, i32, i32 }
%struct.libxsmm_kernel_info = type { i32, i32, i64, i32 }

@.str = external hidden unnamed_addr constant [9 x i8], align 1
@stderr = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [83 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [40 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %struct.libxsmm_gemm_shape, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %struct.libxsmm_gemm_param, align 8
  %17 = alloca %struct.edge_mat_desc, align 4
  %18 = alloca { i64, i32 }, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca double, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca %struct.libxsmm_kernel_info, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca double, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  %48 = load i32, ptr %4, align 4, !tbaa !5
  %49 = icmp eq i32 %48, 7
  br i1 %49, label %50, label %55

50:                                               ; preds = %2
  %51 = load ptr, ptr %5, align 8, !tbaa !9
  %52 = getelementptr inbounds ptr, ptr %51, i64 1
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  %54 = call i32 @atoi(ptr noundef %53) #11
  br label %56

55:                                               ; preds = %2
  br label %56

56:                                               ; preds = %55, %50
  %57 = phi i32 [ %54, %50 ], [ 9, %55 ]
  store i32 %57, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  %58 = load i32, ptr %4, align 4, !tbaa !5
  %59 = icmp eq i32 %58, 7
  br i1 %59, label %60, label %65

60:                                               ; preds = %56
  %61 = load ptr, ptr %5, align 8, !tbaa !9
  %62 = getelementptr inbounds ptr, ptr %61, i64 2
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  %64 = call i32 @atoi(ptr noundef %63) #11
  br label %66

65:                                               ; preds = %56
  br label %66

66:                                               ; preds = %65, %60
  %67 = phi i32 [ %64, %60 ], [ 10, %65 ]
  store i32 %67, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  %68 = load i32, ptr %4, align 4, !tbaa !5
  %69 = icmp eq i32 %68, 7
  br i1 %69, label %70, label %75

70:                                               ; preds = %66
  %71 = load ptr, ptr %5, align 8, !tbaa !9
  %72 = getelementptr inbounds ptr, ptr %71, i64 3
  %73 = load ptr, ptr %72, align 8, !tbaa !9
  %74 = call i32 @atoi(ptr noundef %73) #11
  br label %76

75:                                               ; preds = %66
  br label %76

76:                                               ; preds = %75, %70
  %77 = phi i32 [ %74, %70 ], [ 20, %75 ]
  store i32 %77, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  %78 = load i32, ptr %4, align 4, !tbaa !5
  %79 = icmp eq i32 %78, 7
  br i1 %79, label %80, label %85

80:                                               ; preds = %76
  %81 = load ptr, ptr %5, align 8, !tbaa !9
  %82 = getelementptr inbounds ptr, ptr %81, i64 4
  %83 = load ptr, ptr %82, align 8, !tbaa !9
  %84 = call i32 @atoi(ptr noundef %83) #11
  br label %86

85:                                               ; preds = %76
  br label %86

86:                                               ; preds = %85, %80
  %87 = phi i32 [ %84, %80 ], [ 8, %85 ]
  store i32 %87, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  %88 = load i32, ptr %4, align 4, !tbaa !5
  %89 = icmp eq i32 %88, 7
  br i1 %89, label %90, label %95

90:                                               ; preds = %86
  %91 = load ptr, ptr %5, align 8, !tbaa !9
  %92 = getelementptr inbounds ptr, ptr %91, i64 5
  %93 = load ptr, ptr %92, align 8, !tbaa !9
  %94 = call i32 @atoi(ptr noundef %93) #11
  br label %96

95:                                               ; preds = %86
  br label %96

96:                                               ; preds = %95, %90
  %97 = phi i32 [ %94, %90 ], [ 1, %95 ]
  store i32 %97, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #10
  %98 = load i32, ptr %4, align 4, !tbaa !5
  %99 = icmp eq i32 %98, 7
  br i1 %99, label %100, label %104

100:                                              ; preds = %96
  %101 = load ptr, ptr %5, align 8, !tbaa !9
  %102 = getelementptr inbounds ptr, ptr %101, i64 6
  %103 = load ptr, ptr %102, align 8, !tbaa !9
  br label %105

104:                                              ; preds = %96
  br label %105

105:                                              ; preds = %104, %100
  %106 = phi ptr [ %103, %100 ], [ @.str, %104 ]
  store ptr %106, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  store ptr null, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 40, ptr %13) #10
  %107 = load i32, ptr %6, align 4, !tbaa !5
  %108 = load i32, ptr %7, align 4, !tbaa !5
  %109 = load i32, ptr %8, align 4, !tbaa !5
  %110 = load i32, ptr %8, align 4, !tbaa !5
  %111 = load i32, ptr %7, align 4, !tbaa !5
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %13, i32 noundef %107, i32 noundef %108, i32 noundef %109, i32 noundef %110, i32 noundef 0, i32 noundef %111, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  store i32 0, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 176, ptr %16) #10
  call void @llvm.lifetime.start.p0(i64 12, ptr %17) #10
  %112 = load ptr, ptr %11, align 8, !tbaa !9
  %113 = call { i64, i32 } @libxsmm_sparse_csc_reader_desc(ptr noundef %112)
  store { i64, i32 } %113, ptr %18, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 8 %18, i64 12, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  %114 = getelementptr inbounds %struct.edge_mat_desc, ptr %17, i32 0, i32 0
  %115 = load i32, ptr %114, align 4, !tbaa !11
  store i32 %115, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  %116 = getelementptr inbounds %struct.edge_mat_desc, ptr %17, i32 0, i32 1
  %117 = load i32, ptr %116, align 4, !tbaa !13
  store i32 %117, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  %118 = getelementptr inbounds %struct.edge_mat_desc, ptr %17, i32 0, i32 2
  %119 = load i32, ptr %118, align 4, !tbaa !14
  store i32 %119, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %120 = load i32, ptr %8, align 4, !tbaa !5
  %121 = load i32, ptr %6, align 4, !tbaa !5
  %122 = mul nsw i32 %120, %121
  %123 = load i32, ptr %9, align 4, !tbaa !5
  %124 = mul nsw i32 %122, %123
  %125 = sext i32 %124 to i64
  %126 = mul i64 %125, 8
  %127 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %126, i64 noundef 64)
  store ptr %127, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %128 = load i32, ptr %8, align 4, !tbaa !5
  %129 = load i32, ptr %7, align 4, !tbaa !5
  %130 = mul nsw i32 %128, %129
  %131 = sext i32 %130 to i64
  %132 = mul i64 %131, 8
  %133 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %132, i64 noundef 64)
  store ptr %133, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  store ptr null, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  store ptr null, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  store ptr null, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  store ptr null, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  store ptr null, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  store ptr null, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %134 = load i32, ptr %6, align 4, !tbaa !5
  %135 = load i32, ptr %7, align 4, !tbaa !5
  %136 = mul nsw i32 %134, %135
  %137 = load i32, ptr %9, align 4, !tbaa !5
  %138 = mul nsw i32 %136, %137
  %139 = sext i32 %138 to i64
  %140 = mul i64 %139, 8
  %141 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %140, i64 noundef 64)
  store ptr %141, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  %142 = load i32, ptr %6, align 4, !tbaa !5
  %143 = load i32, ptr %7, align 4, !tbaa !5
  %144 = mul nsw i32 %142, %143
  %145 = load i32, ptr %9, align 4, !tbaa !5
  %146 = mul nsw i32 %144, %145
  %147 = sext i32 %146 to i64
  %148 = mul i64 %147, 8
  %149 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %148, i64 noundef 64)
  store ptr %149, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  store double 0.000000e+00, ptr %32, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  %150 = load i32, ptr %8, align 4, !tbaa !5
  %151 = zext i32 %150 to i64
  %152 = load i32, ptr %9, align 4, !tbaa !5
  %153 = call i32 @libxsmm_nonconst_int(i32 noundef %152)
  %154 = zext i32 %153 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %155 = load i32, ptr %8, align 4, !tbaa !5
  %156 = zext i32 %155 to i64
  %157 = load i32, ptr %9, align 4, !tbaa !5
  %158 = call i32 @libxsmm_nonconst_int(i32 noundef %157)
  %159 = zext i32 %158 to i64
  %160 = load ptr, ptr %22, align 8, !tbaa !9
  store ptr %160, ptr %38, align 8, !tbaa !9
  %161 = load i32, ptr %7, align 4, !tbaa !5
  %162 = zext i32 %161 to i64
  %163 = load i32, ptr %9, align 4, !tbaa !5
  %164 = call i32 @libxsmm_nonconst_int(i32 noundef %163)
  %165 = zext i32 %164 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  %166 = load i32, ptr %7, align 4, !tbaa !5
  %167 = zext i32 %166 to i64
  %168 = load i32, ptr %9, align 4, !tbaa !5
  %169 = call i32 @libxsmm_nonconst_int(i32 noundef %168)
  %170 = zext i32 %169 to i64
  %171 = load ptr, ptr %31, align 8, !tbaa !9
  store ptr %171, ptr %39, align 8, !tbaa !9
  %172 = load i32, ptr %7, align 4, !tbaa !5
  %173 = zext i32 %172 to i64
  %174 = load i32, ptr %9, align 4, !tbaa !5
  %175 = call i32 @libxsmm_nonconst_int(i32 noundef %174)
  %176 = zext i32 %175 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %177 = load i32, ptr %7, align 4, !tbaa !5
  %178 = zext i32 %177 to i64
  %179 = load i32, ptr %9, align 4, !tbaa !5
  %180 = call i32 @libxsmm_nonconst_int(i32 noundef %179)
  %181 = zext i32 %180 to i64
  %182 = load ptr, ptr %30, align 8, !tbaa !9
  store ptr %182, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %41) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #10
  store i32 0, ptr %46, align 4, !tbaa !5
  %183 = load i32, ptr %4, align 4, !tbaa !5
  %184 = icmp ne i32 %183, 7
  br i1 %184, label %185, label %188

185:                                              ; preds = %105
  %186 = load ptr, ptr @stderr, align 8, !tbaa !9
  %187 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %186, ptr noundef @.str.1) #10
  store i32 1, ptr %46, align 4, !tbaa !5
  br label %188

188:                                              ; preds = %185, %105
  %189 = load i32, ptr %8, align 4, !tbaa !5
  %190 = load i32, ptr %19, align 4, !tbaa !5
  %191 = icmp ne i32 %189, %190
  br i1 %191, label %192, label %195

192:                                              ; preds = %188
  %193 = load ptr, ptr @stderr, align 8, !tbaa !9
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef @.str.2) #10
  store i32 1, ptr %46, align 4, !tbaa !5
  br label %195

195:                                              ; preds = %192, %188
  %196 = load i32, ptr %7, align 4, !tbaa !5
  %197 = load i32, ptr %20, align 4, !tbaa !5
  %198 = icmp ne i32 %196, %197
  br i1 %198, label %199, label %202

199:                                              ; preds = %195
  %200 = load ptr, ptr @stderr, align 8, !tbaa !9
  %201 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %200, ptr noundef @.str.3) #10
  store i32 1, ptr %46, align 4, !tbaa !5
  br label %202

202:                                              ; preds = %199, %195
  %203 = load i32, ptr %6, align 4, !tbaa !5
  %204 = icmp ne i32 %203, 9
  br i1 %204, label %205, label %208

205:                                              ; preds = %202
  %206 = load ptr, ptr @stderr, align 8, !tbaa !9
  %207 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %206, ptr noundef @.str.4) #10
  store i32 1, ptr %46, align 4, !tbaa !5
  br label %208

208:                                              ; preds = %205, %202
  %209 = load ptr, ptr %22, align 8, !tbaa !9
  %210 = icmp eq ptr null, %209
  br i1 %210, label %220, label %211

211:                                              ; preds = %208
  %212 = load ptr, ptr %23, align 8, !tbaa !9
  %213 = icmp eq ptr null, %212
  br i1 %213, label %220, label %214

214:                                              ; preds = %211
  %215 = load ptr, ptr %30, align 8, !tbaa !9
  %216 = icmp eq ptr null, %215
  br i1 %216, label %220, label %217

217:                                              ; preds = %214
  %218 = load ptr, ptr %31, align 8, !tbaa !9
  %219 = icmp eq ptr null, %218
  br i1 %219, label %220, label %223

220:                                              ; preds = %217, %214, %211, %208
  %221 = load ptr, ptr @stderr, align 8, !tbaa !9
  %222 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %221, ptr noundef @.str.5) #10
  store i32 1, ptr %46, align 4, !tbaa !5
  br label %223

223:                                              ; preds = %220, %217
  br label %224

224:                                              ; preds = %223
  %225 = load i32, ptr %46, align 4, !tbaa !5
  %226 = icmp eq i32 0, %225
  br i1 %226, label %227, label %837

227:                                              ; preds = %224
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %228

228:                                              ; preds = %278, %227
  %229 = load i32, ptr %35, align 4, !tbaa !5
  %230 = load i32, ptr %6, align 4, !tbaa !5
  %231 = icmp slt i32 %229, %230
  br i1 %231, label %232, label %281

232:                                              ; preds = %228
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %233

233:                                              ; preds = %274, %232
  %234 = load i32, ptr %36, align 4, !tbaa !5
  %235 = load i32, ptr %8, align 4, !tbaa !5
  %236 = icmp slt i32 %234, %235
  br i1 %236, label %237, label %277

237:                                              ; preds = %233
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %238

238:                                              ; preds = %270, %237
  %239 = load i32, ptr %33, align 4, !tbaa !5
  %240 = load i32, ptr %9, align 4, !tbaa !5
  %241 = icmp slt i32 %239, %240
  br i1 %241, label %242, label %273

242:                                              ; preds = %238
  %243 = call double @libxsmm_rng_f64()
  %244 = load ptr, ptr %38, align 8, !tbaa !9
  %245 = load i32, ptr %8, align 4, !tbaa !5
  %246 = mul nsw i32 0, %245
  %247 = sext i32 %246 to i64
  %248 = mul nuw i64 %151, %154
  %249 = mul nsw i64 %247, %248
  %250 = getelementptr inbounds double, ptr %244, i64 %249
  %251 = load i32, ptr %9, align 4, !tbaa !5
  %252 = mul nsw i32 0, %251
  %253 = sext i32 %252 to i64
  %254 = mul nuw i64 %151, %154
  %255 = mul nsw i64 %253, %254
  %256 = getelementptr inbounds double, ptr %250, i64 %255
  %257 = load i32, ptr %35, align 4, !tbaa !5
  %258 = sext i32 %257 to i64
  %259 = mul nuw i64 %151, %154
  %260 = mul nsw i64 %258, %259
  %261 = getelementptr inbounds double, ptr %256, i64 %260
  %262 = load i32, ptr %36, align 4, !tbaa !5
  %263 = sext i32 %262 to i64
  %264 = mul nsw i64 %263, %154
  %265 = getelementptr inbounds double, ptr %261, i64 %264
  %266 = load i32, ptr %33, align 4, !tbaa !5
  %267 = call i32 @libxsmm_nonconst_int(i32 noundef %266)
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds double, ptr %265, i64 %268
  store double %243, ptr %269, align 8, !tbaa !15
  br label %270

270:                                              ; preds = %242
  %271 = load i32, ptr %33, align 4, !tbaa !5
  %272 = add nsw i32 %271, 1
  store i32 %272, ptr %33, align 4, !tbaa !5
  br label %238, !llvm.loop !17

273:                                              ; preds = %238
  br label %274

274:                                              ; preds = %273
  %275 = load i32, ptr %36, align 4, !tbaa !5
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %36, align 4, !tbaa !5
  br label %233, !llvm.loop !19

277:                                              ; preds = %233
  br label %278

278:                                              ; preds = %277
  %279 = load i32, ptr %35, align 4, !tbaa !5
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %35, align 4, !tbaa !5
  br label %228, !llvm.loop !20

281:                                              ; preds = %228
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %282

282:                                              ; preds = %357, %281
  %283 = load i32, ptr %35, align 4, !tbaa !5
  %284 = load i32, ptr %6, align 4, !tbaa !5
  %285 = icmp slt i32 %283, %284
  br i1 %285, label %286, label %360

286:                                              ; preds = %282
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %287

287:                                              ; preds = %353, %286
  %288 = load i32, ptr %36, align 4, !tbaa !5
  %289 = load i32, ptr %7, align 4, !tbaa !5
  %290 = icmp slt i32 %288, %289
  br i1 %290, label %291, label %356

291:                                              ; preds = %287
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %292

292:                                              ; preds = %349, %291
  %293 = load i32, ptr %33, align 4, !tbaa !5
  %294 = load i32, ptr %9, align 4, !tbaa !5
  %295 = icmp slt i32 %293, %294
  br i1 %295, label %296, label %352

296:                                              ; preds = %292
  %297 = load ptr, ptr %40, align 8, !tbaa !9
  %298 = load i32, ptr %7, align 4, !tbaa !5
  %299 = mul nsw i32 0, %298
  %300 = sext i32 %299 to i64
  %301 = mul nuw i64 %173, %176
  %302 = mul nsw i64 %300, %301
  %303 = getelementptr inbounds double, ptr %297, i64 %302
  %304 = load i32, ptr %9, align 4, !tbaa !5
  %305 = mul nsw i32 0, %304
  %306 = sext i32 %305 to i64
  %307 = mul nuw i64 %173, %176
  %308 = mul nsw i64 %306, %307
  %309 = getelementptr inbounds double, ptr %303, i64 %308
  %310 = load i32, ptr %35, align 4, !tbaa !5
  %311 = sext i32 %310 to i64
  %312 = mul nuw i64 %173, %176
  %313 = mul nsw i64 %311, %312
  %314 = getelementptr inbounds double, ptr %309, i64 %313
  %315 = load i32, ptr %36, align 4, !tbaa !5
  %316 = sext i32 %315 to i64
  %317 = mul nsw i64 %316, %176
  %318 = getelementptr inbounds double, ptr %314, i64 %317
  %319 = load i32, ptr %33, align 4, !tbaa !5
  %320 = call i32 @libxsmm_nonconst_int(i32 noundef %319)
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds double, ptr %318, i64 %321
  store double 0.000000e+00, ptr %322, align 8, !tbaa !15
  %323 = load ptr, ptr %39, align 8, !tbaa !9
  %324 = load i32, ptr %7, align 4, !tbaa !5
  %325 = mul nsw i32 0, %324
  %326 = sext i32 %325 to i64
  %327 = mul nuw i64 %162, %165
  %328 = mul nsw i64 %326, %327
  %329 = getelementptr inbounds double, ptr %323, i64 %328
  %330 = load i32, ptr %9, align 4, !tbaa !5
  %331 = mul nsw i32 0, %330
  %332 = sext i32 %331 to i64
  %333 = mul nuw i64 %162, %165
  %334 = mul nsw i64 %332, %333
  %335 = getelementptr inbounds double, ptr %329, i64 %334
  %336 = load i32, ptr %35, align 4, !tbaa !5
  %337 = sext i32 %336 to i64
  %338 = mul nuw i64 %162, %165
  %339 = mul nsw i64 %337, %338
  %340 = getelementptr inbounds double, ptr %335, i64 %339
  %341 = load i32, ptr %36, align 4, !tbaa !5
  %342 = sext i32 %341 to i64
  %343 = mul nsw i64 %342, %165
  %344 = getelementptr inbounds double, ptr %340, i64 %343
  %345 = load i32, ptr %33, align 4, !tbaa !5
  %346 = call i32 @libxsmm_nonconst_int(i32 noundef %345)
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds double, ptr %344, i64 %347
  store double 0.000000e+00, ptr %348, align 8, !tbaa !15
  br label %349

349:                                              ; preds = %296
  %350 = load i32, ptr %33, align 4, !tbaa !5
  %351 = add nsw i32 %350, 1
  store i32 %351, ptr %33, align 4, !tbaa !5
  br label %292, !llvm.loop !21

352:                                              ; preds = %292
  br label %353

353:                                              ; preds = %352
  %354 = load i32, ptr %36, align 4, !tbaa !5
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %36, align 4, !tbaa !5
  br label %287, !llvm.loop !22

356:                                              ; preds = %287
  br label %357

357:                                              ; preds = %356
  %358 = load i32, ptr %35, align 4, !tbaa !5
  %359 = add nsw i32 %358, 1
  store i32 %359, ptr %35, align 4, !tbaa !5
  br label %282, !llvm.loop !23

360:                                              ; preds = %282
  %361 = load ptr, ptr %11, align 8, !tbaa !9
  call void @libxsmm_sparse_csc_reader(ptr noundef %361, ptr noundef %25, ptr noundef %26, ptr noundef %24, ptr noundef %19, ptr noundef %20, ptr noundef %21)
  %362 = load ptr, ptr %24, align 8, !tbaa !9
  %363 = icmp eq ptr null, %362
  br i1 %363, label %370, label %364

364:                                              ; preds = %360
  %365 = load ptr, ptr %25, align 8, !tbaa !9
  %366 = icmp eq ptr null, %365
  br i1 %366, label %370, label %367

367:                                              ; preds = %364
  %368 = load ptr, ptr %26, align 8, !tbaa !9
  %369 = icmp eq ptr null, %368
  br i1 %369, label %370, label %371

370:                                              ; preds = %367, %364, %360
  store i32 1, ptr %46, align 4, !tbaa !5
  br label %839

371:                                              ; preds = %367
  %372 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %373 = load i32, ptr %19, align 4, !tbaa !5
  %374 = load i32, ptr %20, align 4, !tbaa !5
  %375 = load i32, ptr %21, align 4, !tbaa !5
  %376 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %373, i32 noundef %374, i32 noundef %375)
  store i32 0, ptr %34, align 4, !tbaa !5
  br label %377

377:                                              ; preds = %388, %371
  %378 = load i32, ptr %34, align 4, !tbaa !5
  %379 = load i32, ptr %8, align 4, !tbaa !5
  %380 = load i32, ptr %7, align 4, !tbaa !5
  %381 = mul nsw i32 %379, %380
  %382 = icmp slt i32 %378, %381
  br i1 %382, label %383, label %391

383:                                              ; preds = %377
  %384 = load ptr, ptr %23, align 8, !tbaa !9
  %385 = load i32, ptr %34, align 4, !tbaa !5
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds double, ptr %384, i64 %386
  store double 0.000000e+00, ptr %387, align 8, !tbaa !15
  br label %388

388:                                              ; preds = %383
  %389 = load i32, ptr %34, align 4, !tbaa !5
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %34, align 4, !tbaa !5
  br label %377, !llvm.loop !24

391:                                              ; preds = %377
  store i32 0, ptr %34, align 4, !tbaa !5
  br label %392

392:                                              ; preds = %462, %391
  %393 = load i32, ptr %34, align 4, !tbaa !5
  %394 = load i32, ptr %7, align 4, !tbaa !5
  %395 = icmp slt i32 %393, %394
  br i1 %395, label %396, label %465

396:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #10
  %397 = load ptr, ptr %25, align 8, !tbaa !9
  %398 = load i32, ptr %34, align 4, !tbaa !5
  %399 = add nsw i32 %398, 1
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds i32, ptr %397, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !5
  %403 = load ptr, ptr %25, align 8, !tbaa !9
  %404 = load i32, ptr %34, align 4, !tbaa !5
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds i32, ptr %403, i64 %405
  %407 = load i32, ptr %406, align 4, !tbaa !5
  %408 = sub i32 %402, %407
  store i32 %408, ptr %47, align 4, !tbaa !5
  %409 = load ptr, ptr %25, align 8, !tbaa !9
  %410 = load i32, ptr %34, align 4, !tbaa !5
  %411 = add nsw i32 %410, 1
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds i32, ptr %409, i64 %412
  %414 = load i32, ptr %413, align 4, !tbaa !5
  %415 = load ptr, ptr %25, align 8, !tbaa !9
  %416 = load i32, ptr %34, align 4, !tbaa !5
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i32, ptr %415, i64 %417
  %419 = load i32, ptr %418, align 4, !tbaa !5
  %420 = icmp uge i32 %414, %419
  br i1 %420, label %421, label %422

421:                                              ; preds = %396
  br label %423

422:                                              ; preds = %396
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.9, i32 noundef 125, ptr noundef @__PRETTY_FUNCTION__.main) #12
  unreachable

423:                                              ; preds = %421
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %424

424:                                              ; preds = %458, %423
  %425 = load i32, ptr %33, align 4, !tbaa !5
  %426 = load i32, ptr %47, align 4, !tbaa !5
  %427 = icmp slt i32 %425, %426
  br i1 %427, label %428, label %461

428:                                              ; preds = %424
  %429 = load ptr, ptr %24, align 8, !tbaa !9
  %430 = load ptr, ptr %25, align 8, !tbaa !9
  %431 = load i32, ptr %34, align 4, !tbaa !5
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds i32, ptr %430, i64 %432
  %434 = load i32, ptr %433, align 4, !tbaa !5
  %435 = load i32, ptr %33, align 4, !tbaa !5
  %436 = add i32 %434, %435
  %437 = zext i32 %436 to i64
  %438 = getelementptr inbounds double, ptr %429, i64 %437
  %439 = load double, ptr %438, align 8, !tbaa !15
  %440 = load ptr, ptr %23, align 8, !tbaa !9
  %441 = load ptr, ptr %26, align 8, !tbaa !9
  %442 = load ptr, ptr %25, align 8, !tbaa !9
  %443 = load i32, ptr %34, align 4, !tbaa !5
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i32, ptr %442, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !5
  %447 = load i32, ptr %33, align 4, !tbaa !5
  %448 = add i32 %446, %447
  %449 = zext i32 %448 to i64
  %450 = getelementptr inbounds i32, ptr %441, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !5
  %452 = load i32, ptr %7, align 4, !tbaa !5
  %453 = mul i32 %451, %452
  %454 = load i32, ptr %34, align 4, !tbaa !5
  %455 = add i32 %453, %454
  %456 = zext i32 %455 to i64
  %457 = getelementptr inbounds double, ptr %440, i64 %456
  store double %439, ptr %457, align 8, !tbaa !15
  br label %458

458:                                              ; preds = %428
  %459 = load i32, ptr %33, align 4, !tbaa !5
  %460 = add nsw i32 %459, 1
  store i32 %460, ptr %33, align 4, !tbaa !5
  br label %424, !llvm.loop !25

461:                                              ; preds = %424
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #10
  br label %462

462:                                              ; preds = %461
  %463 = load i32, ptr %34, align 4, !tbaa !5
  %464 = add nsw i32 %463, 1
  store i32 %464, ptr %34, align 4, !tbaa !5
  br label %392, !llvm.loop !26

465:                                              ; preds = %392
  %466 = call i64 @libxsmm_timer_tick()
  store i64 %466, ptr %43, align 8, !tbaa !27
  store i32 0, ptr %34, align 4, !tbaa !5
  br label %467

467:                                              ; preds = %572, %465
  %468 = load i32, ptr %34, align 4, !tbaa !5
  %469 = load i32, ptr %10, align 4, !tbaa !5
  %470 = icmp slt i32 %468, %469
  br i1 %470, label %471, label %575

471:                                              ; preds = %467
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %472

472:                                              ; preds = %568, %471
  %473 = load i32, ptr %35, align 4, !tbaa !5
  %474 = load i32, ptr %6, align 4, !tbaa !5
  %475 = icmp slt i32 %473, %474
  br i1 %475, label %476, label %571

476:                                              ; preds = %472
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %477

477:                                              ; preds = %564, %476
  %478 = load i32, ptr %36, align 4, !tbaa !5
  %479 = load i32, ptr %7, align 4, !tbaa !5
  %480 = icmp slt i32 %478, %479
  br i1 %480, label %481, label %567

481:                                              ; preds = %477
  store i32 0, ptr %37, align 4, !tbaa !5
  br label %482

482:                                              ; preds = %560, %481
  %483 = load i32, ptr %37, align 4, !tbaa !5
  %484 = load i32, ptr %8, align 4, !tbaa !5
  %485 = icmp slt i32 %483, %484
  br i1 %485, label %486, label %563

486:                                              ; preds = %482
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %487

487:                                              ; preds = %556, %486
  %488 = load i32, ptr %33, align 4, !tbaa !5
  %489 = load i32, ptr %9, align 4, !tbaa !5
  %490 = icmp slt i32 %488, %489
  br i1 %490, label %491, label %559

491:                                              ; preds = %487
  %492 = load ptr, ptr %38, align 8, !tbaa !9
  %493 = load i32, ptr %8, align 4, !tbaa !5
  %494 = mul nsw i32 0, %493
  %495 = sext i32 %494 to i64
  %496 = mul nuw i64 %151, %154
  %497 = mul nsw i64 %495, %496
  %498 = getelementptr inbounds double, ptr %492, i64 %497
  %499 = load i32, ptr %9, align 4, !tbaa !5
  %500 = mul nsw i32 0, %499
  %501 = sext i32 %500 to i64
  %502 = mul nuw i64 %151, %154
  %503 = mul nsw i64 %501, %502
  %504 = getelementptr inbounds double, ptr %498, i64 %503
  %505 = load i32, ptr %35, align 4, !tbaa !5
  %506 = sext i32 %505 to i64
  %507 = mul nuw i64 %151, %154
  %508 = mul nsw i64 %506, %507
  %509 = getelementptr inbounds double, ptr %504, i64 %508
  %510 = load i32, ptr %37, align 4, !tbaa !5
  %511 = sext i32 %510 to i64
  %512 = mul nsw i64 %511, %154
  %513 = getelementptr inbounds double, ptr %509, i64 %512
  %514 = load i32, ptr %33, align 4, !tbaa !5
  %515 = call i32 @libxsmm_nonconst_int(i32 noundef %514)
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds double, ptr %513, i64 %516
  %518 = load double, ptr %517, align 8, !tbaa !15
  %519 = load ptr, ptr %23, align 8, !tbaa !9
  %520 = load i32, ptr %37, align 4, !tbaa !5
  %521 = load i32, ptr %7, align 4, !tbaa !5
  %522 = mul nsw i32 %520, %521
  %523 = load i32, ptr %36, align 4, !tbaa !5
  %524 = add nsw i32 %522, %523
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds double, ptr %519, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !15
  %528 = load ptr, ptr %40, align 8, !tbaa !9
  %529 = load i32, ptr %7, align 4, !tbaa !5
  %530 = mul nsw i32 0, %529
  %531 = sext i32 %530 to i64
  %532 = mul nuw i64 %173, %176
  %533 = mul nsw i64 %531, %532
  %534 = getelementptr inbounds double, ptr %528, i64 %533
  %535 = load i32, ptr %9, align 4, !tbaa !5
  %536 = mul nsw i32 0, %535
  %537 = sext i32 %536 to i64
  %538 = mul nuw i64 %173, %176
  %539 = mul nsw i64 %537, %538
  %540 = getelementptr inbounds double, ptr %534, i64 %539
  %541 = load i32, ptr %35, align 4, !tbaa !5
  %542 = sext i32 %541 to i64
  %543 = mul nuw i64 %173, %176
  %544 = mul nsw i64 %542, %543
  %545 = getelementptr inbounds double, ptr %540, i64 %544
  %546 = load i32, ptr %36, align 4, !tbaa !5
  %547 = sext i32 %546 to i64
  %548 = mul nsw i64 %547, %176
  %549 = getelementptr inbounds double, ptr %545, i64 %548
  %550 = load i32, ptr %33, align 4, !tbaa !5
  %551 = call i32 @libxsmm_nonconst_int(i32 noundef %550)
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds double, ptr %549, i64 %552
  %554 = load double, ptr %553, align 8, !tbaa !15
  %555 = call double @llvm.fmuladd.f64(double %518, double %527, double %554)
  store double %555, ptr %553, align 8, !tbaa !15
  br label %556

556:                                              ; preds = %491
  %557 = load i32, ptr %33, align 4, !tbaa !5
  %558 = add nsw i32 %557, 1
  store i32 %558, ptr %33, align 4, !tbaa !5
  br label %487, !llvm.loop !29

559:                                              ; preds = %487
  br label %560

560:                                              ; preds = %559
  %561 = load i32, ptr %37, align 4, !tbaa !5
  %562 = add nsw i32 %561, 1
  store i32 %562, ptr %37, align 4, !tbaa !5
  br label %482, !llvm.loop !30

563:                                              ; preds = %482
  br label %564

564:                                              ; preds = %563
  %565 = load i32, ptr %36, align 4, !tbaa !5
  %566 = add nsw i32 %565, 1
  store i32 %566, ptr %36, align 4, !tbaa !5
  br label %477, !llvm.loop !31

567:                                              ; preds = %477
  br label %568

568:                                              ; preds = %567
  %569 = load i32, ptr %35, align 4, !tbaa !5
  %570 = add nsw i32 %569, 1
  store i32 %570, ptr %35, align 4, !tbaa !5
  br label %472, !llvm.loop !32

571:                                              ; preds = %472
  br label %572

572:                                              ; preds = %571
  %573 = load i32, ptr %34, align 4, !tbaa !5
  %574 = add nsw i32 %573, 1
  store i32 %574, ptr %34, align 4, !tbaa !5
  br label %467, !llvm.loop !33

575:                                              ; preds = %467
  %576 = call i64 @libxsmm_timer_tick()
  store i64 %576, ptr %44, align 8, !tbaa !27
  %577 = load i64, ptr %43, align 8, !tbaa !27
  %578 = load i64, ptr %44, align 8, !tbaa !27
  %579 = call double @libxsmm_timer_duration(i64 noundef %577, i64 noundef %578)
  store double %579, ptr %45, align 8, !tbaa !15
  %580 = load double, ptr %45, align 8, !tbaa !15
  %581 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %580)
  %582 = load i32, ptr %10, align 4, !tbaa !5
  %583 = sitofp i32 %582 to double
  %584 = load i32, ptr %6, align 4, !tbaa !5
  %585 = sitofp i32 %584 to double
  %586 = fmul double %583, %585
  %587 = load i32, ptr %7, align 4, !tbaa !5
  %588 = sitofp i32 %587 to double
  %589 = fmul double %586, %588
  %590 = load i32, ptr %8, align 4, !tbaa !5
  %591 = sitofp i32 %590 to double
  %592 = fmul double %589, %591
  %593 = load i32, ptr %9, align 4, !tbaa !5
  %594 = sitofp i32 %593 to double
  %595 = fmul double %592, %594
  %596 = fmul double %595, 2.000000e+00
  %597 = load double, ptr %45, align 8, !tbaa !15
  %598 = fmul double %597, 1.000000e+09
  %599 = fdiv double %596, %598
  %600 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %599)
  %601 = load i32, ptr %9, align 4, !tbaa !5
  %602 = load ptr, ptr %25, align 8, !tbaa !9
  %603 = load ptr, ptr %26, align 8, !tbaa !9
  %604 = load ptr, ptr %24, align 8, !tbaa !9
  %605 = call ptr @libxsmm_create_packed_spgemm_csc(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %13, i32 noundef 0, i32 noundef 0, i32 noundef %601, ptr noundef %602, ptr noundef %603, ptr noundef %604)
  store ptr %605, ptr %12, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 8 %16, i8 0, i64 176, i1 false)
  %606 = load ptr, ptr %22, align 8, !tbaa !9
  %607 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %16, i32 0, i32 1
  %608 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %607, i32 0, i32 0
  store ptr %606, ptr %608, align 8, !tbaa !34
  %609 = load ptr, ptr %24, align 8, !tbaa !9
  %610 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %16, i32 0, i32 2
  %611 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %610, i32 0, i32 0
  store ptr %609, ptr %611, align 8, !tbaa !38
  %612 = load ptr, ptr %31, align 8, !tbaa !9
  %613 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %16, i32 0, i32 3
  %614 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %613, i32 0, i32 0
  store ptr %612, ptr %614, align 8, !tbaa !39
  %615 = call i64 @libxsmm_timer_tick()
  store i64 %615, ptr %43, align 8, !tbaa !27
  store i32 0, ptr %34, align 4, !tbaa !5
  br label %616

616:                                              ; preds = %622, %575
  %617 = load i32, ptr %34, align 4, !tbaa !5
  %618 = load i32, ptr %10, align 4, !tbaa !5
  %619 = icmp slt i32 %617, %618
  br i1 %619, label %620, label %625

620:                                              ; preds = %616
  %621 = load ptr, ptr %12, align 8, !tbaa !9
  call void %621(ptr noundef %16)
  br label %622

622:                                              ; preds = %620
  %623 = load i32, ptr %34, align 4, !tbaa !5
  %624 = add nsw i32 %623, 1
  store i32 %624, ptr %34, align 4, !tbaa !5
  br label %616, !llvm.loop !40

625:                                              ; preds = %616
  %626 = call i64 @libxsmm_timer_tick()
  store i64 %626, ptr %44, align 8, !tbaa !27
  %627 = load i64, ptr %43, align 8, !tbaa !27
  %628 = load i64, ptr %44, align 8, !tbaa !27
  %629 = call double @libxsmm_timer_duration(i64 noundef %627, i64 noundef %628)
  store double %629, ptr %45, align 8, !tbaa !15
  %630 = load ptr, ptr %12, align 8, !tbaa !9
  %631 = call i32 @libxsmm_get_kernel_info(ptr noundef %630, ptr noundef %41)
  %632 = getelementptr inbounds %struct.libxsmm_kernel_info, ptr %41, i32 0, i32 1
  %633 = load i32, ptr %632, align 4, !tbaa !41
  %634 = zext i32 %633 to i64
  store i64 %634, ptr %42, align 8, !tbaa !27
  %635 = load double, ptr %45, align 8, !tbaa !15
  %636 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %635)
  %637 = load i32, ptr %10, align 4, !tbaa !5
  %638 = sitofp i32 %637 to double
  %639 = load i32, ptr %6, align 4, !tbaa !5
  %640 = sitofp i32 %639 to double
  %641 = fmul double %638, %640
  %642 = load i32, ptr %21, align 4, !tbaa !5
  %643 = uitofp i32 %642 to double
  %644 = fmul double %641, %643
  %645 = load i32, ptr %9, align 4, !tbaa !5
  %646 = sitofp i32 %645 to double
  %647 = fmul double %644, %646
  %648 = fmul double %647, 2.000000e+00
  %649 = load double, ptr %45, align 8, !tbaa !15
  %650 = fmul double %649, 1.000000e+09
  %651 = fdiv double %648, %650
  %652 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %651)
  %653 = load i32, ptr %10, align 4, !tbaa !5
  %654 = sitofp i32 %653 to double
  %655 = load i64, ptr %42, align 8, !tbaa !27
  %656 = uitofp i64 %655 to double
  %657 = fmul double %654, %656
  %658 = load double, ptr %45, align 8, !tbaa !15
  %659 = fmul double %658, 1.000000e+09
  %660 = fdiv double %657, %659
  %661 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %660)
  store double 0.000000e+00, ptr %32, align 8, !tbaa !15
  store i32 0, ptr %35, align 4, !tbaa !5
  br label %662

662:                                              ; preds = %801, %625
  %663 = load i32, ptr %35, align 4, !tbaa !5
  %664 = load i32, ptr %6, align 4, !tbaa !5
  %665 = icmp slt i32 %663, %664
  br i1 %665, label %666, label %804

666:                                              ; preds = %662
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %667

667:                                              ; preds = %797, %666
  %668 = load i32, ptr %36, align 4, !tbaa !5
  %669 = load i32, ptr %7, align 4, !tbaa !5
  %670 = icmp slt i32 %668, %669
  br i1 %670, label %671, label %800

671:                                              ; preds = %667
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %672

672:                                              ; preds = %793, %671
  %673 = load i32, ptr %33, align 4, !tbaa !5
  %674 = load i32, ptr %9, align 4, !tbaa !5
  %675 = icmp slt i32 %673, %674
  br i1 %675, label %676, label %796

676:                                              ; preds = %672
  %677 = load ptr, ptr %40, align 8, !tbaa !9
  %678 = load i32, ptr %7, align 4, !tbaa !5
  %679 = mul nsw i32 0, %678
  %680 = sext i32 %679 to i64
  %681 = mul nuw i64 %173, %176
  %682 = mul nsw i64 %680, %681
  %683 = getelementptr inbounds double, ptr %677, i64 %682
  %684 = load i32, ptr %9, align 4, !tbaa !5
  %685 = mul nsw i32 0, %684
  %686 = sext i32 %685 to i64
  %687 = mul nuw i64 %173, %176
  %688 = mul nsw i64 %686, %687
  %689 = getelementptr inbounds double, ptr %683, i64 %688
  %690 = load i32, ptr %35, align 4, !tbaa !5
  %691 = sext i32 %690 to i64
  %692 = mul nuw i64 %173, %176
  %693 = mul nsw i64 %691, %692
  %694 = getelementptr inbounds double, ptr %689, i64 %693
  %695 = load i32, ptr %36, align 4, !tbaa !5
  %696 = sext i32 %695 to i64
  %697 = mul nsw i64 %696, %176
  %698 = getelementptr inbounds double, ptr %694, i64 %697
  %699 = load i32, ptr %33, align 4, !tbaa !5
  %700 = call i32 @libxsmm_nonconst_int(i32 noundef %699)
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds double, ptr %698, i64 %701
  %703 = load double, ptr %702, align 8, !tbaa !15
  %704 = load ptr, ptr %39, align 8, !tbaa !9
  %705 = load i32, ptr %7, align 4, !tbaa !5
  %706 = mul nsw i32 0, %705
  %707 = sext i32 %706 to i64
  %708 = mul nuw i64 %162, %165
  %709 = mul nsw i64 %707, %708
  %710 = getelementptr inbounds double, ptr %704, i64 %709
  %711 = load i32, ptr %9, align 4, !tbaa !5
  %712 = mul nsw i32 0, %711
  %713 = sext i32 %712 to i64
  %714 = mul nuw i64 %162, %165
  %715 = mul nsw i64 %713, %714
  %716 = getelementptr inbounds double, ptr %710, i64 %715
  %717 = load i32, ptr %35, align 4, !tbaa !5
  %718 = sext i32 %717 to i64
  %719 = mul nuw i64 %162, %165
  %720 = mul nsw i64 %718, %719
  %721 = getelementptr inbounds double, ptr %716, i64 %720
  %722 = load i32, ptr %36, align 4, !tbaa !5
  %723 = sext i32 %722 to i64
  %724 = mul nsw i64 %723, %165
  %725 = getelementptr inbounds double, ptr %721, i64 %724
  %726 = load i32, ptr %33, align 4, !tbaa !5
  %727 = call i32 @libxsmm_nonconst_int(i32 noundef %726)
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds double, ptr %725, i64 %728
  %730 = load double, ptr %729, align 8, !tbaa !15
  %731 = fsub double %703, %730
  %732 = call double @llvm.fabs.f64(double %731)
  %733 = load double, ptr %32, align 8, !tbaa !15
  %734 = fcmp ogt double %732, %733
  br i1 %734, label %735, label %792

735:                                              ; preds = %676
  %736 = load ptr, ptr %40, align 8, !tbaa !9
  %737 = load i32, ptr %7, align 4, !tbaa !5
  %738 = mul nsw i32 0, %737
  %739 = sext i32 %738 to i64
  %740 = mul nuw i64 %173, %176
  %741 = mul nsw i64 %739, %740
  %742 = getelementptr inbounds double, ptr %736, i64 %741
  %743 = load i32, ptr %9, align 4, !tbaa !5
  %744 = mul nsw i32 0, %743
  %745 = sext i32 %744 to i64
  %746 = mul nuw i64 %173, %176
  %747 = mul nsw i64 %745, %746
  %748 = getelementptr inbounds double, ptr %742, i64 %747
  %749 = load i32, ptr %35, align 4, !tbaa !5
  %750 = sext i32 %749 to i64
  %751 = mul nuw i64 %173, %176
  %752 = mul nsw i64 %750, %751
  %753 = getelementptr inbounds double, ptr %748, i64 %752
  %754 = load i32, ptr %36, align 4, !tbaa !5
  %755 = sext i32 %754 to i64
  %756 = mul nsw i64 %755, %176
  %757 = getelementptr inbounds double, ptr %753, i64 %756
  %758 = load i32, ptr %33, align 4, !tbaa !5
  %759 = call i32 @libxsmm_nonconst_int(i32 noundef %758)
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds double, ptr %757, i64 %760
  %762 = load double, ptr %761, align 8, !tbaa !15
  %763 = load ptr, ptr %39, align 8, !tbaa !9
  %764 = load i32, ptr %7, align 4, !tbaa !5
  %765 = mul nsw i32 0, %764
  %766 = sext i32 %765 to i64
  %767 = mul nuw i64 %162, %165
  %768 = mul nsw i64 %766, %767
  %769 = getelementptr inbounds double, ptr %763, i64 %768
  %770 = load i32, ptr %9, align 4, !tbaa !5
  %771 = mul nsw i32 0, %770
  %772 = sext i32 %771 to i64
  %773 = mul nuw i64 %162, %165
  %774 = mul nsw i64 %772, %773
  %775 = getelementptr inbounds double, ptr %769, i64 %774
  %776 = load i32, ptr %35, align 4, !tbaa !5
  %777 = sext i32 %776 to i64
  %778 = mul nuw i64 %162, %165
  %779 = mul nsw i64 %777, %778
  %780 = getelementptr inbounds double, ptr %775, i64 %779
  %781 = load i32, ptr %36, align 4, !tbaa !5
  %782 = sext i32 %781 to i64
  %783 = mul nsw i64 %782, %165
  %784 = getelementptr inbounds double, ptr %780, i64 %783
  %785 = load i32, ptr %33, align 4, !tbaa !5
  %786 = call i32 @libxsmm_nonconst_int(i32 noundef %785)
  %787 = sext i32 %786 to i64
  %788 = getelementptr inbounds double, ptr %784, i64 %787
  %789 = load double, ptr %788, align 8, !tbaa !15
  %790 = fsub double %762, %789
  %791 = call double @llvm.fabs.f64(double %790)
  store double %791, ptr %32, align 8, !tbaa !15
  br label %792

792:                                              ; preds = %735, %676
  br label %793

793:                                              ; preds = %792
  %794 = load i32, ptr %33, align 4, !tbaa !5
  %795 = add nsw i32 %794, 1
  store i32 %795, ptr %33, align 4, !tbaa !5
  br label %672, !llvm.loop !44

796:                                              ; preds = %672
  br label %797

797:                                              ; preds = %796
  %798 = load i32, ptr %36, align 4, !tbaa !5
  %799 = add nsw i32 %798, 1
  store i32 %799, ptr %36, align 4, !tbaa !5
  br label %667, !llvm.loop !45

800:                                              ; preds = %667
  br label %801

801:                                              ; preds = %800
  %802 = load i32, ptr %35, align 4, !tbaa !5
  %803 = add nsw i32 %802, 1
  store i32 %803, ptr %35, align 4, !tbaa !5
  br label %662, !llvm.loop !46

804:                                              ; preds = %662
  %805 = load double, ptr %32, align 8, !tbaa !15
  %806 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %805)
  %807 = load ptr, ptr %11, align 8, !tbaa !9
  %808 = load i32, ptr %10, align 4, !tbaa !5
  %809 = load i32, ptr %6, align 4, !tbaa !5
  %810 = load i32, ptr %7, align 4, !tbaa !5
  %811 = load i32, ptr %8, align 4, !tbaa !5
  %812 = load i32, ptr %21, align 4, !tbaa !5
  %813 = load i32, ptr %6, align 4, !tbaa !5
  %814 = load i32, ptr %21, align 4, !tbaa !5
  %815 = mul i32 %813, %814
  %816 = load i32, ptr %9, align 4, !tbaa !5
  %817 = mul i32 %815, %816
  %818 = mul i32 %817, 2
  %819 = load double, ptr %32, align 8, !tbaa !15
  %820 = load double, ptr %45, align 8, !tbaa !15
  %821 = load i32, ptr %10, align 4, !tbaa !5
  %822 = sitofp i32 %821 to double
  %823 = load i32, ptr %6, align 4, !tbaa !5
  %824 = sitofp i32 %823 to double
  %825 = fmul double %822, %824
  %826 = load i32, ptr %21, align 4, !tbaa !5
  %827 = uitofp i32 %826 to double
  %828 = fmul double %825, %827
  %829 = load i32, ptr %9, align 4, !tbaa !5
  %830 = sitofp i32 %829 to double
  %831 = fmul double %828, %830
  %832 = fmul double %831, 2.000000e+00
  %833 = load double, ptr %45, align 8, !tbaa !15
  %834 = fmul double %833, 1.000000e+09
  %835 = fdiv double %832, %834
  %836 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, ptr noundef %807, i32 noundef %808, i32 noundef %809, i32 noundef %810, i32 noundef %811, i32 noundef %812, i32 noundef %818, double noundef %819, double noundef %820, double noundef %835)
  br label %837

837:                                              ; preds = %804, %224
  br label %838

838:                                              ; preds = %837
  br label %839

839:                                              ; preds = %838, %370
  %840 = load ptr, ptr %23, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %840)
  %841 = load ptr, ptr %22, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %841)
  %842 = load ptr, ptr %30, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %842)
  %843 = load ptr, ptr %31, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %843)
  %844 = load ptr, ptr %24, align 8, !tbaa !9
  call void @free(ptr noundef %844) #10
  %845 = load ptr, ptr %25, align 8, !tbaa !9
  call void @free(ptr noundef %845) #10
  %846 = load ptr, ptr %26, align 8, !tbaa !9
  call void @free(ptr noundef %846) #10
  %847 = load ptr, ptr %27, align 8, !tbaa !9
  %848 = icmp ne ptr %847, null
  br i1 %848, label %849, label %851

849:                                              ; preds = %839
  %850 = load ptr, ptr %27, align 8, !tbaa !9
  call void @free(ptr noundef %850) #10
  br label %851

851:                                              ; preds = %849, %839
  %852 = load ptr, ptr %28, align 8, !tbaa !9
  %853 = icmp ne ptr %852, null
  br i1 %853, label %854, label %856

854:                                              ; preds = %851
  %855 = load ptr, ptr %28, align 8, !tbaa !9
  call void @free(ptr noundef %855) #10
  br label %856

856:                                              ; preds = %854, %851
  %857 = load ptr, ptr %29, align 8, !tbaa !9
  %858 = icmp ne ptr %857, null
  br i1 %858, label %859, label %861

859:                                              ; preds = %856
  %860 = load ptr, ptr %29, align 8, !tbaa !9
  call void @free(ptr noundef %860) #10
  br label %861

861:                                              ; preds = %859, %856
  %862 = load i32, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 176, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  ret i32 %862
}

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

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #2

declare void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

; Function Attrs: nounwind uwtable
declare hidden { i64, i32 } @libxsmm_sparse_csc_reader_desc(ptr noundef) #0

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

declare noalias ptr @libxsmm_aligned_malloc(i64 noundef, i64 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @libxsmm_nonconst_int(i32 noundef) #5

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #6

declare double @libxsmm_rng_f64() #3

; Function Attrs: nounwind uwtable
declare hidden void @libxsmm_sparse_csc_reader(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i32 @printf(ptr noundef, ...) #3

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

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

declare i64 @libxsmm_timer_tick() #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #8

declare double @libxsmm_timer_duration(i64 noundef, i64 noundef) #3

declare ptr @libxsmm_create_packed_spgemm_csc(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

declare i32 @libxsmm_get_kernel_info(ptr noundef, ptr noundef) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #8

declare void @libxsmm_free(ptr noundef) #3

; Function Attrs: nounwind
declare void @free(ptr noundef) #6

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 = { inlinehint nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"edge_mat_desc", !6, i64 0, !6, i64 4, !6, i64 8}
!13 = !{!12, !6, i64 4}
!14 = !{!12, !6, i64 8}
!15 = !{!16, !16, i64 0}
!16 = !{!"double", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = !{!28, !28, i64 0}
!28 = !{!"long long", !7, i64 0}
!29 = distinct !{!29, !18}
!30 = distinct !{!30, !18}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}
!34 = !{!35, !10, i64 32}
!35 = !{!"libxsmm_gemm_param", !36, i64 0, !37, i64 32, !37, i64 80, !37, i64 128}
!36 = !{!"libxsmm_matrix_op_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!37 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!38 = !{!35, !10, i64 80}
!39 = !{!35, !10, i64 128}
!40 = distinct !{!40, !18}
!41 = !{!42, !6, i64 4}
!42 = !{!"libxsmm_kernel_info", !6, i64 0, !6, i64 4, !43, i64 8, !6, i64 16}
!43 = !{!"long", !7, i64 0}
!44 = distinct !{!44, !18}
!45 = distinct !{!45, !18}
!46 = distinct !{!46, !18}


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

%struct.libxsmm_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_gemm_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.libxsmm_kernel_info = type { i32, i32, i64, i32 }

@.str = external hidden unnamed_addr constant [9 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [83 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [40 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca %struct.libxsmm_gemm_shape, align 8
  %4 = alloca %struct.libxsmm_gemm_param, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %struct.libxsmm_kernel_info, align 8
  %12 = icmp eq i32 %0, 7
  br i1 %12, label %13, label %31

13:                                               ; preds = %2
  %14 = getelementptr inbounds i8, ptr %1, i64 8
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = tail call i32 @atoi(ptr nocapture noundef %15) #10
  %17 = getelementptr inbounds i8, ptr %1, i64 16
  %18 = load ptr, ptr %17, align 8, !tbaa !5
  %19 = tail call i32 @atoi(ptr nocapture noundef %18) #10
  %20 = getelementptr inbounds i8, ptr %1, i64 24
  %21 = load ptr, ptr %20, align 8, !tbaa !5
  %22 = tail call i32 @atoi(ptr nocapture noundef %21) #10
  %23 = getelementptr inbounds i8, ptr %1, i64 32
  %24 = load ptr, ptr %23, align 8, !tbaa !5
  %25 = tail call i32 @atoi(ptr nocapture noundef %24) #10
  %26 = getelementptr inbounds i8, ptr %1, i64 40
  %27 = load ptr, ptr %26, align 8, !tbaa !5
  %28 = tail call i32 @atoi(ptr nocapture noundef %27) #10
  %29 = getelementptr inbounds i8, ptr %1, i64 48
  %30 = load ptr, ptr %29, align 8, !tbaa !5
  br label %31

31:                                               ; preds = %2, %13
  %32 = phi i32 [ %28, %13 ], [ 1, %2 ]
  %33 = phi i32 [ %22, %13 ], [ 20, %2 ]
  %34 = phi i32 [ %16, %13 ], [ 9, %2 ]
  %35 = phi i32 [ %19, %13 ], [ 10, %2 ]
  %36 = phi i32 [ %25, %13 ], [ 8, %2 ]
  %37 = phi ptr [ %30, %13 ], [ @.str, %2 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #11
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %3, i32 noundef %34, i32 noundef %35, i32 noundef %33, i32 noundef %33, i32 noundef 0, i32 noundef %35, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #11
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %4) #11
  %38 = call { i64, i32 } @libxsmm_sparse_csc_reader_desc(ptr noundef %37)
  %.fca.0.extract = extractvalue { i64, i32 } %38, 0
  %.fca.1.extract = extractvalue { i64, i32 } %38, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #11
  %.sroa.0132.0.extract.trunc = trunc i64 %.fca.0.extract to i32
  store i32 %.sroa.0132.0.extract.trunc, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #11
  %.sroa.0132.4.extract.shift = lshr i64 %.fca.0.extract, 32
  %.sroa.0132.4.extract.trunc = trunc nuw i64 %.sroa.0132.4.extract.shift to i32
  store i32 %.sroa.0132.4.extract.trunc, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #11
  store i32 %.fca.1.extract, ptr %7, align 4, !tbaa !9
  %39 = mul i32 %36, %34
  %40 = mul i32 %39, %33
  %41 = sext i32 %40 to i64
  %42 = shl nsw i64 %41, 3
  %43 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %42, i64 noundef 64) #11
  %44 = mul nsw i32 %35, %33
  %45 = sext i32 %44 to i64
  %46 = shl nsw i64 %45, 3
  %47 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %46, i64 noundef 64) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #11
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #11
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #11
  store ptr null, ptr %10, align 8, !tbaa !5
  %48 = mul i32 %39, %35
  %49 = sext i32 %48 to i64
  %50 = shl nsw i64 %49, 3
  %51 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %50, i64 noundef 64) #11
  %52 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %50, i64 noundef 64) #11
  %53 = zext i32 %33 to i64
  %54 = call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %55 = zext i32 %54 to i64
  %56 = call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %57 = zext i32 %35 to i64
  %58 = call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %59 = zext i32 %58 to i64
  %60 = call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %61 = call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %62 = zext i32 %61 to i64
  %63 = call i32 @libxsmm_nonconst_int(i32 noundef %36)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #11
  br i1 %12, label %67, label %64

64:                                               ; preds = %31
  %65 = load ptr, ptr @stderr, align 8, !tbaa !5
  %66 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %65, ptr noundef nonnull @.str.1) #12
  br label %67

67:                                               ; preds = %64, %31
  %.0 = phi i32 [ 1, %64 ], [ 0, %31 ]
  %68 = load i32, ptr %5, align 4, !tbaa !9
  %.not265 = icmp eq i32 %33, %68
  br i1 %.not265, label %72, label %69

69:                                               ; preds = %67
  %70 = load ptr, ptr @stderr, align 8, !tbaa !5
  %71 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %70, ptr noundef nonnull @.str.2) #12
  br label %72

72:                                               ; preds = %69, %67
  %.1 = phi i32 [ 1, %69 ], [ %.0, %67 ]
  %73 = load i32, ptr %6, align 4, !tbaa !9
  %.not266 = icmp eq i32 %35, %73
  br i1 %.not266, label %77, label %74

74:                                               ; preds = %72
  %75 = load ptr, ptr @stderr, align 8, !tbaa !5
  %76 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %75, ptr noundef nonnull @.str.3) #12
  br label %77

77:                                               ; preds = %74, %72
  %.2 = phi i32 [ 1, %74 ], [ %.1, %72 ]
  %.not267 = icmp eq i32 %34, 9
  br i1 %.not267, label %81, label %78

78:                                               ; preds = %77
  %79 = load ptr, ptr @stderr, align 8, !tbaa !5
  %80 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %79, ptr noundef nonnull @.str.4) #12
  br label %81

81:                                               ; preds = %78, %77
  %.3 = phi i32 [ 1, %78 ], [ %.2, %77 ]
  %82 = insertelement <4 x ptr> poison, ptr %43, i64 0
  %83 = insertelement <4 x ptr> %82, ptr %47, i64 1
  %84 = insertelement <4 x ptr> %83, ptr %51, i64 2
  %85 = insertelement <4 x ptr> %84, ptr %52, i64 3
  %.fr = freeze <4 x ptr> %85
  %86 = icmp eq <4 x ptr> %.fr, zeroinitializer
  %87 = bitcast <4 x i1> %86 to i4
  %.not = icmp eq i4 %87, 0
  br i1 %.not, label %90, label %.thread273

.thread273:                                       ; preds = %81
  %88 = load ptr, ptr @stderr, align 8, !tbaa !5
  %89 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %88, ptr noundef nonnull @.str.5) #12
  br label %307

90:                                               ; preds = %81
  %91 = icmp eq i32 %.3, 0
  br i1 %91, label %.preheader287, label %307

.preheader287:                                    ; preds = %90
  %92 = icmp slt i32 %34, 1
  br i1 %92, label %._crit_edge, label %.preheader286.lr.ph

.preheader286.lr.ph:                              ; preds = %.preheader287
  %93 = icmp sgt i32 %33, 0
  %94 = mul nuw i64 %55, %53
  %95 = icmp sgt i32 %36, 0
  %or.cond440 = select i1 %93, i1 %95, i1 false
  br i1 %or.cond440, label %.preheader286.us.us.preheader, label %.preheader283.lr.ph

.preheader286.us.us.preheader:                    ; preds = %.preheader286.lr.ph
  %wide.trip.count384 = zext nneg i32 %34 to i64
  br label %.preheader286.us.us

.preheader286.us.us:                              ; preds = %.preheader286.us.us.preheader, %._crit_edge290.split.us.us.us
  %indvars.iv381 = phi i64 [ 0, %.preheader286.us.us.preheader ], [ %indvars.iv.next382, %._crit_edge290.split.us.us.us ]
  %96 = mul nuw nsw i64 %94, %indvars.iv381
  %97 = getelementptr inbounds double, ptr %43, i64 %96
  br label %.preheader285.us.us.us

.preheader285.us.us.us:                           ; preds = %._crit_edge.us.us.us, %.preheader286.us.us
  %indvars.iv = phi i64 [ %indvars.iv.next, %._crit_edge.us.us.us ], [ 0, %.preheader286.us.us ]
  %98 = mul nuw nsw i64 %indvars.iv, %55
  %99 = getelementptr inbounds double, ptr %97, i64 %98
  br label %100

100:                                              ; preds = %100, %.preheader285.us.us.us
  %.0243288.us.us.us = phi i32 [ 0, %.preheader285.us.us.us ], [ %105, %100 ]
  %101 = call double @libxsmm_rng_f64() #11
  %102 = call i32 @libxsmm_nonconst_int(i32 noundef %.0243288.us.us.us)
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds double, ptr %99, i64 %103
  store double %101, ptr %104, align 8, !tbaa !11
  %105 = add nuw nsw i32 %.0243288.us.us.us, 1
  %exitcond.not = icmp eq i32 %105, %36
  br i1 %exitcond.not, label %._crit_edge.us.us.us, label %100, !llvm.loop !13

._crit_edge.us.us.us:                             ; preds = %100
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond380.not = icmp eq i64 %indvars.iv.next, %53
  br i1 %exitcond380.not, label %._crit_edge290.split.us.us.us, label %.preheader285.us.us.us, !llvm.loop !15

._crit_edge290.split.us.us.us:                    ; preds = %._crit_edge.us.us.us
  %indvars.iv.next382 = add nuw nsw i64 %indvars.iv381, 1
  %exitcond385.not = icmp eq i64 %indvars.iv.next382, %wide.trip.count384
  br i1 %exitcond385.not, label %.preheader284, label %.preheader286.us.us, !llvm.loop !16

.preheader284:                                    ; preds = %._crit_edge290.split.us.us.us
  br i1 %92, label %._crit_edge, label %.preheader283.lr.ph

.preheader283.lr.ph:                              ; preds = %.preheader286.lr.ph, %.preheader284
  %106 = icmp sgt i32 %35, 0
  %107 = mul nuw i64 %62, %57
  %108 = mul nuw i64 %59, %57
  %109 = icmp sgt i32 %36, 0
  %or.cond441 = select i1 %106, i1 %109, i1 false
  br i1 %or.cond441, label %.preheader283.us.us.preheader, label %._crit_edge

.preheader283.us.us.preheader:                    ; preds = %.preheader283.lr.ph
  %wide.trip.count395 = zext nneg i32 %34 to i64
  br label %.preheader283.us.us

.preheader283.us.us:                              ; preds = %.preheader283.us.us.preheader, %._crit_edge298.split.us.us.us
  %indvars.iv392 = phi i64 [ 0, %.preheader283.us.us.preheader ], [ %indvars.iv.next393, %._crit_edge298.split.us.us.us ]
  %110 = mul nuw nsw i64 %107, %indvars.iv392
  %111 = getelementptr inbounds double, ptr %51, i64 %110
  %112 = mul nuw nsw i64 %108, %indvars.iv392
  %113 = getelementptr inbounds double, ptr %52, i64 %112
  br label %.preheader282.us.us.us

.preheader282.us.us.us:                           ; preds = %._crit_edge.us.us.us304, %.preheader283.us.us
  %indvars.iv387 = phi i64 [ %indvars.iv.next388, %._crit_edge.us.us.us304 ], [ 0, %.preheader283.us.us ]
  %114 = mul nuw nsw i64 %indvars.iv387, %62
  %115 = getelementptr inbounds double, ptr %111, i64 %114
  %116 = mul nuw nsw i64 %indvars.iv387, %59
  %117 = getelementptr inbounds double, ptr %113, i64 %116
  br label %118

118:                                              ; preds = %118, %.preheader282.us.us.us
  %.1244296.us.us.us = phi i32 [ 0, %.preheader282.us.us.us ], [ %125, %118 ]
  %119 = call i32 @libxsmm_nonconst_int(i32 noundef %.1244296.us.us.us)
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds double, ptr %115, i64 %120
  store double 0.000000e+00, ptr %121, align 8, !tbaa !11
  %122 = call i32 @libxsmm_nonconst_int(i32 noundef %.1244296.us.us.us)
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %117, i64 %123
  store double 0.000000e+00, ptr %124, align 8, !tbaa !11
  %125 = add nuw nsw i32 %.1244296.us.us.us, 1
  %exitcond386.not = icmp eq i32 %125, %36
  br i1 %exitcond386.not, label %._crit_edge.us.us.us304, label %118, !llvm.loop !17

._crit_edge.us.us.us304:                          ; preds = %118
  %indvars.iv.next388 = add nuw nsw i64 %indvars.iv387, 1
  %exitcond391.not = icmp eq i64 %indvars.iv.next388, %57
  br i1 %exitcond391.not, label %._crit_edge298.split.us.us.us, label %.preheader282.us.us.us, !llvm.loop !18

._crit_edge298.split.us.us.us:                    ; preds = %._crit_edge.us.us.us304
  %indvars.iv.next393 = add nuw nsw i64 %indvars.iv392, 1
  %exitcond396.not = icmp eq i64 %indvars.iv.next393, %wide.trip.count395
  br i1 %exitcond396.not, label %._crit_edge, label %.preheader283.us.us, !llvm.loop !19

._crit_edge:                                      ; preds = %._crit_edge298.split.us.us.us, %.preheader287, %.preheader283.lr.ph, %.preheader284
  call void @libxsmm_sparse_csc_reader(ptr noundef %37, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef nonnull %8, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7)
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = icmp eq ptr %126, null
  %128 = load ptr, ptr %9, align 8
  %129 = icmp eq ptr %128, null
  %or.cond7 = select i1 %127, i1 true, i1 %129
  %130 = load ptr, ptr %10, align 8
  %131 = icmp eq ptr %130, null
  %or.cond9 = select i1 %or.cond7, i1 true, i1 %131
  br i1 %or.cond9, label %307, label %132

132:                                              ; preds = %._crit_edge
  %133 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %134 = load i32, ptr %5, align 4, !tbaa !9
  %135 = load i32, ptr %6, align 4, !tbaa !9
  %136 = load i32, ptr %7, align 4, !tbaa !9
  %137 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %134, i32 noundef %135, i32 noundef %136)
  %138 = icmp sgt i32 %44, 0
  br i1 %138, label %.lr.ph.preheader, label %.preheader281

.lr.ph.preheader:                                 ; preds = %132
  %139 = zext nneg i32 %44 to i64
  %140 = shl nuw nsw i64 %139, 3
  call void @llvm.memset.p0.i64(ptr align 8 %47, i8 0, i64 %140, i1 false), !tbaa !11
  br label %.preheader281

.preheader281:                                    ; preds = %.lr.ph.preheader, %132
  %141 = icmp slt i32 %35, 1
  br i1 %141, label %._crit_edge311, label %.lr.ph310

.lr.ph310:                                        ; preds = %.preheader281
  %142 = load ptr, ptr %9, align 8, !tbaa !5
  %143 = load ptr, ptr %8, align 8
  %144 = load ptr, ptr %10, align 8
  %.pre = load i32, ptr %142, align 4, !tbaa !9
  br label %156

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph308, %.lr.ph308.preheader
  %indvars.iv400.unr = phi i64 [ 0, %.lr.ph308.preheader ], [ %indvars.iv.next401.1, %.lr.ph308 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.lr.ph308.epil

.lr.ph308.epil:                                   ; preds = %.loopexit.loopexit.unr-lcssa
  %145 = trunc nuw nsw i64 %indvars.iv400.unr to i32
  %146 = add i32 %157, %145
  %147 = zext i32 %146 to i64
  %148 = getelementptr inbounds double, ptr %143, i64 %147
  %149 = load double, ptr %148, align 8, !tbaa !11
  %150 = getelementptr inbounds i32, ptr %144, i64 %147
  %151 = load i32, ptr %150, align 4, !tbaa !9
  %152 = mul i32 %151, %35
  %153 = add i32 %152, %162
  %154 = zext i32 %153 to i64
  %155 = getelementptr inbounds double, ptr %47, i64 %154
  store double %149, ptr %155, align 8, !tbaa !11
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph308.epil, %.loopexit.loopexit.unr-lcssa, %.preheader280
  %exitcond409.not = icmp eq i64 %indvars.iv.next406, %57
  br i1 %exitcond409.not, label %._crit_edge311, label %156, !llvm.loop !20

156:                                              ; preds = %.lr.ph310, %.loopexit
  %157 = phi i32 [ %.pre, %.lr.ph310 ], [ %159, %.loopexit ]
  %indvars.iv405 = phi i64 [ 0, %.lr.ph310 ], [ %indvars.iv.next406, %.loopexit ]
  %indvars.iv.next406 = add nuw nsw i64 %indvars.iv405, 1
  %158 = getelementptr inbounds i32, ptr %142, i64 %indvars.iv.next406
  %159 = load i32, ptr %158, align 4, !tbaa !9
  %160 = sub i32 %159, %157
  %.not268 = icmp ult i32 %159, %157
  br i1 %.not268, label %164, label %.preheader280

.preheader280:                                    ; preds = %156
  %161 = icmp sgt i32 %160, 0
  br i1 %161, label %.lr.ph308.preheader, label %.loopexit

.lr.ph308.preheader:                              ; preds = %.preheader280
  %wide.trip.count403 = zext nneg i32 %160 to i64
  %162 = trunc nuw nsw i64 %indvars.iv405 to i32
  %xtraiter = and i64 %wide.trip.count403, 1
  %163 = icmp eq i32 %160, 1
  br i1 %163, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph308.preheader.new

.lr.ph308.preheader.new:                          ; preds = %.lr.ph308.preheader
  %unroll_iter = and i64 %wide.trip.count403, 2147483646
  br label %.lr.ph308

164:                                              ; preds = %156
  call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, i32 noundef 125, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #13
  unreachable

.lr.ph308:                                        ; preds = %.lr.ph308, %.lr.ph308.preheader.new
  %indvars.iv400 = phi i64 [ 0, %.lr.ph308.preheader.new ], [ %indvars.iv.next401.1, %.lr.ph308 ]
  %niter = phi i64 [ 0, %.lr.ph308.preheader.new ], [ %niter.next.1, %.lr.ph308 ]
  %165 = trunc nuw nsw i64 %indvars.iv400 to i32
  %166 = add i32 %157, %165
  %167 = zext i32 %166 to i64
  %168 = getelementptr inbounds double, ptr %143, i64 %167
  %169 = load double, ptr %168, align 8, !tbaa !11
  %170 = getelementptr inbounds i32, ptr %144, i64 %167
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %172 = mul i32 %171, %35
  %173 = add i32 %172, %162
  %174 = zext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %47, i64 %174
  store double %169, ptr %175, align 8, !tbaa !11
  %176 = trunc i64 %indvars.iv400 to i32
  %177 = or disjoint i32 %176, 1
  %178 = add i32 %157, %177
  %179 = zext i32 %178 to i64
  %180 = getelementptr inbounds double, ptr %143, i64 %179
  %181 = load double, ptr %180, align 8, !tbaa !11
  %182 = getelementptr inbounds i32, ptr %144, i64 %179
  %183 = load i32, ptr %182, align 4, !tbaa !9
  %184 = mul i32 %183, %35
  %185 = add i32 %184, %162
  %186 = zext i32 %185 to i64
  %187 = getelementptr inbounds double, ptr %47, i64 %186
  store double %181, ptr %187, align 8, !tbaa !11
  %indvars.iv.next401.1 = add nuw nsw i64 %indvars.iv400, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph308, !llvm.loop !21

._crit_edge311:                                   ; preds = %.loopexit, %.preheader281
  %188 = call i64 @libxsmm_timer_tick() #11
  %189 = icmp sgt i32 %32, 0
  br i1 %189, label %.preheader279.lr.ph, label %._crit_edge335

.preheader279.lr.ph:                              ; preds = %._crit_edge311
  %190 = icmp slt i32 %33, 1
  %191 = icmp slt i32 %36, 1
  %192 = mul nuw i64 %55, %53
  %193 = mul nuw i64 %62, %57
  %194 = or i1 %141, %190
  %brmerge444 = or i1 %194, %92
  %brmerge446 = select i1 %brmerge444, i1 true, i1 %191
  br i1 %brmerge446, label %._crit_edge335, label %.preheader279.us.us.us.us.preheader

.preheader279.us.us.us.us.preheader:              ; preds = %.preheader279.lr.ph
  %wide.trip.count424 = zext nneg i32 %34 to i64
  br label %.preheader279.us.us.us.us

.preheader279.us.us.us.us:                        ; preds = %.preheader279.us.us.us.us.preheader, %._crit_edge325.split.us.split.us.split.us.us.us.us.us
  %.2250334.us.us.us.us = phi i32 [ %216, %._crit_edge325.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader279.us.us.us.us.preheader ]
  br label %.preheader278.us.us.us.us.us.us.us

.preheader278.us.us.us.us.us.us.us:               ; preds = %._crit_edge319.split.us.split.us.us.us.us.us.us.us.us, %.preheader279.us.us.us.us
  %indvars.iv421 = phi i64 [ %indvars.iv.next422, %._crit_edge319.split.us.split.us.us.us.us.us.us.us.us ], [ 0, %.preheader279.us.us.us.us ]
  %195 = mul nuw nsw i64 %192, %indvars.iv421
  %196 = getelementptr inbounds double, ptr %43, i64 %195
  %197 = mul nuw nsw i64 %193, %indvars.iv421
  %198 = getelementptr inbounds double, ptr %51, i64 %197
  br label %.preheader277.us.us.us.us.us.us.us.us.us

.preheader277.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge316.split.us.us.us.us.us.us.us.us.us.us, %.preheader278.us.us.us.us.us.us.us
  %indvars.iv416 = phi i64 [ %indvars.iv.next417, %._crit_edge316.split.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader278.us.us.us.us.us.us.us ]
  %199 = mul nuw nsw i64 %indvars.iv416, %62
  %200 = getelementptr inbounds double, ptr %198, i64 %199
  %invariant.gep = getelementptr inbounds double, ptr %47, i64 %indvars.iv416
  br label %.preheader276.us.us.us.us.us.us.us.us.us.us

.preheader276.us.us.us.us.us.us.us.us.us.us:      ; preds = %._crit_edge314.us.us.us.us.us.us.us.us.us.us, %.preheader277.us.us.us.us.us.us.us.us.us
  %indvars.iv411 = phi i64 [ %indvars.iv.next412, %._crit_edge314.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader277.us.us.us.us.us.us.us.us.us ]
  %201 = mul nuw nsw i64 %indvars.iv411, %55
  %202 = getelementptr inbounds double, ptr %196, i64 %201
  %203 = mul nuw nsw i64 %indvars.iv411, %57
  %gep = getelementptr inbounds double, ptr %invariant.gep, i64 %203
  br label %204

204:                                              ; preds = %204, %.preheader276.us.us.us.us.us.us.us.us.us.us
  %.3246312.us.us.us.us.us.us.us.us.us.us = phi i32 [ 0, %.preheader276.us.us.us.us.us.us.us.us.us.us ], [ %215, %204 ]
  %205 = call i32 @libxsmm_nonconst_int(i32 noundef %.3246312.us.us.us.us.us.us.us.us.us.us)
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds double, ptr %202, i64 %206
  %208 = load double, ptr %207, align 8, !tbaa !11
  %209 = load double, ptr %gep, align 8, !tbaa !11
  %210 = call i32 @libxsmm_nonconst_int(i32 noundef %.3246312.us.us.us.us.us.us.us.us.us.us)
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds double, ptr %200, i64 %211
  %213 = load double, ptr %212, align 8, !tbaa !11
  %214 = call double @llvm.fmuladd.f64(double %208, double %209, double %213)
  store double %214, ptr %212, align 8, !tbaa !11
  %215 = add nuw nsw i32 %.3246312.us.us.us.us.us.us.us.us.us.us, 1
  %exitcond410.not = icmp eq i32 %215, %36
  br i1 %exitcond410.not, label %._crit_edge314.us.us.us.us.us.us.us.us.us.us, label %204, !llvm.loop !22

._crit_edge314.us.us.us.us.us.us.us.us.us.us:     ; preds = %204
  %indvars.iv.next412 = add nuw nsw i64 %indvars.iv411, 1
  %exitcond415.not = icmp eq i64 %indvars.iv.next412, %53
  br i1 %exitcond415.not, label %._crit_edge316.split.us.us.us.us.us.us.us.us.us.us, label %.preheader276.us.us.us.us.us.us.us.us.us.us, !llvm.loop !23

._crit_edge316.split.us.us.us.us.us.us.us.us.us.us: ; preds = %._crit_edge314.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next417 = add nuw nsw i64 %indvars.iv416, 1
  %exitcond420.not = icmp eq i64 %indvars.iv.next417, %57
  br i1 %exitcond420.not, label %._crit_edge319.split.us.split.us.us.us.us.us.us.us.us, label %.preheader277.us.us.us.us.us.us.us.us.us, !llvm.loop !24

._crit_edge319.split.us.split.us.us.us.us.us.us.us.us: ; preds = %._crit_edge316.split.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next422 = add nuw nsw i64 %indvars.iv421, 1
  %exitcond425.not = icmp eq i64 %indvars.iv.next422, %wide.trip.count424
  br i1 %exitcond425.not, label %._crit_edge325.split.us.split.us.split.us.us.us.us.us, label %.preheader278.us.us.us.us.us.us.us, !llvm.loop !25

._crit_edge325.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge319.split.us.split.us.us.us.us.us.us.us.us
  %216 = add nuw nsw i32 %.2250334.us.us.us.us, 1
  %exitcond426.not = icmp eq i32 %216, %32
  br i1 %exitcond426.not, label %._crit_edge335, label %.preheader279.us.us.us.us, !llvm.loop !26

._crit_edge335:                                   ; preds = %._crit_edge325.split.us.split.us.split.us.us.us.us.us, %.preheader279.lr.ph, %._crit_edge311
  %217 = call i64 @libxsmm_timer_tick() #11
  %218 = call double @libxsmm_timer_duration(i64 noundef %188, i64 noundef %217) #11
  %219 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %218)
  %220 = sitofp i32 %32 to double
  %221 = sitofp i32 %34 to double
  %222 = fmul double %220, %221
  %223 = sitofp i32 %35 to double
  %224 = fmul double %222, %223
  %225 = sitofp i32 %33 to double
  %226 = fmul double %224, %225
  %227 = sitofp i32 %36 to double
  %228 = fmul double %226, %227
  %229 = fmul double %228, 2.000000e+00
  %230 = fmul double %218, 1.000000e+09
  %231 = fdiv double %229, %230
  %232 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %231)
  %233 = load ptr, ptr %9, align 8, !tbaa !5
  %234 = load ptr, ptr %10, align 8, !tbaa !5
  %235 = load ptr, ptr %8, align 8, !tbaa !5
  %236 = call ptr @libxsmm_create_packed_spgemm_csc(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %3, i32 noundef 0, i32 noundef 0, i32 noundef %36, ptr noundef %233, ptr noundef %234, ptr noundef %235) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %4, i8 0, i64 176, i1 false)
  %237 = getelementptr inbounds i8, ptr %4, i64 32
  store ptr %43, ptr %237, align 8, !tbaa !27
  %238 = load ptr, ptr %8, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %4, i64 80
  store ptr %238, ptr %239, align 8, !tbaa !31
  %240 = getelementptr inbounds i8, ptr %4, i64 128
  store ptr %52, ptr %240, align 8, !tbaa !32
  %241 = call i64 @libxsmm_timer_tick() #11
  br i1 %189, label %.lr.ph350, label %._crit_edge351

.lr.ph350:                                        ; preds = %._crit_edge335, %.lr.ph350
  %.3251348 = phi i32 [ %242, %.lr.ph350 ], [ 0, %._crit_edge335 ]
  call void %236(ptr noundef nonnull %4) #11
  %242 = add nuw nsw i32 %.3251348, 1
  %exitcond427.not = icmp eq i32 %242, %32
  br i1 %exitcond427.not, label %._crit_edge351, label %.lr.ph350, !llvm.loop !33

._crit_edge351:                                   ; preds = %.lr.ph350, %._crit_edge335
  %243 = call i64 @libxsmm_timer_tick() #11
  %244 = call double @libxsmm_timer_duration(i64 noundef %241, i64 noundef %243) #11
  %245 = call i32 @libxsmm_get_kernel_info(ptr noundef %236, ptr noundef nonnull %11) #11
  %246 = getelementptr inbounds i8, ptr %11, i64 4
  %247 = load i32, ptr %246, align 4, !tbaa !34
  %248 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %244)
  %249 = load i32, ptr %7, align 4, !tbaa !9
  %250 = uitofp i32 %249 to double
  %251 = fmul double %222, %250
  %252 = fmul double %251, %227
  %253 = fmul double %252, 2.000000e+00
  %254 = fmul double %244, 1.000000e+09
  %255 = fdiv double %253, %254
  %256 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %255)
  %257 = uitofp i32 %247 to double
  %258 = fmul double %220, %257
  %259 = fdiv double %258, %254
  %260 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %259)
  br i1 %92, label %._crit_edge362, label %.preheader275.lr.ph

.preheader275.lr.ph:                              ; preds = %._crit_edge351
  %261 = icmp sgt i32 %36, 0
  %262 = mul nuw i64 %62, %57
  %263 = mul nuw i64 %59, %57
  br i1 %141, label %._crit_edge362, label %.preheader275.us.preheader

.preheader275.us.preheader:                       ; preds = %.preheader275.lr.ph
  %wide.trip.count437 = zext nneg i32 %34 to i64
  br label %.preheader275.us

.preheader275.us:                                 ; preds = %.preheader275.us.preheader, %._crit_edge358.us
  %indvars.iv434 = phi i64 [ 0, %.preheader275.us.preheader ], [ %indvars.iv.next435, %._crit_edge358.us ]
  %.0239361.us = phi double [ 0.000000e+00, %.preheader275.us.preheader ], [ %.us-phi.us, %._crit_edge358.us ]
  %264 = mul nuw nsw i64 %262, %indvars.iv434
  %265 = getelementptr inbounds double, ptr %51, i64 %264
  %266 = mul nuw nsw i64 %263, %indvars.iv434
  %267 = getelementptr inbounds double, ptr %52, i64 %266
  br i1 %261, label %.preheader.us.us, label %._crit_edge358.us

._crit_edge358.us:                                ; preds = %._crit_edge355.us.us, %.preheader275.us
  %.us-phi.us = phi double [ %.0239361.us, %.preheader275.us ], [ %.3242.us.us, %._crit_edge355.us.us ]
  %indvars.iv.next435 = add nuw nsw i64 %indvars.iv434, 1
  %exitcond438.not = icmp eq i64 %indvars.iv.next435, %wide.trip.count437
  br i1 %exitcond438.not, label %._crit_edge362, label %.preheader275.us, !llvm.loop !37

.preheader.us.us:                                 ; preds = %.preheader275.us, %._crit_edge355.us.us
  %indvars.iv429 = phi i64 [ %indvars.iv.next430, %._crit_edge355.us.us ], [ 0, %.preheader275.us ]
  %.1240357.us.us = phi double [ %.3242.us.us, %._crit_edge355.us.us ], [ %.0239361.us, %.preheader275.us ]
  %268 = mul nuw nsw i64 %indvars.iv429, %62
  %269 = getelementptr inbounds double, ptr %265, i64 %268
  %270 = mul nuw nsw i64 %indvars.iv429, %59
  %271 = getelementptr inbounds double, ptr %267, i64 %270
  br label %272

272:                                              ; preds = %295, %.preheader.us.us
  %.2241353.us.us = phi double [ %.1240357.us.us, %.preheader.us.us ], [ %.3242.us.us, %295 ]
  %.4247352.us.us = phi i32 [ 0, %.preheader.us.us ], [ %296, %295 ]
  %273 = call i32 @libxsmm_nonconst_int(i32 noundef %.4247352.us.us)
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds double, ptr %269, i64 %274
  %276 = load double, ptr %275, align 8, !tbaa !11
  %277 = call i32 @libxsmm_nonconst_int(i32 noundef %.4247352.us.us)
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds double, ptr %271, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !11
  %281 = fsub double %276, %280
  %282 = call double @llvm.fabs.f64(double %281)
  %283 = fcmp ogt double %282, %.2241353.us.us
  br i1 %283, label %284, label %295

284:                                              ; preds = %272
  %285 = call i32 @libxsmm_nonconst_int(i32 noundef %.4247352.us.us)
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds double, ptr %269, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !11
  %289 = call i32 @libxsmm_nonconst_int(i32 noundef %.4247352.us.us)
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds double, ptr %271, i64 %290
  %292 = load double, ptr %291, align 8, !tbaa !11
  %293 = fsub double %288, %292
  %294 = call double @llvm.fabs.f64(double %293)
  br label %295

295:                                              ; preds = %284, %272
  %.3242.us.us = phi double [ %294, %284 ], [ %.2241353.us.us, %272 ]
  %296 = add nuw nsw i32 %.4247352.us.us, 1
  %exitcond428.not = icmp eq i32 %296, %36
  br i1 %exitcond428.not, label %._crit_edge355.us.us, label %272, !llvm.loop !38

._crit_edge355.us.us:                             ; preds = %295
  %indvars.iv.next430 = add nuw nsw i64 %indvars.iv429, 1
  %exitcond433.not = icmp eq i64 %indvars.iv.next430, %57
  br i1 %exitcond433.not, label %._crit_edge358.us, label %.preheader.us.us, !llvm.loop !39

._crit_edge362:                                   ; preds = %._crit_edge358.us, %.preheader275.lr.ph, %._crit_edge351
  %.0239.lcssa = phi double [ 0.000000e+00, %._crit_edge351 ], [ 0.000000e+00, %.preheader275.lr.ph ], [ %.us-phi.us, %._crit_edge358.us ]
  %297 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %.0239.lcssa)
  %298 = load i32, ptr %7, align 4, !tbaa !9
  %299 = shl i32 %39, 1
  %300 = mul i32 %299, %298
  %301 = uitofp i32 %298 to double
  %302 = fmul double %222, %301
  %303 = fmul double %302, %227
  %304 = fmul double %303, 2.000000e+00
  %305 = fdiv double %304, %254
  %306 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, ptr noundef %37, i32 noundef %32, i32 noundef %34, i32 noundef %35, i32 noundef %33, i32 noundef %298, i32 noundef %300, double noundef %.0239.lcssa, double noundef %244, double noundef %305)
  br label %307

307:                                              ; preds = %.thread273, %._crit_edge, %._crit_edge362, %90
  %.5 = phi i32 [ 0, %._crit_edge362 ], [ 1, %90 ], [ 1, %._crit_edge ], [ 1, %.thread273 ]
  call void @libxsmm_free(ptr noundef %47) #11
  call void @libxsmm_free(ptr noundef %43) #11
  call void @libxsmm_free(ptr noundef %51) #11
  call void @libxsmm_free(ptr noundef %52) #11
  %308 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free(ptr noundef %308) #11
  %309 = load ptr, ptr %9, align 8, !tbaa !5
  call void @free(ptr noundef %309) #11
  %310 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %310) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #11
  ret i32 %.5
}

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

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #2

declare void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden { i64, i32 } @libxsmm_sparse_csc_reader_desc(ptr noundef) local_unnamed_addr #0

declare noalias ptr @libxsmm_aligned_malloc(i64 noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @libxsmm_nonconst_int(i32 noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

declare double @libxsmm_rng_f64() local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden void @libxsmm_sparse_csc_reader(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #5

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

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

declare i64 @libxsmm_timer_tick() local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

declare double @libxsmm_timer_duration(i64 noundef, i64 noundef) local_unnamed_addr #3

declare ptr @libxsmm_create_packed_spgemm_csc(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8

declare i32 @libxsmm_get_kernel_info(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #7

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #9

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 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { 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 #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { nounwind }
attributes #12 = { cold nounwind }
attributes #13 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = !{!28, !6, i64 32}
!28 = !{!"libxsmm_gemm_param", !29, i64 0, !30, i64 32, !30, i64 80, !30, i64 128}
!29 = !{!"libxsmm_matrix_op_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!30 = !{!"libxsmm_matrix_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!31 = !{!28, !6, i64 80}
!32 = !{!28, !6, i64 128}
!33 = distinct !{!33, !14}
!34 = !{!35, !10, i64 4}
!35 = !{!"libxsmm_kernel_info", !10, i64 0, !10, i64 4, !36, i64 8, !10, i64 16}
!36 = !{!"long", !7, i64 0}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass