; LLVM IR from libxsmm/libxsmm :: samples/deeplearning/vnni_pack (vnni_pack)

; 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_matdiff_info = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32 }
%struct.libxsmm_meltw_unary_shape = type { i32, i32, i32, i32, i32, i32, i32 }

@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [53 x i8], align 1

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

; 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 uwtable
declare hidden i32 @libxsmm_nonconst_int(i32 noundef) #2

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

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

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

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

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

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

; 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 i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %struct.libxsmm_matdiff_info, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca double, align 8
  %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 %struct.libxsmm_meltw_unary_shape, align 8
  %29 = alloca ptr, align 8
  %30 = alloca %struct.libxsmm_meltw_unary_shape, align 8
  %31 = alloca ptr, 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) #5
  %32 = load i32, ptr %4, align 4, !tbaa !5
  %33 = icmp sgt i32 %32, 1
  br i1 %33, label %34, label %39

34:                                               ; preds = %2
  %35 = load ptr, ptr %5, align 8, !tbaa !9
  %36 = getelementptr inbounds ptr, ptr %35, i64 1
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  %38 = call i32 @atoi(ptr noundef %37) #6
  br label %40

39:                                               ; preds = %2
  br label %40

40:                                               ; preds = %39, %34
  %41 = phi i32 [ %38, %34 ], [ 20, %39 ]
  store i32 %41, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %42 = load i32, ptr %4, align 4, !tbaa !5
  %43 = icmp sgt i32 %42, 2
  br i1 %43, label %44, label %49

44:                                               ; preds = %40
  %45 = load ptr, ptr %5, align 8, !tbaa !9
  %46 = getelementptr inbounds ptr, ptr %45, i64 2
  %47 = load ptr, ptr %46, align 8, !tbaa !9
  %48 = call i32 @atoi(ptr noundef %47) #6
  br label %50

49:                                               ; preds = %40
  br label %50

50:                                               ; preds = %49, %44
  %51 = phi i32 [ %48, %44 ], [ 1024, %49 ]
  store i32 %51, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  %52 = load i32, ptr %4, align 4, !tbaa !5
  %53 = icmp sgt i32 %52, 3
  br i1 %53, label %54, label %59

54:                                               ; preds = %50
  %55 = load ptr, ptr %5, align 8, !tbaa !9
  %56 = getelementptr inbounds ptr, ptr %55, i64 3
  %57 = load ptr, ptr %56, align 8, !tbaa !9
  %58 = call i32 @atoi(ptr noundef %57) #6
  br label %60

59:                                               ; preds = %50
  br label %60

60:                                               ; preds = %59, %54
  %61 = phi i32 [ %58, %54 ], [ 2048, %59 ]
  store i32 %61, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  %62 = load i32, ptr %4, align 4, !tbaa !5
  %63 = icmp sgt i32 %62, 4
  br i1 %63, label %64, label %69

64:                                               ; preds = %60
  %65 = load ptr, ptr %5, align 8, !tbaa !9
  %66 = getelementptr inbounds ptr, ptr %65, i64 4
  %67 = load ptr, ptr %66, align 8, !tbaa !9
  %68 = call i32 @atoi(ptr noundef %67) #6
  br label %70

69:                                               ; preds = %60
  br label %70

70:                                               ; preds = %69, %64
  %71 = phi i32 [ %68, %64 ], [ 32, %69 ]
  store i32 %71, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %72 = load i32, ptr %4, align 4, !tbaa !5
  %73 = icmp sgt i32 %72, 5
  br i1 %73, label %74, label %79

74:                                               ; preds = %70
  %75 = load ptr, ptr %5, align 8, !tbaa !9
  %76 = getelementptr inbounds ptr, ptr %75, i64 5
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = call i32 @atoi(ptr noundef %77) #6
  br label %80

79:                                               ; preds = %70
  br label %80

80:                                               ; preds = %79, %74
  %81 = phi i32 [ %78, %74 ], [ 32, %79 ]
  store i32 %81, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %82 = load i32, ptr %4, align 4, !tbaa !5
  %83 = icmp sgt i32 %82, 6
  br i1 %83, label %84, label %89

84:                                               ; preds = %80
  %85 = load ptr, ptr %5, align 8, !tbaa !9
  %86 = getelementptr inbounds ptr, ptr %85, i64 6
  %87 = load ptr, ptr %86, align 8, !tbaa !9
  %88 = call i32 @atoi(ptr noundef %87) #6
  br label %90

89:                                               ; preds = %80
  br label %90

90:                                               ; preds = %89, %84
  %91 = phi i32 [ %88, %84 ], [ 1000, %89 ]
  store i32 %91, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %92 = call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef 2)
  store i32 %92, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 192, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  store double 0.000000e+00, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %93 = load i32, ptr %11, align 4, !tbaa !5
  %94 = sitofp i32 %93 to double
  %95 = load i32, ptr %6, align 4, !tbaa !5
  %96 = sitofp i32 %95 to double
  %97 = fmul double %94, %96
  %98 = load i32, ptr %8, align 4, !tbaa !5
  %99 = sitofp i32 %98 to double
  %100 = fmul double %97, %99
  %101 = load i32, ptr %7, align 4, !tbaa !5
  %102 = sitofp i32 %101 to double
  %103 = fmul double %100, %102
  %104 = fmul double %103, 2.000000e+00
  %105 = fdiv double %104, 0x41D0000000000000
  store double %105, ptr %18, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %106 = load i32, ptr %6, align 4, !tbaa !5
  %107 = sext i32 %106 to i64
  %108 = mul i64 2, %107
  %109 = load i32, ptr %7, align 4, !tbaa !5
  %110 = sext i32 %109 to i64
  %111 = mul i64 %108, %110
  %112 = load i32, ptr %8, align 4, !tbaa !5
  %113 = sext i32 %112 to i64
  %114 = mul i64 %111, %113
  %115 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %114, i64 noundef 64)
  store ptr %115, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %116 = load i32, ptr %6, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = mul i64 4, %117
  %119 = load i32, ptr %7, align 4, !tbaa !5
  %120 = sext i32 %119 to i64
  %121 = mul i64 %118, %120
  %122 = load i32, ptr %8, align 4, !tbaa !5
  %123 = sext i32 %122 to i64
  %124 = mul i64 %121, %123
  %125 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %124, i64 noundef 64)
  store ptr %125, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %126 = load i32, ptr %6, align 4, !tbaa !5
  %127 = sext i32 %126 to i64
  %128 = mul i64 2, %127
  %129 = load i32, ptr %7, align 4, !tbaa !5
  %130 = sext i32 %129 to i64
  %131 = mul i64 %128, %130
  %132 = load i32, ptr %8, align 4, !tbaa !5
  %133 = sext i32 %132 to i64
  %134 = mul i64 %131, %133
  %135 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %134, i64 noundef 64)
  store ptr %135, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %136 = load i32, ptr %6, align 4, !tbaa !5
  %137 = sext i32 %136 to i64
  %138 = mul i64 2, %137
  %139 = load i32, ptr %7, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %141 = mul i64 %138, %140
  %142 = load i32, ptr %8, align 4, !tbaa !5
  %143 = sext i32 %142 to i64
  %144 = mul i64 %141, %143
  %145 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %144, i64 noundef 64)
  store ptr %145, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %146 = load i32, ptr %6, align 4, !tbaa !5
  %147 = sext i32 %146 to i64
  %148 = mul i64 4, %147
  %149 = load i32, ptr %7, align 4, !tbaa !5
  %150 = sext i32 %149 to i64
  %151 = mul i64 %148, %150
  %152 = load i32, ptr %8, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = mul i64 %151, %153
  %155 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %154, i64 noundef 64)
  store ptr %155, ptr %26, align 8, !tbaa !9
  %156 = load i32, ptr %7, align 4, !tbaa !5
  %157 = zext i32 %156 to i64
  %158 = load i32, ptr %8, align 4, !tbaa !5
  %159 = call i32 @libxsmm_nonconst_int(i32 noundef %158)
  %160 = zext i32 %159 to i64
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %161 = load i32, ptr %7, align 4, !tbaa !5
  %162 = zext i32 %161 to i64
  %163 = load i32, ptr %8, align 4, !tbaa !5
  %164 = call i32 @libxsmm_nonconst_int(i32 noundef %163)
  %165 = zext i32 %164 to i64
  %166 = load ptr, ptr %23, align 8, !tbaa !9
  store ptr %166, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 28, ptr %28) #5
  %167 = load i32, ptr %10, align 4, !tbaa !5
  %168 = load i32, ptr %9, align 4, !tbaa !5
  %169 = load i32, ptr %8, align 4, !tbaa !5
  %170 = load i32, ptr %10, align 4, !tbaa !5
  call void @libxsmm_create_meltw_unary_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_meltw_unary_shape) align 4 %28, i32 noundef %167, i32 noundef %168, i32 noundef %169, i32 noundef %170, i32 noundef 2, i32 noundef 2, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 28, ptr %30) #5
  %171 = load i32, ptr %10, align 4, !tbaa !5
  %172 = load i32, ptr %9, align 4, !tbaa !5
  %173 = load i32, ptr %10, align 4, !tbaa !5
  %174 = load i32, ptr %10, align 4, !tbaa !5
  call void @libxsmm_create_meltw_unary_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_meltw_unary_shape) align 4 %30, i32 noundef %171, i32 noundef %172, i32 noundef %173, i32 noundef %174, i32 noundef 2, i32 noundef 2, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @libxsmm_matdiff_clear(ptr noundef %16)
  %175 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %176 = load i32, ptr %6, align 4, !tbaa !5
  %177 = load i32, ptr %7, align 4, !tbaa !5
  %178 = load i32, ptr %8, align 4, !tbaa !5
  %179 = load i32, ptr %9, align 4, !tbaa !5
  %180 = load i32, ptr %10, align 4, !tbaa !5
  %181 = load i32, ptr %15, align 4, !tbaa !5
  %182 = load i32, ptr %7, align 4, !tbaa !5
  %183 = load i32, ptr %9, align 4, !tbaa !5
  %184 = sdiv i32 %182, %183
  %185 = load i32, ptr %8, align 4, !tbaa !5
  %186 = load i32, ptr %10, align 4, !tbaa !5
  %187 = sdiv i32 %185, %186
  %188 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %176, i32 noundef %177, i32 noundef %178, i32 noundef %179, i32 noundef %180, i32 noundef %181, i32 noundef %184, i32 noundef %187)
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %240, %90
  %190 = load i32, ptr %12, align 4, !tbaa !5
  %191 = load i32, ptr %6, align 4, !tbaa !5
  %192 = icmp slt i32 %190, %191
  br i1 %192, label %193, label %243

193:                                              ; preds = %189
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %194

194:                                              ; preds = %236, %193
  %195 = load i32, ptr %13, align 4, !tbaa !5
  %196 = load i32, ptr %7, align 4, !tbaa !5
  %197 = icmp slt i32 %195, %196
  br i1 %197, label %198, label %239

198:                                              ; preds = %194
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %199

199:                                              ; preds = %232, %198
  %200 = load i32, ptr %14, align 4, !tbaa !5
  %201 = load i32, ptr %8, align 4, !tbaa !5
  %202 = icmp slt i32 %200, %201
  br i1 %202, label %203, label %235

203:                                              ; preds = %199
  %204 = call double @libxsmm_rng_f64()
  %205 = fptrunc double %204 to float
  %206 = load ptr, ptr %27, align 8, !tbaa !9
  %207 = load i32, ptr %7, align 4, !tbaa !5
  %208 = mul nsw i32 0, %207
  %209 = sext i32 %208 to i64
  %210 = mul nuw i64 %157, %160
  %211 = mul nsw i64 %209, %210
  %212 = getelementptr inbounds float, ptr %206, i64 %211
  %213 = load i32, ptr %8, align 4, !tbaa !5
  %214 = mul nsw i32 0, %213
  %215 = sext i32 %214 to i64
  %216 = mul nuw i64 %157, %160
  %217 = mul nsw i64 %215, %216
  %218 = getelementptr inbounds float, ptr %212, i64 %217
  %219 = load i32, ptr %12, align 4, !tbaa !5
  %220 = sext i32 %219 to i64
  %221 = mul nuw i64 %157, %160
  %222 = mul nsw i64 %220, %221
  %223 = getelementptr inbounds float, ptr %218, i64 %222
  %224 = load i32, ptr %13, align 4, !tbaa !5
  %225 = sext i32 %224 to i64
  %226 = mul nsw i64 %225, %160
  %227 = getelementptr inbounds float, ptr %223, i64 %226
  %228 = load i32, ptr %14, align 4, !tbaa !5
  %229 = call i32 @libxsmm_nonconst_int(i32 noundef %228)
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds float, ptr %227, i64 %230
  store float %205, ptr %231, align 4, !tbaa !13
  br label %232

232:                                              ; preds = %203
  %233 = load i32, ptr %14, align 4, !tbaa !5
  %234 = add nsw i32 %233, 1
  store i32 %234, ptr %14, align 4, !tbaa !5
  br label %199, !llvm.loop !15

235:                                              ; preds = %199
  br label %236

236:                                              ; preds = %235
  %237 = load i32, ptr %13, align 4, !tbaa !5
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %13, align 4, !tbaa !5
  br label %194, !llvm.loop !17

239:                                              ; preds = %194
  br label %240

240:                                              ; preds = %239
  %241 = load i32, ptr %12, align 4, !tbaa !5
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %12, align 4, !tbaa !5
  br label %189, !llvm.loop !18

243:                                              ; preds = %189
  %244 = load ptr, ptr %23, align 8, !tbaa !9
  %245 = load ptr, ptr %22, align 8, !tbaa !9
  %246 = load i32, ptr %6, align 4, !tbaa !5
  %247 = load i32, ptr %7, align 4, !tbaa !5
  %248 = mul nsw i32 %246, %247
  %249 = load i32, ptr %8, align 4, !tbaa !5
  %250 = mul nsw i32 %248, %249
  %251 = sext i32 %250 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %244, ptr noundef %245, i64 noundef %251)
  %252 = load ptr, ptr %22, align 8, !tbaa !9
  %253 = load ptr, ptr %23, align 8, !tbaa !9
  %254 = load i32, ptr %6, align 4, !tbaa !5
  %255 = load i32, ptr %7, align 4, !tbaa !5
  %256 = mul nsw i32 %254, %255
  %257 = load i32, ptr %8, align 4, !tbaa !5
  %258 = mul nsw i32 %256, %257
  %259 = sext i32 %258 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %252, ptr noundef %253, i64 noundef %259)
  %260 = call ptr @libxsmm_dispatch_meltw_unary(i32 noundef 28, ptr noundef byval(%struct.libxsmm_meltw_unary_shape) align 8 %28, i32 noundef 0)
  store ptr %260, ptr %29, align 8, !tbaa !9
  %261 = call ptr @libxsmm_dispatch_meltw_unary(i32 noundef 1, ptr noundef byval(%struct.libxsmm_meltw_unary_shape) align 8 %30, i32 noundef 0)
  store ptr %261, ptr %31, align 8, !tbaa !9
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %262

262:                                              ; preds = %288, %243
  %263 = load i32, ptr %12, align 4, !tbaa !5
  %264 = load i32, ptr %6, align 4, !tbaa !5
  %265 = icmp slt i32 %263, %264
  br i1 %265, label %266, label %291

266:                                              ; preds = %262
  %267 = load ptr, ptr %22, align 8, !tbaa !9
  %268 = load i32, ptr %12, align 4, !tbaa !5
  %269 = load i32, ptr %7, align 4, !tbaa !5
  %270 = mul nsw i32 %268, %269
  %271 = load i32, ptr %8, align 4, !tbaa !5
  %272 = mul nsw i32 %270, %271
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i16, ptr %267, i64 %273
  %275 = load ptr, ptr %24, align 8, !tbaa !9
  %276 = load i32, ptr %12, align 4, !tbaa !5
  %277 = load i32, ptr %7, align 4, !tbaa !5
  %278 = mul nsw i32 %276, %277
  %279 = load i32, ptr %8, align 4, !tbaa !5
  %280 = mul nsw i32 %278, %279
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i16, ptr %275, i64 %281
  %283 = load i32, ptr %7, align 4, !tbaa !5
  %284 = load i32, ptr %8, align 4, !tbaa !5
  %285 = load i32, ptr %9, align 4, !tbaa !5
  %286 = load i32, ptr %10, align 4, !tbaa !5
  %287 = load i32, ptr %15, align 4, !tbaa !5
  call void @pack_c(ptr noundef %274, ptr noundef %282, i32 noundef %283, i32 noundef %284, i32 noundef %285, i32 noundef %286, i32 noundef %287)
  br label %288

288:                                              ; preds = %266
  %289 = load i32, ptr %12, align 4, !tbaa !5
  %290 = add nsw i32 %289, 1
  store i32 %290, ptr %12, align 4, !tbaa !5
  br label %262, !llvm.loop !19

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

292:                                              ; preds = %318, %291
  %293 = load i32, ptr %12, align 4, !tbaa !5
  %294 = load i32, ptr %6, align 4, !tbaa !5
  %295 = icmp slt i32 %293, %294
  br i1 %295, label %296, label %321

296:                                              ; preds = %292
  %297 = load ptr, ptr %24, align 8, !tbaa !9
  %298 = load i32, ptr %12, align 4, !tbaa !5
  %299 = load i32, ptr %7, align 4, !tbaa !5
  %300 = mul nsw i32 %298, %299
  %301 = load i32, ptr %8, align 4, !tbaa !5
  %302 = mul nsw i32 %300, %301
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds i16, ptr %297, i64 %303
  %305 = load ptr, ptr %25, align 8, !tbaa !9
  %306 = load i32, ptr %12, align 4, !tbaa !5
  %307 = load i32, ptr %7, align 4, !tbaa !5
  %308 = mul nsw i32 %306, %307
  %309 = load i32, ptr %8, align 4, !tbaa !5
  %310 = mul nsw i32 %308, %309
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds i16, ptr %305, i64 %311
  %313 = load i32, ptr %7, align 4, !tbaa !5
  %314 = load i32, ptr %8, align 4, !tbaa !5
  %315 = load i32, ptr %9, align 4, !tbaa !5
  %316 = load i32, ptr %10, align 4, !tbaa !5
  %317 = load i32, ptr %15, align 4, !tbaa !5
  call void @unpack_c(ptr noundef %304, ptr noundef %312, i32 noundef %313, i32 noundef %314, i32 noundef %315, i32 noundef %316, i32 noundef %317)
  br label %318

318:                                              ; preds = %296
  %319 = load i32, ptr %12, align 4, !tbaa !5
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %12, align 4, !tbaa !5
  br label %292, !llvm.loop !20

321:                                              ; preds = %292
  %322 = load ptr, ptr %25, align 8, !tbaa !9
  %323 = load ptr, ptr %26, align 8, !tbaa !9
  %324 = load i32, ptr %6, align 4, !tbaa !5
  %325 = load i32, ptr %7, align 4, !tbaa !5
  %326 = mul nsw i32 %324, %325
  %327 = load i32, ptr %8, align 4, !tbaa !5
  %328 = mul nsw i32 %326, %327
  %329 = sext i32 %328 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %322, ptr noundef %323, i64 noundef %329)
  call void @libxsmm_matdiff_clear(ptr noundef %16)
  %330 = load i32, ptr %8, align 4, !tbaa !5
  %331 = load i32, ptr %6, align 4, !tbaa !5
  %332 = load i32, ptr %7, align 4, !tbaa !5
  %333 = mul nsw i32 %331, %332
  %334 = load ptr, ptr %26, align 8, !tbaa !9
  %335 = load ptr, ptr %23, align 8, !tbaa !9
  %336 = call i32 @libxsmm_matdiff(ptr noundef %16, i32 noundef 1, i32 noundef %330, i32 noundef %333, ptr noundef %334, ptr noundef %335, ptr noundef %8, ptr noundef %8)
  %337 = call double @libxsmm_matdiff_epsilon(ptr noundef %16)
  store double %337, ptr %17, align 8, !tbaa !11
  %338 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  %339 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 10
  %340 = load double, ptr %339, align 8, !tbaa !21
  %341 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %340)
  %342 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 15
  %343 = load double, ptr %342, align 8, !tbaa !23
  %344 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %343)
  %345 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 7
  %346 = load double, ptr %345, align 8, !tbaa !24
  %347 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %346)
  %348 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 8
  %349 = load double, ptr %348, align 8, !tbaa !25
  %350 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %349)
  %351 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 5
  %352 = load double, ptr %351, align 8, !tbaa !26
  %353 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %352)
  %354 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 6
  %355 = load double, ptr %354, align 8, !tbaa !27
  %356 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %355)
  %357 = load double, ptr %17, align 8, !tbaa !11
  %358 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %357)
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %359

359:                                              ; preds = %386, %321
  %360 = load i32, ptr %12, align 4, !tbaa !5
  %361 = load i32, ptr %6, align 4, !tbaa !5
  %362 = icmp slt i32 %360, %361
  br i1 %362, label %363, label %389

363:                                              ; preds = %359
  %364 = load ptr, ptr %22, align 8, !tbaa !9
  %365 = load i32, ptr %12, align 4, !tbaa !5
  %366 = load i32, ptr %7, align 4, !tbaa !5
  %367 = mul nsw i32 %365, %366
  %368 = load i32, ptr %8, align 4, !tbaa !5
  %369 = mul nsw i32 %367, %368
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds i16, ptr %364, i64 %370
  %372 = load ptr, ptr %24, align 8, !tbaa !9
  %373 = load i32, ptr %12, align 4, !tbaa !5
  %374 = load i32, ptr %7, align 4, !tbaa !5
  %375 = mul nsw i32 %373, %374
  %376 = load i32, ptr %8, align 4, !tbaa !5
  %377 = mul nsw i32 %375, %376
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds i16, ptr %372, i64 %378
  %380 = load i32, ptr %7, align 4, !tbaa !5
  %381 = load i32, ptr %8, align 4, !tbaa !5
  %382 = load i32, ptr %9, align 4, !tbaa !5
  %383 = load i32, ptr %10, align 4, !tbaa !5
  %384 = load i32, ptr %15, align 4, !tbaa !5
  %385 = load ptr, ptr %31, align 8, !tbaa !9
  call void @pack_tpp_identity(ptr noundef %371, ptr noundef %379, i32 noundef %380, i32 noundef %381, i32 noundef %382, i32 noundef %383, i32 noundef %384, ptr noundef %385)
  br label %386

386:                                              ; preds = %363
  %387 = load i32, ptr %12, align 4, !tbaa !5
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %12, align 4, !tbaa !5
  br label %359, !llvm.loop !28

389:                                              ; preds = %359
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %390

390:                                              ; preds = %416, %389
  %391 = load i32, ptr %12, align 4, !tbaa !5
  %392 = load i32, ptr %6, align 4, !tbaa !5
  %393 = icmp slt i32 %391, %392
  br i1 %393, label %394, label %419

394:                                              ; preds = %390
  %395 = load ptr, ptr %24, align 8, !tbaa !9
  %396 = load i32, ptr %12, align 4, !tbaa !5
  %397 = load i32, ptr %7, align 4, !tbaa !5
  %398 = mul nsw i32 %396, %397
  %399 = load i32, ptr %8, align 4, !tbaa !5
  %400 = mul nsw i32 %398, %399
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds i16, ptr %395, i64 %401
  %403 = load ptr, ptr %25, align 8, !tbaa !9
  %404 = load i32, ptr %12, align 4, !tbaa !5
  %405 = load i32, ptr %7, align 4, !tbaa !5
  %406 = mul nsw i32 %404, %405
  %407 = load i32, ptr %8, align 4, !tbaa !5
  %408 = mul nsw i32 %406, %407
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i16, ptr %403, i64 %409
  %411 = load i32, ptr %7, align 4, !tbaa !5
  %412 = load i32, ptr %8, align 4, !tbaa !5
  %413 = load i32, ptr %9, align 4, !tbaa !5
  %414 = load i32, ptr %10, align 4, !tbaa !5
  %415 = load i32, ptr %15, align 4, !tbaa !5
  call void @unpack_tpp_identity(ptr noundef %402, ptr noundef %410, i32 noundef %411, i32 noundef %412, i32 noundef %413, i32 noundef %414, i32 noundef %415)
  br label %416

416:                                              ; preds = %394
  %417 = load i32, ptr %12, align 4, !tbaa !5
  %418 = add nsw i32 %417, 1
  store i32 %418, ptr %12, align 4, !tbaa !5
  br label %390, !llvm.loop !29

419:                                              ; preds = %390
  %420 = load ptr, ptr %25, align 8, !tbaa !9
  %421 = load ptr, ptr %26, align 8, !tbaa !9
  %422 = load i32, ptr %6, align 4, !tbaa !5
  %423 = load i32, ptr %7, align 4, !tbaa !5
  %424 = mul nsw i32 %422, %423
  %425 = load i32, ptr %8, align 4, !tbaa !5
  %426 = mul nsw i32 %424, %425
  %427 = sext i32 %426 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %420, ptr noundef %421, i64 noundef %427)
  call void @libxsmm_matdiff_clear(ptr noundef %16)
  %428 = load i32, ptr %8, align 4, !tbaa !5
  %429 = load i32, ptr %6, align 4, !tbaa !5
  %430 = load i32, ptr %7, align 4, !tbaa !5
  %431 = mul nsw i32 %429, %430
  %432 = load ptr, ptr %26, align 8, !tbaa !9
  %433 = load ptr, ptr %23, align 8, !tbaa !9
  %434 = call i32 @libxsmm_matdiff(ptr noundef %16, i32 noundef 1, i32 noundef %428, i32 noundef %431, ptr noundef %432, ptr noundef %433, ptr noundef %8, ptr noundef %8)
  %435 = call double @libxsmm_matdiff_epsilon(ptr noundef %16)
  store double %435, ptr %17, align 8, !tbaa !11
  %436 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  %437 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 10
  %438 = load double, ptr %437, align 8, !tbaa !21
  %439 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %438)
  %440 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 15
  %441 = load double, ptr %440, align 8, !tbaa !23
  %442 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %441)
  %443 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 7
  %444 = load double, ptr %443, align 8, !tbaa !24
  %445 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %444)
  %446 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 8
  %447 = load double, ptr %446, align 8, !tbaa !25
  %448 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %447)
  %449 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 5
  %450 = load double, ptr %449, align 8, !tbaa !26
  %451 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %450)
  %452 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 6
  %453 = load double, ptr %452, align 8, !tbaa !27
  %454 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %453)
  %455 = load double, ptr %17, align 8, !tbaa !11
  %456 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %455)
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %457

457:                                              ; preds = %484, %419
  %458 = load i32, ptr %12, align 4, !tbaa !5
  %459 = load i32, ptr %6, align 4, !tbaa !5
  %460 = icmp slt i32 %458, %459
  br i1 %460, label %461, label %487

461:                                              ; preds = %457
  %462 = load ptr, ptr %22, align 8, !tbaa !9
  %463 = load i32, ptr %12, align 4, !tbaa !5
  %464 = load i32, ptr %7, align 4, !tbaa !5
  %465 = mul nsw i32 %463, %464
  %466 = load i32, ptr %8, align 4, !tbaa !5
  %467 = mul nsw i32 %465, %466
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds i16, ptr %462, i64 %468
  %470 = load ptr, ptr %24, align 8, !tbaa !9
  %471 = load i32, ptr %12, align 4, !tbaa !5
  %472 = load i32, ptr %7, align 4, !tbaa !5
  %473 = mul nsw i32 %471, %472
  %474 = load i32, ptr %8, align 4, !tbaa !5
  %475 = mul nsw i32 %473, %474
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds i16, ptr %470, i64 %476
  %478 = load i32, ptr %7, align 4, !tbaa !5
  %479 = load i32, ptr %8, align 4, !tbaa !5
  %480 = load i32, ptr %9, align 4, !tbaa !5
  %481 = load i32, ptr %10, align 4, !tbaa !5
  %482 = load i32, ptr %15, align 4, !tbaa !5
  %483 = load ptr, ptr %29, align 8, !tbaa !9
  call void @pack_tpp_normtovnni(ptr noundef %469, ptr noundef %477, i32 noundef %478, i32 noundef %479, i32 noundef %480, i32 noundef %481, i32 noundef %482, ptr noundef %483)
  br label %484

484:                                              ; preds = %461
  %485 = load i32, ptr %12, align 4, !tbaa !5
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %12, align 4, !tbaa !5
  br label %457, !llvm.loop !30

487:                                              ; preds = %457
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %488

488:                                              ; preds = %514, %487
  %489 = load i32, ptr %12, align 4, !tbaa !5
  %490 = load i32, ptr %6, align 4, !tbaa !5
  %491 = icmp slt i32 %489, %490
  br i1 %491, label %492, label %517

492:                                              ; preds = %488
  %493 = load ptr, ptr %24, align 8, !tbaa !9
  %494 = load i32, ptr %12, align 4, !tbaa !5
  %495 = load i32, ptr %7, align 4, !tbaa !5
  %496 = mul nsw i32 %494, %495
  %497 = load i32, ptr %8, align 4, !tbaa !5
  %498 = mul nsw i32 %496, %497
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds i16, ptr %493, i64 %499
  %501 = load ptr, ptr %25, align 8, !tbaa !9
  %502 = load i32, ptr %12, align 4, !tbaa !5
  %503 = load i32, ptr %7, align 4, !tbaa !5
  %504 = mul nsw i32 %502, %503
  %505 = load i32, ptr %8, align 4, !tbaa !5
  %506 = mul nsw i32 %504, %505
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i16, ptr %501, i64 %507
  %509 = load i32, ptr %7, align 4, !tbaa !5
  %510 = load i32, ptr %8, align 4, !tbaa !5
  %511 = load i32, ptr %9, align 4, !tbaa !5
  %512 = load i32, ptr %10, align 4, !tbaa !5
  %513 = load i32, ptr %15, align 4, !tbaa !5
  call void @unpack_tpp_normtovnni(ptr noundef %500, ptr noundef %508, i32 noundef %509, i32 noundef %510, i32 noundef %511, i32 noundef %512, i32 noundef %513)
  br label %514

514:                                              ; preds = %492
  %515 = load i32, ptr %12, align 4, !tbaa !5
  %516 = add nsw i32 %515, 1
  store i32 %516, ptr %12, align 4, !tbaa !5
  br label %488, !llvm.loop !31

517:                                              ; preds = %488
  %518 = load ptr, ptr %25, align 8, !tbaa !9
  %519 = load ptr, ptr %26, align 8, !tbaa !9
  %520 = load i32, ptr %6, align 4, !tbaa !5
  %521 = load i32, ptr %7, align 4, !tbaa !5
  %522 = mul nsw i32 %520, %521
  %523 = load i32, ptr %8, align 4, !tbaa !5
  %524 = mul nsw i32 %522, %523
  %525 = sext i32 %524 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %518, ptr noundef %519, i64 noundef %525)
  call void @libxsmm_matdiff_clear(ptr noundef %16)
  %526 = load i32, ptr %8, align 4, !tbaa !5
  %527 = load i32, ptr %6, align 4, !tbaa !5
  %528 = load i32, ptr %7, align 4, !tbaa !5
  %529 = mul nsw i32 %527, %528
  %530 = load ptr, ptr %26, align 8, !tbaa !9
  %531 = load ptr, ptr %23, align 8, !tbaa !9
  %532 = call i32 @libxsmm_matdiff(ptr noundef %16, i32 noundef 1, i32 noundef %526, i32 noundef %529, ptr noundef %530, ptr noundef %531, ptr noundef %8, ptr noundef %8)
  %533 = call double @libxsmm_matdiff_epsilon(ptr noundef %16)
  store double %533, ptr %17, align 8, !tbaa !11
  %534 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  %535 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 10
  %536 = load double, ptr %535, align 8, !tbaa !21
  %537 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %536)
  %538 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 15
  %539 = load double, ptr %538, align 8, !tbaa !23
  %540 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %539)
  %541 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 7
  %542 = load double, ptr %541, align 8, !tbaa !24
  %543 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %542)
  %544 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 8
  %545 = load double, ptr %544, align 8, !tbaa !25
  %546 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %545)
  %547 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 5
  %548 = load double, ptr %547, align 8, !tbaa !26
  %549 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %548)
  %550 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %16, i32 0, i32 6
  %551 = load double, ptr %550, align 8, !tbaa !27
  %552 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %551)
  %553 = load double, ptr %17, align 8, !tbaa !11
  %554 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %553)
  %555 = call i64 @libxsmm_timer_tick()
  store i64 %555, ptr %19, align 8, !tbaa !32
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %556

556:                                              ; preds = %591, %517
  %557 = load i32, ptr %14, align 4, !tbaa !5
  %558 = load i32, ptr %11, align 4, !tbaa !5
  %559 = icmp slt i32 %557, %558
  br i1 %559, label %560, label %594

560:                                              ; preds = %556
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %561

561:                                              ; preds = %587, %560
  %562 = load i32, ptr %12, align 4, !tbaa !5
  %563 = load i32, ptr %6, align 4, !tbaa !5
  %564 = icmp slt i32 %562, %563
  br i1 %564, label %565, label %590

565:                                              ; preds = %561
  %566 = load ptr, ptr %22, align 8, !tbaa !9
  %567 = load i32, ptr %12, align 4, !tbaa !5
  %568 = load i32, ptr %7, align 4, !tbaa !5
  %569 = mul nsw i32 %567, %568
  %570 = load i32, ptr %8, align 4, !tbaa !5
  %571 = mul nsw i32 %569, %570
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i16, ptr %566, i64 %572
  %574 = load ptr, ptr %24, align 8, !tbaa !9
  %575 = load i32, ptr %12, align 4, !tbaa !5
  %576 = load i32, ptr %7, align 4, !tbaa !5
  %577 = mul nsw i32 %575, %576
  %578 = load i32, ptr %8, align 4, !tbaa !5
  %579 = mul nsw i32 %577, %578
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds i16, ptr %574, i64 %580
  %582 = load i32, ptr %7, align 4, !tbaa !5
  %583 = load i32, ptr %8, align 4, !tbaa !5
  %584 = load i32, ptr %9, align 4, !tbaa !5
  %585 = load i32, ptr %10, align 4, !tbaa !5
  %586 = load i32, ptr %15, align 4, !tbaa !5
  call void @pack_c(ptr noundef %573, ptr noundef %581, i32 noundef %582, i32 noundef %583, i32 noundef %584, i32 noundef %585, i32 noundef %586)
  br label %587

587:                                              ; preds = %565
  %588 = load i32, ptr %12, align 4, !tbaa !5
  %589 = add nsw i32 %588, 1
  store i32 %589, ptr %12, align 4, !tbaa !5
  br label %561, !llvm.loop !34

590:                                              ; preds = %561
  br label %591

591:                                              ; preds = %590
  %592 = load i32, ptr %14, align 4, !tbaa !5
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %14, align 4, !tbaa !5
  br label %556, !llvm.loop !35

594:                                              ; preds = %556
  %595 = call i64 @libxsmm_timer_tick()
  store i64 %595, ptr %20, align 8, !tbaa !32
  %596 = load i64, ptr %19, align 8, !tbaa !32
  %597 = load i64, ptr %20, align 8, !tbaa !32
  %598 = call double @libxsmm_timer_duration(i64 noundef %596, i64 noundef %597)
  store double %598, ptr %21, align 8, !tbaa !11
  %599 = load double, ptr %21, align 8, !tbaa !11
  %600 = load double, ptr %18, align 8, !tbaa !11
  %601 = load double, ptr %21, align 8, !tbaa !11
  %602 = fdiv double %600, %601
  %603 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %599, double noundef %602)
  %604 = call i64 @libxsmm_timer_tick()
  store i64 %604, ptr %19, align 8, !tbaa !32
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %605

605:                                              ; preds = %640, %594
  %606 = load i32, ptr %14, align 4, !tbaa !5
  %607 = load i32, ptr %11, align 4, !tbaa !5
  %608 = icmp slt i32 %606, %607
  br i1 %608, label %609, label %643

609:                                              ; preds = %605
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %610

610:                                              ; preds = %636, %609
  %611 = load i32, ptr %12, align 4, !tbaa !5
  %612 = load i32, ptr %6, align 4, !tbaa !5
  %613 = icmp slt i32 %611, %612
  br i1 %613, label %614, label %639

614:                                              ; preds = %610
  %615 = load ptr, ptr %24, align 8, !tbaa !9
  %616 = load i32, ptr %12, align 4, !tbaa !5
  %617 = load i32, ptr %7, align 4, !tbaa !5
  %618 = mul nsw i32 %616, %617
  %619 = load i32, ptr %8, align 4, !tbaa !5
  %620 = mul nsw i32 %618, %619
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds i16, ptr %615, i64 %621
  %623 = load ptr, ptr %25, align 8, !tbaa !9
  %624 = load i32, ptr %12, align 4, !tbaa !5
  %625 = load i32, ptr %7, align 4, !tbaa !5
  %626 = mul nsw i32 %624, %625
  %627 = load i32, ptr %8, align 4, !tbaa !5
  %628 = mul nsw i32 %626, %627
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i16, ptr %623, i64 %629
  %631 = load i32, ptr %7, align 4, !tbaa !5
  %632 = load i32, ptr %8, align 4, !tbaa !5
  %633 = load i32, ptr %9, align 4, !tbaa !5
  %634 = load i32, ptr %10, align 4, !tbaa !5
  %635 = load i32, ptr %15, align 4, !tbaa !5
  call void @unpack_c(ptr noundef %622, ptr noundef %630, i32 noundef %631, i32 noundef %632, i32 noundef %633, i32 noundef %634, i32 noundef %635)
  br label %636

636:                                              ; preds = %614
  %637 = load i32, ptr %12, align 4, !tbaa !5
  %638 = add nsw i32 %637, 1
  store i32 %638, ptr %12, align 4, !tbaa !5
  br label %610, !llvm.loop !36

639:                                              ; preds = %610
  br label %640

640:                                              ; preds = %639
  %641 = load i32, ptr %14, align 4, !tbaa !5
  %642 = add nsw i32 %641, 1
  store i32 %642, ptr %14, align 4, !tbaa !5
  br label %605, !llvm.loop !37

643:                                              ; preds = %605
  %644 = call i64 @libxsmm_timer_tick()
  store i64 %644, ptr %20, align 8, !tbaa !32
  %645 = load i64, ptr %19, align 8, !tbaa !32
  %646 = load i64, ptr %20, align 8, !tbaa !32
  %647 = call double @libxsmm_timer_duration(i64 noundef %645, i64 noundef %646)
  store double %647, ptr %21, align 8, !tbaa !11
  %648 = load double, ptr %21, align 8, !tbaa !11
  %649 = load double, ptr %18, align 8, !tbaa !11
  %650 = load double, ptr %21, align 8, !tbaa !11
  %651 = fdiv double %649, %650
  %652 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %648, double noundef %651)
  %653 = call i64 @libxsmm_timer_tick()
  store i64 %653, ptr %19, align 8, !tbaa !32
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %654

654:                                              ; preds = %690, %643
  %655 = load i32, ptr %14, align 4, !tbaa !5
  %656 = load i32, ptr %11, align 4, !tbaa !5
  %657 = icmp slt i32 %655, %656
  br i1 %657, label %658, label %693

658:                                              ; preds = %654
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %659

659:                                              ; preds = %686, %658
  %660 = load i32, ptr %12, align 4, !tbaa !5
  %661 = load i32, ptr %6, align 4, !tbaa !5
  %662 = icmp slt i32 %660, %661
  br i1 %662, label %663, label %689

663:                                              ; preds = %659
  %664 = load ptr, ptr %22, align 8, !tbaa !9
  %665 = load i32, ptr %12, align 4, !tbaa !5
  %666 = load i32, ptr %7, align 4, !tbaa !5
  %667 = mul nsw i32 %665, %666
  %668 = load i32, ptr %8, align 4, !tbaa !5
  %669 = mul nsw i32 %667, %668
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds i16, ptr %664, i64 %670
  %672 = load ptr, ptr %24, align 8, !tbaa !9
  %673 = load i32, ptr %12, align 4, !tbaa !5
  %674 = load i32, ptr %7, align 4, !tbaa !5
  %675 = mul nsw i32 %673, %674
  %676 = load i32, ptr %8, align 4, !tbaa !5
  %677 = mul nsw i32 %675, %676
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds i16, ptr %672, i64 %678
  %680 = load i32, ptr %7, align 4, !tbaa !5
  %681 = load i32, ptr %8, align 4, !tbaa !5
  %682 = load i32, ptr %9, align 4, !tbaa !5
  %683 = load i32, ptr %10, align 4, !tbaa !5
  %684 = load i32, ptr %15, align 4, !tbaa !5
  %685 = load ptr, ptr %31, align 8, !tbaa !9
  call void @pack_tpp_identity(ptr noundef %671, ptr noundef %679, i32 noundef %680, i32 noundef %681, i32 noundef %682, i32 noundef %683, i32 noundef %684, ptr noundef %685)
  br label %686

686:                                              ; preds = %663
  %687 = load i32, ptr %12, align 4, !tbaa !5
  %688 = add nsw i32 %687, 1
  store i32 %688, ptr %12, align 4, !tbaa !5
  br label %659, !llvm.loop !38

689:                                              ; preds = %659
  br label %690

690:                                              ; preds = %689
  %691 = load i32, ptr %14, align 4, !tbaa !5
  %692 = add nsw i32 %691, 1
  store i32 %692, ptr %14, align 4, !tbaa !5
  br label %654, !llvm.loop !39

693:                                              ; preds = %654
  %694 = call i64 @libxsmm_timer_tick()
  store i64 %694, ptr %20, align 8, !tbaa !32
  %695 = load i64, ptr %19, align 8, !tbaa !32
  %696 = load i64, ptr %20, align 8, !tbaa !32
  %697 = call double @libxsmm_timer_duration(i64 noundef %695, i64 noundef %696)
  store double %697, ptr %21, align 8, !tbaa !11
  %698 = load double, ptr %21, align 8, !tbaa !11
  %699 = load double, ptr %18, align 8, !tbaa !11
  %700 = load double, ptr %21, align 8, !tbaa !11
  %701 = fdiv double %699, %700
  %702 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %698, double noundef %701)
  %703 = call i64 @libxsmm_timer_tick()
  store i64 %703, ptr %19, align 8, !tbaa !32
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %704

704:                                              ; preds = %739, %693
  %705 = load i32, ptr %14, align 4, !tbaa !5
  %706 = load i32, ptr %11, align 4, !tbaa !5
  %707 = icmp slt i32 %705, %706
  br i1 %707, label %708, label %742

708:                                              ; preds = %704
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %709

709:                                              ; preds = %735, %708
  %710 = load i32, ptr %12, align 4, !tbaa !5
  %711 = load i32, ptr %6, align 4, !tbaa !5
  %712 = icmp slt i32 %710, %711
  br i1 %712, label %713, label %738

713:                                              ; preds = %709
  %714 = load ptr, ptr %24, align 8, !tbaa !9
  %715 = load i32, ptr %12, align 4, !tbaa !5
  %716 = load i32, ptr %7, align 4, !tbaa !5
  %717 = mul nsw i32 %715, %716
  %718 = load i32, ptr %8, align 4, !tbaa !5
  %719 = mul nsw i32 %717, %718
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds i16, ptr %714, i64 %720
  %722 = load ptr, ptr %25, align 8, !tbaa !9
  %723 = load i32, ptr %12, align 4, !tbaa !5
  %724 = load i32, ptr %7, align 4, !tbaa !5
  %725 = mul nsw i32 %723, %724
  %726 = load i32, ptr %8, align 4, !tbaa !5
  %727 = mul nsw i32 %725, %726
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds i16, ptr %722, i64 %728
  %730 = load i32, ptr %7, align 4, !tbaa !5
  %731 = load i32, ptr %8, align 4, !tbaa !5
  %732 = load i32, ptr %9, align 4, !tbaa !5
  %733 = load i32, ptr %10, align 4, !tbaa !5
  %734 = load i32, ptr %15, align 4, !tbaa !5
  call void @unpack_tpp_identity(ptr noundef %721, ptr noundef %729, i32 noundef %730, i32 noundef %731, i32 noundef %732, i32 noundef %733, i32 noundef %734)
  br label %735

735:                                              ; preds = %713
  %736 = load i32, ptr %12, align 4, !tbaa !5
  %737 = add nsw i32 %736, 1
  store i32 %737, ptr %12, align 4, !tbaa !5
  br label %709, !llvm.loop !40

738:                                              ; preds = %709
  br label %739

739:                                              ; preds = %738
  %740 = load i32, ptr %14, align 4, !tbaa !5
  %741 = add nsw i32 %740, 1
  store i32 %741, ptr %14, align 4, !tbaa !5
  br label %704, !llvm.loop !41

742:                                              ; preds = %704
  %743 = call i64 @libxsmm_timer_tick()
  store i64 %743, ptr %20, align 8, !tbaa !32
  %744 = load i64, ptr %19, align 8, !tbaa !32
  %745 = load i64, ptr %20, align 8, !tbaa !32
  %746 = call double @libxsmm_timer_duration(i64 noundef %744, i64 noundef %745)
  store double %746, ptr %21, align 8, !tbaa !11
  %747 = load double, ptr %21, align 8, !tbaa !11
  %748 = load double, ptr %18, align 8, !tbaa !11
  %749 = load double, ptr %21, align 8, !tbaa !11
  %750 = fdiv double %748, %749
  %751 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %747, double noundef %750)
  %752 = call i64 @libxsmm_timer_tick()
  store i64 %752, ptr %19, align 8, !tbaa !32
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %753

753:                                              ; preds = %789, %742
  %754 = load i32, ptr %14, align 4, !tbaa !5
  %755 = load i32, ptr %11, align 4, !tbaa !5
  %756 = icmp slt i32 %754, %755
  br i1 %756, label %757, label %792

757:                                              ; preds = %753
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %758

758:                                              ; preds = %785, %757
  %759 = load i32, ptr %12, align 4, !tbaa !5
  %760 = load i32, ptr %6, align 4, !tbaa !5
  %761 = icmp slt i32 %759, %760
  br i1 %761, label %762, label %788

762:                                              ; preds = %758
  %763 = load ptr, ptr %22, align 8, !tbaa !9
  %764 = load i32, ptr %12, align 4, !tbaa !5
  %765 = load i32, ptr %7, align 4, !tbaa !5
  %766 = mul nsw i32 %764, %765
  %767 = load i32, ptr %8, align 4, !tbaa !5
  %768 = mul nsw i32 %766, %767
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds i16, ptr %763, i64 %769
  %771 = load ptr, ptr %24, align 8, !tbaa !9
  %772 = load i32, ptr %12, align 4, !tbaa !5
  %773 = load i32, ptr %7, align 4, !tbaa !5
  %774 = mul nsw i32 %772, %773
  %775 = load i32, ptr %8, align 4, !tbaa !5
  %776 = mul nsw i32 %774, %775
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds i16, ptr %771, i64 %777
  %779 = load i32, ptr %7, align 4, !tbaa !5
  %780 = load i32, ptr %8, align 4, !tbaa !5
  %781 = load i32, ptr %9, align 4, !tbaa !5
  %782 = load i32, ptr %10, align 4, !tbaa !5
  %783 = load i32, ptr %15, align 4, !tbaa !5
  %784 = load ptr, ptr %29, align 8, !tbaa !9
  call void @pack_tpp_normtovnni(ptr noundef %770, ptr noundef %778, i32 noundef %779, i32 noundef %780, i32 noundef %781, i32 noundef %782, i32 noundef %783, ptr noundef %784)
  br label %785

785:                                              ; preds = %762
  %786 = load i32, ptr %12, align 4, !tbaa !5
  %787 = add nsw i32 %786, 1
  store i32 %787, ptr %12, align 4, !tbaa !5
  br label %758, !llvm.loop !42

788:                                              ; preds = %758
  br label %789

789:                                              ; preds = %788
  %790 = load i32, ptr %14, align 4, !tbaa !5
  %791 = add nsw i32 %790, 1
  store i32 %791, ptr %14, align 4, !tbaa !5
  br label %753, !llvm.loop !43

792:                                              ; preds = %753
  %793 = call i64 @libxsmm_timer_tick()
  store i64 %793, ptr %20, align 8, !tbaa !32
  %794 = load i64, ptr %19, align 8, !tbaa !32
  %795 = load i64, ptr %20, align 8, !tbaa !32
  %796 = call double @libxsmm_timer_duration(i64 noundef %794, i64 noundef %795)
  store double %796, ptr %21, align 8, !tbaa !11
  %797 = load double, ptr %21, align 8, !tbaa !11
  %798 = load double, ptr %18, align 8, !tbaa !11
  %799 = load double, ptr %21, align 8, !tbaa !11
  %800 = fdiv double %798, %799
  %801 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef %797, double noundef %800)
  %802 = call i64 @libxsmm_timer_tick()
  store i64 %802, ptr %19, align 8, !tbaa !32
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %803

803:                                              ; preds = %838, %792
  %804 = load i32, ptr %14, align 4, !tbaa !5
  %805 = load i32, ptr %11, align 4, !tbaa !5
  %806 = icmp slt i32 %804, %805
  br i1 %806, label %807, label %841

807:                                              ; preds = %803
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %808

808:                                              ; preds = %834, %807
  %809 = load i32, ptr %12, align 4, !tbaa !5
  %810 = load i32, ptr %6, align 4, !tbaa !5
  %811 = icmp slt i32 %809, %810
  br i1 %811, label %812, label %837

812:                                              ; preds = %808
  %813 = load ptr, ptr %24, align 8, !tbaa !9
  %814 = load i32, ptr %12, align 4, !tbaa !5
  %815 = load i32, ptr %7, align 4, !tbaa !5
  %816 = mul nsw i32 %814, %815
  %817 = load i32, ptr %8, align 4, !tbaa !5
  %818 = mul nsw i32 %816, %817
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds i16, ptr %813, i64 %819
  %821 = load ptr, ptr %25, align 8, !tbaa !9
  %822 = load i32, ptr %12, align 4, !tbaa !5
  %823 = load i32, ptr %7, align 4, !tbaa !5
  %824 = mul nsw i32 %822, %823
  %825 = load i32, ptr %8, align 4, !tbaa !5
  %826 = mul nsw i32 %824, %825
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds i16, ptr %821, i64 %827
  %829 = load i32, ptr %7, align 4, !tbaa !5
  %830 = load i32, ptr %8, align 4, !tbaa !5
  %831 = load i32, ptr %9, align 4, !tbaa !5
  %832 = load i32, ptr %10, align 4, !tbaa !5
  %833 = load i32, ptr %15, align 4, !tbaa !5
  call void @unpack_tpp_normtovnni(ptr noundef %820, ptr noundef %828, i32 noundef %829, i32 noundef %830, i32 noundef %831, i32 noundef %832, i32 noundef %833)
  br label %834

834:                                              ; preds = %812
  %835 = load i32, ptr %12, align 4, !tbaa !5
  %836 = add nsw i32 %835, 1
  store i32 %836, ptr %12, align 4, !tbaa !5
  br label %808, !llvm.loop !44

837:                                              ; preds = %808
  br label %838

838:                                              ; preds = %837
  %839 = load i32, ptr %14, align 4, !tbaa !5
  %840 = add nsw i32 %839, 1
  store i32 %840, ptr %14, align 4, !tbaa !5
  br label %803, !llvm.loop !45

841:                                              ; preds = %803
  %842 = call i64 @libxsmm_timer_tick()
  store i64 %842, ptr %20, align 8, !tbaa !32
  %843 = load i64, ptr %19, align 8, !tbaa !32
  %844 = load i64, ptr %20, align 8, !tbaa !32
  %845 = call double @libxsmm_timer_duration(i64 noundef %843, i64 noundef %844)
  store double %845, ptr %21, align 8, !tbaa !11
  %846 = load double, ptr %21, align 8, !tbaa !11
  %847 = load double, ptr %18, align 8, !tbaa !11
  %848 = load double, ptr %21, align 8, !tbaa !11
  %849 = fdiv double %847, %848
  %850 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, double noundef %846, double noundef %849)
  %851 = load ptr, ptr %26, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %851)
  %852 = load ptr, ptr %25, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %852)
  %853 = load ptr, ptr %24, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %853)
  %854 = load ptr, ptr %23, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %854)
  %855 = load ptr, ptr %22, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %855)
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 28, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 28, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 192, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  ret i32 0
}

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

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) #4

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

declare void @libxsmm_create_meltw_unary_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_meltw_unary_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #4

declare void @libxsmm_matdiff_clear(ptr noundef) #4

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

declare double @libxsmm_rng_f64() #4

declare void @libxsmm_rne_convert_fp32_bf16(ptr noundef, ptr noundef, i64 noundef) #4

declare void @libxsmm_convert_bf16_f32(ptr noundef, ptr noundef, i64 noundef) #4

declare ptr @libxsmm_dispatch_meltw_unary(i32 noundef, ptr noundef byval(%struct.libxsmm_meltw_unary_shape) align 8, i32 noundef) #4

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

declare double @libxsmm_matdiff_epsilon(ptr noundef) #4

declare i64 @libxsmm_timer_tick() #4

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

declare void @libxsmm_free(ptr noundef) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!22, !12, i64 80}
!22 = !{!"libxsmm_matdiff_info", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!23 = !{!22, !12, i64 120}
!24 = !{!22, !12, i64 56}
!25 = !{!22, !12, i64 64}
!26 = !{!22, !12, i64 40}
!27 = !{!22, !12, i64 48}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = !{!33, !33, i64 0}
!33 = !{!"long long", !7, i64 0}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !16}
!36 = distinct !{!36, !16}
!37 = distinct !{!37, !16}
!38 = distinct !{!38, !16}
!39 = distinct !{!39, !16}
!40 = distinct !{!40, !16}
!41 = distinct !{!41, !16}
!42 = distinct !{!42, !16}
!43 = distinct !{!43, !16}
!44 = distinct !{!44, !16}
!45 = distinct !{!45, !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_matdiff_info = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32 }
%struct.libxsmm_meltw_unary_shape = type { i32, i32, i32, i32, i32, i32, i32 }

@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [53 x i8], align 1

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca i32, align 4
  %4 = alloca %struct.libxsmm_matdiff_info, align 8
  %5 = alloca %struct.libxsmm_meltw_unary_shape, align 8
  %6 = alloca %struct.libxsmm_meltw_unary_shape, align 8
  %7 = icmp sgt i32 %0, 1
  br i1 %7, label %8, label %.thread313

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

.thread313:                                       ; preds = %8, %2
  %.ph = phi i32 [ %11, %8 ], [ 20, %2 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #7
  br label %.thread317

12:                                               ; preds = %8
  %13 = getelementptr inbounds i8, ptr %1, i64 16
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %15 = tail call i32 @atoi(ptr nocapture noundef %14) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #7
  %16 = icmp ugt i32 %0, 3
  br i1 %16, label %17, label %.thread317

.thread317:                                       ; preds = %.thread313, %12
  %.ph315 = phi i32 [ 1024, %.thread313 ], [ %15, %12 ]
  %.ph316 = phi i32 [ %.ph, %.thread313 ], [ %11, %12 ]
  store i32 2048, ptr %3, align 4, !tbaa !9
  br label %.thread326

17:                                               ; preds = %12
  %18 = getelementptr inbounds i8, ptr %1, i64 24
  %19 = load ptr, ptr %18, align 8, !tbaa !5
  %20 = tail call i32 @atoi(ptr nocapture noundef %19) #6
  store i32 %20, ptr %3, align 4, !tbaa !9
  %.not327 = icmp eq i32 %0, 4
  br i1 %.not327, label %.thread326, label %21

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

26:                                               ; preds = %21
  %27 = getelementptr inbounds i8, ptr %1, i64 40
  %28 = load ptr, ptr %27, align 8, !tbaa !5
  %29 = tail call i32 @atoi(ptr nocapture noundef %28) #6
  %.not328 = icmp eq i32 %0, 6
  br i1 %.not328, label %.thread326, label %30

30:                                               ; preds = %26
  %31 = getelementptr inbounds i8, ptr %1, i64 48
  %32 = load ptr, ptr %31, align 8, !tbaa !5
  %33 = tail call i32 @atoi(ptr nocapture noundef %32) #6
  br label %.thread326

.thread326:                                       ; preds = %17, %.thread317, %21, %26, %30
  %34 = phi i32 [ %20, %30 ], [ %20, %26 ], [ %20, %21 ], [ 2048, %.thread317 ], [ %20, %17 ]
  %35 = phi i32 [ %29, %30 ], [ %29, %26 ], [ 32, %21 ], [ 32, %.thread317 ], [ 32, %17 ]
  %36 = phi i32 [ %11, %30 ], [ %11, %26 ], [ %11, %21 ], [ %.ph316, %.thread317 ], [ %11, %17 ]
  %37 = phi i32 [ %15, %30 ], [ %15, %26 ], [ %15, %21 ], [ %.ph315, %.thread317 ], [ %15, %17 ]
  %38 = phi i32 [ %24, %30 ], [ %24, %26 ], [ %24, %21 ], [ 32, %.thread317 ], [ 32, %17 ]
  %39 = phi i32 [ %33, %30 ], [ 1000, %26 ], [ 1000, %21 ], [ 1000, %.thread317 ], [ 1000, %17 ]
  %40 = tail call i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef 2) #7
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %4) #7
  %41 = sitofp i32 %39 to double
  %42 = sitofp i32 %36 to double
  %43 = fmul double %42, %41
  %44 = sitofp i32 %34 to double
  %45 = fmul double %43, %44
  %46 = sitofp i32 %37 to double
  %47 = fmul double %45, %46
  %48 = fmul double %47, 2.000000e+00
  %49 = fmul double %48, 0x3E10000000000000
  %50 = sext i32 %36 to i64
  %51 = shl nsw i64 %50, 1
  %52 = sext i32 %37 to i64
  %53 = mul i64 %51, %52
  %54 = sext i32 %34 to i64
  %55 = mul i64 %53, %54
  %56 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %55, i64 noundef 64) #7
  %57 = shl nsw i64 %50, 2
  %58 = mul i64 %57, %52
  %59 = mul i64 %58, %54
  %60 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %59, i64 noundef 64) #7
  %61 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %55, i64 noundef 64) #7
  %62 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %55, i64 noundef 64) #7
  %63 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %59, i64 noundef 64) #7
  %64 = tail call i32 @libxsmm_nonconst_int(i32 noundef %34)
  %65 = zext i32 %64 to i64
  %66 = tail call i32 @libxsmm_nonconst_int(i32 noundef %34)
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %5) #7
  call void @libxsmm_create_meltw_unary_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_meltw_unary_shape) align 4 %5, i32 noundef %35, i32 noundef %38, i32 noundef %34, i32 noundef %35, i32 noundef 2, i32 noundef 2, i32 noundef 2) #7
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %6) #7
  call void @libxsmm_create_meltw_unary_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_meltw_unary_shape) align 4 %6, i32 noundef %35, i32 noundef %38, i32 noundef %35, i32 noundef %35, i32 noundef 2, i32 noundef 2, i32 noundef 2) #7
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %4) #7
  %67 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %68 = load i32, ptr %3, align 4, !tbaa !9
  %69 = sdiv i32 %37, %38
  %70 = sdiv i32 %68, %35
  %71 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %36, i32 noundef %37, i32 noundef %68, i32 noundef %38, i32 noundef %35, i32 noundef %40, i32 noundef %69, i32 noundef %70)
  %72 = icmp slt i32 %36, 1
  br i1 %72, label %._crit_edge343, label %.preheader338.lr.ph

.preheader338.lr.ph:                              ; preds = %.thread326
  %73 = zext i32 %37 to i64
  %74 = icmp sgt i32 %37, 0
  %75 = mul nuw i64 %65, %73
  br i1 %74, label %.preheader338.us.preheader, label %._crit_edge343

.preheader338.us.preheader:                       ; preds = %.preheader338.lr.ph
  %wide.trip.count405 = zext nneg i32 %36 to i64
  %.pre = load i32, ptr %3, align 4, !tbaa !9
  br label %.preheader338.us

.preheader338.us:                                 ; preds = %.preheader338.us.preheader, %._crit_edge341.us
  %76 = phi i32 [ %.pre, %.preheader338.us.preheader ], [ %95, %._crit_edge341.us ]
  %77 = phi i32 [ %.pre, %.preheader338.us.preheader ], [ %96, %._crit_edge341.us ]
  %indvars.iv402 = phi i64 [ 0, %.preheader338.us.preheader ], [ %indvars.iv.next403, %._crit_edge341.us ]
  %78 = mul nuw nsw i64 %75, %indvars.iv402
  %79 = getelementptr inbounds float, ptr %60, i64 %78
  %80 = icmp sgt i32 %77, 0
  br i1 %80, label %.preheader337.us344, label %._crit_edge341.us

._crit_edge.us:                                   ; preds = %82, %.preheader337.us344
  %81 = phi i32 [ %91, %.preheader337.us344 ], [ %89, %82 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %73
  br i1 %exitcond.not, label %._crit_edge341.us, label %.preheader337.us344, !llvm.loop !11

82:                                               ; preds = %.lr.ph.us, %82
  %.0304339.us = phi i32 [ 0, %.lr.ph.us ], [ %88, %82 ]
  %83 = call double @libxsmm_rng_f64() #7
  %84 = fptrunc double %83 to float
  %85 = call i32 @libxsmm_nonconst_int(i32 noundef %.0304339.us)
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds float, ptr %94, i64 %86
  store float %84, ptr %87, align 4, !tbaa !14
  %88 = add nuw nsw i32 %.0304339.us, 1
  %89 = load i32, ptr %3, align 4, !tbaa !9
  %90 = icmp slt i32 %88, %89
  br i1 %90, label %82, label %._crit_edge.us, !llvm.loop !16

.preheader337.us344:                              ; preds = %.preheader338.us, %._crit_edge.us
  %91 = phi i32 [ %81, %._crit_edge.us ], [ %76, %.preheader338.us ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %._crit_edge.us ], [ 0, %.preheader338.us ]
  %92 = icmp sgt i32 %91, 0
  br i1 %92, label %.lr.ph.us, label %._crit_edge.us

.lr.ph.us:                                        ; preds = %.preheader337.us344
  %93 = mul nuw nsw i64 %indvars.iv, %65
  %94 = getelementptr inbounds float, ptr %79, i64 %93
  br label %82

._crit_edge341.us:                                ; preds = %._crit_edge.us, %.preheader338.us
  %95 = phi i32 [ %76, %.preheader338.us ], [ %81, %._crit_edge.us ]
  %96 = phi i32 [ %77, %.preheader338.us ], [ %81, %._crit_edge.us ]
  %indvars.iv.next403 = add nuw nsw i64 %indvars.iv402, 1
  %exitcond406.not = icmp eq i64 %indvars.iv.next403, %wide.trip.count405
  br i1 %exitcond406.not, label %._crit_edge343, label %.preheader338.us, !llvm.loop !17

._crit_edge343:                                   ; preds = %._crit_edge341.us, %.preheader338.lr.ph, %.thread326
  %97 = mul nsw i32 %37, %36
  %98 = load i32, ptr %3, align 4, !tbaa !9
  %99 = mul nsw i32 %98, %97
  %100 = sext i32 %99 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %60, ptr noundef %56, i64 noundef %100) #7
  %101 = load i32, ptr %3, align 4, !tbaa !9
  %102 = mul nsw i32 %101, %97
  %103 = sext i32 %102 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %56, ptr noundef %60, i64 noundef %103) #7
  %104 = call ptr @libxsmm_dispatch_meltw_unary(i32 noundef 28, ptr noundef nonnull byval(%struct.libxsmm_meltw_unary_shape) align 8 %5, i32 noundef 0) #7
  %105 = call ptr @libxsmm_dispatch_meltw_unary(i32 noundef 1, ptr noundef nonnull byval(%struct.libxsmm_meltw_unary_shape) align 8 %6, i32 noundef 0) #7
  br i1 %72, label %._crit_edge, label %.lr.ph

.preheader336:                                    ; preds = %.lr.ph
  br i1 %72, label %._crit_edge, label %.lr.ph350

.lr.ph:                                           ; preds = %._crit_edge343, %.lr.ph
  %.1348 = phi i32 [ %112, %.lr.ph ], [ 0, %._crit_edge343 ]
  %106 = mul nsw i32 %.1348, %37
  %107 = load i32, ptr %3, align 4, !tbaa !9
  %108 = mul nsw i32 %106, %107
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds i16, ptr %56, i64 %109
  %111 = getelementptr inbounds i16, ptr %61, i64 %109
  call void @pack_c(ptr noundef %110, ptr noundef %111, i32 noundef %37, i32 noundef %107, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %112 = add nuw nsw i32 %.1348, 1
  %exitcond407.not = icmp eq i32 %112, %36
  br i1 %exitcond407.not, label %.preheader336, label %.lr.ph, !llvm.loop !18

.lr.ph350:                                        ; preds = %.preheader336, %.lr.ph350
  %.2349 = phi i32 [ %119, %.lr.ph350 ], [ 0, %.preheader336 ]
  %113 = mul nsw i32 %.2349, %37
  %114 = load i32, ptr %3, align 4, !tbaa !9
  %115 = mul nsw i32 %113, %114
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i16, ptr %61, i64 %116
  %118 = getelementptr inbounds i16, ptr %62, i64 %116
  call void @unpack_c(ptr noundef %117, ptr noundef %118, i32 noundef %37, i32 noundef %114, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %119 = add nuw nsw i32 %.2349, 1
  %exitcond408.not = icmp eq i32 %119, %36
  br i1 %exitcond408.not, label %._crit_edge, label %.lr.ph350, !llvm.loop !19

._crit_edge:                                      ; preds = %.lr.ph350, %._crit_edge343, %.preheader336
  %120 = load i32, ptr %3, align 4, !tbaa !9
  %121 = mul nsw i32 %120, %97
  %122 = sext i32 %121 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %62, ptr noundef %63, i64 noundef %122) #7
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %4) #7
  %123 = load i32, ptr %3, align 4, !tbaa !9
  %124 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %123, i32 noundef %97, ptr noundef %63, ptr noundef %60, ptr noundef nonnull %3, ptr noundef nonnull %3) #7
  %125 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %4) #7
  %126 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  %127 = getelementptr inbounds i8, ptr %4, i64 80
  %128 = load double, ptr %127, align 8, !tbaa !20
  %129 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %128)
  %130 = getelementptr inbounds i8, ptr %4, i64 120
  %131 = load double, ptr %130, align 8, !tbaa !23
  %132 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %131)
  %133 = getelementptr inbounds i8, ptr %4, i64 56
  %134 = load double, ptr %133, align 8, !tbaa !24
  %135 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %134)
  %136 = getelementptr inbounds i8, ptr %4, i64 64
  %137 = load double, ptr %136, align 8, !tbaa !25
  %138 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %137)
  %139 = getelementptr inbounds i8, ptr %4, i64 40
  %140 = load double, ptr %139, align 8, !tbaa !26
  %141 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %140)
  %142 = getelementptr inbounds i8, ptr %4, i64 48
  %143 = load double, ptr %142, align 8, !tbaa !27
  %144 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %143)
  %145 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %125)
  br i1 %72, label %._crit_edge356, label %.lr.ph353

.preheader335:                                    ; preds = %.lr.ph353
  br i1 %72, label %._crit_edge356, label %.lr.ph355

.lr.ph353:                                        ; preds = %._crit_edge, %.lr.ph353
  %.3351 = phi i32 [ %152, %.lr.ph353 ], [ 0, %._crit_edge ]
  %146 = mul nsw i32 %.3351, %37
  %147 = load i32, ptr %3, align 4, !tbaa !9
  %148 = mul nsw i32 %146, %147
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds i16, ptr %56, i64 %149
  %151 = getelementptr inbounds i16, ptr %61, i64 %149
  call void @pack_tpp_identity(ptr noundef %150, ptr noundef %151, i32 noundef %37, i32 noundef %147, i32 noundef %38, i32 noundef %35, i32 noundef %40, ptr noundef %105)
  %152 = add nuw nsw i32 %.3351, 1
  %exitcond409.not = icmp eq i32 %152, %36
  br i1 %exitcond409.not, label %.preheader335, label %.lr.ph353, !llvm.loop !28

.lr.ph355:                                        ; preds = %.preheader335, %.lr.ph355
  %.4354 = phi i32 [ %159, %.lr.ph355 ], [ 0, %.preheader335 ]
  %153 = mul nsw i32 %.4354, %37
  %154 = load i32, ptr %3, align 4, !tbaa !9
  %155 = mul nsw i32 %153, %154
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds i16, ptr %61, i64 %156
  %158 = getelementptr inbounds i16, ptr %62, i64 %156
  call void @unpack_tpp_identity(ptr noundef %157, ptr noundef %158, i32 noundef %37, i32 noundef %154, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %159 = add nuw nsw i32 %.4354, 1
  %exitcond410.not = icmp eq i32 %159, %36
  br i1 %exitcond410.not, label %._crit_edge356, label %.lr.ph355, !llvm.loop !29

._crit_edge356:                                   ; preds = %.lr.ph355, %._crit_edge, %.preheader335
  %160 = load i32, ptr %3, align 4, !tbaa !9
  %161 = mul nsw i32 %160, %97
  %162 = sext i32 %161 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %62, ptr noundef %63, i64 noundef %162) #7
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %4) #7
  %163 = load i32, ptr %3, align 4, !tbaa !9
  %164 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %163, i32 noundef %97, ptr noundef %63, ptr noundef %60, ptr noundef nonnull %3, ptr noundef nonnull %3) #7
  %165 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %4) #7
  %166 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %167 = load double, ptr %127, align 8, !tbaa !20
  %168 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %167)
  %169 = load double, ptr %130, align 8, !tbaa !23
  %170 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %169)
  %171 = load double, ptr %133, align 8, !tbaa !24
  %172 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %171)
  %173 = load double, ptr %136, align 8, !tbaa !25
  %174 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %173)
  %175 = load double, ptr %139, align 8, !tbaa !26
  %176 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %175)
  %177 = load double, ptr %142, align 8, !tbaa !27
  %178 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %177)
  %179 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %165)
  br i1 %72, label %._crit_edge362, label %.lr.ph359

.preheader334:                                    ; preds = %.lr.ph359
  br i1 %72, label %._crit_edge362, label %.lr.ph361

.lr.ph359:                                        ; preds = %._crit_edge356, %.lr.ph359
  %.5357 = phi i32 [ %186, %.lr.ph359 ], [ 0, %._crit_edge356 ]
  %180 = mul nsw i32 %.5357, %37
  %181 = load i32, ptr %3, align 4, !tbaa !9
  %182 = mul nsw i32 %180, %181
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i16, ptr %56, i64 %183
  %185 = getelementptr inbounds i16, ptr %61, i64 %183
  call void @pack_tpp_normtovnni(ptr noundef %184, ptr noundef %185, i32 noundef %37, i32 noundef %181, i32 noundef %38, i32 noundef %35, i32 noundef %40, ptr noundef %104)
  %186 = add nuw nsw i32 %.5357, 1
  %exitcond411.not = icmp eq i32 %186, %36
  br i1 %exitcond411.not, label %.preheader334, label %.lr.ph359, !llvm.loop !30

.lr.ph361:                                        ; preds = %.preheader334, %.lr.ph361
  %.6360 = phi i32 [ %193, %.lr.ph361 ], [ 0, %.preheader334 ]
  %187 = mul nsw i32 %.6360, %37
  %188 = load i32, ptr %3, align 4, !tbaa !9
  %189 = mul nsw i32 %187, %188
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i16, ptr %61, i64 %190
  %192 = getelementptr inbounds i16, ptr %62, i64 %190
  call void @unpack_tpp_normtovnni(ptr noundef %191, ptr noundef %192, i32 noundef %37, i32 noundef %188, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %193 = add nuw nsw i32 %.6360, 1
  %exitcond412.not = icmp eq i32 %193, %36
  br i1 %exitcond412.not, label %._crit_edge362, label %.lr.ph361, !llvm.loop !31

._crit_edge362:                                   ; preds = %.lr.ph361, %._crit_edge356, %.preheader334
  %194 = load i32, ptr %3, align 4, !tbaa !9
  %195 = mul nsw i32 %194, %97
  %196 = sext i32 %195 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %62, ptr noundef %63, i64 noundef %196) #7
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %4) #7
  %197 = load i32, ptr %3, align 4, !tbaa !9
  %198 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %197, i32 noundef %97, ptr noundef %63, ptr noundef %60, ptr noundef nonnull %3, ptr noundef nonnull %3) #7
  %199 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %4) #7
  %200 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  %201 = load double, ptr %127, align 8, !tbaa !20
  %202 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %201)
  %203 = load double, ptr %130, align 8, !tbaa !23
  %204 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %203)
  %205 = load double, ptr %133, align 8, !tbaa !24
  %206 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %205)
  %207 = load double, ptr %136, align 8, !tbaa !25
  %208 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %207)
  %209 = load double, ptr %139, align 8, !tbaa !26
  %210 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %209)
  %211 = load double, ptr %142, align 8, !tbaa !27
  %212 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %211)
  %213 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %199)
  %214 = call i64 @libxsmm_timer_tick() #7
  %215 = icmp slt i32 %39, 1
  %brmerge = or i1 %215, %72
  br i1 %brmerge, label %._crit_edge367, label %.preheader333.us

.preheader333.us:                                 ; preds = %._crit_edge362, %._crit_edge365.us
  %.1305366.us = phi i32 [ %224, %._crit_edge365.us ], [ 0, %._crit_edge362 ]
  br label %216

216:                                              ; preds = %.preheader333.us, %216
  %.7363.us = phi i32 [ 0, %.preheader333.us ], [ %223, %216 ]
  %217 = mul nsw i32 %.7363.us, %37
  %218 = load i32, ptr %3, align 4, !tbaa !9
  %219 = mul nsw i32 %217, %218
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds i16, ptr %56, i64 %220
  %222 = getelementptr inbounds i16, ptr %61, i64 %220
  call void @pack_c(ptr noundef %221, ptr noundef %222, i32 noundef %37, i32 noundef %218, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %223 = add nuw nsw i32 %.7363.us, 1
  %exitcond413.not = icmp eq i32 %223, %36
  br i1 %exitcond413.not, label %._crit_edge365.us, label %216, !llvm.loop !32

._crit_edge365.us:                                ; preds = %216
  %224 = add nuw nsw i32 %.1305366.us, 1
  %exitcond414.not = icmp eq i32 %224, %39
  br i1 %exitcond414.not, label %._crit_edge367, label %.preheader333.us, !llvm.loop !33

._crit_edge367:                                   ; preds = %._crit_edge365.us, %._crit_edge362
  %225 = call i64 @libxsmm_timer_tick() #7
  %226 = call double @libxsmm_timer_duration(i64 noundef %214, i64 noundef %225) #7
  %227 = fdiv double %49, %226
  %228 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %226, double noundef %227)
  %229 = call i64 @libxsmm_timer_tick() #7
  %brmerge430 = or i1 %215, %72
  br i1 %brmerge430, label %._crit_edge372, label %.preheader332.us

.preheader332.us:                                 ; preds = %._crit_edge367, %._crit_edge370.us
  %.2306371.us = phi i32 [ %238, %._crit_edge370.us ], [ 0, %._crit_edge367 ]
  br label %230

230:                                              ; preds = %.preheader332.us, %230
  %.8368.us = phi i32 [ 0, %.preheader332.us ], [ %237, %230 ]
  %231 = mul nsw i32 %.8368.us, %37
  %232 = load i32, ptr %3, align 4, !tbaa !9
  %233 = mul nsw i32 %231, %232
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds i16, ptr %61, i64 %234
  %236 = getelementptr inbounds i16, ptr %62, i64 %234
  call void @unpack_c(ptr noundef %235, ptr noundef %236, i32 noundef %37, i32 noundef %232, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %237 = add nuw nsw i32 %.8368.us, 1
  %exitcond415.not = icmp eq i32 %237, %36
  br i1 %exitcond415.not, label %._crit_edge370.us, label %230, !llvm.loop !34

._crit_edge370.us:                                ; preds = %230
  %238 = add nuw nsw i32 %.2306371.us, 1
  %exitcond416.not = icmp eq i32 %238, %39
  br i1 %exitcond416.not, label %._crit_edge372, label %.preheader332.us, !llvm.loop !35

._crit_edge372:                                   ; preds = %._crit_edge370.us, %._crit_edge367
  %239 = call i64 @libxsmm_timer_tick() #7
  %240 = call double @libxsmm_timer_duration(i64 noundef %229, i64 noundef %239) #7
  %241 = fdiv double %49, %240
  %242 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %240, double noundef %241)
  %243 = call i64 @libxsmm_timer_tick() #7
  %brmerge433 = or i1 %215, %72
  br i1 %brmerge433, label %._crit_edge377, label %.preheader331.us

.preheader331.us:                                 ; preds = %._crit_edge372, %._crit_edge375.us
  %.3307376.us = phi i32 [ %252, %._crit_edge375.us ], [ 0, %._crit_edge372 ]
  br label %244

244:                                              ; preds = %.preheader331.us, %244
  %.9373.us = phi i32 [ 0, %.preheader331.us ], [ %251, %244 ]
  %245 = mul nsw i32 %.9373.us, %37
  %246 = load i32, ptr %3, align 4, !tbaa !9
  %247 = mul nsw i32 %245, %246
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds i16, ptr %56, i64 %248
  %250 = getelementptr inbounds i16, ptr %61, i64 %248
  call void @pack_tpp_identity(ptr noundef %249, ptr noundef %250, i32 noundef %37, i32 noundef %246, i32 noundef %38, i32 noundef %35, i32 noundef %40, ptr noundef %105)
  %251 = add nuw nsw i32 %.9373.us, 1
  %exitcond417.not = icmp eq i32 %251, %36
  br i1 %exitcond417.not, label %._crit_edge375.us, label %244, !llvm.loop !36

._crit_edge375.us:                                ; preds = %244
  %252 = add nuw nsw i32 %.3307376.us, 1
  %exitcond418.not = icmp eq i32 %252, %39
  br i1 %exitcond418.not, label %._crit_edge377, label %.preheader331.us, !llvm.loop !37

._crit_edge377:                                   ; preds = %._crit_edge375.us, %._crit_edge372
  %253 = call i64 @libxsmm_timer_tick() #7
  %254 = call double @libxsmm_timer_duration(i64 noundef %243, i64 noundef %253) #7
  %255 = fdiv double %49, %254
  %256 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %254, double noundef %255)
  %257 = call i64 @libxsmm_timer_tick() #7
  %brmerge436 = or i1 %215, %72
  br i1 %brmerge436, label %._crit_edge382, label %.preheader330.us

.preheader330.us:                                 ; preds = %._crit_edge377, %._crit_edge380.us
  %.4308381.us = phi i32 [ %266, %._crit_edge380.us ], [ 0, %._crit_edge377 ]
  br label %258

258:                                              ; preds = %.preheader330.us, %258
  %.10378.us = phi i32 [ 0, %.preheader330.us ], [ %265, %258 ]
  %259 = mul nsw i32 %.10378.us, %37
  %260 = load i32, ptr %3, align 4, !tbaa !9
  %261 = mul nsw i32 %259, %260
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i16, ptr %61, i64 %262
  %264 = getelementptr inbounds i16, ptr %62, i64 %262
  call void @unpack_tpp_identity(ptr noundef %263, ptr noundef %264, i32 noundef %37, i32 noundef %260, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %265 = add nuw nsw i32 %.10378.us, 1
  %exitcond419.not = icmp eq i32 %265, %36
  br i1 %exitcond419.not, label %._crit_edge380.us, label %258, !llvm.loop !38

._crit_edge380.us:                                ; preds = %258
  %266 = add nuw nsw i32 %.4308381.us, 1
  %exitcond420.not = icmp eq i32 %266, %39
  br i1 %exitcond420.not, label %._crit_edge382, label %.preheader330.us, !llvm.loop !39

._crit_edge382:                                   ; preds = %._crit_edge380.us, %._crit_edge377
  %267 = call i64 @libxsmm_timer_tick() #7
  %268 = call double @libxsmm_timer_duration(i64 noundef %257, i64 noundef %267) #7
  %269 = fdiv double %49, %268
  %270 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %268, double noundef %269)
  %271 = call i64 @libxsmm_timer_tick() #7
  %brmerge439 = or i1 %215, %72
  br i1 %brmerge439, label %._crit_edge387, label %.preheader329.us

.preheader329.us:                                 ; preds = %._crit_edge382, %._crit_edge385.us
  %.5309386.us = phi i32 [ %280, %._crit_edge385.us ], [ 0, %._crit_edge382 ]
  br label %272

272:                                              ; preds = %.preheader329.us, %272
  %.11383.us = phi i32 [ 0, %.preheader329.us ], [ %279, %272 ]
  %273 = mul nsw i32 %.11383.us, %37
  %274 = load i32, ptr %3, align 4, !tbaa !9
  %275 = mul nsw i32 %273, %274
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i16, ptr %56, i64 %276
  %278 = getelementptr inbounds i16, ptr %61, i64 %276
  call void @pack_tpp_normtovnni(ptr noundef %277, ptr noundef %278, i32 noundef %37, i32 noundef %274, i32 noundef %38, i32 noundef %35, i32 noundef %40, ptr noundef %104)
  %279 = add nuw nsw i32 %.11383.us, 1
  %exitcond421.not = icmp eq i32 %279, %36
  br i1 %exitcond421.not, label %._crit_edge385.us, label %272, !llvm.loop !40

._crit_edge385.us:                                ; preds = %272
  %280 = add nuw nsw i32 %.5309386.us, 1
  %exitcond422.not = icmp eq i32 %280, %39
  br i1 %exitcond422.not, label %._crit_edge387, label %.preheader329.us, !llvm.loop !41

._crit_edge387:                                   ; preds = %._crit_edge385.us, %._crit_edge382
  %281 = call i64 @libxsmm_timer_tick() #7
  %282 = call double @libxsmm_timer_duration(i64 noundef %271, i64 noundef %281) #7
  %283 = fdiv double %49, %282
  %284 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef %282, double noundef %283)
  %285 = call i64 @libxsmm_timer_tick() #7
  %brmerge442 = or i1 %215, %72
  br i1 %brmerge442, label %._crit_edge392, label %.preheader.us

.preheader.us:                                    ; preds = %._crit_edge387, %._crit_edge390.us
  %.6310391.us = phi i32 [ %294, %._crit_edge390.us ], [ 0, %._crit_edge387 ]
  br label %286

286:                                              ; preds = %.preheader.us, %286
  %.12388.us = phi i32 [ 0, %.preheader.us ], [ %293, %286 ]
  %287 = mul nsw i32 %.12388.us, %37
  %288 = load i32, ptr %3, align 4, !tbaa !9
  %289 = mul nsw i32 %287, %288
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds i16, ptr %61, i64 %290
  %292 = getelementptr inbounds i16, ptr %62, i64 %290
  call void @unpack_tpp_normtovnni(ptr noundef %291, ptr noundef %292, i32 noundef %37, i32 noundef %288, i32 noundef %38, i32 noundef %35, i32 noundef %40)
  %293 = add nuw nsw i32 %.12388.us, 1
  %exitcond423.not = icmp eq i32 %293, %36
  br i1 %exitcond423.not, label %._crit_edge390.us, label %286, !llvm.loop !42

._crit_edge390.us:                                ; preds = %286
  %294 = add nuw nsw i32 %.6310391.us, 1
  %exitcond424.not = icmp eq i32 %294, %39
  br i1 %exitcond424.not, label %._crit_edge392, label %.preheader.us, !llvm.loop !43

._crit_edge392:                                   ; preds = %._crit_edge390.us, %._crit_edge387
  %295 = call i64 @libxsmm_timer_tick() #7
  %296 = call double @libxsmm_timer_duration(i64 noundef %285, i64 noundef %295) #7
  %297 = fdiv double %49, %296
  %298 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, double noundef %296, double noundef %297)
  call void @libxsmm_free(ptr noundef %63) #7
  call void @libxsmm_free(ptr noundef %62) #7
  call void @libxsmm_free(ptr noundef %61) #7
  call void @libxsmm_free(ptr noundef %60) #7
  call void @libxsmm_free(ptr noundef %56) #7
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #7
  ret i32 0
}

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

declare i32 @libxsmm_cpuid_dot_pack_factor(i32 noundef) local_unnamed_addr #4

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

declare void @libxsmm_create_meltw_unary_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_meltw_unary_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #4

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

declare double @libxsmm_rng_f64() local_unnamed_addr #4

declare void @libxsmm_rne_convert_fp32_bf16(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

declare void @libxsmm_convert_bf16_f32(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

declare ptr @libxsmm_dispatch_meltw_unary(i32 noundef, ptr noundef byval(%struct.libxsmm_meltw_unary_shape) align 8, i32 noundef) local_unnamed_addr #4

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

declare double @libxsmm_matdiff_epsilon(ptr noundef) local_unnamed_addr #4

declare i64 @libxsmm_timer_tick() local_unnamed_addr #4

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

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { nounwind willreturn memory(read) }
attributes #7 = { 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 = distinct !{!11, !12, !13}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.unswitch.partial.disable"}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = !{!21, !22, i64 80}
!21 = !{!"libxsmm_matdiff_info", !22, i64 0, !22, i64 8, !22, i64 16, !22, i64 24, !22, i64 32, !22, i64 40, !22, i64 48, !22, i64 56, !22, i64 64, !22, i64 72, !22, i64 80, !22, i64 88, !22, i64 96, !22, i64 104, !22, i64 112, !22, i64 120, !22, i64 128, !22, i64 136, !22, i64 144, !22, i64 152, !22, i64 160, !22, i64 168, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188}
!22 = !{!"double", !7, i64 0}
!23 = !{!21, !22, i64 120}
!24 = !{!21, !22, i64 56}
!25 = !{!21, !22, i64 64}
!26 = !{!21, !22, i64 40}
!27 = !{!21, !22, i64 48}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}
!38 = distinct !{!38, !12}
!39 = distinct !{!39, !12}
!40 = distinct !{!40, !12}
!41 = distinct !{!41, !12}
!42 = distinct !{!42, !12}
!43 = distinct !{!43, !12}


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