; LLVM IR from libxsmm/libxsmm :: samples/equation (equation_relu)

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

79:                                               ; preds = %2
  %80 = load ptr, ptr %5, align 8, !tbaa !9
  %81 = getelementptr inbounds ptr, ptr %80, i64 1
  %82 = load ptr, ptr %81, align 8, !tbaa !9
  %83 = call i32 @atoi(ptr noundef %82) #10
  store i32 %83, ptr %53, align 4, !tbaa !5
  br label %84

84:                                               ; preds = %79, %2
  %85 = load i32, ptr %4, align 4, !tbaa !5
  %86 = icmp sgt i32 %85, 2
  br i1 %86, label %87, label %92

87:                                               ; preds = %84
  %88 = load ptr, ptr %5, align 8, !tbaa !9
  %89 = getelementptr inbounds ptr, ptr %88, i64 2
  %90 = load ptr, ptr %89, align 8, !tbaa !9
  %91 = call i32 @atoi(ptr noundef %90) #10
  store i32 %91, ptr %54, align 4, !tbaa !5
  br label %92

92:                                               ; preds = %87, %84
  %93 = load i32, ptr %4, align 4, !tbaa !5
  %94 = icmp sgt i32 %93, 3
  br i1 %94, label %95, label %100

95:                                               ; preds = %92
  %96 = load ptr, ptr %5, align 8, !tbaa !9
  %97 = getelementptr inbounds ptr, ptr %96, i64 3
  %98 = load ptr, ptr %97, align 8, !tbaa !9
  %99 = call i32 @atoi(ptr noundef %98) #10
  store i32 %99, ptr %55, align 4, !tbaa !5
  br label %100

100:                                              ; preds = %95, %92
  %101 = load i32, ptr %4, align 4, !tbaa !5
  %102 = icmp sgt i32 %101, 4
  br i1 %102, label %103, label %108

103:                                              ; preds = %100
  %104 = load ptr, ptr %5, align 8, !tbaa !9
  %105 = getelementptr inbounds ptr, ptr %104, i64 4
  %106 = load ptr, ptr %105, align 8, !tbaa !9
  %107 = call i32 @atoi(ptr noundef %106) #10
  store i32 %107, ptr %56, align 4, !tbaa !5
  br label %108

108:                                              ; preds = %103, %100
  %109 = load i32, ptr %55, align 4, !tbaa !5
  %110 = add nsw i32 %109, 15
  %111 = load i32, ptr %55, align 4, !tbaa !5
  %112 = add nsw i32 %111, 15
  %113 = srem i32 %112, 16
  %114 = sub nsw i32 %110, %113
  %115 = sdiv i32 %114, 8
  store i32 %115, ptr %50, align 4, !tbaa !5
  %116 = load i32, ptr %54, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = mul i64 1, %117
  %119 = load i32, ptr %50, align 4, !tbaa !5
  %120 = sext i32 %119 to i64
  %121 = mul i64 %118, %120
  %122 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %121, i64 noundef 64)
  store ptr %122, ptr %51, align 8, !tbaa !9
  %123 = load i32, ptr %54, align 4, !tbaa !5
  %124 = sext i32 %123 to i64
  %125 = mul i64 1, %124
  %126 = load i32, ptr %50, align 4, !tbaa !5
  %127 = sext i32 %126 to i64
  %128 = mul i64 %125, %127
  %129 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %128, i64 noundef 64)
  store ptr %129, ptr %52, align 8, !tbaa !9
  %130 = load ptr, ptr %51, align 8, !tbaa !9
  %131 = load i32, ptr %54, align 4, !tbaa !5
  %132 = sext i32 %131 to i64
  %133 = mul i64 1, %132
  %134 = load i32, ptr %50, align 4, !tbaa !5
  %135 = sext i32 %134 to i64
  %136 = mul i64 %133, %135
  call void @llvm.memset.p0.i64(ptr align 1 %130, i8 0, i64 %136, i1 false)
  %137 = load ptr, ptr %52, align 8, !tbaa !9
  %138 = load i32, ptr %54, align 4, !tbaa !5
  %139 = sext i32 %138 to i64
  %140 = mul i64 1, %139
  %141 = load i32, ptr %50, align 4, !tbaa !5
  %142 = sext i32 %141 to i64
  %143 = mul i64 %140, %142
  call void @llvm.memset.p0.i64(ptr align 1 %137, i8 0, i64 %143, i1 false)
  %144 = load i32, ptr %54, align 4, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = mul i64 4, %145
  %147 = load i32, ptr %55, 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 %15, align 8, !tbaa !9
  %151 = load i32, ptr %54, align 4, !tbaa !5
  %152 = sext i32 %151 to i64
  %153 = mul i64 4, %152
  %154 = load i32, ptr %55, 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 %16, align 8, !tbaa !9
  %158 = load i32, ptr %54, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = mul i64 4, %159
  %161 = load i32, ptr %55, 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 %17, align 8, !tbaa !9
  %165 = load i32, ptr %54, align 4, !tbaa !5
  %166 = sext i32 %165 to i64
  %167 = mul i64 4, %166
  %168 = load i32, ptr %55, 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 %18, align 8, !tbaa !9
  %172 = load i32, ptr %54, align 4, !tbaa !5
  %173 = sext i32 %172 to i64
  %174 = mul i64 4, %173
  %175 = load i32, ptr %55, 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 %19, align 8, !tbaa !9
  %179 = load i32, ptr %54, align 4, !tbaa !5
  %180 = sext i32 %179 to i64
  %181 = mul i64 2, %180
  %182 = load i32, ptr %55, align 4, !tbaa !5
  %183 = sext i32 %182 to i64
  %184 = mul i64 %181, %183
  %185 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %184, i64 noundef 64)
  store ptr %185, ptr %21, align 8, !tbaa !9
  %186 = load i32, ptr %54, align 4, !tbaa !5
  %187 = sext i32 %186 to i64
  %188 = mul i64 2, %187
  %189 = load i32, ptr %55, align 4, !tbaa !5
  %190 = sext i32 %189 to i64
  %191 = mul i64 %188, %190
  %192 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %191, i64 noundef 64)
  store ptr %192, ptr %22, align 8, !tbaa !9
  %193 = load i32, ptr %54, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = mul i64 2, %194
  %196 = load i32, ptr %55, align 4, !tbaa !5
  %197 = sext i32 %196 to i64
  %198 = mul i64 %195, %197
  %199 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %198, i64 noundef 64)
  store ptr %199, ptr %23, align 8, !tbaa !9
  %200 = load i32, ptr %54, align 4, !tbaa !5
  %201 = sext i32 %200 to i64
  %202 = mul i64 2, %201
  %203 = load i32, ptr %55, align 4, !tbaa !5
  %204 = sext i32 %203 to i64
  %205 = mul i64 %202, %204
  %206 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %205, i64 noundef 64)
  store ptr %206, ptr %24, align 8, !tbaa !9
  %207 = load i32, ptr %54, align 4, !tbaa !5
  %208 = sext i32 %207 to i64
  %209 = mul i64 2, %208
  %210 = load i32, ptr %55, align 4, !tbaa !5
  %211 = sext i32 %210 to i64
  %212 = mul i64 %209, %211
  %213 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %212, i64 noundef 64)
  store ptr %213, ptr %25, align 8, !tbaa !9
  %214 = load i32, ptr %54, align 4, !tbaa !5
  %215 = sext i32 %214 to i64
  %216 = mul i64 2, %215
  %217 = load i32, ptr %55, align 4, !tbaa !5
  %218 = sext i32 %217 to i64
  %219 = mul i64 %216, %218
  %220 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %219, i64 noundef 64)
  store ptr %220, ptr %26, align 8, !tbaa !9
  %221 = load i32, ptr %54, align 4, !tbaa !5
  %222 = sext i32 %221 to i64
  %223 = mul i64 2, %222
  %224 = load i32, ptr %55, align 4, !tbaa !5
  %225 = sext i32 %224 to i64
  %226 = mul i64 %223, %225
  %227 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %226, i64 noundef 64)
  store ptr %227, ptr %27, align 8, !tbaa !9
  %228 = load i32, ptr %54, align 4, !tbaa !5
  %229 = sext i32 %228 to i64
  %230 = mul i64 2, %229
  %231 = load i32, ptr %55, align 4, !tbaa !5
  %232 = sext i32 %231 to i64
  %233 = mul i64 %230, %232
  %234 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %233, i64 noundef 64)
  store ptr %234, ptr %28, align 8, !tbaa !9
  %235 = load i32, ptr %54, align 4, !tbaa !5
  %236 = sext i32 %235 to i64
  %237 = mul i64 2, %236
  %238 = load i32, ptr %55, align 4, !tbaa !5
  %239 = sext i32 %238 to i64
  %240 = mul i64 %237, %239
  %241 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %240, i64 noundef 64)
  store ptr %241, ptr %29, align 8, !tbaa !9
  %242 = load i32, ptr %54, align 4, !tbaa !5
  %243 = sext i32 %242 to i64
  %244 = mul i64 2, %243
  %245 = load i32, ptr %55, align 4, !tbaa !5
  %246 = sext i32 %245 to i64
  %247 = mul i64 %244, %246
  %248 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %247, i64 noundef 64)
  store ptr %248, ptr %30, align 8, !tbaa !9
  %249 = load i32, ptr %54, align 4, !tbaa !5
  %250 = sext i32 %249 to i64
  %251 = mul i64 1, %250
  %252 = load i32, ptr %55, align 4, !tbaa !5
  %253 = sext i32 %252 to i64
  %254 = mul i64 %251, %253
  %255 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %254, i64 noundef 64)
  store ptr %255, ptr %31, align 8, !tbaa !9
  %256 = load i32, ptr %54, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = mul i64 1, %257
  %259 = load i32, ptr %55, align 4, !tbaa !5
  %260 = sext i32 %259 to i64
  %261 = mul i64 %258, %260
  %262 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %261, i64 noundef 64)
  store ptr %262, ptr %32, align 8, !tbaa !9
  %263 = load i32, ptr %54, align 4, !tbaa !5
  %264 = sext i32 %263 to i64
  %265 = mul i64 1, %264
  %266 = load i32, ptr %55, align 4, !tbaa !5
  %267 = sext i32 %266 to i64
  %268 = mul i64 %265, %267
  %269 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %268, i64 noundef 64)
  store ptr %269, ptr %33, align 8, !tbaa !9
  %270 = load i32, ptr %54, align 4, !tbaa !5
  %271 = sext i32 %270 to i64
  %272 = mul i64 1, %271
  %273 = load i32, ptr %55, align 4, !tbaa !5
  %274 = sext i32 %273 to i64
  %275 = mul i64 %272, %274
  %276 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %275, i64 noundef 64)
  store ptr %276, ptr %34, align 8, !tbaa !9
  %277 = load i32, ptr %54, align 4, !tbaa !5
  %278 = sext i32 %277 to i64
  %279 = mul i64 1, %278
  %280 = load i32, ptr %55, align 4, !tbaa !5
  %281 = sext i32 %280 to i64
  %282 = mul i64 %279, %281
  %283 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %282, i64 noundef 64)
  store ptr %283, ptr %35, align 8, !tbaa !9
  %284 = load i32, ptr %54, align 4, !tbaa !5
  %285 = sext i32 %284 to i64
  %286 = mul i64 1, %285
  %287 = load i32, ptr %55, align 4, !tbaa !5
  %288 = sext i32 %287 to i64
  %289 = mul i64 %286, %288
  %290 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %289, i64 noundef 64)
  store ptr %290, ptr %36, align 8, !tbaa !9
  %291 = load i32, ptr %54, align 4, !tbaa !5
  %292 = sext i32 %291 to i64
  %293 = mul i64 1, %292
  %294 = load i32, ptr %55, align 4, !tbaa !5
  %295 = sext i32 %294 to i64
  %296 = mul i64 %293, %295
  %297 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %296, i64 noundef 64)
  store ptr %297, ptr %37, align 8, !tbaa !9
  %298 = load i32, ptr %54, align 4, !tbaa !5
  %299 = sext i32 %298 to i64
  %300 = mul i64 1, %299
  %301 = load i32, ptr %55, align 4, !tbaa !5
  %302 = sext i32 %301 to i64
  %303 = mul i64 %300, %302
  %304 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %303, i64 noundef 64)
  store ptr %304, ptr %38, align 8, !tbaa !9
  %305 = load i32, ptr %54, align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = mul i64 1, %306
  %308 = load i32, ptr %55, align 4, !tbaa !5
  %309 = sext i32 %308 to i64
  %310 = mul i64 %307, %309
  %311 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %310, i64 noundef 64)
  store ptr %311, ptr %39, align 8, !tbaa !9
  %312 = load i32, ptr %54, align 4, !tbaa !5
  %313 = sext i32 %312 to i64
  %314 = mul i64 1, %313
  %315 = load i32, ptr %55, align 4, !tbaa !5
  %316 = sext i32 %315 to i64
  %317 = mul i64 %314, %316
  %318 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %317, i64 noundef 64)
  store ptr %318, ptr %40, align 8, !tbaa !9
  %319 = load i32, ptr %56, align 4, !tbaa !5
  call void @set_in_out_compute_dt(i32 noundef %319, ptr noundef %57, ptr noundef %58, ptr noundef %59)
  call void @libxsmm_matdiff_clear(ptr noundef %14)
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %320

320:                                              ; preds = %1087, %108
  %321 = load i32, ptr %10, align 4, !tbaa !5
  %322 = load i32, ptr %54, align 4, !tbaa !5
  %323 = icmp slt i32 %321, %322
  br i1 %323, label %324, label %1090

324:                                              ; preds = %320
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %325

325:                                              ; preds = %1083, %324
  %326 = load i32, ptr %11, align 4, !tbaa !5
  %327 = load i32, ptr %55, align 4, !tbaa !5
  %328 = icmp slt i32 %326, %327
  br i1 %328, label %329, label %1086

329:                                              ; preds = %325
  %330 = call double @libxsmm_rng_f64()
  %331 = fptrunc double %330 to float
  %332 = load ptr, ptr %15, align 8, !tbaa !9
  %333 = load i32, ptr %10, align 4, !tbaa !5
  %334 = load i32, ptr %55, align 4, !tbaa !5
  %335 = mul nsw i32 %333, %334
  %336 = load i32, ptr %11, align 4, !tbaa !5
  %337 = add nsw i32 %335, %336
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds float, ptr %332, i64 %338
  store float %331, ptr %339, align 4, !tbaa !13
  %340 = call double @libxsmm_rng_f64()
  %341 = fptrunc double %340 to float
  %342 = load ptr, ptr %16, align 8, !tbaa !9
  %343 = load i32, ptr %10, align 4, !tbaa !5
  %344 = load i32, ptr %55, 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 float, ptr %342, i64 %348
  store float %341, ptr %349, align 4, !tbaa !13
  %350 = call double @libxsmm_rng_f64()
  %351 = fptrunc double %350 to float
  %352 = load ptr, ptr %17, align 8, !tbaa !9
  %353 = load i32, ptr %10, align 4, !tbaa !5
  %354 = load i32, ptr %55, 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
  %360 = call double @libxsmm_rng_f64()
  %361 = fptrunc double %360 to float
  %362 = load ptr, ptr %18, align 8, !tbaa !9
  %363 = load i32, ptr %10, align 4, !tbaa !5
  %364 = load i32, ptr %55, align 4, !tbaa !5
  %365 = mul nsw i32 %363, %364
  %366 = load i32, ptr %11, align 4, !tbaa !5
  %367 = add nsw i32 %365, %366
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds float, ptr %362, i64 %368
  store float %361, ptr %369, align 4, !tbaa !13
  %370 = load ptr, ptr %18, align 8, !tbaa !9
  %371 = load i32, ptr %10, align 4, !tbaa !5
  %372 = load i32, ptr %55, align 4, !tbaa !5
  %373 = mul nsw i32 %371, %372
  %374 = load i32, ptr %11, align 4, !tbaa !5
  %375 = add nsw i32 %373, %374
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds float, ptr %370, i64 %376
  %378 = load float, ptr %377, align 4, !tbaa !13
  %379 = load ptr, ptr %19, align 8, !tbaa !9
  %380 = load i32, ptr %10, align 4, !tbaa !5
  %381 = load i32, ptr %55, align 4, !tbaa !5
  %382 = mul nsw i32 %380, %381
  %383 = load i32, ptr %11, align 4, !tbaa !5
  %384 = add nsw i32 %382, %383
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds float, ptr %379, i64 %385
  store float %378, ptr %386, align 4, !tbaa !13
  %387 = load ptr, ptr %15, align 8, !tbaa !9
  %388 = load i32, ptr %10, align 4, !tbaa !5
  %389 = load i32, ptr %55, align 4, !tbaa !5
  %390 = mul nsw i32 %388, %389
  %391 = load i32, ptr %11, align 4, !tbaa !5
  %392 = add nsw i32 %390, %391
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds float, ptr %387, i64 %393
  %395 = load ptr, ptr %21, align 8, !tbaa !9
  %396 = load i32, ptr %10, align 4, !tbaa !5
  %397 = load i32, ptr %55, align 4, !tbaa !5
  %398 = mul nsw i32 %396, %397
  %399 = load i32, ptr %11, align 4, !tbaa !5
  %400 = add nsw i32 %398, %399
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds i16, ptr %395, i64 %401
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %394, ptr noundef %402, i64 noundef 1)
  %403 = load ptr, ptr %16, align 8, !tbaa !9
  %404 = load i32, ptr %10, align 4, !tbaa !5
  %405 = load i32, ptr %55, align 4, !tbaa !5
  %406 = mul nsw i32 %404, %405
  %407 = load i32, ptr %11, align 4, !tbaa !5
  %408 = add nsw i32 %406, %407
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds float, ptr %403, i64 %409
  %411 = load ptr, ptr %22, align 8, !tbaa !9
  %412 = load i32, ptr %10, align 4, !tbaa !5
  %413 = load i32, ptr %55, align 4, !tbaa !5
  %414 = mul nsw i32 %412, %413
  %415 = load i32, ptr %11, align 4, !tbaa !5
  %416 = add nsw i32 %414, %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i16, ptr %411, i64 %417
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %410, ptr noundef %418, i64 noundef 1)
  %419 = load ptr, ptr %17, align 8, !tbaa !9
  %420 = load i32, ptr %10, align 4, !tbaa !5
  %421 = load i32, ptr %55, align 4, !tbaa !5
  %422 = mul nsw i32 %420, %421
  %423 = load i32, ptr %11, align 4, !tbaa !5
  %424 = add nsw i32 %422, %423
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds float, ptr %419, i64 %425
  %427 = load ptr, ptr %23, align 8, !tbaa !9
  %428 = load i32, ptr %10, align 4, !tbaa !5
  %429 = load i32, ptr %55, align 4, !tbaa !5
  %430 = mul nsw i32 %428, %429
  %431 = load i32, ptr %11, align 4, !tbaa !5
  %432 = add nsw i32 %430, %431
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i16, ptr %427, i64 %433
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %426, ptr noundef %434, i64 noundef 1)
  %435 = load ptr, ptr %18, align 8, !tbaa !9
  %436 = load i32, ptr %10, align 4, !tbaa !5
  %437 = load i32, ptr %55, align 4, !tbaa !5
  %438 = mul nsw i32 %436, %437
  %439 = load i32, ptr %11, align 4, !tbaa !5
  %440 = add nsw i32 %438, %439
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds float, ptr %435, i64 %441
  %443 = load ptr, ptr %24, align 8, !tbaa !9
  %444 = load i32, ptr %10, align 4, !tbaa !5
  %445 = load i32, ptr %55, align 4, !tbaa !5
  %446 = mul nsw i32 %444, %445
  %447 = load i32, ptr %11, align 4, !tbaa !5
  %448 = add nsw i32 %446, %447
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i16, ptr %443, i64 %449
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %442, ptr noundef %450, i64 noundef 1)
  %451 = load ptr, ptr %19, align 8, !tbaa !9
  %452 = load i32, ptr %10, align 4, !tbaa !5
  %453 = load i32, ptr %55, align 4, !tbaa !5
  %454 = mul nsw i32 %452, %453
  %455 = load i32, ptr %11, align 4, !tbaa !5
  %456 = add nsw i32 %454, %455
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds float, ptr %451, i64 %457
  %459 = load ptr, ptr %25, align 8, !tbaa !9
  %460 = load i32, ptr %10, align 4, !tbaa !5
  %461 = load i32, ptr %55, align 4, !tbaa !5
  %462 = mul nsw i32 %460, %461
  %463 = load i32, ptr %11, align 4, !tbaa !5
  %464 = add nsw i32 %462, %463
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds i16, ptr %459, i64 %465
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %458, ptr noundef %466, i64 noundef 1)
  %467 = load ptr, ptr %15, align 8, !tbaa !9
  %468 = load i32, ptr %10, align 4, !tbaa !5
  %469 = load i32, ptr %55, align 4, !tbaa !5
  %470 = mul nsw i32 %468, %469
  %471 = load i32, ptr %11, align 4, !tbaa !5
  %472 = add nsw i32 %470, %471
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds float, ptr %467, i64 %473
  %475 = load ptr, ptr %26, align 8, !tbaa !9
  %476 = load i32, ptr %10, align 4, !tbaa !5
  %477 = load i32, ptr %55, align 4, !tbaa !5
  %478 = mul nsw i32 %476, %477
  %479 = load i32, ptr %11, align 4, !tbaa !5
  %480 = add nsw i32 %478, %479
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds i16, ptr %475, i64 %481
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %474, ptr noundef %482, i64 noundef 1)
  %483 = load ptr, ptr %16, align 8, !tbaa !9
  %484 = load i32, ptr %10, align 4, !tbaa !5
  %485 = load i32, ptr %55, align 4, !tbaa !5
  %486 = mul nsw i32 %484, %485
  %487 = load i32, ptr %11, align 4, !tbaa !5
  %488 = add nsw i32 %486, %487
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds float, ptr %483, i64 %489
  %491 = load ptr, ptr %27, align 8, !tbaa !9
  %492 = load i32, ptr %10, align 4, !tbaa !5
  %493 = load i32, ptr %55, align 4, !tbaa !5
  %494 = mul nsw i32 %492, %493
  %495 = load i32, ptr %11, align 4, !tbaa !5
  %496 = add nsw i32 %494, %495
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds i16, ptr %491, i64 %497
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %490, ptr noundef %498, i64 noundef 1)
  %499 = load ptr, ptr %17, align 8, !tbaa !9
  %500 = load i32, ptr %10, align 4, !tbaa !5
  %501 = load i32, ptr %55, align 4, !tbaa !5
  %502 = mul nsw i32 %500, %501
  %503 = load i32, ptr %11, align 4, !tbaa !5
  %504 = add nsw i32 %502, %503
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds float, ptr %499, i64 %505
  %507 = load ptr, ptr %28, align 8, !tbaa !9
  %508 = load i32, ptr %10, align 4, !tbaa !5
  %509 = load i32, ptr %55, align 4, !tbaa !5
  %510 = mul nsw i32 %508, %509
  %511 = load i32, ptr %11, align 4, !tbaa !5
  %512 = add nsw i32 %510, %511
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i16, ptr %507, i64 %513
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %506, ptr noundef %514, i64 noundef 1)
  %515 = load ptr, ptr %18, align 8, !tbaa !9
  %516 = load i32, ptr %10, align 4, !tbaa !5
  %517 = load i32, ptr %55, align 4, !tbaa !5
  %518 = mul nsw i32 %516, %517
  %519 = load i32, ptr %11, align 4, !tbaa !5
  %520 = add nsw i32 %518, %519
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds float, ptr %515, i64 %521
  %523 = load ptr, ptr %29, align 8, !tbaa !9
  %524 = load i32, ptr %10, align 4, !tbaa !5
  %525 = load i32, ptr %55, align 4, !tbaa !5
  %526 = mul nsw i32 %524, %525
  %527 = load i32, ptr %11, align 4, !tbaa !5
  %528 = add nsw i32 %526, %527
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i16, ptr %523, i64 %529
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %522, ptr noundef %530, i64 noundef 1)
  %531 = load ptr, ptr %19, align 8, !tbaa !9
  %532 = load i32, ptr %10, align 4, !tbaa !5
  %533 = load i32, ptr %55, align 4, !tbaa !5
  %534 = mul nsw i32 %532, %533
  %535 = load i32, ptr %11, align 4, !tbaa !5
  %536 = add nsw i32 %534, %535
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds float, ptr %531, i64 %537
  %539 = load ptr, ptr %30, align 8, !tbaa !9
  %540 = load i32, ptr %10, align 4, !tbaa !5
  %541 = load i32, ptr %55, align 4, !tbaa !5
  %542 = mul nsw i32 %540, %541
  %543 = load i32, ptr %11, align 4, !tbaa !5
  %544 = add nsw i32 %542, %543
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds i16, ptr %539, i64 %545
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %538, ptr noundef %546, i64 noundef 1)
  %547 = load ptr, ptr %15, align 8, !tbaa !9
  %548 = load i32, ptr %10, align 4, !tbaa !5
  %549 = load i32, ptr %55, align 4, !tbaa !5
  %550 = mul nsw i32 %548, %549
  %551 = load i32, ptr %11, align 4, !tbaa !5
  %552 = add nsw i32 %550, %551
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds float, ptr %547, i64 %553
  %555 = load ptr, ptr %31, align 8, !tbaa !9
  %556 = load i32, ptr %10, align 4, !tbaa !5
  %557 = load i32, ptr %55, align 4, !tbaa !5
  %558 = mul nsw i32 %556, %557
  %559 = load i32, ptr %11, align 4, !tbaa !5
  %560 = add nsw i32 %558, %559
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i8, ptr %555, i64 %561
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %554, ptr noundef %562, i64 noundef 1)
  %563 = load ptr, ptr %16, align 8, !tbaa !9
  %564 = load i32, ptr %10, align 4, !tbaa !5
  %565 = load i32, ptr %55, align 4, !tbaa !5
  %566 = mul nsw i32 %564, %565
  %567 = load i32, ptr %11, align 4, !tbaa !5
  %568 = add nsw i32 %566, %567
  %569 = sext i32 %568 to i64
  %570 = getelementptr inbounds float, ptr %563, i64 %569
  %571 = load ptr, ptr %32, align 8, !tbaa !9
  %572 = load i32, ptr %10, align 4, !tbaa !5
  %573 = load i32, ptr %55, align 4, !tbaa !5
  %574 = mul nsw i32 %572, %573
  %575 = load i32, ptr %11, align 4, !tbaa !5
  %576 = add nsw i32 %574, %575
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i8, ptr %571, i64 %577
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %570, ptr noundef %578, i64 noundef 1)
  %579 = load ptr, ptr %17, align 8, !tbaa !9
  %580 = load i32, ptr %10, align 4, !tbaa !5
  %581 = load i32, ptr %55, align 4, !tbaa !5
  %582 = mul nsw i32 %580, %581
  %583 = load i32, ptr %11, align 4, !tbaa !5
  %584 = add nsw i32 %582, %583
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds float, ptr %579, i64 %585
  %587 = load ptr, ptr %33, align 8, !tbaa !9
  %588 = load i32, ptr %10, align 4, !tbaa !5
  %589 = load i32, ptr %55, align 4, !tbaa !5
  %590 = mul nsw i32 %588, %589
  %591 = load i32, ptr %11, align 4, !tbaa !5
  %592 = add nsw i32 %590, %591
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds i8, ptr %587, i64 %593
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %586, ptr noundef %594, i64 noundef 1)
  %595 = load ptr, ptr %18, align 8, !tbaa !9
  %596 = load i32, ptr %10, align 4, !tbaa !5
  %597 = load i32, ptr %55, align 4, !tbaa !5
  %598 = mul nsw i32 %596, %597
  %599 = load i32, ptr %11, align 4, !tbaa !5
  %600 = add nsw i32 %598, %599
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds float, ptr %595, i64 %601
  %603 = load ptr, ptr %34, align 8, !tbaa !9
  %604 = load i32, ptr %10, align 4, !tbaa !5
  %605 = load i32, ptr %55, align 4, !tbaa !5
  %606 = mul nsw i32 %604, %605
  %607 = load i32, ptr %11, align 4, !tbaa !5
  %608 = add nsw i32 %606, %607
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds i8, ptr %603, i64 %609
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %602, ptr noundef %610, i64 noundef 1)
  %611 = load ptr, ptr %19, align 8, !tbaa !9
  %612 = load i32, ptr %10, align 4, !tbaa !5
  %613 = load i32, ptr %55, align 4, !tbaa !5
  %614 = mul nsw i32 %612, %613
  %615 = load i32, ptr %11, align 4, !tbaa !5
  %616 = add nsw i32 %614, %615
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds float, ptr %611, i64 %617
  %619 = load ptr, ptr %35, align 8, !tbaa !9
  %620 = load i32, ptr %10, align 4, !tbaa !5
  %621 = load i32, ptr %55, align 4, !tbaa !5
  %622 = mul nsw i32 %620, %621
  %623 = load i32, ptr %11, align 4, !tbaa !5
  %624 = add nsw i32 %622, %623
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds i8, ptr %619, i64 %625
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %618, ptr noundef %626, i64 noundef 1)
  %627 = load ptr, ptr %15, align 8, !tbaa !9
  %628 = load i32, ptr %10, align 4, !tbaa !5
  %629 = load i32, ptr %55, align 4, !tbaa !5
  %630 = mul nsw i32 %628, %629
  %631 = load i32, ptr %11, align 4, !tbaa !5
  %632 = add nsw i32 %630, %631
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds float, ptr %627, i64 %633
  %635 = load ptr, ptr %36, align 8, !tbaa !9
  %636 = load i32, ptr %10, align 4, !tbaa !5
  %637 = load i32, ptr %55, align 4, !tbaa !5
  %638 = mul nsw i32 %636, %637
  %639 = load i32, ptr %11, align 4, !tbaa !5
  %640 = add nsw i32 %638, %639
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds i8, ptr %635, i64 %641
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %634, ptr noundef %642, i64 noundef 1)
  %643 = load ptr, ptr %16, align 8, !tbaa !9
  %644 = load i32, ptr %10, align 4, !tbaa !5
  %645 = load i32, ptr %55, align 4, !tbaa !5
  %646 = mul nsw i32 %644, %645
  %647 = load i32, ptr %11, align 4, !tbaa !5
  %648 = add nsw i32 %646, %647
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds float, ptr %643, i64 %649
  %651 = load ptr, ptr %37, align 8, !tbaa !9
  %652 = load i32, ptr %10, align 4, !tbaa !5
  %653 = load i32, ptr %55, align 4, !tbaa !5
  %654 = mul nsw i32 %652, %653
  %655 = load i32, ptr %11, align 4, !tbaa !5
  %656 = add nsw i32 %654, %655
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds i8, ptr %651, i64 %657
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %650, ptr noundef %658, i64 noundef 1)
  %659 = load ptr, ptr %17, align 8, !tbaa !9
  %660 = load i32, ptr %10, align 4, !tbaa !5
  %661 = load i32, ptr %55, align 4, !tbaa !5
  %662 = mul nsw i32 %660, %661
  %663 = load i32, ptr %11, align 4, !tbaa !5
  %664 = add nsw i32 %662, %663
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds float, ptr %659, i64 %665
  %667 = load ptr, ptr %38, align 8, !tbaa !9
  %668 = load i32, ptr %10, align 4, !tbaa !5
  %669 = load i32, ptr %55, align 4, !tbaa !5
  %670 = mul nsw i32 %668, %669
  %671 = load i32, ptr %11, align 4, !tbaa !5
  %672 = add nsw i32 %670, %671
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds i8, ptr %667, i64 %673
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %666, ptr noundef %674, i64 noundef 1)
  %675 = load ptr, ptr %18, align 8, !tbaa !9
  %676 = load i32, ptr %10, align 4, !tbaa !5
  %677 = load i32, ptr %55, align 4, !tbaa !5
  %678 = mul nsw i32 %676, %677
  %679 = load i32, ptr %11, align 4, !tbaa !5
  %680 = add nsw i32 %678, %679
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds float, ptr %675, i64 %681
  %683 = load ptr, ptr %39, align 8, !tbaa !9
  %684 = load i32, ptr %10, align 4, !tbaa !5
  %685 = load i32, ptr %55, align 4, !tbaa !5
  %686 = mul nsw i32 %684, %685
  %687 = load i32, ptr %11, align 4, !tbaa !5
  %688 = add nsw i32 %686, %687
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds i8, ptr %683, i64 %689
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %682, ptr noundef %690, i64 noundef 1)
  %691 = load ptr, ptr %19, align 8, !tbaa !9
  %692 = load i32, ptr %10, align 4, !tbaa !5
  %693 = load i32, ptr %55, align 4, !tbaa !5
  %694 = mul nsw i32 %692, %693
  %695 = load i32, ptr %11, align 4, !tbaa !5
  %696 = add nsw i32 %694, %695
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds float, ptr %691, i64 %697
  %699 = load ptr, ptr %40, align 8, !tbaa !9
  %700 = load i32, ptr %10, align 4, !tbaa !5
  %701 = load i32, ptr %55, align 4, !tbaa !5
  %702 = mul nsw i32 %700, %701
  %703 = load i32, ptr %11, align 4, !tbaa !5
  %704 = add nsw i32 %702, %703
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds i8, ptr %699, i64 %705
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %698, ptr noundef %706, i64 noundef 1)
  %707 = load i32, ptr %57, align 4, !tbaa !5
  %708 = icmp eq i32 %707, 2
  br i1 %708, label %709, label %800

709:                                              ; preds = %329
  %710 = load ptr, ptr %21, align 8, !tbaa !9
  %711 = load i32, ptr %10, align 4, !tbaa !5
  %712 = load i32, ptr %55, align 4, !tbaa !5
  %713 = mul nsw i32 %711, %712
  %714 = load i32, ptr %11, align 4, !tbaa !5
  %715 = add nsw i32 %713, %714
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds i16, ptr %710, i64 %716
  %718 = load i16, ptr %717, align 2, !tbaa !15
  %719 = call float @upconvert_bf16(i16 noundef zeroext %718)
  %720 = load ptr, ptr %15, align 8, !tbaa !9
  %721 = load i32, ptr %10, align 4, !tbaa !5
  %722 = load i32, ptr %55, align 4, !tbaa !5
  %723 = mul nsw i32 %721, %722
  %724 = load i32, ptr %11, align 4, !tbaa !5
  %725 = add nsw i32 %723, %724
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds float, ptr %720, i64 %726
  store float %719, ptr %727, align 4, !tbaa !13
  %728 = load ptr, ptr %22, align 8, !tbaa !9
  %729 = load i32, ptr %10, align 4, !tbaa !5
  %730 = load i32, ptr %55, align 4, !tbaa !5
  %731 = mul nsw i32 %729, %730
  %732 = load i32, ptr %11, align 4, !tbaa !5
  %733 = add nsw i32 %731, %732
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds i16, ptr %728, i64 %734
  %736 = load i16, ptr %735, align 2, !tbaa !15
  %737 = call float @upconvert_bf16(i16 noundef zeroext %736)
  %738 = load ptr, ptr %16, align 8, !tbaa !9
  %739 = load i32, ptr %10, align 4, !tbaa !5
  %740 = load i32, ptr %55, align 4, !tbaa !5
  %741 = mul nsw i32 %739, %740
  %742 = load i32, ptr %11, align 4, !tbaa !5
  %743 = add nsw i32 %741, %742
  %744 = sext i32 %743 to i64
  %745 = getelementptr inbounds float, ptr %738, i64 %744
  store float %737, ptr %745, align 4, !tbaa !13
  %746 = load ptr, ptr %23, align 8, !tbaa !9
  %747 = load i32, ptr %10, align 4, !tbaa !5
  %748 = load i32, ptr %55, align 4, !tbaa !5
  %749 = mul nsw i32 %747, %748
  %750 = load i32, ptr %11, align 4, !tbaa !5
  %751 = add nsw i32 %749, %750
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds i16, ptr %746, i64 %752
  %754 = load i16, ptr %753, align 2, !tbaa !15
  %755 = call float @upconvert_bf16(i16 noundef zeroext %754)
  %756 = load ptr, ptr %17, align 8, !tbaa !9
  %757 = load i32, ptr %10, align 4, !tbaa !5
  %758 = load i32, ptr %55, align 4, !tbaa !5
  %759 = mul nsw i32 %757, %758
  %760 = load i32, ptr %11, align 4, !tbaa !5
  %761 = add nsw i32 %759, %760
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds float, ptr %756, i64 %762
  store float %755, ptr %763, align 4, !tbaa !13
  %764 = load ptr, ptr %24, align 8, !tbaa !9
  %765 = load i32, ptr %10, align 4, !tbaa !5
  %766 = load i32, ptr %55, align 4, !tbaa !5
  %767 = mul nsw i32 %765, %766
  %768 = load i32, ptr %11, align 4, !tbaa !5
  %769 = add nsw i32 %767, %768
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds i16, ptr %764, i64 %770
  %772 = load i16, ptr %771, align 2, !tbaa !15
  %773 = call float @upconvert_bf16(i16 noundef zeroext %772)
  %774 = load ptr, ptr %18, align 8, !tbaa !9
  %775 = load i32, ptr %10, align 4, !tbaa !5
  %776 = load i32, ptr %55, align 4, !tbaa !5
  %777 = mul nsw i32 %775, %776
  %778 = load i32, ptr %11, align 4, !tbaa !5
  %779 = add nsw i32 %777, %778
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds float, ptr %774, i64 %780
  store float %773, ptr %781, align 4, !tbaa !13
  %782 = load ptr, ptr %25, align 8, !tbaa !9
  %783 = load i32, ptr %10, align 4, !tbaa !5
  %784 = load i32, ptr %55, align 4, !tbaa !5
  %785 = mul nsw i32 %783, %784
  %786 = load i32, ptr %11, align 4, !tbaa !5
  %787 = add nsw i32 %785, %786
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds i16, ptr %782, i64 %788
  %790 = load i16, ptr %789, align 2, !tbaa !15
  %791 = call float @upconvert_bf16(i16 noundef zeroext %790)
  %792 = load ptr, ptr %19, align 8, !tbaa !9
  %793 = load i32, ptr %10, align 4, !tbaa !5
  %794 = load i32, ptr %55, align 4, !tbaa !5
  %795 = mul nsw i32 %793, %794
  %796 = load i32, ptr %11, align 4, !tbaa !5
  %797 = add nsw i32 %795, %796
  %798 = sext i32 %797 to i64
  %799 = getelementptr inbounds float, ptr %792, i64 %798
  store float %791, ptr %799, align 4, !tbaa !13
  br label %800

800:                                              ; preds = %709, %329
  %801 = load i32, ptr %57, align 4, !tbaa !5
  %802 = icmp eq i32 %801, 3
  br i1 %802, label %803, label %894

803:                                              ; preds = %800
  %804 = load ptr, ptr %26, align 8, !tbaa !9
  %805 = load i32, ptr %10, align 4, !tbaa !5
  %806 = load i32, ptr %55, align 4, !tbaa !5
  %807 = mul nsw i32 %805, %806
  %808 = load i32, ptr %11, align 4, !tbaa !5
  %809 = add nsw i32 %807, %808
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds i16, ptr %804, i64 %810
  %812 = load i16, ptr %811, align 2, !tbaa !15
  %813 = call float @upconvert_f16(i16 noundef zeroext %812)
  %814 = load ptr, ptr %15, align 8, !tbaa !9
  %815 = load i32, ptr %10, align 4, !tbaa !5
  %816 = load i32, ptr %55, align 4, !tbaa !5
  %817 = mul nsw i32 %815, %816
  %818 = load i32, ptr %11, align 4, !tbaa !5
  %819 = add nsw i32 %817, %818
  %820 = sext i32 %819 to i64
  %821 = getelementptr inbounds float, ptr %814, i64 %820
  store float %813, ptr %821, align 4, !tbaa !13
  %822 = load ptr, ptr %27, align 8, !tbaa !9
  %823 = load i32, ptr %10, align 4, !tbaa !5
  %824 = load i32, ptr %55, align 4, !tbaa !5
  %825 = mul nsw i32 %823, %824
  %826 = load i32, ptr %11, align 4, !tbaa !5
  %827 = add nsw i32 %825, %826
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i16, ptr %822, i64 %828
  %830 = load i16, ptr %829, align 2, !tbaa !15
  %831 = call float @upconvert_f16(i16 noundef zeroext %830)
  %832 = load ptr, ptr %16, align 8, !tbaa !9
  %833 = load i32, ptr %10, align 4, !tbaa !5
  %834 = load i32, ptr %55, align 4, !tbaa !5
  %835 = mul nsw i32 %833, %834
  %836 = load i32, ptr %11, align 4, !tbaa !5
  %837 = add nsw i32 %835, %836
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds float, ptr %832, i64 %838
  store float %831, ptr %839, align 4, !tbaa !13
  %840 = load ptr, ptr %28, align 8, !tbaa !9
  %841 = load i32, ptr %10, align 4, !tbaa !5
  %842 = load i32, ptr %55, align 4, !tbaa !5
  %843 = mul nsw i32 %841, %842
  %844 = load i32, ptr %11, align 4, !tbaa !5
  %845 = add nsw i32 %843, %844
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds i16, ptr %840, i64 %846
  %848 = load i16, ptr %847, align 2, !tbaa !15
  %849 = call float @upconvert_f16(i16 noundef zeroext %848)
  %850 = load ptr, ptr %17, align 8, !tbaa !9
  %851 = load i32, ptr %10, align 4, !tbaa !5
  %852 = load i32, ptr %55, align 4, !tbaa !5
  %853 = mul nsw i32 %851, %852
  %854 = load i32, ptr %11, align 4, !tbaa !5
  %855 = add nsw i32 %853, %854
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds float, ptr %850, i64 %856
  store float %849, ptr %857, align 4, !tbaa !13
  %858 = load ptr, ptr %29, align 8, !tbaa !9
  %859 = load i32, ptr %10, align 4, !tbaa !5
  %860 = load i32, ptr %55, align 4, !tbaa !5
  %861 = mul nsw i32 %859, %860
  %862 = load i32, ptr %11, align 4, !tbaa !5
  %863 = add nsw i32 %861, %862
  %864 = sext i32 %863 to i64
  %865 = getelementptr inbounds i16, ptr %858, i64 %864
  %866 = load i16, ptr %865, align 2, !tbaa !15
  %867 = call float @upconvert_f16(i16 noundef zeroext %866)
  %868 = load ptr, ptr %18, align 8, !tbaa !9
  %869 = load i32, ptr %10, align 4, !tbaa !5
  %870 = load i32, ptr %55, align 4, !tbaa !5
  %871 = mul nsw i32 %869, %870
  %872 = load i32, ptr %11, align 4, !tbaa !5
  %873 = add nsw i32 %871, %872
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds float, ptr %868, i64 %874
  store float %867, ptr %875, align 4, !tbaa !13
  %876 = load ptr, ptr %30, align 8, !tbaa !9
  %877 = load i32, ptr %10, align 4, !tbaa !5
  %878 = load i32, ptr %55, align 4, !tbaa !5
  %879 = mul nsw i32 %877, %878
  %880 = load i32, ptr %11, align 4, !tbaa !5
  %881 = add nsw i32 %879, %880
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds i16, ptr %876, i64 %882
  %884 = load i16, ptr %883, align 2, !tbaa !15
  %885 = call float @upconvert_f16(i16 noundef zeroext %884)
  %886 = load ptr, ptr %19, align 8, !tbaa !9
  %887 = load i32, ptr %10, align 4, !tbaa !5
  %888 = load i32, ptr %55, align 4, !tbaa !5
  %889 = mul nsw i32 %887, %888
  %890 = load i32, ptr %11, align 4, !tbaa !5
  %891 = add nsw i32 %889, %890
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds float, ptr %886, i64 %892
  store float %885, ptr %893, align 4, !tbaa !13
  br label %894

894:                                              ; preds = %803, %800
  %895 = load i32, ptr %57, align 4, !tbaa !5
  %896 = icmp eq i32 %895, 4
  br i1 %896, label %897, label %988

897:                                              ; preds = %894
  %898 = load ptr, ptr %31, align 8, !tbaa !9
  %899 = load i32, ptr %10, align 4, !tbaa !5
  %900 = load i32, ptr %55, align 4, !tbaa !5
  %901 = mul nsw i32 %899, %900
  %902 = load i32, ptr %11, align 4, !tbaa !5
  %903 = add nsw i32 %901, %902
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds i8, ptr %898, i64 %904
  %906 = load i8, ptr %905, align 1, !tbaa !17
  %907 = call float @upconvert_bf8(i8 noundef zeroext %906)
  %908 = load ptr, ptr %15, align 8, !tbaa !9
  %909 = load i32, ptr %10, align 4, !tbaa !5
  %910 = load i32, ptr %55, align 4, !tbaa !5
  %911 = mul nsw i32 %909, %910
  %912 = load i32, ptr %11, align 4, !tbaa !5
  %913 = add nsw i32 %911, %912
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds float, ptr %908, i64 %914
  store float %907, ptr %915, align 4, !tbaa !13
  %916 = load ptr, ptr %32, align 8, !tbaa !9
  %917 = load i32, ptr %10, align 4, !tbaa !5
  %918 = load i32, ptr %55, align 4, !tbaa !5
  %919 = mul nsw i32 %917, %918
  %920 = load i32, ptr %11, align 4, !tbaa !5
  %921 = add nsw i32 %919, %920
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds i8, ptr %916, i64 %922
  %924 = load i8, ptr %923, align 1, !tbaa !17
  %925 = call float @upconvert_bf8(i8 noundef zeroext %924)
  %926 = load ptr, ptr %16, align 8, !tbaa !9
  %927 = load i32, ptr %10, align 4, !tbaa !5
  %928 = load i32, ptr %55, align 4, !tbaa !5
  %929 = mul nsw i32 %927, %928
  %930 = load i32, ptr %11, align 4, !tbaa !5
  %931 = add nsw i32 %929, %930
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds float, ptr %926, i64 %932
  store float %925, ptr %933, align 4, !tbaa !13
  %934 = load ptr, ptr %33, align 8, !tbaa !9
  %935 = load i32, ptr %10, align 4, !tbaa !5
  %936 = load i32, ptr %55, align 4, !tbaa !5
  %937 = mul nsw i32 %935, %936
  %938 = load i32, ptr %11, align 4, !tbaa !5
  %939 = add nsw i32 %937, %938
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds i8, ptr %934, i64 %940
  %942 = load i8, ptr %941, align 1, !tbaa !17
  %943 = call float @upconvert_bf8(i8 noundef zeroext %942)
  %944 = load ptr, ptr %17, align 8, !tbaa !9
  %945 = load i32, ptr %10, align 4, !tbaa !5
  %946 = load i32, ptr %55, align 4, !tbaa !5
  %947 = mul nsw i32 %945, %946
  %948 = load i32, ptr %11, align 4, !tbaa !5
  %949 = add nsw i32 %947, %948
  %950 = sext i32 %949 to i64
  %951 = getelementptr inbounds float, ptr %944, i64 %950
  store float %943, ptr %951, align 4, !tbaa !13
  %952 = load ptr, ptr %34, align 8, !tbaa !9
  %953 = load i32, ptr %10, align 4, !tbaa !5
  %954 = load i32, ptr %55, align 4, !tbaa !5
  %955 = mul nsw i32 %953, %954
  %956 = load i32, ptr %11, align 4, !tbaa !5
  %957 = add nsw i32 %955, %956
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds i8, ptr %952, i64 %958
  %960 = load i8, ptr %959, align 1, !tbaa !17
  %961 = call float @upconvert_bf8(i8 noundef zeroext %960)
  %962 = load ptr, ptr %18, align 8, !tbaa !9
  %963 = load i32, ptr %10, align 4, !tbaa !5
  %964 = load i32, ptr %55, align 4, !tbaa !5
  %965 = mul nsw i32 %963, %964
  %966 = load i32, ptr %11, align 4, !tbaa !5
  %967 = add nsw i32 %965, %966
  %968 = sext i32 %967 to i64
  %969 = getelementptr inbounds float, ptr %962, i64 %968
  store float %961, ptr %969, align 4, !tbaa !13
  %970 = load ptr, ptr %35, align 8, !tbaa !9
  %971 = load i32, ptr %10, align 4, !tbaa !5
  %972 = load i32, ptr %55, align 4, !tbaa !5
  %973 = mul nsw i32 %971, %972
  %974 = load i32, ptr %11, align 4, !tbaa !5
  %975 = add nsw i32 %973, %974
  %976 = sext i32 %975 to i64
  %977 = getelementptr inbounds i8, ptr %970, i64 %976
  %978 = load i8, ptr %977, align 1, !tbaa !17
  %979 = call float @upconvert_bf8(i8 noundef zeroext %978)
  %980 = load ptr, ptr %19, align 8, !tbaa !9
  %981 = load i32, ptr %10, align 4, !tbaa !5
  %982 = load i32, ptr %55, align 4, !tbaa !5
  %983 = mul nsw i32 %981, %982
  %984 = load i32, ptr %11, align 4, !tbaa !5
  %985 = add nsw i32 %983, %984
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds float, ptr %980, i64 %986
  store float %979, ptr %987, align 4, !tbaa !13
  br label %988

988:                                              ; preds = %897, %894
  %989 = load i32, ptr %57, align 4, !tbaa !5
  %990 = icmp eq i32 %989, 5
  br i1 %990, label %991, label %1082

991:                                              ; preds = %988
  %992 = load ptr, ptr %36, align 8, !tbaa !9
  %993 = load i32, ptr %10, align 4, !tbaa !5
  %994 = load i32, ptr %55, align 4, !tbaa !5
  %995 = mul nsw i32 %993, %994
  %996 = load i32, ptr %11, align 4, !tbaa !5
  %997 = add nsw i32 %995, %996
  %998 = sext i32 %997 to i64
  %999 = getelementptr inbounds i8, ptr %992, i64 %998
  %1000 = load i8, ptr %999, align 1, !tbaa !17
  %1001 = call float @upconvert_hf8(i8 noundef zeroext %1000)
  %1002 = load ptr, ptr %15, align 8, !tbaa !9
  %1003 = load i32, ptr %10, align 4, !tbaa !5
  %1004 = load i32, ptr %55, align 4, !tbaa !5
  %1005 = mul nsw i32 %1003, %1004
  %1006 = load i32, ptr %11, align 4, !tbaa !5
  %1007 = add nsw i32 %1005, %1006
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds float, ptr %1002, i64 %1008
  store float %1001, ptr %1009, align 4, !tbaa !13
  %1010 = load ptr, ptr %37, align 8, !tbaa !9
  %1011 = load i32, ptr %10, align 4, !tbaa !5
  %1012 = load i32, ptr %55, align 4, !tbaa !5
  %1013 = mul nsw i32 %1011, %1012
  %1014 = load i32, ptr %11, align 4, !tbaa !5
  %1015 = add nsw i32 %1013, %1014
  %1016 = sext i32 %1015 to i64
  %1017 = getelementptr inbounds i8, ptr %1010, i64 %1016
  %1018 = load i8, ptr %1017, align 1, !tbaa !17
  %1019 = call float @upconvert_hf8(i8 noundef zeroext %1018)
  %1020 = load ptr, ptr %16, align 8, !tbaa !9
  %1021 = load i32, ptr %10, align 4, !tbaa !5
  %1022 = load i32, ptr %55, align 4, !tbaa !5
  %1023 = mul nsw i32 %1021, %1022
  %1024 = load i32, ptr %11, align 4, !tbaa !5
  %1025 = add nsw i32 %1023, %1024
  %1026 = sext i32 %1025 to i64
  %1027 = getelementptr inbounds float, ptr %1020, i64 %1026
  store float %1019, ptr %1027, align 4, !tbaa !13
  %1028 = load ptr, ptr %38, align 8, !tbaa !9
  %1029 = load i32, ptr %10, align 4, !tbaa !5
  %1030 = load i32, ptr %55, align 4, !tbaa !5
  %1031 = mul nsw i32 %1029, %1030
  %1032 = load i32, ptr %11, align 4, !tbaa !5
  %1033 = add nsw i32 %1031, %1032
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds i8, ptr %1028, i64 %1034
  %1036 = load i8, ptr %1035, align 1, !tbaa !17
  %1037 = call float @upconvert_hf8(i8 noundef zeroext %1036)
  %1038 = load ptr, ptr %17, align 8, !tbaa !9
  %1039 = load i32, ptr %10, align 4, !tbaa !5
  %1040 = load i32, ptr %55, align 4, !tbaa !5
  %1041 = mul nsw i32 %1039, %1040
  %1042 = load i32, ptr %11, align 4, !tbaa !5
  %1043 = add nsw i32 %1041, %1042
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds float, ptr %1038, i64 %1044
  store float %1037, ptr %1045, align 4, !tbaa !13
  %1046 = load ptr, ptr %39, align 8, !tbaa !9
  %1047 = load i32, ptr %10, align 4, !tbaa !5
  %1048 = load i32, ptr %55, align 4, !tbaa !5
  %1049 = mul nsw i32 %1047, %1048
  %1050 = load i32, ptr %11, align 4, !tbaa !5
  %1051 = add nsw i32 %1049, %1050
  %1052 = sext i32 %1051 to i64
  %1053 = getelementptr inbounds i8, ptr %1046, i64 %1052
  %1054 = load i8, ptr %1053, align 1, !tbaa !17
  %1055 = call float @upconvert_hf8(i8 noundef zeroext %1054)
  %1056 = load ptr, ptr %18, align 8, !tbaa !9
  %1057 = load i32, ptr %10, align 4, !tbaa !5
  %1058 = load i32, ptr %55, align 4, !tbaa !5
  %1059 = mul nsw i32 %1057, %1058
  %1060 = load i32, ptr %11, align 4, !tbaa !5
  %1061 = add nsw i32 %1059, %1060
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds float, ptr %1056, i64 %1062
  store float %1055, ptr %1063, align 4, !tbaa !13
  %1064 = load ptr, ptr %40, align 8, !tbaa !9
  %1065 = load i32, ptr %10, align 4, !tbaa !5
  %1066 = load i32, ptr %55, align 4, !tbaa !5
  %1067 = mul nsw i32 %1065, %1066
  %1068 = load i32, ptr %11, align 4, !tbaa !5
  %1069 = add nsw i32 %1067, %1068
  %1070 = sext i32 %1069 to i64
  %1071 = getelementptr inbounds i8, ptr %1064, i64 %1070
  %1072 = load i8, ptr %1071, align 1, !tbaa !17
  %1073 = call float @upconvert_hf8(i8 noundef zeroext %1072)
  %1074 = load ptr, ptr %19, align 8, !tbaa !9
  %1075 = load i32, ptr %10, align 4, !tbaa !5
  %1076 = load i32, ptr %55, align 4, !tbaa !5
  %1077 = mul nsw i32 %1075, %1076
  %1078 = load i32, ptr %11, align 4, !tbaa !5
  %1079 = add nsw i32 %1077, %1078
  %1080 = sext i32 %1079 to i64
  %1081 = getelementptr inbounds float, ptr %1074, i64 %1080
  store float %1073, ptr %1081, align 4, !tbaa !13
  br label %1082

1082:                                             ; preds = %991, %988
  br label %1083

1083:                                             ; preds = %1082
  %1084 = load i32, ptr %11, align 4, !tbaa !5
  %1085 = add nsw i32 %1084, 1
  store i32 %1085, ptr %11, align 4, !tbaa !5
  br label %325, !llvm.loop !18

1086:                                             ; preds = %325
  br label %1087

1087:                                             ; preds = %1086
  %1088 = load i32, ptr %10, align 4, !tbaa !5
  %1089 = add nsw i32 %1088, 1
  store i32 %1089, ptr %10, align 4, !tbaa !5
  br label %320, !llvm.loop !20

1090:                                             ; preds = %320
  %1091 = load ptr, ptr %15, align 8, !tbaa !9
  %1092 = getelementptr inbounds [4 x %struct.libxsmm_matrix_arg], ptr %20, i64 0, i64 0
  %1093 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1092, i32 0, i32 0
  store ptr %1091, ptr %1093, align 16, !tbaa !21
  %1094 = load ptr, ptr %16, align 8, !tbaa !9
  %1095 = getelementptr inbounds [4 x %struct.libxsmm_matrix_arg], ptr %20, i64 0, i64 1
  %1096 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1095, i32 0, i32 0
  store ptr %1094, ptr %1096, align 16, !tbaa !21
  %1097 = load ptr, ptr %17, align 8, !tbaa !9
  %1098 = getelementptr inbounds [4 x %struct.libxsmm_matrix_arg], ptr %20, i64 0, i64 2
  %1099 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1098, i32 0, i32 0
  store ptr %1097, ptr %1099, align 16, !tbaa !21
  %1100 = load ptr, ptr %21, align 8, !tbaa !9
  %1101 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %41, i64 0, i64 0
  %1102 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1101, i32 0, i32 0
  store ptr %1100, ptr %1102, align 16, !tbaa !21
  %1103 = load ptr, ptr %22, align 8, !tbaa !9
  %1104 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %41, i64 0, i64 1
  %1105 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1104, i32 0, i32 0
  store ptr %1103, ptr %1105, align 16, !tbaa !21
  %1106 = load ptr, ptr %23, align 8, !tbaa !9
  %1107 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %41, i64 0, i64 2
  %1108 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1107, i32 0, i32 0
  store ptr %1106, ptr %1108, align 16, !tbaa !21
  %1109 = load ptr, ptr %26, align 8, !tbaa !9
  %1110 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %42, i64 0, i64 0
  %1111 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1110, i32 0, i32 0
  store ptr %1109, ptr %1111, align 16, !tbaa !21
  %1112 = load ptr, ptr %27, align 8, !tbaa !9
  %1113 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %42, i64 0, i64 1
  %1114 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1113, i32 0, i32 0
  store ptr %1112, ptr %1114, align 16, !tbaa !21
  %1115 = load ptr, ptr %28, align 8, !tbaa !9
  %1116 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %42, i64 0, i64 2
  %1117 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1116, i32 0, i32 0
  store ptr %1115, ptr %1117, align 16, !tbaa !21
  %1118 = load ptr, ptr %31, align 8, !tbaa !9
  %1119 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %43, i64 0, i64 0
  %1120 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1119, i32 0, i32 0
  store ptr %1118, ptr %1120, align 16, !tbaa !21
  %1121 = load ptr, ptr %32, align 8, !tbaa !9
  %1122 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %43, i64 0, i64 1
  %1123 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1122, i32 0, i32 0
  store ptr %1121, ptr %1123, align 16, !tbaa !21
  %1124 = load ptr, ptr %33, align 8, !tbaa !9
  %1125 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %43, i64 0, i64 2
  %1126 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1125, i32 0, i32 0
  store ptr %1124, ptr %1126, align 16, !tbaa !21
  %1127 = load ptr, ptr %36, align 8, !tbaa !9
  %1128 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %44, i64 0, i64 0
  %1129 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1128, i32 0, i32 0
  store ptr %1127, ptr %1129, align 16, !tbaa !21
  %1130 = load ptr, ptr %37, align 8, !tbaa !9
  %1131 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %44, i64 0, i64 1
  %1132 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1131, i32 0, i32 0
  store ptr %1130, ptr %1132, align 16, !tbaa !21
  %1133 = load ptr, ptr %38, align 8, !tbaa !9
  %1134 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %44, i64 0, i64 2
  %1135 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1134, i32 0, i32 0
  store ptr %1133, ptr %1135, align 16, !tbaa !21
  %1136 = call i32 @libxsmm_meqn_create()
  store i32 %1136, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %1137 = load i32, ptr %8, align 4, !tbaa !5
  %1138 = call i64 @libxsmm_create_meqn_op_metadata(i32 noundef %1137, i32 noundef -1)
  store i64 %1138, ptr %60, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %46, ptr align 4 %60, i64 8, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #9
  %1139 = load i32, ptr %53, align 4, !tbaa !5
  %1140 = load i32, ptr %54, align 4, !tbaa !5
  %1141 = load i32, ptr %55, align 4, !tbaa !5
  %1142 = load i32, ptr %57, align 4, !tbaa !5
  %1143 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %1139, i32 noundef %1140, i32 noundef %1141, i32 noundef %1142)
  %1144 = getelementptr inbounds { i64, i64 }, ptr %61, i32 0, i32 0
  %1145 = extractvalue { i64, i64 } %1143, 0
  store i64 %1145, ptr %1144, align 4
  %1146 = getelementptr inbounds { i64, i64 }, ptr %61, i32 0, i32 1
  %1147 = extractvalue { i64, i64 } %1143, 1
  store i64 %1147, ptr %1146, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 4 %61, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #9
  %1148 = load i32, ptr %53, align 4, !tbaa !5
  %1149 = load i32, ptr %54, align 4, !tbaa !5
  %1150 = load i32, ptr %55, align 4, !tbaa !5
  %1151 = load i32, ptr %58, align 4, !tbaa !5
  %1152 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %1148, i32 noundef %1149, i32 noundef %1150, i32 noundef %1151)
  %1153 = getelementptr inbounds { i64, i64 }, ptr %62, i32 0, i32 0
  %1154 = extractvalue { i64, i64 } %1152, 0
  store i64 %1154, ptr %1153, align 4
  %1155 = getelementptr inbounds { i64, i64 }, ptr %62, i32 0, i32 1
  %1156 = extractvalue { i64, i64 } %1152, 1
  store i64 %1156, ptr %1155, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 4 %62, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #9
  %1157 = load i64, ptr %46, align 4
  %1158 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1157, i32 noundef 5, i32 noundef 1, i32 noundef 1)
  %1159 = load i32, ptr %56, align 4, !tbaa !5
  %1160 = icmp ne i32 %1159, 0
  br i1 %1160, label %1161, label %1165

1161:                                             ; preds = %1090
  %1162 = load i32, ptr %58, align 4, !tbaa !5
  %1163 = load i64, ptr %46, align 4
  %1164 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1163, i32 noundef 1, i32 noundef %1162, i32 noundef 0)
  br label %1165

1165:                                             ; preds = %1161, %1090
  %1166 = load i64, ptr %46, align 4
  %1167 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %1166, i32 noundef 1, i32 noundef 1, i32 noundef 0)
  %1168 = load i64, ptr %46, align 4
  %1169 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1168, i32 noundef 14, i32 noundef 1, i32 noundef 0)
  %1170 = load i64, ptr %46, align 4
  %1171 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %1170, i32 noundef 3, i32 noundef 1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %1172 = load i32, ptr %8, align 4, !tbaa !5
  %1173 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %1172, i32 noundef 0)
  store i64 %1173, ptr %63, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %63, i64 8, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  %1174 = load i64, ptr %45, align 4
  %1175 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 0
  %1176 = load i64, ptr %1175, align 4
  %1177 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 1
  %1178 = load i64, ptr %1177, align 4
  %1179 = getelementptr inbounds { i64, i64 }, ptr %49, i32 0, i32 0
  %1180 = load i64, ptr %1179, align 4
  %1181 = getelementptr inbounds { i64, i64 }, ptr %49, i32 0, i32 1
  %1182 = load i64, ptr %1181, align 4
  %1183 = call i32 @libxsmm_meqn_push_back_arg(i64 %1174, i64 %1176, i64 %1178, i64 %1180, i64 %1182)
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %1184 = load i32, ptr %8, align 4, !tbaa !5
  %1185 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %1184, i32 noundef 1)
  store i64 %1185, ptr %64, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %64, i64 8, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  %1186 = load i64, ptr %45, align 4
  %1187 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 0
  %1188 = load i64, ptr %1187, align 4
  %1189 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 1
  %1190 = load i64, ptr %1189, align 4
  %1191 = getelementptr inbounds { i64, i64 }, ptr %49, i32 0, i32 0
  %1192 = load i64, ptr %1191, align 4
  %1193 = getelementptr inbounds { i64, i64 }, ptr %49, i32 0, i32 1
  %1194 = load i64, ptr %1193, align 4
  %1195 = call i32 @libxsmm_meqn_push_back_arg(i64 %1186, i64 %1188, i64 %1190, i64 %1192, i64 %1194)
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %1196 = load i32, ptr %8, align 4, !tbaa !5
  %1197 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %1196, i32 noundef 2)
  store i64 %1197, ptr %65, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %65, i64 8, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  %1198 = load i64, ptr %45, align 4
  %1199 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 0
  %1200 = load i64, ptr %1199, align 4
  %1201 = getelementptr inbounds { i64, i64 }, ptr %47, i32 0, i32 1
  %1202 = load i64, ptr %1201, align 4
  %1203 = getelementptr inbounds { i64, i64 }, ptr %49, i32 0, i32 0
  %1204 = load i64, ptr %1203, align 4
  %1205 = getelementptr inbounds { i64, i64 }, ptr %49, i32 0, i32 1
  %1206 = load i64, ptr %1205, align 4
  %1207 = call i32 @libxsmm_meqn_push_back_arg(i64 %1198, i64 %1200, i64 %1202, i64 %1204, i64 %1206)
  %1208 = load i32, ptr %8, align 4, !tbaa !5
  %1209 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 0
  %1210 = load i64, ptr %1209, align 4
  %1211 = getelementptr inbounds { i64, i64 }, ptr %48, i32 0, i32 1
  %1212 = load i64, ptr %1211, align 4
  %1213 = call ptr @libxsmm_dispatch_meqn(i32 noundef %1208, i64 %1210, i64 %1212)
  store ptr %1213, ptr %9, align 8, !tbaa !9
  %1214 = load ptr, ptr %9, align 8, !tbaa !9
  %1215 = call i32 @libxsmm_get_kernel_info(ptr noundef %1214, ptr noundef @info)
  %1216 = load i32, ptr getelementptr inbounds (%struct.libxsmm_kernel_info, ptr @info, i32 0, i32 3), align 8, !tbaa !25
  store i32 %1216, ptr @is_reference_kernel, align 4, !tbaa !5
  %1217 = load ptr, ptr %9, align 8, !tbaa !9
  %1218 = icmp eq ptr %1217, null
  br i1 %1218, label %1219, label %1222

1219:                                             ; preds = %1165
  %1220 = load ptr, ptr @stderr, align 8, !tbaa !9
  %1221 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1220, ptr noundef @.str) #9
  call void @exit(i32 noundef -1) #11
  unreachable

1222:                                             ; preds = %1165
  %1223 = load i32, ptr %57, align 4, !tbaa !5
  %1224 = icmp eq i32 %1223, 1
  br i1 %1224, label %1225, label %1228

1225:                                             ; preds = %1222
  %1226 = getelementptr inbounds [4 x %struct.libxsmm_matrix_arg], ptr %20, i64 0, i64 0
  %1227 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %1226, ptr %1227, align 8, !tbaa !28
  br label %1256

1228:                                             ; preds = %1222
  %1229 = load i32, ptr %57, align 4, !tbaa !5
  %1230 = icmp eq i32 %1229, 2
  br i1 %1230, label %1231, label %1234

1231:                                             ; preds = %1228
  %1232 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %41, i64 0, i64 0
  %1233 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %1232, ptr %1233, align 8, !tbaa !28
  br label %1255

1234:                                             ; preds = %1228
  %1235 = load i32, ptr %57, align 4, !tbaa !5
  %1236 = icmp eq i32 %1235, 3
  br i1 %1236, label %1237, label %1240

1237:                                             ; preds = %1234
  %1238 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %42, i64 0, i64 0
  %1239 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %1238, ptr %1239, align 8, !tbaa !28
  br label %1254

1240:                                             ; preds = %1234
  %1241 = load i32, ptr %57, align 4, !tbaa !5
  %1242 = icmp eq i32 %1241, 4
  br i1 %1242, label %1243, label %1246

1243:                                             ; preds = %1240
  %1244 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %43, i64 0, i64 0
  %1245 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %1244, ptr %1245, align 8, !tbaa !28
  br label %1253

1246:                                             ; preds = %1240
  %1247 = load i32, ptr %57, align 4, !tbaa !5
  %1248 = icmp eq i32 %1247, 5
  br i1 %1248, label %1249, label %1252

1249:                                             ; preds = %1246
  %1250 = getelementptr inbounds [3 x %struct.libxsmm_matrix_arg], ptr %44, i64 0, i64 0
  %1251 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 1
  store ptr %1250, ptr %1251, align 8, !tbaa !28
  br label %1252

1252:                                             ; preds = %1249, %1246
  br label %1253

1253:                                             ; preds = %1252, %1243
  br label %1254

1254:                                             ; preds = %1253, %1237
  br label %1255

1255:                                             ; preds = %1254, %1231
  br label %1256

1256:                                             ; preds = %1255, %1225
  %1257 = load i32, ptr %58, align 4, !tbaa !5
  %1258 = icmp eq i32 %1257, 1
  br i1 %1258, label %1259, label %1263

1259:                                             ; preds = %1256
  %1260 = load ptr, ptr %19, align 8, !tbaa !9
  %1261 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %1262 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1261, i32 0, i32 0
  store ptr %1260, ptr %1262, align 8, !tbaa !30
  br label %1295

1263:                                             ; preds = %1256
  %1264 = load i32, ptr %58, align 4, !tbaa !5
  %1265 = icmp eq i32 %1264, 2
  br i1 %1265, label %1266, label %1270

1266:                                             ; preds = %1263
  %1267 = load ptr, ptr %25, align 8, !tbaa !9
  %1268 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %1269 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1268, i32 0, i32 0
  store ptr %1267, ptr %1269, align 8, !tbaa !30
  br label %1294

1270:                                             ; preds = %1263
  %1271 = load i32, ptr %58, align 4, !tbaa !5
  %1272 = icmp eq i32 %1271, 3
  br i1 %1272, label %1273, label %1277

1273:                                             ; preds = %1270
  %1274 = load ptr, ptr %30, align 8, !tbaa !9
  %1275 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %1276 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1275, i32 0, i32 0
  store ptr %1274, ptr %1276, align 8, !tbaa !30
  br label %1293

1277:                                             ; preds = %1270
  %1278 = load i32, ptr %58, align 4, !tbaa !5
  %1279 = icmp eq i32 %1278, 4
  br i1 %1279, label %1280, label %1284

1280:                                             ; preds = %1277
  %1281 = load ptr, ptr %35, align 8, !tbaa !9
  %1282 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %1283 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1282, i32 0, i32 0
  store ptr %1281, ptr %1283, align 8, !tbaa !30
  br label %1292

1284:                                             ; preds = %1277
  %1285 = load i32, ptr %58, align 4, !tbaa !5
  %1286 = icmp eq i32 %1285, 5
  br i1 %1286, label %1287, label %1291

1287:                                             ; preds = %1284
  %1288 = load ptr, ptr %40, align 8, !tbaa !9
  %1289 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %1290 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1289, i32 0, i32 0
  store ptr %1288, ptr %1290, align 8, !tbaa !30
  br label %1291

1291:                                             ; preds = %1287, %1284
  br label %1292

1292:                                             ; preds = %1291, %1280
  br label %1293

1293:                                             ; preds = %1292, %1273
  br label %1294

1294:                                             ; preds = %1293, %1266
  br label %1295

1295:                                             ; preds = %1294, %1259
  %1296 = load ptr, ptr %52, align 8, !tbaa !9
  %1297 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %13, i32 0, i32 2
  %1298 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1297, i32 0, i32 1
  store ptr %1296, ptr %1298, align 8, !tbaa !31
  %1299 = load ptr, ptr %9, align 8, !tbaa !9
  call void %1299(ptr noundef %13)
  %1300 = load i32, ptr %53, align 4, !tbaa !5
  %1301 = load i32, ptr %54, align 4, !tbaa !5
  %1302 = load i32, ptr %55, align 4, !tbaa !5
  %1303 = load ptr, ptr %15, align 8, !tbaa !9
  %1304 = load ptr, ptr %16, align 8, !tbaa !9
  %1305 = load ptr, ptr %17, align 8, !tbaa !9
  %1306 = load ptr, ptr %51, align 8, !tbaa !9
  %1307 = load ptr, ptr %18, align 8, !tbaa !9
  call void @eqn0_f32f32(i32 noundef %1300, i32 noundef %1301, i32 noundef %1302, ptr noundef %1303, ptr noundef %1304, ptr noundef %1305, ptr noundef %1306, ptr noundef %1307)
  %1308 = load i32, ptr %58, align 4, !tbaa !5
  %1309 = icmp eq i32 %1308, 2
  br i1 %1309, label %1310, label %1332

1310:                                             ; preds = %1295
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1311

1311:                                             ; preds = %1328, %1310
  %1312 = load i32, ptr %10, align 4, !tbaa !5
  %1313 = load i32, ptr %54, align 4, !tbaa !5
  %1314 = load i32, ptr %55, align 4, !tbaa !5
  %1315 = mul nsw i32 %1313, %1314
  %1316 = icmp slt i32 %1312, %1315
  br i1 %1316, label %1317, label %1331

1317:                                             ; preds = %1311
  call void @llvm.lifetime.start.p0(i64 2, ptr %66) #9
  %1318 = load ptr, ptr %18, align 8, !tbaa !9
  %1319 = load i32, ptr %10, align 4, !tbaa !5
  %1320 = sext i32 %1319 to i64
  %1321 = getelementptr inbounds float, ptr %1318, i64 %1320
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %1321, ptr noundef %66, i64 noundef 1)
  %1322 = load i16, ptr %66, align 2, !tbaa !15
  %1323 = call float @upconvert_bf16(i16 noundef zeroext %1322)
  %1324 = load ptr, ptr %18, align 8, !tbaa !9
  %1325 = load i32, ptr %10, align 4, !tbaa !5
  %1326 = sext i32 %1325 to i64
  %1327 = getelementptr inbounds float, ptr %1324, i64 %1326
  store float %1323, ptr %1327, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %66) #9
  br label %1328

1328:                                             ; preds = %1317
  %1329 = load i32, ptr %10, align 4, !tbaa !5
  %1330 = add nsw i32 %1329, 1
  store i32 %1330, ptr %10, align 4, !tbaa !5
  br label %1311, !llvm.loop !32

1331:                                             ; preds = %1311
  br label %1410

1332:                                             ; preds = %1295
  %1333 = load i32, ptr %58, align 4, !tbaa !5
  %1334 = icmp eq i32 %1333, 4
  br i1 %1334, label %1335, label %1357

1335:                                             ; preds = %1332
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1336

1336:                                             ; preds = %1353, %1335
  %1337 = load i32, ptr %10, align 4, !tbaa !5
  %1338 = load i32, ptr %54, align 4, !tbaa !5
  %1339 = load i32, ptr %55, align 4, !tbaa !5
  %1340 = mul nsw i32 %1338, %1339
  %1341 = icmp slt i32 %1337, %1340
  br i1 %1341, label %1342, label %1356

1342:                                             ; preds = %1336
  call void @llvm.lifetime.start.p0(i64 1, ptr %67) #9
  %1343 = load ptr, ptr %18, align 8, !tbaa !9
  %1344 = load i32, ptr %10, align 4, !tbaa !5
  %1345 = sext i32 %1344 to i64
  %1346 = getelementptr inbounds float, ptr %1343, i64 %1345
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %1346, ptr noundef %67, i64 noundef 1)
  %1347 = load i8, ptr %67, align 1, !tbaa !17
  %1348 = call float @upconvert_bf8(i8 noundef zeroext %1347)
  %1349 = load ptr, ptr %18, align 8, !tbaa !9
  %1350 = load i32, ptr %10, align 4, !tbaa !5
  %1351 = sext i32 %1350 to i64
  %1352 = getelementptr inbounds float, ptr %1349, i64 %1351
  store float %1348, ptr %1352, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #9
  br label %1353

1353:                                             ; preds = %1342
  %1354 = load i32, ptr %10, align 4, !tbaa !5
  %1355 = add nsw i32 %1354, 1
  store i32 %1355, ptr %10, align 4, !tbaa !5
  br label %1336, !llvm.loop !33

1356:                                             ; preds = %1336
  br label %1409

1357:                                             ; preds = %1332
  %1358 = load i32, ptr %58, align 4, !tbaa !5
  %1359 = icmp eq i32 %1358, 3
  br i1 %1359, label %1360, label %1382

1360:                                             ; preds = %1357
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1361

1361:                                             ; preds = %1378, %1360
  %1362 = load i32, ptr %10, align 4, !tbaa !5
  %1363 = load i32, ptr %54, align 4, !tbaa !5
  %1364 = load i32, ptr %55, align 4, !tbaa !5
  %1365 = mul nsw i32 %1363, %1364
  %1366 = icmp slt i32 %1362, %1365
  br i1 %1366, label %1367, label %1381

1367:                                             ; preds = %1361
  call void @llvm.lifetime.start.p0(i64 2, ptr %68) #9
  %1368 = load ptr, ptr %18, align 8, !tbaa !9
  %1369 = load i32, ptr %10, align 4, !tbaa !5
  %1370 = sext i32 %1369 to i64
  %1371 = getelementptr inbounds float, ptr %1368, i64 %1370
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %1371, ptr noundef %68, i64 noundef 1)
  %1372 = load i16, ptr %68, align 2, !tbaa !15
  %1373 = call float @upconvert_f16(i16 noundef zeroext %1372)
  %1374 = load ptr, ptr %18, align 8, !tbaa !9
  %1375 = load i32, ptr %10, align 4, !tbaa !5
  %1376 = sext i32 %1375 to i64
  %1377 = getelementptr inbounds float, ptr %1374, i64 %1376
  store float %1373, ptr %1377, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %68) #9
  br label %1378

1378:                                             ; preds = %1367
  %1379 = load i32, ptr %10, align 4, !tbaa !5
  %1380 = add nsw i32 %1379, 1
  store i32 %1380, ptr %10, align 4, !tbaa !5
  br label %1361, !llvm.loop !34

1381:                                             ; preds = %1361
  br label %1408

1382:                                             ; preds = %1357
  %1383 = load i32, ptr %58, align 4, !tbaa !5
  %1384 = icmp eq i32 %1383, 5
  br i1 %1384, label %1385, label %1407

1385:                                             ; preds = %1382
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1386

1386:                                             ; preds = %1403, %1385
  %1387 = load i32, ptr %10, align 4, !tbaa !5
  %1388 = load i32, ptr %54, align 4, !tbaa !5
  %1389 = load i32, ptr %55, align 4, !tbaa !5
  %1390 = mul nsw i32 %1388, %1389
  %1391 = icmp slt i32 %1387, %1390
  br i1 %1391, label %1392, label %1406

1392:                                             ; preds = %1386
  call void @llvm.lifetime.start.p0(i64 1, ptr %69) #9
  %1393 = load ptr, ptr %18, align 8, !tbaa !9
  %1394 = load i32, ptr %10, align 4, !tbaa !5
  %1395 = sext i32 %1394 to i64
  %1396 = getelementptr inbounds float, ptr %1393, i64 %1395
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %1396, ptr noundef %69, i64 noundef 1)
  %1397 = load i8, ptr %69, align 1, !tbaa !17
  %1398 = call float @upconvert_hf8(i8 noundef zeroext %1397)
  %1399 = load ptr, ptr %18, align 8, !tbaa !9
  %1400 = load i32, ptr %10, align 4, !tbaa !5
  %1401 = sext i32 %1400 to i64
  %1402 = getelementptr inbounds float, ptr %1399, i64 %1401
  store float %1398, ptr %1402, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #9
  br label %1403

1403:                                             ; preds = %1392
  %1404 = load i32, ptr %10, align 4, !tbaa !5
  %1405 = add nsw i32 %1404, 1
  store i32 %1405, ptr %10, align 4, !tbaa !5
  br label %1386, !llvm.loop !35

1406:                                             ; preds = %1386
  br label %1407

1407:                                             ; preds = %1406, %1382
  br label %1408

1408:                                             ; preds = %1407, %1381
  br label %1409

1409:                                             ; preds = %1408, %1356
  br label %1410

1410:                                             ; preds = %1409, %1331
  %1411 = load i32, ptr %56, align 4, !tbaa !5
  call void @print_dt_info(i32 noundef %1411)
  %1412 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  %1413 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %1414 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %1415 = load i32, ptr %58, align 4, !tbaa !5
  %1416 = icmp eq i32 %1415, 2
  br i1 %1416, label %1417, label %1439

1417:                                             ; preds = %1410
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1418

1418:                                             ; preds = %1435, %1417
  %1419 = load i32, ptr %10, align 4, !tbaa !5
  %1420 = load i32, ptr %54, align 4, !tbaa !5
  %1421 = load i32, ptr %55, align 4, !tbaa !5
  %1422 = mul nsw i32 %1420, %1421
  %1423 = icmp slt i32 %1419, %1422
  br i1 %1423, label %1424, label %1438

1424:                                             ; preds = %1418
  %1425 = load ptr, ptr %25, align 8, !tbaa !9
  %1426 = load i32, ptr %10, align 4, !tbaa !5
  %1427 = sext i32 %1426 to i64
  %1428 = getelementptr inbounds i16, ptr %1425, i64 %1427
  %1429 = load i16, ptr %1428, align 2, !tbaa !15
  %1430 = call float @upconvert_bf16(i16 noundef zeroext %1429)
  %1431 = load ptr, ptr %19, align 8, !tbaa !9
  %1432 = load i32, ptr %10, align 4, !tbaa !5
  %1433 = sext i32 %1432 to i64
  %1434 = getelementptr inbounds float, ptr %1431, i64 %1433
  store float %1430, ptr %1434, align 4, !tbaa !13
  br label %1435

1435:                                             ; preds = %1424
  %1436 = load i32, ptr %10, align 4, !tbaa !5
  %1437 = add nsw i32 %1436, 1
  store i32 %1437, ptr %10, align 4, !tbaa !5
  br label %1418, !llvm.loop !36

1438:                                             ; preds = %1418
  br label %1517

1439:                                             ; preds = %1410
  %1440 = load i32, ptr %58, align 4, !tbaa !5
  %1441 = icmp eq i32 %1440, 3
  br i1 %1441, label %1442, label %1464

1442:                                             ; preds = %1439
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1443

1443:                                             ; preds = %1460, %1442
  %1444 = load i32, ptr %10, align 4, !tbaa !5
  %1445 = load i32, ptr %54, align 4, !tbaa !5
  %1446 = load i32, ptr %55, align 4, !tbaa !5
  %1447 = mul nsw i32 %1445, %1446
  %1448 = icmp slt i32 %1444, %1447
  br i1 %1448, label %1449, label %1463

1449:                                             ; preds = %1443
  %1450 = load ptr, ptr %30, align 8, !tbaa !9
  %1451 = load i32, ptr %10, align 4, !tbaa !5
  %1452 = sext i32 %1451 to i64
  %1453 = getelementptr inbounds i16, ptr %1450, i64 %1452
  %1454 = load i16, ptr %1453, align 2, !tbaa !15
  %1455 = call float @upconvert_f16(i16 noundef zeroext %1454)
  %1456 = load ptr, ptr %19, align 8, !tbaa !9
  %1457 = load i32, ptr %10, align 4, !tbaa !5
  %1458 = sext i32 %1457 to i64
  %1459 = getelementptr inbounds float, ptr %1456, i64 %1458
  store float %1455, ptr %1459, align 4, !tbaa !13
  br label %1460

1460:                                             ; preds = %1449
  %1461 = load i32, ptr %10, align 4, !tbaa !5
  %1462 = add nsw i32 %1461, 1
  store i32 %1462, ptr %10, align 4, !tbaa !5
  br label %1443, !llvm.loop !37

1463:                                             ; preds = %1443
  br label %1516

1464:                                             ; preds = %1439
  %1465 = load i32, ptr %58, align 4, !tbaa !5
  %1466 = icmp eq i32 %1465, 4
  br i1 %1466, label %1467, label %1489

1467:                                             ; preds = %1464
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1468

1468:                                             ; preds = %1485, %1467
  %1469 = load i32, ptr %10, align 4, !tbaa !5
  %1470 = load i32, ptr %54, align 4, !tbaa !5
  %1471 = load i32, ptr %55, align 4, !tbaa !5
  %1472 = mul nsw i32 %1470, %1471
  %1473 = icmp slt i32 %1469, %1472
  br i1 %1473, label %1474, label %1488

1474:                                             ; preds = %1468
  %1475 = load ptr, ptr %35, align 8, !tbaa !9
  %1476 = load i32, ptr %10, align 4, !tbaa !5
  %1477 = sext i32 %1476 to i64
  %1478 = getelementptr inbounds i8, ptr %1475, i64 %1477
  %1479 = load i8, ptr %1478, align 1, !tbaa !17
  %1480 = call float @upconvert_bf8(i8 noundef zeroext %1479)
  %1481 = load ptr, ptr %19, align 8, !tbaa !9
  %1482 = load i32, ptr %10, align 4, !tbaa !5
  %1483 = sext i32 %1482 to i64
  %1484 = getelementptr inbounds float, ptr %1481, i64 %1483
  store float %1480, ptr %1484, align 4, !tbaa !13
  br label %1485

1485:                                             ; preds = %1474
  %1486 = load i32, ptr %10, align 4, !tbaa !5
  %1487 = add nsw i32 %1486, 1
  store i32 %1487, ptr %10, align 4, !tbaa !5
  br label %1468, !llvm.loop !38

1488:                                             ; preds = %1468
  br label %1515

1489:                                             ; preds = %1464
  %1490 = load i32, ptr %58, align 4, !tbaa !5
  %1491 = icmp eq i32 %1490, 5
  br i1 %1491, label %1492, label %1514

1492:                                             ; preds = %1489
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1493

1493:                                             ; preds = %1510, %1492
  %1494 = load i32, ptr %10, align 4, !tbaa !5
  %1495 = load i32, ptr %54, align 4, !tbaa !5
  %1496 = load i32, ptr %55, align 4, !tbaa !5
  %1497 = mul nsw i32 %1495, %1496
  %1498 = icmp slt i32 %1494, %1497
  br i1 %1498, label %1499, label %1513

1499:                                             ; preds = %1493
  %1500 = load ptr, ptr %40, align 8, !tbaa !9
  %1501 = load i32, ptr %10, align 4, !tbaa !5
  %1502 = sext i32 %1501 to i64
  %1503 = getelementptr inbounds i8, ptr %1500, i64 %1502
  %1504 = load i8, ptr %1503, align 1, !tbaa !17
  %1505 = call float @upconvert_hf8(i8 noundef zeroext %1504)
  %1506 = load ptr, ptr %19, align 8, !tbaa !9
  %1507 = load i32, ptr %10, align 4, !tbaa !5
  %1508 = sext i32 %1507 to i64
  %1509 = getelementptr inbounds float, ptr %1506, i64 %1508
  store float %1505, ptr %1509, align 4, !tbaa !13
  br label %1510

1510:                                             ; preds = %1499
  %1511 = load i32, ptr %10, align 4, !tbaa !5
  %1512 = add nsw i32 %1511, 1
  store i32 %1512, ptr %10, align 4, !tbaa !5
  br label %1493, !llvm.loop !39

1513:                                             ; preds = %1493
  br label %1514

1514:                                             ; preds = %1513, %1489
  br label %1515

1515:                                             ; preds = %1514, %1488
  br label %1516

1516:                                             ; preds = %1515, %1463
  br label %1517

1517:                                             ; preds = %1516, %1438
  %1518 = load i32, ptr %55, align 4, !tbaa !5
  %1519 = load i32, ptr %54, align 4, !tbaa !5
  %1520 = mul nsw i32 %1518, %1519
  %1521 = load ptr, ptr %18, align 8, !tbaa !9
  %1522 = load ptr, ptr %19, align 8, !tbaa !9
  %1523 = call i32 @libxsmm_matdiff(ptr noundef %14, i32 noundef 1, i32 noundef %1520, i32 noundef 1, ptr noundef %1521, ptr noundef %1522, ptr noundef null, ptr noundef null)
  %1524 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 10
  %1525 = load double, ptr %1524, align 8, !tbaa !40
  %1526 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %1525)
  %1527 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 15
  %1528 = load double, ptr %1527, align 8, !tbaa !42
  %1529 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %1528)
  %1530 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 7
  %1531 = load double, ptr %1530, align 8, !tbaa !43
  %1532 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %1531)
  %1533 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 8
  %1534 = load double, ptr %1533, align 8, !tbaa !44
  %1535 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %1534)
  %1536 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 5
  %1537 = load double, ptr %1536, align 8, !tbaa !45
  %1538 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %1537)
  %1539 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 6
  %1540 = load double, ptr %1539, align 8, !tbaa !46
  %1541 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %1540)
  %1542 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 4
  %1543 = load double, ptr %1542, align 8, !tbaa !47
  %1544 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %1543)
  store i32 0, ptr %12, align 4, !tbaa !5
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %1545

1545:                                             ; preds = %1619, %1517
  %1546 = load i32, ptr %10, align 4, !tbaa !5
  %1547 = load i32, ptr %54, align 4, !tbaa !5
  %1548 = icmp slt i32 %1546, %1547
  br i1 %1548, label %1549, label %1622

1549:                                             ; preds = %1545
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %1550

1550:                                             ; preds = %1615, %1549
  %1551 = load i32, ptr %11, align 4, !tbaa !5
  %1552 = load i32, ptr %53, align 4, !tbaa !5
  %1553 = icmp slt i32 %1551, %1552
  br i1 %1553, label %1554, label %1618

1554:                                             ; preds = %1550
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #9
  %1555 = load ptr, ptr %51, align 8, !tbaa !9
  %1556 = load i32, ptr %10, align 4, !tbaa !5
  %1557 = load i32, ptr %50, align 4, !tbaa !5
  %1558 = mul nsw i32 %1556, %1557
  %1559 = load i32, ptr %11, align 4, !tbaa !5
  %1560 = sdiv i32 %1559, 8
  %1561 = add nsw i32 %1558, %1560
  %1562 = sext i32 %1561 to i64
  %1563 = getelementptr inbounds i8, ptr %1555, i64 %1562
  %1564 = load i8, ptr %1563, align 1, !tbaa !17
  %1565 = zext i8 %1564 to i32
  %1566 = load i32, ptr %11, align 4, !tbaa !5
  %1567 = srem i32 %1566, 8
  %1568 = shl i32 1, %1567
  %1569 = and i32 %1565, %1568
  store i32 %1569, ptr %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #9
  %1570 = load ptr, ptr %52, align 8, !tbaa !9
  %1571 = load i32, ptr %10, align 4, !tbaa !5
  %1572 = load i32, ptr %50, align 4, !tbaa !5
  %1573 = mul nsw i32 %1571, %1572
  %1574 = load i32, ptr %11, align 4, !tbaa !5
  %1575 = sdiv i32 %1574, 8
  %1576 = add nsw i32 %1573, %1575
  %1577 = sext i32 %1576 to i64
  %1578 = getelementptr inbounds i8, ptr %1570, i64 %1577
  %1579 = load i8, ptr %1578, align 1, !tbaa !17
  %1580 = zext i8 %1579 to i32
  %1581 = load i32, ptr %11, align 4, !tbaa !5
  %1582 = srem i32 %1581, 8
  %1583 = shl i32 1, %1582
  %1584 = and i32 %1580, %1583
  store i32 %1584, ptr %71, align 4, !tbaa !5
  %1585 = load i32, ptr %70, align 4, !tbaa !5
  %1586 = load i32, ptr %71, align 4, !tbaa !5
  %1587 = icmp ne i32 %1585, %1586
  br i1 %1587, label %1588, label %1614

1588:                                             ; preds = %1554
  %1589 = load i32, ptr %10, align 4, !tbaa !5
  %1590 = load i32, ptr %11, align 4, !tbaa !5
  %1591 = load ptr, ptr %51, align 8, !tbaa !9
  %1592 = load i32, ptr %10, align 4, !tbaa !5
  %1593 = load i32, ptr %50, align 4, !tbaa !5
  %1594 = mul nsw i32 %1592, %1593
  %1595 = load i32, ptr %11, align 4, !tbaa !5
  %1596 = sdiv i32 %1595, 8
  %1597 = add nsw i32 %1594, %1596
  %1598 = sext i32 %1597 to i64
  %1599 = getelementptr inbounds i8, ptr %1591, i64 %1598
  %1600 = load i8, ptr %1599, align 1, !tbaa !17
  %1601 = zext i8 %1600 to i32
  %1602 = load ptr, ptr %52, align 8, !tbaa !9
  %1603 = load i32, ptr %10, align 4, !tbaa !5
  %1604 = load i32, ptr %50, align 4, !tbaa !5
  %1605 = mul nsw i32 %1603, %1604
  %1606 = load i32, ptr %11, align 4, !tbaa !5
  %1607 = sdiv i32 %1606, 8
  %1608 = add nsw i32 %1605, %1607
  %1609 = sext i32 %1608 to i64
  %1610 = getelementptr inbounds i8, ptr %1602, i64 %1609
  %1611 = load i8, ptr %1610, align 1, !tbaa !17
  %1612 = zext i8 %1611 to i32
  %1613 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %1589, i32 noundef %1590, i32 noundef %1601, i32 noundef %1612)
  store i32 1, ptr %12, align 4, !tbaa !5
  br label %1614

1614:                                             ; preds = %1588, %1554
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  br label %1615

1615:                                             ; preds = %1614
  %1616 = load i32, ptr %11, align 4, !tbaa !5
  %1617 = add nsw i32 %1616, 1
  store i32 %1617, ptr %11, align 4, !tbaa !5
  br label %1550, !llvm.loop !48

1618:                                             ; preds = %1550
  br label %1619

1619:                                             ; preds = %1618
  %1620 = load i32, ptr %10, align 4, !tbaa !5
  %1621 = add nsw i32 %1620, 1
  store i32 %1621, ptr %10, align 4, !tbaa !5
  br label %1545, !llvm.loop !49

1622:                                             ; preds = %1545
  %1623 = load i32, ptr %12, align 4, !tbaa !5
  %1624 = icmp eq i32 %1623, 0
  br i1 %1624, label %1625, label %1627

1625:                                             ; preds = %1622
  %1626 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  br label %1629

1627:                                             ; preds = %1622
  %1628 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %1629

1629:                                             ; preds = %1627, %1625
  %1630 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %1631 = call i32 (ptr, ...) @printf(ptr noundef @.str.14)
  %1632 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %1633 = load i32, ptr %50, align 4, !tbaa !5
  %1634 = load i32, ptr %54, align 4, !tbaa !5
  %1635 = mul nsw i32 %1633, %1634
  %1636 = sdiv i32 %1635, 4
  %1637 = load ptr, ptr %51, align 8, !tbaa !9
  %1638 = load ptr, ptr %52, align 8, !tbaa !9
  %1639 = call i32 @libxsmm_matdiff(ptr noundef %14, i32 noundef 8, i32 noundef %1636, i32 noundef 1, ptr noundef %1637, ptr noundef %1638, ptr noundef null, ptr noundef null)
  %1640 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 10
  %1641 = load double, ptr %1640, align 8, !tbaa !40
  %1642 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, double noundef %1641)
  %1643 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 15
  %1644 = load double, ptr %1643, align 8, !tbaa !42
  %1645 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, double noundef %1644)
  %1646 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 7
  %1647 = load double, ptr %1646, align 8, !tbaa !43
  %1648 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %1647)
  %1649 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 8
  %1650 = load double, ptr %1649, align 8, !tbaa !44
  %1651 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, double noundef %1650)
  %1652 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 5
  %1653 = load double, ptr %1652, align 8, !tbaa !45
  %1654 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, double noundef %1653)
  %1655 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 6
  %1656 = load double, ptr %1655, align 8, !tbaa !46
  %1657 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %1656)
  %1658 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 4
  %1659 = load double, ptr %1658, align 8, !tbaa !47
  %1660 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %1659)
  %1661 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %14, i32 0, i32 4
  %1662 = load double, ptr %1661, align 8, !tbaa !47
  %1663 = load double, ptr %7, align 8, !tbaa !11
  %1664 = fcmp ogt double %1662, %1663
  br i1 %1664, label %1665, label %1666

1665:                                             ; preds = %1629
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %1666

1666:                                             ; preds = %1665, %1629
  %1667 = load ptr, ptr %15, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1667)
  %1668 = load ptr, ptr %16, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1668)
  %1669 = load ptr, ptr %17, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1669)
  %1670 = load ptr, ptr %18, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1670)
  %1671 = load ptr, ptr %19, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1671)
  %1672 = load ptr, ptr %21, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1672)
  %1673 = load ptr, ptr %22, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1673)
  %1674 = load ptr, ptr %23, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1674)
  %1675 = load ptr, ptr %24, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1675)
  %1676 = load ptr, ptr %25, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1676)
  %1677 = load ptr, ptr %26, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1677)
  %1678 = load ptr, ptr %27, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1678)
  %1679 = load ptr, ptr %28, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1679)
  %1680 = load ptr, ptr %29, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1680)
  %1681 = load ptr, ptr %30, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1681)
  %1682 = load ptr, ptr %31, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1682)
  %1683 = load ptr, ptr %32, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1683)
  %1684 = load ptr, ptr %33, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1684)
  %1685 = load ptr, ptr %34, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1685)
  %1686 = load ptr, ptr %35, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1686)
  %1687 = load ptr, ptr %36, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1687)
  %1688 = load ptr, ptr %37, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1688)
  %1689 = load ptr, ptr %38, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1689)
  %1690 = load ptr, ptr %39, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1690)
  %1691 = load ptr, ptr %40, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1691)
  %1692 = load i32, ptr %6, align 4, !tbaa !5
  %1693 = icmp eq i32 %1692, 0
  br i1 %1693, label %1694, label %1697

1694:                                             ; preds = %1666
  %1695 = load i32, ptr @is_reference_kernel, align 4, !tbaa !5
  %1696 = call i32 @libxsmm_return_success_code(i32 noundef %1695)
  br label %1699

1697:                                             ; preds = %1666
  %1698 = load i32, ptr %6, align 4, !tbaa !5
  br label %1699

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

; 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

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

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

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

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

declare void @libxsmm_matdiff_clear(ptr 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) #5

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

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

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

declare i32 @libxsmm_meqn_create() #2

declare i64 @libxsmm_create_meqn_op_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) #6

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

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_binary_op(i64, i32 noundef, i32 noundef, i32 noundef) #2

declare i64 @libxsmm_create_meqn_arg_metadata(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, ...) #7

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

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

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

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 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 = { 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 #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { 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, !10, i64 0}
!22 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!23 = !{i64 0, i64 4, !5, i64 4, i64 4, !5}
!24 = !{i64 0, i64 4, !5, i64 4, i64 4, !5, i64 8, i64 4, !5, i64 12, i64 4, !5}
!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 8}
!29 = !{!"libxsmm_meqn_param", !10, i64 0, !10, i64 8, !22, i64 16}
!30 = !{!29, !10, i64 16}
!31 = !{!29, !10, i64 24}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}
!40 = !{!41, !12, i64 80}
!41 = !{!"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}
!42 = !{!41, !12, i64 120}
!43 = !{!41, !12, i64 56}
!44 = !{!41, !12, i64 64}
!45 = !{!41, !12, i64 40}
!46 = !{!41, !12, i64 48}
!47 = !{!41, !12, i64 32}
!48 = distinct !{!48, !19}
!49 = distinct !{!49, !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 [35 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 [38 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [44 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 [4 x %struct.libxsmm_matrix_arg], align 16
  %6 = alloca [3 x %struct.libxsmm_matrix_arg], align 16
  %7 = alloca [3 x %struct.libxsmm_matrix_arg], align 16
  %8 = alloca [3 x %struct.libxsmm_matrix_arg], align 16
  %9 = alloca [3 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) #8
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %8) #8
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %9) #8
  %17 = tail call { i64, i64 } @libxsmm_create_matrix_arg_attributes(i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #8
  %18 = extractvalue { i64, i64 } %17, 0
  %19 = extractvalue { i64, i64 } %17, 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  store i32 1, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  store i32 1, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  store i32 1, ptr %12, align 4, !tbaa !5
  tail call void @libxsmm_init() #8
  %20 = icmp sgt i32 %0, 1
  br i1 %20, label %21, label %.thread647

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

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

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

34:                                               ; preds = %30
  %35 = getelementptr inbounds i8, ptr %1, i64 32
  %36 = load ptr, ptr %35, align 8, !tbaa !9
  %37 = tail call i32 @atoi(ptr nocapture noundef %36) #9
  br label %.thread647

.thread647:                                       ; preds = %2, %21, %25, %34, %30
  %.0631653 = phi i32 [ %33, %34 ], [ %33, %30 ], [ 64, %25 ], [ 64, %21 ], [ 64, %2 ]
  %.0629640644652 = phi i32 [ %24, %34 ], [ %24, %30 ], [ %24, %25 ], [ %24, %21 ], [ 64, %2 ]
  %.0630645651 = phi i32 [ %28, %34 ], [ %28, %30 ], [ %28, %25 ], [ 64, %21 ], [ 64, %2 ]
  %.0632 = phi i32 [ %37, %34 ], [ 0, %30 ], [ 0, %25 ], [ 0, %21 ], [ 0, %2 ]
  %38 = add nsw i32 %.0631653, 15
  %39 = srem i32 %38, 16
  %40 = sub nsw i32 %38, %39
  %41 = sdiv i32 %40, 8
  %42 = sext i32 %.0630645651 to i64
  %43 = sext i32 %41 to i64
  %44 = mul nsw i64 %43, %42
  %45 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %44, i64 noundef 64) #8
  %46 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %44, i64 noundef 64) #8
  tail call void @llvm.memset.p0.i64(ptr align 1 %45, i8 0, i64 %44, i1 false)
  tail call void @llvm.memset.p0.i64(ptr align 1 %46, i8 0, i64 %44, i1 false)
  %47 = shl nsw i64 %42, 2
  %48 = sext i32 %.0631653 to i64
  %49 = mul i64 %47, %48
  %50 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %49, i64 noundef 64) #8
  %51 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %49, i64 noundef 64) #8
  %52 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %49, i64 noundef 64) #8
  %53 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %49, i64 noundef 64) #8
  %54 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %49, i64 noundef 64) #8
  %55 = shl nsw i64 %42, 1
  %56 = mul i64 %55, %48
  %57 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %58 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %59 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %60 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %61 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %62 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %63 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %64 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %65 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %66 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %56, i64 noundef 64) #8
  %67 = mul nsw i64 %42, %48
  %68 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %69 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %70 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %71 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %72 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %73 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %74 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %75 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %76 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  %77 = tail call noalias ptr @libxsmm_aligned_malloc(i64 noundef %67, i64 noundef 64) #8
  call void @set_in_out_compute_dt(i32 noundef %.0632, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12)
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %4) #8
  %78 = icmp sgt i32 %.0630645651, 0
  %79 = icmp sgt i32 %.0631653, 0
  %or.cond = and i1 %78, %79
  br i1 %or.cond, label %.preheader672.us.preheader, label %._crit_edge675

.preheader672.us.preheader:                       ; preds = %.thread647
  %80 = zext nneg i32 %.0631653 to i64
  %wide.trip.count711 = zext nneg i32 %.0630645651 to i64
  br label %.preheader672.us

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

82:                                               ; preds = %.preheader672.us, %172
  %indvars.iv = phi i64 [ 0, %.preheader672.us ], [ %indvars.iv.next, %172 ]
  %83 = call double @libxsmm_rng_f64() #8
  %84 = fptrunc double %83 to float
  %85 = add nuw nsw i64 %indvars.iv, %81
  %86 = getelementptr inbounds float, ptr %50, i64 %85
  store float %84, ptr %86, align 4, !tbaa !11
  %87 = call double @libxsmm_rng_f64() #8
  %88 = fptrunc double %87 to float
  %89 = getelementptr inbounds float, ptr %51, i64 %85
  store float %88, ptr %89, align 4, !tbaa !11
  %90 = call double @libxsmm_rng_f64() #8
  %91 = fptrunc double %90 to float
  %92 = getelementptr inbounds float, ptr %52, i64 %85
  store float %91, ptr %92, align 4, !tbaa !11
  %93 = call double @libxsmm_rng_f64() #8
  %94 = fptrunc double %93 to float
  %95 = getelementptr inbounds float, ptr %53, i64 %85
  store float %94, ptr %95, align 4, !tbaa !11
  %96 = getelementptr inbounds float, ptr %54, i64 %85
  store float %94, ptr %96, align 4, !tbaa !11
  %97 = getelementptr inbounds i16, ptr %57, i64 %85
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %86, ptr noundef %97, i64 noundef 1) #8
  %98 = getelementptr inbounds i16, ptr %58, i64 %85
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %89, ptr noundef %98, i64 noundef 1) #8
  %99 = getelementptr inbounds i16, ptr %59, i64 %85
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %92, ptr noundef %99, i64 noundef 1) #8
  %100 = getelementptr inbounds i16, ptr %60, i64 %85
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %95, ptr noundef %100, i64 noundef 1) #8
  %101 = getelementptr inbounds i16, ptr %61, i64 %85
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %96, ptr noundef %101, i64 noundef 1) #8
  %102 = getelementptr inbounds i16, ptr %62, i64 %85
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %86, ptr noundef %102, i64 noundef 1) #8
  %103 = getelementptr inbounds i16, ptr %63, i64 %85
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %89, ptr noundef %103, i64 noundef 1) #8
  %104 = getelementptr inbounds i16, ptr %64, i64 %85
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %92, ptr noundef %104, i64 noundef 1) #8
  %105 = getelementptr inbounds i16, ptr %65, i64 %85
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %95, ptr noundef %105, i64 noundef 1) #8
  %106 = getelementptr inbounds i16, ptr %66, i64 %85
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef nonnull %96, ptr noundef %106, i64 noundef 1) #8
  %107 = getelementptr inbounds i8, ptr %68, i64 %85
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %86, ptr noundef %107, i64 noundef 1) #8
  %108 = getelementptr inbounds i8, ptr %69, i64 %85
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %89, ptr noundef %108, i64 noundef 1) #8
  %109 = getelementptr inbounds i8, ptr %70, i64 %85
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %92, ptr noundef %109, i64 noundef 1) #8
  %110 = getelementptr inbounds i8, ptr %71, i64 %85
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %95, ptr noundef %110, i64 noundef 1) #8
  %111 = getelementptr inbounds i8, ptr %72, i64 %85
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef nonnull %96, ptr noundef %111, i64 noundef 1) #8
  %112 = getelementptr inbounds i8, ptr %73, i64 %85
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %86, ptr noundef %112, i64 noundef 1) #8
  %113 = getelementptr inbounds i8, ptr %74, i64 %85
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %89, ptr noundef %113, i64 noundef 1) #8
  %114 = getelementptr inbounds i8, ptr %75, i64 %85
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %92, ptr noundef %114, i64 noundef 1) #8
  %115 = getelementptr inbounds i8, ptr %76, i64 %85
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %95, ptr noundef %115, i64 noundef 1) #8
  %116 = getelementptr inbounds i8, ptr %77, i64 %85
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef nonnull %96, ptr noundef %116, i64 noundef 1) #8
  %117 = load i32, ptr %10, align 4, !tbaa !5
  %118 = icmp eq i32 %117, 2
  br i1 %118, label %119, label %130

119:                                              ; preds = %82
  %120 = load i16, ptr %97, align 2, !tbaa !13
  %121 = call float @upconvert_bf16(i16 noundef zeroext %120)
  store float %121, ptr %86, align 4, !tbaa !11
  %122 = load i16, ptr %98, align 2, !tbaa !13
  %123 = call float @upconvert_bf16(i16 noundef zeroext %122)
  store float %123, ptr %89, align 4, !tbaa !11
  %124 = load i16, ptr %99, align 2, !tbaa !13
  %125 = call float @upconvert_bf16(i16 noundef zeroext %124)
  store float %125, ptr %92, align 4, !tbaa !11
  %126 = load i16, ptr %100, align 2, !tbaa !13
  %127 = call float @upconvert_bf16(i16 noundef zeroext %126)
  store float %127, ptr %95, align 4, !tbaa !11
  %128 = load i16, ptr %101, align 2, !tbaa !13
  %129 = call float @upconvert_bf16(i16 noundef zeroext %128)
  store float %129, ptr %96, align 4, !tbaa !11
  %.pr.us = load i32, ptr %10, align 4, !tbaa !5
  br label %130

130:                                              ; preds = %119, %82
  %131 = phi i32 [ %.pr.us, %119 ], [ %117, %82 ]
  %132 = icmp eq i32 %131, 3
  br i1 %132, label %133, label %144

133:                                              ; preds = %130
  %134 = load i16, ptr %102, align 2, !tbaa !13
  %135 = call float @upconvert_f16(i16 noundef zeroext %134)
  store float %135, ptr %86, align 4, !tbaa !11
  %136 = load i16, ptr %103, align 2, !tbaa !13
  %137 = call float @upconvert_f16(i16 noundef zeroext %136)
  store float %137, ptr %89, align 4, !tbaa !11
  %138 = load i16, ptr %104, align 2, !tbaa !13
  %139 = call float @upconvert_f16(i16 noundef zeroext %138)
  store float %139, ptr %92, align 4, !tbaa !11
  %140 = load i16, ptr %105, align 2, !tbaa !13
  %141 = call float @upconvert_f16(i16 noundef zeroext %140)
  store float %141, ptr %95, align 4, !tbaa !11
  %142 = load i16, ptr %106, align 2, !tbaa !13
  %143 = call float @upconvert_f16(i16 noundef zeroext %142)
  store float %143, ptr %96, align 4, !tbaa !11
  %.pre = load i32, ptr %10, align 4, !tbaa !5
  br label %144

144:                                              ; preds = %133, %130
  %145 = phi i32 [ %.pre, %133 ], [ %131, %130 ]
  %146 = icmp eq i32 %145, 4
  br i1 %146, label %147, label %158

147:                                              ; preds = %144
  %148 = load i8, ptr %107, align 1, !tbaa !15
  %149 = call float @upconvert_bf8(i8 noundef zeroext %148)
  store float %149, ptr %86, align 4, !tbaa !11
  %150 = load i8, ptr %108, align 1, !tbaa !15
  %151 = call float @upconvert_bf8(i8 noundef zeroext %150)
  store float %151, ptr %89, align 4, !tbaa !11
  %152 = load i8, ptr %109, align 1, !tbaa !15
  %153 = call float @upconvert_bf8(i8 noundef zeroext %152)
  store float %153, ptr %92, align 4, !tbaa !11
  %154 = load i8, ptr %110, align 1, !tbaa !15
  %155 = call float @upconvert_bf8(i8 noundef zeroext %154)
  store float %155, ptr %95, align 4, !tbaa !11
  %156 = load i8, ptr %111, align 1, !tbaa !15
  %157 = call float @upconvert_bf8(i8 noundef zeroext %156)
  store float %157, ptr %96, align 4, !tbaa !11
  %.pr654.us = load i32, ptr %10, align 4, !tbaa !5
  br label %158

158:                                              ; preds = %147, %144
  %159 = phi i32 [ %.pr654.us, %147 ], [ %145, %144 ]
  %160 = icmp eq i32 %159, 5
  br i1 %160, label %161, label %172

161:                                              ; preds = %158
  %162 = load i8, ptr %112, align 1, !tbaa !15
  %163 = call float @upconvert_hf8(i8 noundef zeroext %162)
  store float %163, ptr %86, align 4, !tbaa !11
  %164 = load i8, ptr %113, align 1, !tbaa !15
  %165 = call float @upconvert_hf8(i8 noundef zeroext %164)
  store float %165, ptr %89, align 4, !tbaa !11
  %166 = load i8, ptr %114, align 1, !tbaa !15
  %167 = call float @upconvert_hf8(i8 noundef zeroext %166)
  store float %167, ptr %92, align 4, !tbaa !11
  %168 = load i8, ptr %115, align 1, !tbaa !15
  %169 = call float @upconvert_hf8(i8 noundef zeroext %168)
  store float %169, ptr %95, align 4, !tbaa !11
  %170 = load i8, ptr %116, align 1, !tbaa !15
  %171 = call float @upconvert_hf8(i8 noundef zeroext %170)
  store float %171, ptr %96, align 4, !tbaa !11
  br label %172

172:                                              ; preds = %161, %158
  %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 = %172
  %indvars.iv.next709 = add nuw nsw i64 %indvars.iv708, 1
  %exitcond712.not = icmp eq i64 %indvars.iv.next709, %wide.trip.count711
  br i1 %exitcond712.not, label %._crit_edge675, label %.preheader672.us, !llvm.loop !18

._crit_edge675:                                   ; preds = %._crit_edge.us, %.thread647
  store ptr %50, ptr %5, align 16, !tbaa !19
  %173 = getelementptr inbounds i8, ptr %5, i64 48
  store ptr %51, ptr %173, align 16, !tbaa !19
  %174 = getelementptr inbounds i8, ptr %5, i64 96
  store ptr %52, ptr %174, align 16, !tbaa !19
  store ptr %57, ptr %6, align 16, !tbaa !19
  %175 = getelementptr inbounds i8, ptr %6, i64 48
  store ptr %58, ptr %175, align 16, !tbaa !19
  %176 = getelementptr inbounds i8, ptr %6, i64 96
  store ptr %59, ptr %176, align 16, !tbaa !19
  store ptr %62, ptr %7, align 16, !tbaa !19
  %177 = getelementptr inbounds i8, ptr %7, i64 48
  store ptr %63, ptr %177, align 16, !tbaa !19
  %178 = getelementptr inbounds i8, ptr %7, i64 96
  store ptr %64, ptr %178, align 16, !tbaa !19
  store ptr %68, ptr %8, align 16, !tbaa !19
  %179 = getelementptr inbounds i8, ptr %8, i64 48
  store ptr %69, ptr %179, align 16, !tbaa !19
  %180 = getelementptr inbounds i8, ptr %8, i64 96
  store ptr %70, ptr %180, align 16, !tbaa !19
  store ptr %73, ptr %9, align 16, !tbaa !19
  %181 = getelementptr inbounds i8, ptr %9, i64 48
  store ptr %74, ptr %181, align 16, !tbaa !19
  %182 = getelementptr inbounds i8, ptr %9, i64 96
  store ptr %75, ptr %182, align 16, !tbaa !19
  %183 = call i32 @libxsmm_meqn_create() #8
  %184 = call i64 @libxsmm_create_meqn_op_metadata(i32 noundef %183, i32 noundef -1) #8
  %185 = load i32, ptr %10, align 4, !tbaa !5
  %186 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %.0629640644652, i32 noundef %.0630645651, i32 noundef %.0631653, i32 noundef %185) #8
  %187 = extractvalue { i64, i64 } %186, 0
  %188 = extractvalue { i64, i64 } %186, 1
  %189 = load i32, ptr %11, align 4, !tbaa !5
  %190 = call { i64, i64 } @libxsmm_create_meqn_arg_shape(i32 noundef %.0629640644652, i32 noundef %.0630645651, i32 noundef %.0631653, i32 noundef %189) #8
  %191 = extractvalue { i64, i64 } %190, 0
  %192 = extractvalue { i64, i64 } %190, 1
  %193 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %184, i32 noundef 5, i32 noundef 1, i32 noundef 1) #8
  %.not = icmp eq i32 %.0632, 0
  br i1 %.not, label %197, label %194

194:                                              ; preds = %._crit_edge675
  %195 = load i32, ptr %11, align 4, !tbaa !5
  %196 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %184, i32 noundef 1, i32 noundef %195, i32 noundef 0) #8
  br label %197

197:                                              ; preds = %194, %._crit_edge675
  %198 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %184, i32 noundef 1, i32 noundef 1, i32 noundef 0) #8
  %199 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %184, i32 noundef 14, i32 noundef 1, i32 noundef 0) #8
  %200 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %184, i32 noundef 3, i32 noundef 1, i32 noundef 0) #8
  %201 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %183, i32 noundef 0) #8
  %202 = call i32 @libxsmm_meqn_push_back_arg(i64 %201, i64 %187, i64 %188, i64 %18, i64 %19) #8
  %203 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %183, i32 noundef 1) #8
  %204 = call i32 @libxsmm_meqn_push_back_arg(i64 %203, i64 %187, i64 %188, i64 %18, i64 %19) #8
  %205 = call i64 @libxsmm_create_meqn_arg_metadata(i32 noundef %183, i32 noundef 2) #8
  %206 = call i32 @libxsmm_meqn_push_back_arg(i64 %205, i64 %187, i64 %188, i64 %18, i64 %19) #8
  %207 = call ptr @libxsmm_dispatch_meqn(i32 noundef %183, i64 %191, i64 %192) #8
  %208 = call i32 @libxsmm_get_kernel_info(ptr noundef %207, ptr noundef nonnull @info) #8
  %209 = load i32, ptr getelementptr inbounds (i8, ptr @info, i64 16), align 8, !tbaa !21
  store i32 %209, ptr @is_reference_kernel, align 4, !tbaa !5
  %210 = icmp eq ptr %207, null
  br i1 %210, label %211, label %214

211:                                              ; preds = %197
  %212 = load ptr, ptr @stderr, align 8, !tbaa !9
  %213 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %212, ptr noundef nonnull @.str) #10
  call void @exit(i32 noundef -1) #11
  unreachable

214:                                              ; preds = %197
  %215 = load i32, ptr %10, align 4, !tbaa !5
  switch i32 %215, label %221 [
    i32 1, label %.sink.split
    i32 2, label %216
    i32 3, label %217
    i32 4, label %218
    i32 5, label %219
  ]

216:                                              ; preds = %214
  br label %.sink.split

217:                                              ; preds = %214
  br label %.sink.split

218:                                              ; preds = %214
  br label %.sink.split

219:                                              ; preds = %214
  br label %.sink.split

.sink.split:                                      ; preds = %214, %217, %219, %218, %216
  %.sink = phi ptr [ %6, %216 ], [ %8, %218 ], [ %9, %219 ], [ %7, %217 ], [ %5, %214 ]
  %220 = getelementptr inbounds i8, ptr %3, i64 8
  store ptr %.sink, ptr %220, align 8, !tbaa !24
  br label %221

221:                                              ; preds = %.sink.split, %214
  %222 = load i32, ptr %11, align 4, !tbaa !5
  switch i32 %222, label %228 [
    i32 1, label %.sink.split766
    i32 2, label %223
    i32 3, label %224
    i32 4, label %225
    i32 5, label %226
  ]

223:                                              ; preds = %221
  br label %.sink.split766

224:                                              ; preds = %221
  br label %.sink.split766

225:                                              ; preds = %221
  br label %.sink.split766

226:                                              ; preds = %221
  br label %.sink.split766

.sink.split766:                                   ; preds = %221, %224, %226, %225, %223
  %.sink767 = phi ptr [ %61, %223 ], [ %72, %225 ], [ %77, %226 ], [ %66, %224 ], [ %54, %221 ]
  %227 = getelementptr inbounds i8, ptr %3, i64 16
  store ptr %.sink767, ptr %227, align 8, !tbaa !26
  br label %228

228:                                              ; preds = %.sink.split766, %221
  %229 = getelementptr inbounds i8, ptr %3, i64 24
  store ptr %46, ptr %229, align 8, !tbaa !27
  call void %207(ptr noundef nonnull %3) #8
  call void @eqn0_f32f32(i32 noundef %.0629640644652, i32 noundef %.0630645651, i32 noundef %.0631653, ptr noundef %50, ptr noundef %51, ptr noundef %52, ptr noundef %45, ptr noundef %53)
  %230 = load i32, ptr %11, align 4, !tbaa !5
  switch i32 %230, label %.loopexit665 [
    i32 2, label %.preheader664
    i32 4, label %.preheader666
    i32 3, label %.preheader668
    i32 5, label %.preheader670
  ]

.preheader670:                                    ; preds = %228
  %231 = mul nsw i32 %.0630645651, %.0631653
  %232 = icmp sgt i32 %231, 0
  br i1 %232, label %.lr.ph.preheader, label %.loopexit665

.lr.ph.preheader:                                 ; preds = %.preheader670
  %wide.trip.count716 = zext nneg i32 %231 to i64
  br label %.lr.ph

.preheader668:                                    ; preds = %228
  %233 = mul nsw i32 %.0630645651, %.0631653
  %234 = icmp sgt i32 %233, 0
  br i1 %234, label %.lr.ph678.preheader, label %.loopexit665

.lr.ph678.preheader:                              ; preds = %.preheader668
  %wide.trip.count721 = zext nneg i32 %233 to i64
  br label %.lr.ph678

.preheader666:                                    ; preds = %228
  %235 = mul nsw i32 %.0630645651, %.0631653
  %236 = icmp sgt i32 %235, 0
  br i1 %236, label %.lr.ph680.preheader, label %.loopexit665

.lr.ph680.preheader:                              ; preds = %.preheader666
  %wide.trip.count726 = zext nneg i32 %235 to i64
  br label %.lr.ph680

.preheader664:                                    ; preds = %228
  %237 = mul nsw i32 %.0630645651, %.0631653
  %238 = icmp sgt i32 %237, 0
  br i1 %238, label %.lr.ph682.preheader, label %.loopexit665

.lr.ph682.preheader:                              ; preds = %.preheader664
  %wide.trip.count731 = zext nneg i32 %237 to i64
  br label %.lr.ph682

.lr.ph682:                                        ; preds = %.lr.ph682.preheader, %.lr.ph682
  %indvars.iv728 = phi i64 [ 0, %.lr.ph682.preheader ], [ %indvars.iv.next729, %.lr.ph682 ]
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %13) #8
  %239 = getelementptr inbounds float, ptr %53, i64 %indvars.iv728
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %239, ptr noundef nonnull %13, i64 noundef 1) #8
  %240 = load i16, ptr %13, align 2, !tbaa !13
  %241 = call float @upconvert_bf16(i16 noundef zeroext %240)
  store float %241, ptr %239, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %13) #8
  %indvars.iv.next729 = add nuw nsw i64 %indvars.iv728, 1
  %exitcond732.not = icmp eq i64 %indvars.iv.next729, %wide.trip.count731
  br i1 %exitcond732.not, label %.loopexit665, label %.lr.ph682, !llvm.loop !28

.lr.ph680:                                        ; preds = %.lr.ph680.preheader, %.lr.ph680
  %indvars.iv723 = phi i64 [ 0, %.lr.ph680.preheader ], [ %indvars.iv.next724, %.lr.ph680 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #8
  %242 = getelementptr inbounds float, ptr %53, i64 %indvars.iv723
  call void @libxsmm_rne_convert_fp32_bf8(ptr noundef %242, ptr noundef nonnull %14, i64 noundef 1) #8
  %243 = load i8, ptr %14, align 1, !tbaa !15
  %244 = call float @upconvert_bf8(i8 noundef zeroext %243)
  store float %244, ptr %242, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  %indvars.iv.next724 = add nuw nsw i64 %indvars.iv723, 1
  %exitcond727.not = icmp eq i64 %indvars.iv.next724, %wide.trip.count726
  br i1 %exitcond727.not, label %.loopexit665, label %.lr.ph680, !llvm.loop !29

.lr.ph678:                                        ; preds = %.lr.ph678.preheader, %.lr.ph678
  %indvars.iv718 = phi i64 [ 0, %.lr.ph678.preheader ], [ %indvars.iv.next719, %.lr.ph678 ]
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %15) #8
  %245 = getelementptr inbounds float, ptr %53, i64 %indvars.iv718
  call void @libxsmm_rne_convert_fp32_f16(ptr noundef %245, ptr noundef nonnull %15, i64 noundef 1) #8
  %246 = load i16, ptr %15, align 2, !tbaa !13
  %247 = call float @upconvert_f16(i16 noundef zeroext %246)
  store float %247, ptr %245, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %15) #8
  %indvars.iv.next719 = add nuw nsw i64 %indvars.iv718, 1
  %exitcond722.not = icmp eq i64 %indvars.iv.next719, %wide.trip.count721
  br i1 %exitcond722.not, label %.loopexit665, label %.lr.ph678, !llvm.loop !30

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv713 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next714, %.lr.ph ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #8
  %248 = getelementptr inbounds float, ptr %53, i64 %indvars.iv713
  call void @libxsmm_rne_convert_fp32_hf8(ptr noundef %248, ptr noundef nonnull %16, i64 noundef 1) #8
  %249 = load i8, ptr %16, align 1, !tbaa !15
  %250 = call float @upconvert_hf8(i8 noundef zeroext %249)
  store float %250, ptr %248, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  %indvars.iv.next714 = add nuw nsw i64 %indvars.iv713, 1
  %exitcond717.not = icmp eq i64 %indvars.iv.next714, %wide.trip.count716
  br i1 %exitcond717.not, label %.loopexit665, label %.lr.ph, !llvm.loop !31

.loopexit665:                                     ; preds = %.lr.ph, %.lr.ph678, %.lr.ph680, %.lr.ph682, %.preheader670, %.preheader668, %.preheader666, %.preheader664, %228
  call void @print_dt_info(i32 noundef %.0632)
  %251 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  %252 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %253 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %254 = load i32, ptr %11, align 4, !tbaa !5
  %.pre755 = mul nsw i32 %.0630645651, %.0631653
  switch i32 %254, label %.loopexit [
    i32 2, label %.preheader657
    i32 3, label %.preheader658
    i32 4, label %.preheader660
    i32 5, label %.preheader662
  ]

.preheader662:                                    ; preds = %.loopexit665
  %255 = icmp sgt i32 %.pre755, 0
  br i1 %255, label %.lr.ph684.preheader, label %.loopexit

.lr.ph684.preheader:                              ; preds = %.preheader662
  %wide.trip.count736 = zext nneg i32 %.pre755 to i64
  br label %.lr.ph684

.preheader660:                                    ; preds = %.loopexit665
  %256 = icmp sgt i32 %.pre755, 0
  br i1 %256, label %.lr.ph686.preheader, label %.loopexit

.lr.ph686.preheader:                              ; preds = %.preheader660
  %wide.trip.count741 = zext nneg i32 %.pre755 to i64
  br label %.lr.ph686

.preheader658:                                    ; preds = %.loopexit665
  %257 = icmp sgt i32 %.pre755, 0
  br i1 %257, label %.lr.ph688.preheader, label %.loopexit

.lr.ph688.preheader:                              ; preds = %.preheader658
  %wide.trip.count746 = zext nneg i32 %.pre755 to i64
  br label %.lr.ph688

.preheader657:                                    ; preds = %.loopexit665
  %258 = icmp sgt i32 %.pre755, 0
  br i1 %258, label %.lr.ph690.preheader, label %.loopexit

.lr.ph690.preheader:                              ; preds = %.preheader657
  %wide.trip.count751 = zext nneg i32 %.pre755 to i64
  br label %.lr.ph690

.lr.ph690:                                        ; preds = %.lr.ph690.preheader, %.lr.ph690
  %indvars.iv748 = phi i64 [ 0, %.lr.ph690.preheader ], [ %indvars.iv.next749, %.lr.ph690 ]
  %259 = getelementptr inbounds i16, ptr %61, i64 %indvars.iv748
  %260 = load i16, ptr %259, align 2, !tbaa !13
  %261 = call float @upconvert_bf16(i16 noundef zeroext %260)
  %262 = getelementptr inbounds float, ptr %54, i64 %indvars.iv748
  store float %261, ptr %262, align 4, !tbaa !11
  %indvars.iv.next749 = add nuw nsw i64 %indvars.iv748, 1
  %exitcond752.not = icmp eq i64 %indvars.iv.next749, %wide.trip.count751
  br i1 %exitcond752.not, label %.loopexit, label %.lr.ph690, !llvm.loop !32

.lr.ph688:                                        ; preds = %.lr.ph688.preheader, %.lr.ph688
  %indvars.iv743 = phi i64 [ 0, %.lr.ph688.preheader ], [ %indvars.iv.next744, %.lr.ph688 ]
  %263 = getelementptr inbounds i16, ptr %66, i64 %indvars.iv743
  %264 = load i16, ptr %263, align 2, !tbaa !13
  %265 = call float @upconvert_f16(i16 noundef zeroext %264)
  %266 = getelementptr inbounds float, ptr %54, i64 %indvars.iv743
  store float %265, ptr %266, align 4, !tbaa !11
  %indvars.iv.next744 = add nuw nsw i64 %indvars.iv743, 1
  %exitcond747.not = icmp eq i64 %indvars.iv.next744, %wide.trip.count746
  br i1 %exitcond747.not, label %.loopexit, label %.lr.ph688, !llvm.loop !33

.lr.ph686:                                        ; preds = %.lr.ph686.preheader, %.lr.ph686
  %indvars.iv738 = phi i64 [ 0, %.lr.ph686.preheader ], [ %indvars.iv.next739, %.lr.ph686 ]
  %267 = getelementptr inbounds i8, ptr %72, i64 %indvars.iv738
  %268 = load i8, ptr %267, align 1, !tbaa !15
  %269 = call float @upconvert_bf8(i8 noundef zeroext %268)
  %270 = getelementptr inbounds float, ptr %54, i64 %indvars.iv738
  store float %269, ptr %270, align 4, !tbaa !11
  %indvars.iv.next739 = add nuw nsw i64 %indvars.iv738, 1
  %exitcond742.not = icmp eq i64 %indvars.iv.next739, %wide.trip.count741
  br i1 %exitcond742.not, label %.loopexit, label %.lr.ph686, !llvm.loop !34

.lr.ph684:                                        ; preds = %.lr.ph684.preheader, %.lr.ph684
  %indvars.iv733 = phi i64 [ 0, %.lr.ph684.preheader ], [ %indvars.iv.next734, %.lr.ph684 ]
  %271 = getelementptr inbounds i8, ptr %77, i64 %indvars.iv733
  %272 = load i8, ptr %271, align 1, !tbaa !15
  %273 = call float @upconvert_hf8(i8 noundef zeroext %272)
  %274 = getelementptr inbounds float, ptr %54, i64 %indvars.iv733
  store float %273, ptr %274, align 4, !tbaa !11
  %indvars.iv.next734 = add nuw nsw i64 %indvars.iv733, 1
  %exitcond737.not = icmp eq i64 %indvars.iv.next734, %wide.trip.count736
  br i1 %exitcond737.not, label %.loopexit, label %.lr.ph684, !llvm.loop !35

.loopexit:                                        ; preds = %.lr.ph684, %.lr.ph686, %.lr.ph688, %.lr.ph690, %.loopexit665, %.preheader662, %.preheader660, %.preheader658, %.preheader657
  %275 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %.pre755, i32 noundef 1, ptr noundef %53, ptr noundef %54, ptr noundef null, ptr noundef null) #8
  %276 = getelementptr inbounds i8, ptr %4, i64 80
  %277 = load double, ptr %276, align 8, !tbaa !36
  %278 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %277)
  %279 = getelementptr inbounds i8, ptr %4, i64 120
  %280 = load double, ptr %279, align 8, !tbaa !39
  %281 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %280)
  %282 = getelementptr inbounds i8, ptr %4, i64 56
  %283 = load double, ptr %282, align 8, !tbaa !40
  %284 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %283)
  %285 = getelementptr inbounds i8, ptr %4, i64 64
  %286 = load double, ptr %285, align 8, !tbaa !41
  %287 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %286)
  %288 = getelementptr inbounds i8, ptr %4, i64 40
  %289 = load double, ptr %288, align 8, !tbaa !42
  %290 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %289)
  %291 = getelementptr inbounds i8, ptr %4, i64 48
  %292 = load double, ptr %291, align 8, !tbaa !43
  %293 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %292)
  %294 = getelementptr inbounds i8, ptr %4, i64 32
  %295 = load double, ptr %294, align 8, !tbaa !44
  %296 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %295)
  %297 = icmp sgt i32 %.0629640644652, 0
  %or.cond769 = select i1 %78, i1 %297, i1 false
  br i1 %or.cond769, label %.preheader.us, label %._crit_edge696.thread

.preheader.us:                                    ; preds = %.loopexit, %._crit_edge.us698
  %.9695.us = phi i32 [ %317, %._crit_edge.us698 ], [ 0, %.loopexit ]
  %.0626694.us = phi i32 [ %.2628.us, %._crit_edge.us698 ], [ 0, %.loopexit ]
  %298 = mul nsw i32 %.9695.us, %41
  br label %299

299:                                              ; preds = %.preheader.us, %315
  %.1625692.us = phi i32 [ 0, %.preheader.us ], [ %316, %315 ]
  %.1627691.us = phi i32 [ %.0626694.us, %.preheader.us ], [ %.2628.us, %315 ]
  %300 = lshr i32 %.1625692.us, 3
  %301 = add nsw i32 %300, %298
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds i8, ptr %45, i64 %302
  %304 = load i8, ptr %303, align 1, !tbaa !15
  %305 = zext i8 %304 to i32
  %306 = and i32 %.1625692.us, 7
  %307 = shl nuw nsw i32 1, %306
  %308 = getelementptr inbounds i8, ptr %46, i64 %302
  %309 = load i8, ptr %308, align 1, !tbaa !15
  %310 = zext i8 %309 to i32
  %311 = xor i32 %310, %305
  %312 = and i32 %311, %307
  %.not638.us = icmp eq i32 %312, 0
  br i1 %.not638.us, label %315, label %313

313:                                              ; preds = %299
  %314 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %.9695.us, i32 noundef %.1625692.us, i32 noundef %305, i32 noundef %310)
  br label %315

315:                                              ; preds = %313, %299
  %.2628.us = phi i32 [ 1, %313 ], [ %.1627691.us, %299 ]
  %316 = add nuw nsw i32 %.1625692.us, 1
  %exitcond753.not = icmp eq i32 %316, %.0629640644652
  br i1 %exitcond753.not, label %._crit_edge.us698, label %299, !llvm.loop !45

._crit_edge.us698:                                ; preds = %315
  %317 = add nuw nsw i32 %.9695.us, 1
  %exitcond754.not = icmp eq i32 %317, %.0630645651
  br i1 %exitcond754.not, label %._crit_edge696, label %.preheader.us, !llvm.loop !46

._crit_edge696:                                   ; preds = %._crit_edge.us698
  %318 = icmp eq i32 %.2628.us, 0
  %spec.select = select i1 %318, ptr @.str.12, ptr @.str.13
  br label %._crit_edge696.thread

._crit_edge696.thread:                            ; preds = %._crit_edge696, %.loopexit
  %.str.13.sink = phi ptr [ @.str.12, %.loopexit ], [ %spec.select, %._crit_edge696 ]
  %.0626.lcssa757 = phi i1 [ true, %.loopexit ], [ %318, %._crit_edge696 ]
  %319 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.13.sink)
  %320 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %321 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14)
  %322 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %323 = mul nsw i32 %41, %.0630645651
  %324 = sdiv i32 %323, 4
  %325 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 8, i32 noundef %324, i32 noundef 1, ptr noundef %45, ptr noundef %46, ptr noundef null, ptr noundef null) #8
  %326 = load double, ptr %276, align 8, !tbaa !36
  %327 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, double noundef %326)
  %328 = load double, ptr %279, align 8, !tbaa !39
  %329 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, double noundef %328)
  %330 = load double, ptr %282, align 8, !tbaa !40
  %331 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %330)
  %332 = load double, ptr %285, align 8, !tbaa !41
  %333 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, double noundef %332)
  %334 = load double, ptr %288, align 8, !tbaa !42
  %335 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, double noundef %334)
  %336 = load double, ptr %291, align 8, !tbaa !43
  %337 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %336)
  %338 = load double, ptr %294, align 8, !tbaa !44
  %339 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %338)
  %340 = load double, ptr %294, align 8, !tbaa !44
  %341 = fcmp ule double %340, 1.000000e-05
  call void @libxsmm_free(ptr noundef %50) #8
  call void @libxsmm_free(ptr noundef %51) #8
  call void @libxsmm_free(ptr noundef %52) #8
  call void @libxsmm_free(ptr noundef %53) #8
  call void @libxsmm_free(ptr noundef %54) #8
  call void @libxsmm_free(ptr noundef %57) #8
  call void @libxsmm_free(ptr noundef %58) #8
  call void @libxsmm_free(ptr noundef %59) #8
  call void @libxsmm_free(ptr noundef %60) #8
  call void @libxsmm_free(ptr noundef %61) #8
  call void @libxsmm_free(ptr noundef %62) #8
  call void @libxsmm_free(ptr noundef %63) #8
  call void @libxsmm_free(ptr noundef %64) #8
  call void @libxsmm_free(ptr noundef %65) #8
  call void @libxsmm_free(ptr noundef %66) #8
  call void @libxsmm_free(ptr noundef %68) #8
  call void @libxsmm_free(ptr noundef %69) #8
  call void @libxsmm_free(ptr noundef %70) #8
  call void @libxsmm_free(ptr noundef %71) #8
  call void @libxsmm_free(ptr noundef %72) #8
  call void @libxsmm_free(ptr noundef %73) #8
  call void @libxsmm_free(ptr noundef %74) #8
  call void @libxsmm_free(ptr noundef %75) #8
  call void @libxsmm_free(ptr noundef %76) #8
  call void @libxsmm_free(ptr noundef %77) #8
  %342 = and i1 %.0626.lcssa757, %341
  br i1 %342, label %343, label %346

343:                                              ; preds = %._crit_edge696.thread
  %344 = load i32, ptr @is_reference_kernel, align 4, !tbaa !5
  %345 = call i32 @libxsmm_return_success_code(i32 noundef %344)
  br label %346

346:                                              ; preds = %._crit_edge696.thread, %343
  %347 = phi i32 [ %345, %343 ], [ 1, %._crit_edge696.thread ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #8
  ret i32 %347
}

; 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

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

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

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

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

declare void @libxsmm_matdiff_clear(ptr 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 #5

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

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

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

declare i32 @libxsmm_meqn_create() local_unnamed_addr #2

declare i64 @libxsmm_create_meqn_op_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, 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_binary_op(i64, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i64 @libxsmm_create_meqn_arg_metadata(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 #6

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

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

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

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

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

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #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 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = { cold nounwind }
attributes #11 = { 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 = !{!14, !14, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = !{!20, !10, i64 0}
!20 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!21 = !{!22, !6, i64 16}
!22 = !{!"libxsmm_kernel_info", !6, i64 0, !6, i64 4, !23, i64 8, !6, i64 16}
!23 = !{!"long", !7, i64 0}
!24 = !{!25, !10, i64 8}
!25 = !{!"libxsmm_meqn_param", !10, i64 0, !10, i64 8, !20, i64 16}
!26 = !{!25, !10, i64 16}
!27 = !{!25, !10, i64 24}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !17}
!33 = distinct !{!33, !17}
!34 = distinct !{!34, !17}
!35 = distinct !{!35, !17}
!36 = !{!37, !38, i64 80}
!37 = !{!"libxsmm_matdiff_info", !38, i64 0, !38, i64 8, !38, i64 16, !38, i64 24, !38, i64 32, !38, i64 40, !38, i64 48, !38, i64 56, !38, i64 64, !38, i64 72, !38, i64 80, !38, i64 88, !38, i64 96, !38, i64 104, !38, i64 112, !38, i64 120, !38, i64 128, !38, i64 136, !38, i64 144, !38, i64 152, !38, i64 160, !38, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!38 = !{!"double", !7, i64 0}
!39 = !{!37, !38, i64 120}
!40 = !{!37, !38, i64 56}
!41 = !{!37, !38, i64 64}
!42 = !{!37, !38, i64 40}
!43 = !{!37, !38, i64 48}
!44 = !{!37, !38, i64 32}
!45 = distinct !{!45, !17}
!46 = distinct !{!46, !17}


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