; LLVM IR from libxsmm/libxsmm :: samples/deeplearning/sparse_weight_mult (sparse_weight_C_redmult)

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

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [21 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 double, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca float, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %struct.libxsmm_gemm_shape, align 8
  %31 = alloca %struct.libxsmm_gemm_param, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca double, align 8
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca double, align 8
  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) #8
  %39 = load i32, ptr %4, align 4, !tbaa !5
  %40 = icmp sgt i32 %39, 1
  br i1 %40, label %41, label %46

41:                                               ; preds = %2
  %42 = load ptr, ptr %5, align 8, !tbaa !9
  %43 = getelementptr inbounds ptr, ptr %42, i64 1
  %44 = load ptr, ptr %43, align 8, !tbaa !9
  %45 = call i32 @atoi(ptr noundef %44) #9
  br label %47

46:                                               ; preds = %2
  br label %47

47:                                               ; preds = %46, %41
  %48 = phi i32 [ %45, %41 ], [ 64, %46 ]
  store i32 %48, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %49 = load i32, ptr %4, align 4, !tbaa !5
  %50 = icmp sgt i32 %49, 2
  br i1 %50, label %51, label %56

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

56:                                               ; preds = %47
  br label %57

57:                                               ; preds = %56, %51
  %58 = phi i32 [ %55, %51 ], [ 512, %56 ]
  store i32 %58, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  %59 = load i32, ptr %4, align 4, !tbaa !5
  %60 = icmp sgt i32 %59, 3
  br i1 %60, label %61, label %66

61:                                               ; preds = %57
  %62 = load ptr, ptr %5, align 8, !tbaa !9
  %63 = getelementptr inbounds ptr, ptr %62, i64 3
  %64 = load ptr, ptr %63, align 8, !tbaa !9
  %65 = call i32 @atoi(ptr noundef %64) #9
  br label %67

66:                                               ; preds = %57
  br label %67

67:                                               ; preds = %66, %61
  %68 = phi i32 [ %65, %61 ], [ 32, %66 ]
  store i32 %68, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  %69 = load i32, ptr %4, align 4, !tbaa !5
  %70 = icmp sgt i32 %69, 4
  br i1 %70, label %71, label %76

71:                                               ; preds = %67
  %72 = load ptr, ptr %5, align 8, !tbaa !9
  %73 = getelementptr inbounds ptr, ptr %72, i64 4
  %74 = load ptr, ptr %73, align 8, !tbaa !9
  %75 = call i32 @atoi(ptr noundef %74) #9
  br label %77

76:                                               ; preds = %67
  br label %77

77:                                               ; preds = %76, %71
  %78 = phi i32 [ %75, %71 ], [ 32, %76 ]
  store i32 %78, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %79 = load i32, ptr %4, align 4, !tbaa !5
  %80 = icmp sgt i32 %79, 5
  br i1 %80, label %81, label %86

81:                                               ; preds = %77
  %82 = load ptr, ptr %5, align 8, !tbaa !9
  %83 = getelementptr inbounds ptr, ptr %82, i64 5
  %84 = load ptr, ptr %83, align 8, !tbaa !9
  %85 = call double @atof(ptr noundef %84) #9
  br label %87

86:                                               ; preds = %77
  br label %87

87:                                               ; preds = %86, %81
  %88 = phi double [ %85, %81 ], [ 9.000000e-01, %86 ]
  store double %88, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  %89 = load i32, ptr %4, align 4, !tbaa !5
  %90 = icmp sgt i32 %89, 6
  br i1 %90, label %91, label %96

91:                                               ; preds = %87
  %92 = load ptr, ptr %5, align 8, !tbaa !9
  %93 = getelementptr inbounds ptr, ptr %92, i64 6
  %94 = load ptr, ptr %93, align 8, !tbaa !9
  %95 = call i32 @atoi(ptr noundef %94) #9
  br label %97

96:                                               ; preds = %87
  br label %97

97:                                               ; preds = %96, %91
  %98 = phi i32 [ %95, %91 ], [ 1, %96 ]
  store i32 %98, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  store ptr null, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  store ptr null, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %99 = load i32, ptr %7, align 4, !tbaa !5
  %100 = sext i32 %99 to i64
  %101 = mul i64 4, %100
  %102 = load i32, ptr %8, align 4, !tbaa !5
  %103 = sext i32 %102 to i64
  %104 = mul i64 %101, %103
  %105 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %104, i64 noundef 64)
  store ptr %105, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  store ptr null, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %106 = load i32, ptr %6, align 4, !tbaa !5
  %107 = sext i32 %106 to i64
  %108 = mul i64 4, %107
  %109 = load i32, ptr %7, align 4, !tbaa !5
  %110 = sext i32 %109 to i64
  %111 = mul i64 %108, %110
  %112 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %111, i64 noundef 64)
  store ptr %112, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %113 = load i32, ptr %6, align 4, !tbaa !5
  %114 = sext i32 %113 to i64
  %115 = mul i64 4, %114
  %116 = load i32, ptr %8, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = mul i64 %115, %117
  %119 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %118, i64 noundef 64)
  store ptr %119, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store float 0.000000e+00, ptr %18, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %120 = load i32, ptr %6, align 4, !tbaa !5
  %121 = load i32, ptr %9, align 4, !tbaa !5
  %122 = sdiv i32 %120, %121
  store i32 %122, ptr %24, align 4, !tbaa !5
  %123 = load i32, ptr %7, align 4, !tbaa !5
  %124 = zext i32 %123 to i64
  %125 = load i32, ptr %9, align 4, !tbaa !5
  %126 = call i32 @libxsmm_nonconst_int(i32 noundef %125)
  %127 = zext i32 %126 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %128 = load i32, ptr %7, align 4, !tbaa !5
  %129 = zext i32 %128 to i64
  %130 = load i32, ptr %9, align 4, !tbaa !5
  %131 = call i32 @libxsmm_nonconst_int(i32 noundef %130)
  %132 = zext i32 %131 to i64
  %133 = load ptr, ptr %16, align 8, !tbaa !9
  store ptr %133, ptr %25, align 8, !tbaa !9
  %134 = load i32, ptr %8, align 4, !tbaa !5
  %135 = zext i32 %134 to i64
  %136 = load i32, ptr %9, align 4, !tbaa !5
  %137 = call i32 @libxsmm_nonconst_int(i32 noundef %136)
  %138 = zext i32 %137 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %139 = load i32, ptr %8, align 4, !tbaa !5
  %140 = zext i32 %139 to i64
  %141 = load i32, ptr %9, align 4, !tbaa !5
  %142 = call i32 @libxsmm_nonconst_int(i32 noundef %141)
  %143 = zext i32 %142 to i64
  %144 = load ptr, ptr %17, align 8, !tbaa !9
  store ptr %144, ptr %26, align 8, !tbaa !9
  %145 = load i32, ptr %7, align 4, !tbaa !5
  %146 = call i32 @libxsmm_nonconst_int(i32 noundef %145)
  %147 = zext i32 %146 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %148 = load i32, ptr %7, align 4, !tbaa !5
  %149 = call i32 @libxsmm_nonconst_int(i32 noundef %148)
  %150 = zext i32 %149 to i64
  %151 = load ptr, ptr %14, align 8, !tbaa !9
  store ptr %151, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  store i32 0, ptr %28, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  store i32 0, ptr %29, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %30) #8
  %152 = load i32, ptr %7, align 4, !tbaa !5
  %153 = load i32, ptr %8, align 4, !tbaa !5
  %154 = load i32, ptr %24, align 4, !tbaa !5
  %155 = load i32, ptr %7, align 4, !tbaa !5
  %156 = load i32, ptr %8, align 4, !tbaa !5
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %30, i32 noundef %152, i32 noundef %153, i32 noundef %154, i32 noundef %155, i32 noundef %156, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 176, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  store ptr null, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store i32 0, ptr %36, align 4, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %31, i8 0, i64 176, i1 false)
  %157 = load i32, ptr %4, align 4, !tbaa !5
  %158 = icmp ne i32 %157, 7
  br i1 %158, label %159, label %165

159:                                              ; preds = %97
  %160 = load i32, ptr %4, align 4, !tbaa !5
  %161 = icmp ne i32 %160, 1
  br i1 %161, label %162, label %165

162:                                              ; preds = %159
  %163 = load ptr, ptr @stderr, align 8, !tbaa !9
  %164 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %163, ptr noundef @.str) #8
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %37, align 4
  br label %725

165:                                              ; preds = %159, %97
  %166 = load i32, ptr %6, align 4, !tbaa !5
  %167 = load i32, ptr %9, align 4, !tbaa !5
  %168 = srem i32 %166, %167
  %169 = icmp ne i32 %168, 0
  br i1 %169, label %174, label %170

170:                                              ; preds = %165
  %171 = load i32, ptr %9, align 4, !tbaa !5
  %172 = load i32, ptr %6, align 4, !tbaa !5
  %173 = icmp sgt i32 %171, %172
  br i1 %173, label %174, label %178

174:                                              ; preds = %170, %165
  %175 = load ptr, ptr @stderr, align 8, !tbaa !9
  %176 = load i32, ptr %9, align 4, !tbaa !5
  %177 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %175, ptr noundef @.str.1, i32 noundef %176) #8
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %37, align 4
  br label %725

178:                                              ; preds = %170
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %179

179:                                              ; preds = %230, %178
  %180 = load i32, ptr %21, align 4, !tbaa !5
  %181 = load i32, ptr %24, align 4, !tbaa !5
  %182 = icmp slt i32 %180, %181
  br i1 %182, label %183, label %233

183:                                              ; preds = %179
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %184

184:                                              ; preds = %226, %183
  %185 = load i32, ptr %22, align 4, !tbaa !5
  %186 = load i32, ptr %7, align 4, !tbaa !5
  %187 = icmp slt i32 %185, %186
  br i1 %187, label %188, label %229

188:                                              ; preds = %184
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %222, %188
  %190 = load i32, ptr %19, align 4, !tbaa !5
  %191 = load i32, ptr %9, align 4, !tbaa !5
  %192 = icmp slt i32 %190, %191
  br i1 %192, label %193, label %225

193:                                              ; preds = %189
  %194 = call double @libxsmm_rng_f64()
  %195 = fptrunc double %194 to float
  %196 = load ptr, ptr %25, align 8, !tbaa !9
  %197 = load i32, ptr %7, align 4, !tbaa !5
  %198 = mul nsw i32 0, %197
  %199 = sext i32 %198 to i64
  %200 = mul nuw i64 %124, %127
  %201 = mul nsw i64 %199, %200
  %202 = getelementptr inbounds float, ptr %196, i64 %201
  %203 = load i32, ptr %9, align 4, !tbaa !5
  %204 = mul nsw i32 0, %203
  %205 = sext i32 %204 to i64
  %206 = mul nuw i64 %124, %127
  %207 = mul nsw i64 %205, %206
  %208 = getelementptr inbounds float, ptr %202, i64 %207
  %209 = load i32, ptr %21, align 4, !tbaa !5
  %210 = sext i32 %209 to i64
  %211 = mul nuw i64 %124, %127
  %212 = mul nsw i64 %210, %211
  %213 = getelementptr inbounds float, ptr %208, i64 %212
  %214 = load i32, ptr %22, align 4, !tbaa !5
  %215 = sext i32 %214 to i64
  %216 = mul nsw i64 %215, %127
  %217 = getelementptr inbounds float, ptr %213, i64 %216
  %218 = load i32, ptr %19, align 4, !tbaa !5
  %219 = call i32 @libxsmm_nonconst_int(i32 noundef %218)
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds float, ptr %217, i64 %220
  store float %195, ptr %221, align 4, !tbaa !13
  br label %222

222:                                              ; preds = %193
  %223 = load i32, ptr %19, align 4, !tbaa !5
  %224 = add nsw i32 %223, 1
  store i32 %224, ptr %19, align 4, !tbaa !5
  br label %189, !llvm.loop !15

225:                                              ; preds = %189
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %22, align 4, !tbaa !5
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %22, align 4, !tbaa !5
  br label %184, !llvm.loop !17

229:                                              ; preds = %184
  br label %230

230:                                              ; preds = %229
  %231 = load i32, ptr %21, align 4, !tbaa !5
  %232 = add nsw i32 %231, 1
  store i32 %232, ptr %21, align 4, !tbaa !5
  br label %179, !llvm.loop !18

233:                                              ; preds = %179
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %234

234:                                              ; preds = %285, %233
  %235 = load i32, ptr %21, align 4, !tbaa !5
  %236 = load i32, ptr %24, align 4, !tbaa !5
  %237 = icmp slt i32 %235, %236
  br i1 %237, label %238, label %288

238:                                              ; preds = %234
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %239

239:                                              ; preds = %281, %238
  %240 = load i32, ptr %22, align 4, !tbaa !5
  %241 = load i32, ptr %8, align 4, !tbaa !5
  %242 = icmp slt i32 %240, %241
  br i1 %242, label %243, label %284

243:                                              ; preds = %239
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %244

244:                                              ; preds = %277, %243
  %245 = load i32, ptr %19, align 4, !tbaa !5
  %246 = load i32, ptr %9, align 4, !tbaa !5
  %247 = icmp slt i32 %245, %246
  br i1 %247, label %248, label %280

248:                                              ; preds = %244
  %249 = call double @libxsmm_rng_f64()
  %250 = fptrunc double %249 to float
  %251 = load ptr, ptr %26, align 8, !tbaa !9
  %252 = load i32, ptr %8, align 4, !tbaa !5
  %253 = mul nsw i32 0, %252
  %254 = sext i32 %253 to i64
  %255 = mul nuw i64 %135, %138
  %256 = mul nsw i64 %254, %255
  %257 = getelementptr inbounds float, ptr %251, i64 %256
  %258 = load i32, ptr %9, align 4, !tbaa !5
  %259 = mul nsw i32 0, %258
  %260 = sext i32 %259 to i64
  %261 = mul nuw i64 %135, %138
  %262 = mul nsw i64 %260, %261
  %263 = getelementptr inbounds float, ptr %257, i64 %262
  %264 = load i32, ptr %21, align 4, !tbaa !5
  %265 = sext i32 %264 to i64
  %266 = mul nuw i64 %135, %138
  %267 = mul nsw i64 %265, %266
  %268 = getelementptr inbounds float, ptr %263, i64 %267
  %269 = load i32, ptr %22, align 4, !tbaa !5
  %270 = sext i32 %269 to i64
  %271 = mul nsw i64 %270, %138
  %272 = getelementptr inbounds float, ptr %268, i64 %271
  %273 = load i32, ptr %19, align 4, !tbaa !5
  %274 = call i32 @libxsmm_nonconst_int(i32 noundef %273)
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds float, ptr %272, i64 %275
  store float %250, ptr %276, align 4, !tbaa !13
  br label %277

277:                                              ; preds = %248
  %278 = load i32, ptr %19, align 4, !tbaa !5
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %19, align 4, !tbaa !5
  br label %244, !llvm.loop !19

280:                                              ; preds = %244
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %22, align 4, !tbaa !5
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %22, align 4, !tbaa !5
  br label %239, !llvm.loop !20

284:                                              ; preds = %239
  br label %285

285:                                              ; preds = %284
  %286 = load i32, ptr %21, align 4, !tbaa !5
  %287 = add nsw i32 %286, 1
  store i32 %287, ptr %21, align 4, !tbaa !5
  br label %234, !llvm.loop !21

288:                                              ; preds = %234
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %289

289:                                              ; preds = %328, %288
  %290 = load i32, ptr %21, align 4, !tbaa !5
  %291 = load i32, ptr %8, align 4, !tbaa !5
  %292 = icmp slt i32 %290, %291
  br i1 %292, label %293, label %331

293:                                              ; preds = %289
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %294

294:                                              ; preds = %324, %293
  %295 = load i32, ptr %22, align 4, !tbaa !5
  %296 = load i32, ptr %7, align 4, !tbaa !5
  %297 = icmp slt i32 %295, %296
  br i1 %297, label %298, label %327

298:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %299 = call double @libxsmm_rng_f64()
  store double %299, ptr %38, align 8, !tbaa !11
  %300 = load double, ptr %38, align 8, !tbaa !11
  %301 = load double, ptr %10, align 8, !tbaa !11
  %302 = fcmp olt double %300, %301
  br i1 %302, label %303, label %304

303:                                              ; preds = %298
  store double 0.000000e+00, ptr %38, align 8, !tbaa !11
  br label %307

304:                                              ; preds = %298
  %305 = load i32, ptr %36, align 4, !tbaa !5
  %306 = add i32 %305, 1
  store i32 %306, ptr %36, align 4, !tbaa !5
  br label %307

307:                                              ; preds = %304, %303
  %308 = load double, ptr %38, align 8, !tbaa !11
  %309 = fptrunc double %308 to float
  %310 = load ptr, ptr %27, align 8, !tbaa !9
  %311 = load i32, ptr %7, align 4, !tbaa !5
  %312 = mul nsw i32 0, %311
  %313 = sext i32 %312 to i64
  %314 = mul nsw i64 %313, %147
  %315 = getelementptr inbounds float, ptr %310, i64 %314
  %316 = load i32, ptr %21, align 4, !tbaa !5
  %317 = sext i32 %316 to i64
  %318 = mul nsw i64 %317, %147
  %319 = getelementptr inbounds float, ptr %315, i64 %318
  %320 = load i32, ptr %22, align 4, !tbaa !5
  %321 = call i32 @libxsmm_nonconst_int(i32 noundef %320)
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds float, ptr %319, i64 %322
  store float %309, ptr %323, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  br label %324

324:                                              ; preds = %307
  %325 = load i32, ptr %22, align 4, !tbaa !5
  %326 = add nsw i32 %325, 1
  store i32 %326, ptr %22, align 4, !tbaa !5
  br label %294, !llvm.loop !22

327:                                              ; preds = %294
  br label %328

328:                                              ; preds = %327
  %329 = load i32, ptr %21, align 4, !tbaa !5
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %21, align 4, !tbaa !5
  br label %289, !llvm.loop !23

331:                                              ; preds = %289
  %332 = load i32, ptr %8, align 4, !tbaa !5
  %333 = load i32, ptr %7, align 4, !tbaa !5
  %334 = load i32, ptr %36, align 4, !tbaa !5
  %335 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %332, i32 noundef %333, i32 noundef %334)
  %336 = load i32, ptr %8, align 4, !tbaa !5
  %337 = add nsw i32 %336, 1
  %338 = sext i32 %337 to i64
  %339 = mul i64 %338, 4
  %340 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %339, i64 noundef 64)
  store ptr %340, ptr %12, align 8, !tbaa !9
  %341 = load i32, ptr %36, align 4, !tbaa !5
  %342 = zext i32 %341 to i64
  %343 = mul i64 %342, 4
  %344 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %343, i64 noundef 64)
  store ptr %344, ptr %13, align 8, !tbaa !9
  %345 = load i32, ptr %36, align 4, !tbaa !5
  %346 = zext i32 %345 to i64
  %347 = mul i64 %346, 4
  %348 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %347, i64 noundef 64)
  store ptr %348, ptr %15, align 8, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !5
  %349 = load i32, ptr %36, align 4, !tbaa !5
  %350 = load ptr, ptr %12, align 8, !tbaa !9
  %351 = load i32, ptr %8, align 4, !tbaa !5
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds i32, ptr %350, i64 %352
  store i32 %349, ptr %353, align 4, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %354

354:                                              ; preds = %418, %331
  %355 = load i32, ptr %21, align 4, !tbaa !5
  %356 = load i32, ptr %8, align 4, !tbaa !5
  %357 = icmp slt i32 %355, %356
  br i1 %357, label %358, label %421

358:                                              ; preds = %354
  %359 = load i32, ptr %19, align 4, !tbaa !5
  %360 = load ptr, ptr %12, align 8, !tbaa !9
  %361 = load i32, ptr %21, align 4, !tbaa !5
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds i32, ptr %360, i64 %362
  store i32 %359, ptr %363, align 4, !tbaa !5
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %364

364:                                              ; preds = %414, %358
  %365 = load i32, ptr %22, align 4, !tbaa !5
  %366 = load i32, ptr %7, align 4, !tbaa !5
  %367 = icmp slt i32 %365, %366
  br i1 %367, label %368, label %417

368:                                              ; preds = %364
  %369 = load ptr, ptr %27, align 8, !tbaa !9
  %370 = load i32, ptr %7, align 4, !tbaa !5
  %371 = mul nsw i32 0, %370
  %372 = sext i32 %371 to i64
  %373 = mul nsw i64 %372, %147
  %374 = getelementptr inbounds float, ptr %369, i64 %373
  %375 = load i32, ptr %21, align 4, !tbaa !5
  %376 = sext i32 %375 to i64
  %377 = mul nsw i64 %376, %147
  %378 = getelementptr inbounds float, ptr %374, i64 %377
  %379 = load i32, ptr %22, align 4, !tbaa !5
  %380 = call i32 @libxsmm_nonconst_int(i32 noundef %379)
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds float, ptr %378, i64 %381
  %383 = load float, ptr %382, align 4, !tbaa !13
  %384 = fpext float %383 to double
  %385 = fcmp une double %384, 0.000000e+00
  br i1 %385, label %386, label %413

386:                                              ; preds = %368
  %387 = load i32, ptr %22, align 4, !tbaa !5
  %388 = load ptr, ptr %13, align 8, !tbaa !9
  %389 = load i32, ptr %19, align 4, !tbaa !5
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i32, ptr %388, i64 %390
  store i32 %387, ptr %391, align 4, !tbaa !5
  %392 = load ptr, ptr %27, align 8, !tbaa !9
  %393 = load i32, ptr %7, align 4, !tbaa !5
  %394 = mul nsw i32 0, %393
  %395 = sext i32 %394 to i64
  %396 = mul nsw i64 %395, %147
  %397 = getelementptr inbounds float, ptr %392, i64 %396
  %398 = load i32, ptr %21, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = mul nsw i64 %399, %147
  %401 = getelementptr inbounds float, ptr %397, i64 %400
  %402 = load i32, ptr %22, align 4, !tbaa !5
  %403 = call i32 @libxsmm_nonconst_int(i32 noundef %402)
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds float, ptr %401, i64 %404
  %406 = load float, ptr %405, align 4, !tbaa !13
  %407 = load ptr, ptr %15, align 8, !tbaa !9
  %408 = load i32, ptr %19, align 4, !tbaa !5
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds float, ptr %407, i64 %409
  store float %406, ptr %410, align 4, !tbaa !13
  %411 = load i32, ptr %19, align 4, !tbaa !5
  %412 = add nsw i32 %411, 1
  store i32 %412, ptr %19, align 4, !tbaa !5
  br label %413

413:                                              ; preds = %386, %368
  br label %414

414:                                              ; preds = %413
  %415 = load i32, ptr %22, align 4, !tbaa !5
  %416 = add nsw i32 %415, 1
  store i32 %416, ptr %22, align 4, !tbaa !5
  br label %364, !llvm.loop !24

417:                                              ; preds = %364
  br label %418

418:                                              ; preds = %417
  %419 = load i32, ptr %21, align 4, !tbaa !5
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %21, align 4, !tbaa !5
  br label %354, !llvm.loop !25

421:                                              ; preds = %354
  %422 = call i64 @libxsmm_timer_tick()
  store i64 %422, ptr %33, align 8, !tbaa !26
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %423

423:                                              ; preds = %534, %421
  %424 = load i32, ptr %20, align 4, !tbaa !5
  %425 = load i32, ptr %11, align 4, !tbaa !5
  %426 = icmp slt i32 %424, %425
  br i1 %426, label %427, label %537

427:                                              ; preds = %423
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %428

428:                                              ; preds = %530, %427
  %429 = load i32, ptr %21, align 4, !tbaa !5
  %430 = load i32, ptr %24, align 4, !tbaa !5
  %431 = icmp slt i32 %429, %430
  br i1 %431, label %432, label %533

432:                                              ; preds = %428
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %433

433:                                              ; preds = %526, %432
  %434 = load i32, ptr %22, align 4, !tbaa !5
  %435 = load i32, ptr %8, align 4, !tbaa !5
  %436 = icmp slt i32 %434, %435
  br i1 %436, label %437, label %529

437:                                              ; preds = %433
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %438

438:                                              ; preds = %522, %437
  %439 = load i32, ptr %23, align 4, !tbaa !5
  %440 = load i32, ptr %7, align 4, !tbaa !5
  %441 = icmp slt i32 %439, %440
  br i1 %441, label %442, label %525

442:                                              ; preds = %438
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %443

443:                                              ; preds = %518, %442
  %444 = load i32, ptr %19, align 4, !tbaa !5
  %445 = load i32, ptr %9, align 4, !tbaa !5
  %446 = icmp slt i32 %444, %445
  br i1 %446, label %447, label %521

447:                                              ; preds = %443
  %448 = load ptr, ptr %25, align 8, !tbaa !9
  %449 = load i32, ptr %7, align 4, !tbaa !5
  %450 = mul nsw i32 0, %449
  %451 = sext i32 %450 to i64
  %452 = mul nuw i64 %124, %127
  %453 = mul nsw i64 %451, %452
  %454 = getelementptr inbounds float, ptr %448, i64 %453
  %455 = load i32, ptr %9, align 4, !tbaa !5
  %456 = mul nsw i32 0, %455
  %457 = sext i32 %456 to i64
  %458 = mul nuw i64 %124, %127
  %459 = mul nsw i64 %457, %458
  %460 = getelementptr inbounds float, ptr %454, i64 %459
  %461 = load i32, ptr %21, align 4, !tbaa !5
  %462 = sext i32 %461 to i64
  %463 = mul nuw i64 %124, %127
  %464 = mul nsw i64 %462, %463
  %465 = getelementptr inbounds float, ptr %460, i64 %464
  %466 = load i32, ptr %23, align 4, !tbaa !5
  %467 = sext i32 %466 to i64
  %468 = mul nsw i64 %467, %127
  %469 = getelementptr inbounds float, ptr %465, i64 %468
  %470 = load i32, ptr %19, align 4, !tbaa !5
  %471 = call i32 @libxsmm_nonconst_int(i32 noundef %470)
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds float, ptr %469, i64 %472
  %474 = load float, ptr %473, align 4, !tbaa !13
  %475 = load ptr, ptr %26, align 8, !tbaa !9
  %476 = load i32, ptr %8, align 4, !tbaa !5
  %477 = mul nsw i32 0, %476
  %478 = sext i32 %477 to i64
  %479 = mul nuw i64 %135, %138
  %480 = mul nsw i64 %478, %479
  %481 = getelementptr inbounds float, ptr %475, i64 %480
  %482 = load i32, ptr %9, align 4, !tbaa !5
  %483 = mul nsw i32 0, %482
  %484 = sext i32 %483 to i64
  %485 = mul nuw i64 %135, %138
  %486 = mul nsw i64 %484, %485
  %487 = getelementptr inbounds float, ptr %481, i64 %486
  %488 = load i32, ptr %21, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = mul nuw i64 %135, %138
  %491 = mul nsw i64 %489, %490
  %492 = getelementptr inbounds float, ptr %487, i64 %491
  %493 = load i32, ptr %22, align 4, !tbaa !5
  %494 = sext i32 %493 to i64
  %495 = mul nsw i64 %494, %138
  %496 = getelementptr inbounds float, ptr %492, i64 %495
  %497 = load i32, ptr %19, align 4, !tbaa !5
  %498 = call i32 @libxsmm_nonconst_int(i32 noundef %497)
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds float, ptr %496, i64 %499
  %501 = load float, ptr %500, align 4, !tbaa !13
  %502 = load ptr, ptr %27, align 8, !tbaa !9
  %503 = load i32, ptr %7, align 4, !tbaa !5
  %504 = mul nsw i32 0, %503
  %505 = sext i32 %504 to i64
  %506 = mul nsw i64 %505, %147
  %507 = getelementptr inbounds float, ptr %502, i64 %506
  %508 = load i32, ptr %22, align 4, !tbaa !5
  %509 = sext i32 %508 to i64
  %510 = mul nsw i64 %509, %147
  %511 = getelementptr inbounds float, ptr %507, i64 %510
  %512 = load i32, ptr %23, align 4, !tbaa !5
  %513 = call i32 @libxsmm_nonconst_int(i32 noundef %512)
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds float, ptr %511, i64 %514
  %516 = load float, ptr %515, align 4, !tbaa !13
  %517 = call float @llvm.fmuladd.f32(float %474, float %501, float %516)
  store float %517, ptr %515, align 4, !tbaa !13
  br label %518

518:                                              ; preds = %447
  %519 = load i32, ptr %19, align 4, !tbaa !5
  %520 = add nsw i32 %519, 1
  store i32 %520, ptr %19, align 4, !tbaa !5
  br label %443, !llvm.loop !28

521:                                              ; preds = %443
  br label %522

522:                                              ; preds = %521
  %523 = load i32, ptr %23, align 4, !tbaa !5
  %524 = add nsw i32 %523, 1
  store i32 %524, ptr %23, align 4, !tbaa !5
  br label %438, !llvm.loop !29

525:                                              ; preds = %438
  br label %526

526:                                              ; preds = %525
  %527 = load i32, ptr %22, align 4, !tbaa !5
  %528 = add nsw i32 %527, 1
  store i32 %528, ptr %22, align 4, !tbaa !5
  br label %433, !llvm.loop !30

529:                                              ; preds = %433
  br label %530

530:                                              ; preds = %529
  %531 = load i32, ptr %21, align 4, !tbaa !5
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %21, align 4, !tbaa !5
  br label %428, !llvm.loop !31

533:                                              ; preds = %428
  br label %534

534:                                              ; preds = %533
  %535 = load i32, ptr %20, align 4, !tbaa !5
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr %20, align 4, !tbaa !5
  br label %423, !llvm.loop !32

537:                                              ; preds = %423
  %538 = call i64 @libxsmm_timer_tick()
  store i64 %538, ptr %34, align 8, !tbaa !26
  %539 = load i64, ptr %33, align 8, !tbaa !26
  %540 = load i64, ptr %34, align 8, !tbaa !26
  %541 = call double @libxsmm_timer_duration(i64 noundef %539, i64 noundef %540)
  store double %541, ptr %35, align 8, !tbaa !11
  %542 = load double, ptr %35, align 8, !tbaa !11
  %543 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, double noundef %542)
  %544 = load i32, ptr %11, align 4, !tbaa !5
  %545 = uitofp i32 %544 to double
  %546 = load i32, ptr %6, align 4, !tbaa !5
  %547 = sitofp i32 %546 to double
  %548 = fmul double %545, %547
  %549 = load i32, ptr %7, align 4, !tbaa !5
  %550 = sitofp i32 %549 to double
  %551 = fmul double %548, %550
  %552 = load i32, ptr %8, align 4, !tbaa !5
  %553 = sitofp i32 %552 to double
  %554 = fmul double %551, %553
  %555 = fmul double %554, 2.000000e+00
  %556 = load double, ptr %35, align 8, !tbaa !11
  %557 = fmul double %556, 1.000000e+09
  %558 = fdiv double %555, %557
  %559 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %558)
  %560 = load i32, ptr %9, align 4, !tbaa !5
  %561 = load ptr, ptr %12, align 8, !tbaa !9
  %562 = load ptr, ptr %13, align 8, !tbaa !9
  %563 = load ptr, ptr %15, align 8, !tbaa !9
  %564 = call ptr @libxsmm_create_packed_spgemm_csc(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %30, i32 noundef 0, i32 noundef 0, i32 noundef %560, ptr noundef %561, ptr noundef %562, ptr noundef %563)
  store ptr %564, ptr %32, align 8, !tbaa !9
  %565 = load ptr, ptr %16, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %31, i32 0, i32 1
  %567 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %566, i32 0, i32 0
  store ptr %565, ptr %567, align 8, !tbaa !33
  %568 = load ptr, ptr %17, align 8, !tbaa !9
  %569 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %31, i32 0, i32 2
  %570 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %569, i32 0, i32 0
  store ptr %568, ptr %570, align 8, !tbaa !37
  %571 = load ptr, ptr %15, align 8, !tbaa !9
  %572 = getelementptr inbounds %struct.libxsmm_gemm_param, ptr %31, i32 0, i32 3
  %573 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %572, i32 0, i32 0
  store ptr %571, ptr %573, align 8, !tbaa !38
  %574 = call i64 @libxsmm_timer_tick()
  store i64 %574, ptr %33, align 8, !tbaa !26
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %575

575:                                              ; preds = %581, %537
  %576 = load i32, ptr %20, align 4, !tbaa !5
  %577 = load i32, ptr %11, align 4, !tbaa !5
  %578 = icmp slt i32 %576, %577
  br i1 %578, label %579, label %584

579:                                              ; preds = %575
  %580 = load ptr, ptr %32, align 8, !tbaa !9
  call void %580(ptr noundef %31)
  br label %581

581:                                              ; preds = %579
  %582 = load i32, ptr %20, align 4, !tbaa !5
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr %20, align 4, !tbaa !5
  br label %575, !llvm.loop !39

584:                                              ; preds = %575
  %585 = call i64 @libxsmm_timer_tick()
  store i64 %585, ptr %34, align 8, !tbaa !26
  %586 = load i64, ptr %33, align 8, !tbaa !26
  %587 = load i64, ptr %34, align 8, !tbaa !26
  %588 = call double @libxsmm_timer_duration(i64 noundef %586, i64 noundef %587)
  store double %588, ptr %35, align 8, !tbaa !11
  %589 = load double, ptr %35, align 8, !tbaa !11
  %590 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %589)
  %591 = load i32, ptr %11, align 4, !tbaa !5
  %592 = uitofp i32 %591 to double
  %593 = load i32, ptr %6, align 4, !tbaa !5
  %594 = sitofp i32 %593 to double
  %595 = fmul double %592, %594
  %596 = load i32, ptr %7, align 4, !tbaa !5
  %597 = sitofp i32 %596 to double
  %598 = fmul double %595, %597
  %599 = load i32, ptr %8, align 4, !tbaa !5
  %600 = sitofp i32 %599 to double
  %601 = fmul double %598, %600
  %602 = fmul double %601, 2.000000e+00
  %603 = load double, ptr %35, align 8, !tbaa !11
  %604 = fmul double %603, 1.000000e+09
  %605 = fdiv double %602, %604
  %606 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %605)
  store float 0.000000e+00, ptr %18, align 4, !tbaa !13
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %607

607:                                              ; preds = %712, %584
  %608 = load i32, ptr %21, align 4, !tbaa !5
  %609 = load i32, ptr %8, align 4, !tbaa !5
  %610 = icmp slt i32 %608, %609
  br i1 %610, label %611, label %715

611:                                              ; preds = %607
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %612

612:                                              ; preds = %708, %611
  %613 = load i32, ptr %22, align 4, !tbaa !5
  %614 = load ptr, ptr %12, align 8, !tbaa !9
  %615 = load i32, ptr %21, align 4, !tbaa !5
  %616 = add nsw i32 %615, 1
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds i32, ptr %614, i64 %617
  %619 = load i32, ptr %618, align 4, !tbaa !5
  %620 = load ptr, ptr %12, align 8, !tbaa !9
  %621 = load i32, ptr %21, align 4, !tbaa !5
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds i32, ptr %620, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !5
  %625 = sub i32 %619, %624
  %626 = icmp slt i32 %613, %625
  br i1 %626, label %627, label %711

627:                                              ; preds = %612
  %628 = load ptr, ptr %27, align 8, !tbaa !9
  %629 = load i32, ptr %7, align 4, !tbaa !5
  %630 = mul nsw i32 0, %629
  %631 = sext i32 %630 to i64
  %632 = mul nsw i64 %631, %147
  %633 = getelementptr inbounds float, ptr %628, i64 %632
  %634 = load i32, ptr %21, align 4, !tbaa !5
  %635 = sext i32 %634 to i64
  %636 = mul nsw i64 %635, %147
  %637 = getelementptr inbounds float, ptr %633, i64 %636
  %638 = load ptr, ptr %13, align 8, !tbaa !9
  %639 = load ptr, ptr %12, align 8, !tbaa !9
  %640 = load i32, ptr %21, align 4, !tbaa !5
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds i32, ptr %639, i64 %641
  %643 = load i32, ptr %642, align 4, !tbaa !5
  %644 = load i32, ptr %22, align 4, !tbaa !5
  %645 = add i32 %643, %644
  %646 = zext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %638, i64 %646
  %648 = load i32, ptr %647, align 4, !tbaa !5
  %649 = call i32 @libxsmm_nonconst_int(i32 noundef %648)
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds float, ptr %637, i64 %650
  %652 = load float, ptr %651, align 4, !tbaa !13
  %653 = load ptr, ptr %15, align 8, !tbaa !9
  %654 = load ptr, ptr %12, align 8, !tbaa !9
  %655 = load i32, ptr %21, align 4, !tbaa !5
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds i32, ptr %654, i64 %656
  %658 = load i32, ptr %657, align 4, !tbaa !5
  %659 = load i32, ptr %22, align 4, !tbaa !5
  %660 = add i32 %658, %659
  %661 = zext i32 %660 to i64
  %662 = getelementptr inbounds float, ptr %653, i64 %661
  %663 = load float, ptr %662, align 4, !tbaa !13
  %664 = fsub float %652, %663
  %665 = call float @llvm.fabs.f32(float %664)
  %666 = load float, ptr %18, align 4, !tbaa !13
  %667 = fcmp ogt float %665, %666
  br i1 %667, label %668, label %707

668:                                              ; preds = %627
  %669 = load ptr, ptr %27, align 8, !tbaa !9
  %670 = load i32, ptr %7, align 4, !tbaa !5
  %671 = mul nsw i32 0, %670
  %672 = sext i32 %671 to i64
  %673 = mul nsw i64 %672, %147
  %674 = getelementptr inbounds float, ptr %669, i64 %673
  %675 = load i32, ptr %21, align 4, !tbaa !5
  %676 = sext i32 %675 to i64
  %677 = mul nsw i64 %676, %147
  %678 = getelementptr inbounds float, ptr %674, i64 %677
  %679 = load ptr, ptr %13, align 8, !tbaa !9
  %680 = load ptr, ptr %12, align 8, !tbaa !9
  %681 = load i32, ptr %21, align 4, !tbaa !5
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds i32, ptr %680, i64 %682
  %684 = load i32, ptr %683, align 4, !tbaa !5
  %685 = load i32, ptr %22, align 4, !tbaa !5
  %686 = add i32 %684, %685
  %687 = zext i32 %686 to i64
  %688 = getelementptr inbounds i32, ptr %679, i64 %687
  %689 = load i32, ptr %688, align 4, !tbaa !5
  %690 = call i32 @libxsmm_nonconst_int(i32 noundef %689)
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds float, ptr %678, i64 %691
  %693 = load float, ptr %692, align 4, !tbaa !13
  %694 = load ptr, ptr %15, align 8, !tbaa !9
  %695 = load ptr, ptr %12, align 8, !tbaa !9
  %696 = load i32, ptr %21, align 4, !tbaa !5
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds i32, ptr %695, i64 %697
  %699 = load i32, ptr %698, align 4, !tbaa !5
  %700 = load i32, ptr %22, align 4, !tbaa !5
  %701 = add i32 %699, %700
  %702 = zext i32 %701 to i64
  %703 = getelementptr inbounds float, ptr %694, i64 %702
  %704 = load float, ptr %703, align 4, !tbaa !13
  %705 = fsub float %693, %704
  %706 = call float @llvm.fabs.f32(float %705)
  store float %706, ptr %18, align 4, !tbaa !13
  br label %707

707:                                              ; preds = %668, %627
  br label %708

708:                                              ; preds = %707
  %709 = load i32, ptr %22, align 4, !tbaa !5
  %710 = add nsw i32 %709, 1
  store i32 %710, ptr %22, align 4, !tbaa !5
  br label %612, !llvm.loop !40

711:                                              ; preds = %612
  br label %712

712:                                              ; preds = %711
  %713 = load i32, ptr %21, align 4, !tbaa !5
  %714 = add nsw i32 %713, 1
  store i32 %714, ptr %21, align 4, !tbaa !5
  br label %607, !llvm.loop !41

715:                                              ; preds = %607
  %716 = load float, ptr %18, align 4, !tbaa !13
  %717 = fpext float %716 to double
  %718 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %717)
  %719 = load ptr, ptr %14, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %719)
  %720 = load ptr, ptr %16, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %720)
  %721 = load ptr, ptr %17, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %721)
  %722 = load ptr, ptr %15, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %722)
  %723 = load ptr, ptr %12, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %723)
  %724 = load ptr, ptr %13, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %724)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %37, align 4
  br label %725

725:                                              ; preds = %715, %174, %162
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 176, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  %726 = load i32, ptr %3, align 4
  ret i32 %726
}

; 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

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

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

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

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: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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

declare double @libxsmm_rng_f64() #3

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

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

declare i64 @libxsmm_timer_tick() #3

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

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 nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #7

declare void @libxsmm_free(ptr noundef) #3

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 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }

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

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


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [21 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) 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 = icmp sgt i32 %0, 1
  br i1 %5, label %6, label %.thread263

6:                                                ; preds = %2
  %7 = getelementptr inbounds i8, ptr %1, i64 8
  %8 = load ptr, ptr %7, align 8, !tbaa !5
  %9 = tail call i32 @atoi(ptr nocapture noundef %8) #8
  %.not264 = icmp eq i32 %0, 2
  br i1 %.not264, label %.thread263, label %10

10:                                               ; preds = %6
  %11 = getelementptr inbounds i8, ptr %1, i64 16
  %12 = load ptr, ptr %11, align 8, !tbaa !5
  %13 = tail call i32 @atoi(ptr nocapture noundef %12) #8
  %14 = icmp ugt i32 %0, 3
  br i1 %14, label %15, label %.thread263

15:                                               ; preds = %10
  %16 = getelementptr inbounds i8, ptr %1, i64 24
  %17 = load ptr, ptr %16, align 8, !tbaa !5
  %18 = tail call i32 @atoi(ptr nocapture noundef %17) #8
  %.not265 = icmp eq i32 %0, 4
  br i1 %.not265, label %.thread263, label %19

19:                                               ; preds = %15
  %20 = getelementptr inbounds i8, ptr %1, i64 32
  %21 = load ptr, ptr %20, align 8, !tbaa !5
  %22 = tail call i32 @atoi(ptr nocapture noundef %21) #8
  %23 = icmp ugt i32 %0, 5
  br i1 %23, label %24, label %.thread263

24:                                               ; preds = %19
  %25 = getelementptr inbounds i8, ptr %1, i64 40
  %26 = load ptr, ptr %25, align 8, !tbaa !5
  %27 = tail call double @atof(ptr noundef %26) #8
  %.not266 = icmp eq i32 %0, 6
  br i1 %.not266, label %.thread263, label %28

28:                                               ; preds = %24
  %29 = getelementptr inbounds i8, ptr %1, i64 48
  %30 = load ptr, ptr %29, align 8, !tbaa !5
  %31 = tail call i32 @atoi(ptr nocapture noundef %30) #8
  br label %.thread263

.thread263:                                       ; preds = %2, %6, %10, %15, %19, %24, %28
  %32 = phi double [ %27, %28 ], [ %27, %24 ], [ 9.000000e-01, %19 ], [ 9.000000e-01, %15 ], [ 9.000000e-01, %10 ], [ 9.000000e-01, %6 ], [ 9.000000e-01, %2 ]
  %33 = phi i32 [ %18, %28 ], [ %18, %24 ], [ %18, %19 ], [ %18, %15 ], [ 32, %10 ], [ 32, %6 ], [ 32, %2 ]
  %34 = phi i32 [ %9, %28 ], [ %9, %24 ], [ %9, %19 ], [ %9, %15 ], [ %9, %10 ], [ %9, %6 ], [ 64, %2 ]
  %35 = phi i32 [ %13, %28 ], [ %13, %24 ], [ %13, %19 ], [ %13, %15 ], [ %13, %10 ], [ 512, %6 ], [ 512, %2 ]
  %36 = phi i32 [ %22, %28 ], [ %22, %24 ], [ %22, %19 ], [ 32, %15 ], [ 32, %10 ], [ 32, %6 ], [ 32, %2 ]
  %37 = phi i32 [ %31, %28 ], [ 1, %24 ], [ 1, %19 ], [ 1, %15 ], [ 1, %10 ], [ 1, %6 ], [ 1, %2 ]
  %38 = sext i32 %35 to i64
  %39 = sext i32 %33 to i64
  %40 = shl nsw i64 %39, 2
  %41 = mul i64 %40, %38
  %42 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %41, i64 noundef 64) #9
  %43 = sext i32 %34 to i64
  %44 = shl nsw i64 %43, 2
  %45 = mul i64 %44, %38
  %46 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %45, i64 noundef 64) #9
  %47 = mul i64 %44, %39
  %48 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %47, i64 noundef 64) #9
  %49 = sdiv i32 %34, %36
  %50 = srem i32 %34, %36
  %51 = zext i32 %35 to i64
  %52 = tail call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %53 = zext i32 %52 to i64
  %54 = tail call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %55 = zext i32 %33 to i64
  %56 = tail call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %57 = zext i32 %56 to i64
  %58 = tail call i32 @libxsmm_nonconst_int(i32 noundef %36)
  %59 = tail call i32 @libxsmm_nonconst_int(i32 noundef %35)
  %60 = zext i32 %59 to i64
  %61 = tail call i32 @libxsmm_nonconst_int(i32 noundef %35)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #9
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %3, i32 noundef %35, i32 noundef %33, i32 noundef %49, i32 noundef %35, i32 noundef %33, i32 noundef 0, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1) #9
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %4) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(176) %4, i8 0, i64 176, i1 false)
  switch i32 %0, label %62 [
    i32 7, label %65
    i32 1, label %65
  ]

62:                                               ; preds = %.thread263
  %63 = load ptr, ptr @stderr, align 8, !tbaa !5
  %64 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %63, ptr noundef nonnull @.str) #10
  br label %254

65:                                               ; preds = %.thread263, %.thread263
  %.not = icmp ne i32 %50, 0
  %66 = icmp sgt i32 %36, %34
  %or.cond = or i1 %66, %.not
  br i1 %or.cond, label %82, label %.preheader278

.preheader278:                                    ; preds = %65
  %67 = icmp slt i32 %49, 1
  br i1 %67, label %.preheader272, label %.preheader277.lr.ph

.preheader277.lr.ph:                              ; preds = %.preheader278
  %68 = icmp sgt i32 %35, 0
  %69 = mul nuw i64 %53, %51
  %70 = icmp sgt i32 %36, 0
  %or.cond424 = select i1 %68, i1 %70, i1 false
  br i1 %or.cond424, label %.preheader277.us.us.preheader, label %.preheader274.lr.ph

.preheader277.us.us.preheader:                    ; preds = %.preheader277.lr.ph
  %wide.trip.count371 = zext nneg i32 %49 to i64
  br label %.preheader277.us.us

.preheader277.us.us:                              ; preds = %.preheader277.us.us.preheader, %._crit_edge281.split.us.us.us
  %indvars.iv368 = phi i64 [ 0, %.preheader277.us.us.preheader ], [ %indvars.iv.next369, %._crit_edge281.split.us.us.us ]
  %71 = mul nuw nsw i64 %69, %indvars.iv368
  %72 = getelementptr inbounds float, ptr %46, i64 %71
  br label %.preheader276.us.us.us

.preheader276.us.us.us:                           ; preds = %._crit_edge.us.us.us, %.preheader277.us.us
  %indvars.iv = phi i64 [ %indvars.iv.next, %._crit_edge.us.us.us ], [ 0, %.preheader277.us.us ]
  %73 = mul nuw nsw i64 %indvars.iv, %53
  %74 = getelementptr inbounds float, ptr %72, i64 %73
  br label %75

75:                                               ; preds = %75, %.preheader276.us.us.us
  %.0224279.us.us.us = phi i32 [ 0, %.preheader276.us.us.us ], [ %81, %75 ]
  %76 = call double @libxsmm_rng_f64() #9
  %77 = fptrunc double %76 to float
  %78 = call i32 @libxsmm_nonconst_int(i32 noundef %.0224279.us.us.us)
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds float, ptr %74, i64 %79
  store float %77, ptr %80, align 4, !tbaa !9
  %81 = add nuw nsw i32 %.0224279.us.us.us, 1
  %exitcond.not = icmp eq i32 %81, %36
  br i1 %exitcond.not, label %._crit_edge.us.us.us, label %75, !llvm.loop !11

._crit_edge.us.us.us:                             ; preds = %75
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond367.not = icmp eq i64 %indvars.iv.next, %51
  br i1 %exitcond367.not, label %._crit_edge281.split.us.us.us, label %.preheader276.us.us.us, !llvm.loop !13

._crit_edge281.split.us.us.us:                    ; preds = %._crit_edge.us.us.us
  %indvars.iv.next369 = add nuw nsw i64 %indvars.iv368, 1
  %exitcond372.not = icmp eq i64 %indvars.iv.next369, %wide.trip.count371
  br i1 %exitcond372.not, label %.preheader275, label %.preheader277.us.us, !llvm.loop !14

82:                                               ; preds = %65
  %83 = load ptr, ptr @stderr, align 8, !tbaa !5
  %84 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %83, ptr noundef nonnull @.str.1, i32 noundef %36) #10
  br label %254

.preheader275:                                    ; preds = %._crit_edge281.split.us.us.us
  br i1 %67, label %.preheader272, label %.preheader274.lr.ph

.preheader274.lr.ph:                              ; preds = %.preheader277.lr.ph, %.preheader275
  %85 = icmp sgt i32 %33, 0
  %86 = mul nuw i64 %57, %55
  br i1 %85, label %.preheader274.lr.ph.split.us, label %._crit_edge300

.preheader274.lr.ph.split.us:                     ; preds = %.preheader274.lr.ph
  %87 = icmp sgt i32 %36, 0
  br i1 %87, label %.preheader274.us.us.preheader, label %.preheader271.lr.ph

.preheader274.us.us.preheader:                    ; preds = %.preheader274.lr.ph.split.us
  %wide.trip.count382 = zext nneg i32 %49 to i64
  br label %.preheader274.us.us

.preheader274.us.us:                              ; preds = %.preheader274.us.us.preheader, %._crit_edge289.split.us.us.us
  %indvars.iv379 = phi i64 [ 0, %.preheader274.us.us.preheader ], [ %indvars.iv.next380, %._crit_edge289.split.us.us.us ]
  %88 = mul nuw nsw i64 %86, %indvars.iv379
  %89 = getelementptr inbounds float, ptr %48, i64 %88
  br label %.preheader273.us.us.us

.preheader273.us.us.us:                           ; preds = %._crit_edge.us.us.us295, %.preheader274.us.us
  %indvars.iv374 = phi i64 [ %indvars.iv.next375, %._crit_edge.us.us.us295 ], [ 0, %.preheader274.us.us ]
  %90 = mul nuw nsw i64 %indvars.iv374, %57
  %91 = getelementptr inbounds float, ptr %89, i64 %90
  br label %92

92:                                               ; preds = %92, %.preheader273.us.us.us
  %.1225287.us.us.us = phi i32 [ 0, %.preheader273.us.us.us ], [ %98, %92 ]
  %93 = call double @libxsmm_rng_f64() #9
  %94 = fptrunc double %93 to float
  %95 = call i32 @libxsmm_nonconst_int(i32 noundef %.1225287.us.us.us)
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds float, ptr %91, i64 %96
  store float %94, ptr %97, align 4, !tbaa !9
  %98 = add nuw nsw i32 %.1225287.us.us.us, 1
  %exitcond373.not = icmp eq i32 %98, %36
  br i1 %exitcond373.not, label %._crit_edge.us.us.us295, label %92, !llvm.loop !15

._crit_edge.us.us.us295:                          ; preds = %92
  %indvars.iv.next375 = add nuw nsw i64 %indvars.iv374, 1
  %exitcond378.not = icmp eq i64 %indvars.iv.next375, %55
  br i1 %exitcond378.not, label %._crit_edge289.split.us.us.us, label %.preheader273.us.us.us, !llvm.loop !16

._crit_edge289.split.us.us.us:                    ; preds = %._crit_edge.us.us.us295
  %indvars.iv.next380 = add nuw nsw i64 %indvars.iv379, 1
  %exitcond383.not = icmp eq i64 %indvars.iv.next380, %wide.trip.count382
  br i1 %exitcond383.not, label %.preheader272, label %.preheader274.us.us, !llvm.loop !17

.preheader272:                                    ; preds = %._crit_edge289.split.us.us.us, %.preheader278, %.preheader275
  %99 = icmp sgt i32 %33, 0
  br i1 %99, label %.preheader271.lr.ph, label %._crit_edge300

.preheader271.lr.ph:                              ; preds = %.preheader274.lr.ph.split.us, %.preheader272
  %100 = icmp sgt i32 %35, 0
  br i1 %100, label %.preheader271.us, label %._crit_edge300

.preheader271.us:                                 ; preds = %.preheader271.lr.ph, %._crit_edge.us
  %indvars.iv385 = phi i64 [ %indvars.iv.next386, %._crit_edge.us ], [ 0, %.preheader271.lr.ph ]
  %.0219299.us = phi i32 [ %.2.us, %._crit_edge.us ], [ 0, %.preheader271.lr.ph ]
  %101 = mul nuw nsw i64 %indvars.iv385, %60
  %102 = getelementptr inbounds float, ptr %42, i64 %101
  br label %103

103:                                              ; preds = %.preheader271.us, %103
  %.1297.us = phi i32 [ %.0219299.us, %.preheader271.us ], [ %.2.us, %103 ]
  %.2230296.us = phi i32 [ 0, %.preheader271.us ], [ %111, %103 ]
  %104 = call double @libxsmm_rng_f64() #9
  %105 = fcmp uge double %104, %32
  %106 = zext i1 %105 to i32
  %.2.us = add i32 %.1297.us, %106
  %.0.us = select i1 %105, double %104, double 0.000000e+00
  %107 = fptrunc double %.0.us to float
  %108 = call i32 @libxsmm_nonconst_int(i32 noundef %.2230296.us)
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds float, ptr %102, i64 %109
  store float %107, ptr %110, align 4, !tbaa !9
  %111 = add nuw nsw i32 %.2230296.us, 1
  %exitcond384.not = icmp eq i32 %111, %35
  br i1 %exitcond384.not, label %._crit_edge.us, label %103, !llvm.loop !18

._crit_edge.us:                                   ; preds = %103
  %indvars.iv.next386 = add nuw nsw i64 %indvars.iv385, 1
  %exitcond389.not = icmp eq i64 %indvars.iv.next386, %55
  br i1 %exitcond389.not, label %._crit_edge300, label %.preheader271.us, !llvm.loop !19

._crit_edge300:                                   ; preds = %._crit_edge.us, %.preheader274.lr.ph, %.preheader271.lr.ph, %.preheader272
  %112 = phi i1 [ false, %.preheader272 ], [ true, %.preheader271.lr.ph ], [ false, %.preheader274.lr.ph ], [ true, %._crit_edge.us ]
  %.0219.lcssa = phi i32 [ 0, %.preheader272 ], [ 0, %.preheader271.lr.ph ], [ 0, %.preheader274.lr.ph ], [ %.2.us, %._crit_edge.us ]
  %113 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %33, i32 noundef %35, i32 noundef %.0219.lcssa)
  %114 = add nsw i32 %33, 1
  %115 = sext i32 %114 to i64
  %116 = shl nsw i64 %115, 2
  %117 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %116, i64 noundef 64) #9
  %118 = zext i32 %.0219.lcssa to i64
  %119 = shl nuw nsw i64 %118, 2
  %120 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %119, i64 noundef 64) #9
  %121 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %119, i64 noundef 64) #9
  %122 = getelementptr inbounds i32, ptr %117, i64 %39
  store i32 %.0219.lcssa, ptr %122, align 4, !tbaa !20
  br i1 %112, label %.lr.ph307, label %._crit_edge308

.lr.ph307:                                        ; preds = %._crit_edge300
  %123 = icmp sgt i32 %35, 0
  br i1 %123, label %.lr.ph.us, label %.lr.ph307.split.preheader

.lr.ph307.split.preheader:                        ; preds = %.lr.ph307
  %124 = shl nuw nsw i64 %55, 2
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %117, i8 0, i64 %124, i1 false), !tbaa !20
  br label %._crit_edge308

.lr.ph.us:                                        ; preds = %.lr.ph307, %._crit_edge.us309
  %indvars.iv394 = phi i64 [ %indvars.iv.next395, %._crit_edge.us309 ], [ 0, %.lr.ph307 ]
  %.2226305.us = phi i32 [ %.4.us, %._crit_edge.us309 ], [ 0, %.lr.ph307 ]
  %125 = getelementptr inbounds i32, ptr %117, i64 %indvars.iv394
  store i32 %.2226305.us, ptr %125, align 4, !tbaa !20
  %126 = mul nuw nsw i64 %indvars.iv394, %60
  %127 = getelementptr inbounds float, ptr %42, i64 %126
  br label %128

128:                                              ; preds = %.lr.ph.us, %143
  %.3303.us = phi i32 [ %.2226305.us, %.lr.ph.us ], [ %.4.us, %143 ]
  %.3231302.us = phi i32 [ 0, %.lr.ph.us ], [ %144, %143 ]
  %129 = call i32 @libxsmm_nonconst_int(i32 noundef %.3231302.us)
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds float, ptr %127, i64 %130
  %132 = load float, ptr %131, align 4, !tbaa !9
  %133 = fcmp une float %132, 0.000000e+00
  br i1 %133, label %134, label %143

134:                                              ; preds = %128
  %135 = sext i32 %.3303.us to i64
  %136 = getelementptr inbounds i32, ptr %120, i64 %135
  store i32 %.3231302.us, ptr %136, align 4, !tbaa !20
  %137 = call i32 @libxsmm_nonconst_int(i32 noundef %.3231302.us)
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds float, ptr %127, i64 %138
  %140 = load float, ptr %139, align 4, !tbaa !9
  %141 = getelementptr inbounds float, ptr %121, i64 %135
  store float %140, ptr %141, align 4, !tbaa !9
  %142 = add nsw i32 %.3303.us, 1
  br label %143

143:                                              ; preds = %134, %128
  %.4.us = phi i32 [ %142, %134 ], [ %.3303.us, %128 ]
  %144 = add nuw nsw i32 %.3231302.us, 1
  %exitcond393.not = icmp eq i32 %144, %35
  br i1 %exitcond393.not, label %._crit_edge.us309, label %128, !llvm.loop !22

._crit_edge.us309:                                ; preds = %143
  %indvars.iv.next395 = add nuw nsw i64 %indvars.iv394, 1
  %exitcond398.not = icmp eq i64 %indvars.iv.next395, %55
  br i1 %exitcond398.not, label %._crit_edge308, label %.lr.ph.us, !llvm.loop !23

._crit_edge308:                                   ; preds = %._crit_edge.us309, %.lr.ph307.split.preheader, %._crit_edge300
  %145 = call i64 @libxsmm_timer_tick() #9
  %146 = icmp sgt i32 %37, 0
  br i1 %146, label %.preheader270.lr.ph, label %._crit_edge

.preheader270.lr.ph:                              ; preds = %._crit_edge308
  %147 = icmp slt i32 %35, 1
  %148 = icmp slt i32 %36, 1
  %149 = mul nuw i64 %53, %51
  %150 = mul nuw i64 %57, %55
  %.not426 = xor i1 %112, true
  %151 = or i1 %147, %.not426
  %brmerge428 = or i1 %151, %67
  %brmerge430 = select i1 %brmerge428, i1 true, i1 %148
  br i1 %brmerge430, label %._crit_edge, label %.preheader270.us.us.us.us.preheader

.preheader270.us.us.us.us.preheader:              ; preds = %.preheader270.lr.ph
  %wide.trip.count413 = zext nneg i32 %49 to i64
  br label %.preheader270.us.us.us.us

.preheader270.us.us.us.us:                        ; preds = %.preheader270.us.us.us.us.preheader, %._crit_edge322.split.us.split.us.split.us.us.us.us.us
  %.0240332.us.us.us.us = phi i32 [ %178, %._crit_edge322.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader270.us.us.us.us.preheader ]
  br label %.preheader269.us.us.us.us.us.us.us

.preheader269.us.us.us.us.us.us.us:               ; preds = %._crit_edge.split.us.split.us.us.us.us.us.us.us.us, %.preheader270.us.us.us.us
  %indvars.iv410 = phi i64 [ %indvars.iv.next411, %._crit_edge.split.us.split.us.us.us.us.us.us.us.us ], [ 0, %.preheader270.us.us.us.us ]
  %152 = mul nuw nsw i64 %149, %indvars.iv410
  %153 = getelementptr inbounds float, ptr %46, i64 %152
  %154 = mul nuw nsw i64 %150, %indvars.iv410
  %155 = getelementptr inbounds float, ptr %48, i64 %154
  br label %.preheader268.us.us.us.us.us.us.us.us.us

.preheader268.us.us.us.us.us.us.us.us.us:         ; preds = %._crit_edge313.split.us.us.us.us.us.us.us.us.us.us, %.preheader269.us.us.us.us.us.us.us
  %indvars.iv405 = phi i64 [ %indvars.iv.next406, %._crit_edge313.split.us.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader269.us.us.us.us.us.us.us ]
  %156 = mul nuw nsw i64 %indvars.iv405, %57
  %157 = getelementptr inbounds float, ptr %155, i64 %156
  %158 = mul nuw nsw i64 %indvars.iv405, %60
  %159 = getelementptr inbounds float, ptr %42, i64 %158
  br label %.preheader267.us.us.us.us.us.us.us.us.us.us

.preheader267.us.us.us.us.us.us.us.us.us.us:      ; preds = %._crit_edge.us315.us.us.us.us.us.us.us.us.us, %.preheader268.us.us.us.us.us.us.us.us.us
  %indvars.iv400 = phi i64 [ %indvars.iv.next401, %._crit_edge.us315.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader268.us.us.us.us.us.us.us.us.us ]
  %160 = mul nuw nsw i64 %indvars.iv400, %53
  %161 = getelementptr inbounds float, ptr %153, i64 %160
  %162 = trunc nuw nsw i64 %indvars.iv400 to i32
  br label %163

163:                                              ; preds = %163, %.preheader267.us.us.us.us.us.us.us.us.us.us
  %.5311.us.us.us.us.us.us.us.us.us.us = phi i32 [ 0, %.preheader267.us.us.us.us.us.us.us.us.us.us ], [ %177, %163 ]
  %164 = call i32 @libxsmm_nonconst_int(i32 noundef %.5311.us.us.us.us.us.us.us.us.us.us)
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds float, ptr %161, i64 %165
  %167 = load float, ptr %166, align 4, !tbaa !9
  %168 = call i32 @libxsmm_nonconst_int(i32 noundef %.5311.us.us.us.us.us.us.us.us.us.us)
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds float, ptr %157, i64 %169
  %171 = load float, ptr %170, align 4, !tbaa !9
  %172 = call i32 @libxsmm_nonconst_int(i32 noundef %162)
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds float, ptr %159, i64 %173
  %175 = load float, ptr %174, align 4, !tbaa !9
  %176 = call float @llvm.fmuladd.f32(float %167, float %171, float %175)
  store float %176, ptr %174, align 4, !tbaa !9
  %177 = add nuw nsw i32 %.5311.us.us.us.us.us.us.us.us.us.us, 1
  %exitcond399.not = icmp eq i32 %177, %36
  br i1 %exitcond399.not, label %._crit_edge.us315.us.us.us.us.us.us.us.us.us, label %163, !llvm.loop !24

._crit_edge.us315.us.us.us.us.us.us.us.us.us:     ; preds = %163
  %indvars.iv.next401 = add nuw nsw i64 %indvars.iv400, 1
  %exitcond404.not = icmp eq i64 %indvars.iv.next401, %51
  br i1 %exitcond404.not, label %._crit_edge313.split.us.us.us.us.us.us.us.us.us.us, label %.preheader267.us.us.us.us.us.us.us.us.us.us, !llvm.loop !25

._crit_edge313.split.us.us.us.us.us.us.us.us.us.us: ; preds = %._crit_edge.us315.us.us.us.us.us.us.us.us.us
  %indvars.iv.next406 = add nuw nsw i64 %indvars.iv405, 1
  %exitcond409.not = icmp eq i64 %indvars.iv.next406, %55
  br i1 %exitcond409.not, label %._crit_edge.split.us.split.us.us.us.us.us.us.us.us, label %.preheader268.us.us.us.us.us.us.us.us.us, !llvm.loop !26

._crit_edge.split.us.split.us.us.us.us.us.us.us.us: ; preds = %._crit_edge313.split.us.us.us.us.us.us.us.us.us.us
  %indvars.iv.next411 = add nuw nsw i64 %indvars.iv410, 1
  %exitcond414.not = icmp eq i64 %indvars.iv.next411, %wide.trip.count413
  br i1 %exitcond414.not, label %._crit_edge322.split.us.split.us.split.us.us.us.us.us, label %.preheader269.us.us.us.us.us.us.us, !llvm.loop !27

._crit_edge322.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge.split.us.split.us.us.us.us.us.us.us.us
  %178 = add nuw nsw i32 %.0240332.us.us.us.us, 1
  %exitcond415.not = icmp eq i32 %178, %37
  br i1 %exitcond415.not, label %._crit_edge, label %.preheader270.us.us.us.us, !llvm.loop !28

._crit_edge:                                      ; preds = %._crit_edge322.split.us.split.us.split.us.us.us.us.us, %.preheader270.lr.ph, %._crit_edge308
  %179 = call i64 @libxsmm_timer_tick() #9
  %180 = call double @libxsmm_timer_duration(i64 noundef %145, i64 noundef %179) #9
  %181 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, double noundef %180)
  %182 = uitofp i32 %37 to double
  %183 = sitofp i32 %34 to double
  %184 = fmul double %183, %182
  %185 = sitofp i32 %35 to double
  %186 = fmul double %184, %185
  %187 = sitofp i32 %33 to double
  %188 = fmul double %186, %187
  %189 = fmul double %188, 2.000000e+00
  %190 = fmul double %180, 1.000000e+09
  %191 = fdiv double %189, %190
  %192 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %191)
  %193 = 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 %117, ptr noundef %120, ptr noundef %121) #9
  %194 = getelementptr inbounds i8, ptr %4, i64 32
  store ptr %46, ptr %194, align 8, !tbaa !29
  %195 = getelementptr inbounds i8, ptr %4, i64 80
  store ptr %48, ptr %195, align 8, !tbaa !33
  %196 = getelementptr inbounds i8, ptr %4, i64 128
  store ptr %121, ptr %196, align 8, !tbaa !34
  %197 = call i64 @libxsmm_timer_tick() #9
  br i1 %146, label %.lr.ph, label %._crit_edge347

.lr.ph:                                           ; preds = %._crit_edge, %.lr.ph
  %.1241345 = phi i32 [ %198, %.lr.ph ], [ 0, %._crit_edge ]
  call void %193(ptr noundef nonnull %4) #9
  %198 = add nuw nsw i32 %.1241345, 1
  %exitcond416.not = icmp eq i32 %198, %37
  br i1 %exitcond416.not, label %._crit_edge347, label %.lr.ph, !llvm.loop !35

._crit_edge347:                                   ; preds = %.lr.ph, %._crit_edge
  %199 = call i64 @libxsmm_timer_tick() #9
  %200 = call double @libxsmm_timer_duration(i64 noundef %197, i64 noundef %199) #9
  %201 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %200)
  %202 = fmul double %200, 1.000000e+09
  %203 = fdiv double %189, %202
  %204 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %203)
  br i1 %112, label %.preheader.preheader, label %._crit_edge354

.preheader.preheader:                             ; preds = %._crit_edge347
  %.pre = load i32, ptr %117, align 4, !tbaa !20
  br label %.preheader

.loopexit:                                        ; preds = %246, %.preheader
  %205 = phi i32 [ %209, %.preheader ], [ %249, %246 ]
  %.1222.lcssa = phi float [ %.0221353, %.preheader ], [ %.2223, %246 ]
  %exitcond421.not = icmp eq i64 %indvars.iv.next418, %55
  br i1 %exitcond421.not, label %._crit_edge354.loopexit, label %.preheader, !llvm.loop !36

.preheader:                                       ; preds = %.preheader.preheader, %.loopexit
  %206 = phi i32 [ %.pre, %.preheader.preheader ], [ %205, %.loopexit ]
  %indvars.iv417 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next418, %.loopexit ]
  %.0221353 = phi float [ 0.000000e+00, %.preheader.preheader ], [ %.1222.lcssa, %.loopexit ]
  %indvars.iv.next418 = add nuw nsw i64 %indvars.iv417, 1
  %207 = getelementptr inbounds i32, ptr %117, i64 %indvars.iv.next418
  %208 = getelementptr inbounds i32, ptr %117, i64 %indvars.iv417
  %209 = load i32, ptr %207, align 4, !tbaa !20
  %210 = sub i32 %209, %206
  %211 = icmp sgt i32 %210, 0
  br i1 %211, label %.lr.ph350, label %.loopexit

.lr.ph350:                                        ; preds = %.preheader
  %212 = mul nuw nsw i64 %indvars.iv417, %60
  %213 = getelementptr inbounds float, ptr %42, i64 %212
  br label %214

214:                                              ; preds = %.lr.ph350, %246
  %215 = phi i32 [ %206, %.lr.ph350 ], [ %247, %246 ]
  %.1222349 = phi float [ %.0221353, %.lr.ph350 ], [ %.2223, %246 ]
  %.5233348 = phi i32 [ 0, %.lr.ph350 ], [ %248, %246 ]
  %216 = add i32 %215, %.5233348
  %217 = zext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %120, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !20
  %220 = call i32 @libxsmm_nonconst_int(i32 noundef %219)
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds float, ptr %213, i64 %221
  %223 = load float, ptr %222, align 4, !tbaa !9
  %224 = load i32, ptr %208, align 4, !tbaa !20
  %225 = add i32 %224, %.5233348
  %226 = zext i32 %225 to i64
  %227 = getelementptr inbounds float, ptr %121, i64 %226
  %228 = load float, ptr %227, align 4, !tbaa !9
  %229 = fsub float %223, %228
  %230 = call float @llvm.fabs.f32(float %229)
  %231 = fcmp ogt float %230, %.1222349
  br i1 %231, label %232, label %246

232:                                              ; preds = %214
  %233 = getelementptr inbounds i32, ptr %120, i64 %226
  %234 = load i32, ptr %233, align 4, !tbaa !20
  %235 = call i32 @libxsmm_nonconst_int(i32 noundef %234)
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds float, ptr %213, i64 %236
  %238 = load float, ptr %237, align 4, !tbaa !9
  %239 = load i32, ptr %208, align 4, !tbaa !20
  %240 = add i32 %239, %.5233348
  %241 = zext i32 %240 to i64
  %242 = getelementptr inbounds float, ptr %121, i64 %241
  %243 = load float, ptr %242, align 4, !tbaa !9
  %244 = fsub float %238, %243
  %245 = call float @llvm.fabs.f32(float %244)
  br label %246

246:                                              ; preds = %214, %232
  %247 = phi i32 [ %239, %232 ], [ %224, %214 ]
  %.2223 = phi float [ %245, %232 ], [ %.1222349, %214 ]
  %248 = add nuw nsw i32 %.5233348, 1
  %249 = load i32, ptr %207, align 4, !tbaa !20
  %250 = sub i32 %249, %247
  %251 = icmp slt i32 %248, %250
  br i1 %251, label %214, label %.loopexit, !llvm.loop !37

._crit_edge354.loopexit:                          ; preds = %.loopexit
  %252 = fpext float %.1222.lcssa to double
  br label %._crit_edge354

._crit_edge354:                                   ; preds = %._crit_edge354.loopexit, %._crit_edge347
  %.0221.lcssa = phi double [ 0.000000e+00, %._crit_edge347 ], [ %252, %._crit_edge354.loopexit ]
  %253 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %.0221.lcssa)
  call void @libxsmm_free(ptr noundef %42) #9
  call void @libxsmm_free(ptr noundef %46) #9
  call void @libxsmm_free(ptr noundef %48) #9
  call void @libxsmm_free(ptr noundef %121) #9
  call void @libxsmm_free(ptr noundef %117) #9
  call void @libxsmm_free(ptr noundef %120) #9
  br label %254

254:                                              ; preds = %._crit_edge354, %82, %62
  %.0220 = phi i32 [ -1, %62 ], [ -1, %82 ], [ 0, %._crit_edge354 ]
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #9
  ret i32 %.0220
}

; 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

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

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

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: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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

declare double @libxsmm_rng_f64() local_unnamed_addr #3

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

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

declare i64 @libxsmm_timer_tick() local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #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 nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #7

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #3

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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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 #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind willreturn memory(read) }
attributes #9 = { nounwind }
attributes #10 = { cold 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 = !{!"float", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = distinct !{!14, !12}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = !{!21, !21, i64 0}
!21 = !{!"int", !7, i64 0}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = !{!30, !6, i64 32}
!30 = !{!"libxsmm_gemm_param", !31, i64 0, !32, i64 32, !32, i64 80, !32, i64 128}
!31 = !{!"libxsmm_matrix_op_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!32 = !{!"libxsmm_matrix_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!33 = !{!30, !6, i64 80}
!34 = !{!30, !6, i64 128}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}


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