; LLVM IR from libxsmm/libxsmm :: samples/eltwise (eltwise_unary_reduce)

; 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_meltw_unary_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.libxsmm_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 }

@is_reference_kernel = external dso_local global i32, align 4
@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [348 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [88 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [12 x i8], align 1
@stdout = external global ptr, align 8
@.str.39 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_return_success_code(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 i32, align 4
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, 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 ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca %struct.libxsmm_meltw_unary_param, align 8
  %42 = alloca ptr, align 8
  %43 = alloca %struct.libxsmm_meltw_unary_param, align 8
  %44 = alloca %struct.libxsmm_matdiff_info, align 8
  %45 = alloca %struct.libxsmm_matdiff_info, align 8
  %46 = alloca %struct.libxsmm_matdiff_info, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca i32, align 4
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca double, align 8
  %56 = alloca ptr, align 8
  %57 = alloca double, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  store i32 64, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  store i32 64, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  store i32 1, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  store i32 1, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  store i32 1, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  store i32 0, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  store i64 0, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  store i32 0, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  store i32 64, ptr %20, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  store ptr null, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  store ptr null, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  store ptr null, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  store ptr null, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  store ptr null, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  store ptr null, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  store ptr null, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  store ptr null, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  store ptr null, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  store ptr null, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  store ptr null, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  store ptr null, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  store ptr null, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  store ptr null, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #10
  store ptr null, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  store ptr null, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  store ptr null, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  store ptr null, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  store ptr null, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  store ptr null, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr %41) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  store ptr null, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 192, ptr %44) #10
  call void @llvm.lifetime.start.p0(i64 192, ptr %45) #10
  call void @llvm.lifetime.start.p0(i64 192, ptr %46) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #10
  store double 0.000000e+00, ptr %49, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #10
  store double 0.000000e+00, ptr %50, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #10
  store i32 0, ptr %51, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #10
  store ptr null, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #10
  store i32 15, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #10
  %58 = call ptr @getenv(ptr noundef @.str) #10
  store ptr %58, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  %59 = load ptr, ptr %54, align 8, !tbaa !9
  %60 = icmp eq ptr null, %59
  br i1 %60, label %61, label %62

61:                                               ; preds = %2
  br label %65

62:                                               ; preds = %2
  %63 = load ptr, ptr %54, align 8, !tbaa !9
  %64 = call double @atof(ptr noundef %63) #11
  br label %65

65:                                               ; preds = %62, %61
  %66 = phi double [ 1.000000e+00, %61 ], [ %64, %62 ]
  %67 = fcmp ole double 0.000000e+00, %66
  br i1 %67, label %68, label %77

68:                                               ; preds = %65
  %69 = load ptr, ptr %54, align 8, !tbaa !9
  %70 = icmp eq ptr null, %69
  br i1 %70, label %71, label %72

71:                                               ; preds = %68
  br label %75

72:                                               ; preds = %68
  %73 = load ptr, ptr %54, align 8, !tbaa !9
  %74 = call double @atof(ptr noundef %73) #11
  br label %75

75:                                               ; preds = %72, %71
  %76 = phi double [ 1.000000e+00, %71 ], [ %74, %72 ]
  br label %87

77:                                               ; preds = %65
  %78 = load ptr, ptr %54, align 8, !tbaa !9
  %79 = icmp eq ptr null, %78
  br i1 %79, label %80, label %81

80:                                               ; preds = %77
  br label %84

81:                                               ; preds = %77
  %82 = load ptr, ptr %54, align 8, !tbaa !9
  %83 = call double @atof(ptr noundef %82) #11
  br label %84

84:                                               ; preds = %81, %80
  %85 = phi double [ 1.000000e+00, %80 ], [ %83, %81 ]
  %86 = fneg double %85
  br label %87

87:                                               ; preds = %84, %75
  %88 = phi double [ %76, %75 ], [ %86, %84 ]
  store double %88, ptr %55, align 8, !tbaa !13
  call void @libxsmm_init()
  call void @libxsmm_matdiff_clear(ptr noundef %44)
  call void @libxsmm_matdiff_clear(ptr noundef %45)
  call void @libxsmm_matdiff_clear(ptr noundef %46)
  %89 = load i32, ptr %4, align 4, !tbaa !5
  %90 = icmp sgt i32 %89, 1
  br i1 %90, label %91, label %96

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

96:                                               ; preds = %91, %87
  %97 = load i32, ptr %4, align 4, !tbaa !5
  %98 = icmp sgt i32 %97, 2
  br i1 %98, label %99, label %104

99:                                               ; preds = %96
  %100 = load ptr, ptr %5, align 8, !tbaa !9
  %101 = getelementptr inbounds ptr, ptr %100, i64 2
  %102 = load ptr, ptr %101, align 8, !tbaa !9
  %103 = call i32 @atoi(ptr noundef %102) #11
  store i32 %103, ptr %7, align 4, !tbaa !5
  br label %104

104:                                              ; preds = %99, %96
  %105 = load i32, ptr %4, align 4, !tbaa !5
  %106 = icmp sgt i32 %105, 3
  br i1 %106, label %107, label %112

107:                                              ; preds = %104
  %108 = load ptr, ptr %5, align 8, !tbaa !9
  %109 = getelementptr inbounds ptr, ptr %108, i64 3
  %110 = load ptr, ptr %109, align 8, !tbaa !9
  %111 = call i32 @atoi(ptr noundef %110) #11
  store i32 %111, ptr %20, align 4, !tbaa !5
  br label %112

112:                                              ; preds = %107, %104
  %113 = load i32, ptr %4, align 4, !tbaa !5
  %114 = icmp sgt i32 %113, 4
  br i1 %114, label %115, label %120

115:                                              ; preds = %112
  %116 = load ptr, ptr %5, align 8, !tbaa !9
  %117 = getelementptr inbounds ptr, ptr %116, i64 4
  %118 = load ptr, ptr %117, align 8, !tbaa !9
  %119 = call i32 @atoi(ptr noundef %118) #11
  store i32 %119, ptr %8, align 4, !tbaa !5
  br label %120

120:                                              ; preds = %115, %112
  %121 = load i32, ptr %4, align 4, !tbaa !5
  %122 = icmp sgt i32 %121, 5
  br i1 %122, label %123, label %128

123:                                              ; preds = %120
  %124 = load ptr, ptr %5, align 8, !tbaa !9
  %125 = getelementptr inbounds ptr, ptr %124, i64 5
  %126 = load ptr, ptr %125, align 8, !tbaa !9
  %127 = call i32 @atoi(ptr noundef %126) #11
  store i32 %127, ptr %9, align 4, !tbaa !5
  br label %128

128:                                              ; preds = %123, %120
  %129 = load i32, ptr %4, align 4, !tbaa !5
  %130 = icmp sgt i32 %129, 6
  br i1 %130, label %131, label %136

131:                                              ; preds = %128
  %132 = load ptr, ptr %5, align 8, !tbaa !9
  %133 = getelementptr inbounds ptr, ptr %132, i64 6
  %134 = load ptr, ptr %133, align 8, !tbaa !9
  %135 = call i32 @atoi(ptr noundef %134) #11
  store i32 %135, ptr %10, align 4, !tbaa !5
  br label %136

136:                                              ; preds = %131, %128
  %137 = load i32, ptr %4, align 4, !tbaa !5
  %138 = icmp sgt i32 %137, 7
  br i1 %138, label %139, label %144

139:                                              ; preds = %136
  %140 = load ptr, ptr %5, align 8, !tbaa !9
  %141 = getelementptr inbounds ptr, ptr %140, i64 7
  %142 = load ptr, ptr %141, align 8, !tbaa !9
  %143 = call i32 @atoi(ptr noundef %142) #11
  store i32 %143, ptr %16, align 4, !tbaa !5
  br label %144

144:                                              ; preds = %139, %136
  %145 = load i32, ptr %4, align 4, !tbaa !5
  %146 = icmp sgt i32 %145, 8
  br i1 %146, label %147, label %151

147:                                              ; preds = %144
  %148 = load ptr, ptr %5, align 8, !tbaa !9
  %149 = getelementptr inbounds ptr, ptr %148, i64 8
  %150 = load ptr, ptr %149, align 8, !tbaa !9
  store ptr %150, ptr %52, align 8, !tbaa !9
  br label %151

151:                                              ; preds = %147, %144
  %152 = load i32, ptr %4, align 4, !tbaa !5
  %153 = icmp sgt i32 %152, 9
  br i1 %153, label %154, label %160

154:                                              ; preds = %151
  %155 = load ptr, ptr %5, align 8, !tbaa !9
  %156 = getelementptr inbounds ptr, ptr %155, i64 9
  %157 = load ptr, ptr %156, align 8, !tbaa !9
  %158 = call i32 @atoi(ptr noundef %157) #11
  %159 = sext i32 %158 to i64
  store i64 %159, ptr %17, align 8, !tbaa !11
  br label %160

160:                                              ; preds = %154, %151
  %161 = load i32, ptr %4, align 4, !tbaa !5
  %162 = icmp sgt i32 %161, 10
  br i1 %162, label %163, label %168

163:                                              ; preds = %160
  %164 = load ptr, ptr %5, align 8, !tbaa !9
  %165 = getelementptr inbounds ptr, ptr %164, i64 10
  %166 = load ptr, ptr %165, align 8, !tbaa !9
  %167 = call i32 @atoi(ptr noundef %166) #11
  store i32 %167, ptr %18, align 4, !tbaa !5
  br label %168

168:                                              ; preds = %163, %160
  %169 = load i32, ptr %4, align 4, !tbaa !5
  %170 = icmp sgt i32 %169, 11
  br i1 %170, label %171, label %176

171:                                              ; preds = %168
  %172 = load ptr, ptr %5, align 8, !tbaa !9
  %173 = getelementptr inbounds ptr, ptr %172, i64 11
  %174 = load ptr, ptr %173, align 8, !tbaa !9
  %175 = call i32 @atoi(ptr noundef %174) #11
  store i32 %175, ptr %19, align 4, !tbaa !5
  br label %176

176:                                              ; preds = %171, %168
  %177 = load i32, ptr %4, align 4, !tbaa !5
  %178 = icmp sgt i32 %177, 12
  br i1 %178, label %179, label %184

179:                                              ; preds = %176
  %180 = load ptr, ptr %5, align 8, !tbaa !9
  %181 = getelementptr inbounds ptr, ptr %180, i64 12
  %182 = load ptr, ptr %181, align 8, !tbaa !9
  %183 = call i32 @atoi(ptr noundef %182) #11
  store i32 %183, ptr %51, align 4, !tbaa !5
  br label %184

184:                                              ; preds = %179, %176
  %185 = load i32, ptr %4, align 4, !tbaa !5
  %186 = icmp sgt i32 %185, 13
  br i1 %186, label %187, label %192

187:                                              ; preds = %184
  %188 = load ptr, ptr %5, align 8, !tbaa !9
  %189 = getelementptr inbounds ptr, ptr %188, i64 13
  %190 = load ptr, ptr %189, align 8, !tbaa !9
  %191 = call i32 @atoi(ptr noundef %190) #11
  store i32 %191, ptr %15, align 4, !tbaa !5
  br label %192

192:                                              ; preds = %187, %184
  %193 = load i32, ptr %6, align 4, !tbaa !5
  %194 = load i32, ptr %7, align 4, !tbaa !5
  %195 = load i32, ptr %20, align 4, !tbaa !5
  %196 = load i32, ptr %8, align 4, !tbaa !5
  %197 = load i32, ptr %9, align 4, !tbaa !5
  %198 = load i32, ptr %10, align 4, !tbaa !5
  %199 = load i32, ptr %16, align 4, !tbaa !5
  %200 = load ptr, ptr %52, align 8, !tbaa !9
  %201 = load i64, ptr %17, align 8, !tbaa !11
  %202 = load i32, ptr %18, align 4, !tbaa !5
  %203 = load i32, ptr %19, align 4, !tbaa !5
  %204 = load i32, ptr %51, align 4, !tbaa !5
  %205 = load i32, ptr %15, align 4, !tbaa !5
  %206 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef %193, i32 noundef %194, i32 noundef %195, i32 noundef %196, i32 noundef %197, i32 noundef %198, i32 noundef %199, ptr noundef %200, i64 noundef %201, i32 noundef %202, i32 noundef %203, i32 noundef %204, i32 noundef %205)
  %207 = load i32, ptr %6, align 4, !tbaa !5
  %208 = icmp ult i32 %207, 1
  br i1 %208, label %209, label %210

209:                                              ; preds = %192
  br label %212

210:                                              ; preds = %192
  %211 = load i32, ptr %6, align 4, !tbaa !5
  br label %212

212:                                              ; preds = %210, %209
  %213 = phi i32 [ 1, %209 ], [ %211, %210 ]
  store i32 %213, ptr %6, align 4, !tbaa !5
  %214 = load i32, ptr %7, align 4, !tbaa !5
  %215 = icmp ult i32 %214, 1
  br i1 %215, label %216, label %217

216:                                              ; preds = %212
  br label %219

217:                                              ; preds = %212
  %218 = load i32, ptr %7, align 4, !tbaa !5
  br label %219

219:                                              ; preds = %217, %216
  %220 = phi i32 [ 1, %216 ], [ %218, %217 ]
  store i32 %220, ptr %7, align 4, !tbaa !5
  %221 = load i32, ptr %20, align 4, !tbaa !5
  %222 = load i32, ptr %6, align 4, !tbaa !5
  %223 = icmp slt i32 %221, %222
  br i1 %223, label %224, label %226

224:                                              ; preds = %219
  %225 = load i32, ptr %6, align 4, !tbaa !5
  br label %228

226:                                              ; preds = %219
  %227 = load i32, ptr %20, align 4, !tbaa !5
  br label %228

228:                                              ; preds = %226, %224
  %229 = phi i32 [ %225, %224 ], [ %227, %226 ]
  store i32 %229, ptr %20, align 4, !tbaa !5
  %230 = load i32, ptr %10, align 4, !tbaa !5
  %231 = icmp eq i32 %230, 1
  br i1 %231, label %232, label %234

232:                                              ; preds = %228
  %233 = load i32, ptr %7, align 4, !tbaa !5
  br label %236

234:                                              ; preds = %228
  %235 = load i32, ptr %20, align 4, !tbaa !5
  br label %236

236:                                              ; preds = %234, %232
  %237 = phi i32 [ %233, %232 ], [ %235, %234 ]
  store i32 %237, ptr %11, align 4, !tbaa !5
  %238 = load i32, ptr %10, align 4, !tbaa !5
  %239 = icmp eq i32 %238, 1
  br i1 %239, label %240, label %242

240:                                              ; preds = %236
  %241 = load i32, ptr %7, align 4, !tbaa !5
  br label %244

242:                                              ; preds = %236
  %243 = load i32, ptr %6, align 4, !tbaa !5
  br label %244

244:                                              ; preds = %242, %240
  %245 = phi i32 [ %241, %240 ], [ %243, %242 ]
  store i32 %245, ptr %12, align 4, !tbaa !5
  %246 = load ptr, ptr %52, align 8, !tbaa !9
  %247 = call i32 @char_to_libxsmm_datatype(ptr noundef %246)
  store i32 %247, ptr %53, align 4, !tbaa !5
  %248 = load i32, ptr %53, align 4, !tbaa !5
  %249 = icmp ne i32 %248, 1
  br i1 %249, label %250, label %267

250:                                              ; preds = %244
  %251 = load i32, ptr %53, align 4, !tbaa !5
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %253, label %267

253:                                              ; preds = %250
  %254 = load i32, ptr %53, align 4, !tbaa !5
  %255 = icmp ne i32 %254, 3
  br i1 %255, label %256, label %267

256:                                              ; preds = %253
  %257 = load i32, ptr %53, align 4, !tbaa !5
  %258 = icmp ne i32 %257, 2
  br i1 %258, label %259, label %267

259:                                              ; preds = %256
  %260 = load i32, ptr %53, align 4, !tbaa !5
  %261 = icmp ne i32 %260, 4
  br i1 %261, label %262, label %267

262:                                              ; preds = %259
  %263 = load i32, ptr %53, align 4, !tbaa !5
  %264 = icmp ne i32 %263, 5
  br i1 %264, label %265, label %267

265:                                              ; preds = %262
  %266 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  call void @exit(i32 noundef 1) #12
  unreachable

267:                                              ; preds = %262, %259, %256, %253, %250, %244
  %268 = load i32, ptr %20, align 4, !tbaa !5
  %269 = sext i32 %268 to i64
  %270 = mul i64 4, %269
  %271 = load i32, ptr %7, align 4, !tbaa !5
  %272 = zext i32 %271 to i64
  %273 = mul i64 %270, %272
  %274 = call noalias ptr @malloc(i64 noundef %273) #13
  store ptr %274, ptr %21, align 8, !tbaa !9
  %275 = load i32, ptr %20, align 4, !tbaa !5
  %276 = sext i32 %275 to i64
  %277 = mul i64 8, %276
  %278 = load i32, ptr %7, align 4, !tbaa !5
  %279 = zext i32 %278 to i64
  %280 = mul i64 %277, %279
  %281 = call noalias ptr @malloc(i64 noundef %280) #13
  store ptr %281, ptr %26, align 8, !tbaa !9
  %282 = load i32, ptr %11, align 4, !tbaa !5
  %283 = zext i32 %282 to i64
  %284 = mul i64 4, %283
  %285 = mul i64 %284, 2
  %286 = call noalias ptr @malloc(i64 noundef %285) #13
  store ptr %286, ptr %22, align 8, !tbaa !9
  %287 = load i32, ptr %11, align 4, !tbaa !5
  %288 = zext i32 %287 to i64
  %289 = mul i64 8, %288
  %290 = mul i64 %289, 2
  %291 = call noalias ptr @malloc(i64 noundef %290) #13
  store ptr %291, ptr %27, align 8, !tbaa !9
  %292 = load ptr, ptr %21, align 8, !tbaa !9
  %293 = load i32, ptr %20, align 4, !tbaa !5
  %294 = load i32, ptr %6, align 4, !tbaa !5
  %295 = load i32, ptr %7, align 4, !tbaa !5
  call void @sfill_matrix(ptr noundef %292, i32 noundef %293, i32 noundef %294, i32 noundef %295)
  %296 = load i32, ptr %51, align 4, !tbaa !5
  %297 = icmp ugt i32 %296, 0
  br i1 %297, label %298, label %304

298:                                              ; preds = %267
  %299 = load ptr, ptr %22, align 8, !tbaa !9
  %300 = load i32, ptr %11, align 4, !tbaa !5
  %301 = mul i32 %300, 2
  %302 = load i32, ptr %11, align 4, !tbaa !5
  %303 = mul i32 %302, 2
  call void @sfill_matrix(ptr noundef %299, i32 noundef %301, i32 noundef %303, i32 noundef 1)
  br label %304

304:                                              ; preds = %298, %267
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %305

305:                                              ; preds = %322, %304
  %306 = load i32, ptr %14, align 4, !tbaa !5
  %307 = load i32, ptr %20, align 4, !tbaa !5
  %308 = load i32, ptr %7, align 4, !tbaa !5
  %309 = mul i32 %307, %308
  %310 = icmp ult i32 %306, %309
  br i1 %310, label %311, label %325

311:                                              ; preds = %305
  %312 = load ptr, ptr %21, align 8, !tbaa !9
  %313 = load i32, ptr %14, align 4, !tbaa !5
  %314 = zext i32 %313 to i64
  %315 = getelementptr inbounds float, ptr %312, i64 %314
  %316 = load float, ptr %315, align 4, !tbaa !15
  %317 = fpext float %316 to double
  %318 = load ptr, ptr %26, align 8, !tbaa !9
  %319 = load i32, ptr %14, align 4, !tbaa !5
  %320 = zext i32 %319 to i64
  %321 = getelementptr inbounds double, ptr %318, i64 %320
  store double %317, ptr %321, align 8, !tbaa !13
  br label %322

322:                                              ; preds = %311
  %323 = load i32, ptr %14, align 4, !tbaa !5
  %324 = add i32 %323, 1
  store i32 %324, ptr %14, align 4, !tbaa !5
  br label %305, !llvm.loop !17

325:                                              ; preds = %305
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %326

326:                                              ; preds = %342, %325
  %327 = load i32, ptr %14, align 4, !tbaa !5
  %328 = load i32, ptr %11, align 4, !tbaa !5
  %329 = mul i32 %328, 2
  %330 = icmp ult i32 %327, %329
  br i1 %330, label %331, label %345

331:                                              ; preds = %326
  %332 = load ptr, ptr %22, align 8, !tbaa !9
  %333 = load i32, ptr %14, align 4, !tbaa !5
  %334 = zext i32 %333 to i64
  %335 = getelementptr inbounds float, ptr %332, i64 %334
  %336 = load float, ptr %335, align 4, !tbaa !15
  %337 = fpext float %336 to double
  %338 = load ptr, ptr %27, align 8, !tbaa !9
  %339 = load i32, ptr %14, align 4, !tbaa !5
  %340 = zext i32 %339 to i64
  %341 = getelementptr inbounds double, ptr %338, i64 %340
  store double %337, ptr %341, align 8, !tbaa !13
  br label %342

342:                                              ; preds = %331
  %343 = load i32, ptr %14, align 4, !tbaa !5
  %344 = add i32 %343, 1
  store i32 %344, ptr %14, align 4, !tbaa !5
  br label %326, !llvm.loop !19

345:                                              ; preds = %326
  %346 = load i32, ptr %11, align 4, !tbaa !5
  %347 = zext i32 %346 to i64
  %348 = mul i64 %347, 4
  %349 = call noalias ptr @malloc(i64 noundef %348) #13
  store ptr %349, ptr %24, align 8, !tbaa !9
  %350 = load i32, ptr %11, align 4, !tbaa !5
  %351 = zext i32 %350 to i64
  %352 = mul i64 %351, 4
  %353 = call noalias ptr @malloc(i64 noundef %352) #13
  store ptr %353, ptr %25, align 8, !tbaa !9
  %354 = load i32, ptr %11, align 4, !tbaa !5
  %355 = zext i32 %354 to i64
  %356 = mul i64 %355, 8
  %357 = call noalias ptr @malloc(i64 noundef %356) #13
  store ptr %357, ptr %29, align 8, !tbaa !9
  %358 = load i32, ptr %11, align 4, !tbaa !5
  %359 = zext i32 %358 to i64
  %360 = mul i64 %359, 8
  %361 = call noalias ptr @malloc(i64 noundef %360) #13
  store ptr %361, ptr %30, align 8, !tbaa !9
  %362 = load i32, ptr %53, align 4, !tbaa !5
  %363 = icmp eq i32 %362, 2
  br i1 %363, label %364, label %378

364:                                              ; preds = %345
  %365 = load i32, ptr %20, align 4, !tbaa !5
  %366 = sext i32 %365 to i64
  %367 = mul i64 2, %366
  %368 = load i32, ptr %7, align 4, !tbaa !5
  %369 = zext i32 %368 to i64
  %370 = mul i64 %367, %369
  %371 = call noalias ptr @malloc(i64 noundef %370) #13
  store ptr %371, ptr %35, align 8, !tbaa !9
  %372 = load ptr, ptr %21, align 8, !tbaa !9
  %373 = load ptr, ptr %35, align 8, !tbaa !9
  %374 = load i32, ptr %20, align 4, !tbaa !5
  %375 = load i32, ptr %7, align 4, !tbaa !5
  %376 = mul i32 %374, %375
  %377 = zext i32 %376 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %372, ptr noundef %373, i64 noundef %377)
  br label %432

378:                                              ; preds = %345
  %379 = load i32, ptr %53, align 4, !tbaa !5
  %380 = icmp eq i32 %379, 3
  br i1 %380, label %381, label %395

381:                                              ; preds = %378
  %382 = load i32, ptr %20, align 4, !tbaa !5
  %383 = sext i32 %382 to i64
  %384 = mul i64 2, %383
  %385 = load i32, ptr %7, align 4, !tbaa !5
  %386 = zext i32 %385 to i64
  %387 = mul i64 %384, %386
  %388 = call noalias ptr @malloc(i64 noundef %387) #13
  store ptr %388, ptr %35, align 8, !tbaa !9
  %389 = load ptr, ptr %21, align 8, !tbaa !9
  %390 = load ptr, ptr %35, align 8, !tbaa !9
  %391 = load i32, ptr %20, align 4, !tbaa !5
  %392 = load i32, ptr %7, align 4, !tbaa !5
  %393 = mul i32 %391, %392
  %394 = zext i32 %393 to i64
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %389, ptr noundef %390, i64 noundef %394)
  br label %431

395:                                              ; preds = %378
  %396 = load i32, ptr %53, align 4, !tbaa !5
  %397 = icmp eq i32 %396, 4
  br i1 %397, label %398, label %412

398:                                              ; preds = %395
  %399 = load i32, ptr %20, align 4, !tbaa !5
  %400 = sext i32 %399 to i64
  %401 = mul i64 1, %400
  %402 = load i32, ptr %7, align 4, !tbaa !5
  %403 = zext i32 %402 to i64
  %404 = mul i64 %401, %403
  %405 = call noalias ptr @malloc(i64 noundef %404) #13
  store ptr %405, ptr %35, align 8, !tbaa !9
  %406 = load ptr, ptr %21, align 8, !tbaa !9
  %407 = load ptr, ptr %35, align 8, !tbaa !9
  %408 = load i32, ptr %20, align 4, !tbaa !5
  %409 = load i32, ptr %7, align 4, !tbaa !5
  %410 = mul i32 %408, %409
  %411 = zext i32 %410 to i64
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %406, ptr noundef %407, i64 noundef %411)
  br label %430

412:                                              ; preds = %395
  %413 = load i32, ptr %53, align 4, !tbaa !5
  %414 = icmp eq i32 %413, 5
  br i1 %414, label %415, label %429

415:                                              ; preds = %412
  %416 = load i32, ptr %20, align 4, !tbaa !5
  %417 = sext i32 %416 to i64
  %418 = mul i64 1, %417
  %419 = load i32, ptr %7, align 4, !tbaa !5
  %420 = zext i32 %419 to i64
  %421 = mul i64 %418, %420
  %422 = call noalias ptr @malloc(i64 noundef %421) #13
  store ptr %422, ptr %35, align 8, !tbaa !9
  %423 = load ptr, ptr %21, align 8, !tbaa !9
  %424 = load ptr, ptr %35, align 8, !tbaa !9
  %425 = load i32, ptr %20, align 4, !tbaa !5
  %426 = load i32, ptr %7, align 4, !tbaa !5
  %427 = mul i32 %425, %426
  %428 = zext i32 %427 to i64
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %423, ptr noundef %424, i64 noundef %428)
  br label %429

429:                                              ; preds = %415, %412
  br label %430

430:                                              ; preds = %429, %398
  br label %431

431:                                              ; preds = %430, %381
  br label %432

432:                                              ; preds = %431, %364
  %433 = load i32, ptr %53, align 4, !tbaa !5
  %434 = icmp eq i32 %433, 2
  br i1 %434, label %435, label %455

435:                                              ; preds = %432
  %436 = load i32, ptr %11, align 4, !tbaa !5
  %437 = zext i32 %436 to i64
  %438 = mul i64 2, %437
  %439 = mul i64 %438, 2
  %440 = call noalias ptr @malloc(i64 noundef %439) #13
  store ptr %440, ptr %36, align 8, !tbaa !9
  %441 = load ptr, ptr %36, align 8, !tbaa !9
  %442 = load i32, ptr %11, align 4, !tbaa !5
  %443 = zext i32 %442 to i64
  %444 = mul i64 2, %443
  %445 = mul i64 %444, 2
  call void @llvm.memset.p0.i64(ptr align 1 %441, i8 0, i64 %445, i1 false)
  store ptr null, ptr %37, align 8, !tbaa !9
  %446 = load i32, ptr %51, align 4, !tbaa !5
  %447 = icmp ugt i32 %446, 0
  br i1 %447, label %448, label %454

448:                                              ; preds = %435
  %449 = load ptr, ptr %22, align 8, !tbaa !9
  %450 = load ptr, ptr %36, align 8, !tbaa !9
  %451 = load i32, ptr %11, align 4, !tbaa !5
  %452 = mul i32 %451, 2
  %453 = zext i32 %452 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %449, ptr noundef %450, i64 noundef %453)
  br label %454

454:                                              ; preds = %448, %435
  br label %527

455:                                              ; preds = %432
  %456 = load i32, ptr %53, align 4, !tbaa !5
  %457 = icmp eq i32 %456, 3
  br i1 %457, label %458, label %478

458:                                              ; preds = %455
  %459 = load i32, ptr %11, align 4, !tbaa !5
  %460 = zext i32 %459 to i64
  %461 = mul i64 2, %460
  %462 = mul i64 %461, 2
  %463 = call noalias ptr @malloc(i64 noundef %462) #13
  store ptr %463, ptr %36, align 8, !tbaa !9
  %464 = load ptr, ptr %36, align 8, !tbaa !9
  %465 = load i32, ptr %11, align 4, !tbaa !5
  %466 = zext i32 %465 to i64
  %467 = mul i64 2, %466
  %468 = mul i64 %467, 2
  call void @llvm.memset.p0.i64(ptr align 1 %464, i8 0, i64 %468, i1 false)
  store ptr null, ptr %37, align 8, !tbaa !9
  %469 = load i32, ptr %51, align 4, !tbaa !5
  %470 = icmp ugt i32 %469, 0
  br i1 %470, label %471, label %477

471:                                              ; preds = %458
  %472 = load ptr, ptr %22, align 8, !tbaa !9
  %473 = load ptr, ptr %36, align 8, !tbaa !9
  %474 = load i32, ptr %11, align 4, !tbaa !5
  %475 = mul i32 %474, 2
  %476 = zext i32 %475 to i64
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %472, ptr noundef %473, i64 noundef %476)
  br label %477

477:                                              ; preds = %471, %458
  br label %526

478:                                              ; preds = %455
  %479 = load i32, ptr %53, align 4, !tbaa !5
  %480 = icmp eq i32 %479, 4
  br i1 %480, label %481, label %501

481:                                              ; preds = %478
  %482 = load i32, ptr %11, align 4, !tbaa !5
  %483 = zext i32 %482 to i64
  %484 = mul i64 1, %483
  %485 = mul i64 %484, 2
  %486 = call noalias ptr @malloc(i64 noundef %485) #13
  store ptr %486, ptr %36, align 8, !tbaa !9
  %487 = load ptr, ptr %36, align 8, !tbaa !9
  %488 = load i32, ptr %11, align 4, !tbaa !5
  %489 = zext i32 %488 to i64
  %490 = mul i64 1, %489
  %491 = mul i64 %490, 2
  call void @llvm.memset.p0.i64(ptr align 1 %487, i8 0, i64 %491, i1 false)
  store ptr null, ptr %37, align 8, !tbaa !9
  %492 = load i32, ptr %51, align 4, !tbaa !5
  %493 = icmp ugt i32 %492, 0
  br i1 %493, label %494, label %500

494:                                              ; preds = %481
  %495 = load ptr, ptr %22, align 8, !tbaa !9
  %496 = load ptr, ptr %36, align 8, !tbaa !9
  %497 = load i32, ptr %11, align 4, !tbaa !5
  %498 = mul i32 %497, 2
  %499 = zext i32 %498 to i64
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %495, ptr noundef %496, i64 noundef %499)
  br label %500

500:                                              ; preds = %494, %481
  br label %525

501:                                              ; preds = %478
  %502 = load i32, ptr %53, align 4, !tbaa !5
  %503 = icmp eq i32 %502, 5
  br i1 %503, label %504, label %524

504:                                              ; preds = %501
  %505 = load i32, ptr %11, align 4, !tbaa !5
  %506 = zext i32 %505 to i64
  %507 = mul i64 1, %506
  %508 = mul i64 %507, 2
  %509 = call noalias ptr @malloc(i64 noundef %508) #13
  store ptr %509, ptr %36, align 8, !tbaa !9
  %510 = load ptr, ptr %36, align 8, !tbaa !9
  %511 = load i32, ptr %11, align 4, !tbaa !5
  %512 = zext i32 %511 to i64
  %513 = mul i64 1, %512
  %514 = mul i64 %513, 2
  call void @llvm.memset.p0.i64(ptr align 1 %510, i8 0, i64 %514, i1 false)
  store ptr null, ptr %37, align 8, !tbaa !9
  %515 = load i32, ptr %51, align 4, !tbaa !5
  %516 = icmp ugt i32 %515, 0
  br i1 %516, label %517, label %523

517:                                              ; preds = %504
  %518 = load ptr, ptr %22, align 8, !tbaa !9
  %519 = load ptr, ptr %36, align 8, !tbaa !9
  %520 = load i32, ptr %11, align 4, !tbaa !5
  %521 = mul i32 %520, 2
  %522 = zext i32 %521 to i64
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %518, ptr noundef %519, i64 noundef %522)
  br label %523

523:                                              ; preds = %517, %504
  br label %524

524:                                              ; preds = %523, %501
  br label %525

525:                                              ; preds = %524, %500
  br label %526

526:                                              ; preds = %525, %477
  br label %527

527:                                              ; preds = %526, %454
  %528 = load i64, ptr %17, align 8, !tbaa !11
  %529 = mul i64 %528, 8
  %530 = call noalias ptr @malloc(i64 noundef %529) #13
  store ptr %530, ptr %38, align 8, !tbaa !9
  %531 = load i64, ptr %17, align 8, !tbaa !11
  %532 = mul i64 %531, 4
  %533 = call noalias ptr @malloc(i64 noundef %532) #13
  store ptr %533, ptr %39, align 8, !tbaa !9
  %534 = load i32, ptr %20, align 4, !tbaa !5
  %535 = sext i32 %534 to i64
  %536 = mul i64 %535, 8
  %537 = call noalias ptr @malloc(i64 noundef %536) #13
  store ptr %537, ptr %31, align 8, !tbaa !9
  %538 = load i32, ptr %20, align 4, !tbaa !5
  %539 = sext i32 %538 to i64
  %540 = mul i64 %539, 4
  %541 = call noalias ptr @malloc(i64 noundef %540) #13
  store ptr %541, ptr %33, align 8, !tbaa !9
  %542 = load i32, ptr %20, align 4, !tbaa !5
  %543 = sext i32 %542 to i64
  %544 = mul i64 %543, 8
  %545 = call noalias ptr @malloc(i64 noundef %544) #13
  store ptr %545, ptr %32, align 8, !tbaa !9
  %546 = load i32, ptr %20, align 4, !tbaa !5
  %547 = sext i32 %546 to i64
  %548 = mul i64 %547, 4
  %549 = call noalias ptr @malloc(i64 noundef %548) #13
  store ptr %549, ptr %34, align 8, !tbaa !9
  store ptr null, ptr %23, align 8, !tbaa !9
  %550 = load i32, ptr %16, align 4, !tbaa !5
  %551 = icmp eq i32 %550, 0
  br i1 %551, label %552, label %730

552:                                              ; preds = %527
  %553 = load i32, ptr %8, align 4, !tbaa !5
  %554 = icmp eq i32 %553, 1
  br i1 %554, label %555, label %661

555:                                              ; preds = %552
  %556 = load ptr, ptr %22, align 8, !tbaa !9
  %557 = load i32, ptr %11, align 4, !tbaa !5
  %558 = zext i32 %557 to i64
  %559 = getelementptr inbounds float, ptr %556, i64 %558
  store ptr %559, ptr %23, align 8, !tbaa !9
  %560 = load ptr, ptr %27, align 8, !tbaa !9
  %561 = load i32, ptr %11, align 4, !tbaa !5
  %562 = zext i32 %561 to i64
  %563 = getelementptr inbounds double, ptr %560, i64 %562
  store ptr %563, ptr %28, align 8, !tbaa !9
  %564 = load i32, ptr %53, align 4, !tbaa !5
  %565 = icmp eq i32 %564, 2
  br i1 %565, label %566, label %579

566:                                              ; preds = %555
  %567 = load ptr, ptr %36, align 8, !tbaa !9
  %568 = load i32, ptr %11, align 4, !tbaa !5
  %569 = zext i32 %568 to i64
  %570 = getelementptr inbounds i16, ptr %567, i64 %569
  store ptr %570, ptr %37, align 8, !tbaa !9
  %571 = load ptr, ptr %36, align 8, !tbaa !9
  %572 = load ptr, ptr %24, align 8, !tbaa !9
  %573 = load i32, ptr %11, align 4, !tbaa !5
  %574 = zext i32 %573 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %571, ptr noundef %572, i64 noundef %574)
  %575 = load ptr, ptr %37, align 8, !tbaa !9
  %576 = load ptr, ptr %25, align 8, !tbaa !9
  %577 = load i32, ptr %11, align 4, !tbaa !5
  %578 = zext i32 %577 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %575, ptr noundef %576, i64 noundef %578)
  br label %660

579:                                              ; preds = %555
  %580 = load i32, ptr %53, align 4, !tbaa !5
  %581 = icmp eq i32 %580, 3
  br i1 %581, label %582, label %595

582:                                              ; preds = %579
  %583 = load ptr, ptr %36, align 8, !tbaa !9
  %584 = load i32, ptr %11, align 4, !tbaa !5
  %585 = zext i32 %584 to i64
  %586 = getelementptr inbounds i16, ptr %583, i64 %585
  store ptr %586, ptr %37, align 8, !tbaa !9
  %587 = load ptr, ptr %36, align 8, !tbaa !9
  %588 = load ptr, ptr %24, align 8, !tbaa !9
  %589 = load i32, ptr %11, align 4, !tbaa !5
  %590 = zext i32 %589 to i64
  call void @libxsmm_convert_f16_f32(ptr noundef %587, ptr noundef %588, i64 noundef %590)
  %591 = load ptr, ptr %37, align 8, !tbaa !9
  %592 = load ptr, ptr %25, align 8, !tbaa !9
  %593 = load i32, ptr %11, align 4, !tbaa !5
  %594 = zext i32 %593 to i64
  call void @libxsmm_convert_f16_f32(ptr noundef %591, ptr noundef %592, i64 noundef %594)
  br label %659

595:                                              ; preds = %579
  %596 = load i32, ptr %53, align 4, !tbaa !5
  %597 = icmp eq i32 %596, 4
  br i1 %597, label %598, label %611

598:                                              ; preds = %595
  %599 = load ptr, ptr %36, align 8, !tbaa !9
  %600 = load i32, ptr %11, align 4, !tbaa !5
  %601 = zext i32 %600 to i64
  %602 = getelementptr inbounds i8, ptr %599, i64 %601
  store ptr %602, ptr %37, align 8, !tbaa !9
  %603 = load ptr, ptr %36, align 8, !tbaa !9
  %604 = load ptr, ptr %24, align 8, !tbaa !9
  %605 = load i32, ptr %11, align 4, !tbaa !5
  %606 = zext i32 %605 to i64
  call void @libxsmm_convert_bf8_f32(ptr noundef %603, ptr noundef %604, i64 noundef %606)
  %607 = load ptr, ptr %37, align 8, !tbaa !9
  %608 = load ptr, ptr %25, align 8, !tbaa !9
  %609 = load i32, ptr %11, align 4, !tbaa !5
  %610 = zext i32 %609 to i64
  call void @libxsmm_convert_bf8_f32(ptr noundef %607, ptr noundef %608, i64 noundef %610)
  br label %658

611:                                              ; preds = %595
  %612 = load i32, ptr %53, align 4, !tbaa !5
  %613 = icmp eq i32 %612, 5
  br i1 %613, label %614, label %627

614:                                              ; preds = %611
  %615 = load ptr, ptr %36, align 8, !tbaa !9
  %616 = load i32, ptr %11, align 4, !tbaa !5
  %617 = zext i32 %616 to i64
  %618 = getelementptr inbounds i8, ptr %615, i64 %617
  store ptr %618, ptr %37, align 8, !tbaa !9
  %619 = load ptr, ptr %36, align 8, !tbaa !9
  %620 = load ptr, ptr %24, align 8, !tbaa !9
  %621 = load i32, ptr %11, align 4, !tbaa !5
  %622 = zext i32 %621 to i64
  call void @libxsmm_convert_hf8_f32(ptr noundef %619, ptr noundef %620, i64 noundef %622)
  %623 = load ptr, ptr %37, align 8, !tbaa !9
  %624 = load ptr, ptr %25, align 8, !tbaa !9
  %625 = load i32, ptr %11, align 4, !tbaa !5
  %626 = zext i32 %625 to i64
  call void @libxsmm_convert_hf8_f32(ptr noundef %623, ptr noundef %624, i64 noundef %626)
  br label %657

627:                                              ; preds = %611
  %628 = load i32, ptr %53, align 4, !tbaa !5
  %629 = icmp eq i32 %628, 1
  br i1 %629, label %630, label %641

630:                                              ; preds = %627
  %631 = load ptr, ptr %24, align 8, !tbaa !9
  %632 = load ptr, ptr %22, align 8, !tbaa !9
  %633 = load i32, ptr %11, align 4, !tbaa !5
  %634 = zext i32 %633 to i64
  %635 = mul i64 4, %634
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %631, ptr align 1 %632, i64 %635, i1 false)
  %636 = load ptr, ptr %25, align 8, !tbaa !9
  %637 = load ptr, ptr %23, align 8, !tbaa !9
  %638 = load i32, ptr %11, align 4, !tbaa !5
  %639 = zext i32 %638 to i64
  %640 = mul i64 4, %639
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %636, ptr align 1 %637, i64 %640, i1 false)
  br label %656

641:                                              ; preds = %627
  %642 = load i32, ptr %53, align 4, !tbaa !5
  %643 = icmp eq i32 %642, 0
  br i1 %643, label %644, label %655

644:                                              ; preds = %641
  %645 = load ptr, ptr %29, align 8, !tbaa !9
  %646 = load ptr, ptr %27, align 8, !tbaa !9
  %647 = load i32, ptr %11, align 4, !tbaa !5
  %648 = zext i32 %647 to i64
  %649 = mul i64 8, %648
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %645, ptr align 1 %646, i64 %649, i1 false)
  %650 = load ptr, ptr %30, align 8, !tbaa !9
  %651 = load ptr, ptr %28, align 8, !tbaa !9
  %652 = load i32, ptr %11, align 4, !tbaa !5
  %653 = zext i32 %652 to i64
  %654 = mul i64 8, %653
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %650, ptr align 1 %651, i64 %654, i1 false)
  br label %655

655:                                              ; preds = %644, %641
  br label %656

656:                                              ; preds = %655, %630
  br label %657

657:                                              ; preds = %656, %614
  br label %658

658:                                              ; preds = %657, %598
  br label %659

659:                                              ; preds = %658, %582
  br label %660

660:                                              ; preds = %659, %566
  br label %661

661:                                              ; preds = %660, %552
  %662 = load i32, ptr %8, align 4, !tbaa !5
  %663 = icmp eq i32 %662, 0
  br i1 %663, label %664, label %729

664:                                              ; preds = %661
  %665 = load i32, ptr %9, align 4, !tbaa !5
  %666 = icmp eq i32 %665, 1
  br i1 %666, label %667, label %729

667:                                              ; preds = %664
  %668 = load ptr, ptr %22, align 8, !tbaa !9
  store ptr %668, ptr %23, align 8, !tbaa !9
  %669 = load ptr, ptr %27, align 8, !tbaa !9
  store ptr %669, ptr %28, align 8, !tbaa !9
  %670 = load i32, ptr %53, align 4, !tbaa !5
  %671 = icmp eq i32 %670, 2
  br i1 %671, label %672, label %678

672:                                              ; preds = %667
  %673 = load ptr, ptr %36, align 8, !tbaa !9
  store ptr %673, ptr %37, align 8, !tbaa !9
  %674 = load ptr, ptr %37, align 8, !tbaa !9
  %675 = load ptr, ptr %25, align 8, !tbaa !9
  %676 = load i32, ptr %11, align 4, !tbaa !5
  %677 = zext i32 %676 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %674, ptr noundef %675, i64 noundef %677)
  br label %728

678:                                              ; preds = %667
  %679 = load i32, ptr %53, align 4, !tbaa !5
  %680 = icmp eq i32 %679, 3
  br i1 %680, label %681, label %687

681:                                              ; preds = %678
  %682 = load ptr, ptr %36, align 8, !tbaa !9
  store ptr %682, ptr %37, align 8, !tbaa !9
  %683 = load ptr, ptr %37, align 8, !tbaa !9
  %684 = load ptr, ptr %25, align 8, !tbaa !9
  %685 = load i32, ptr %11, align 4, !tbaa !5
  %686 = zext i32 %685 to i64
  call void @libxsmm_convert_f16_f32(ptr noundef %683, ptr noundef %684, i64 noundef %686)
  br label %727

687:                                              ; preds = %678
  %688 = load i32, ptr %53, align 4, !tbaa !5
  %689 = icmp eq i32 %688, 4
  br i1 %689, label %690, label %696

690:                                              ; preds = %687
  %691 = load ptr, ptr %36, align 8, !tbaa !9
  store ptr %691, ptr %37, align 8, !tbaa !9
  %692 = load ptr, ptr %37, align 8, !tbaa !9
  %693 = load ptr, ptr %25, align 8, !tbaa !9
  %694 = load i32, ptr %11, align 4, !tbaa !5
  %695 = zext i32 %694 to i64
  call void @libxsmm_convert_bf8_f32(ptr noundef %692, ptr noundef %693, i64 noundef %695)
  br label %726

696:                                              ; preds = %687
  %697 = load i32, ptr %53, align 4, !tbaa !5
  %698 = icmp eq i32 %697, 5
  br i1 %698, label %699, label %705

699:                                              ; preds = %696
  %700 = load ptr, ptr %36, align 8, !tbaa !9
  store ptr %700, ptr %37, align 8, !tbaa !9
  %701 = load ptr, ptr %37, align 8, !tbaa !9
  %702 = load ptr, ptr %25, align 8, !tbaa !9
  %703 = load i32, ptr %11, align 4, !tbaa !5
  %704 = zext i32 %703 to i64
  call void @libxsmm_convert_hf8_f32(ptr noundef %701, ptr noundef %702, i64 noundef %704)
  br label %725

705:                                              ; preds = %696
  %706 = load i32, ptr %53, align 4, !tbaa !5
  %707 = icmp eq i32 %706, 1
  br i1 %707, label %708, label %714

708:                                              ; preds = %705
  %709 = load ptr, ptr %25, align 8, !tbaa !9
  %710 = load ptr, ptr %23, align 8, !tbaa !9
  %711 = load i32, ptr %11, align 4, !tbaa !5
  %712 = zext i32 %711 to i64
  %713 = mul i64 4, %712
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %709, ptr align 1 %710, i64 %713, i1 false)
  br label %724

714:                                              ; preds = %705
  %715 = load i32, ptr %53, align 4, !tbaa !5
  %716 = icmp eq i32 %715, 0
  br i1 %716, label %717, label %723

717:                                              ; preds = %714
  %718 = load ptr, ptr %30, align 8, !tbaa !9
  %719 = load ptr, ptr %28, align 8, !tbaa !9
  %720 = load i32, ptr %11, align 4, !tbaa !5
  %721 = zext i32 %720 to i64
  %722 = mul i64 8, %721
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %718, ptr align 1 %719, i64 %722, i1 false)
  br label %723

723:                                              ; preds = %717, %714
  br label %724

724:                                              ; preds = %723, %708
  br label %725

725:                                              ; preds = %724, %699
  br label %726

726:                                              ; preds = %725, %690
  br label %727

727:                                              ; preds = %726, %681
  br label %728

728:                                              ; preds = %727, %672
  br label %729

729:                                              ; preds = %728, %664, %661
  br label %730

730:                                              ; preds = %729, %527
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %731

731:                                              ; preds = %755, %730
  %732 = load i32, ptr %13, align 4, !tbaa !5
  %733 = zext i32 %732 to i64
  %734 = load i64, ptr %17, align 8, !tbaa !11
  %735 = icmp ult i64 %733, %734
  br i1 %735, label %736, label %758

736:                                              ; preds = %731
  %737 = call i32 @rand() #10
  %738 = load i32, ptr %7, align 4, !tbaa !5
  %739 = urem i32 %737, %738
  %740 = zext i32 %739 to i64
  %741 = load ptr, ptr %38, align 8, !tbaa !9
  %742 = load i32, ptr %13, align 4, !tbaa !5
  %743 = zext i32 %742 to i64
  %744 = getelementptr inbounds i64, ptr %741, i64 %743
  store i64 %740, ptr %744, align 8, !tbaa !11
  %745 = load ptr, ptr %38, align 8, !tbaa !9
  %746 = load i32, ptr %13, align 4, !tbaa !5
  %747 = zext i32 %746 to i64
  %748 = getelementptr inbounds i64, ptr %745, i64 %747
  %749 = load i64, ptr %748, align 8, !tbaa !11
  %750 = trunc i64 %749 to i32
  %751 = load ptr, ptr %39, align 8, !tbaa !9
  %752 = load i32, ptr %13, align 4, !tbaa !5
  %753 = zext i32 %752 to i64
  %754 = getelementptr inbounds i32, ptr %751, i64 %753
  store i32 %750, ptr %754, align 4, !tbaa !5
  br label %755

755:                                              ; preds = %736
  %756 = load i32, ptr %13, align 4, !tbaa !5
  %757 = add i32 %756, 1
  store i32 %757, ptr %13, align 4, !tbaa !5
  br label %731, !llvm.loop !20

758:                                              ; preds = %731
  %759 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %760 = load i32, ptr %53, align 4, !tbaa !5
  %761 = icmp eq i32 %760, 0
  br i1 %761, label %762, label %778

762:                                              ; preds = %758
  %763 = load i32, ptr %6, align 4, !tbaa !5
  %764 = load i32, ptr %7, align 4, !tbaa !5
  %765 = load i32, ptr %20, align 4, !tbaa !5
  %766 = load i64, ptr %17, align 8, !tbaa !11
  %767 = trunc i64 %766 to i32
  %768 = load ptr, ptr %26, align 8, !tbaa !9
  %769 = load ptr, ptr %29, align 8, !tbaa !9
  %770 = load ptr, ptr %30, align 8, !tbaa !9
  %771 = load ptr, ptr %38, align 8, !tbaa !9
  %772 = load i32, ptr %16, align 4, !tbaa !5
  %773 = load i32, ptr %10, align 4, !tbaa !5
  %774 = load i32, ptr %19, align 4, !tbaa !5
  %775 = load ptr, ptr %31, align 8, !tbaa !9
  %776 = load i32, ptr %53, align 4, !tbaa !5
  %777 = load i32, ptr %51, align 4, !tbaa !5
  call void @reference_reduce_kernel_f64(i32 noundef %763, i32 noundef %764, i32 noundef %765, i32 noundef %767, ptr noundef %768, ptr noundef %769, ptr noundef %770, ptr noundef %771, i32 noundef %772, i32 noundef %773, i32 noundef %774, ptr noundef %775, i32 noundef %776, i32 noundef %777)
  br label %794

778:                                              ; preds = %758
  %779 = load i32, ptr %6, align 4, !tbaa !5
  %780 = load i32, ptr %7, align 4, !tbaa !5
  %781 = load i32, ptr %20, align 4, !tbaa !5
  %782 = load i64, ptr %17, align 8, !tbaa !11
  %783 = trunc i64 %782 to i32
  %784 = load ptr, ptr %21, align 8, !tbaa !9
  %785 = load ptr, ptr %24, align 8, !tbaa !9
  %786 = load ptr, ptr %25, align 8, !tbaa !9
  %787 = load ptr, ptr %38, align 8, !tbaa !9
  %788 = load i32, ptr %16, align 4, !tbaa !5
  %789 = load i32, ptr %10, align 4, !tbaa !5
  %790 = load i32, ptr %19, align 4, !tbaa !5
  %791 = load ptr, ptr %31, align 8, !tbaa !9
  %792 = load i32, ptr %53, align 4, !tbaa !5
  %793 = load i32, ptr %51, align 4, !tbaa !5
  call void @reference_reduce_kernel(i32 noundef %779, i32 noundef %780, i32 noundef %781, i32 noundef %783, ptr noundef %784, ptr noundef %785, ptr noundef %786, ptr noundef %787, i32 noundef %788, i32 noundef %789, i32 noundef %790, ptr noundef %791, i32 noundef %792, i32 noundef %793)
  br label %794

794:                                              ; preds = %778, %762
  %795 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  %796 = load i32, ptr %6, align 4, !tbaa !5
  %797 = load i32, ptr %7, align 4, !tbaa !5
  %798 = load i32, ptr %20, align 4, !tbaa !5
  %799 = load i64, ptr %17, align 8, !tbaa !11
  %800 = trunc i64 %799 to i32
  %801 = load i32, ptr %10, align 4, !tbaa !5
  %802 = load i32, ptr %16, align 4, !tbaa !5
  %803 = load i32, ptr %8, align 4, !tbaa !5
  %804 = load i32, ptr %9, align 4, !tbaa !5
  %805 = load i32, ptr %53, align 4, !tbaa !5
  %806 = load i32, ptr %18, align 4, !tbaa !5
  %807 = load i32, ptr %53, align 4, !tbaa !5
  %808 = icmp eq i32 %807, 0
  br i1 %808, label %809, label %811

809:                                              ; preds = %794
  %810 = load ptr, ptr %26, align 8, !tbaa !9
  br label %813

811:                                              ; preds = %794
  %812 = load ptr, ptr %21, align 8, !tbaa !9
  br label %813

813:                                              ; preds = %811, %809
  %814 = phi ptr [ %810, %809 ], [ %812, %811 ]
  %815 = load i32, ptr %53, align 4, !tbaa !5
  %816 = icmp eq i32 %815, 0
  br i1 %816, label %817, label %819

817:                                              ; preds = %813
  %818 = load ptr, ptr %27, align 8, !tbaa !9
  br label %821

819:                                              ; preds = %813
  %820 = load ptr, ptr %22, align 8, !tbaa !9
  br label %821

821:                                              ; preds = %819, %817
  %822 = phi ptr [ %818, %817 ], [ %820, %819 ]
  %823 = load ptr, ptr %35, align 8, !tbaa !9
  %824 = load ptr, ptr %36, align 8, !tbaa !9
  %825 = load ptr, ptr %38, align 8, !tbaa !9
  %826 = load ptr, ptr %39, align 8, !tbaa !9
  %827 = load i32, ptr %19, align 4, !tbaa !5
  %828 = load ptr, ptr %32, align 8, !tbaa !9
  %829 = load ptr, ptr %34, align 8, !tbaa !9
  %830 = load i32, ptr %51, align 4, !tbaa !5
  call void @setup_tpp_kernel_and_param_struct(ptr noundef %40, ptr noundef %42, ptr noundef %41, ptr noundef %43, i32 noundef %796, i32 noundef %797, i32 noundef %798, i32 noundef %800, i32 noundef %801, i32 noundef %802, i32 noundef %803, i32 noundef %804, i32 noundef %805, i32 noundef %806, ptr noundef %814, ptr noundef %822, ptr noundef %823, ptr noundef %824, ptr noundef %825, ptr noundef %826, i32 noundef %827, ptr noundef %828, ptr noundef %829, i32 noundef %830)
  %831 = load i64, ptr %17, align 8, !tbaa !11
  %832 = icmp eq i64 %831, 0
  br i1 %832, label %833, label %836

833:                                              ; preds = %821
  %834 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %835 = load ptr, ptr %40, align 8, !tbaa !9
  call void %835(ptr noundef %41)
  br label %841

836:                                              ; preds = %821
  %837 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %838 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %43, i32 0, i32 1
  %839 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %838, i32 0, i32 2
  store ptr %17, ptr %839, align 8, !tbaa !21
  %840 = load ptr, ptr %42, align 8, !tbaa !9
  call void %840(ptr noundef %43)
  br label %841

841:                                              ; preds = %836, %833
  %842 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %843 = load i64, ptr %17, align 8, !tbaa !11
  %844 = icmp eq i64 %843, 0
  br i1 %844, label %845, label %877

845:                                              ; preds = %841
  %846 = load i32, ptr %53, align 4, !tbaa !5
  %847 = icmp eq i32 %846, 0
  br i1 %847, label %848, label %850

848:                                              ; preds = %845
  %849 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  br label %876

850:                                              ; preds = %845
  %851 = load i32, ptr %53, align 4, !tbaa !5
  %852 = icmp eq i32 %851, 1
  br i1 %852, label %853, label %855

853:                                              ; preds = %850
  %854 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %875

855:                                              ; preds = %850
  %856 = load i32, ptr %53, align 4, !tbaa !5
  %857 = icmp eq i32 %856, 4
  br i1 %857, label %858, label %860

858:                                              ; preds = %855
  %859 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %874

860:                                              ; preds = %855
  %861 = load i32, ptr %53, align 4, !tbaa !5
  %862 = icmp eq i32 %861, 5
  br i1 %862, label %863, label %865

863:                                              ; preds = %860
  %864 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  br label %873

865:                                              ; preds = %860
  %866 = load i32, ptr %53, align 4, !tbaa !5
  %867 = icmp eq i32 %866, 3
  br i1 %867, label %868, label %870

868:                                              ; preds = %865
  %869 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  br label %872

870:                                              ; preds = %865
  %871 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  br label %872

872:                                              ; preds = %870, %868
  br label %873

873:                                              ; preds = %872, %863
  br label %874

874:                                              ; preds = %873, %858
  br label %875

875:                                              ; preds = %874, %853
  br label %876

876:                                              ; preds = %875, %848
  br label %903

877:                                              ; preds = %841
  %878 = load i32, ptr %53, align 4, !tbaa !5
  %879 = icmp eq i32 %878, 1
  br i1 %879, label %880, label %882

880:                                              ; preds = %877
  %881 = call i32 (ptr, ...) @printf(ptr noundef @.str.14)
  br label %902

882:                                              ; preds = %877
  %883 = load i32, ptr %53, align 4, !tbaa !5
  %884 = icmp eq i32 %883, 4
  br i1 %884, label %885, label %887

885:                                              ; preds = %882
  %886 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  br label %901

887:                                              ; preds = %882
  %888 = load i32, ptr %53, align 4, !tbaa !5
  %889 = icmp eq i32 %888, 5
  br i1 %889, label %890, label %892

890:                                              ; preds = %887
  %891 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  br label %900

892:                                              ; preds = %887
  %893 = load i32, ptr %53, align 4, !tbaa !5
  %894 = icmp eq i32 %893, 3
  br i1 %894, label %895, label %897

895:                                              ; preds = %892
  %896 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  br label %899

897:                                              ; preds = %892
  %898 = call i32 (ptr, ...) @printf(ptr noundef @.str.18)
  br label %899

899:                                              ; preds = %897, %895
  br label %900

900:                                              ; preds = %899, %890
  br label %901

901:                                              ; preds = %900, %885
  br label %902

902:                                              ; preds = %901, %880
  br label %903

903:                                              ; preds = %902, %876
  %904 = load i32, ptr %8, align 4, !tbaa !5
  %905 = icmp ugt i32 %904, 0
  br i1 %905, label %906, label %977

906:                                              ; preds = %903
  %907 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %908 = load i32, ptr %53, align 4, !tbaa !5
  %909 = icmp eq i32 %908, 2
  br i1 %909, label %910, label %915

910:                                              ; preds = %906
  %911 = load ptr, ptr %36, align 8, !tbaa !9
  %912 = load ptr, ptr %22, align 8, !tbaa !9
  %913 = load i32, ptr %11, align 4, !tbaa !5
  %914 = zext i32 %913 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %911, ptr noundef %912, i64 noundef %914)
  br label %942

915:                                              ; preds = %906
  %916 = load i32, ptr %53, align 4, !tbaa !5
  %917 = icmp eq i32 %916, 3
  br i1 %917, label %918, label %923

918:                                              ; preds = %915
  %919 = load ptr, ptr %36, align 8, !tbaa !9
  %920 = load ptr, ptr %22, align 8, !tbaa !9
  %921 = load i32, ptr %11, align 4, !tbaa !5
  %922 = zext i32 %921 to i64
  call void @libxsmm_convert_f16_f32(ptr noundef %919, ptr noundef %920, i64 noundef %922)
  br label %941

923:                                              ; preds = %915
  %924 = load i32, ptr %53, align 4, !tbaa !5
  %925 = icmp eq i32 %924, 4
  br i1 %925, label %926, label %931

926:                                              ; preds = %923
  %927 = load ptr, ptr %36, align 8, !tbaa !9
  %928 = load ptr, ptr %22, align 8, !tbaa !9
  %929 = load i32, ptr %11, align 4, !tbaa !5
  %930 = zext i32 %929 to i64
  call void @libxsmm_convert_bf8_f32(ptr noundef %927, ptr noundef %928, i64 noundef %930)
  br label %940

931:                                              ; preds = %923
  %932 = load i32, ptr %53, align 4, !tbaa !5
  %933 = icmp eq i32 %932, 5
  br i1 %933, label %934, label %939

934:                                              ; preds = %931
  %935 = load ptr, ptr %36, align 8, !tbaa !9
  %936 = load ptr, ptr %22, align 8, !tbaa !9
  %937 = load i32, ptr %11, align 4, !tbaa !5
  %938 = zext i32 %937 to i64
  call void @libxsmm_convert_hf8_f32(ptr noundef %935, ptr noundef %936, i64 noundef %938)
  br label %939

939:                                              ; preds = %934, %931
  br label %940

940:                                              ; preds = %939, %926
  br label %941

941:                                              ; preds = %940, %918
  br label %942

942:                                              ; preds = %941, %910
  %943 = load i32, ptr %53, align 4, !tbaa !5
  %944 = icmp eq i32 %943, 0
  br i1 %944, label %945, label %950

945:                                              ; preds = %942
  %946 = load i32, ptr %12, align 4, !tbaa !5
  %947 = load ptr, ptr %29, align 8, !tbaa !9
  %948 = load ptr, ptr %27, align 8, !tbaa !9
  %949 = call i32 @libxsmm_matdiff(ptr noundef %44, i32 noundef 0, i32 noundef %946, i32 noundef 1, ptr noundef %947, ptr noundef %948, ptr noundef null, ptr noundef null)
  br label %955

950:                                              ; preds = %942
  %951 = load i32, ptr %12, align 4, !tbaa !5
  %952 = load ptr, ptr %24, align 8, !tbaa !9
  %953 = load ptr, ptr %22, align 8, !tbaa !9
  %954 = call i32 @libxsmm_matdiff(ptr noundef %44, i32 noundef 1, i32 noundef %951, i32 noundef 1, ptr noundef %952, ptr noundef %953, ptr noundef null, ptr noundef null)
  br label %955

955:                                              ; preds = %950, %945
  %956 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 10
  %957 = load double, ptr %956, align 8, !tbaa !25
  %958 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, double noundef %957)
  %959 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 15
  %960 = load double, ptr %959, align 8, !tbaa !27
  %961 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, double noundef %960)
  %962 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 7
  %963 = load double, ptr %962, align 8, !tbaa !28
  %964 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, double noundef %963)
  %965 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 8
  %966 = load double, ptr %965, align 8, !tbaa !29
  %967 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, double noundef %966)
  %968 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 5
  %969 = load double, ptr %968, align 8, !tbaa !30
  %970 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, double noundef %969)
  %971 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 6
  %972 = load double, ptr %971, align 8, !tbaa !31
  %973 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %972)
  %974 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 4
  %975 = load double, ptr %974, align 8, !tbaa !32
  %976 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, double noundef %975)
  call void @libxsmm_matdiff_reduce(ptr noundef %46, ptr noundef %44)
  br label %977

977:                                              ; preds = %955, %903
  %978 = load i32, ptr %9, align 4, !tbaa !5
  %979 = icmp ugt i32 %978, 0
  br i1 %979, label %980, label %1087

980:                                              ; preds = %977
  %981 = load i64, ptr %17, align 8, !tbaa !11
  %982 = icmp eq i64 %981, 0
  br i1 %982, label %983, label %1086

983:                                              ; preds = %980
  %984 = load i32, ptr %53, align 4, !tbaa !5
  %985 = icmp eq i32 %984, 2
  br i1 %985, label %986, label %991

986:                                              ; preds = %983
  %987 = load ptr, ptr %37, align 8, !tbaa !9
  %988 = load ptr, ptr %23, align 8, !tbaa !9
  %989 = load i32, ptr %11, align 4, !tbaa !5
  %990 = zext i32 %989 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %987, ptr noundef %988, i64 noundef %990)
  br label %1018

991:                                              ; preds = %983
  %992 = load i32, ptr %53, align 4, !tbaa !5
  %993 = icmp eq i32 %992, 3
  br i1 %993, label %994, label %999

994:                                              ; preds = %991
  %995 = load ptr, ptr %37, align 8, !tbaa !9
  %996 = load ptr, ptr %23, align 8, !tbaa !9
  %997 = load i32, ptr %11, align 4, !tbaa !5
  %998 = zext i32 %997 to i64
  call void @libxsmm_convert_f16_f32(ptr noundef %995, ptr noundef %996, i64 noundef %998)
  br label %1017

999:                                              ; preds = %991
  %1000 = load i32, ptr %53, align 4, !tbaa !5
  %1001 = icmp eq i32 %1000, 4
  br i1 %1001, label %1002, label %1007

1002:                                             ; preds = %999
  %1003 = load ptr, ptr %37, align 8, !tbaa !9
  %1004 = load ptr, ptr %23, align 8, !tbaa !9
  %1005 = load i32, ptr %11, align 4, !tbaa !5
  %1006 = zext i32 %1005 to i64
  call void @libxsmm_convert_bf8_f32(ptr noundef %1003, ptr noundef %1004, i64 noundef %1006)
  br label %1016

1007:                                             ; preds = %999
  %1008 = load i32, ptr %53, align 4, !tbaa !5
  %1009 = icmp eq i32 %1008, 5
  br i1 %1009, label %1010, label %1015

1010:                                             ; preds = %1007
  %1011 = load ptr, ptr %37, align 8, !tbaa !9
  %1012 = load ptr, ptr %23, align 8, !tbaa !9
  %1013 = load i32, ptr %11, align 4, !tbaa !5
  %1014 = zext i32 %1013 to i64
  call void @libxsmm_convert_hf8_f32(ptr noundef %1011, ptr noundef %1012, i64 noundef %1014)
  br label %1015

1015:                                             ; preds = %1010, %1007
  br label %1016

1016:                                             ; preds = %1015, %1002
  br label %1017

1017:                                             ; preds = %1016, %994
  br label %1018

1018:                                             ; preds = %1017, %986
  %1019 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1020 = load i32, ptr %53, align 4, !tbaa !5
  %1021 = icmp eq i32 %1020, 0
  br i1 %1021, label %1022, label %1024

1022:                                             ; preds = %1018
  %1023 = call i32 (ptr, ...) @printf(ptr noundef @.str.26)
  br label %1050

1024:                                             ; preds = %1018
  %1025 = load i32, ptr %53, align 4, !tbaa !5
  %1026 = icmp eq i32 %1025, 1
  br i1 %1026, label %1027, label %1029

1027:                                             ; preds = %1024
  %1028 = call i32 (ptr, ...) @printf(ptr noundef @.str.27)
  br label %1049

1029:                                             ; preds = %1024
  %1030 = load i32, ptr %53, align 4, !tbaa !5
  %1031 = icmp eq i32 %1030, 4
  br i1 %1031, label %1032, label %1034

1032:                                             ; preds = %1029
  %1033 = call i32 (ptr, ...) @printf(ptr noundef @.str.28)
  br label %1048

1034:                                             ; preds = %1029
  %1035 = load i32, ptr %53, align 4, !tbaa !5
  %1036 = icmp eq i32 %1035, 5
  br i1 %1036, label %1037, label %1039

1037:                                             ; preds = %1034
  %1038 = call i32 (ptr, ...) @printf(ptr noundef @.str.29)
  br label %1047

1039:                                             ; preds = %1034
  %1040 = load i32, ptr %53, align 4, !tbaa !5
  %1041 = icmp eq i32 %1040, 3
  br i1 %1041, label %1042, label %1044

1042:                                             ; preds = %1039
  %1043 = call i32 (ptr, ...) @printf(ptr noundef @.str.30)
  br label %1046

1044:                                             ; preds = %1039
  %1045 = call i32 (ptr, ...) @printf(ptr noundef @.str.31)
  br label %1046

1046:                                             ; preds = %1044, %1042
  br label %1047

1047:                                             ; preds = %1046, %1037
  br label %1048

1048:                                             ; preds = %1047, %1032
  br label %1049

1049:                                             ; preds = %1048, %1027
  br label %1050

1050:                                             ; preds = %1049, %1022
  %1051 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1052 = load i32, ptr %53, align 4, !tbaa !5
  %1053 = icmp eq i32 %1052, 0
  br i1 %1053, label %1054, label %1059

1054:                                             ; preds = %1050
  %1055 = load i32, ptr %12, align 4, !tbaa !5
  %1056 = load ptr, ptr %30, align 8, !tbaa !9
  %1057 = load ptr, ptr %28, align 8, !tbaa !9
  %1058 = call i32 @libxsmm_matdiff(ptr noundef %45, i32 noundef 0, i32 noundef %1055, i32 noundef 1, ptr noundef %1056, ptr noundef %1057, ptr noundef null, ptr noundef null)
  br label %1064

1059:                                             ; preds = %1050
  %1060 = load i32, ptr %12, align 4, !tbaa !5
  %1061 = load ptr, ptr %25, align 8, !tbaa !9
  %1062 = load ptr, ptr %23, align 8, !tbaa !9
  %1063 = call i32 @libxsmm_matdiff(ptr noundef %45, i32 noundef 1, i32 noundef %1060, i32 noundef 1, ptr noundef %1061, ptr noundef %1062, ptr noundef null, ptr noundef null)
  br label %1064

1064:                                             ; preds = %1059, %1054
  %1065 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %45, i32 0, i32 10
  %1066 = load double, ptr %1065, align 8, !tbaa !25
  %1067 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, double noundef %1066)
  %1068 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %45, i32 0, i32 15
  %1069 = load double, ptr %1068, align 8, !tbaa !27
  %1070 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, double noundef %1069)
  %1071 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %45, i32 0, i32 7
  %1072 = load double, ptr %1071, align 8, !tbaa !28
  %1073 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, double noundef %1072)
  %1074 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %45, i32 0, i32 8
  %1075 = load double, ptr %1074, align 8, !tbaa !29
  %1076 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, double noundef %1075)
  %1077 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %45, i32 0, i32 5
  %1078 = load double, ptr %1077, align 8, !tbaa !30
  %1079 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, double noundef %1078)
  %1080 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %45, i32 0, i32 6
  %1081 = load double, ptr %1080, align 8, !tbaa !31
  %1082 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %1081)
  %1083 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 4
  %1084 = load double, ptr %1083, align 8, !tbaa !32
  %1085 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, double noundef %1084)
  br label %1086

1086:                                             ; preds = %1064, %980
  br label %1087

1087:                                             ; preds = %1086, %977
  %1088 = load i32, ptr %19, align 4, !tbaa !5
  %1089 = icmp ugt i32 %1088, 0
  br i1 %1089, label %1090, label %1192

1090:                                             ; preds = %1087
  %1091 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1092 = call i32 (ptr, ...) @printf(ptr noundef @.str.32)
  %1093 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1094 = load i32, ptr %18, align 4, !tbaa !5
  %1095 = icmp eq i32 %1094, 0
  br i1 %1095, label %1096, label %1101

1096:                                             ; preds = %1090
  %1097 = load i32, ptr %6, align 4, !tbaa !5
  %1098 = load ptr, ptr %31, align 8, !tbaa !9
  %1099 = load ptr, ptr %32, align 8, !tbaa !9
  %1100 = call i32 @libxsmm_matdiff(ptr noundef %44, i32 noundef 6, i32 noundef %1097, i32 noundef 1, ptr noundef %1098, ptr noundef %1099, ptr noundef null, ptr noundef null)
  br label %1170

1101:                                             ; preds = %1090
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %1102

1102:                                             ; preds = %1162, %1101
  %1103 = load i32, ptr %14, align 4, !tbaa !5
  %1104 = load i32, ptr %6, align 4, !tbaa !5
  %1105 = icmp ult i32 %1103, %1104
  br i1 %1105, label %1106, label %1165

1106:                                             ; preds = %1102
  %1107 = load ptr, ptr %31, align 8, !tbaa !9
  %1108 = load i32, ptr %14, align 4, !tbaa !5
  %1109 = zext i32 %1108 to i64
  %1110 = getelementptr inbounds i64, ptr %1107, i64 %1109
  %1111 = load i64, ptr %1110, align 8, !tbaa !11
  %1112 = trunc i64 %1111 to i32
  %1113 = icmp eq i32 0, %1112
  br i1 %1113, label %1122, label %1114

1114:                                             ; preds = %1106
  %1115 = load ptr, ptr %31, align 8, !tbaa !9
  %1116 = load i32, ptr %14, align 4, !tbaa !5
  %1117 = zext i32 %1116 to i64
  %1118 = getelementptr inbounds i64, ptr %1115, i64 %1117
  %1119 = load i64, ptr %1118, align 8, !tbaa !11
  %1120 = trunc i64 %1119 to i32
  %1121 = icmp ult i32 0, %1120
  br i1 %1121, label %1122, label %1150

1122:                                             ; preds = %1114, %1106
  %1123 = load ptr, ptr %31, align 8, !tbaa !9
  %1124 = load i32, ptr %14, align 4, !tbaa !5
  %1125 = zext i32 %1124 to i64
  %1126 = getelementptr inbounds i64, ptr %1123, i64 %1125
  %1127 = load i64, ptr %1126, align 8, !tbaa !11
  %1128 = mul i64 1, %1127
  %1129 = icmp ult i64 %1128, 4294967295
  br i1 %1129, label %1130, label %1137

1130:                                             ; preds = %1122
  %1131 = load ptr, ptr %31, align 8, !tbaa !9
  %1132 = load i32, ptr %14, align 4, !tbaa !5
  %1133 = zext i32 %1132 to i64
  %1134 = getelementptr inbounds i64, ptr %1131, i64 %1133
  %1135 = load i64, ptr %1134, align 8, !tbaa !11
  %1136 = mul i64 1, %1135
  br label %1138

1137:                                             ; preds = %1122
  br label %1138

1138:                                             ; preds = %1137, %1130
  %1139 = phi i64 [ %1136, %1130 ], [ 4294967295, %1137 ]
  %1140 = icmp ule i64 %1139, 4294967295
  br i1 %1140, label %1141, label %1150

1141:                                             ; preds = %1138
  %1142 = load ptr, ptr %31, align 8, !tbaa !9
  %1143 = load i32, ptr %14, align 4, !tbaa !5
  %1144 = zext i32 %1143 to i64
  %1145 = getelementptr inbounds i64, ptr %1142, i64 %1144
  %1146 = load i64, ptr %1145, align 8, !tbaa !11
  %1147 = uitofp i64 %1146 to double
  %1148 = fcmp ole double 0.000000e+00, %1147
  br i1 %1148, label %1149, label %1150

1149:                                             ; preds = %1141
  br label %1151

1150:                                             ; preds = %1141, %1138, %1114
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.34, i32 noundef 835, ptr noundef @__PRETTY_FUNCTION__.main) #12
  unreachable

1151:                                             ; preds = %1149
  %1152 = load ptr, ptr %31, align 8, !tbaa !9
  %1153 = load i32, ptr %14, align 4, !tbaa !5
  %1154 = zext i32 %1153 to i64
  %1155 = getelementptr inbounds i64, ptr %1152, i64 %1154
  %1156 = load i64, ptr %1155, align 8, !tbaa !11
  %1157 = trunc i64 %1156 to i32
  %1158 = load ptr, ptr %33, align 8, !tbaa !9
  %1159 = load i32, ptr %14, align 4, !tbaa !5
  %1160 = zext i32 %1159 to i64
  %1161 = getelementptr inbounds i32, ptr %1158, i64 %1160
  store i32 %1157, ptr %1161, align 4, !tbaa !5
  br label %1162

1162:                                             ; preds = %1151
  %1163 = load i32, ptr %14, align 4, !tbaa !5
  %1164 = add i32 %1163, 1
  store i32 %1164, ptr %14, align 4, !tbaa !5
  br label %1102, !llvm.loop !33

1165:                                             ; preds = %1102
  %1166 = load i32, ptr %6, align 4, !tbaa !5
  %1167 = load ptr, ptr %33, align 8, !tbaa !9
  %1168 = load ptr, ptr %34, align 8, !tbaa !9
  %1169 = call i32 @libxsmm_matdiff(ptr noundef %44, i32 noundef 8, i32 noundef %1166, i32 noundef 1, ptr noundef %1167, ptr noundef %1168, ptr noundef null, ptr noundef null)
  br label %1170

1170:                                             ; preds = %1165, %1096
  %1171 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 10
  %1172 = load double, ptr %1171, align 8, !tbaa !25
  %1173 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, double noundef %1172)
  %1174 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 15
  %1175 = load double, ptr %1174, align 8, !tbaa !27
  %1176 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, double noundef %1175)
  %1177 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 7
  %1178 = load double, ptr %1177, align 8, !tbaa !28
  %1179 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, double noundef %1178)
  %1180 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 8
  %1181 = load double, ptr %1180, align 8, !tbaa !29
  %1182 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, double noundef %1181)
  %1183 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 5
  %1184 = load double, ptr %1183, align 8, !tbaa !30
  %1185 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, double noundef %1184)
  %1186 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 6
  %1187 = load double, ptr %1186, align 8, !tbaa !31
  %1188 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %1187)
  %1189 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %44, i32 0, i32 4
  %1190 = load double, ptr %1189, align 8, !tbaa !32
  %1191 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, double noundef %1190)
  br label %1192

1192:                                             ; preds = %1170, %1087
  %1193 = call i64 @libxsmm_timer_tick()
  store i64 %1193, ptr %47, align 8, !tbaa !11
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %1194

1194:                                             ; preds = %1234, %1192
  %1195 = load i32, ptr %14, align 4, !tbaa !5
  %1196 = load i32, ptr %15, align 4, !tbaa !5
  %1197 = icmp ult i32 %1195, %1196
  br i1 %1197, label %1198, label %1237

1198:                                             ; preds = %1194
  %1199 = load i32, ptr %53, align 4, !tbaa !5
  %1200 = icmp eq i32 %1199, 0
  br i1 %1200, label %1201, label %1217

1201:                                             ; preds = %1198
  %1202 = load i32, ptr %6, align 4, !tbaa !5
  %1203 = load i32, ptr %7, align 4, !tbaa !5
  %1204 = load i32, ptr %20, align 4, !tbaa !5
  %1205 = load i64, ptr %17, align 8, !tbaa !11
  %1206 = trunc i64 %1205 to i32
  %1207 = load ptr, ptr %26, align 8, !tbaa !9
  %1208 = load ptr, ptr %29, align 8, !tbaa !9
  %1209 = load ptr, ptr %30, align 8, !tbaa !9
  %1210 = load ptr, ptr %38, align 8, !tbaa !9
  %1211 = load i32, ptr %16, align 4, !tbaa !5
  %1212 = load i32, ptr %10, align 4, !tbaa !5
  %1213 = load i32, ptr %19, align 4, !tbaa !5
  %1214 = load ptr, ptr %31, align 8, !tbaa !9
  %1215 = load i32, ptr %53, align 4, !tbaa !5
  %1216 = load i32, ptr %51, align 4, !tbaa !5
  call void @reference_reduce_kernel_f64(i32 noundef %1202, i32 noundef %1203, i32 noundef %1204, i32 noundef %1206, ptr noundef %1207, ptr noundef %1208, ptr noundef %1209, ptr noundef %1210, i32 noundef %1211, i32 noundef %1212, i32 noundef %1213, ptr noundef %1214, i32 noundef %1215, i32 noundef %1216)
  br label %1233

1217:                                             ; preds = %1198
  %1218 = load i32, ptr %6, align 4, !tbaa !5
  %1219 = load i32, ptr %7, align 4, !tbaa !5
  %1220 = load i32, ptr %20, align 4, !tbaa !5
  %1221 = load i64, ptr %17, align 8, !tbaa !11
  %1222 = trunc i64 %1221 to i32
  %1223 = load ptr, ptr %21, align 8, !tbaa !9
  %1224 = load ptr, ptr %24, align 8, !tbaa !9
  %1225 = load ptr, ptr %25, align 8, !tbaa !9
  %1226 = load ptr, ptr %38, align 8, !tbaa !9
  %1227 = load i32, ptr %16, align 4, !tbaa !5
  %1228 = load i32, ptr %10, align 4, !tbaa !5
  %1229 = load i32, ptr %19, align 4, !tbaa !5
  %1230 = load ptr, ptr %31, align 8, !tbaa !9
  %1231 = load i32, ptr %53, align 4, !tbaa !5
  %1232 = load i32, ptr %51, align 4, !tbaa !5
  call void @reference_reduce_kernel(i32 noundef %1218, i32 noundef %1219, i32 noundef %1220, i32 noundef %1222, ptr noundef %1223, ptr noundef %1224, ptr noundef %1225, ptr noundef %1226, i32 noundef %1227, i32 noundef %1228, i32 noundef %1229, ptr noundef %1230, i32 noundef %1231, i32 noundef %1232)
  br label %1233

1233:                                             ; preds = %1217, %1201
  br label %1234

1234:                                             ; preds = %1233
  %1235 = load i32, ptr %14, align 4, !tbaa !5
  %1236 = add i32 %1235, 1
  store i32 %1236, ptr %14, align 4, !tbaa !5
  br label %1194, !llvm.loop !34

1237:                                             ; preds = %1194
  %1238 = call i64 @libxsmm_timer_tick()
  store i64 %1238, ptr %48, align 8, !tbaa !11
  %1239 = load i64, ptr %47, align 8, !tbaa !11
  %1240 = load i64, ptr %48, align 8, !tbaa !11
  %1241 = call double @libxsmm_timer_duration(i64 noundef %1239, i64 noundef %1240)
  store double %1241, ptr %49, align 8, !tbaa !13
  %1242 = load double, ptr %49, align 8, !tbaa !13
  %1243 = call i32 (ptr, ...) @printf(ptr noundef @.str.35, double noundef %1242)
  %1244 = call i64 @libxsmm_timer_tick()
  store i64 %1244, ptr %47, align 8, !tbaa !11
  %1245 = load i64, ptr %17, align 8, !tbaa !11
  %1246 = icmp eq i64 %1245, 0
  br i1 %1246, label %1247, label %1258

1247:                                             ; preds = %1237
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %1248

1248:                                             ; preds = %1254, %1247
  %1249 = load i32, ptr %14, align 4, !tbaa !5
  %1250 = load i32, ptr %15, align 4, !tbaa !5
  %1251 = icmp ult i32 %1249, %1250
  br i1 %1251, label %1252, label %1257

1252:                                             ; preds = %1248
  %1253 = load ptr, ptr %40, align 8, !tbaa !9
  call void %1253(ptr noundef %41)
  br label %1254

1254:                                             ; preds = %1252
  %1255 = load i32, ptr %14, align 4, !tbaa !5
  %1256 = add i32 %1255, 1
  store i32 %1256, ptr %14, align 4, !tbaa !5
  br label %1248, !llvm.loop !35

1257:                                             ; preds = %1248
  br label %1271

1258:                                             ; preds = %1237
  %1259 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %43, i32 0, i32 1
  %1260 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1259, i32 0, i32 2
  store ptr %17, ptr %1260, align 8, !tbaa !21
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %1261

1261:                                             ; preds = %1267, %1258
  %1262 = load i32, ptr %14, align 4, !tbaa !5
  %1263 = load i32, ptr %15, align 4, !tbaa !5
  %1264 = icmp ult i32 %1262, %1263
  br i1 %1264, label %1265, label %1270

1265:                                             ; preds = %1261
  %1266 = load ptr, ptr %42, align 8, !tbaa !9
  call void %1266(ptr noundef %43)
  br label %1267

1267:                                             ; preds = %1265
  %1268 = load i32, ptr %14, align 4, !tbaa !5
  %1269 = add i32 %1268, 1
  store i32 %1269, ptr %14, align 4, !tbaa !5
  br label %1261, !llvm.loop !36

1270:                                             ; preds = %1261
  br label %1271

1271:                                             ; preds = %1270, %1257
  %1272 = call i64 @libxsmm_timer_tick()
  store i64 %1272, ptr %48, align 8, !tbaa !11
  %1273 = load i64, ptr %47, align 8, !tbaa !11
  %1274 = load i64, ptr %48, align 8, !tbaa !11
  %1275 = call double @libxsmm_timer_duration(i64 noundef %1273, i64 noundef %1274)
  store double %1275, ptr %50, align 8, !tbaa !13
  %1276 = load double, ptr %50, align 8, !tbaa !13
  %1277 = call i32 (ptr, ...) @printf(ptr noundef @.str.36, double noundef %1276)
  %1278 = load double, ptr %50, align 8, !tbaa !13
  %1279 = fcmp olt double 0.000000e+00, %1278
  br i1 %1279, label %1280, label %1285

1280:                                             ; preds = %1271
  %1281 = load double, ptr %49, align 8, !tbaa !13
  %1282 = load double, ptr %50, align 8, !tbaa !13
  %1283 = fdiv double %1281, %1282
  %1284 = call i32 (ptr, ...) @printf(ptr noundef @.str.37, double noundef %1283)
  br label %1285

1285:                                             ; preds = %1280, %1271
  %1286 = load ptr, ptr %21, align 8, !tbaa !9
  call void @free(ptr noundef %1286) #10
  %1287 = load ptr, ptr %22, align 8, !tbaa !9
  call void @free(ptr noundef %1287) #10
  %1288 = load ptr, ptr %26, align 8, !tbaa !9
  call void @free(ptr noundef %1288) #10
  %1289 = load ptr, ptr %27, align 8, !tbaa !9
  call void @free(ptr noundef %1289) #10
  %1290 = load ptr, ptr %35, align 8, !tbaa !9
  call void @free(ptr noundef %1290) #10
  %1291 = load ptr, ptr %36, align 8, !tbaa !9
  call void @free(ptr noundef %1291) #10
  %1292 = load ptr, ptr %24, align 8, !tbaa !9
  call void @free(ptr noundef %1292) #10
  %1293 = load ptr, ptr %25, align 8, !tbaa !9
  call void @free(ptr noundef %1293) #10
  %1294 = load ptr, ptr %29, align 8, !tbaa !9
  call void @free(ptr noundef %1294) #10
  %1295 = load ptr, ptr %30, align 8, !tbaa !9
  call void @free(ptr noundef %1295) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #10
  %1296 = call ptr @getenv(ptr noundef @.str.38) #10
  store ptr %1296, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #10
  %1297 = load ptr, ptr %56, align 8, !tbaa !9
  %1298 = icmp eq ptr null, %1297
  br i1 %1298, label %1299, label %1300

1299:                                             ; preds = %1285
  br label %1303

1300:                                             ; preds = %1285
  %1301 = load ptr, ptr %56, align 8, !tbaa !9
  %1302 = call double @atof(ptr noundef %1301) #11
  br label %1303

1303:                                             ; preds = %1300, %1299
  %1304 = phi double [ 1.000000e+00, %1299 ], [ %1302, %1300 ]
  %1305 = fcmp ole double 0.000000e+00, %1304
  br i1 %1305, label %1306, label %1315

1306:                                             ; preds = %1303
  %1307 = load ptr, ptr %56, align 8, !tbaa !9
  %1308 = icmp eq ptr null, %1307
  br i1 %1308, label %1309, label %1310

1309:                                             ; preds = %1306
  br label %1313

1310:                                             ; preds = %1306
  %1311 = load ptr, ptr %56, align 8, !tbaa !9
  %1312 = call double @atof(ptr noundef %1311) #11
  br label %1313

1313:                                             ; preds = %1310, %1309
  %1314 = phi double [ 1.000000e+00, %1309 ], [ %1312, %1310 ]
  br label %1325

1315:                                             ; preds = %1303
  %1316 = load ptr, ptr %56, align 8, !tbaa !9
  %1317 = icmp eq ptr null, %1316
  br i1 %1317, label %1318, label %1319

1318:                                             ; preds = %1315
  br label %1322

1319:                                             ; preds = %1315
  %1320 = load ptr, ptr %56, align 8, !tbaa !9
  %1321 = call double @atof(ptr noundef %1320) #11
  br label %1322

1322:                                             ; preds = %1319, %1318
  %1323 = phi double [ 1.000000e+00, %1318 ], [ %1321, %1319 ]
  %1324 = fneg double %1323
  br label %1325

1325:                                             ; preds = %1322, %1313
  %1326 = phi double [ %1314, %1313 ], [ %1324, %1322 ]
  store double %1326, ptr %57, align 8, !tbaa !13
  %1327 = load double, ptr %55, align 8, !tbaa !13
  %1328 = fcmp une double 0.000000e+00, %1327
  br i1 %1328, label %1329, label %1343

1329:                                             ; preds = %1325
  %1330 = load double, ptr %55, align 8, !tbaa !13
  %1331 = load double, ptr %57, align 8, !tbaa !13
  %1332 = fmul double 1.000000e+02, %1331
  %1333 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %46, i32 0, i32 4
  %1334 = load double, ptr %1333, align 8, !tbaa !32
  %1335 = fmul double %1332, %1334
  %1336 = fcmp olt double %1330, %1335
  br i1 %1336, label %1337, label %1343

1337:                                             ; preds = %1329
  %1338 = load ptr, ptr @stdout, align 8, !tbaa !9
  %1339 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %46, i32 0, i32 4
  %1340 = load double, ptr %1339, align 8, !tbaa !32
  %1341 = fmul double 1.000000e+02, %1340
  %1342 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1338, ptr noundef @.str.39, double noundef %1341) #10
  call void @exit(i32 noundef 1) #12
  unreachable

1343:                                             ; preds = %1329, %1325
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  %1344 = call i32 (ptr, ...) @printf(ptr noundef @.str.40)
  %1345 = load i32, ptr @is_reference_kernel, align 4, !tbaa !5
  %1346 = call i32 @libxsmm_return_success_code(i32 noundef %1345)
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 192, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 192, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 192, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 128, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  ret i32 %1346
}

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

; Function Attrs: nounwind
declare ptr @getenv(ptr noundef) #2

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

declare void @libxsmm_init() #4

declare void @libxsmm_matdiff_clear(ptr noundef) #4

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

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

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #6

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #7

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @sfill_matrix(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #5

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind
declare i32 @rand() #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @reference_reduce_kernel_f64(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @reference_reduce_kernel(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @setup_tpp_kernel_and_param_struct(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef) #5

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

declare void @libxsmm_matdiff_reduce(ptr noundef, ptr noundef) #4

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

declare i64 @libxsmm_timer_tick() #4

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

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

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

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

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

!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 = !{!"long long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"float", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = !{!22, !10, i64 48}
!22 = !{!"libxsmm_meltw_unary_param", !23, i64 0, !24, i64 32, !24, i64 80}
!23 = !{!"libxsmm_matrix_op_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!24 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!25 = !{!26, !14, i64 80}
!26 = !{!"libxsmm_matdiff_info", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!27 = !{!26, !14, i64 120}
!28 = !{!26, !14, i64 56}
!29 = !{!26, !14, i64 64}
!30 = !{!26, !14, i64 40}
!31 = !{!26, !14, i64 48}
!32 = !{!26, !14, i64 32}
!33 = distinct !{!33, !18}
!34 = distinct !{!34, !18}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.libxsmm_meltw_unary_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }
%struct.libxsmm_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 }

@is_reference_kernel = external dso_local local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [12 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.39 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [22 x i8], align 1
@switch.table.main = private unnamed_addr constant [5 x ptr] [ptr @.str.9, ptr @.str.13, ptr @.str.12, ptr @.str.10, ptr @.str.11], align 8
@switch.table.main.1 = private unnamed_addr constant [5 x ptr] [ptr @.str.14, ptr @.str.18, ptr @.str.17, ptr @.str.15, ptr @.str.16], align 8
@switch.table.main.2 = private unnamed_addr constant [5 x ptr] [ptr @.str.27, ptr @.str.27, ptr @.str.30, ptr @.str.28, ptr @.str.29], align 8

; Function Attrs: nounwind uwtable
declare dso_local i32 @libxsmm_return_success_code(i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca i64, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.libxsmm_meltw_unary_param, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %struct.libxsmm_meltw_unary_param, align 8
  %8 = alloca %struct.libxsmm_matdiff_info, align 8
  %9 = alloca %struct.libxsmm_matdiff_info, align 8
  %10 = alloca %struct.libxsmm_matdiff_info, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #14
  store i64 0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #14
  store ptr null, ptr %4, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %5) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #14
  store ptr null, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %7) #14
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %8) #14
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %9) #14
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %10) #14
  %11 = tail call ptr @getenv(ptr noundef nonnull @.str) #14
  %12 = icmp eq ptr %11, null
  br i1 %12, label %.thread512, label %13

13:                                               ; preds = %2
  %14 = tail call double @atof(ptr noundef %11) #15
  %15 = fcmp ult double %14, 0.000000e+00
  br i1 %15, label %16, label %.thread512

16:                                               ; preds = %13
  %17 = fneg double %14
  br label %.thread512

.thread512:                                       ; preds = %13, %2, %16
  %18 = phi double [ %17, %16 ], [ 1.000000e+00, %2 ], [ %14, %13 ]
  tail call void @libxsmm_init() #14
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %8) #14
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %9) #14
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %10) #14
  %19 = icmp sgt i32 %0, 1
  br i1 %19, label %20, label %.thread660

20:                                               ; preds = %.thread512
  %21 = getelementptr inbounds i8, ptr %1, i64 8
  %22 = load ptr, ptr %21, align 8, !tbaa !9
  %23 = call i32 @atoi(ptr nocapture noundef %22) #15
  %.not710 = icmp eq i32 %0, 2
  br i1 %.not710, label %.thread660, label %24

24:                                               ; preds = %20
  %25 = getelementptr inbounds i8, ptr %1, i64 16
  %26 = load ptr, ptr %25, align 8, !tbaa !9
  %27 = call i32 @atoi(ptr nocapture noundef %26) #15
  %28 = icmp ugt i32 %0, 3
  br i1 %28, label %29, label %.thread660

29:                                               ; preds = %24
  %30 = getelementptr inbounds i8, ptr %1, i64 24
  %31 = load ptr, ptr %30, align 8, !tbaa !9
  %32 = call i32 @atoi(ptr nocapture noundef %31) #15
  %.not711 = icmp eq i32 %0, 4
  br i1 %.not711, label %.thread660, label %33

33:                                               ; preds = %29
  %34 = getelementptr inbounds i8, ptr %1, i64 32
  %35 = load ptr, ptr %34, align 8, !tbaa !9
  %36 = call i32 @atoi(ptr nocapture noundef %35) #15
  %37 = icmp ugt i32 %0, 5
  br i1 %37, label %38, label %.thread660

38:                                               ; preds = %33
  %39 = getelementptr inbounds i8, ptr %1, i64 40
  %40 = load ptr, ptr %39, align 8, !tbaa !9
  %41 = call i32 @atoi(ptr nocapture noundef %40) #15
  %.not712 = icmp eq i32 %0, 6
  br i1 %.not712, label %.thread660, label %42

42:                                               ; preds = %38
  %43 = getelementptr inbounds i8, ptr %1, i64 48
  %44 = load ptr, ptr %43, align 8, !tbaa !9
  %45 = call i32 @atoi(ptr nocapture noundef %44) #15
  %46 = icmp ugt i32 %0, 7
  br i1 %46, label %47, label %.thread660

47:                                               ; preds = %42
  %48 = getelementptr inbounds i8, ptr %1, i64 56
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = call i32 @atoi(ptr nocapture noundef %49) #15
  %.not713 = icmp eq i32 %0, 8
  br i1 %.not713, label %.thread660, label %51

51:                                               ; preds = %47
  %52 = getelementptr inbounds i8, ptr %1, i64 64
  %53 = load ptr, ptr %52, align 8, !tbaa !9
  %54 = icmp ugt i32 %0, 9
  br i1 %54, label %55, label %.thread660

55:                                               ; preds = %51
  %56 = getelementptr inbounds i8, ptr %1, i64 72
  %57 = load ptr, ptr %56, align 8, !tbaa !9
  %58 = call i32 @atoi(ptr nocapture noundef %57) #15
  %59 = sext i32 %58 to i64
  store i64 %59, ptr %3, align 8, !tbaa !5
  %.not714 = icmp eq i32 %0, 10
  br i1 %.not714, label %.thread660, label %60

60:                                               ; preds = %55
  %61 = getelementptr inbounds i8, ptr %1, i64 80
  %62 = load ptr, ptr %61, align 8, !tbaa !9
  %63 = call i32 @atoi(ptr nocapture noundef %62) #15
  %64 = icmp ugt i32 %0, 11
  br i1 %64, label %65, label %.thread660

65:                                               ; preds = %60
  %66 = getelementptr inbounds i8, ptr %1, i64 88
  %67 = load ptr, ptr %66, align 8, !tbaa !9
  %68 = call i32 @atoi(ptr nocapture noundef %67) #15
  %.not715 = icmp eq i32 %0, 12
  br i1 %.not715, label %.thread660, label %69

69:                                               ; preds = %65
  %70 = getelementptr inbounds i8, ptr %1, i64 96
  %71 = load ptr, ptr %70, align 8, !tbaa !9
  %72 = call i32 @atoi(ptr nocapture noundef %71) #15
  %73 = icmp ugt i32 %0, 13
  br i1 %73, label %74, label %.thread660

74:                                               ; preds = %69
  %75 = getelementptr inbounds i8, ptr %1, i64 104
  %76 = load ptr, ptr %75, align 8, !tbaa !9
  %77 = call i32 @atoi(ptr nocapture noundef %76) #15
  br label %.thread660

.thread660:                                       ; preds = %.thread512, %20, %24, %29, %33, %38, %42, %47, %51, %55, %60, %65, %74, %69
  %.0476682 = phi i32 [ %72, %74 ], [ %72, %69 ], [ 0, %65 ], [ 0, %60 ], [ 0, %55 ], [ 0, %51 ], [ 0, %47 ], [ 0, %42 ], [ 0, %38 ], [ 0, %33 ], [ 0, %29 ], [ 0, %24 ], [ 0, %20 ], [ 0, %.thread512 ]
  %.0486636649681 = phi i32 [ %63, %74 ], [ %63, %69 ], [ %63, %65 ], [ %63, %60 ], [ 0, %55 ], [ 0, %51 ], [ 0, %47 ], [ 0, %42 ], [ 0, %38 ], [ 0, %33 ], [ 0, %29 ], [ 0, %24 ], [ 0, %20 ], [ 0, %.thread512 ]
  %.0475598609635650680 = phi ptr [ %53, %74 ], [ %53, %69 ], [ %53, %65 ], [ %53, %60 ], [ %53, %55 ], [ %53, %51 ], [ null, %47 ], [ null, %42 ], [ null, %38 ], [ null, %33 ], [ null, %29 ], [ null, %24 ], [ null, %20 ], [ null, %.thread512 ]
  %.0493564574597610634651679 = phi i32 [ %45, %74 ], [ %45, %69 ], [ %45, %65 ], [ %45, %60 ], [ %45, %55 ], [ %45, %51 ], [ %45, %47 ], [ %45, %42 ], [ 1, %38 ], [ 1, %33 ], [ 1, %29 ], [ 1, %24 ], [ 1, %20 ], [ 1, %.thread512 ]
  %.0473538546563575596611633652678 = phi i32 [ %36, %74 ], [ %36, %69 ], [ %36, %65 ], [ %36, %60 ], [ %36, %55 ], [ %36, %51 ], [ %36, %47 ], [ %36, %42 ], [ %36, %38 ], [ %36, %33 ], [ 1, %29 ], [ 1, %24 ], [ 1, %20 ], [ 1, %.thread512 ]
  %.0472520526537547562576595612632653677 = phi i32 [ %27, %74 ], [ %27, %69 ], [ %27, %65 ], [ %27, %60 ], [ %27, %55 ], [ %27, %51 ], [ %27, %47 ], [ %27, %42 ], [ %27, %38 ], [ %27, %33 ], [ %27, %29 ], [ %27, %24 ], [ 64, %20 ], [ 64, %.thread512 ]
  %.0515519527536548561577594613631654676 = phi i32 [ %23, %74 ], [ %23, %69 ], [ %23, %65 ], [ %23, %60 ], [ %23, %55 ], [ %23, %51 ], [ %23, %47 ], [ %23, %42 ], [ %23, %38 ], [ %23, %33 ], [ %23, %29 ], [ %23, %24 ], [ %23, %20 ], [ 64, %.thread512 ]
  %.0484528535549560578593614630655675 = phi i32 [ %32, %74 ], [ %32, %69 ], [ %32, %65 ], [ %32, %60 ], [ %32, %55 ], [ %32, %51 ], [ %32, %47 ], [ %32, %42 ], [ %32, %38 ], [ %32, %33 ], [ %32, %29 ], [ 64, %24 ], [ 64, %20 ], [ 64, %.thread512 ]
  %.0474550559579592615629656674 = phi i32 [ %41, %74 ], [ %41, %69 ], [ %41, %65 ], [ %41, %60 ], [ %41, %55 ], [ %41, %51 ], [ %41, %47 ], [ %41, %42 ], [ %41, %38 ], [ 1, %33 ], [ 1, %29 ], [ 1, %24 ], [ 1, %20 ], [ 1, %.thread512 ]
  %.0487580591616628657673 = phi i32 [ %50, %74 ], [ %50, %69 ], [ %50, %65 ], [ %50, %60 ], [ %50, %55 ], [ %50, %51 ], [ %50, %47 ], [ 0, %42 ], [ 0, %38 ], [ 0, %33 ], [ 0, %29 ], [ 0, %24 ], [ 0, %20 ], [ 0, %.thread512 ]
  %.0485658672 = phi i32 [ %68, %74 ], [ %68, %69 ], [ %68, %65 ], [ 0, %60 ], [ 0, %55 ], [ 0, %51 ], [ 0, %47 ], [ 0, %42 ], [ 0, %38 ], [ 0, %33 ], [ 0, %29 ], [ 0, %24 ], [ 0, %20 ], [ 0, %.thread512 ]
  %.0488 = phi i32 [ %77, %74 ], [ 0, %69 ], [ 0, %65 ], [ 0, %60 ], [ 0, %55 ], [ 0, %51 ], [ 0, %47 ], [ 0, %42 ], [ 0, %38 ], [ 0, %33 ], [ 0, %29 ], [ 0, %24 ], [ 0, %20 ], [ 0, %.thread512 ]
  %78 = load i64, ptr %3, align 8, !tbaa !5
  %79 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %.0515519527536548561577594613631654676, i32 noundef %.0472520526537547562576595612632653677, i32 noundef %.0484528535549560578593614630655675, i32 noundef %.0473538546563575596611633652678, i32 noundef %.0474550559579592615629656674, i32 noundef %.0493564574597610634651679, i32 noundef %.0487580591616628657673, ptr noundef %.0475598609635650680, i64 noundef %78, i32 noundef %.0486636649681, i32 noundef %.0485658672, i32 noundef %.0476682, i32 noundef %.0488)
  %80 = call i32 @llvm.umax.i32(i32 %.0515519527536548561577594613631654676, i32 1)
  %81 = call i32 @llvm.umax.i32(i32 %.0472520526537547562576595612632653677, i32 1)
  %82 = call i32 @llvm.smax.i32(i32 %.0484528535549560578593614630655675, i32 %80)
  %83 = icmp eq i32 %.0493564574597610634651679, 1
  %84 = select i1 %83, i32 %81, i32 %82
  %85 = select i1 %83, i32 %81, i32 %80
  %86 = call i32 @char_to_libxsmm_datatype(ptr noundef %.0475598609635650680)
  %or.cond9 = icmp ugt i32 %86, 5
  br i1 %or.cond9, label %87, label %89

87:                                               ; preds = %.thread660
  %88 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  call void @exit(i32 noundef 1) #16
  unreachable

89:                                               ; preds = %.thread660
  %90 = sext i32 %82 to i64
  %91 = shl nsw i64 %90, 2
  %92 = zext i32 %81 to i64
  %93 = mul i64 %91, %92
  %94 = call noalias ptr @malloc(i64 noundef %93) #17
  %95 = shl nsw i64 %90, 3
  %96 = mul i64 %95, %92
  %97 = call noalias ptr @malloc(i64 noundef %96) #17
  %98 = zext i32 %84 to i64
  %99 = shl nuw nsw i64 %98, 2
  %100 = shl nuw nsw i64 %98, 3
  %101 = call noalias ptr @malloc(i64 noundef %100) #17
  %102 = shl nuw nsw i64 %98, 4
  %103 = call noalias ptr @malloc(i64 noundef %102) #17
  call void @sfill_matrix(ptr noundef %94, i32 noundef %82, i32 noundef %80, i32 noundef %81)
  %.not = icmp eq i32 %.0476682, 0
  br i1 %.not, label %106, label %104

104:                                              ; preds = %89
  %105 = shl i32 %84, 1
  call void @sfill_matrix(ptr noundef %101, i32 noundef %105, i32 noundef %105, i32 noundef 1)
  br label %106

106:                                              ; preds = %104, %89
  %107 = mul i32 %82, %81
  %.not737 = icmp eq i32 %107, 0
  br i1 %.not737, label %.preheader718, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %106
  %wide.trip.count = zext i32 %107 to i64
  %min.iters.check = icmp ult i32 %107, 4
  br i1 %min.iters.check, label %.lr.ph.preheader807, label %vector.ph

.lr.ph.preheader807:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 4294967292
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %108 = getelementptr inbounds float, ptr %94, i64 %index
  %109 = getelementptr inbounds i8, ptr %108, i64 8
  %wide.load = load <2 x float>, ptr %108, align 4, !tbaa !11
  %wide.load767 = load <2 x float>, ptr %109, align 4, !tbaa !11
  %110 = fpext <2 x float> %wide.load to <2 x double>
  %111 = fpext <2 x float> %wide.load767 to <2 x double>
  %112 = getelementptr inbounds double, ptr %97, i64 %index
  %113 = getelementptr inbounds i8, ptr %112, i64 16
  store <2 x double> %110, ptr %112, align 8, !tbaa !13
  store <2 x double> %111, ptr %113, align 8, !tbaa !13
  %index.next = add nuw i64 %index, 4
  %114 = icmp eq i64 %index.next, %n.vec
  br i1 %114, label %middle.block, label %vector.body, !llvm.loop !15

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.preheader718, label %.lr.ph.preheader807

.preheader718:                                    ; preds = %.lr.ph, %middle.block, %106
  %115 = shl i32 %84, 1
  %.not738 = icmp eq i32 %115, 0
  br i1 %.not738, label %._crit_edge, label %.lr.ph722.preheader

.lr.ph722.preheader:                              ; preds = %.preheader718
  %wide.trip.count749 = zext i32 %115 to i64
  %min.iters.check770 = icmp ult i32 %115, 4
  br i1 %min.iters.check770, label %.lr.ph722.preheader806, label %vector.ph771

.lr.ph722.preheader806:                           ; preds = %middle.block768, %.lr.ph722.preheader
  %indvars.iv746.ph = phi i64 [ 0, %.lr.ph722.preheader ], [ %n.vec773, %middle.block768 ]
  br label %.lr.ph722

vector.ph771:                                     ; preds = %.lr.ph722.preheader
  %n.vec773 = and i64 %wide.trip.count749, 4294967292
  br label %vector.body775

vector.body775:                                   ; preds = %vector.body775, %vector.ph771
  %index776 = phi i64 [ 0, %vector.ph771 ], [ %index.next779, %vector.body775 ]
  %116 = getelementptr inbounds float, ptr %101, i64 %index776
  %117 = getelementptr inbounds i8, ptr %116, i64 8
  %wide.load777 = load <2 x float>, ptr %116, align 4, !tbaa !11
  %wide.load778 = load <2 x float>, ptr %117, align 4, !tbaa !11
  %118 = fpext <2 x float> %wide.load777 to <2 x double>
  %119 = fpext <2 x float> %wide.load778 to <2 x double>
  %120 = getelementptr inbounds double, ptr %103, i64 %index776
  %121 = getelementptr inbounds i8, ptr %120, i64 16
  store <2 x double> %118, ptr %120, align 8, !tbaa !13
  store <2 x double> %119, ptr %121, align 8, !tbaa !13
  %index.next779 = add nuw i64 %index776, 4
  %122 = icmp eq i64 %index.next779, %n.vec773
  br i1 %122, label %middle.block768, label %vector.body775, !llvm.loop !19

middle.block768:                                  ; preds = %vector.body775
  %cmp.n780 = icmp eq i64 %n.vec773, %wide.trip.count749
  br i1 %cmp.n780, label %._crit_edge, label %.lr.ph722.preheader806

.lr.ph:                                           ; preds = %.lr.ph.preheader807, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader807 ]
  %123 = getelementptr inbounds float, ptr %94, i64 %indvars.iv
  %124 = load float, ptr %123, align 4, !tbaa !11
  %125 = fpext float %124 to double
  %126 = getelementptr inbounds double, ptr %97, i64 %indvars.iv
  store double %125, ptr %126, align 8, !tbaa !13
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader718, label %.lr.ph, !llvm.loop !20

.lr.ph722:                                        ; preds = %.lr.ph722.preheader806, %.lr.ph722
  %indvars.iv746 = phi i64 [ %indvars.iv.next747, %.lr.ph722 ], [ %indvars.iv746.ph, %.lr.ph722.preheader806 ]
  %127 = getelementptr inbounds float, ptr %101, i64 %indvars.iv746
  %128 = load float, ptr %127, align 4, !tbaa !11
  %129 = fpext float %128 to double
  %130 = getelementptr inbounds double, ptr %103, i64 %indvars.iv746
  store double %129, ptr %130, align 8, !tbaa !13
  %indvars.iv.next747 = add nuw nsw i64 %indvars.iv746, 1
  %exitcond750.not = icmp eq i64 %indvars.iv.next747, %wide.trip.count749
  br i1 %exitcond750.not, label %._crit_edge, label %.lr.ph722, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph722, %middle.block768, %.preheader718
  %131 = call noalias ptr @malloc(i64 noundef %99) #17
  %132 = call noalias ptr @malloc(i64 noundef %99) #17
  %133 = call noalias ptr @malloc(i64 noundef %100) #17
  %134 = call noalias ptr @malloc(i64 noundef %100) #17
  %135 = icmp eq i32 %86, 2
  br i1 %135, label %149, label %136

136:                                              ; preds = %._crit_edge
  switch i32 %86, label %162 [
    i32 3, label %.thread688
    i32 4, label %.thread691
    i32 5, label %.thread694
  ]

.thread688:                                       ; preds = %136
  %137 = mul nsw i64 %90, %92
  %138 = shl i64 %137, 1
  %139 = call noalias ptr @malloc(i64 noundef %138) #17
  %140 = zext i32 %107 to i64
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %94, ptr noundef %139, i64 noundef %140) #14
  %calloc760 = call ptr @calloc(i64 1, i64 %99)
  br i1 %.not, label %162, label %156

.thread691:                                       ; preds = %136
  %141 = mul nsw i64 %90, %92
  %142 = call noalias ptr @malloc(i64 noundef %141) #17
  %143 = zext i32 %107 to i64
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %94, ptr noundef %142, i64 noundef %143) #14
  %144 = shl nuw nsw i64 %98, 1
  %calloc761 = call ptr @calloc(i64 1, i64 %144)
  br i1 %.not, label %162, label %158

.thread694:                                       ; preds = %136
  %145 = mul nsw i64 %90, %92
  %146 = call noalias ptr @malloc(i64 noundef %145) #17
  %147 = zext i32 %107 to i64
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %94, ptr noundef %146, i64 noundef %147) #14
  %148 = shl nuw nsw i64 %98, 1
  %calloc762 = call ptr @calloc(i64 1, i64 %148)
  br i1 %.not, label %162, label %160

149:                                              ; preds = %._crit_edge
  %150 = mul nsw i64 %90, %92
  %151 = shl i64 %150, 1
  %152 = call noalias ptr @malloc(i64 noundef %151) #17
  %153 = zext i32 %107 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %94, ptr noundef %152, i64 noundef %153) #14
  %calloc = call ptr @calloc(i64 1, i64 %99)
  br i1 %.not, label %162, label %154

154:                                              ; preds = %149
  %155 = zext i32 %115 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %101, ptr noundef %calloc, i64 noundef %155) #14
  br label %162

156:                                              ; preds = %.thread688
  %157 = zext i32 %115 to i64
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %101, ptr noundef %calloc760, i64 noundef %157) #14
  br label %162

158:                                              ; preds = %.thread691
  %159 = zext i32 %115 to i64
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %101, ptr noundef %calloc761, i64 noundef %159) #14
  br label %162

160:                                              ; preds = %.thread694
  %161 = zext i32 %115 to i64
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %101, ptr noundef %calloc762, i64 noundef %161) #14
  br label %162

162:                                              ; preds = %136, %156, %.thread688, %160, %.thread694, %.thread691, %158, %149, %154
  %.0479686 = phi ptr [ %152, %154 ], [ %152, %149 ], [ %139, %156 ], [ %139, %.thread688 ], [ %142, %158 ], [ %142, %.thread691 ], [ %146, %160 ], [ %146, %.thread694 ], [ null, %136 ]
  %.0478 = phi ptr [ %calloc, %154 ], [ %calloc, %149 ], [ %calloc760, %156 ], [ %calloc760, %.thread688 ], [ %calloc761, %158 ], [ %calloc761, %.thread691 ], [ %calloc762, %160 ], [ %calloc762, %.thread694 ], [ null, %136 ]
  %163 = load i64, ptr %3, align 8, !tbaa !5
  %164 = shl i64 %163, 3
  %165 = call noalias ptr @malloc(i64 noundef %164) #17
  %166 = shl i64 %163, 2
  %167 = call noalias ptr @malloc(i64 noundef %166) #17
  %168 = call noalias ptr @malloc(i64 noundef %95) #17
  %169 = call noalias ptr @malloc(i64 noundef %91) #17
  %170 = call noalias ptr @malloc(i64 noundef %95) #17
  %171 = call noalias ptr @malloc(i64 noundef %91) #17
  %172 = icmp eq i32 %.0487580591616628657673, 0
  br i1 %172, label %173, label %.thread698

173:                                              ; preds = %162
  %174 = icmp eq i32 %.0473538546563575596611633652678, 1
  br i1 %174, label %175, label %189

175:                                              ; preds = %173
  %176 = getelementptr inbounds float, ptr %101, i64 %98
  %177 = getelementptr inbounds double, ptr %103, i64 %98
  br i1 %135, label %178, label %180

178:                                              ; preds = %175
  %179 = getelementptr inbounds i16, ptr %.0478, i64 %98
  call void @libxsmm_convert_bf16_f32(ptr noundef %.0478, ptr noundef %131, i64 noundef %98) #14
  call void @libxsmm_convert_bf16_f32(ptr noundef %179, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

180:                                              ; preds = %175
  switch i32 %86, label %.thread698 [
    i32 3, label %181
    i32 4, label %183
    i32 5, label %185
    i32 1, label %187
    i32 0, label %188
  ]

181:                                              ; preds = %180
  %182 = getelementptr inbounds i16, ptr %.0478, i64 %98
  call void @libxsmm_convert_f16_f32(ptr noundef %.0478, ptr noundef %131, i64 noundef %98) #14
  call void @libxsmm_convert_f16_f32(ptr noundef %182, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

183:                                              ; preds = %180
  %184 = getelementptr inbounds i8, ptr %.0478, i64 %98
  call void @libxsmm_convert_bf8_f32(ptr noundef %.0478, ptr noundef %131, i64 noundef %98) #14
  call void @libxsmm_convert_bf8_f32(ptr noundef %184, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

185:                                              ; preds = %180
  %186 = getelementptr inbounds i8, ptr %.0478, i64 %98
  call void @libxsmm_convert_hf8_f32(ptr noundef %.0478, ptr noundef %131, i64 noundef %98) #14
  call void @libxsmm_convert_hf8_f32(ptr noundef %186, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

187:                                              ; preds = %180
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %131, ptr align 1 %101, i64 %99, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %132, ptr align 1 %176, i64 %99, i1 false)
  br label %.thread698

188:                                              ; preds = %180
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %133, ptr align 1 %103, i64 %100, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %134, ptr align 1 %177, i64 %100, i1 false)
  br label %.thread698

189:                                              ; preds = %173
  %190 = icmp eq i32 %.0473538546563575596611633652678, 0
  %191 = icmp eq i32 %.0474550559579592615629656674, 1
  %or.cond11 = and i1 %190, %191
  br i1 %or.cond11, label %192, label %.thread698

192:                                              ; preds = %189
  br i1 %135, label %193, label %194

193:                                              ; preds = %192
  call void @libxsmm_convert_bf16_f32(ptr noundef %.0478, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

194:                                              ; preds = %192
  switch i32 %86, label %.thread698 [
    i32 3, label %195
    i32 4, label %196
    i32 5, label %197
    i32 1, label %198
    i32 0, label %199
  ]

195:                                              ; preds = %194
  call void @libxsmm_convert_f16_f32(ptr noundef %.0478, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

196:                                              ; preds = %194
  call void @libxsmm_convert_bf8_f32(ptr noundef %.0478, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

197:                                              ; preds = %194
  call void @libxsmm_convert_hf8_f32(ptr noundef %.0478, ptr noundef %132, i64 noundef %98) #14
  br label %.thread698

198:                                              ; preds = %194
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %132, ptr align 1 %101, i64 %99, i1 false)
  br label %.thread698

199:                                              ; preds = %194
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %134, ptr align 1 %103, i64 %100, i1 false)
  br label %.thread698

.thread698:                                       ; preds = %181, %185, %188, %187, %183, %178, %180, %194, %189, %195, %197, %199, %198, %196, %193, %162
  %.1483 = phi ptr [ %101, %193 ], [ %101, %195 ], [ %101, %196 ], [ %101, %197 ], [ %101, %198 ], [ %101, %199 ], [ null, %189 ], [ null, %162 ], [ %101, %194 ], [ %176, %180 ], [ %176, %178 ], [ %176, %183 ], [ %176, %187 ], [ %176, %188 ], [ %176, %185 ], [ %176, %181 ]
  %.1481 = phi ptr [ %103, %193 ], [ %103, %195 ], [ %103, %196 ], [ %103, %197 ], [ %103, %198 ], [ %103, %199 ], [ null, %189 ], [ null, %162 ], [ %103, %194 ], [ %177, %180 ], [ %177, %178 ], [ %177, %183 ], [ %177, %187 ], [ %177, %188 ], [ %177, %185 ], [ %177, %181 ]
  %.2 = phi ptr [ %.0478, %193 ], [ %.0478, %195 ], [ %.0478, %196 ], [ %.0478, %197 ], [ null, %198 ], [ null, %199 ], [ null, %189 ], [ null, %162 ], [ null, %194 ], [ null, %180 ], [ %179, %178 ], [ %184, %183 ], [ null, %187 ], [ null, %188 ], [ %186, %185 ], [ %182, %181 ]
  %200 = load i64, ptr %3, align 8, !tbaa !5
  %.not739 = icmp eq i64 %200, 0
  br i1 %.not739, label %._crit_edge726, label %.lr.ph725

.lr.ph725:                                        ; preds = %.thread698, %.lr.ph725
  %201 = phi i64 [ %208, %.lr.ph725 ], [ 0, %.thread698 ]
  %.0492724 = phi i32 [ %207, %.lr.ph725 ], [ 0, %.thread698 ]
  %202 = call i32 @rand() #14
  %203 = urem i32 %202, %81
  %204 = zext i32 %203 to i64
  %205 = getelementptr inbounds i64, ptr %165, i64 %201
  store i64 %204, ptr %205, align 8, !tbaa !5
  %206 = getelementptr inbounds i32, ptr %167, i64 %201
  store i32 %203, ptr %206, align 4, !tbaa !22
  %207 = add i32 %.0492724, 1
  %208 = zext i32 %207 to i64
  %209 = load i64, ptr %3, align 8, !tbaa !5
  %210 = icmp ugt i64 %209, %208
  br i1 %210, label %.lr.ph725, label %._crit_edge726, !llvm.loop !24

._crit_edge726:                                   ; preds = %.lr.ph725, %.thread698
  %211 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %212 = icmp eq i32 %86, 0
  %213 = load i64, ptr %3, align 8, !tbaa !5
  %214 = trunc i64 %213 to i32
  br i1 %212, label %215, label %216

215:                                              ; preds = %._crit_edge726
  call void @reference_reduce_kernel_f64(i32 noundef %80, i32 noundef %81, i32 noundef %82, i32 noundef %214, ptr noundef %97, ptr noundef %133, ptr noundef %134, ptr noundef %165, i32 noundef %.0487580591616628657673, i32 noundef %.0493564574597610634651679, i32 noundef %.0485658672, ptr noundef %168, i32 noundef 0, i32 noundef %.0476682)
  br label %217

216:                                              ; preds = %._crit_edge726
  call void @reference_reduce_kernel(i32 noundef %80, i32 noundef %81, i32 noundef %82, i32 noundef %214, ptr noundef %94, ptr noundef %131, ptr noundef %132, ptr noundef %165, i32 noundef %.0487580591616628657673, i32 noundef %.0493564574597610634651679, i32 noundef %.0485658672, ptr noundef %168, i32 noundef %86, i32 noundef %.0476682)
  br label %217

217:                                              ; preds = %216, %215
  %218 = phi ptr [ %101, %216 ], [ %103, %215 ]
  %219 = phi ptr [ %94, %216 ], [ %97, %215 ]
  %220 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  %221 = load i64, ptr %3, align 8, !tbaa !5
  %222 = trunc i64 %221 to i32
  call void @setup_tpp_kernel_and_param_struct(ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %5, ptr noundef nonnull %7, i32 noundef %80, i32 noundef %81, i32 noundef %82, i32 noundef %222, i32 noundef %.0493564574597610634651679, i32 noundef %.0487580591616628657673, i32 noundef %.0473538546563575596611633652678, i32 noundef %.0474550559579592615629656674, i32 noundef %86, i32 noundef %.0486636649681, ptr noundef %219, ptr noundef %218, ptr noundef %.0479686, ptr noundef %.0478, ptr noundef %165, ptr noundef %167, i32 noundef %.0485658672, ptr noundef %170, ptr noundef %171, i32 noundef %.0476682)
  %223 = load i64, ptr %3, align 8, !tbaa !5
  %224 = icmp eq i64 %223, 0
  br i1 %224, label %225, label %228

225:                                              ; preds = %217
  %226 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %227 = load ptr, ptr %4, align 8, !tbaa !9
  call void %227(ptr noundef nonnull %5) #14
  br label %232

228:                                              ; preds = %217
  %229 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %230 = getelementptr inbounds i8, ptr %7, i64 48
  store ptr %3, ptr %230, align 8, !tbaa !25
  %231 = load ptr, ptr %6, align 8, !tbaa !9
  call void %231(ptr noundef nonnull %7) #14
  br label %232

232:                                              ; preds = %228, %225
  %233 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %234 = load i64, ptr %3, align 8, !tbaa !5
  %235 = icmp eq i64 %234, 0
  br i1 %235, label %236, label %237

236:                                              ; preds = %232
  br i1 %212, label %241, label %switch.lookup

237:                                              ; preds = %232
  %switch.tableidx796 = add nsw i32 %86, -1
  %238 = icmp ult i32 %switch.tableidx796, 5
  br i1 %238, label %switch.lookup795, label %241

switch.lookup:                                    ; preds = %236
  %switch.tableidx = add nsw i32 %86, -1
  %239 = sext i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [5 x ptr], ptr @switch.table.main, i64 0, i64 %239
  br label %.sink.split

switch.lookup795:                                 ; preds = %237
  %240 = zext nneg i32 %switch.tableidx796 to i64
  %switch.gep797 = getelementptr inbounds [5 x ptr], ptr @switch.table.main.1, i64 0, i64 %240
  br label %.sink.split

.sink.split:                                      ; preds = %switch.lookup, %switch.lookup795
  %switch.gep797.sink = phi ptr [ %switch.gep797, %switch.lookup795 ], [ %switch.gep, %switch.lookup ]
  %switch.load798 = load ptr, ptr %switch.gep797.sink, align 8
  br label %241

241:                                              ; preds = %.sink.split, %237, %236
  %.str.14.sink = phi ptr [ @.str.8, %236 ], [ @.str.18, %237 ], [ %switch.load798, %.sink.split ]
  %242 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.14.sink)
  %.not509 = icmp eq i32 %.0473538546563575596611633652678, 0
  br i1 %.not509, label %276, label %243

243:                                              ; preds = %241
  %244 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br i1 %135, label %245, label %246

245:                                              ; preds = %243
  call void @libxsmm_convert_bf16_f32(ptr noundef %.0478, ptr noundef %101, i64 noundef %98) #14
  br label %.thread704

246:                                              ; preds = %243
  switch i32 %86, label %250 [
    i32 3, label %247
    i32 4, label %248
    i32 5, label %249
  ]

247:                                              ; preds = %246
  call void @libxsmm_convert_f16_f32(ptr noundef %.0478, ptr noundef %101, i64 noundef %98) #14
  br label %.thread704

248:                                              ; preds = %246
  call void @libxsmm_convert_bf8_f32(ptr noundef %.0478, ptr noundef %101, i64 noundef %98) #14
  br label %.thread704

249:                                              ; preds = %246
  call void @libxsmm_convert_hf8_f32(ptr noundef %.0478, ptr noundef %101, i64 noundef %98) #14
  br label %.thread704

250:                                              ; preds = %246
  br i1 %212, label %251, label %.thread704

251:                                              ; preds = %250
  %252 = call i32 @libxsmm_matdiff(ptr noundef nonnull %8, i32 noundef 0, i32 noundef %85, i32 noundef 1, ptr noundef %133, ptr noundef %103, ptr noundef null, ptr noundef null) #14
  br label %254

.thread704:                                       ; preds = %245, %248, %249, %247, %250
  %253 = call i32 @libxsmm_matdiff(ptr noundef nonnull %8, i32 noundef 1, i32 noundef %85, i32 noundef 1, ptr noundef %131, ptr noundef %101, ptr noundef null, ptr noundef null) #14
  br label %254

254:                                              ; preds = %.thread704, %251
  %255 = getelementptr inbounds i8, ptr %8, i64 80
  %256 = load double, ptr %255, align 8, !tbaa !29
  %257 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, double noundef %256)
  %258 = getelementptr inbounds i8, ptr %8, i64 120
  %259 = load double, ptr %258, align 8, !tbaa !31
  %260 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, double noundef %259)
  %261 = getelementptr inbounds i8, ptr %8, i64 56
  %262 = load double, ptr %261, align 8, !tbaa !32
  %263 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, double noundef %262)
  %264 = getelementptr inbounds i8, ptr %8, i64 64
  %265 = load double, ptr %264, align 8, !tbaa !33
  %266 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %265)
  %267 = getelementptr inbounds i8, ptr %8, i64 40
  %268 = load double, ptr %267, align 8, !tbaa !34
  %269 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, double noundef %268)
  %270 = getelementptr inbounds i8, ptr %8, i64 48
  %271 = load double, ptr %270, align 8, !tbaa !35
  %272 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %271)
  %273 = getelementptr inbounds i8, ptr %8, i64 32
  %274 = load double, ptr %273, align 8, !tbaa !36
  %275 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, double noundef %274)
  call void @libxsmm_matdiff_reduce(ptr noundef nonnull %10, ptr noundef nonnull %8) #14
  br label %276

276:                                              ; preds = %254, %241
  %277 = icmp ne i32 %.0474550559579592615629656674, 0
  %278 = load i64, ptr %3, align 8
  %279 = icmp eq i64 %278, 0
  %or.cond13 = select i1 %277, i1 %279, i1 false
  br i1 %or.cond13, label %280, label %325

280:                                              ; preds = %276
  br i1 %135, label %281, label %282

281:                                              ; preds = %280
  call void @libxsmm_convert_bf16_f32(ptr noundef %.2, ptr noundef %.1483, i64 noundef %98) #14
  br label %.thread706

282:                                              ; preds = %280
  switch i32 %86, label %287 [
    i32 3, label %283
    i32 4, label %284
    i32 5, label %285
  ]

283:                                              ; preds = %282
  call void @libxsmm_convert_f16_f32(ptr noundef %.2, ptr noundef %.1483, i64 noundef %98) #14
  br label %.thread706

284:                                              ; preds = %282
  call void @libxsmm_convert_bf8_f32(ptr noundef %.2, ptr noundef %.1483, i64 noundef %98) #14
  br label %.thread706

285:                                              ; preds = %282
  call void @libxsmm_convert_hf8_f32(ptr noundef %.2, ptr noundef %.1483, i64 noundef %98) #14
  br label %.thread706

.thread706:                                       ; preds = %283, %285, %284, %281
  %286 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br label %291

287:                                              ; preds = %282
  %288 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br i1 %212, label %.thread709, label %291

.thread709:                                       ; preds = %287
  %289 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26)
  %290 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br label %299

291:                                              ; preds = %.thread706, %287
  %switch.tableidx800 = add nsw i32 %86, -1
  %292 = icmp ult i32 %switch.tableidx800, 5
  br i1 %292, label %switch.hole_check, label %296

switch.hole_check:                                ; preds = %291
  %switch.maskindex = trunc nuw i32 %switch.tableidx800 to i8
  %switch.shifted = lshr i8 29, %switch.maskindex
  %switch.lobit = trunc i8 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup801, label %296

switch.lookup801:                                 ; preds = %switch.hole_check
  %293 = zext nneg i32 %switch.tableidx800 to i64
  %switch.gep802 = getelementptr inbounds [5 x ptr], ptr @switch.table.main.2, i64 0, i64 %293
  %switch.load = load ptr, ptr %switch.gep802, align 8
  %294 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %switch.load)
  %295 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br label %301

296:                                              ; preds = %switch.hole_check, %291
  %297 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31)
  %298 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  br i1 %212, label %299, label %301

299:                                              ; preds = %.thread709, %296
  %300 = call i32 @libxsmm_matdiff(ptr noundef nonnull %9, i32 noundef 0, i32 noundef %85, i32 noundef 1, ptr noundef %134, ptr noundef %.1481, ptr noundef null, ptr noundef null) #14
  br label %303

301:                                              ; preds = %switch.lookup801, %296
  %302 = call i32 @libxsmm_matdiff(ptr noundef nonnull %9, i32 noundef 1, i32 noundef %85, i32 noundef 1, ptr noundef %132, ptr noundef %.1483, ptr noundef null, ptr noundef null) #14
  br label %303

303:                                              ; preds = %301, %299
  %304 = getelementptr inbounds i8, ptr %9, i64 80
  %305 = load double, ptr %304, align 8, !tbaa !29
  %306 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, double noundef %305)
  %307 = getelementptr inbounds i8, ptr %9, i64 120
  %308 = load double, ptr %307, align 8, !tbaa !31
  %309 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, double noundef %308)
  %310 = getelementptr inbounds i8, ptr %9, i64 56
  %311 = load double, ptr %310, align 8, !tbaa !32
  %312 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, double noundef %311)
  %313 = getelementptr inbounds i8, ptr %9, i64 64
  %314 = load double, ptr %313, align 8, !tbaa !33
  %315 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %314)
  %316 = getelementptr inbounds i8, ptr %9, i64 40
  %317 = load double, ptr %316, align 8, !tbaa !34
  %318 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, double noundef %317)
  %319 = getelementptr inbounds i8, ptr %9, i64 48
  %320 = load double, ptr %319, align 8, !tbaa !35
  %321 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %320)
  %322 = getelementptr inbounds i8, ptr %8, i64 32
  %323 = load double, ptr %322, align 8, !tbaa !36
  %324 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, double noundef %323)
  br label %325

325:                                              ; preds = %303, %276
  %.not510 = icmp eq i32 %.0485658672, 0
  br i1 %.not510, label %367, label %326

326:                                              ; preds = %325
  %327 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %328 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.32)
  %329 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %330 = icmp eq i32 %.0486636649681, 0
  br i1 %330, label %338, label %.preheader717.preheader

.preheader717.preheader:                          ; preds = %326
  %wide.trip.count754 = zext i32 %80 to i64
  %min.iters.check783 = icmp ult i32 %.0515519527536548561577594613631654676, 4
  br i1 %min.iters.check783, label %.preheader717.preheader805, label %vector.ph784

.preheader717.preheader805:                       ; preds = %middle.block781, %.preheader717.preheader
  %indvars.iv751.ph = phi i64 [ 0, %.preheader717.preheader ], [ %n.vec786, %middle.block781 ]
  br label %.preheader717

vector.ph784:                                     ; preds = %.preheader717.preheader
  %n.vec786 = and i64 %wide.trip.count754, 4294967292
  br label %vector.body788

vector.body788:                                   ; preds = %vector.body788, %vector.ph784
  %index789 = phi i64 [ 0, %vector.ph784 ], [ %index.next792, %vector.body788 ]
  %331 = getelementptr inbounds i64, ptr %168, i64 %index789
  %332 = getelementptr inbounds i8, ptr %331, i64 16
  %wide.load790 = load <2 x i64>, ptr %331, align 8, !tbaa !5
  %wide.load791 = load <2 x i64>, ptr %332, align 8, !tbaa !5
  %333 = trunc <2 x i64> %wide.load790 to <2 x i32>
  %334 = trunc <2 x i64> %wide.load791 to <2 x i32>
  %335 = getelementptr inbounds i32, ptr %169, i64 %index789
  %336 = getelementptr inbounds i8, ptr %335, i64 8
  store <2 x i32> %333, ptr %335, align 4, !tbaa !22
  store <2 x i32> %334, ptr %336, align 4, !tbaa !22
  %index.next792 = add nuw i64 %index789, 4
  %337 = icmp eq i64 %index.next792, %n.vec786
  br i1 %337, label %middle.block781, label %vector.body788, !llvm.loop !37

middle.block781:                                  ; preds = %vector.body788
  %cmp.n793 = icmp eq i64 %n.vec786, %wide.trip.count754
  br i1 %cmp.n793, label %.loopexit794, label %.preheader717.preheader805

338:                                              ; preds = %326
  %339 = call i32 @libxsmm_matdiff(ptr noundef nonnull %8, i32 noundef 6, i32 noundef %80, i32 noundef 1, ptr noundef %168, ptr noundef %170, ptr noundef null, ptr noundef null) #14
  br label %345

.preheader717:                                    ; preds = %.preheader717.preheader805, %.preheader717
  %indvars.iv751 = phi i64 [ %indvars.iv.next752, %.preheader717 ], [ %indvars.iv751.ph, %.preheader717.preheader805 ]
  %340 = getelementptr inbounds i64, ptr %168, i64 %indvars.iv751
  %341 = load i64, ptr %340, align 8, !tbaa !5
  %342 = trunc i64 %341 to i32
  %343 = getelementptr inbounds i32, ptr %169, i64 %indvars.iv751
  store i32 %342, ptr %343, align 4, !tbaa !22
  %indvars.iv.next752 = add nuw nsw i64 %indvars.iv751, 1
  %exitcond755.not = icmp eq i64 %indvars.iv.next752, %wide.trip.count754
  br i1 %exitcond755.not, label %.loopexit794, label %.preheader717, !llvm.loop !38

.loopexit794:                                     ; preds = %.preheader717, %middle.block781
  %344 = call i32 @libxsmm_matdiff(ptr noundef nonnull %8, i32 noundef 8, i32 noundef %80, i32 noundef 1, ptr noundef nonnull %169, ptr noundef %171, ptr noundef null, ptr noundef null) #14
  br label %345

345:                                              ; preds = %.loopexit794, %338
  %346 = getelementptr inbounds i8, ptr %8, i64 80
  %347 = load double, ptr %346, align 8, !tbaa !29
  %348 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, double noundef %347)
  %349 = getelementptr inbounds i8, ptr %8, i64 120
  %350 = load double, ptr %349, align 8, !tbaa !31
  %351 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, double noundef %350)
  %352 = getelementptr inbounds i8, ptr %8, i64 56
  %353 = load double, ptr %352, align 8, !tbaa !32
  %354 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, double noundef %353)
  %355 = getelementptr inbounds i8, ptr %8, i64 64
  %356 = load double, ptr %355, align 8, !tbaa !33
  %357 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %356)
  %358 = getelementptr inbounds i8, ptr %8, i64 40
  %359 = load double, ptr %358, align 8, !tbaa !34
  %360 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, double noundef %359)
  %361 = getelementptr inbounds i8, ptr %8, i64 48
  %362 = load double, ptr %361, align 8, !tbaa !35
  %363 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %362)
  %364 = getelementptr inbounds i8, ptr %8, i64 32
  %365 = load double, ptr %364, align 8, !tbaa !36
  %366 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, double noundef %365)
  br label %367

367:                                              ; preds = %345, %325
  %368 = call i64 @libxsmm_timer_tick() #14
  %.not740 = icmp eq i32 %.0488, 0
  br i1 %.not740, label %._crit_edge731, label %.lr.ph730

.lr.ph730:                                        ; preds = %367
  br i1 %212, label %.lr.ph730.split.us, label %.lr.ph730.split

.lr.ph730.split.us:                               ; preds = %.lr.ph730, %.lr.ph730.split.us
  %.3728.us = phi i32 [ %371, %.lr.ph730.split.us ], [ 0, %.lr.ph730 ]
  %369 = load i64, ptr %3, align 8, !tbaa !5
  %370 = trunc i64 %369 to i32
  call void @reference_reduce_kernel_f64(i32 noundef %80, i32 noundef %81, i32 noundef %82, i32 noundef %370, ptr noundef %97, ptr noundef %133, ptr noundef %134, ptr noundef %165, i32 noundef %.0487580591616628657673, i32 noundef %.0493564574597610634651679, i32 noundef %.0485658672, ptr noundef %168, i32 noundef 0, i32 noundef %.0476682)
  %371 = add nuw i32 %.3728.us, 1
  %exitcond757.not = icmp eq i32 %371, %.0488
  br i1 %exitcond757.not, label %._crit_edge731, label %.lr.ph730.split.us, !llvm.loop !39

.lr.ph730.split:                                  ; preds = %.lr.ph730, %.lr.ph730.split
  %.3728 = phi i32 [ %374, %.lr.ph730.split ], [ 0, %.lr.ph730 ]
  %372 = load i64, ptr %3, align 8, !tbaa !5
  %373 = trunc i64 %372 to i32
  call void @reference_reduce_kernel(i32 noundef %80, i32 noundef %81, i32 noundef %82, i32 noundef %373, ptr noundef %94, ptr noundef %131, ptr noundef %132, ptr noundef %165, i32 noundef %.0487580591616628657673, i32 noundef %.0493564574597610634651679, i32 noundef %.0485658672, ptr noundef %168, i32 noundef %86, i32 noundef %.0476682)
  %374 = add nuw i32 %.3728, 1
  %exitcond756.not = icmp eq i32 %374, %.0488
  br i1 %exitcond756.not, label %._crit_edge731, label %.lr.ph730.split, !llvm.loop !39

._crit_edge731:                                   ; preds = %.lr.ph730.split, %.lr.ph730.split.us, %367
  %375 = call i64 @libxsmm_timer_tick() #14
  %376 = call double @libxsmm_timer_duration(i64 noundef %368, i64 noundef %375) #14
  %377 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.35, double noundef %376)
  %378 = call i64 @libxsmm_timer_tick() #14
  %379 = load i64, ptr %3, align 8, !tbaa !5
  %380 = icmp eq i64 %379, 0
  br i1 %380, label %.preheader, label %383

.preheader:                                       ; preds = %._crit_edge731
  br i1 %.not740, label %.loopexit, label %.lr.ph736

.lr.ph736:                                        ; preds = %.preheader, %.lr.ph736
  %.4735 = phi i32 [ %382, %.lr.ph736 ], [ 0, %.preheader ]
  %381 = load ptr, ptr %4, align 8, !tbaa !9
  call void %381(ptr noundef nonnull %5) #14
  %382 = add nuw i32 %.4735, 1
  %exitcond759.not = icmp eq i32 %382, %.0488
  br i1 %exitcond759.not, label %.loopexit, label %.lr.ph736, !llvm.loop !40

383:                                              ; preds = %._crit_edge731
  %384 = getelementptr inbounds i8, ptr %7, i64 48
  store ptr %3, ptr %384, align 8, !tbaa !25
  br i1 %.not740, label %.loopexit, label %.lr.ph734

.lr.ph734:                                        ; preds = %383, %.lr.ph734
  %.5732 = phi i32 [ %386, %.lr.ph734 ], [ 0, %383 ]
  %385 = load ptr, ptr %6, align 8, !tbaa !9
  call void %385(ptr noundef nonnull %7) #14
  %386 = add nuw i32 %.5732, 1
  %exitcond758.not = icmp eq i32 %386, %.0488
  br i1 %exitcond758.not, label %.loopexit, label %.lr.ph734, !llvm.loop !41

.loopexit:                                        ; preds = %.lr.ph734, %.lr.ph736, %383, %.preheader
  %387 = call i64 @libxsmm_timer_tick() #14
  %388 = call double @libxsmm_timer_duration(i64 noundef %378, i64 noundef %387) #14
  %389 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.36, double noundef %388)
  %390 = fcmp ogt double %388, 0.000000e+00
  br i1 %390, label %391, label %394

391:                                              ; preds = %.loopexit
  %392 = fdiv double %376, %388
  %393 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.37, double noundef %392)
  br label %394

394:                                              ; preds = %391, %.loopexit
  call void @free(ptr noundef %94) #14
  call void @free(ptr noundef %101) #14
  call void @free(ptr noundef %97) #14
  call void @free(ptr noundef %103) #14
  call void @free(ptr noundef %.0479686) #14
  call void @free(ptr noundef %.0478) #14
  call void @free(ptr noundef %131) #14
  call void @free(ptr noundef %132) #14
  call void @free(ptr noundef %133) #14
  call void @free(ptr noundef %134) #14
  %395 = call ptr @getenv(ptr noundef nonnull @.str.38) #14
  %396 = icmp eq ptr %395, null
  br i1 %396, label %.critedge511, label %397

397:                                              ; preds = %394
  %398 = call double @atof(ptr noundef %395) #15
  %399 = fcmp ult double %398, 0.000000e+00
  br i1 %399, label %400, label %.critedge511

400:                                              ; preds = %397
  %401 = fneg double %398
  br label %.critedge511

.critedge511:                                     ; preds = %397, %394, %400
  %402 = phi double [ %401, %400 ], [ 1.000000e+00, %394 ], [ %398, %397 ]
  %403 = fcmp une double %18, 0.000000e+00
  br i1 %403, label %404, label %414

404:                                              ; preds = %.critedge511
  %405 = fmul double %402, 1.000000e+02
  %406 = getelementptr inbounds i8, ptr %10, i64 32
  %407 = load double, ptr %406, align 8, !tbaa !36
  %408 = fmul double %405, %407
  %409 = fcmp olt double %18, %408
  br i1 %409, label %410, label %414

410:                                              ; preds = %404
  %411 = load ptr, ptr @stdout, align 8, !tbaa !9
  %412 = fmul double %407, 1.000000e+02
  %413 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %411, ptr noundef nonnull @.str.39, double noundef %412) #14
  call void @exit(i32 noundef 1) #16
  unreachable

414:                                              ; preds = %404, %.critedge511
  %415 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40)
  %416 = load i32, ptr @is_reference_kernel, align 4, !tbaa !22
  %417 = call i32 @libxsmm_return_success_code(i32 noundef %416)
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %10) #14
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %9) #14
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %8) #14
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %7) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #14
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %5) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #14
  ret i32 %417
}

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

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #2

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

declare void @libxsmm_init() local_unnamed_addr #4

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @char_to_libxsmm_datatype(ptr noundef) local_unnamed_addr #6

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #8

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @sfill_matrix(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

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

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

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

declare void @libxsmm_rne_convert_fp32_hf8(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 void @libxsmm_convert_f16_f32(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #10

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @reference_reduce_kernel_f64(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @reference_reduce_kernel(i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @setup_tpp_kernel_and_param_struct(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #6

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 void @libxsmm_matdiff_reduce(ptr noundef, 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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #12

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #12

; Function Attrs: nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #13

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

!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 = !{!"long long", !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 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = distinct !{!15, !16, !17, !18}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!"llvm.loop.isvectorized", i32 1}
!18 = !{!"llvm.loop.unroll.runtime.disable"}
!19 = distinct !{!19, !16, !17, !18}
!20 = distinct !{!20, !16, !18, !17}
!21 = distinct !{!21, !16, !18, !17}
!22 = !{!23, !23, i64 0}
!23 = !{!"int", !7, i64 0}
!24 = distinct !{!24, !16}
!25 = !{!26, !10, i64 48}
!26 = !{!"libxsmm_meltw_unary_param", !27, i64 0, !28, i64 32, !28, i64 80}
!27 = !{!"libxsmm_matrix_op_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!28 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!29 = !{!30, !14, i64 80}
!30 = !{!"libxsmm_matdiff_info", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !23, i64 176, !23, i64 180, !23, i64 184, !23, i64 188}
!31 = !{!30, !14, i64 120}
!32 = !{!30, !14, i64 56}
!33 = !{!30, !14, i64 64}
!34 = !{!30, !14, i64 40}
!35 = !{!30, !14, i64 48}
!36 = !{!30, !14, i64 32}
!37 = distinct !{!37, !16, !17, !18}
!38 = distinct !{!38, !16, !18, !17}
!39 = distinct !{!39, !16}
!40 = distinct !{!40, !16}
!41 = distinct !{!41, !16}


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