; LLVM IR from libxsmm/libxsmm :: samples/equation (equation_gather_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_kernel_info = type { i32, i32, i64, i32 }
%struct.libxsmm_meqn_param = type { ptr, ptr, %struct.libxsmm_matrix_arg }
%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 }
%struct.libxsmm_meqn_arg_metadata = type { i32, i32 }
%struct.libxsmm_meqn_op_metadata = type { i32, i32 }
%struct.libxsmm_meqn_arg_shape = type { i32, i32, i32, i32 }
%struct.libxsmm_matrix_arg_attributes = type { i32, i32, i32, i32 }

@is_reference_kernel = external dso_local global i32, align 4
@info = external dso_local global %struct.libxsmm_kernel_info, align 8
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [19 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 double, align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %struct.libxsmm_meqn_param, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca %struct.libxsmm_matdiff_info, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %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 [1 x %struct.libxsmm_matrix_arg], align 16
  %30 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %31 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %32 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %33 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %34 = alloca %struct.libxsmm_meqn_arg_metadata, align 4
  %35 = alloca %struct.libxsmm_meqn_op_metadata, align 4
  %36 = alloca %struct.libxsmm_meqn_arg_shape, align 4
  %37 = alloca %struct.libxsmm_meqn_arg_shape, align 4
  %38 = alloca %struct.libxsmm_matrix_arg_attributes, align 4
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca %struct.libxsmm_meqn_arg_metadata, align 4
  %59 = alloca %struct.libxsmm_meqn_op_metadata, align 4
  %60 = alloca %struct.libxsmm_meqn_arg_shape, align 4
  %61 = alloca %struct.libxsmm_meqn_arg_shape, align 4
  %62 = alloca i16, align 2
  %63 = alloca i8, align 1
  %64 = alloca i16, align 2
  %65 = alloca i8, align 1
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  store double 1.000000e-04, ptr %7, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  store double 0.000000e+00, ptr %16, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  store double 0.000000e+00, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 192, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #8
  %66 = call { i64, i64 } @libxsmm_create_matrix_arg_attributes(i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %67 = getelementptr inbounds { i64, i64 }, ptr %38, i32 0, i32 0
  %68 = extractvalue { i64, i64 } %66, 0
  store i64 %68, ptr %67, align 4
  %69 = getelementptr inbounds { i64, i64 }, ptr %38, i32 0, i32 1
  %70 = extractvalue { i64, i64 } %66, 1
  store i64 %70, ptr %69, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  store i32 64, ptr %47, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  store i32 64, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  %71 = load i32, ptr %48, align 4, !tbaa !5
  %72 = mul nsw i32 8, %71
  store i32 %72, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  store i32 64, ptr %50, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  store i32 100, ptr %51, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 0, ptr %52, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  store i32 0, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  store i32 1, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  store i32 1, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  store i32 1, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  store i32 0, ptr %57, align 4, !tbaa !5
  call void @libxsmm_init()
  call void @libxsmm_matdiff_clear(ptr noundef %18)
  %73 = load i32, ptr %4, align 4, !tbaa !5
  %74 = icmp sgt i32 %73, 1
  br i1 %74, label %75, label %80

75:                                               ; preds = %2
  %76 = load ptr, ptr %5, align 8, !tbaa !9
  %77 = getelementptr inbounds ptr, ptr %76, i64 1
  %78 = load ptr, ptr %77, align 8, !tbaa !9
  %79 = call i32 @atoi(ptr noundef %78) #9
  store i32 %79, ptr %47, align 4, !tbaa !5
  br label %80

80:                                               ; preds = %75, %2
  %81 = load i32, ptr %4, align 4, !tbaa !5
  %82 = icmp sgt i32 %81, 2
  br i1 %82, label %83, label %88

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

88:                                               ; preds = %83, %80
  %89 = load i32, ptr %4, align 4, !tbaa !5
  %90 = icmp sgt i32 %89, 3
  br i1 %90, label %91, label %96

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

96:                                               ; preds = %91, %88
  %97 = load i32, ptr %4, align 4, !tbaa !5
  %98 = icmp sgt i32 %97, 4
  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 4
  %102 = load ptr, ptr %101, align 8, !tbaa !9
  %103 = call i32 @atoi(ptr noundef %102) #9
  store i32 %103, ptr %52, 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, 5
  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 5
  %110 = load ptr, ptr %109, align 8, !tbaa !9
  %111 = call i32 @atoi(ptr noundef %110) #9
  store i32 %111, ptr %53, 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, 6
  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 6
  %118 = load ptr, ptr %117, align 8, !tbaa !9
  %119 = call i32 @atoi(ptr noundef %118) #9
  store i32 %119, ptr %51, align 4, !tbaa !5
  br label %120

120:                                              ; preds = %115, %112
  %121 = load i32, ptr %48, align 4, !tbaa !5
  %122 = mul nsw i32 8, %121
  store i32 %122, ptr %49, align 4, !tbaa !5
  %123 = load i32, ptr %52, align 4, !tbaa !5
  call void @set_in_out_compute_dt(i32 noundef %123, ptr noundef %54, ptr noundef %55, ptr noundef %56)
  %124 = load i32, ptr %50, align 4, !tbaa !5
  %125 = sext i32 %124 to i64
  %126 = mul i64 4, %125
  %127 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %126, i64 noundef 64)
  store ptr %127, ptr %19, align 8, !tbaa !9
  %128 = load i32, ptr %50, align 4, !tbaa !5
  %129 = sext i32 %128 to i64
  %130 = mul i64 4, %129
  %131 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %130, i64 noundef 64)
  store ptr %131, ptr %20, align 8, !tbaa !9
  %132 = load i32, ptr %48, align 4, !tbaa !5
  %133 = sext i32 %132 to i64
  %134 = mul i64 4, %133
  %135 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %134, i64 noundef 64)
  store ptr %135, ptr %39, align 8, !tbaa !9
  %136 = load i32, ptr %48, align 4, !tbaa !5
  %137 = sext i32 %136 to i64
  %138 = mul i64 8, %137
  %139 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %138, i64 noundef 64)
  store ptr %139, ptr %40, align 8, !tbaa !9
  %140 = load i32, ptr %49, align 4, !tbaa !5
  %141 = sext i32 %140 to i64
  %142 = mul i64 8, %141
  %143 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %142, i64 noundef 64)
  store ptr %143, ptr %41, align 8, !tbaa !9
  %144 = load i32, ptr %49, align 4, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = mul i64 4, %145
  %147 = load i32, ptr %50, align 4, !tbaa !5
  %148 = sext i32 %147 to i64
  %149 = mul i64 %146, %148
  %150 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %149, i64 noundef 64)
  store ptr %150, ptr %42, align 8, !tbaa !9
  %151 = load i32, ptr %49, align 4, !tbaa !5
  %152 = sext i32 %151 to i64
  %153 = mul i64 2, %152
  %154 = load i32, ptr %50, align 4, !tbaa !5
  %155 = sext i32 %154 to i64
  %156 = mul i64 %153, %155
  %157 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %156, i64 noundef 64)
  store ptr %157, ptr %43, align 8, !tbaa !9
  %158 = load i32, ptr %49, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = mul i64 2, %159
  %161 = load i32, ptr %50, align 4, !tbaa !5
  %162 = sext i32 %161 to i64
  %163 = mul i64 %160, %162
  %164 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %163, i64 noundef 64)
  store ptr %164, ptr %44, align 8, !tbaa !9
  %165 = load i32, ptr %49, align 4, !tbaa !5
  %166 = sext i32 %165 to i64
  %167 = mul i64 1, %166
  %168 = load i32, ptr %50, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = mul i64 %167, %169
  %171 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %170, i64 noundef 64)
  store ptr %171, ptr %45, align 8, !tbaa !9
  %172 = load i32, ptr %49, align 4, !tbaa !5
  %173 = sext i32 %172 to i64
  %174 = mul i64 1, %173
  %175 = load i32, ptr %50, align 4, !tbaa !5
  %176 = sext i32 %175 to i64
  %177 = mul i64 %174, %176
  %178 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %177, i64 noundef 64)
  store ptr %178, ptr %46, align 8, !tbaa !9
  %179 = load i32, ptr %50, align 4, !tbaa !5
  %180 = sext i32 %179 to i64
  %181 = mul i64 2, %180
  %182 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %181, i64 noundef 64)
  store ptr %182, ptr %21, align 8, !tbaa !9
  %183 = load i32, ptr %50, align 4, !tbaa !5
  %184 = sext i32 %183 to i64
  %185 = mul i64 2, %184
  %186 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %185, i64 noundef 64)
  store ptr %186, ptr %22, align 8, !tbaa !9
  %187 = load i32, ptr %50, align 4, !tbaa !5
  %188 = sext i32 %187 to i64
  %189 = mul i64 2, %188
  %190 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %189, i64 noundef 64)
  store ptr %190, ptr %23, align 8, !tbaa !9
  %191 = load i32, ptr %50, align 4, !tbaa !5
  %192 = sext i32 %191 to i64
  %193 = mul i64 2, %192
  %194 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %193, i64 noundef 64)
  store ptr %194, ptr %24, align 8, !tbaa !9
  %195 = load i32, ptr %50, align 4, !tbaa !5
  %196 = sext i32 %195 to i64
  %197 = mul i64 1, %196
  %198 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %197, i64 noundef 64)
  store ptr %198, ptr %25, align 8, !tbaa !9
  %199 = load i32, ptr %50, align 4, !tbaa !5
  %200 = sext i32 %199 to i64
  %201 = mul i64 1, %200
  %202 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %201, i64 noundef 64)
  store ptr %202, ptr %26, align 8, !tbaa !9
  %203 = load i32, ptr %50, align 4, !tbaa !5
  %204 = sext i32 %203 to i64
  %205 = mul i64 1, %204
  %206 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %205, i64 noundef 64)
  store ptr %206, ptr %27, align 8, !tbaa !9
  %207 = load i32, ptr %50, align 4, !tbaa !5
  %208 = sext i32 %207 to i64
  %209 = mul i64 1, %208
  %210 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %209, i64 noundef 64)
  store ptr %210, ptr %28, align 8, !tbaa !9
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %211

211:                                              ; preds = %390, %120
  %212 = load i32, ptr %10, align 4, !tbaa !5
  %213 = load i32, ptr %49, align 4, !tbaa !5
  %214 = icmp slt i32 %212, %213
  br i1 %214, label %215, label %393

215:                                              ; preds = %211
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %216

216:                                              ; preds = %386, %215
  %217 = load i32, ptr %11, align 4, !tbaa !5
  %218 = load i32, ptr %50, align 4, !tbaa !5
  %219 = icmp slt i32 %217, %218
  br i1 %219, label %220, label %389

220:                                              ; preds = %216
  %221 = call double @libxsmm_rng_f64()
  %222 = fptrunc double %221 to float
  %223 = load ptr, ptr %42, align 8, !tbaa !9
  %224 = load i32, ptr %10, align 4, !tbaa !5
  %225 = load i32, ptr %50, align 4, !tbaa !5
  %226 = mul nsw i32 %224, %225
  %227 = load i32, ptr %11, align 4, !tbaa !5
  %228 = add nsw i32 %226, %227
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds float, ptr %223, i64 %229
  store float %222, ptr %230, align 4, !tbaa !13
  %231 = load ptr, ptr %42, align 8, !tbaa !9
  %232 = load i32, ptr %10, align 4, !tbaa !5
  %233 = load i32, ptr %50, align 4, !tbaa !5
  %234 = mul nsw i32 %232, %233
  %235 = load i32, ptr %11, align 4, !tbaa !5
  %236 = add nsw i32 %234, %235
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds float, ptr %231, i64 %237
  %239 = load ptr, ptr %43, align 8, !tbaa !9
  %240 = load i32, ptr %10, align 4, !tbaa !5
  %241 = load i32, ptr %50, align 4, !tbaa !5
  %242 = mul nsw i32 %240, %241
  %243 = load i32, ptr %11, align 4, !tbaa !5
  %244 = add nsw i32 %242, %243
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i16, ptr %239, i64 %245
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %238, ptr noundef %246, i64 noundef 1)
  %247 = load ptr, ptr %42, align 8, !tbaa !9
  %248 = load i32, ptr %10, align 4, !tbaa !5
  %249 = load i32, ptr %50, align 4, !tbaa !5
  %250 = mul nsw i32 %248, %249
  %251 = load i32, ptr %11, align 4, !tbaa !5
  %252 = add nsw i32 %250, %251
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds float, ptr %247, i64 %253
  %255 = load ptr, ptr %44, align 8, !tbaa !9
  %256 = load i32, ptr %10, align 4, !tbaa !5
  %257 = load i32, ptr %50, align 4, !tbaa !5
  %258 = mul nsw i32 %256, %257
  %259 = load i32, ptr %11, align 4, !tbaa !5
  %260 = add nsw i32 %258, %259
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds i16, ptr %255, i64 %261
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %254, ptr noundef %262, i64 noundef 1)
  %263 = load ptr, ptr %42, align 8, !tbaa !9
  %264 = load i32, ptr %10, align 4, !tbaa !5
  %265 = load i32, ptr %50, align 4, !tbaa !5
  %266 = mul nsw i32 %264, %265
  %267 = load i32, ptr %11, align 4, !tbaa !5
  %268 = add nsw i32 %266, %267
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds float, ptr %263, i64 %269
  %271 = load ptr, ptr %45, align 8, !tbaa !9
  %272 = load i32, ptr %10, align 4, !tbaa !5
  %273 = load i32, ptr %50, align 4, !tbaa !5
  %274 = mul nsw i32 %272, %273
  %275 = load i32, ptr %11, align 4, !tbaa !5
  %276 = add nsw i32 %274, %275
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds i8, ptr %271, i64 %277
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %270, ptr noundef %278, i64 noundef 1)
  %279 = load ptr, ptr %42, align 8, !tbaa !9
  %280 = load i32, ptr %10, align 4, !tbaa !5
  %281 = load i32, ptr %50, align 4, !tbaa !5
  %282 = mul nsw i32 %280, %281
  %283 = load i32, ptr %11, align 4, !tbaa !5
  %284 = add nsw i32 %282, %283
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds float, ptr %279, i64 %285
  %287 = load ptr, ptr %46, align 8, !tbaa !9
  %288 = load i32, ptr %10, align 4, !tbaa !5
  %289 = load i32, ptr %50, align 4, !tbaa !5
  %290 = mul nsw i32 %288, %289
  %291 = load i32, ptr %11, align 4, !tbaa !5
  %292 = add nsw i32 %290, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i8, ptr %287, i64 %293
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %286, ptr noundef %294, i64 noundef 1)
  %295 = load i32, ptr %52, align 4, !tbaa !5
  %296 = icmp eq i32 %295, 1
  br i1 %296, label %297, label %316

297:                                              ; preds = %220
  %298 = load ptr, ptr %43, align 8, !tbaa !9
  %299 = load i32, ptr %10, align 4, !tbaa !5
  %300 = load i32, ptr %50, align 4, !tbaa !5
  %301 = mul nsw i32 %299, %300
  %302 = load i32, ptr %11, align 4, !tbaa !5
  %303 = add nsw i32 %301, %302
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i16, ptr %298, i64 %304
  %306 = load i16, ptr %305, align 2, !tbaa !15
  %307 = call float @upconvert_bf16(i16 noundef zeroext %306)
  %308 = load ptr, ptr %42, align 8, !tbaa !9
  %309 = load i32, ptr %10, align 4, !tbaa !5
  %310 = load i32, ptr %50, align 4, !tbaa !5
  %311 = mul nsw i32 %309, %310
  %312 = load i32, ptr %11, align 4, !tbaa !5
  %313 = add nsw i32 %311, %312
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds float, ptr %308, i64 %314
  store float %307, ptr %315, align 4, !tbaa !13
  br label %385

316:                                              ; preds = %220
  %317 = load i32, ptr %52, align 4, !tbaa !5
  %318 = icmp eq i32 %317, 4
  br i1 %318, label %319, label %338

319:                                              ; preds = %316
  %320 = load ptr, ptr %45, align 8, !tbaa !9
  %321 = load i32, ptr %10, align 4, !tbaa !5
  %322 = load i32, ptr %50, align 4, !tbaa !5
  %323 = mul nsw i32 %321, %322
  %324 = load i32, ptr %11, align 4, !tbaa !5
  %325 = add nsw i32 %323, %324
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds i8, ptr %320, i64 %326
  %328 = load i8, ptr %327, align 1, !tbaa !17
  %329 = call float @upconvert_bf8(i8 noundef zeroext %328)
  %330 = load ptr, ptr %42, align 8, !tbaa !9
  %331 = load i32, ptr %10, align 4, !tbaa !5
  %332 = load i32, ptr %50, align 4, !tbaa !5
  %333 = mul nsw i32 %331, %332
  %334 = load i32, ptr %11, align 4, !tbaa !5
  %335 = add nsw i32 %333, %334
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds float, ptr %330, i64 %336
  store float %329, ptr %337, align 4, !tbaa !13
  br label %384

338:                                              ; preds = %316
  %339 = load i32, ptr %52, align 4, !tbaa !5
  %340 = icmp eq i32 %339, 7
  br i1 %340, label %341, label %360

341:                                              ; preds = %338
  %342 = load ptr, ptr %44, align 8, !tbaa !9
  %343 = load i32, ptr %10, align 4, !tbaa !5
  %344 = load i32, ptr %50, align 4, !tbaa !5
  %345 = mul nsw i32 %343, %344
  %346 = load i32, ptr %11, align 4, !tbaa !5
  %347 = add nsw i32 %345, %346
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds i16, ptr %342, i64 %348
  %350 = load i16, ptr %349, align 2, !tbaa !15
  %351 = call float @upconvert_f16(i16 noundef zeroext %350)
  %352 = load ptr, ptr %42, align 8, !tbaa !9
  %353 = load i32, ptr %10, align 4, !tbaa !5
  %354 = load i32, ptr %50, align 4, !tbaa !5
  %355 = mul nsw i32 %353, %354
  %356 = load i32, ptr %11, align 4, !tbaa !5
  %357 = add nsw i32 %355, %356
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds float, ptr %352, i64 %358
  store float %351, ptr %359, align 4, !tbaa !13
  br label %383

360:                                              ; preds = %338
  %361 = load i32, ptr %52, align 4, !tbaa !5
  %362 = icmp eq i32 %361, 10
  br i1 %362, label %363, label %382

363:                                              ; preds = %360
  %364 = load ptr, ptr %46, align 8, !tbaa !9
  %365 = load i32, ptr %10, align 4, !tbaa !5
  %366 = load i32, ptr %50, align 4, !tbaa !5
  %367 = mul nsw i32 %365, %366
  %368 = load i32, ptr %11, align 4, !tbaa !5
  %369 = add nsw i32 %367, %368
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds i8, ptr %364, i64 %370
  %372 = load i8, ptr %371, align 1, !tbaa !17
  %373 = call float @upconvert_hf8(i8 noundef zeroext %372)
  %374 = load ptr, ptr %42, align 8, !tbaa !9
  %375 = load i32, ptr %10, align 4, !tbaa !5
  %376 = load i32, ptr %50, align 4, !tbaa !5
  %377 = mul nsw i32 %375, %376
  %378 = load i32, ptr %11, align 4, !tbaa !5
  %379 = add nsw i32 %377, %378
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds float, ptr %374, i64 %380
  store float %373, ptr %381, align 4, !tbaa !13
  br label %382

382:                                              ; preds = %363, %360
  br label %383

383:                                              ; preds = %382, %341
  br label %384

384:                                              ; preds = %383, %319
  br label %385

385:                                              ; preds = %384, %297
  br label %386

386:                                              ; preds = %385
  %387 = load i32, ptr %11, align 4, !tbaa !5
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %11, align 4, !tbaa !5
  br label %216, !llvm.loop !18

389:                                              ; preds = %216
  br label %390

390:                                              ; preds = %389
  %391 = load i32, ptr %10, align 4, !tbaa !5
  %392 = add nsw i32 %391, 1
  store i32 %392, ptr %10, align 4, !tbaa !5
  br label %211, !llvm.loop !20

393:                                              ; preds = %211
  %394 = load i32, ptr %52, align 4, !tbaa !5
  call void @print_dt_info(i32 noundef %394)
  %395 = load ptr, ptr %41, align 8, !tbaa !9
  %396 = load i32, ptr %49, align 4, !tbaa !5
  call void @create_unique_random_array(ptr noundef %395, i32 noundef %396)
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %397

397:                                              ; preds = %421, %393
  %398 = load i32, ptr %10, align 4, !tbaa !5
  %399 = load i32, ptr %48, align 4, !tbaa !5
  %400 = icmp slt i32 %398, %399
  br i1 %400, label %401, label %424

401:                                              ; preds = %397
  %402 = load ptr, ptr %41, align 8, !tbaa !9
  %403 = load i32, ptr %10, align 4, !tbaa !5
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds i64, ptr %402, i64 %404
  %406 = load i64, ptr %405, align 8, !tbaa !21
  %407 = load ptr, ptr %40, align 8, !tbaa !9
  %408 = load i32, ptr %10, align 4, !tbaa !5
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i64, ptr %407, i64 %409
  store i64 %406, ptr %410, align 8, !tbaa !21
  %411 = load ptr, ptr %40, align 8, !tbaa !9
  %412 = load i32, ptr %10, align 4, !tbaa !5
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds i64, ptr %411, i64 %413
  %415 = load i64, ptr %414, align 8, !tbaa !21
  %416 = trunc i64 %415 to i32
  %417 = load ptr, ptr %39, align 8, !tbaa !9
  %418 = load i32, ptr %10, align 4, !tbaa !5
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %417, i64 %419
  store i32 %416, ptr %420, align 4, !tbaa !5
  br label %421

421:                                              ; preds = %401
  %422 = load i32, ptr %10, align 4, !tbaa !5
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %10, align 4, !tbaa !5
  br label %397, !llvm.loop !23

424:                                              ; preds = %397
  %425 = call i32 @libxsmm_meqn_create()
  store i32 %425, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %426 = load i32, ptr %8, align 4, !tbaa !5
  %427 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %426, i32 noundef 0)
  store i64 %427, ptr %58, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %58, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %428 = load i32, ptr %8, align 4, !tbaa !5
  %429 = call i64 @libxsmm_create_meqn_op_metadata(i32 noundef %428, i32 noundef -1)
  store i64 %429, ptr %59, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %35, ptr align 4 %59, i64 8, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #8
  %430 = load i32, ptr %47, align 4, !tbaa !5
  %431 = load i32, ptr %48, align 4, !tbaa !5
  %432 = load i32, ptr %50, align 4, !tbaa !5
  %433 = load i32, ptr %54, align 4, !tbaa !5
  %434 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %430, i32 noundef %431, i32 noundef %432, i32 noundef %433)
  %435 = getelementptr inbounds { i64, i64 }, ptr %60, i32 0, i32 0
  %436 = extractvalue { i64, i64 } %434, 0
  store i64 %436, ptr %435, align 4
  %437 = getelementptr inbounds { i64, i64 }, ptr %60, i32 0, i32 1
  %438 = extractvalue { i64, i64 } %434, 1
  store i64 %438, ptr %437, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %60, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #8
  %439 = load i32, ptr %47, align 4, !tbaa !5
  %440 = load i32, ptr %50, align 4, !tbaa !5
  %441 = load i32, ptr %55, align 4, !tbaa !5
  %442 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %439, i32 noundef 1, i32 noundef %440, i32 noundef %441)
  %443 = getelementptr inbounds { i64, i64 }, ptr %61, i32 0, i32 0
  %444 = extractvalue { i64, i64 } %442, 0
  store i64 %444, ptr %443, align 4
  %445 = getelementptr inbounds { i64, i64 }, ptr %61, i32 0, i32 1
  %446 = extractvalue { i64, i64 } %442, 1
  store i64 %446, ptr %445, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 4 %61, i64 16, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #8
  %447 = load i32, ptr %53, align 4, !tbaa !5
  %448 = icmp eq i32 %447, 0
  %449 = zext i1 %448 to i64
  %450 = select i1 %448, i32 160, i32 288
  store i32 %450, ptr %57, align 4, !tbaa !5
  %451 = load i32, ptr %54, align 4, !tbaa !5
  %452 = load i64, ptr %35, align 4
  %453 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %452, i32 noundef 18, i32 noundef %451, i32 noundef 16)
  %454 = load i32, ptr %54, align 4, !tbaa !5
  %455 = load i32, ptr %57, align 4, !tbaa !5
  %456 = load i64, ptr %35, align 4
  %457 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %456, i32 noundef 51, i32 noundef %454, i32 noundef %455)
  %458 = load i64, ptr %34, align 4
  %459 = getelementptr inbounds { i64, i64 }, ptr %36, i32 0, i32 0
  %460 = load i64, ptr %459, align 4
  %461 = getelementptr inbounds { i64, i64 }, ptr %36, i32 0, i32 1
  %462 = load i64, ptr %461, align 4
  %463 = getelementptr inbounds { i64, i64 }, ptr %38, i32 0, i32 0
  %464 = load i64, ptr %463, align 4
  %465 = getelementptr inbounds { i64, i64 }, ptr %38, i32 0, i32 1
  %466 = load i64, ptr %465, align 4
  %467 = call i32 @libxsmm_meqn_push_back_arg(i64 %458, i64 %460, i64 %462, i64 %464, i64 %466)
  %468 = load i32, ptr %8, align 4, !tbaa !5
  %469 = getelementptr inbounds { i64, i64 }, ptr %37, i32 0, i32 0
  %470 = load i64, ptr %469, align 4
  %471 = getelementptr inbounds { i64, i64 }, ptr %37, i32 0, i32 1
  %472 = load i64, ptr %471, align 4
  %473 = call ptr @libxsmm_dispatch_meqn(i32 noundef %468, i64 %470, i64 %472)
  store ptr %473, ptr %9, align 8, !tbaa !9
  %474 = load ptr, ptr %9, align 8, !tbaa !9
  %475 = call i32 @libxsmm_get_kernel_info(ptr noundef %474, ptr noundef @info)
  %476 = load i32, ptr getelementptr inbounds (%struct.libxsmm_kernel_info, ptr @info, i32 0, i32 3), align 8, !tbaa !26
  store i32 %476, ptr @is_reference_kernel, align 4, !tbaa !5
  %477 = load ptr, ptr %9, align 8, !tbaa !9
  %478 = icmp eq ptr %477, null
  br i1 %478, label %479, label %482

479:                                              ; preds = %424
  %480 = load ptr, ptr @stderr, align 8, !tbaa !9
  %481 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %480, ptr noundef @.str) #8
  call void @exit(i32 noundef -1) #10
  unreachable

482:                                              ; preds = %424
  %483 = load i32, ptr %52, align 4, !tbaa !5
  %484 = icmp eq i32 %483, 0
  br i1 %484, label %485, label %500

485:                                              ; preds = %482
  %486 = load ptr, ptr %42, align 8, !tbaa !9
  %487 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %29, i64 0, i64 0
  %488 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %487, i32 0, i32 0
  store ptr %486, ptr %488, align 16, !tbaa !29
  %489 = load i32, ptr %53, align 4, !tbaa !5
  %490 = icmp eq i32 %489, 0
  br i1 %490, label %491, label %495

491:                                              ; preds = %485
  %492 = load ptr, ptr %39, align 8, !tbaa !9
  %493 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %29, i64 0, i64 0
  %494 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %493, i32 0, i32 1
  store ptr %492, ptr %494, align 8, !tbaa !31
  br label %499

495:                                              ; preds = %485
  %496 = load ptr, ptr %40, align 8, !tbaa !9
  %497 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %29, i64 0, i64 0
  %498 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %497, i32 0, i32 1
  store ptr %496, ptr %498, align 8, !tbaa !31
  br label %499

499:                                              ; preds = %495, %491
  br label %576

500:                                              ; preds = %482
  %501 = load i32, ptr %52, align 4, !tbaa !5
  %502 = icmp eq i32 %501, 1
  br i1 %502, label %503, label %518

503:                                              ; preds = %500
  %504 = load ptr, ptr %43, align 8, !tbaa !9
  %505 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %30, i64 0, i64 0
  %506 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %505, i32 0, i32 0
  store ptr %504, ptr %506, align 16, !tbaa !29
  %507 = load i32, ptr %53, align 4, !tbaa !5
  %508 = icmp eq i32 %507, 0
  br i1 %508, label %509, label %513

509:                                              ; preds = %503
  %510 = load ptr, ptr %39, align 8, !tbaa !9
  %511 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %30, i64 0, i64 0
  %512 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %511, i32 0, i32 1
  store ptr %510, ptr %512, align 8, !tbaa !31
  br label %517

513:                                              ; preds = %503
  %514 = load ptr, ptr %40, align 8, !tbaa !9
  %515 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %30, i64 0, i64 0
  %516 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %515, i32 0, i32 1
  store ptr %514, ptr %516, align 8, !tbaa !31
  br label %517

517:                                              ; preds = %513, %509
  br label %575

518:                                              ; preds = %500
  %519 = load i32, ptr %52, align 4, !tbaa !5
  %520 = icmp eq i32 %519, 4
  br i1 %520, label %521, label %536

521:                                              ; preds = %518
  %522 = load ptr, ptr %45, align 8, !tbaa !9
  %523 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %32, i64 0, i64 0
  %524 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %523, i32 0, i32 0
  store ptr %522, ptr %524, align 16, !tbaa !29
  %525 = load i32, ptr %53, align 4, !tbaa !5
  %526 = icmp eq i32 %525, 0
  br i1 %526, label %527, label %531

527:                                              ; preds = %521
  %528 = load ptr, ptr %39, align 8, !tbaa !9
  %529 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %32, i64 0, i64 0
  %530 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %529, i32 0, i32 1
  store ptr %528, ptr %530, align 8, !tbaa !31
  br label %535

531:                                              ; preds = %521
  %532 = load ptr, ptr %40, align 8, !tbaa !9
  %533 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %32, i64 0, i64 0
  %534 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %533, i32 0, i32 1
  store ptr %532, ptr %534, align 8, !tbaa !31
  br label %535

535:                                              ; preds = %531, %527
  br label %574

536:                                              ; preds = %518
  %537 = load i32, ptr %52, align 4, !tbaa !5
  %538 = icmp eq i32 %537, 7
  br i1 %538, label %539, label %554

539:                                              ; preds = %536
  %540 = load ptr, ptr %44, align 8, !tbaa !9
  %541 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %31, i64 0, i64 0
  %542 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %541, i32 0, i32 0
  store ptr %540, ptr %542, align 16, !tbaa !29
  %543 = load i32, ptr %53, align 4, !tbaa !5
  %544 = icmp eq i32 %543, 0
  br i1 %544, label %545, label %549

545:                                              ; preds = %539
  %546 = load ptr, ptr %39, align 8, !tbaa !9
  %547 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %31, i64 0, i64 0
  %548 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %547, i32 0, i32 1
  store ptr %546, ptr %548, align 8, !tbaa !31
  br label %553

549:                                              ; preds = %539
  %550 = load ptr, ptr %40, align 8, !tbaa !9
  %551 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %31, i64 0, i64 0
  %552 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %551, i32 0, i32 1
  store ptr %550, ptr %552, align 8, !tbaa !31
  br label %553

553:                                              ; preds = %549, %545
  br label %573

554:                                              ; preds = %536
  %555 = load i32, ptr %52, align 4, !tbaa !5
  %556 = icmp eq i32 %555, 10
  br i1 %556, label %557, label %572

557:                                              ; preds = %554
  %558 = load ptr, ptr %46, align 8, !tbaa !9
  %559 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %33, i64 0, i64 0
  %560 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %559, i32 0, i32 0
  store ptr %558, ptr %560, align 16, !tbaa !29
  %561 = load i32, ptr %53, align 4, !tbaa !5
  %562 = icmp eq i32 %561, 0
  br i1 %562, label %563, label %567

563:                                              ; preds = %557
  %564 = load ptr, ptr %39, align 8, !tbaa !9
  %565 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %33, i64 0, i64 0
  %566 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %565, i32 0, i32 1
  store ptr %564, ptr %566, align 8, !tbaa !31
  br label %571

567:                                              ; preds = %557
  %568 = load ptr, ptr %40, align 8, !tbaa !9
  %569 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %33, i64 0, i64 0
  %570 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %569, i32 0, i32 1
  store ptr %568, ptr %570, align 8, !tbaa !31
  br label %571

571:                                              ; preds = %567, %563
  br label %572

572:                                              ; preds = %571, %554
  br label %573

573:                                              ; preds = %572, %553
  br label %574

574:                                              ; preds = %573, %535
  br label %575

575:                                              ; preds = %574, %517
  br label %576

576:                                              ; preds = %575, %499
  %577 = load i32, ptr %54, align 4, !tbaa !5
  %578 = icmp eq i32 %577, 1
  br i1 %578, label %579, label %582

579:                                              ; preds = %576
  %580 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %29, i64 0, i64 0
  %581 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %580, ptr %581, align 8, !tbaa !32
  br label %610

582:                                              ; preds = %576
  %583 = load i32, ptr %54, align 4, !tbaa !5
  %584 = icmp eq i32 %583, 2
  br i1 %584, label %585, label %588

585:                                              ; preds = %582
  %586 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %30, i64 0, i64 0
  %587 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %586, ptr %587, align 8, !tbaa !32
  br label %609

588:                                              ; preds = %582
  %589 = load i32, ptr %54, align 4, !tbaa !5
  %590 = icmp eq i32 %589, 3
  br i1 %590, label %591, label %594

591:                                              ; preds = %588
  %592 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %31, i64 0, i64 0
  %593 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %592, ptr %593, align 8, !tbaa !32
  br label %608

594:                                              ; preds = %588
  %595 = load i32, ptr %54, align 4, !tbaa !5
  %596 = icmp eq i32 %595, 4
  br i1 %596, label %597, label %600

597:                                              ; preds = %594
  %598 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %32, i64 0, i64 0
  %599 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %598, ptr %599, align 8, !tbaa !32
  br label %607

600:                                              ; preds = %594
  %601 = load i32, ptr %54, align 4, !tbaa !5
  %602 = icmp eq i32 %601, 5
  br i1 %602, label %603, label %606

603:                                              ; preds = %600
  %604 = getelementptr inbounds [1 x %struct.libxsmm_matrix_arg], ptr %33, i64 0, i64 0
  %605 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %604, ptr %605, align 8, !tbaa !32
  br label %606

606:                                              ; preds = %603, %600
  br label %607

607:                                              ; preds = %606, %597
  br label %608

608:                                              ; preds = %607, %591
  br label %609

609:                                              ; preds = %608, %585
  br label %610

610:                                              ; preds = %609, %579
  %611 = load i32, ptr %55, align 4, !tbaa !5
  %612 = icmp eq i32 %611, 1
  br i1 %612, label %613, label %617

613:                                              ; preds = %610
  %614 = load ptr, ptr %20, align 8, !tbaa !9
  %615 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %616 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %615, i32 0, i32 0
  store ptr %614, ptr %616, align 8, !tbaa !34
  br label %649

617:                                              ; preds = %610
  %618 = load i32, ptr %55, align 4, !tbaa !5
  %619 = icmp eq i32 %618, 2
  br i1 %619, label %620, label %624

620:                                              ; preds = %617
  %621 = load ptr, ptr %22, align 8, !tbaa !9
  %622 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %623 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %622, i32 0, i32 0
  store ptr %621, ptr %623, align 8, !tbaa !34
  br label %648

624:                                              ; preds = %617
  %625 = load i32, ptr %55, align 4, !tbaa !5
  %626 = icmp eq i32 %625, 3
  br i1 %626, label %627, label %631

627:                                              ; preds = %624
  %628 = load ptr, ptr %24, align 8, !tbaa !9
  %629 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %630 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %629, i32 0, i32 0
  store ptr %628, ptr %630, align 8, !tbaa !34
  br label %647

631:                                              ; preds = %624
  %632 = load i32, ptr %55, align 4, !tbaa !5
  %633 = icmp eq i32 %632, 4
  br i1 %633, label %634, label %638

634:                                              ; preds = %631
  %635 = load ptr, ptr %26, align 8, !tbaa !9
  %636 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %637 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %636, i32 0, i32 0
  store ptr %635, ptr %637, align 8, !tbaa !34
  br label %646

638:                                              ; preds = %631
  %639 = load i32, ptr %55, align 4, !tbaa !5
  %640 = icmp eq i32 %639, 5
  br i1 %640, label %641, label %645

641:                                              ; preds = %638
  %642 = load ptr, ptr %28, align 8, !tbaa !9
  %643 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %644 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %643, i32 0, i32 0
  store ptr %642, ptr %644, align 8, !tbaa !34
  br label %645

645:                                              ; preds = %641, %638
  br label %646

646:                                              ; preds = %645, %634
  br label %647

647:                                              ; preds = %646, %627
  br label %648

648:                                              ; preds = %647, %620
  br label %649

649:                                              ; preds = %648, %613
  %650 = load ptr, ptr %9, align 8, !tbaa !9
  call void %650(ptr noundef %13)
  %651 = load i32, ptr %47, align 4, !tbaa !5
  %652 = load i32, ptr %48, align 4, !tbaa !5
  %653 = load i32, ptr %50, align 4, !tbaa !5
  %654 = load ptr, ptr %42, align 8, !tbaa !9
  %655 = load ptr, ptr %39, align 8, !tbaa !9
  %656 = load ptr, ptr %19, align 8, !tbaa !9
  call void @eqn1_f32f32(i32 noundef %651, i32 noundef %652, i32 noundef %653, ptr noundef %654, ptr noundef %655, ptr noundef %656)
  %657 = load i32, ptr %52, align 4, !tbaa !5
  %658 = icmp eq i32 %657, 1
  br i1 %658, label %659, label %679

659:                                              ; preds = %649
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %660

660:                                              ; preds = %675, %659
  %661 = load i32, ptr %10, align 4, !tbaa !5
  %662 = load i32, ptr %47, align 4, !tbaa !5
  %663 = icmp slt i32 %661, %662
  br i1 %663, label %664, label %678

664:                                              ; preds = %660
  call void @llvm.lifetime.start.p0(i64 2, ptr %62) #8
  %665 = load ptr, ptr %19, align 8, !tbaa !9
  %666 = load i32, ptr %10, align 4, !tbaa !5
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds float, ptr %665, i64 %667
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %668, ptr noundef %62, i64 noundef 1)
  %669 = load i16, ptr %62, align 2, !tbaa !15
  %670 = call float @upconvert_bf16(i16 noundef zeroext %669)
  %671 = load ptr, ptr %19, align 8, !tbaa !9
  %672 = load i32, ptr %10, align 4, !tbaa !5
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds float, ptr %671, i64 %673
  store float %670, ptr %674, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %62) #8
  br label %675

675:                                              ; preds = %664
  %676 = load i32, ptr %10, align 4, !tbaa !5
  %677 = add nsw i32 %676, 1
  store i32 %677, ptr %10, align 4, !tbaa !5
  br label %660, !llvm.loop !35

678:                                              ; preds = %660
  br label %751

679:                                              ; preds = %649
  %680 = load i32, ptr %52, align 4, !tbaa !5
  %681 = icmp eq i32 %680, 4
  br i1 %681, label %682, label %702

682:                                              ; preds = %679
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %683

683:                                              ; preds = %698, %682
  %684 = load i32, ptr %10, align 4, !tbaa !5
  %685 = load i32, ptr %47, align 4, !tbaa !5
  %686 = icmp slt i32 %684, %685
  br i1 %686, label %687, label %701

687:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 1, ptr %63) #8
  %688 = load ptr, ptr %19, align 8, !tbaa !9
  %689 = load i32, ptr %10, align 4, !tbaa !5
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds float, ptr %688, i64 %690
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %691, ptr noundef %63, i64 noundef 1)
  %692 = load i8, ptr %63, align 1, !tbaa !17
  %693 = call float @upconvert_bf8(i8 noundef zeroext %692)
  %694 = load ptr, ptr %19, align 8, !tbaa !9
  %695 = load i32, ptr %10, align 4, !tbaa !5
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds float, ptr %694, i64 %696
  store float %693, ptr %697, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #8
  br label %698

698:                                              ; preds = %687
  %699 = load i32, ptr %10, align 4, !tbaa !5
  %700 = add nsw i32 %699, 1
  store i32 %700, ptr %10, align 4, !tbaa !5
  br label %683, !llvm.loop !36

701:                                              ; preds = %683
  br label %750

702:                                              ; preds = %679
  %703 = load i32, ptr %52, align 4, !tbaa !5
  %704 = icmp eq i32 %703, 7
  br i1 %704, label %705, label %725

705:                                              ; preds = %702
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %706

706:                                              ; preds = %721, %705
  %707 = load i32, ptr %10, align 4, !tbaa !5
  %708 = load i32, ptr %47, align 4, !tbaa !5
  %709 = icmp slt i32 %707, %708
  br i1 %709, label %710, label %724

710:                                              ; preds = %706
  call void @llvm.lifetime.start.p0(i64 2, ptr %64) #8
  %711 = load ptr, ptr %19, align 8, !tbaa !9
  %712 = load i32, ptr %10, align 4, !tbaa !5
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds float, ptr %711, i64 %713
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %714, ptr noundef %64, i64 noundef 1)
  %715 = load i16, ptr %64, align 2, !tbaa !15
  %716 = call float @upconvert_f16(i16 noundef zeroext %715)
  %717 = load ptr, ptr %19, align 8, !tbaa !9
  %718 = load i32, ptr %10, align 4, !tbaa !5
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds float, ptr %717, i64 %719
  store float %716, ptr %720, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %64) #8
  br label %721

721:                                              ; preds = %710
  %722 = load i32, ptr %10, align 4, !tbaa !5
  %723 = add nsw i32 %722, 1
  store i32 %723, ptr %10, align 4, !tbaa !5
  br label %706, !llvm.loop !37

724:                                              ; preds = %706
  br label %749

725:                                              ; preds = %702
  %726 = load i32, ptr %52, align 4, !tbaa !5
  %727 = icmp eq i32 %726, 10
  br i1 %727, label %728, label %748

728:                                              ; preds = %725
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %729

729:                                              ; preds = %744, %728
  %730 = load i32, ptr %10, align 4, !tbaa !5
  %731 = load i32, ptr %47, align 4, !tbaa !5
  %732 = icmp slt i32 %730, %731
  br i1 %732, label %733, label %747

733:                                              ; preds = %729
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #8
  %734 = load ptr, ptr %19, align 8, !tbaa !9
  %735 = load i32, ptr %10, align 4, !tbaa !5
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds float, ptr %734, i64 %736
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %737, ptr noundef %65, i64 noundef 1)
  %738 = load i8, ptr %65, align 1, !tbaa !17
  %739 = call float @upconvert_hf8(i8 noundef zeroext %738)
  %740 = load ptr, ptr %19, align 8, !tbaa !9
  %741 = load i32, ptr %10, align 4, !tbaa !5
  %742 = sext i32 %741 to i64
  %743 = getelementptr inbounds float, ptr %740, i64 %742
  store float %739, ptr %743, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #8
  br label %744

744:                                              ; preds = %733
  %745 = load i32, ptr %10, align 4, !tbaa !5
  %746 = add nsw i32 %745, 1
  store i32 %746, ptr %10, align 4, !tbaa !5
  br label %729, !llvm.loop !38

747:                                              ; preds = %729
  br label %748

748:                                              ; preds = %747, %725
  br label %749

749:                                              ; preds = %748, %724
  br label %750

750:                                              ; preds = %749, %701
  br label %751

751:                                              ; preds = %750, %678
  %752 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  %753 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %754 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %755 = load i32, ptr %52, align 4, !tbaa !5
  %756 = icmp eq i32 %755, 1
  br i1 %756, label %757, label %777

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

758:                                              ; preds = %773, %757
  %759 = load i32, ptr %10, align 4, !tbaa !5
  %760 = load i32, ptr %47, align 4, !tbaa !5
  %761 = icmp slt i32 %759, %760
  br i1 %761, label %762, label %776

762:                                              ; preds = %758
  %763 = load ptr, ptr %22, align 8, !tbaa !9
  %764 = load i32, ptr %10, align 4, !tbaa !5
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds i16, ptr %763, i64 %765
  %767 = load i16, ptr %766, align 2, !tbaa !15
  %768 = call float @upconvert_bf16(i16 noundef zeroext %767)
  %769 = load ptr, ptr %20, align 8, !tbaa !9
  %770 = load i32, ptr %10, align 4, !tbaa !5
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds float, ptr %769, i64 %771
  store float %768, ptr %772, align 4, !tbaa !13
  br label %773

773:                                              ; preds = %762
  %774 = load i32, ptr %10, align 4, !tbaa !5
  %775 = add nsw i32 %774, 1
  store i32 %775, ptr %10, align 4, !tbaa !5
  br label %758, !llvm.loop !39

776:                                              ; preds = %758
  br label %849

777:                                              ; preds = %751
  %778 = load i32, ptr %52, align 4, !tbaa !5
  %779 = icmp eq i32 %778, 4
  br i1 %779, label %780, label %800

780:                                              ; preds = %777
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %781

781:                                              ; preds = %796, %780
  %782 = load i32, ptr %10, align 4, !tbaa !5
  %783 = load i32, ptr %47, align 4, !tbaa !5
  %784 = icmp slt i32 %782, %783
  br i1 %784, label %785, label %799

785:                                              ; preds = %781
  %786 = load ptr, ptr %26, align 8, !tbaa !9
  %787 = load i32, ptr %10, align 4, !tbaa !5
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds i8, ptr %786, i64 %788
  %790 = load i8, ptr %789, align 1, !tbaa !17
  %791 = call float @upconvert_bf8(i8 noundef zeroext %790)
  %792 = load ptr, ptr %20, align 8, !tbaa !9
  %793 = load i32, ptr %10, align 4, !tbaa !5
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds float, ptr %792, i64 %794
  store float %791, ptr %795, align 4, !tbaa !13
  br label %796

796:                                              ; preds = %785
  %797 = load i32, ptr %10, align 4, !tbaa !5
  %798 = add nsw i32 %797, 1
  store i32 %798, ptr %10, align 4, !tbaa !5
  br label %781, !llvm.loop !40

799:                                              ; preds = %781
  br label %848

800:                                              ; preds = %777
  %801 = load i32, ptr %52, align 4, !tbaa !5
  %802 = icmp eq i32 %801, 7
  br i1 %802, label %803, label %823

803:                                              ; preds = %800
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %804

804:                                              ; preds = %819, %803
  %805 = load i32, ptr %10, align 4, !tbaa !5
  %806 = load i32, ptr %47, align 4, !tbaa !5
  %807 = icmp slt i32 %805, %806
  br i1 %807, label %808, label %822

808:                                              ; preds = %804
  %809 = load ptr, ptr %24, align 8, !tbaa !9
  %810 = load i32, ptr %10, align 4, !tbaa !5
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds i16, ptr %809, i64 %811
  %813 = load i16, ptr %812, align 2, !tbaa !15
  %814 = call float @upconvert_f16(i16 noundef zeroext %813)
  %815 = load ptr, ptr %20, align 8, !tbaa !9
  %816 = load i32, ptr %10, align 4, !tbaa !5
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds float, ptr %815, i64 %817
  store float %814, ptr %818, align 4, !tbaa !13
  br label %819

819:                                              ; preds = %808
  %820 = load i32, ptr %10, align 4, !tbaa !5
  %821 = add nsw i32 %820, 1
  store i32 %821, ptr %10, align 4, !tbaa !5
  br label %804, !llvm.loop !41

822:                                              ; preds = %804
  br label %847

823:                                              ; preds = %800
  %824 = load i32, ptr %52, align 4, !tbaa !5
  %825 = icmp eq i32 %824, 10
  br i1 %825, label %826, label %846

826:                                              ; preds = %823
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %827

827:                                              ; preds = %842, %826
  %828 = load i32, ptr %10, align 4, !tbaa !5
  %829 = load i32, ptr %47, align 4, !tbaa !5
  %830 = icmp slt i32 %828, %829
  br i1 %830, label %831, label %845

831:                                              ; preds = %827
  %832 = load ptr, ptr %28, align 8, !tbaa !9
  %833 = load i32, ptr %10, align 4, !tbaa !5
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds i8, ptr %832, i64 %834
  %836 = load i8, ptr %835, align 1, !tbaa !17
  %837 = call float @upconvert_hf8(i8 noundef zeroext %836)
  %838 = load ptr, ptr %20, align 8, !tbaa !9
  %839 = load i32, ptr %10, align 4, !tbaa !5
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds float, ptr %838, i64 %840
  store float %837, ptr %841, align 4, !tbaa !13
  br label %842

842:                                              ; preds = %831
  %843 = load i32, ptr %10, align 4, !tbaa !5
  %844 = add nsw i32 %843, 1
  store i32 %844, ptr %10, align 4, !tbaa !5
  br label %827, !llvm.loop !42

845:                                              ; preds = %827
  br label %846

846:                                              ; preds = %845, %823
  br label %847

847:                                              ; preds = %846, %822
  br label %848

848:                                              ; preds = %847, %799
  br label %849

849:                                              ; preds = %848, %776
  %850 = load i32, ptr %47, align 4, !tbaa !5
  %851 = load ptr, ptr %19, align 8, !tbaa !9
  %852 = load ptr, ptr %20, align 8, !tbaa !9
  %853 = call i32 @libxsmm_matdiff(ptr noundef %18, i32 noundef 1, i32 noundef %850, i32 noundef 1, ptr noundef %851, ptr noundef %852, ptr noundef null, ptr noundef null)
  %854 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 10
  %855 = load double, ptr %854, align 8, !tbaa !43
  %856 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %855)
  %857 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 15
  %858 = load double, ptr %857, align 8, !tbaa !45
  %859 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %858)
  %860 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 7
  %861 = load double, ptr %860, align 8, !tbaa !46
  %862 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %861)
  %863 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 8
  %864 = load double, ptr %863, align 8, !tbaa !47
  %865 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %864)
  %866 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 5
  %867 = load double, ptr %866, align 8, !tbaa !48
  %868 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %867)
  %869 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 6
  %870 = load double, ptr %869, align 8, !tbaa !49
  %871 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %870)
  %872 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 4
  %873 = load double, ptr %872, align 8, !tbaa !50
  %874 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %873)
  %875 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %18, i32 0, i32 4
  %876 = load double, ptr %875, align 8, !tbaa !50
  %877 = load double, ptr %7, align 8, !tbaa !11
  %878 = fcmp ogt double %876, %877
  br i1 %878, label %879, label %880

879:                                              ; preds = %849
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %880

880:                                              ; preds = %879, %849
  %881 = load i32, ptr %51, align 4, !tbaa !5
  %882 = icmp sgt i32 %881, 0
  br i1 %882, label %883, label %938

883:                                              ; preds = %880
  %884 = load i32, ptr %47, align 4, !tbaa !5
  %885 = load i32, ptr %48, align 4, !tbaa !5
  %886 = load i32, ptr %50, align 4, !tbaa !5
  %887 = load ptr, ptr %42, align 8, !tbaa !9
  %888 = load ptr, ptr %39, align 8, !tbaa !9
  %889 = load ptr, ptr %19, align 8, !tbaa !9
  call void @eqn1_f32f32(i32 noundef %884, i32 noundef %885, i32 noundef %886, ptr noundef %887, ptr noundef %888, ptr noundef %889)
  %890 = call i64 @libxsmm_timer_tick()
  store i64 %890, ptr %14, align 8, !tbaa !21
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %891

891:                                              ; preds = %902, %883
  %892 = load i32, ptr %12, align 4, !tbaa !5
  %893 = load i32, ptr %51, align 4, !tbaa !5
  %894 = icmp slt i32 %892, %893
  br i1 %894, label %895, label %905

895:                                              ; preds = %891
  %896 = load i32, ptr %47, align 4, !tbaa !5
  %897 = load i32, ptr %48, align 4, !tbaa !5
  %898 = load i32, ptr %50, align 4, !tbaa !5
  %899 = load ptr, ptr %42, align 8, !tbaa !9
  %900 = load ptr, ptr %39, align 8, !tbaa !9
  %901 = load ptr, ptr %19, align 8, !tbaa !9
  call void @eqn1_f32f32(i32 noundef %896, i32 noundef %897, i32 noundef %898, ptr noundef %899, ptr noundef %900, ptr noundef %901)
  br label %902

902:                                              ; preds = %895
  %903 = load i32, ptr %12, align 4, !tbaa !5
  %904 = add nsw i32 %903, 1
  store i32 %904, ptr %12, align 4, !tbaa !5
  br label %891, !llvm.loop !51

905:                                              ; preds = %891
  %906 = call i64 @libxsmm_timer_tick()
  store i64 %906, ptr %15, align 8, !tbaa !21
  %907 = load i64, ptr %14, align 8, !tbaa !21
  %908 = load i64, ptr %15, align 8, !tbaa !21
  %909 = call double @libxsmm_timer_duration(i64 noundef %907, i64 noundef %908)
  store double %909, ptr %16, align 8, !tbaa !11
  %910 = load double, ptr %16, align 8, !tbaa !11
  %911 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %910)
  %912 = load ptr, ptr %9, align 8, !tbaa !9
  call void %912(ptr noundef %13)
  %913 = call i64 @libxsmm_timer_tick()
  store i64 %913, ptr %14, align 8, !tbaa !21
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %914

914:                                              ; preds = %920, %905
  %915 = load i32, ptr %12, align 4, !tbaa !5
  %916 = load i32, ptr %51, align 4, !tbaa !5
  %917 = icmp slt i32 %915, %916
  br i1 %917, label %918, label %923

918:                                              ; preds = %914
  %919 = load ptr, ptr %9, align 8, !tbaa !9
  call void %919(ptr noundef %13)
  br label %920

920:                                              ; preds = %918
  %921 = load i32, ptr %12, align 4, !tbaa !5
  %922 = add nsw i32 %921, 1
  store i32 %922, ptr %12, align 4, !tbaa !5
  br label %914, !llvm.loop !52

923:                                              ; preds = %914
  %924 = call i64 @libxsmm_timer_tick()
  store i64 %924, ptr %15, align 8, !tbaa !21
  %925 = load i64, ptr %14, align 8, !tbaa !21
  %926 = load i64, ptr %15, align 8, !tbaa !21
  %927 = call double @libxsmm_timer_duration(i64 noundef %925, i64 noundef %926)
  store double %927, ptr %17, align 8, !tbaa !11
  %928 = load double, ptr %17, align 8, !tbaa !11
  %929 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %928)
  %930 = load double, ptr %17, align 8, !tbaa !11
  %931 = fcmp olt double 0.000000e+00, %930
  br i1 %931, label %932, label %937

932:                                              ; preds = %923
  %933 = load double, ptr %16, align 8, !tbaa !11
  %934 = load double, ptr %17, align 8, !tbaa !11
  %935 = fdiv double %933, %934
  %936 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %935)
  br label %937

937:                                              ; preds = %932, %923
  br label %938

938:                                              ; preds = %937, %880
  %939 = load ptr, ptr %19, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %939)
  %940 = load ptr, ptr %20, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %940)
  %941 = load ptr, ptr %39, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %941)
  %942 = load ptr, ptr %40, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %942)
  %943 = load ptr, ptr %41, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %943)
  %944 = load ptr, ptr %42, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %944)
  %945 = load ptr, ptr %43, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %945)
  %946 = load ptr, ptr %44, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %946)
  %947 = load ptr, ptr %45, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %947)
  %948 = load ptr, ptr %46, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %948)
  %949 = load ptr, ptr %21, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %949)
  %950 = load ptr, ptr %22, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %950)
  %951 = load ptr, ptr %23, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %951)
  %952 = load ptr, ptr %24, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %952)
  %953 = load ptr, ptr %25, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %953)
  %954 = load ptr, ptr %26, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %954)
  %955 = load ptr, ptr %27, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %955)
  %956 = load ptr, ptr %28, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %956)
  %957 = load i32, ptr %6, align 4, !tbaa !5
  %958 = icmp eq i32 %957, 0
  br i1 %958, label %959, label %962

959:                                              ; preds = %938
  %960 = load i32, ptr @is_reference_kernel, align 4, !tbaa !5
  %961 = call i32 @libxsmm_return_success_code(i32 noundef %960)
  br label %964

962:                                              ; preds = %938
  %963 = load i32, ptr %6, align 4, !tbaa !5
  br label %964

964:                                              ; preds = %962, %959
  %965 = phi i32 [ %961, %959 ], [ %963, %962 ]
  store i32 %965, ptr %6, align 4, !tbaa !5
  %966 = load i32, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 192, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  ret i32 %966
}

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

declare { i64, i64 } @libxsmm_create_matrix_arg_attributes(i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

declare void @libxsmm_init() #2

declare void @libxsmm_matdiff_clear(ptr noundef) #2

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

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

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

declare double @libxsmm_rng_f64() #2

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_bf16(i16 noundef zeroext) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_bf8(i8 noundef zeroext) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_f16(i16 noundef zeroext) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_hf8(i8 noundef zeroext) #4

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

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

declare i32 @libxsmm_meqn_create() #2

declare i64 @libxsmm_create_meqn_arg_metadata(i32 noundef, i32 noundef) #2

; 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) #5

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

declare i64 @libxsmm_create_meqn_op_metadata(i32 noundef, i32 noundef) #2

declare { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

declare i32 @libxsmm_meqn_push_back_unary_op(i64, i32 noundef, i32 noundef, i32 noundef) #2

declare i32 @libxsmm_meqn_push_back_arg(i64, i64, i64, i64, i64) #2

declare ptr @libxsmm_dispatch_meqn(i32 noundef, i64, i64) #2

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

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

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

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

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

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

declare i64 @libxsmm_timer_tick() #2

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

declare void @libxsmm_free(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = !{!22, !22, i64 0}
!22 = !{!"long long", !7, i64 0}
!23 = distinct !{!23, !19}
!24 = !{i64 0, i64 4, !5, i64 4, i64 4, !5}
!25 = !{i64 0, i64 4, !5, i64 4, i64 4, !5, i64 8, i64 4, !5, i64 12, i64 4, !5}
!26 = !{!27, !6, i64 16}
!27 = !{!"libxsmm_kernel_info", !6, i64 0, !6, i64 4, !28, i64 8, !6, i64 16}
!28 = !{!"long", !7, i64 0}
!29 = !{!30, !10, i64 0}
!30 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!31 = !{!30, !10, i64 8}
!32 = !{!33, !10, i64 8}
!33 = !{!"libxsmm_meqn_param", !10, i64 0, !10, i64 8, !30, i64 16}
!34 = !{!33, !10, i64 16}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = !{!44, !12, i64 80}
!44 = !{!"libxsmm_matdiff_info", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!45 = !{!44, !12, i64 120}
!46 = !{!44, !12, i64 56}
!47 = !{!44, !12, i64 64}
!48 = !{!44, !12, i64 40}
!49 = !{!44, !12, i64 48}
!50 = !{!44, !12, i64 32}
!51 = distinct !{!51, !19}
!52 = distinct !{!52, !19}


; 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_kernel_info = type { i32, i32, i64, i32 }
%struct.libxsmm_meqn_param = type { ptr, ptr, %struct.libxsmm_matrix_arg }
%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
@info = external dso_local global %struct.libxsmm_kernel_info, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [19 x i8], align 1

; 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 %struct.libxsmm_meqn_param, align 8
  %4 = alloca %struct.libxsmm_matdiff_info, align 8
  %5 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %6 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %7 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %8 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %9 = alloca [1 x %struct.libxsmm_matrix_arg], align 16
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i16, align 2
  %14 = alloca i8, align 1
  %15 = alloca i16, align 2
  %16 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #9
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %4) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %9) #9
  %17 = tail call { i64, i64 } @libxsmm_create_matrix_arg_attributes(i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #9
  %18 = extractvalue { i64, i64 } %17, 0
  %19 = extractvalue { i64, i64 } %17, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #9
  store i32 1, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #9
  store i32 1, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #9
  store i32 1, ptr %12, align 4, !tbaa !5
  tail call void @libxsmm_init() #9
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %4) #9
  %20 = icmp sgt i32 %0, 1
  br i1 %20, label %21, label %.thread351

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

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

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

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

39:                                               ; preds = %34
  %40 = getelementptr inbounds i8, ptr %1, i64 40
  %41 = load ptr, ptr %40, align 8, !tbaa !9
  %42 = call i32 @atoi(ptr nocapture noundef %41) #10
  %.not363 = icmp eq i32 %0, 6
  br i1 %.not363, label %.thread351, label %43

43:                                               ; preds = %39
  %44 = getelementptr inbounds i8, ptr %1, i64 48
  %45 = load ptr, ptr %44, align 8, !tbaa !9
  %46 = call i32 @atoi(ptr nocapture noundef %45) #10
  br label %.thread351

.thread351:                                       ; preds = %2, %21, %25, %30, %34, %43, %39
  %.0314361 = phi i32 [ %42, %43 ], [ %42, %39 ], [ 0, %34 ], [ 0, %30 ], [ 0, %25 ], [ 0, %21 ], [ 0, %2 ]
  %.0317339346360 = phi i32 [ %33, %43 ], [ %33, %39 ], [ %33, %34 ], [ %33, %30 ], [ 64, %25 ], [ 64, %21 ], [ 64, %2 ]
  %.0319326330338347359 = phi i32 [ %24, %43 ], [ %24, %39 ], [ %24, %34 ], [ %24, %30 ], [ %24, %25 ], [ %24, %21 ], [ 64, %2 ]
  %.0318331337348358 = phi i32 [ %28, %43 ], [ %28, %39 ], [ %28, %34 ], [ %28, %30 ], [ %28, %25 ], [ 64, %21 ], [ 64, %2 ]
  %.0315349357 = phi i32 [ %37, %43 ], [ %37, %39 ], [ %37, %34 ], [ 0, %30 ], [ 0, %25 ], [ 0, %21 ], [ 0, %2 ]
  %.0316 = phi i32 [ %46, %43 ], [ 100, %39 ], [ 100, %34 ], [ 100, %30 ], [ 100, %25 ], [ 100, %21 ], [ 100, %2 ]
  %47 = shl i32 %.0318331337348358, 3
  call void @set_in_out_compute_dt(i32 noundef %.0315349357, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12)
  %48 = sext i32 %.0317339346360 to i64
  %49 = shl nsw i64 %48, 2
  %50 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %49, i64 noundef 64) #9
  %51 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %49, i64 noundef 64) #9
  %52 = sext i32 %.0318331337348358 to i64
  %53 = shl nsw i64 %52, 2
  %54 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %53, i64 noundef 64) #9
  %55 = shl nsw i64 %52, 3
  %56 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %55, i64 noundef 64) #9
  %57 = sext i32 %47 to i64
  %58 = shl nsw i64 %57, 3
  %59 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %58, i64 noundef 64) #9
  %60 = mul i64 %49, %57
  %61 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %60, i64 noundef 64) #9
  %62 = shl nsw i64 %57, 1
  %63 = mul i64 %62, %48
  %64 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %63, i64 noundef 64) #9
  %65 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %63, i64 noundef 64) #9
  %66 = mul nsw i64 %57, %48
  %67 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %66, i64 noundef 64) #9
  %68 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %66, i64 noundef 64) #9
  %69 = shl nsw i64 %48, 1
  %70 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %69, i64 noundef 64) #9
  %71 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %69, i64 noundef 64) #9
  %72 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %69, i64 noundef 64) #9
  %73 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %69, i64 noundef 64) #9
  %74 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %48, i64 noundef 64) #9
  %75 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %48, i64 noundef 64) #9
  %76 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %48, i64 noundef 64) #9
  %77 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %48, i64 noundef 64) #9
  %78 = icmp sgt i32 %.0318331337348358, 0
  %79 = icmp sgt i32 %.0317339346360, 0
  %or.cond = select i1 %78, i1 %79, i1 false
  br i1 %or.cond, label %.preheader378.us.preheader, label %._crit_edge381

.preheader378.us.preheader:                       ; preds = %.thread351
  %80 = zext nneg i32 %.0317339346360 to i64
  %smax = call i32 @llvm.smax.i32(i32 %47, i32 1)
  %wide.trip.count415 = zext nneg i32 %smax to i64
  br label %.preheader378.us

.preheader378.us:                                 ; preds = %.preheader378.us.preheader, %._crit_edge.us
  %indvars.iv412 = phi i64 [ 0, %.preheader378.us.preheader ], [ %indvars.iv.next413, %._crit_edge.us ]
  %81 = mul nuw nsw i64 %indvars.iv412, %80
  br label %82

82:                                               ; preds = %.preheader378.us, %103
  %indvars.iv = phi i64 [ 0, %.preheader378.us ], [ %indvars.iv.next, %103 ]
  %83 = call double @libxsmm_rng_f64() #9
  %84 = fptrunc double %83 to float
  %85 = add nuw nsw i64 %indvars.iv, %81
  %86 = getelementptr inbounds float, ptr %61, i64 %85
  store float %84, ptr %86, align 4, !tbaa !11
  %87 = getelementptr inbounds i16, ptr %64, i64 %85
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %86, ptr noundef %87, i64 noundef 1) #9
  %88 = getelementptr inbounds i16, ptr %65, i64 %85
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %86, ptr noundef %88, i64 noundef 1) #9
  %89 = getelementptr inbounds i8, ptr %67, i64 %85
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %86, ptr noundef %89, i64 noundef 1) #9
  %90 = getelementptr inbounds i8, ptr %68, i64 %85
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %86, ptr noundef %90, i64 noundef 1) #9
  switch i32 %.0315349357, label %103 [
    i32 1, label %100
    i32 4, label %97
    i32 7, label %94
    i32 10, label %91
  ]

91:                                               ; preds = %82
  %92 = load i8, ptr %90, align 1, !tbaa !13
  %93 = call float @upconvert_hf8(i8 noundef zeroext %92)
  br label %.sink.split

94:                                               ; preds = %82
  %95 = load i16, ptr %88, align 2, !tbaa !14
  %96 = call float @upconvert_f16(i16 noundef zeroext %95)
  br label %.sink.split

97:                                               ; preds = %82
  %98 = load i8, ptr %89, align 1, !tbaa !13
  %99 = call float @upconvert_bf8(i8 noundef zeroext %98)
  br label %.sink.split

100:                                              ; preds = %82
  %101 = load i16, ptr %87, align 2, !tbaa !14
  %102 = call float @upconvert_bf16(i16 noundef zeroext %101)
  br label %.sink.split

.sink.split:                                      ; preds = %91, %94, %97, %100
  %.sink = phi float [ %102, %100 ], [ %99, %97 ], [ %96, %94 ], [ %93, %91 ]
  store float %.sink, ptr %86, align 4, !tbaa !11
  br label %103

103:                                              ; preds = %.sink.split, %82
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %80
  br i1 %exitcond.not, label %._crit_edge.us, label %82, !llvm.loop !16

._crit_edge.us:                                   ; preds = %103
  %indvars.iv.next413 = add nuw nsw i64 %indvars.iv412, 1
  %exitcond416.not = icmp eq i64 %indvars.iv.next413, %wide.trip.count415
  br i1 %exitcond416.not, label %._crit_edge381, label %.preheader378.us, !llvm.loop !18

._crit_edge381:                                   ; preds = %._crit_edge.us, %.thread351
  call void @print_dt_info(i32 noundef %.0315349357)
  call void @create_unique_random_array(ptr noundef %59, i32 noundef %47)
  br i1 %78, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %._crit_edge381
  %104 = zext nneg i32 %.0318331337348358 to i64
  %105 = shl nuw nsw i64 %104, 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %56, ptr align 8 %59, i64 %105, i1 false), !tbaa !19
  %min.iters.check = icmp ult i32 %.0318331337348358, 4
  br i1 %min.iters.check, label %.lr.ph.preheader489, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %104, 2147483644
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %106 = getelementptr inbounds i64, ptr %59, i64 %index
  %107 = getelementptr inbounds i8, ptr %106, i64 16
  %wide.load = load <2 x i64>, ptr %106, align 8, !tbaa !19
  %wide.load482 = load <2 x i64>, ptr %107, align 8, !tbaa !19
  %108 = trunc <2 x i64> %wide.load to <2 x i32>
  %109 = trunc <2 x i64> %wide.load482 to <2 x i32>
  %110 = getelementptr inbounds i32, ptr %54, i64 %index
  %111 = getelementptr inbounds i8, ptr %110, i64 8
  store <2 x i32> %108, ptr %110, align 4, !tbaa !5
  store <2 x i32> %109, ptr %111, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 4
  %112 = icmp eq i64 %index.next, %n.vec
  br i1 %112, label %middle.block, label %vector.body, !llvm.loop !21

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %104
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader489

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

.lr.ph:                                           ; preds = %.lr.ph.preheader489, %.lr.ph
  %indvars.iv417 = phi i64 [ %indvars.iv.next418, %.lr.ph ], [ %indvars.iv417.ph, %.lr.ph.preheader489 ]
  %113 = getelementptr inbounds i64, ptr %59, i64 %indvars.iv417
  %114 = load i64, ptr %113, align 8, !tbaa !19
  %115 = trunc i64 %114 to i32
  %116 = getelementptr inbounds i32, ptr %54, i64 %indvars.iv417
  store i32 %115, ptr %116, align 4, !tbaa !5
  %indvars.iv.next418 = add nuw nsw i64 %indvars.iv417, 1
  %exitcond421.not = icmp eq i64 %indvars.iv.next418, %104
  br i1 %exitcond421.not, label %._crit_edge, label %.lr.ph, !llvm.loop !24

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %._crit_edge381
  %117 = call i32 @libxsmm_meqn_create() #9
  %118 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %117, i32 noundef 0) #9
  %119 = call i64 @libxsmm_create_meqn_op_metadata(i32 noundef %117, i32 noundef -1) #9
  %120 = load i32, ptr %10, align 4, !tbaa !5
  %121 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %.0319326330338347359, i32 noundef %.0318331337348358, i32 noundef %.0317339346360, i32 noundef %120) #9
  %122 = extractvalue { i64, i64 } %121, 0
  %123 = extractvalue { i64, i64 } %121, 1
  %124 = load i32, ptr %11, align 4, !tbaa !5
  %125 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %.0319326330338347359, i32 noundef 1, i32 noundef %.0317339346360, i32 noundef %124) #9
  %126 = extractvalue { i64, i64 } %125, 0
  %127 = extractvalue { i64, i64 } %125, 1
  %128 = icmp eq i32 %.0314361, 0
  %129 = select i1 %128, i32 160, i32 288
  %130 = load i32, ptr %10, align 4, !tbaa !5
  %131 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %119, i32 noundef 18, i32 noundef %130, i32 noundef 16) #9
  %132 = load i32, ptr %10, align 4, !tbaa !5
  %133 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %119, i32 noundef 51, i32 noundef %132, i32 noundef %129) #9
  %134 = call i32 @libxsmm_meqn_push_back_arg(i64 %118, i64 %122, i64 %123, i64 %18, i64 %19) #9
  %135 = call ptr @libxsmm_dispatch_meqn(i32 noundef %117, i64 %126, i64 %127) #9
  %136 = call i32 @libxsmm_get_kernel_info(ptr noundef %135, ptr noundef nonnull @info) #9
  %137 = load i32, ptr getelementptr inbounds (i8, ptr @info, i64 16), align 8, !tbaa !25
  store i32 %137, ptr @is_reference_kernel, align 4, !tbaa !5
  %138 = icmp eq ptr %135, null
  br i1 %138, label %139, label %142

139:                                              ; preds = %._crit_edge
  %140 = load ptr, ptr @stderr, align 8, !tbaa !9
  %141 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %140, ptr noundef nonnull @.str) #11
  call void @exit(i32 noundef -1) #12
  unreachable

142:                                              ; preds = %._crit_edge
  switch i32 %.0315349357, label %163 [
    i32 0, label %143
    i32 1, label %147
    i32 4, label %151
    i32 7, label %155
    i32 10, label %159
  ]

143:                                              ; preds = %142
  store ptr %61, ptr %5, align 16, !tbaa !28
  %144 = getelementptr inbounds i8, ptr %5, i64 8
  br i1 %128, label %145, label %146

145:                                              ; preds = %143
  store ptr %54, ptr %144, align 8, !tbaa !30
  br label %163

146:                                              ; preds = %143
  store ptr %56, ptr %144, align 8, !tbaa !30
  br label %163

147:                                              ; preds = %142
  store ptr %64, ptr %6, align 16, !tbaa !28
  %148 = getelementptr inbounds i8, ptr %6, i64 8
  br i1 %128, label %149, label %150

149:                                              ; preds = %147
  store ptr %54, ptr %148, align 8, !tbaa !30
  br label %163

150:                                              ; preds = %147
  store ptr %56, ptr %148, align 8, !tbaa !30
  br label %163

151:                                              ; preds = %142
  store ptr %67, ptr %8, align 16, !tbaa !28
  %152 = getelementptr inbounds i8, ptr %8, i64 8
  br i1 %128, label %153, label %154

153:                                              ; preds = %151
  store ptr %54, ptr %152, align 8, !tbaa !30
  br label %163

154:                                              ; preds = %151
  store ptr %56, ptr %152, align 8, !tbaa !30
  br label %163

155:                                              ; preds = %142
  store ptr %65, ptr %7, align 16, !tbaa !28
  %156 = getelementptr inbounds i8, ptr %7, i64 8
  br i1 %128, label %157, label %158

157:                                              ; preds = %155
  store ptr %54, ptr %156, align 8, !tbaa !30
  br label %163

158:                                              ; preds = %155
  store ptr %56, ptr %156, align 8, !tbaa !30
  br label %163

159:                                              ; preds = %142
  store ptr %68, ptr %9, align 16, !tbaa !28
  %160 = getelementptr inbounds i8, ptr %9, i64 8
  br i1 %128, label %161, label %162

161:                                              ; preds = %159
  store ptr %54, ptr %160, align 8, !tbaa !30
  br label %163

162:                                              ; preds = %159
  store ptr %56, ptr %160, align 8, !tbaa !30
  br label %163

163:                                              ; preds = %142, %150, %149, %158, %157, %161, %162, %153, %154, %145, %146
  %164 = load i32, ptr %10, align 4, !tbaa !5
  switch i32 %164, label %170 [
    i32 1, label %.sink.split470
    i32 2, label %165
    i32 3, label %166
    i32 4, label %167
    i32 5, label %168
  ]

165:                                              ; preds = %163
  br label %.sink.split470

166:                                              ; preds = %163
  br label %.sink.split470

167:                                              ; preds = %163
  br label %.sink.split470

168:                                              ; preds = %163
  br label %.sink.split470

.sink.split470:                                   ; preds = %163, %166, %168, %167, %165
  %.sink471 = phi ptr [ %6, %165 ], [ %8, %167 ], [ %9, %168 ], [ %7, %166 ], [ %5, %163 ]
  %169 = getelementptr inbounds i8, ptr %3, i64 8
  store ptr %.sink471, ptr %169, align 8, !tbaa !31
  br label %170

170:                                              ; preds = %.sink.split470, %163
  %171 = load i32, ptr %11, align 4, !tbaa !5
  switch i32 %171, label %177 [
    i32 1, label %.sink.split473
    i32 2, label %172
    i32 3, label %173
    i32 4, label %174
    i32 5, label %175
  ]

172:                                              ; preds = %170
  br label %.sink.split473

173:                                              ; preds = %170
  br label %.sink.split473

174:                                              ; preds = %170
  br label %.sink.split473

175:                                              ; preds = %170
  br label %.sink.split473

.sink.split473:                                   ; preds = %170, %173, %175, %174, %172
  %.sink474 = phi ptr [ %71, %172 ], [ %75, %174 ], [ %77, %175 ], [ %73, %173 ], [ %51, %170 ]
  %176 = getelementptr inbounds i8, ptr %3, i64 16
  store ptr %.sink474, ptr %176, align 8, !tbaa !33
  br label %177

177:                                              ; preds = %.sink.split473, %170
  call void %135(ptr noundef nonnull %3) #9
  call void @eqn1_f32f32(i32 noundef %.0319326330338347359, i32 noundef %.0318331337348358, i32 noundef %.0317339346360, ptr noundef %61, ptr noundef %54, ptr noundef %50)
  %178 = icmp eq i32 %.0315349357, 1
  br i1 %178, label %.preheader370, label %183

.preheader370:                                    ; preds = %177
  %179 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %179, label %.lr.ph390.preheader, label %.loopexit371

.lr.ph390.preheader:                              ; preds = %.preheader370
  %wide.trip.count440 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph390

.lr.ph390:                                        ; preds = %.lr.ph390.preheader, %.lr.ph390
  %indvars.iv437 = phi i64 [ 0, %.lr.ph390.preheader ], [ %indvars.iv.next438, %.lr.ph390 ]
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #9
  %180 = getelementptr inbounds float, ptr %50, i64 %indvars.iv437
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %180, ptr noundef nonnull %13, i64 noundef 1) #9
  %181 = load i16, ptr %13, align 2, !tbaa !14
  %182 = call float @upconvert_bf16(i16 noundef zeroext %181)
  store float %182, ptr %180, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %13) #9
  %indvars.iv.next438 = add nuw nsw i64 %indvars.iv437, 1
  %exitcond441.not = icmp eq i64 %indvars.iv.next438, %wide.trip.count440
  br i1 %exitcond441.not, label %.loopexit371, label %.lr.ph390, !llvm.loop !34

183:                                              ; preds = %177
  switch i32 %.0315349357, label %.loopexit371 [
    i32 4, label %.preheader372
    i32 7, label %.preheader374
    i32 10, label %.preheader376
  ]

.preheader376:                                    ; preds = %183
  %184 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %184, label %.lr.ph384.preheader, label %.loopexit371

.lr.ph384.preheader:                              ; preds = %.preheader376
  %wide.trip.count425 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph384

.preheader374:                                    ; preds = %183
  %185 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %185, label %.lr.ph386.preheader, label %.loopexit371

.lr.ph386.preheader:                              ; preds = %.preheader374
  %wide.trip.count430 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph386

.preheader372:                                    ; preds = %183
  %186 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %186, label %.lr.ph388.preheader, label %.loopexit371

.lr.ph388.preheader:                              ; preds = %.preheader372
  %wide.trip.count435 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph388

.lr.ph388:                                        ; preds = %.lr.ph388.preheader, %.lr.ph388
  %indvars.iv432 = phi i64 [ 0, %.lr.ph388.preheader ], [ %indvars.iv.next433, %.lr.ph388 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #9
  %187 = getelementptr inbounds float, ptr %50, i64 %indvars.iv432
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %187, ptr noundef nonnull %14, i64 noundef 1) #9
  %188 = load i8, ptr %14, align 1, !tbaa !13
  %189 = call float @upconvert_bf8(i8 noundef zeroext %188)
  store float %189, ptr %187, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #9
  %indvars.iv.next433 = add nuw nsw i64 %indvars.iv432, 1
  %exitcond436.not = icmp eq i64 %indvars.iv.next433, %wide.trip.count435
  br i1 %exitcond436.not, label %.loopexit371, label %.lr.ph388, !llvm.loop !35

.lr.ph386:                                        ; preds = %.lr.ph386.preheader, %.lr.ph386
  %indvars.iv427 = phi i64 [ 0, %.lr.ph386.preheader ], [ %indvars.iv.next428, %.lr.ph386 ]
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %15) #9
  %190 = getelementptr inbounds float, ptr %50, i64 %indvars.iv427
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %190, ptr noundef nonnull %15, i64 noundef 1) #9
  %191 = load i16, ptr %15, align 2, !tbaa !14
  %192 = call float @upconvert_f16(i16 noundef zeroext %191)
  store float %192, ptr %190, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %15) #9
  %indvars.iv.next428 = add nuw nsw i64 %indvars.iv427, 1
  %exitcond431.not = icmp eq i64 %indvars.iv.next428, %wide.trip.count430
  br i1 %exitcond431.not, label %.loopexit371, label %.lr.ph386, !llvm.loop !36

.lr.ph384:                                        ; preds = %.lr.ph384.preheader, %.lr.ph384
  %indvars.iv422 = phi i64 [ 0, %.lr.ph384.preheader ], [ %indvars.iv.next423, %.lr.ph384 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #9
  %193 = getelementptr inbounds float, ptr %50, i64 %indvars.iv422
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %193, ptr noundef nonnull %16, i64 noundef 1) #9
  %194 = load i8, ptr %16, align 1, !tbaa !13
  %195 = call float @upconvert_hf8(i8 noundef zeroext %194)
  store float %195, ptr %193, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #9
  %indvars.iv.next423 = add nuw nsw i64 %indvars.iv422, 1
  %exitcond426.not = icmp eq i64 %indvars.iv.next423, %wide.trip.count425
  br i1 %exitcond426.not, label %.loopexit371, label %.lr.ph384, !llvm.loop !37

.loopexit371:                                     ; preds = %.lr.ph384, %.lr.ph386, %.lr.ph388, %.lr.ph390, %.preheader376, %.preheader374, %.preheader372, %.preheader370, %183
  %196 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  %197 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %198 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  br i1 %178, label %.preheader, label %204

.preheader:                                       ; preds = %.loopexit371
  %199 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %199, label %.lr.ph398.preheader, label %.loopexit

.lr.ph398.preheader:                              ; preds = %.preheader
  %wide.trip.count460 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph398

.lr.ph398:                                        ; preds = %.lr.ph398.preheader, %.lr.ph398
  %indvars.iv457 = phi i64 [ 0, %.lr.ph398.preheader ], [ %indvars.iv.next458, %.lr.ph398 ]
  %200 = getelementptr inbounds i16, ptr %71, i64 %indvars.iv457
  %201 = load i16, ptr %200, align 2, !tbaa !14
  %202 = call float @upconvert_bf16(i16 noundef zeroext %201)
  %203 = getelementptr inbounds float, ptr %51, i64 %indvars.iv457
  store float %202, ptr %203, align 4, !tbaa !11
  %indvars.iv.next458 = add nuw nsw i64 %indvars.iv457, 1
  %exitcond461.not = icmp eq i64 %indvars.iv.next458, %wide.trip.count460
  br i1 %exitcond461.not, label %.loopexit, label %.lr.ph398, !llvm.loop !38

204:                                              ; preds = %.loopexit371
  switch i32 %.0315349357, label %.loopexit [
    i32 4, label %.preheader364
    i32 7, label %.preheader366
    i32 10, label %.preheader368
  ]

.preheader368:                                    ; preds = %204
  %205 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %205, label %.lr.ph392.preheader, label %.loopexit

.lr.ph392.preheader:                              ; preds = %.preheader368
  %wide.trip.count445 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph392

.preheader366:                                    ; preds = %204
  %206 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %206, label %.lr.ph394.preheader, label %.loopexit

.lr.ph394.preheader:                              ; preds = %.preheader366
  %wide.trip.count450 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph394

.preheader364:                                    ; preds = %204
  %207 = icmp sgt i32 %.0319326330338347359, 0
  br i1 %207, label %.lr.ph396.preheader, label %.loopexit

.lr.ph396.preheader:                              ; preds = %.preheader364
  %wide.trip.count455 = zext nneg i32 %.0319326330338347359 to i64
  br label %.lr.ph396

.lr.ph396:                                        ; preds = %.lr.ph396.preheader, %.lr.ph396
  %indvars.iv452 = phi i64 [ 0, %.lr.ph396.preheader ], [ %indvars.iv.next453, %.lr.ph396 ]
  %208 = getelementptr inbounds i8, ptr %75, i64 %indvars.iv452
  %209 = load i8, ptr %208, align 1, !tbaa !13
  %210 = call float @upconvert_bf8(i8 noundef zeroext %209)
  %211 = getelementptr inbounds float, ptr %51, i64 %indvars.iv452
  store float %210, ptr %211, align 4, !tbaa !11
  %indvars.iv.next453 = add nuw nsw i64 %indvars.iv452, 1
  %exitcond456.not = icmp eq i64 %indvars.iv.next453, %wide.trip.count455
  br i1 %exitcond456.not, label %.loopexit, label %.lr.ph396, !llvm.loop !39

.lr.ph394:                                        ; preds = %.lr.ph394.preheader, %.lr.ph394
  %indvars.iv447 = phi i64 [ 0, %.lr.ph394.preheader ], [ %indvars.iv.next448, %.lr.ph394 ]
  %212 = getelementptr inbounds i16, ptr %73, i64 %indvars.iv447
  %213 = load i16, ptr %212, align 2, !tbaa !14
  %214 = call float @upconvert_f16(i16 noundef zeroext %213)
  %215 = getelementptr inbounds float, ptr %51, i64 %indvars.iv447
  store float %214, ptr %215, align 4, !tbaa !11
  %indvars.iv.next448 = add nuw nsw i64 %indvars.iv447, 1
  %exitcond451.not = icmp eq i64 %indvars.iv.next448, %wide.trip.count450
  br i1 %exitcond451.not, label %.loopexit, label %.lr.ph394, !llvm.loop !40

.lr.ph392:                                        ; preds = %.lr.ph392.preheader, %.lr.ph392
  %indvars.iv442 = phi i64 [ 0, %.lr.ph392.preheader ], [ %indvars.iv.next443, %.lr.ph392 ]
  %216 = getelementptr inbounds i8, ptr %77, i64 %indvars.iv442
  %217 = load i8, ptr %216, align 1, !tbaa !13
  %218 = call float @upconvert_hf8(i8 noundef zeroext %217)
  %219 = getelementptr inbounds float, ptr %51, i64 %indvars.iv442
  store float %218, ptr %219, align 4, !tbaa !11
  %indvars.iv.next443 = add nuw nsw i64 %indvars.iv442, 1
  %exitcond446.not = icmp eq i64 %indvars.iv.next443, %wide.trip.count445
  br i1 %exitcond446.not, label %.loopexit, label %.lr.ph392, !llvm.loop !41

.loopexit:                                        ; preds = %.lr.ph392, %.lr.ph394, %.lr.ph396, %.lr.ph398, %.preheader368, %.preheader366, %.preheader364, %.preheader, %204
  %220 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %.0319326330338347359, i32 noundef 1, ptr noundef %50, ptr noundef %51, ptr noundef null, ptr noundef null) #9
  %221 = getelementptr inbounds i8, ptr %4, i64 80
  %222 = load double, ptr %221, align 8, !tbaa !42
  %223 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %222)
  %224 = getelementptr inbounds i8, ptr %4, i64 120
  %225 = load double, ptr %224, align 8, !tbaa !45
  %226 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %225)
  %227 = getelementptr inbounds i8, ptr %4, i64 56
  %228 = load double, ptr %227, align 8, !tbaa !46
  %229 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %228)
  %230 = getelementptr inbounds i8, ptr %4, i64 64
  %231 = load double, ptr %230, align 8, !tbaa !47
  %232 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %231)
  %233 = getelementptr inbounds i8, ptr %4, i64 40
  %234 = load double, ptr %233, align 8, !tbaa !48
  %235 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %234)
  %236 = getelementptr inbounds i8, ptr %4, i64 48
  %237 = load double, ptr %236, align 8, !tbaa !49
  %238 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %237)
  %239 = getelementptr inbounds i8, ptr %4, i64 32
  %240 = load double, ptr %239, align 8, !tbaa !50
  %241 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %240)
  %242 = load double, ptr %239, align 8, !tbaa !50
  %243 = fcmp ule double %242, 1.000000e-04
  %244 = icmp sgt i32 %.0316, 0
  br i1 %244, label %245, label %261

245:                                              ; preds = %.loopexit
  call void @eqn1_f32f32(i32 noundef %.0319326330338347359, i32 noundef %.0318331337348358, i32 noundef %.0317339346360, ptr noundef %61, ptr noundef %54, ptr noundef %50)
  %246 = call i64 @libxsmm_timer_tick() #9
  br label %247

247:                                              ; preds = %245, %247
  %.0312399 = phi i32 [ 0, %245 ], [ %248, %247 ]
  call void @eqn1_f32f32(i32 noundef %.0319326330338347359, i32 noundef %.0318331337348358, i32 noundef %.0317339346360, ptr noundef %61, ptr noundef %54, ptr noundef %50)
  %248 = add nuw nsw i32 %.0312399, 1
  %exitcond462.not = icmp eq i32 %248, %.0316
  br i1 %exitcond462.not, label %.lr.ph402.preheader, label %247, !llvm.loop !51

.lr.ph402.preheader:                              ; preds = %247
  %249 = call i64 @libxsmm_timer_tick() #9
  %250 = call double @libxsmm_timer_duration(i64 noundef %246, i64 noundef %249) #9
  %251 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %250)
  call void %135(ptr noundef nonnull %3) #9
  %252 = call i64 @libxsmm_timer_tick() #9
  br label %.lr.ph402

.lr.ph402:                                        ; preds = %.lr.ph402.preheader, %.lr.ph402
  %.1313400 = phi i32 [ %253, %.lr.ph402 ], [ 0, %.lr.ph402.preheader ]
  call void %135(ptr noundef nonnull %3) #9
  %253 = add nuw nsw i32 %.1313400, 1
  %exitcond463.not = icmp eq i32 %253, %.0316
  br i1 %exitcond463.not, label %._crit_edge403, label %.lr.ph402, !llvm.loop !52

._crit_edge403:                                   ; preds = %.lr.ph402
  %254 = call i64 @libxsmm_timer_tick() #9
  %255 = call double @libxsmm_timer_duration(i64 noundef %252, i64 noundef %254) #9
  %256 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %255)
  %257 = fcmp ogt double %255, 0.000000e+00
  br i1 %257, label %258, label %261

258:                                              ; preds = %._crit_edge403
  %259 = fdiv double %250, %255
  %260 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %259)
  br label %261

261:                                              ; preds = %._crit_edge403, %258, %.loopexit
  call void @libxsmm_free(ptr noundef %50) #9
  call void @libxsmm_free(ptr noundef %51) #9
  call void @libxsmm_free(ptr noundef %54) #9
  call void @libxsmm_free(ptr noundef %56) #9
  call void @libxsmm_free(ptr noundef %59) #9
  call void @libxsmm_free(ptr noundef %61) #9
  call void @libxsmm_free(ptr noundef %64) #9
  call void @libxsmm_free(ptr noundef %65) #9
  call void @libxsmm_free(ptr noundef %67) #9
  call void @libxsmm_free(ptr noundef %68) #9
  call void @libxsmm_free(ptr noundef %70) #9
  call void @libxsmm_free(ptr noundef %71) #9
  call void @libxsmm_free(ptr noundef %72) #9
  call void @libxsmm_free(ptr noundef %73) #9
  call void @libxsmm_free(ptr noundef %74) #9
  call void @libxsmm_free(ptr noundef %75) #9
  call void @libxsmm_free(ptr noundef %76) #9
  call void @libxsmm_free(ptr noundef %77) #9
  br i1 %243, label %262, label %265

262:                                              ; preds = %261
  %263 = load i32, ptr @is_reference_kernel, align 4, !tbaa !5
  %264 = call i32 @libxsmm_return_success_code(i32 noundef %263)
  br label %265

265:                                              ; preds = %261, %262
  %266 = phi i32 [ %264, %262 ], [ 1, %261 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #9
  ret i32 %266
}

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

declare { i64, i64 } @libxsmm_create_matrix_arg_attributes(i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @libxsmm_init() local_unnamed_addr #2

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #2

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

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

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

declare double @libxsmm_rng_f64() local_unnamed_addr #2

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

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

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

declare void @libxsmm_rne_convert_fp32_hf8(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_bf16(i16 noundef zeroext) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_bf8(i8 noundef zeroext) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_f16(i16 noundef zeroext) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @upconvert_hf8(i8 noundef zeroext) local_unnamed_addr #4

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

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

declare i32 @libxsmm_meqn_create() local_unnamed_addr #2

declare i64 @libxsmm_create_meqn_arg_metadata(i32 noundef, i32 noundef) local_unnamed_addr #2

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

declare i64 @libxsmm_create_meqn_op_metadata(i32 noundef, i32 noundef) local_unnamed_addr #2

declare { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @libxsmm_meqn_push_back_unary_op(i64, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @libxsmm_meqn_push_back_arg(i64, i64, i64, i64, i64) local_unnamed_addr #2

declare ptr @libxsmm_dispatch_meqn(i32 noundef, i64, i64) local_unnamed_addr #2

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

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

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

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

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

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

declare i64 @libxsmm_timer_tick() local_unnamed_addr #2

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

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #2

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

; 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) #8

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"short", !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = !{!20, !20, i64 0}
!20 = !{!"long long", !7, i64 0}
!21 = distinct !{!21, !17, !22, !23}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = distinct !{!24, !17, !23, !22}
!25 = !{!26, !6, i64 16}
!26 = !{!"libxsmm_kernel_info", !6, i64 0, !6, i64 4, !27, i64 8, !6, i64 16}
!27 = !{!"long", !7, i64 0}
!28 = !{!29, !10, i64 0}
!29 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!30 = !{!29, !10, i64 8}
!31 = !{!32, !10, i64 8}
!32 = !{!"libxsmm_meqn_param", !10, i64 0, !10, i64 8, !29, i64 16}
!33 = !{!32, !10, i64 16}
!34 = distinct !{!34, !17}
!35 = distinct !{!35, !17}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = distinct !{!38, !17}
!39 = distinct !{!39, !17}
!40 = distinct !{!40, !17}
!41 = distinct !{!41, !17}
!42 = !{!43, !44, i64 80}
!43 = !{!"libxsmm_matdiff_info", !44, i64 0, !44, i64 8, !44, i64 16, !44, i64 24, !44, i64 32, !44, i64 40, !44, i64 48, !44, i64 56, !44, i64 64, !44, i64 72, !44, i64 80, !44, i64 88, !44, i64 96, !44, i64 104, !44, i64 112, !44, i64 120, !44, i64 128, !44, i64 136, !44, i64 144, !44, i64 152, !44, i64 160, !44, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!44 = !{!"double", !7, i64 0}
!45 = !{!43, !44, i64 120}
!46 = !{!43, !44, i64 56}
!47 = !{!43, !44, i64 64}
!48 = !{!43, !44, i64 40}
!49 = !{!43, !44, i64 48}
!50 = !{!43, !44, i64 32}
!51 = distinct !{!51, !17}
!52 = distinct !{!52, !17}


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