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

; 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_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_shape = type { i32, i32, i32, i32 }
%struct.libxsmm_matrix_arg_attributes = type { i32, i32, i32, i32 }
%struct.libxsmm_meqn_arg_metadata = type { i32, i32 }
%struct.libxsmm_meqn_op_metadata = type { i32, i32 }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %struct.libxsmm_meqn_param, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca %struct.libxsmm_matdiff_info, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca [128 x i32], align 16
  %35 = alloca [128 x i32], align 16
  %36 = alloca [128 x i32], align 16
  %37 = alloca [128 x i32], align 16
  %38 = alloca [128 x %struct.libxsmm_meqn_arg_shape], align 16
  %39 = alloca %struct.libxsmm_meqn_arg_shape, align 4
  %40 = alloca %struct.libxsmm_meqn_arg_shape, align 4
  %41 = alloca %struct.libxsmm_matrix_arg_attributes, align 4
  %42 = alloca %struct.libxsmm_matrix_arg_attributes, align 4
  %43 = alloca %struct.libxsmm_matrix_arg_attributes, align 4
  %44 = alloca [128 x ptr], align 16
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca [128 x ptr], align 16
  %58 = alloca [128 x %struct.libxsmm_matrix_arg], align 16
  %59 = alloca [128 x %struct.libxsmm_matrix_arg], align 16
  %60 = alloca [128 x %struct.libxsmm_meqn_arg_metadata], align 16
  %61 = alloca [128 x %struct.libxsmm_meqn_op_metadata], align 16
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca [9 x %struct.libxsmm_matrix_op_arg], align 16
  %66 = alloca i32, align 4
  %67 = alloca i64, align 8
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca float, 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) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  store double 0.000000e+00, ptr %27, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  store double 0.000000e+00, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 192, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 0, ptr %30, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  store i32 100, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  store i32 1, ptr %32, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 1, ptr %33, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 512, ptr %34) #8
  call void @llvm.memset.p0.i64(ptr align 16 %34, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 512, ptr %35) #8
  call void @llvm.memset.p0.i64(ptr align 16 %35, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 512, ptr %36) #8
  call void @llvm.memset.p0.i64(ptr align 16 %36, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 512, ptr %37) #8
  call void @llvm.memset.p0.i64(ptr align 16 %37, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 2048, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 1024, ptr %44) #8
  call void @llvm.memset.p0.i64(ptr align 16 %44, i8 0, i64 1024, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  store ptr null, ptr %45, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  store ptr null, ptr %46, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  store ptr null, ptr %47, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  store ptr null, ptr %48, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  store ptr null, ptr %49, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  store ptr null, ptr %50, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  store ptr null, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  store ptr null, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  store ptr null, ptr %53, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  store ptr null, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  store ptr null, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  store ptr null, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1024, ptr %57) #8
  call void @llvm.memset.p0.i64(ptr align 16 %57, i8 0, i64 1024, i1 false)
  call void @llvm.lifetime.start.p0(i64 6144, ptr %58) #8
  call void @llvm.lifetime.start.p0(i64 6144, ptr %59) #8
  call void @llvm.lifetime.start.p0(i64 1024, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 1024, ptr %61) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.start.p0(i64 288, ptr %65) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  store i32 0, ptr %66, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #8
  %71 = load i32, ptr %4, align 4, !tbaa !5
  call void @libxsmm_init()
  call void @libxsmm_matdiff_clear(ptr noundef %29)
  store i32 1, ptr %18, align 4, !tbaa !5
  %72 = load ptr, ptr %5, align 8, !tbaa !9
  %73 = load i32, ptr %18, align 4, !tbaa !5
  %74 = add nsw i32 %73, 1
  store i32 %74, ptr %18, align 4, !tbaa !5
  %75 = sext i32 %73 to i64
  %76 = getelementptr inbounds ptr, ptr %72, i64 %75
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = call i32 @atoi(ptr noundef %77) #9
  store i32 %78, ptr %62, align 4, !tbaa !5
  %79 = load i32, ptr %62, align 4, !tbaa !5
  store i32 %79, ptr %63, align 4, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %80

80:                                               ; preds = %125, %2
  %81 = load i32, ptr %19, align 4, !tbaa !5
  %82 = load i32, ptr %62, align 4, !tbaa !5
  %83 = icmp slt i32 %81, %82
  br i1 %83, label %84, label %128

84:                                               ; preds = %80
  %85 = load ptr, ptr %5, align 8, !tbaa !9
  %86 = load i32, ptr %18, align 4, !tbaa !5
  %87 = add nsw i32 %86, 1
  store i32 %87, ptr %18, align 4, !tbaa !5
  %88 = sext i32 %86 to i64
  %89 = getelementptr inbounds ptr, ptr %85, i64 %88
  %90 = load ptr, ptr %89, align 8, !tbaa !9
  %91 = call i32 @atoi(ptr noundef %90) #9
  %92 = load i32, ptr %19, align 4, !tbaa !5
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %93
  store i32 %91, ptr %94, align 4, !tbaa !5
  %95 = load ptr, ptr %5, align 8, !tbaa !9
  %96 = load i32, ptr %18, align 4, !tbaa !5
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr %18, align 4, !tbaa !5
  %98 = sext i32 %96 to i64
  %99 = getelementptr inbounds ptr, ptr %95, i64 %98
  %100 = load ptr, ptr %99, align 8, !tbaa !9
  %101 = call i32 @atoi(ptr noundef %100) #9
  %102 = load i32, ptr %19, align 4, !tbaa !5
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %103
  store i32 %101, ptr %104, align 4, !tbaa !5
  %105 = load ptr, ptr %5, align 8, !tbaa !9
  %106 = load i32, ptr %18, align 4, !tbaa !5
  %107 = add nsw i32 %106, 1
  store i32 %107, ptr %18, align 4, !tbaa !5
  %108 = sext i32 %106 to i64
  %109 = getelementptr inbounds ptr, ptr %105, i64 %108
  %110 = load ptr, ptr %109, align 8, !tbaa !9
  %111 = call i32 @atoi(ptr noundef %110) #9
  %112 = load i32, ptr %19, align 4, !tbaa !5
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %113
  store i32 %111, ptr %114, align 4, !tbaa !5
  %115 = load ptr, ptr %5, align 8, !tbaa !9
  %116 = load i32, ptr %18, align 4, !tbaa !5
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %18, align 4, !tbaa !5
  %118 = sext i32 %116 to i64
  %119 = getelementptr inbounds ptr, ptr %115, i64 %118
  %120 = load ptr, ptr %119, align 8, !tbaa !9
  %121 = call i32 @atoi(ptr noundef %120) #9
  %122 = load i32, ptr %19, align 4, !tbaa !5
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %123
  store i32 %121, ptr %124, align 4, !tbaa !5
  br label %125

125:                                              ; preds = %84
  %126 = load i32, ptr %19, align 4, !tbaa !5
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %19, align 4, !tbaa !5
  br label %80, !llvm.loop !13

128:                                              ; preds = %80
  %129 = load ptr, ptr %5, align 8, !tbaa !9
  %130 = load i32, ptr %18, align 4, !tbaa !5
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %18, align 4, !tbaa !5
  %132 = sext i32 %130 to i64
  %133 = getelementptr inbounds ptr, ptr %129, i64 %132
  %134 = load ptr, ptr %133, align 8, !tbaa !9
  %135 = call i32 @atoi(ptr noundef %134) #9
  store i32 %135, ptr %30, align 4, !tbaa !5
  %136 = load ptr, ptr %5, align 8, !tbaa !9
  %137 = load i32, ptr %18, align 4, !tbaa !5
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %18, align 4, !tbaa !5
  %139 = sext i32 %137 to i64
  %140 = getelementptr inbounds ptr, ptr %136, i64 %139
  %141 = load ptr, ptr %140, align 8, !tbaa !9
  %142 = call i32 @atoi(ptr noundef %141) #9
  store i32 %142, ptr %66, align 4, !tbaa !5
  %143 = load ptr, ptr %5, align 8, !tbaa !9
  %144 = load i32, ptr %18, align 4, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds ptr, ptr %143, i64 %145
  %147 = load ptr, ptr %146, align 8, !tbaa !9
  %148 = call i32 @atoi(ptr noundef %147) #9
  store i32 %148, ptr %31, align 4, !tbaa !5
  %149 = load i32, ptr %30, align 4, !tbaa !5
  %150 = icmp eq i32 %149, 0
  br i1 %150, label %151, label %152

151:                                              ; preds = %128
  store i32 1, ptr %32, align 4, !tbaa !5
  store i32 1, ptr %33, align 4, !tbaa !5
  br label %167

152:                                              ; preds = %128
  %153 = load i32, ptr %30, align 4, !tbaa !5
  %154 = icmp eq i32 %153, 1
  br i1 %154, label %155, label %156

155:                                              ; preds = %152
  store i32 2, ptr %32, align 4, !tbaa !5
  store i32 2, ptr %33, align 4, !tbaa !5
  br label %166

156:                                              ; preds = %152
  %157 = load i32, ptr %30, align 4, !tbaa !5
  %158 = icmp eq i32 %157, 2
  br i1 %158, label %159, label %160

159:                                              ; preds = %156
  store i32 1, ptr %32, align 4, !tbaa !5
  store i32 2, ptr %33, align 4, !tbaa !5
  br label %165

160:                                              ; preds = %156
  %161 = load i32, ptr %30, align 4, !tbaa !5
  %162 = icmp eq i32 %161, 3
  br i1 %162, label %163, label %164

163:                                              ; preds = %160
  store i32 2, ptr %32, align 4, !tbaa !5
  store i32 1, ptr %33, align 4, !tbaa !5
  br label %164

164:                                              ; preds = %163, %160
  br label %165

165:                                              ; preds = %164, %159
  br label %166

166:                                              ; preds = %165, %155
  br label %167

167:                                              ; preds = %166, %151
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %168

168:                                              ; preds = %214, %167
  %169 = load i32, ptr %19, align 4, !tbaa !5
  %170 = load i32, ptr %62, align 4, !tbaa !5
  %171 = icmp slt i32 %169, %170
  br i1 %171, label %172, label %217

172:                                              ; preds = %168
  %173 = load i32, ptr %19, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %177 = load i32, ptr %19, align 4, !tbaa !5
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %178
  %180 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %179, i32 0, i32 0
  store i32 %176, ptr %180, align 16, !tbaa !15
  %181 = load i32, ptr %19, align 4, !tbaa !5
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %182
  %184 = load i32, ptr %183, align 4, !tbaa !5
  %185 = load i32, ptr %19, align 4, !tbaa !5
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %186
  %188 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %187, i32 0, i32 1
  store i32 %184, ptr %188, align 4, !tbaa !17
  %189 = load i32, ptr %19, align 4, !tbaa !5
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %190
  %192 = load i32, ptr %191, align 4, !tbaa !5
  %193 = load i32, ptr %19, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %194
  %196 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %195, i32 0, i32 2
  store i32 %192, ptr %196, align 8, !tbaa !18
  %197 = load i32, ptr %19, align 4, !tbaa !5
  %198 = load i32, ptr %62, align 4, !tbaa !5
  %199 = sub nsw i32 %198, 1
  %200 = icmp eq i32 %197, %199
  br i1 %200, label %201, label %207

201:                                              ; preds = %172
  %202 = load i32, ptr %33, align 4, !tbaa !5
  %203 = load i32, ptr %19, align 4, !tbaa !5
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %204
  %206 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %205, i32 0, i32 3
  store i32 %202, ptr %206, align 4, !tbaa !19
  br label %213

207:                                              ; preds = %172
  %208 = load i32, ptr %32, align 4, !tbaa !5
  %209 = load i32, ptr %19, align 4, !tbaa !5
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %210
  %212 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %211, i32 0, i32 3
  store i32 %208, ptr %212, align 4, !tbaa !19
  br label %213

213:                                              ; preds = %207, %201
  br label %214

214:                                              ; preds = %213
  %215 = load i32, ptr %19, align 4, !tbaa !5
  %216 = add nsw i32 %215, 1
  store i32 %216, ptr %19, align 4, !tbaa !5
  br label %168, !llvm.loop !20

217:                                              ; preds = %168
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %218

218:                                              ; preds = %245, %217
  %219 = load i32, ptr %18, align 4, !tbaa !5
  %220 = load i32, ptr %62, align 4, !tbaa !5
  %221 = icmp slt i32 %219, %220
  br i1 %221, label %222, label %248

222:                                              ; preds = %218
  %223 = load i32, ptr %18, align 4, !tbaa !5
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %224
  %226 = load i32, ptr %225, align 4, !tbaa !5
  %227 = sext i32 %226 to i64
  %228 = mul i64 4, %227
  %229 = load i32, ptr %18, align 4, !tbaa !5
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !5
  %233 = sext i32 %232 to i64
  %234 = mul i64 %228, %233
  %235 = load i32, ptr %18, align 4, !tbaa !5
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %236
  %238 = load i32, ptr %237, align 4, !tbaa !5
  %239 = sext i32 %238 to i64
  %240 = mul i64 %234, %239
  %241 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %240, i64 noundef 64)
  %242 = load i32, ptr %18, align 4, !tbaa !5
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %243
  store ptr %241, ptr %244, align 8, !tbaa !9
  br label %245

245:                                              ; preds = %222
  %246 = load i32, ptr %18, align 4, !tbaa !5
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %18, align 4, !tbaa !5
  br label %218, !llvm.loop !21

248:                                              ; preds = %218
  %249 = load i32, ptr %62, align 4, !tbaa !5
  %250 = sub nsw i32 %249, 1
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %251
  %253 = load i32, ptr %252, align 4, !tbaa !5
  %254 = sext i32 %253 to i64
  %255 = mul i64 4, %254
  %256 = load i32, ptr %62, align 4, !tbaa !5
  %257 = sub nsw i32 %256, 1
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %258
  %260 = load i32, ptr %259, align 4, !tbaa !5
  %261 = sext i32 %260 to i64
  %262 = mul i64 %255, %261
  %263 = load i32, ptr %62, align 4, !tbaa !5
  %264 = sub nsw i32 %263, 1
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !5
  %268 = sext i32 %267 to i64
  %269 = mul i64 %262, %268
  %270 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %269, i64 noundef 64)
  %271 = load i32, ptr %63, align 4, !tbaa !5
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %272
  store ptr %270, ptr %273, align 8, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %274

274:                                              ; preds = %301, %248
  %275 = load i32, ptr %18, align 4, !tbaa !5
  %276 = load i32, ptr %62, align 4, !tbaa !5
  %277 = icmp slt i32 %275, %276
  br i1 %277, label %278, label %304

278:                                              ; preds = %274
  %279 = load i32, ptr %18, align 4, !tbaa !5
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !5
  %283 = sext i32 %282 to i64
  %284 = mul i64 2, %283
  %285 = load i32, ptr %18, align 4, !tbaa !5
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %286
  %288 = load i32, ptr %287, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = mul i64 %284, %289
  %291 = load i32, ptr %18, align 4, !tbaa !5
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !5
  %295 = sext i32 %294 to i64
  %296 = mul i64 %290, %295
  %297 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %296, i64 noundef 64)
  %298 = load i32, ptr %18, align 4, !tbaa !5
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %299
  store ptr %297, ptr %300, align 8, !tbaa !9
  br label %301

301:                                              ; preds = %278
  %302 = load i32, ptr %18, align 4, !tbaa !5
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr %18, align 4, !tbaa !5
  br label %274, !llvm.loop !22

304:                                              ; preds = %274
  %305 = load i32, ptr %62, align 4, !tbaa !5
  %306 = sub nsw i32 %305, 1
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %307
  %309 = load i32, ptr %308, align 4, !tbaa !5
  %310 = sext i32 %309 to i64
  %311 = mul i64 2, %310
  %312 = load i32, ptr %62, align 4, !tbaa !5
  %313 = sub nsw i32 %312, 1
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !5
  %317 = sext i32 %316 to i64
  %318 = mul i64 %311, %317
  %319 = load i32, ptr %62, align 4, !tbaa !5
  %320 = sub nsw i32 %319, 1
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !5
  %324 = sext i32 %323 to i64
  %325 = mul i64 %318, %324
  %326 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %325, i64 noundef 64)
  %327 = load i32, ptr %63, align 4, !tbaa !5
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %328
  store ptr %326, ptr %329, align 8, !tbaa !9
  %330 = load i32, ptr %62, align 4, !tbaa !5
  %331 = icmp sle i32 4, %330
  br i1 %331, label %332, label %333

332:                                              ; preds = %304
  br label %334

333:                                              ; preds = %304
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 344, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

334:                                              ; preds = %332
  %335 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %336 = load i32, ptr %335, align 8, !tbaa !5
  %337 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %338 = load i32, ptr %337, align 4, !tbaa !5
  %339 = mul nsw i32 %336, %338
  %340 = sext i32 %339 to i64
  %341 = call noalias ptr @libxsmm_malloc(i64 noundef %340)
  store ptr %341, ptr %45, align 8, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %342

342:                                              ; preds = %482, %334
  %343 = load i32, ptr %20, align 4, !tbaa !5
  %344 = load i32, ptr %62, align 4, !tbaa !5
  %345 = icmp slt i32 %343, %344
  br i1 %345, label %346, label %485

346:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %347 = load i32, ptr %20, align 4, !tbaa !5
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %348
  %350 = load ptr, ptr %349, align 8, !tbaa !9
  store ptr %350, ptr %68, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #8
  %351 = load i32, ptr %20, align 4, !tbaa !5
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %352
  %354 = load ptr, ptr %353, align 8, !tbaa !9
  store ptr %354, ptr %69, align 8, !tbaa !9
  %355 = load i32, ptr %20, align 4, !tbaa !5
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !5
  %359 = load i32, ptr %20, align 4, !tbaa !5
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %360
  %362 = load i32, ptr %361, align 4, !tbaa !5
  %363 = mul nsw i32 %358, %362
  store i32 %363, ptr %64, align 4, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %364

364:                                              ; preds = %478, %346
  %365 = load i32, ptr %18, align 4, !tbaa !5
  %366 = load i32, ptr %20, align 4, !tbaa !5
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !5
  %370 = icmp slt i32 %365, %369
  br i1 %370, label %371, label %481

371:                                              ; preds = %364
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %372

372:                                              ; preds = %474, %371
  %373 = load i32, ptr %19, align 4, !tbaa !5
  %374 = load i32, ptr %20, align 4, !tbaa !5
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %375
  %377 = load i32, ptr %376, align 4, !tbaa !5
  %378 = icmp slt i32 %373, %377
  br i1 %378, label %379, label %477

379:                                              ; preds = %372
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %380

380:                                              ; preds = %470, %379
  %381 = load i32, ptr %21, align 4, !tbaa !5
  %382 = load i32, ptr %20, align 4, !tbaa !5
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %383
  %385 = load i32, ptr %384, align 4, !tbaa !5
  %386 = icmp slt i32 %381, %385
  br i1 %386, label %387, label %473

387:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  %388 = call double @libxsmm_rng_f64()
  %389 = fptrunc double %388 to float
  store float %389, ptr %70, align 4, !tbaa !23
  %390 = load float, ptr %70, align 4, !tbaa !23
  %391 = load ptr, ptr %68, align 8, !tbaa !9
  %392 = load i32, ptr %19, align 4, !tbaa !5
  %393 = load i32, ptr %18, align 4, !tbaa !5
  %394 = load i32, ptr %20, align 4, !tbaa !5
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %395
  %397 = load i32, ptr %396, align 4, !tbaa !5
  %398 = mul nsw i32 %393, %397
  %399 = add nsw i32 %392, %398
  %400 = load i32, ptr %21, align 4, !tbaa !5
  %401 = load i32, ptr %64, align 4, !tbaa !5
  %402 = mul nsw i32 %400, %401
  %403 = add nsw i32 %399, %402
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds float, ptr %391, i64 %404
  store float %390, ptr %405, align 4, !tbaa !23
  %406 = load ptr, ptr %68, align 8, !tbaa !9
  %407 = load i32, ptr %19, align 4, !tbaa !5
  %408 = load i32, ptr %18, align 4, !tbaa !5
  %409 = load i32, ptr %20, align 4, !tbaa !5
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %410
  %412 = load i32, ptr %411, align 4, !tbaa !5
  %413 = mul nsw i32 %408, %412
  %414 = add nsw i32 %407, %413
  %415 = load i32, ptr %21, align 4, !tbaa !5
  %416 = load i32, ptr %64, align 4, !tbaa !5
  %417 = mul nsw i32 %415, %416
  %418 = add nsw i32 %414, %417
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds float, ptr %406, i64 %419
  %421 = load ptr, ptr %69, align 8, !tbaa !9
  %422 = load i32, ptr %19, align 4, !tbaa !5
  %423 = load i32, ptr %18, align 4, !tbaa !5
  %424 = load i32, ptr %20, align 4, !tbaa !5
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %425
  %427 = load i32, ptr %426, align 4, !tbaa !5
  %428 = mul nsw i32 %423, %427
  %429 = add nsw i32 %422, %428
  %430 = load i32, ptr %21, align 4, !tbaa !5
  %431 = load i32, ptr %64, align 4, !tbaa !5
  %432 = mul nsw i32 %430, %431
  %433 = add nsw i32 %429, %432
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds i16, ptr %421, i64 %434
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %420, ptr noundef %435, i64 noundef 1)
  %436 = load i32, ptr %30, align 4, !tbaa !5
  %437 = icmp eq i32 %436, 1
  br i1 %437, label %438, label %469

438:                                              ; preds = %387
  %439 = load ptr, ptr %69, align 8, !tbaa !9
  %440 = load i32, ptr %19, align 4, !tbaa !5
  %441 = load i32, ptr %18, align 4, !tbaa !5
  %442 = load i32, ptr %20, align 4, !tbaa !5
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %443
  %445 = load i32, ptr %444, align 4, !tbaa !5
  %446 = mul nsw i32 %441, %445
  %447 = add nsw i32 %440, %446
  %448 = load i32, ptr %21, align 4, !tbaa !5
  %449 = load i32, ptr %64, align 4, !tbaa !5
  %450 = mul nsw i32 %448, %449
  %451 = add nsw i32 %447, %450
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i16, ptr %439, i64 %452
  %454 = load ptr, ptr %68, align 8, !tbaa !9
  %455 = load i32, ptr %19, align 4, !tbaa !5
  %456 = load i32, ptr %18, align 4, !tbaa !5
  %457 = load i32, ptr %20, align 4, !tbaa !5
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %458
  %460 = load i32, ptr %459, align 4, !tbaa !5
  %461 = mul nsw i32 %456, %460
  %462 = add nsw i32 %455, %461
  %463 = load i32, ptr %21, align 4, !tbaa !5
  %464 = load i32, ptr %64, align 4, !tbaa !5
  %465 = mul nsw i32 %463, %464
  %466 = add nsw i32 %462, %465
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds float, ptr %454, i64 %467
  call void @libxsmm_convert_bf16_f32(ptr noundef %453, ptr noundef %468, i64 noundef 1)
  br label %469

469:                                              ; preds = %438, %387
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  br label %470

470:                                              ; preds = %469
  %471 = load i32, ptr %21, align 4, !tbaa !5
  %472 = add nsw i32 %471, 1
  store i32 %472, ptr %21, align 4, !tbaa !5
  br label %380, !llvm.loop !25

473:                                              ; preds = %380
  br label %474

474:                                              ; preds = %473
  %475 = load i32, ptr %19, align 4, !tbaa !5
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %19, align 4, !tbaa !5
  br label %372, !llvm.loop !26

477:                                              ; preds = %372
  br label %478

478:                                              ; preds = %477
  %479 = load i32, ptr %18, align 4, !tbaa !5
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %18, align 4, !tbaa !5
  br label %364, !llvm.loop !27

481:                                              ; preds = %364
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  br label %482

482:                                              ; preds = %481
  %483 = load i32, ptr %20, align 4, !tbaa !5
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr %20, align 4, !tbaa !5
  br label %342, !llvm.loop !28

485:                                              ; preds = %342
  %486 = load i32, ptr %63, align 4, !tbaa !5
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %487
  %489 = load ptr, ptr %488, align 8, !tbaa !9
  store ptr %489, ptr %46, align 8, !tbaa !9
  %490 = load i32, ptr %62, align 4, !tbaa !5
  %491 = sub nsw i32 %490, 1
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %492
  %494 = load ptr, ptr %493, align 8, !tbaa !9
  store ptr %494, ptr %47, align 8, !tbaa !9
  %495 = load i32, ptr %63, align 4, !tbaa !5
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %496
  %498 = load ptr, ptr %497, align 8, !tbaa !9
  store ptr %498, ptr %55, align 8, !tbaa !9
  %499 = load i32, ptr %62, align 4, !tbaa !5
  %500 = sub nsw i32 %499, 1
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %501
  %503 = load ptr, ptr %502, align 8, !tbaa !9
  store ptr %503, ptr %56, align 8, !tbaa !9
  %504 = load i32, ptr %62, align 4, !tbaa !5
  %505 = sub nsw i32 %504, 1
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %506
  %508 = load i32, ptr %507, align 4, !tbaa !5
  %509 = load i32, ptr %62, align 4, !tbaa !5
  %510 = sub nsw i32 %509, 1
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %511
  %513 = load i32, ptr %512, align 4, !tbaa !5
  %514 = mul nsw i32 %508, %513
  store i32 %514, ptr %64, align 4, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %515

515:                                              ; preds = %616, %485
  %516 = load i32, ptr %18, align 4, !tbaa !5
  %517 = load i32, ptr %62, align 4, !tbaa !5
  %518 = sub nsw i32 %517, 1
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %519
  %521 = load i32, ptr %520, align 4, !tbaa !5
  %522 = icmp slt i32 %516, %521
  br i1 %522, label %523, label %619

523:                                              ; preds = %515
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %524

524:                                              ; preds = %612, %523
  %525 = load i32, ptr %19, align 4, !tbaa !5
  %526 = load i32, ptr %62, align 4, !tbaa !5
  %527 = sub nsw i32 %526, 1
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %528
  %530 = load i32, ptr %529, align 4, !tbaa !5
  %531 = icmp slt i32 %525, %530
  br i1 %531, label %532, label %615

532:                                              ; preds = %524
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %533

533:                                              ; preds = %608, %532
  %534 = load i32, ptr %21, align 4, !tbaa !5
  %535 = load i32, ptr %62, align 4, !tbaa !5
  %536 = sub nsw i32 %535, 1
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %537
  %539 = load i32, ptr %538, align 4, !tbaa !5
  %540 = icmp slt i32 %534, %539
  br i1 %540, label %541, label %611

541:                                              ; preds = %533
  %542 = load ptr, ptr %47, align 8, !tbaa !9
  %543 = load i32, ptr %19, align 4, !tbaa !5
  %544 = load i32, ptr %18, align 4, !tbaa !5
  %545 = load i32, ptr %62, align 4, !tbaa !5
  %546 = sub nsw i32 %545, 1
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %547
  %549 = load i32, ptr %548, align 4, !tbaa !5
  %550 = mul nsw i32 %544, %549
  %551 = add nsw i32 %543, %550
  %552 = load i32, ptr %21, align 4, !tbaa !5
  %553 = load i32, ptr %64, align 4, !tbaa !5
  %554 = mul nsw i32 %552, %553
  %555 = add nsw i32 %551, %554
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds float, ptr %542, i64 %556
  %558 = load float, ptr %557, align 4, !tbaa !23
  %559 = load ptr, ptr %46, align 8, !tbaa !9
  %560 = load i32, ptr %19, align 4, !tbaa !5
  %561 = load i32, ptr %18, align 4, !tbaa !5
  %562 = load i32, ptr %62, align 4, !tbaa !5
  %563 = sub nsw i32 %562, 1
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %564
  %566 = load i32, ptr %565, align 4, !tbaa !5
  %567 = mul nsw i32 %561, %566
  %568 = add nsw i32 %560, %567
  %569 = load i32, ptr %21, align 4, !tbaa !5
  %570 = load i32, ptr %64, align 4, !tbaa !5
  %571 = mul nsw i32 %569, %570
  %572 = add nsw i32 %568, %571
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds float, ptr %559, i64 %573
  store float %558, ptr %574, align 4, !tbaa !23
  %575 = load ptr, ptr %56, align 8, !tbaa !9
  %576 = load i32, ptr %19, align 4, !tbaa !5
  %577 = load i32, ptr %18, align 4, !tbaa !5
  %578 = load i32, ptr %62, align 4, !tbaa !5
  %579 = sub nsw i32 %578, 1
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %580
  %582 = load i32, ptr %581, align 4, !tbaa !5
  %583 = mul nsw i32 %577, %582
  %584 = add nsw i32 %576, %583
  %585 = load i32, ptr %21, align 4, !tbaa !5
  %586 = load i32, ptr %64, align 4, !tbaa !5
  %587 = mul nsw i32 %585, %586
  %588 = add nsw i32 %584, %587
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds i16, ptr %575, i64 %589
  %591 = load i16, ptr %590, align 2, !tbaa !29
  %592 = load ptr, ptr %55, align 8, !tbaa !9
  %593 = load i32, ptr %19, align 4, !tbaa !5
  %594 = load i32, ptr %18, align 4, !tbaa !5
  %595 = load i32, ptr %62, align 4, !tbaa !5
  %596 = sub nsw i32 %595, 1
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %597
  %599 = load i32, ptr %598, align 4, !tbaa !5
  %600 = mul nsw i32 %594, %599
  %601 = add nsw i32 %593, %600
  %602 = load i32, ptr %21, align 4, !tbaa !5
  %603 = load i32, ptr %64, align 4, !tbaa !5
  %604 = mul nsw i32 %602, %603
  %605 = add nsw i32 %601, %604
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds i16, ptr %592, i64 %606
  store i16 %591, ptr %607, align 2, !tbaa !29
  br label %608

608:                                              ; preds = %541
  %609 = load i32, ptr %21, align 4, !tbaa !5
  %610 = add nsw i32 %609, 1
  store i32 %610, ptr %21, align 4, !tbaa !5
  br label %533, !llvm.loop !31

611:                                              ; preds = %533
  br label %612

612:                                              ; preds = %611
  %613 = load i32, ptr %19, align 4, !tbaa !5
  %614 = add nsw i32 %613, 1
  store i32 %614, ptr %19, align 4, !tbaa !5
  br label %524, !llvm.loop !32

615:                                              ; preds = %524
  br label %616

616:                                              ; preds = %615
  %617 = load i32, ptr %18, align 4, !tbaa !5
  %618 = add nsw i32 %617, 1
  store i32 %618, ptr %18, align 4, !tbaa !5
  br label %515, !llvm.loop !33

619:                                              ; preds = %515
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %620

620:                                              ; preds = %642, %619
  %621 = load i32, ptr %20, align 4, !tbaa !5
  %622 = load i32, ptr %62, align 4, !tbaa !5
  %623 = sub nsw i32 %622, 1
  %624 = icmp slt i32 %621, %623
  br i1 %624, label %625, label %645

625:                                              ; preds = %620
  %626 = load i32, ptr %20, align 4, !tbaa !5
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %627
  %629 = load ptr, ptr %628, align 8, !tbaa !9
  %630 = load i32, ptr %20, align 4, !tbaa !5
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %58, i64 0, i64 %631
  %633 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %632, i32 0, i32 0
  store ptr %629, ptr %633, align 16, !tbaa !34
  %634 = load i32, ptr %20, align 4, !tbaa !5
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %635
  %637 = load ptr, ptr %636, align 8, !tbaa !9
  %638 = load i32, ptr %20, align 4, !tbaa !5
  %639 = sext i32 %638 to i64
  %640 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %59, i64 0, i64 %639
  %641 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %640, i32 0, i32 0
  store ptr %637, ptr %641, align 16, !tbaa !34
  br label %642

642:                                              ; preds = %625
  %643 = load i32, ptr %20, align 4, !tbaa !5
  %644 = add nsw i32 %643, 1
  store i32 %644, ptr %20, align 4, !tbaa !5
  br label %620, !llvm.loop !36

645:                                              ; preds = %620
  %646 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %43, i32 0, i32 0
  store i32 0, ptr %646, align 4, !tbaa !37
  %647 = call i32 @libxsmm_meqn_create()
  store i32 %647, ptr %6, align 4, !tbaa !5
  %648 = load i32, ptr %6, align 4, !tbaa !5
  %649 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %650 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %649, i32 0, i32 0
  store i32 %648, ptr %650, align 16, !tbaa !39
  %651 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %652 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %651, i32 0, i32 1
  store i32 0, ptr %652, align 4, !tbaa !41
  %653 = load i32, ptr %6, align 4, !tbaa !5
  %654 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 1
  %655 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %654, i32 0, i32 0
  store i32 %653, ptr %655, align 8, !tbaa !39
  %656 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 1
  %657 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %656, i32 0, i32 1
  store i32 1, ptr %657, align 4, !tbaa !41
  %658 = load i32, ptr %6, align 4, !tbaa !5
  %659 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %660 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %659, i32 0, i32 0
  store i32 %658, ptr %660, align 16, !tbaa !39
  %661 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %662 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %661, i32 0, i32 1
  store i32 2, ptr %662, align 4, !tbaa !41
  %663 = load i32, ptr %6, align 4, !tbaa !5
  %664 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %665 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %664, i32 0, i32 0
  store i32 %663, ptr %665, align 8, !tbaa !39
  %666 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %667 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %666, i32 0, i32 1
  store i32 3, ptr %667, align 4, !tbaa !41
  %668 = load i32, ptr %6, align 4, !tbaa !5
  %669 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %670 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %669, i32 0, i32 0
  store i32 %668, ptr %670, align 16, !tbaa !42
  %671 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %672 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %671, i32 0, i32 1
  store i32 -1, ptr %672, align 4, !tbaa !44
  %673 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %674 = load i64, ptr %673, align 16
  %675 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %674, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  %676 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %677 = load i64, ptr %676, align 16
  %678 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %677, i32 noundef 11, i32 noundef 1, i32 noundef 0)
  %679 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %680 = load i64, ptr %679, align 16
  %681 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %680, i32 noundef 1, i32 noundef 1, i32 noundef 0)
  %682 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %683 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 0
  %684 = load i64, ptr %682, align 16
  %685 = getelementptr inbounds { i64, i64 }, ptr %683, i32 0, i32 0
  %686 = load i64, ptr %685, align 16
  %687 = getelementptr inbounds { i64, i64 }, ptr %683, i32 0, i32 1
  %688 = load i64, ptr %687, align 8
  %689 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %690 = load i64, ptr %689, align 4
  %691 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %692 = load i64, ptr %691, align 4
  %693 = call i32 @libxsmm_meqn_push_back_arg(i64 %684, i64 %686, i64 %688, i64 %690, i64 %692)
  %694 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 1
  %695 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 1
  %696 = load i64, ptr %694, align 8
  %697 = getelementptr inbounds { i64, i64 }, ptr %695, i32 0, i32 0
  %698 = load i64, ptr %697, align 16
  %699 = getelementptr inbounds { i64, i64 }, ptr %695, i32 0, i32 1
  %700 = load i64, ptr %699, align 8
  %701 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %702 = load i64, ptr %701, align 4
  %703 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %704 = load i64, ptr %703, align 4
  %705 = call i32 @libxsmm_meqn_push_back_arg(i64 %696, i64 %698, i64 %700, i64 %702, i64 %704)
  %706 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %707 = load i64, ptr %706, align 16
  %708 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %707, i32 noundef 7, i32 noundef 1, i32 noundef 0)
  %709 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %710 = load i64, ptr %709, align 16
  %711 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %710, i32 noundef 6, i32 noundef 1, i32 noundef 0)
  %712 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %713 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 2
  %714 = load i64, ptr %712, align 16
  %715 = getelementptr inbounds { i64, i64 }, ptr %713, i32 0, i32 0
  %716 = load i64, ptr %715, align 16
  %717 = getelementptr inbounds { i64, i64 }, ptr %713, i32 0, i32 1
  %718 = load i64, ptr %717, align 8
  %719 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %720 = load i64, ptr %719, align 4
  %721 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %722 = load i64, ptr %721, align 4
  %723 = call i32 @libxsmm_meqn_push_back_arg(i64 %714, i64 %716, i64 %718, i64 %720, i64 %722)
  %724 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %725 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 3
  %726 = load i64, ptr %724, align 8
  %727 = getelementptr inbounds { i64, i64 }, ptr %725, i32 0, i32 0
  %728 = load i64, ptr %727, align 16
  %729 = getelementptr inbounds { i64, i64 }, ptr %725, i32 0, i32 1
  %730 = load i64, ptr %729, align 8
  %731 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %732 = load i64, ptr %731, align 4
  %733 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %734 = load i64, ptr %733, align 4
  %735 = call i32 @libxsmm_meqn_push_back_arg(i64 %726, i64 %728, i64 %730, i64 %732, i64 %734)
  %736 = load i32, ptr %6, align 4, !tbaa !5
  call void @libxsmm_meqn_tree_print(i32 noundef %736)
  %737 = load i32, ptr %6, align 4, !tbaa !5
  %738 = load i32, ptr %62, align 4, !tbaa !5
  %739 = sub nsw i32 %738, 1
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %740
  %742 = getelementptr inbounds { i64, i64 }, ptr %741, i32 0, i32 0
  %743 = load i64, ptr %742, align 16
  %744 = getelementptr inbounds { i64, i64 }, ptr %741, i32 0, i32 1
  %745 = load i64, ptr %744, align 8
  %746 = call ptr @libxsmm_dispatch_meqn(i32 noundef %737, i64 %743, i64 %745)
  store ptr %746, ptr %12, align 8, !tbaa !9
  %747 = load i32, ptr %32, align 4, !tbaa !5
  %748 = icmp eq i32 %747, 1
  br i1 %748, label %749, label %752

749:                                              ; preds = %645
  %750 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %58, i64 0, i64 0
  %751 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %24, i32 0, i32 1
  store ptr %750, ptr %751, align 8, !tbaa !45
  br label %755

752:                                              ; preds = %645
  %753 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %59, i64 0, i64 0
  %754 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %24, i32 0, i32 1
  store ptr %753, ptr %754, align 8, !tbaa !45
  br label %755

755:                                              ; preds = %752, %749
  %756 = load i32, ptr %33, align 4, !tbaa !5
  %757 = icmp eq i32 %756, 1
  br i1 %757, label %758, label %766

758:                                              ; preds = %755
  %759 = load i32, ptr %62, align 4, !tbaa !5
  %760 = sub nsw i32 %759, 1
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %761
  %763 = load ptr, ptr %762, align 8, !tbaa !9
  %764 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %24, i32 0, i32 2
  %765 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %764, i32 0, i32 0
  store ptr %763, ptr %765, align 8, !tbaa !47
  br label %774

766:                                              ; preds = %755
  %767 = load i32, ptr %62, align 4, !tbaa !5
  %768 = sub nsw i32 %767, 1
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %769
  %771 = load ptr, ptr %770, align 8, !tbaa !9
  %772 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %24, i32 0, i32 2
  %773 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %772, i32 0, i32 0
  store ptr %771, ptr %773, align 8, !tbaa !47
  br label %774

774:                                              ; preds = %766, %758
  %775 = load ptr, ptr %12, align 8, !tbaa !9
  call void %775(ptr noundef %24)
  %776 = load i32, ptr %30, align 4, !tbaa !5
  %777 = icmp eq i32 %776, 0
  br i1 %777, label %781, label %778

778:                                              ; preds = %774
  %779 = load i32, ptr %30, align 4, !tbaa !5
  %780 = icmp eq i32 %779, 1
  br i1 %780, label %781, label %834

781:                                              ; preds = %778, %774
  %782 = load i32, ptr %63, align 4, !tbaa !5
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %783
  %785 = load ptr, ptr %784, align 8, !tbaa !9
  %786 = load i32, ptr %62, align 4, !tbaa !5
  %787 = sub nsw i32 %786, 1
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %788
  %790 = load i32, ptr %789, align 4, !tbaa !5
  %791 = load i32, ptr %62, align 4, !tbaa !5
  %792 = sub nsw i32 %791, 1
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %793
  %795 = load i32, ptr %794, align 4, !tbaa !5
  %796 = load i32, ptr %62, align 4, !tbaa !5
  %797 = sub nsw i32 %796, 1
  %798 = sext i32 %797 to i64
  %799 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %798
  %800 = load i32, ptr %799, align 4, !tbaa !5
  %801 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %802 = load ptr, ptr %801, align 16, !tbaa !9
  %803 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %804 = load i32, ptr %803, align 16, !tbaa !5
  %805 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %806 = load i32, ptr %805, align 16, !tbaa !5
  %807 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %808 = load i32, ptr %807, align 16, !tbaa !5
  %809 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %810 = load ptr, ptr %809, align 8, !tbaa !9
  %811 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %812 = load i32, ptr %811, align 4, !tbaa !5
  %813 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %814 = load i32, ptr %813, align 4, !tbaa !5
  %815 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %816 = load i32, ptr %815, align 4, !tbaa !5
  %817 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %818 = load ptr, ptr %817, align 16, !tbaa !9
  %819 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %820 = load i32, ptr %819, align 8, !tbaa !5
  %821 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %822 = load i32, ptr %821, align 8, !tbaa !5
  %823 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %824 = load i32, ptr %823, align 8, !tbaa !5
  %825 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %826 = load ptr, ptr %825, align 8, !tbaa !9
  %827 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %828 = load i32, ptr %827, align 4, !tbaa !5
  %829 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %830 = load i32, ptr %829, align 4, !tbaa !5
  %831 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %832 = load i32, ptr %831, align 4, !tbaa !5
  %833 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn0_f32(ptr noundef %785, i32 noundef %790, i32 noundef %795, i32 noundef %800, ptr noundef %802, i32 noundef %804, i32 noundef %806, i32 noundef %808, ptr noundef %810, i32 noundef %812, i32 noundef %814, i32 noundef %816, ptr noundef %818, i32 noundef %820, i32 noundef %822, i32 noundef %824, ptr noundef %826, i32 noundef %828, i32 noundef %830, i32 noundef %832, ptr noundef %833)
  br label %844

834:                                              ; preds = %778
  %835 = load i32, ptr %30, align 4, !tbaa !5
  %836 = icmp eq i32 %835, 2
  br i1 %836, label %837, label %838

837:                                              ; preds = %834
  br label %843

838:                                              ; preds = %834
  %839 = load i32, ptr %30, align 4, !tbaa !5
  %840 = icmp eq i32 %839, 3
  br i1 %840, label %841, label %842

841:                                              ; preds = %838
  br label %842

842:                                              ; preds = %841, %838
  br label %843

843:                                              ; preds = %842, %837
  br label %844

844:                                              ; preds = %843, %781
  %845 = load i32, ptr %30, align 4, !tbaa !5
  %846 = icmp eq i32 %845, 0
  br i1 %846, label %847, label %849

847:                                              ; preds = %844
  %848 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  br label %867

849:                                              ; preds = %844
  %850 = load i32, ptr %30, align 4, !tbaa !5
  %851 = icmp eq i32 %850, 1
  br i1 %851, label %852, label %854

852:                                              ; preds = %849
  %853 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  br label %866

854:                                              ; preds = %849
  %855 = load i32, ptr %30, align 4, !tbaa !5
  %856 = icmp eq i32 %855, 2
  br i1 %856, label %857, label %859

857:                                              ; preds = %854
  %858 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %865

859:                                              ; preds = %854
  %860 = load i32, ptr %30, align 4, !tbaa !5
  %861 = icmp eq i32 %860, 3
  br i1 %861, label %862, label %864

862:                                              ; preds = %859
  %863 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %864

864:                                              ; preds = %862, %859
  br label %865

865:                                              ; preds = %864, %857
  br label %866

866:                                              ; preds = %865, %852
  br label %867

867:                                              ; preds = %866, %847
  %868 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %869 = load i32, ptr %30, align 4, !tbaa !5
  %870 = icmp eq i32 %869, 1
  br i1 %870, label %871, label %900

871:                                              ; preds = %867
  %872 = load i32, ptr %62, align 4, !tbaa !5
  %873 = sub nsw i32 %872, 1
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %874
  %876 = load ptr, ptr %875, align 8, !tbaa !9
  %877 = load i32, ptr %62, align 4, !tbaa !5
  %878 = sub nsw i32 %877, 1
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %879
  %881 = load ptr, ptr %880, align 8, !tbaa !9
  %882 = load i32, ptr %62, align 4, !tbaa !5
  %883 = sub nsw i32 %882, 1
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %884
  %886 = load i32, ptr %885, align 4, !tbaa !5
  %887 = load i32, ptr %62, align 4, !tbaa !5
  %888 = sub nsw i32 %887, 1
  %889 = sext i32 %888 to i64
  %890 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %889
  %891 = load i32, ptr %890, align 4, !tbaa !5
  %892 = mul nsw i32 %886, %891
  %893 = load i32, ptr %62, align 4, !tbaa !5
  %894 = sub nsw i32 %893, 1
  %895 = sext i32 %894 to i64
  %896 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %895
  %897 = load i32, ptr %896, align 4, !tbaa !5
  %898 = mul nsw i32 %892, %897
  %899 = sext i32 %898 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %876, ptr noundef %881, i64 noundef %899)
  br label %900

900:                                              ; preds = %871, %867
  %901 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %902 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %903 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %904 = load i32, ptr %62, align 4, !tbaa !5
  %905 = sub nsw i32 %904, 1
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %906
  %908 = load i32, ptr %907, align 4, !tbaa !5
  %909 = load i32, ptr %62, align 4, !tbaa !5
  %910 = sub nsw i32 %909, 1
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %911
  %913 = load i32, ptr %912, align 4, !tbaa !5
  %914 = mul nsw i32 %908, %913
  %915 = load i32, ptr %62, align 4, !tbaa !5
  %916 = sub nsw i32 %915, 1
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %917
  %919 = load i32, ptr %918, align 4, !tbaa !5
  %920 = mul nsw i32 %914, %919
  %921 = load i32, ptr %63, align 4, !tbaa !5
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %922
  %924 = load ptr, ptr %923, align 8, !tbaa !9
  %925 = load i32, ptr %62, align 4, !tbaa !5
  %926 = sub nsw i32 %925, 1
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %927
  %929 = load ptr, ptr %928, align 8, !tbaa !9
  %930 = call i32 @libxsmm_matdiff(ptr noundef %29, i32 noundef 1, i32 noundef %920, i32 noundef 1, ptr noundef %924, ptr noundef %929, ptr noundef null, ptr noundef null)
  %931 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 10
  %932 = load double, ptr %931, align 8, !tbaa !48
  %933 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %932)
  %934 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 15
  %935 = load double, ptr %934, align 8, !tbaa !50
  %936 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %935)
  %937 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 7
  %938 = load double, ptr %937, align 8, !tbaa !51
  %939 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %938)
  %940 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 8
  %941 = load double, ptr %940, align 8, !tbaa !52
  %942 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %941)
  %943 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 5
  %944 = load double, ptr %943, align 8, !tbaa !53
  %945 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %944)
  %946 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 6
  %947 = load double, ptr %946, align 8, !tbaa !54
  %948 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %947)
  %949 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 4
  %950 = load double, ptr %949, align 8, !tbaa !55
  %951 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %950)
  %952 = load i32, ptr %30, align 4, !tbaa !5
  %953 = icmp eq i32 %952, 0
  br i1 %953, label %957, label %954

954:                                              ; preds = %900
  %955 = load i32, ptr %30, align 4, !tbaa !5
  %956 = icmp eq i32 %955, 1
  br i1 %956, label %957, label %1010

957:                                              ; preds = %954, %900
  %958 = load i32, ptr %63, align 4, !tbaa !5
  %959 = sext i32 %958 to i64
  %960 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %959
  %961 = load ptr, ptr %960, align 8, !tbaa !9
  %962 = load i32, ptr %62, align 4, !tbaa !5
  %963 = sub nsw i32 %962, 1
  %964 = sext i32 %963 to i64
  %965 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %964
  %966 = load i32, ptr %965, align 4, !tbaa !5
  %967 = load i32, ptr %62, align 4, !tbaa !5
  %968 = sub nsw i32 %967, 1
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %969
  %971 = load i32, ptr %970, align 4, !tbaa !5
  %972 = load i32, ptr %62, align 4, !tbaa !5
  %973 = sub nsw i32 %972, 1
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %974
  %976 = load i32, ptr %975, align 4, !tbaa !5
  %977 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %978 = load ptr, ptr %977, align 16, !tbaa !9
  %979 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %980 = load i32, ptr %979, align 16, !tbaa !5
  %981 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %982 = load i32, ptr %981, align 16, !tbaa !5
  %983 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %984 = load i32, ptr %983, align 16, !tbaa !5
  %985 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %986 = load ptr, ptr %985, align 8, !tbaa !9
  %987 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %988 = load i32, ptr %987, align 4, !tbaa !5
  %989 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %990 = load i32, ptr %989, align 4, !tbaa !5
  %991 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %992 = load i32, ptr %991, align 4, !tbaa !5
  %993 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %994 = load ptr, ptr %993, align 16, !tbaa !9
  %995 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %996 = load i32, ptr %995, align 8, !tbaa !5
  %997 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %998 = load i32, ptr %997, align 8, !tbaa !5
  %999 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1000 = load i32, ptr %999, align 8, !tbaa !5
  %1001 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %1002 = load ptr, ptr %1001, align 8, !tbaa !9
  %1003 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %1004 = load i32, ptr %1003, align 4, !tbaa !5
  %1005 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1006 = load i32, ptr %1005, align 4, !tbaa !5
  %1007 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1008 = load i32, ptr %1007, align 4, !tbaa !5
  %1009 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn0_f32(ptr noundef %961, i32 noundef %966, i32 noundef %971, i32 noundef %976, ptr noundef %978, i32 noundef %980, i32 noundef %982, i32 noundef %984, ptr noundef %986, i32 noundef %988, i32 noundef %990, i32 noundef %992, ptr noundef %994, i32 noundef %996, i32 noundef %998, i32 noundef %1000, ptr noundef %1002, i32 noundef %1004, i32 noundef %1006, i32 noundef %1008, ptr noundef %1009)
  br label %1020

1010:                                             ; preds = %954
  %1011 = load i32, ptr %30, align 4, !tbaa !5
  %1012 = icmp eq i32 %1011, 2
  br i1 %1012, label %1013, label %1014

1013:                                             ; preds = %1010
  br label %1019

1014:                                             ; preds = %1010
  %1015 = load i32, ptr %30, align 4, !tbaa !5
  %1016 = icmp eq i32 %1015, 3
  br i1 %1016, label %1017, label %1018

1017:                                             ; preds = %1014
  br label %1018

1018:                                             ; preds = %1017, %1014
  br label %1019

1019:                                             ; preds = %1018, %1013
  br label %1020

1020:                                             ; preds = %1019, %957
  %1021 = call i64 @libxsmm_timer_tick()
  store i64 %1021, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %1022

1022:                                             ; preds = %1096, %1020
  %1023 = load i32, ptr %22, align 4, !tbaa !5
  %1024 = load i32, ptr %31, align 4, !tbaa !5
  %1025 = icmp slt i32 %1023, %1024
  br i1 %1025, label %1026, label %1099

1026:                                             ; preds = %1022
  %1027 = load i32, ptr %30, align 4, !tbaa !5
  %1028 = icmp eq i32 %1027, 0
  br i1 %1028, label %1032, label %1029

1029:                                             ; preds = %1026
  %1030 = load i32, ptr %30, align 4, !tbaa !5
  %1031 = icmp eq i32 %1030, 1
  br i1 %1031, label %1032, label %1085

1032:                                             ; preds = %1029, %1026
  %1033 = load i32, ptr %63, align 4, !tbaa !5
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1034
  %1036 = load ptr, ptr %1035, align 8, !tbaa !9
  %1037 = load i32, ptr %62, align 4, !tbaa !5
  %1038 = sub nsw i32 %1037, 1
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %1039
  %1041 = load i32, ptr %1040, align 4, !tbaa !5
  %1042 = load i32, ptr %62, align 4, !tbaa !5
  %1043 = sub nsw i32 %1042, 1
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1044
  %1046 = load i32, ptr %1045, align 4, !tbaa !5
  %1047 = load i32, ptr %62, align 4, !tbaa !5
  %1048 = sub nsw i32 %1047, 1
  %1049 = sext i32 %1048 to i64
  %1050 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1049
  %1051 = load i32, ptr %1050, align 4, !tbaa !5
  %1052 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %1053 = load ptr, ptr %1052, align 16, !tbaa !9
  %1054 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %1055 = load i32, ptr %1054, align 16, !tbaa !5
  %1056 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %1057 = load i32, ptr %1056, align 16, !tbaa !5
  %1058 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %1059 = load i32, ptr %1058, align 16, !tbaa !5
  %1060 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %1061 = load ptr, ptr %1060, align 8, !tbaa !9
  %1062 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %1063 = load i32, ptr %1062, align 4, !tbaa !5
  %1064 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %1065 = load i32, ptr %1064, align 4, !tbaa !5
  %1066 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1067 = load i32, ptr %1066, align 4, !tbaa !5
  %1068 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %1069 = load ptr, ptr %1068, align 16, !tbaa !9
  %1070 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1071 = load i32, ptr %1070, align 8, !tbaa !5
  %1072 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1073 = load i32, ptr %1072, align 8, !tbaa !5
  %1074 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1075 = load i32, ptr %1074, align 8, !tbaa !5
  %1076 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %1077 = load ptr, ptr %1076, align 8, !tbaa !9
  %1078 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %1079 = load i32, ptr %1078, align 4, !tbaa !5
  %1080 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1081 = load i32, ptr %1080, align 4, !tbaa !5
  %1082 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1083 = load i32, ptr %1082, align 4, !tbaa !5
  %1084 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn0_f32(ptr noundef %1036, i32 noundef %1041, i32 noundef %1046, i32 noundef %1051, ptr noundef %1053, i32 noundef %1055, i32 noundef %1057, i32 noundef %1059, ptr noundef %1061, i32 noundef %1063, i32 noundef %1065, i32 noundef %1067, ptr noundef %1069, i32 noundef %1071, i32 noundef %1073, i32 noundef %1075, ptr noundef %1077, i32 noundef %1079, i32 noundef %1081, i32 noundef %1083, ptr noundef %1084)
  br label %1095

1085:                                             ; preds = %1029
  %1086 = load i32, ptr %30, align 4, !tbaa !5
  %1087 = icmp eq i32 %1086, 2
  br i1 %1087, label %1088, label %1089

1088:                                             ; preds = %1085
  br label %1094

1089:                                             ; preds = %1085
  %1090 = load i32, ptr %30, align 4, !tbaa !5
  %1091 = icmp eq i32 %1090, 3
  br i1 %1091, label %1092, label %1093

1092:                                             ; preds = %1089
  br label %1093

1093:                                             ; preds = %1092, %1089
  br label %1094

1094:                                             ; preds = %1093, %1088
  br label %1095

1095:                                             ; preds = %1094, %1032
  br label %1096

1096:                                             ; preds = %1095
  %1097 = load i32, ptr %22, align 4, !tbaa !5
  %1098 = add nsw i32 %1097, 1
  store i32 %1098, ptr %22, align 4, !tbaa !5
  br label %1022, !llvm.loop !58

1099:                                             ; preds = %1022
  %1100 = call i64 @libxsmm_timer_tick()
  store i64 %1100, ptr %26, align 8, !tbaa !56
  %1101 = load i64, ptr %25, align 8, !tbaa !56
  %1102 = load i64, ptr %26, align 8, !tbaa !56
  %1103 = call double @libxsmm_timer_duration(i64 noundef %1101, i64 noundef %1102)
  store double %1103, ptr %27, align 8, !tbaa !11
  %1104 = load double, ptr %27, align 8, !tbaa !11
  %1105 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %1104)
  %1106 = load ptr, ptr %12, align 8, !tbaa !9
  call void %1106(ptr noundef %24)
  %1107 = call i64 @libxsmm_timer_tick()
  store i64 %1107, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %1108

1108:                                             ; preds = %1114, %1099
  %1109 = load i32, ptr %22, align 4, !tbaa !5
  %1110 = load i32, ptr %31, align 4, !tbaa !5
  %1111 = icmp slt i32 %1109, %1110
  br i1 %1111, label %1112, label %1117

1112:                                             ; preds = %1108
  %1113 = load ptr, ptr %12, align 8, !tbaa !9
  call void %1113(ptr noundef %24)
  br label %1114

1114:                                             ; preds = %1112
  %1115 = load i32, ptr %22, align 4, !tbaa !5
  %1116 = add nsw i32 %1115, 1
  store i32 %1116, ptr %22, align 4, !tbaa !5
  br label %1108, !llvm.loop !59

1117:                                             ; preds = %1108
  %1118 = call i64 @libxsmm_timer_tick()
  store i64 %1118, ptr %26, align 8, !tbaa !56
  %1119 = load i64, ptr %25, align 8, !tbaa !56
  %1120 = load i64, ptr %26, align 8, !tbaa !56
  %1121 = call double @libxsmm_timer_duration(i64 noundef %1119, i64 noundef %1120)
  store double %1121, ptr %28, align 8, !tbaa !11
  %1122 = load double, ptr %28, align 8, !tbaa !11
  %1123 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %1122)
  %1124 = load double, ptr %28, align 8, !tbaa !11
  %1125 = fcmp olt double 0.000000e+00, %1124
  br i1 %1125, label %1126, label %1132

1126:                                             ; preds = %1117
  %1127 = load i32, ptr %31, align 4, !tbaa !5
  %1128 = load double, ptr %27, align 8, !tbaa !11
  %1129 = load double, ptr %28, align 8, !tbaa !11
  %1130 = fdiv double %1128, %1129
  %1131 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %1127, double noundef %1130)
  br label %1132

1132:                                             ; preds = %1126, %1117
  %1133 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  %1134 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %1135 = load i32, ptr %1134, align 4, !tbaa !5
  %1136 = sext i32 %1135 to i64
  %1137 = mul i64 4, %1136
  %1138 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1139 = load i32, ptr %1138, align 4, !tbaa !5
  %1140 = sext i32 %1139 to i64
  %1141 = mul i64 %1137, %1140
  %1142 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 1
  %1143 = load i32, ptr %1142, align 4, !tbaa !5
  %1144 = sext i32 %1143 to i64
  %1145 = mul i64 %1141, %1144
  %1146 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %1145, i64 noundef 64)
  store ptr %1146, ptr %50, align 8, !tbaa !9
  %1147 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %1148 = load ptr, ptr %1147, align 8, !tbaa !9
  store ptr %1148, ptr %51, align 8, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %1149

1149:                                             ; preds = %1200, %1132
  %1150 = load i32, ptr %18, align 4, !tbaa !5
  %1151 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %1152 = load i32, ptr %1151, align 4, !tbaa !5
  %1153 = icmp slt i32 %1150, %1152
  br i1 %1153, label %1154, label %1203

1154:                                             ; preds = %1149
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %1155

1155:                                             ; preds = %1196, %1154
  %1156 = load i32, ptr %19, align 4, !tbaa !5
  %1157 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1158 = load i32, ptr %1157, align 4, !tbaa !5
  %1159 = icmp slt i32 %1156, %1158
  br i1 %1159, label %1160, label %1199

1160:                                             ; preds = %1155
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %1161

1161:                                             ; preds = %1192, %1160
  %1162 = load i32, ptr %21, align 4, !tbaa !5
  %1163 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 1
  %1164 = load i32, ptr %1163, align 4, !tbaa !5
  %1165 = icmp slt i32 %1162, %1164
  br i1 %1165, label %1166, label %1195

1166:                                             ; preds = %1161
  %1167 = load ptr, ptr %51, align 8, !tbaa !9
  %1168 = load i32, ptr %19, align 4, !tbaa !5
  %1169 = load i32, ptr %18, align 4, !tbaa !5
  %1170 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1171 = load i32, ptr %1170, align 4, !tbaa !5
  %1172 = mul nsw i32 %1169, %1171
  %1173 = add nsw i32 %1168, %1172
  %1174 = load i32, ptr %21, align 4, !tbaa !5
  %1175 = mul nsw i32 %1174, 0
  %1176 = add nsw i32 %1173, %1175
  %1177 = sext i32 %1176 to i64
  %1178 = getelementptr inbounds float, ptr %1167, i64 %1177
  %1179 = load float, ptr %1178, align 4, !tbaa !23
  %1180 = load ptr, ptr %50, align 8, !tbaa !9
  %1181 = load i32, ptr %19, align 4, !tbaa !5
  %1182 = load i32, ptr %18, align 4, !tbaa !5
  %1183 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1184 = load i32, ptr %1183, align 4, !tbaa !5
  %1185 = mul nsw i32 %1182, %1184
  %1186 = add nsw i32 %1181, %1185
  %1187 = load i32, ptr %21, align 4, !tbaa !5
  %1188 = mul nsw i32 %1187, 0
  %1189 = add nsw i32 %1186, %1188
  %1190 = sext i32 %1189 to i64
  %1191 = getelementptr inbounds float, ptr %1180, i64 %1190
  store float %1179, ptr %1191, align 4, !tbaa !23
  br label %1192

1192:                                             ; preds = %1166
  %1193 = load i32, ptr %21, align 4, !tbaa !5
  %1194 = add nsw i32 %1193, 1
  store i32 %1194, ptr %21, align 4, !tbaa !5
  br label %1161, !llvm.loop !60

1195:                                             ; preds = %1161
  br label %1196

1196:                                             ; preds = %1195
  %1197 = load i32, ptr %19, align 4, !tbaa !5
  %1198 = add nsw i32 %1197, 1
  store i32 %1198, ptr %19, align 4, !tbaa !5
  br label %1155, !llvm.loop !61

1199:                                             ; preds = %1155
  br label %1200

1200:                                             ; preds = %1199
  %1201 = load i32, ptr %18, align 4, !tbaa !5
  %1202 = add nsw i32 %1201, 1
  store i32 %1202, ptr %18, align 4, !tbaa !5
  br label %1149, !llvm.loop !62

1203:                                             ; preds = %1149
  %1204 = load ptr, ptr %50, align 8, !tbaa !9
  %1205 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %58, i64 0, i64 1
  %1206 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1205, i32 0, i32 0
  store ptr %1204, ptr %1206, align 16, !tbaa !34
  %1207 = load ptr, ptr %50, align 8, !tbaa !9
  %1208 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %59, i64 0, i64 1
  %1209 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1208, i32 0, i32 0
  store ptr %1207, ptr %1209, align 16, !tbaa !34
  %1210 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 1
  %1211 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %1210, i32 0, i32 3
  store i32 1, ptr %1211, align 4, !tbaa !19
  %1212 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 0
  store i32 1, ptr %1212, align 4, !tbaa !37
  %1213 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 1
  store i32 3, ptr %1213, align 4, !tbaa !63
  %1214 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %1215 = load i32, ptr %1214, align 8, !tbaa !5
  %1216 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 2
  store i32 %1215, ptr %1216, align 4, !tbaa !64
  %1217 = load i32, ptr %32, align 4, !tbaa !5
  %1218 = icmp eq i32 %1217, 1
  br i1 %1218, label %1219, label %1229

1219:                                             ; preds = %1203
  %1220 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1221 = load i32, ptr %1220, align 8, !tbaa !5
  %1222 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1223 = load i32, ptr %1222, align 8, !tbaa !5
  %1224 = mul nsw i32 %1221, %1223
  %1225 = sext i32 %1224 to i64
  %1226 = mul i64 %1225, 4
  %1227 = trunc i64 %1226 to i32
  %1228 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 3
  store i32 %1227, ptr %1228, align 4, !tbaa !65
  br label %1239

1229:                                             ; preds = %1203
  %1230 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1231 = load i32, ptr %1230, align 8, !tbaa !5
  %1232 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1233 = load i32, ptr %1232, align 8, !tbaa !5
  %1234 = mul nsw i32 %1231, %1233
  %1235 = sext i32 %1234 to i64
  %1236 = mul i64 %1235, 2
  %1237 = trunc i64 %1236 to i32
  %1238 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 3
  store i32 %1237, ptr %1238, align 4, !tbaa !65
  br label %1239

1239:                                             ; preds = %1229, %1219
  %1240 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 0
  store i32 1, ptr %1240, align 4, !tbaa !37
  %1241 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 1
  store i32 3, ptr %1241, align 4, !tbaa !63
  %1242 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 3
  %1243 = load i32, ptr %1242, align 4, !tbaa !5
  %1244 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 2
  store i32 %1243, ptr %1244, align 4, !tbaa !64
  %1245 = load i32, ptr %32, align 4, !tbaa !5
  %1246 = icmp eq i32 %1245, 1
  br i1 %1246, label %1247, label %1257

1247:                                             ; preds = %1239
  %1248 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1249 = load i32, ptr %1248, align 4, !tbaa !5
  %1250 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1251 = load i32, ptr %1250, align 4, !tbaa !5
  %1252 = mul nsw i32 %1249, %1251
  %1253 = sext i32 %1252 to i64
  %1254 = mul i64 %1253, 4
  %1255 = trunc i64 %1254 to i32
  %1256 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 3
  store i32 %1255, ptr %1256, align 4, !tbaa !65
  br label %1267

1257:                                             ; preds = %1239
  %1258 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1259 = load i32, ptr %1258, align 4, !tbaa !5
  %1260 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1261 = load i32, ptr %1260, align 4, !tbaa !5
  %1262 = mul nsw i32 %1259, %1261
  %1263 = sext i32 %1262 to i64
  %1264 = mul i64 %1263, 2
  %1265 = trunc i64 %1264 to i32
  %1266 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 3
  store i32 %1265, ptr %1266, align 4, !tbaa !65
  br label %1267

1267:                                             ; preds = %1257, %1247
  %1268 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %1269 = load i32, ptr %1268, align 8, !tbaa !5
  %1270 = sext i32 %1269 to i64
  store i64 %1270, ptr %67, align 8, !tbaa !56
  %1271 = getelementptr inbounds [9 x %struct.libxsmm_matrix_op_arg], ptr %65, i64 0, i64 7
  %1272 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %1271, i32 0, i32 2
  store ptr %67, ptr %1272, align 16, !tbaa !66
  %1273 = getelementptr inbounds [9 x %struct.libxsmm_matrix_op_arg], ptr %65, i64 0, i64 0
  %1274 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %24, i32 0, i32 0
  store ptr %1273, ptr %1274, align 8, !tbaa !68
  %1275 = call i32 @libxsmm_meqn_create()
  store i32 %1275, ptr %7, align 4, !tbaa !5
  %1276 = load i32, ptr %7, align 4, !tbaa !5
  %1277 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %1278 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1277, i32 0, i32 0
  store i32 %1276, ptr %1278, align 16, !tbaa !39
  %1279 = load i32, ptr %7, align 4, !tbaa !5
  %1280 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 1
  %1281 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1280, i32 0, i32 0
  store i32 %1279, ptr %1281, align 8, !tbaa !39
  %1282 = load i32, ptr %7, align 4, !tbaa !5
  %1283 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %1284 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1283, i32 0, i32 0
  store i32 %1282, ptr %1284, align 16, !tbaa !39
  %1285 = load i32, ptr %7, align 4, !tbaa !5
  %1286 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %1287 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1286, i32 0, i32 0
  store i32 %1285, ptr %1287, align 8, !tbaa !39
  %1288 = load i32, ptr %7, align 4, !tbaa !5
  %1289 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1290 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %1289, i32 0, i32 0
  store i32 %1288, ptr %1290, align 16, !tbaa !42
  %1291 = load i32, ptr %7, align 4, !tbaa !5
  %1292 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %1293 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %1292, i32 0, i32 0
  store i32 %1291, ptr %1293, align 8, !tbaa !42
  %1294 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %1295 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %1294, i32 0, i32 1
  store i32 7, ptr %1295, align 4, !tbaa !44
  %1296 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1297 = load i64, ptr %1296, align 16
  %1298 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %1297, i32 noundef 2, i32 noundef 1, i32 noundef 0)
  %1299 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1300 = load i64, ptr %1299, align 16
  %1301 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1300, i32 noundef 11, i32 noundef 1, i32 noundef 0)
  %1302 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %1303 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 0
  %1304 = load i64, ptr %1302, align 16
  %1305 = getelementptr inbounds { i64, i64 }, ptr %1303, i32 0, i32 0
  %1306 = load i64, ptr %1305, align 16
  %1307 = getelementptr inbounds { i64, i64 }, ptr %1303, i32 0, i32 1
  %1308 = load i64, ptr %1307, align 8
  %1309 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %1310 = load i64, ptr %1309, align 4
  %1311 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %1312 = load i64, ptr %1311, align 4
  %1313 = call i32 @libxsmm_meqn_push_back_arg(i64 %1304, i64 %1306, i64 %1308, i64 %1310, i64 %1312)
  %1314 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1315 = load i64, ptr %1314, align 16
  %1316 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1315, i32 noundef 7, i32 noundef 1, i32 noundef 0)
  %1317 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %1318 = load i64, ptr %1317, align 8
  %1319 = call i32 @libxsmm_meqn_push_back_ternary_op(i64 %1318, i32 noundef 5, i32 noundef 1, i32 noundef 512)
  %1320 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %1321 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 2
  %1322 = load i64, ptr %1320, align 16
  %1323 = getelementptr inbounds { i64, i64 }, ptr %1321, i32 0, i32 0
  %1324 = load i64, ptr %1323, align 16
  %1325 = getelementptr inbounds { i64, i64 }, ptr %1321, i32 0, i32 1
  %1326 = load i64, ptr %1325, align 8
  %1327 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 0
  %1328 = load i64, ptr %1327, align 4
  %1329 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 1
  %1330 = load i64, ptr %1329, align 4
  %1331 = call i32 @libxsmm_meqn_push_back_arg(i64 %1322, i64 %1324, i64 %1326, i64 %1328, i64 %1330)
  %1332 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %1333 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 3
  %1334 = load i64, ptr %1332, align 8
  %1335 = getelementptr inbounds { i64, i64 }, ptr %1333, i32 0, i32 0
  %1336 = load i64, ptr %1335, align 16
  %1337 = getelementptr inbounds { i64, i64 }, ptr %1333, i32 0, i32 1
  %1338 = load i64, ptr %1337, align 8
  %1339 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 0
  %1340 = load i64, ptr %1339, align 4
  %1341 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 1
  %1342 = load i64, ptr %1341, align 4
  %1343 = call i32 @libxsmm_meqn_push_back_arg(i64 %1334, i64 %1336, i64 %1338, i64 %1340, i64 %1342)
  %1344 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 1
  %1345 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 1
  %1346 = load i64, ptr %1344, align 8
  %1347 = getelementptr inbounds { i64, i64 }, ptr %1345, i32 0, i32 0
  %1348 = load i64, ptr %1347, align 16
  %1349 = getelementptr inbounds { i64, i64 }, ptr %1345, i32 0, i32 1
  %1350 = load i64, ptr %1349, align 8
  %1351 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %1352 = load i64, ptr %1351, align 4
  %1353 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %1354 = load i64, ptr %1353, align 4
  %1355 = call i32 @libxsmm_meqn_push_back_arg(i64 %1346, i64 %1348, i64 %1350, i64 %1352, i64 %1354)
  %1356 = load i32, ptr %7, align 4, !tbaa !5
  call void @libxsmm_meqn_tree_print(i32 noundef %1356)
  %1357 = load i32, ptr %7, align 4, !tbaa !5
  %1358 = load i32, ptr %62, align 4, !tbaa !5
  %1359 = sub nsw i32 %1358, 1
  %1360 = sext i32 %1359 to i64
  %1361 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %1360
  %1362 = getelementptr inbounds { i64, i64 }, ptr %1361, i32 0, i32 0
  %1363 = load i64, ptr %1362, align 16
  %1364 = getelementptr inbounds { i64, i64 }, ptr %1361, i32 0, i32 1
  %1365 = load i64, ptr %1364, align 8
  %1366 = call ptr @libxsmm_dispatch_meqn(i32 noundef %1357, i64 %1363, i64 %1365)
  store ptr %1366, ptr %13, align 8, !tbaa !9
  %1367 = load ptr, ptr %13, align 8, !tbaa !9
  call void %1367(ptr noundef %24)
  %1368 = load i32, ptr %32, align 4, !tbaa !5
  %1369 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 1
  %1370 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %1369, i32 0, i32 3
  store i32 %1368, ptr %1370, align 4, !tbaa !19
  %1371 = load i32, ptr %30, align 4, !tbaa !5
  %1372 = icmp eq i32 %1371, 0
  br i1 %1372, label %1376, label %1373

1373:                                             ; preds = %1267
  %1374 = load i32, ptr %30, align 4, !tbaa !5
  %1375 = icmp eq i32 %1374, 1
  br i1 %1375, label %1376, label %1440

1376:                                             ; preds = %1373, %1267
  %1377 = load i32, ptr %63, align 4, !tbaa !5
  %1378 = sext i32 %1377 to i64
  %1379 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1378
  %1380 = load ptr, ptr %1379, align 8, !tbaa !9
  %1381 = load i32, ptr %62, align 4, !tbaa !5
  %1382 = sub nsw i32 %1381, 1
  %1383 = sext i32 %1382 to i64
  %1384 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %1383
  %1385 = load i32, ptr %1384, align 4, !tbaa !5
  %1386 = load i32, ptr %62, align 4, !tbaa !5
  %1387 = sub nsw i32 %1386, 1
  %1388 = sext i32 %1387 to i64
  %1389 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1388
  %1390 = load i32, ptr %1389, align 4, !tbaa !5
  %1391 = load i32, ptr %62, align 4, !tbaa !5
  %1392 = sub nsw i32 %1391, 1
  %1393 = sext i32 %1392 to i64
  %1394 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1393
  %1395 = load i32, ptr %1394, align 4, !tbaa !5
  %1396 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %1397 = load ptr, ptr %1396, align 16, !tbaa !9
  %1398 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %1399 = load i32, ptr %1398, align 16, !tbaa !5
  %1400 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %1401 = load i32, ptr %1400, align 16, !tbaa !5
  %1402 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %1403 = load i32, ptr %1402, align 16, !tbaa !5
  %1404 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %1405 = load ptr, ptr %1404, align 8, !tbaa !9
  %1406 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %1407 = load i32, ptr %1406, align 4, !tbaa !5
  %1408 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %1409 = load i32, ptr %1408, align 4, !tbaa !5
  %1410 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1411 = load i32, ptr %1410, align 4, !tbaa !5
  %1412 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %1413 = load i32, ptr %1412, align 8, !tbaa !5
  %1414 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %1415 = load ptr, ptr %1414, align 16, !tbaa !9
  %1416 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1417 = load i32, ptr %1416, align 8, !tbaa !5
  %1418 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1419 = load i32, ptr %1418, align 8, !tbaa !5
  %1420 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1421 = load i32, ptr %1420, align 8, !tbaa !5
  %1422 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1423 = load i32, ptr %1422, align 8, !tbaa !5
  %1424 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1425 = load i32, ptr %1424, align 8, !tbaa !5
  %1426 = mul nsw i32 %1423, %1425
  %1427 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %1428 = load ptr, ptr %1427, align 8, !tbaa !9
  %1429 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %1430 = load i32, ptr %1429, align 4, !tbaa !5
  %1431 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1432 = load i32, ptr %1431, align 4, !tbaa !5
  %1433 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1434 = load i32, ptr %1433, align 4, !tbaa !5
  %1435 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1436 = load i32, ptr %1435, align 4, !tbaa !5
  %1437 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1438 = load i32, ptr %1437, align 4, !tbaa !5
  %1439 = mul nsw i32 %1436, %1438
  call void @eqn1_f32(ptr noundef %1380, i32 noundef %1385, i32 noundef %1390, i32 noundef %1395, ptr noundef %1397, i32 noundef %1399, i32 noundef %1401, i32 noundef %1403, ptr noundef %1405, i32 noundef %1407, i32 noundef %1409, i32 noundef %1411, i32 noundef %1413, ptr noundef %1415, i32 noundef %1417, i32 noundef %1419, i32 noundef %1421, i32 noundef %1426, ptr noundef %1428, i32 noundef %1430, i32 noundef %1432, i32 noundef %1434, i32 noundef %1439)
  br label %1450

1440:                                             ; preds = %1373
  %1441 = load i32, ptr %30, align 4, !tbaa !5
  %1442 = icmp eq i32 %1441, 2
  br i1 %1442, label %1443, label %1444

1443:                                             ; preds = %1440
  br label %1449

1444:                                             ; preds = %1440
  %1445 = load i32, ptr %30, align 4, !tbaa !5
  %1446 = icmp eq i32 %1445, 3
  br i1 %1446, label %1447, label %1448

1447:                                             ; preds = %1444
  br label %1448

1448:                                             ; preds = %1447, %1444
  br label %1449

1449:                                             ; preds = %1448, %1443
  br label %1450

1450:                                             ; preds = %1449, %1376
  %1451 = load i32, ptr %30, align 4, !tbaa !5
  %1452 = icmp eq i32 %1451, 1
  br i1 %1452, label %1453, label %1482

1453:                                             ; preds = %1450
  %1454 = load i32, ptr %62, align 4, !tbaa !5
  %1455 = sub nsw i32 %1454, 1
  %1456 = sext i32 %1455 to i64
  %1457 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %1456
  %1458 = load ptr, ptr %1457, align 8, !tbaa !9
  %1459 = load i32, ptr %62, align 4, !tbaa !5
  %1460 = sub nsw i32 %1459, 1
  %1461 = sext i32 %1460 to i64
  %1462 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1461
  %1463 = load ptr, ptr %1462, align 8, !tbaa !9
  %1464 = load i32, ptr %62, align 4, !tbaa !5
  %1465 = sub nsw i32 %1464, 1
  %1466 = sext i32 %1465 to i64
  %1467 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1466
  %1468 = load i32, ptr %1467, align 4, !tbaa !5
  %1469 = load i32, ptr %62, align 4, !tbaa !5
  %1470 = sub nsw i32 %1469, 1
  %1471 = sext i32 %1470 to i64
  %1472 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1471
  %1473 = load i32, ptr %1472, align 4, !tbaa !5
  %1474 = mul nsw i32 %1468, %1473
  %1475 = load i32, ptr %62, align 4, !tbaa !5
  %1476 = sub nsw i32 %1475, 1
  %1477 = sext i32 %1476 to i64
  %1478 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %1477
  %1479 = load i32, ptr %1478, align 4, !tbaa !5
  %1480 = mul nsw i32 %1474, %1479
  %1481 = sext i32 %1480 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %1458, ptr noundef %1463, i64 noundef %1481)
  br label %1482

1482:                                             ; preds = %1453, %1450
  %1483 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1484 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %1485 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1486 = load i32, ptr %62, align 4, !tbaa !5
  %1487 = sub nsw i32 %1486, 1
  %1488 = sext i32 %1487 to i64
  %1489 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1488
  %1490 = load i32, ptr %1489, align 4, !tbaa !5
  %1491 = load i32, ptr %62, align 4, !tbaa !5
  %1492 = sub nsw i32 %1491, 1
  %1493 = sext i32 %1492 to i64
  %1494 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1493
  %1495 = load i32, ptr %1494, align 4, !tbaa !5
  %1496 = mul nsw i32 %1490, %1495
  %1497 = load i32, ptr %62, align 4, !tbaa !5
  %1498 = sub nsw i32 %1497, 1
  %1499 = sext i32 %1498 to i64
  %1500 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %1499
  %1501 = load i32, ptr %1500, align 4, !tbaa !5
  %1502 = mul nsw i32 %1496, %1501
  %1503 = load i32, ptr %63, align 4, !tbaa !5
  %1504 = sext i32 %1503 to i64
  %1505 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1504
  %1506 = load ptr, ptr %1505, align 8, !tbaa !9
  %1507 = load i32, ptr %62, align 4, !tbaa !5
  %1508 = sub nsw i32 %1507, 1
  %1509 = sext i32 %1508 to i64
  %1510 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1509
  %1511 = load ptr, ptr %1510, align 8, !tbaa !9
  %1512 = call i32 @libxsmm_matdiff(ptr noundef %29, i32 noundef 1, i32 noundef %1502, i32 noundef 1, ptr noundef %1506, ptr noundef %1511, ptr noundef null, ptr noundef null)
  %1513 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 10
  %1514 = load double, ptr %1513, align 8, !tbaa !48
  %1515 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %1514)
  %1516 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 15
  %1517 = load double, ptr %1516, align 8, !tbaa !50
  %1518 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %1517)
  %1519 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 7
  %1520 = load double, ptr %1519, align 8, !tbaa !51
  %1521 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %1520)
  %1522 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 8
  %1523 = load double, ptr %1522, align 8, !tbaa !52
  %1524 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %1523)
  %1525 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 5
  %1526 = load double, ptr %1525, align 8, !tbaa !53
  %1527 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %1526)
  %1528 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 6
  %1529 = load double, ptr %1528, align 8, !tbaa !54
  %1530 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %1529)
  %1531 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 4
  %1532 = load double, ptr %1531, align 8, !tbaa !55
  %1533 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %1532)
  %1534 = load i32, ptr %30, align 4, !tbaa !5
  %1535 = icmp eq i32 %1534, 0
  br i1 %1535, label %1539, label %1536

1536:                                             ; preds = %1482
  %1537 = load i32, ptr %30, align 4, !tbaa !5
  %1538 = icmp eq i32 %1537, 1
  br i1 %1538, label %1539, label %1603

1539:                                             ; preds = %1536, %1482
  %1540 = load i32, ptr %63, align 4, !tbaa !5
  %1541 = sext i32 %1540 to i64
  %1542 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1541
  %1543 = load ptr, ptr %1542, align 8, !tbaa !9
  %1544 = load i32, ptr %62, align 4, !tbaa !5
  %1545 = sub nsw i32 %1544, 1
  %1546 = sext i32 %1545 to i64
  %1547 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %1546
  %1548 = load i32, ptr %1547, align 4, !tbaa !5
  %1549 = load i32, ptr %62, align 4, !tbaa !5
  %1550 = sub nsw i32 %1549, 1
  %1551 = sext i32 %1550 to i64
  %1552 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1551
  %1553 = load i32, ptr %1552, align 4, !tbaa !5
  %1554 = load i32, ptr %62, align 4, !tbaa !5
  %1555 = sub nsw i32 %1554, 1
  %1556 = sext i32 %1555 to i64
  %1557 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1556
  %1558 = load i32, ptr %1557, align 4, !tbaa !5
  %1559 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %1560 = load ptr, ptr %1559, align 16, !tbaa !9
  %1561 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %1562 = load i32, ptr %1561, align 16, !tbaa !5
  %1563 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %1564 = load i32, ptr %1563, align 16, !tbaa !5
  %1565 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %1566 = load i32, ptr %1565, align 16, !tbaa !5
  %1567 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %1568 = load ptr, ptr %1567, align 8, !tbaa !9
  %1569 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %1570 = load i32, ptr %1569, align 4, !tbaa !5
  %1571 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %1572 = load i32, ptr %1571, align 4, !tbaa !5
  %1573 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1574 = load i32, ptr %1573, align 4, !tbaa !5
  %1575 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %1576 = load i32, ptr %1575, align 8, !tbaa !5
  %1577 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %1578 = load ptr, ptr %1577, align 16, !tbaa !9
  %1579 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1580 = load i32, ptr %1579, align 8, !tbaa !5
  %1581 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1582 = load i32, ptr %1581, align 8, !tbaa !5
  %1583 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1584 = load i32, ptr %1583, align 8, !tbaa !5
  %1585 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1586 = load i32, ptr %1585, align 8, !tbaa !5
  %1587 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1588 = load i32, ptr %1587, align 8, !tbaa !5
  %1589 = mul nsw i32 %1586, %1588
  %1590 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %1591 = load ptr, ptr %1590, align 8, !tbaa !9
  %1592 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %1593 = load i32, ptr %1592, align 4, !tbaa !5
  %1594 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1595 = load i32, ptr %1594, align 4, !tbaa !5
  %1596 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1597 = load i32, ptr %1596, align 4, !tbaa !5
  %1598 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1599 = load i32, ptr %1598, align 4, !tbaa !5
  %1600 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1601 = load i32, ptr %1600, align 4, !tbaa !5
  %1602 = mul nsw i32 %1599, %1601
  call void @eqn1_f32(ptr noundef %1543, i32 noundef %1548, i32 noundef %1553, i32 noundef %1558, ptr noundef %1560, i32 noundef %1562, i32 noundef %1564, i32 noundef %1566, ptr noundef %1568, i32 noundef %1570, i32 noundef %1572, i32 noundef %1574, i32 noundef %1576, ptr noundef %1578, i32 noundef %1580, i32 noundef %1582, i32 noundef %1584, i32 noundef %1589, ptr noundef %1591, i32 noundef %1593, i32 noundef %1595, i32 noundef %1597, i32 noundef %1602)
  br label %1613

1603:                                             ; preds = %1536
  %1604 = load i32, ptr %30, align 4, !tbaa !5
  %1605 = icmp eq i32 %1604, 2
  br i1 %1605, label %1606, label %1607

1606:                                             ; preds = %1603
  br label %1612

1607:                                             ; preds = %1603
  %1608 = load i32, ptr %30, align 4, !tbaa !5
  %1609 = icmp eq i32 %1608, 3
  br i1 %1609, label %1610, label %1611

1610:                                             ; preds = %1607
  br label %1611

1611:                                             ; preds = %1610, %1607
  br label %1612

1612:                                             ; preds = %1611, %1606
  br label %1613

1613:                                             ; preds = %1612, %1539
  %1614 = call i64 @libxsmm_timer_tick()
  store i64 %1614, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %1615

1615:                                             ; preds = %1700, %1613
  %1616 = load i32, ptr %22, align 4, !tbaa !5
  %1617 = load i32, ptr %31, align 4, !tbaa !5
  %1618 = icmp slt i32 %1616, %1617
  br i1 %1618, label %1619, label %1703

1619:                                             ; preds = %1615
  %1620 = load i32, ptr %30, align 4, !tbaa !5
  %1621 = icmp eq i32 %1620, 0
  br i1 %1621, label %1625, label %1622

1622:                                             ; preds = %1619
  %1623 = load i32, ptr %30, align 4, !tbaa !5
  %1624 = icmp eq i32 %1623, 1
  br i1 %1624, label %1625, label %1689

1625:                                             ; preds = %1622, %1619
  %1626 = load i32, ptr %63, align 4, !tbaa !5
  %1627 = sext i32 %1626 to i64
  %1628 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1627
  %1629 = load ptr, ptr %1628, align 8, !tbaa !9
  %1630 = load i32, ptr %62, align 4, !tbaa !5
  %1631 = sub nsw i32 %1630, 1
  %1632 = sext i32 %1631 to i64
  %1633 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %1632
  %1634 = load i32, ptr %1633, align 4, !tbaa !5
  %1635 = load i32, ptr %62, align 4, !tbaa !5
  %1636 = sub nsw i32 %1635, 1
  %1637 = sext i32 %1636 to i64
  %1638 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1637
  %1639 = load i32, ptr %1638, align 4, !tbaa !5
  %1640 = load i32, ptr %62, align 4, !tbaa !5
  %1641 = sub nsw i32 %1640, 1
  %1642 = sext i32 %1641 to i64
  %1643 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1642
  %1644 = load i32, ptr %1643, align 4, !tbaa !5
  %1645 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %1646 = load ptr, ptr %1645, align 16, !tbaa !9
  %1647 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %1648 = load i32, ptr %1647, align 16, !tbaa !5
  %1649 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %1650 = load i32, ptr %1649, align 16, !tbaa !5
  %1651 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %1652 = load i32, ptr %1651, align 16, !tbaa !5
  %1653 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %1654 = load ptr, ptr %1653, align 8, !tbaa !9
  %1655 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %1656 = load i32, ptr %1655, align 4, !tbaa !5
  %1657 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %1658 = load i32, ptr %1657, align 4, !tbaa !5
  %1659 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1660 = load i32, ptr %1659, align 4, !tbaa !5
  %1661 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %1662 = load i32, ptr %1661, align 8, !tbaa !5
  %1663 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %1664 = load ptr, ptr %1663, align 16, !tbaa !9
  %1665 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1666 = load i32, ptr %1665, align 8, !tbaa !5
  %1667 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1668 = load i32, ptr %1667, align 8, !tbaa !5
  %1669 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1670 = load i32, ptr %1669, align 8, !tbaa !5
  %1671 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1672 = load i32, ptr %1671, align 8, !tbaa !5
  %1673 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1674 = load i32, ptr %1673, align 8, !tbaa !5
  %1675 = mul nsw i32 %1672, %1674
  %1676 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %1677 = load ptr, ptr %1676, align 8, !tbaa !9
  %1678 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %1679 = load i32, ptr %1678, align 4, !tbaa !5
  %1680 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1681 = load i32, ptr %1680, align 4, !tbaa !5
  %1682 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1683 = load i32, ptr %1682, align 4, !tbaa !5
  %1684 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1685 = load i32, ptr %1684, align 4, !tbaa !5
  %1686 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1687 = load i32, ptr %1686, align 4, !tbaa !5
  %1688 = mul nsw i32 %1685, %1687
  call void @eqn1_f32(ptr noundef %1629, i32 noundef %1634, i32 noundef %1639, i32 noundef %1644, ptr noundef %1646, i32 noundef %1648, i32 noundef %1650, i32 noundef %1652, ptr noundef %1654, i32 noundef %1656, i32 noundef %1658, i32 noundef %1660, i32 noundef %1662, ptr noundef %1664, i32 noundef %1666, i32 noundef %1668, i32 noundef %1670, i32 noundef %1675, ptr noundef %1677, i32 noundef %1679, i32 noundef %1681, i32 noundef %1683, i32 noundef %1688)
  br label %1699

1689:                                             ; preds = %1622
  %1690 = load i32, ptr %30, align 4, !tbaa !5
  %1691 = icmp eq i32 %1690, 2
  br i1 %1691, label %1692, label %1693

1692:                                             ; preds = %1689
  br label %1698

1693:                                             ; preds = %1689
  %1694 = load i32, ptr %30, align 4, !tbaa !5
  %1695 = icmp eq i32 %1694, 3
  br i1 %1695, label %1696, label %1697

1696:                                             ; preds = %1693
  br label %1697

1697:                                             ; preds = %1696, %1693
  br label %1698

1698:                                             ; preds = %1697, %1692
  br label %1699

1699:                                             ; preds = %1698, %1625
  br label %1700

1700:                                             ; preds = %1699
  %1701 = load i32, ptr %22, align 4, !tbaa !5
  %1702 = add nsw i32 %1701, 1
  store i32 %1702, ptr %22, align 4, !tbaa !5
  br label %1615, !llvm.loop !69

1703:                                             ; preds = %1615
  %1704 = call i64 @libxsmm_timer_tick()
  store i64 %1704, ptr %26, align 8, !tbaa !56
  %1705 = load i64, ptr %25, align 8, !tbaa !56
  %1706 = load i64, ptr %26, align 8, !tbaa !56
  %1707 = call double @libxsmm_timer_duration(i64 noundef %1705, i64 noundef %1706)
  store double %1707, ptr %27, align 8, !tbaa !11
  %1708 = load double, ptr %27, align 8, !tbaa !11
  %1709 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %1708)
  %1710 = load ptr, ptr %13, align 8, !tbaa !9
  call void %1710(ptr noundef %24)
  %1711 = call i64 @libxsmm_timer_tick()
  store i64 %1711, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %1712

1712:                                             ; preds = %1718, %1703
  %1713 = load i32, ptr %22, align 4, !tbaa !5
  %1714 = load i32, ptr %31, align 4, !tbaa !5
  %1715 = icmp slt i32 %1713, %1714
  br i1 %1715, label %1716, label %1721

1716:                                             ; preds = %1712
  %1717 = load ptr, ptr %13, align 8, !tbaa !9
  call void %1717(ptr noundef %24)
  br label %1718

1718:                                             ; preds = %1716
  %1719 = load i32, ptr %22, align 4, !tbaa !5
  %1720 = add nsw i32 %1719, 1
  store i32 %1720, ptr %22, align 4, !tbaa !5
  br label %1712, !llvm.loop !70

1721:                                             ; preds = %1712
  %1722 = call i64 @libxsmm_timer_tick()
  store i64 %1722, ptr %26, align 8, !tbaa !56
  %1723 = load i64, ptr %25, align 8, !tbaa !56
  %1724 = load i64, ptr %26, align 8, !tbaa !56
  %1725 = call double @libxsmm_timer_duration(i64 noundef %1723, i64 noundef %1724)
  store double %1725, ptr %28, align 8, !tbaa !11
  %1726 = load double, ptr %28, align 8, !tbaa !11
  %1727 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %1726)
  %1728 = load double, ptr %28, align 8, !tbaa !11
  %1729 = fcmp olt double 0.000000e+00, %1728
  br i1 %1729, label %1730, label %1736

1730:                                             ; preds = %1721
  %1731 = load i32, ptr %31, align 4, !tbaa !5
  %1732 = load double, ptr %27, align 8, !tbaa !11
  %1733 = load double, ptr %28, align 8, !tbaa !11
  %1734 = fdiv double %1732, %1733
  %1735 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %1731, double noundef %1734)
  br label %1736

1736:                                             ; preds = %1730, %1721
  %1737 = load i32, ptr %30, align 4, !tbaa !5
  %1738 = icmp eq i32 %1737, 0
  br i1 %1738, label %1739, label %2185

1739:                                             ; preds = %1736
  %1740 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1741 = load i32, ptr %1740, align 8, !tbaa !5
  %1742 = sext i32 %1741 to i64
  %1743 = mul i64 4, %1742
  %1744 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %1743, i64 noundef 64)
  store ptr %1744, ptr %49, align 8, !tbaa !9
  %1745 = call i32 (ptr, ...) @printf(ptr noundef @.str.20)
  %1746 = load ptr, ptr %49, align 8, !tbaa !9
  %1747 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %1748 = load ptr, ptr %1747, align 16, !tbaa !9
  %1749 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1750 = load i32, ptr %1749, align 8, !tbaa !5
  %1751 = sext i32 %1750 to i64
  %1752 = mul i64 %1751, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1746, ptr align 4 %1748, i64 %1752, i1 false)
  %1753 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1754 = load i32, ptr %1753, align 8, !tbaa !5
  %1755 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %40, i32 0, i32 0
  store i32 %1754, ptr %1755, align 4, !tbaa !15
  %1756 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %40, i32 0, i32 1
  store i32 1, ptr %1756, align 4, !tbaa !17
  %1757 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1758 = load i32, ptr %1757, align 8, !tbaa !5
  %1759 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %40, i32 0, i32 2
  store i32 %1758, ptr %1759, align 4, !tbaa !18
  %1760 = load i32, ptr %32, align 4, !tbaa !5
  %1761 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %40, i32 0, i32 3
  store i32 %1760, ptr %1761, align 4, !tbaa !19
  %1762 = call i32 @libxsmm_meqn_create()
  store i32 %1762, ptr %11, align 4, !tbaa !5
  %1763 = load i32, ptr %11, align 4, !tbaa !5
  %1764 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %1765 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1764, i32 0, i32 0
  store i32 %1763, ptr %1765, align 16, !tbaa !39
  %1766 = load i32, ptr %11, align 4, !tbaa !5
  %1767 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %1768 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1767, i32 0, i32 0
  store i32 %1766, ptr %1768, align 8, !tbaa !39
  %1769 = load i32, ptr %11, align 4, !tbaa !5
  %1770 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1771 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %1770, i32 0, i32 0
  store i32 %1769, ptr %1771, align 16, !tbaa !42
  %1772 = load i32, ptr %11, align 4, !tbaa !5
  %1773 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %1774 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %1773, i32 0, i32 0
  store i32 %1772, ptr %1774, align 8, !tbaa !42
  %1775 = load i32, ptr %11, align 4, !tbaa !5
  %1776 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 42
  %1777 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1776, i32 0, i32 0
  store i32 %1775, ptr %1777, align 16, !tbaa !39
  %1778 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 42
  %1779 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %1778, i32 0, i32 1
  store i32 42, ptr %1779, align 4, !tbaa !41
  %1780 = load i32, ptr %66, align 4, !tbaa !5
  %1781 = icmp eq i32 %1780, 0
  br i1 %1781, label %1782, label %1783

1782:                                             ; preds = %1739
  br label %1799

1783:                                             ; preds = %1739
  %1784 = load i32, ptr %66, align 4, !tbaa !5
  %1785 = icmp eq i32 %1784, 1
  br i1 %1785, label %1786, label %1790

1786:                                             ; preds = %1783
  %1787 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1788 = load i64, ptr %1787, align 16
  %1789 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1788, i32 noundef 5, i32 noundef 1, i32 noundef 0)
  br label %1798

1790:                                             ; preds = %1783
  %1791 = load i32, ptr %66, align 4, !tbaa !5
  %1792 = icmp eq i32 %1791, 2
  br i1 %1792, label %1793, label %1797

1793:                                             ; preds = %1790
  %1794 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1795 = load i64, ptr %1794, align 16
  %1796 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1795, i32 noundef 9, i32 noundef 1, i32 noundef 0)
  br label %1797

1797:                                             ; preds = %1793, %1790
  br label %1798

1798:                                             ; preds = %1797, %1786
  br label %1799

1799:                                             ; preds = %1798, %1782
  %1800 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1801 = load i64, ptr %1800, align 16
  %1802 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %1801, i32 noundef 1, i32 noundef 1, i32 noundef 4)
  %1803 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %1804 = load i64, ptr %1803, align 16
  %1805 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %1804, i32 noundef 14, i32 noundef 1, i32 noundef 0)
  %1806 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 42
  %1807 = load i64, ptr %1806, align 16
  %1808 = getelementptr inbounds { i64, i64 }, ptr %40, i32 0, i32 0
  %1809 = load i64, ptr %1808, align 4
  %1810 = getelementptr inbounds { i64, i64 }, ptr %40, i32 0, i32 1
  %1811 = load i64, ptr %1810, align 4
  %1812 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %1813 = load i64, ptr %1812, align 4
  %1814 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %1815 = load i64, ptr %1814, align 4
  %1816 = call i32 @libxsmm_meqn_push_back_arg(i64 %1807, i64 %1809, i64 %1811, i64 %1813, i64 %1815)
  %1817 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %1818 = load i64, ptr %1817, align 8
  %1819 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %1818, i32 noundef 11, i32 noundef 1, i32 noundef 0)
  %1820 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %1821 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 2
  %1822 = load i64, ptr %1820, align 16
  %1823 = getelementptr inbounds { i64, i64 }, ptr %1821, i32 0, i32 0
  %1824 = load i64, ptr %1823, align 16
  %1825 = getelementptr inbounds { i64, i64 }, ptr %1821, i32 0, i32 1
  %1826 = load i64, ptr %1825, align 8
  %1827 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 0
  %1828 = load i64, ptr %1827, align 4
  %1829 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 1
  %1830 = load i64, ptr %1829, align 4
  %1831 = call i32 @libxsmm_meqn_push_back_arg(i64 %1822, i64 %1824, i64 %1826, i64 %1828, i64 %1830)
  %1832 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %1833 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 3
  %1834 = load i64, ptr %1832, align 8
  %1835 = getelementptr inbounds { i64, i64 }, ptr %1833, i32 0, i32 0
  %1836 = load i64, ptr %1835, align 16
  %1837 = getelementptr inbounds { i64, i64 }, ptr %1833, i32 0, i32 1
  %1838 = load i64, ptr %1837, align 8
  %1839 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 0
  %1840 = load i64, ptr %1839, align 4
  %1841 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 1
  %1842 = load i64, ptr %1841, align 4
  %1843 = call i32 @libxsmm_meqn_push_back_arg(i64 %1834, i64 %1836, i64 %1838, i64 %1840, i64 %1842)
  %1844 = load i32, ptr %11, align 4, !tbaa !5
  call void @libxsmm_meqn_tree_print(i32 noundef %1844)
  %1845 = load i32, ptr %11, align 4, !tbaa !5
  %1846 = load i32, ptr %62, align 4, !tbaa !5
  %1847 = sub nsw i32 %1846, 1
  %1848 = sext i32 %1847 to i64
  %1849 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %1848
  %1850 = getelementptr inbounds { i64, i64 }, ptr %1849, i32 0, i32 0
  %1851 = load i64, ptr %1850, align 16
  %1852 = getelementptr inbounds { i64, i64 }, ptr %1849, i32 0, i32 1
  %1853 = load i64, ptr %1852, align 8
  %1854 = call ptr @libxsmm_dispatch_meqn(i32 noundef %1845, i64 %1851, i64 %1853)
  store ptr %1854, ptr %17, align 8, !tbaa !9
  %1855 = load ptr, ptr %49, align 8, !tbaa !9
  %1856 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %58, i64 0, i64 42
  %1857 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1856, i32 0, i32 0
  store ptr %1855, ptr %1857, align 16, !tbaa !34
  %1858 = load ptr, ptr %17, align 8, !tbaa !9
  call void %1858(ptr noundef %24)
  %1859 = load i32, ptr %63, align 4, !tbaa !5
  %1860 = sext i32 %1859 to i64
  %1861 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1860
  %1862 = load ptr, ptr %1861, align 8, !tbaa !9
  %1863 = load i32, ptr %62, align 4, !tbaa !5
  %1864 = sub nsw i32 %1863, 1
  %1865 = sext i32 %1864 to i64
  %1866 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %1865
  %1867 = load i32, ptr %1866, align 4, !tbaa !5
  %1868 = load i32, ptr %62, align 4, !tbaa !5
  %1869 = sub nsw i32 %1868, 1
  %1870 = sext i32 %1869 to i64
  %1871 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1870
  %1872 = load i32, ptr %1871, align 4, !tbaa !5
  %1873 = load i32, ptr %62, align 4, !tbaa !5
  %1874 = sub nsw i32 %1873, 1
  %1875 = sext i32 %1874 to i64
  %1876 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1875
  %1877 = load i32, ptr %1876, align 4, !tbaa !5
  %1878 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %1879 = load ptr, ptr %1878, align 16, !tbaa !9
  %1880 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %1881 = load i32, ptr %1880, align 16, !tbaa !5
  %1882 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %1883 = load i32, ptr %1882, align 16, !tbaa !5
  %1884 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %1885 = load i32, ptr %1884, align 16, !tbaa !5
  %1886 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %1887 = load ptr, ptr %1886, align 8, !tbaa !9
  %1888 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %1889 = load i32, ptr %1888, align 4, !tbaa !5
  %1890 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %1891 = load i32, ptr %1890, align 4, !tbaa !5
  %1892 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %1893 = load i32, ptr %1892, align 4, !tbaa !5
  %1894 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %1895 = load i32, ptr %1894, align 8, !tbaa !5
  %1896 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %1897 = load ptr, ptr %1896, align 16, !tbaa !9
  %1898 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %1899 = load i32, ptr %1898, align 8, !tbaa !5
  %1900 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1901 = load i32, ptr %1900, align 8, !tbaa !5
  %1902 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1903 = load i32, ptr %1902, align 8, !tbaa !5
  %1904 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %1905 = load i32, ptr %1904, align 8, !tbaa !5
  %1906 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %1907 = load i32, ptr %1906, align 8, !tbaa !5
  %1908 = mul nsw i32 %1905, %1907
  %1909 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %1910 = load ptr, ptr %1909, align 8, !tbaa !9
  %1911 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %1912 = load i32, ptr %1911, align 4, !tbaa !5
  %1913 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1914 = load i32, ptr %1913, align 4, !tbaa !5
  %1915 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1916 = load i32, ptr %1915, align 4, !tbaa !5
  %1917 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %1918 = load i32, ptr %1917, align 4, !tbaa !5
  %1919 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %1920 = load i32, ptr %1919, align 4, !tbaa !5
  %1921 = mul nsw i32 %1918, %1920
  %1922 = load ptr, ptr %49, align 8, !tbaa !9
  %1923 = load i32, ptr %66, align 4, !tbaa !5
  %1924 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn4_f32(ptr noundef %1862, i32 noundef %1867, i32 noundef %1872, i32 noundef %1877, ptr noundef %1879, i32 noundef %1881, i32 noundef %1883, i32 noundef %1885, ptr noundef %1887, i32 noundef %1889, i32 noundef %1891, i32 noundef %1893, i32 noundef %1895, ptr noundef %1897, i32 noundef %1899, i32 noundef %1901, i32 noundef %1903, i32 noundef %1908, ptr noundef %1910, i32 noundef %1912, i32 noundef %1914, i32 noundef %1916, i32 noundef %1921, ptr noundef %1922, i32 noundef %1923, ptr noundef %1924)
  %1925 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1926 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %1927 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %1928 = load i32, ptr %62, align 4, !tbaa !5
  %1929 = sub nsw i32 %1928, 1
  %1930 = sext i32 %1929 to i64
  %1931 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1930
  %1932 = load i32, ptr %1931, align 4, !tbaa !5
  %1933 = load i32, ptr %62, align 4, !tbaa !5
  %1934 = sub nsw i32 %1933, 1
  %1935 = sext i32 %1934 to i64
  %1936 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1935
  %1937 = load i32, ptr %1936, align 4, !tbaa !5
  %1938 = mul nsw i32 %1932, %1937
  %1939 = load i32, ptr %62, align 4, !tbaa !5
  %1940 = sub nsw i32 %1939, 1
  %1941 = sext i32 %1940 to i64
  %1942 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %1941
  %1943 = load i32, ptr %1942, align 4, !tbaa !5
  %1944 = mul nsw i32 %1938, %1943
  %1945 = load i32, ptr %63, align 4, !tbaa !5
  %1946 = sext i32 %1945 to i64
  %1947 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1946
  %1948 = load ptr, ptr %1947, align 8, !tbaa !9
  %1949 = load i32, ptr %62, align 4, !tbaa !5
  %1950 = sub nsw i32 %1949, 1
  %1951 = sext i32 %1950 to i64
  %1952 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1951
  %1953 = load ptr, ptr %1952, align 8, !tbaa !9
  %1954 = call i32 @libxsmm_matdiff(ptr noundef %29, i32 noundef 1, i32 noundef %1944, i32 noundef 1, ptr noundef %1948, ptr noundef %1953, ptr noundef null, ptr noundef null)
  %1955 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 10
  %1956 = load double, ptr %1955, align 8, !tbaa !48
  %1957 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %1956)
  %1958 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 15
  %1959 = load double, ptr %1958, align 8, !tbaa !50
  %1960 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %1959)
  %1961 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 7
  %1962 = load double, ptr %1961, align 8, !tbaa !51
  %1963 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %1962)
  %1964 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 8
  %1965 = load double, ptr %1964, align 8, !tbaa !52
  %1966 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %1965)
  %1967 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 5
  %1968 = load double, ptr %1967, align 8, !tbaa !53
  %1969 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %1968)
  %1970 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 6
  %1971 = load double, ptr %1970, align 8, !tbaa !54
  %1972 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %1971)
  %1973 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 4
  %1974 = load double, ptr %1973, align 8, !tbaa !55
  %1975 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %1974)
  %1976 = load i32, ptr %30, align 4, !tbaa !5
  %1977 = icmp eq i32 %1976, 0
  br i1 %1977, label %1981, label %1978

1978:                                             ; preds = %1799
  %1979 = load i32, ptr %30, align 4, !tbaa !5
  %1980 = icmp eq i32 %1979, 1
  br i1 %1980, label %1981, label %2048

1981:                                             ; preds = %1978, %1799
  %1982 = load i32, ptr %63, align 4, !tbaa !5
  %1983 = sext i32 %1982 to i64
  %1984 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %1983
  %1985 = load ptr, ptr %1984, align 8, !tbaa !9
  %1986 = load i32, ptr %62, align 4, !tbaa !5
  %1987 = sub nsw i32 %1986, 1
  %1988 = sext i32 %1987 to i64
  %1989 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %1988
  %1990 = load i32, ptr %1989, align 4, !tbaa !5
  %1991 = load i32, ptr %62, align 4, !tbaa !5
  %1992 = sub nsw i32 %1991, 1
  %1993 = sext i32 %1992 to i64
  %1994 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %1993
  %1995 = load i32, ptr %1994, align 4, !tbaa !5
  %1996 = load i32, ptr %62, align 4, !tbaa !5
  %1997 = sub nsw i32 %1996, 1
  %1998 = sext i32 %1997 to i64
  %1999 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %1998
  %2000 = load i32, ptr %1999, align 4, !tbaa !5
  %2001 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %2002 = load ptr, ptr %2001, align 16, !tbaa !9
  %2003 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %2004 = load i32, ptr %2003, align 16, !tbaa !5
  %2005 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %2006 = load i32, ptr %2005, align 16, !tbaa !5
  %2007 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %2008 = load i32, ptr %2007, align 16, !tbaa !5
  %2009 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %2010 = load ptr, ptr %2009, align 8, !tbaa !9
  %2011 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %2012 = load i32, ptr %2011, align 4, !tbaa !5
  %2013 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %2014 = load i32, ptr %2013, align 4, !tbaa !5
  %2015 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %2016 = load i32, ptr %2015, align 4, !tbaa !5
  %2017 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2018 = load i32, ptr %2017, align 8, !tbaa !5
  %2019 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %2020 = load ptr, ptr %2019, align 16, !tbaa !9
  %2021 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %2022 = load i32, ptr %2021, align 8, !tbaa !5
  %2023 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2024 = load i32, ptr %2023, align 8, !tbaa !5
  %2025 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2026 = load i32, ptr %2025, align 8, !tbaa !5
  %2027 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2028 = load i32, ptr %2027, align 8, !tbaa !5
  %2029 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2030 = load i32, ptr %2029, align 8, !tbaa !5
  %2031 = mul nsw i32 %2028, %2030
  %2032 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %2033 = load ptr, ptr %2032, align 8, !tbaa !9
  %2034 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %2035 = load i32, ptr %2034, align 4, !tbaa !5
  %2036 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2037 = load i32, ptr %2036, align 4, !tbaa !5
  %2038 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2039 = load i32, ptr %2038, align 4, !tbaa !5
  %2040 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2041 = load i32, ptr %2040, align 4, !tbaa !5
  %2042 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2043 = load i32, ptr %2042, align 4, !tbaa !5
  %2044 = mul nsw i32 %2041, %2043
  %2045 = load ptr, ptr %49, align 8, !tbaa !9
  %2046 = load i32, ptr %66, align 4, !tbaa !5
  %2047 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn4_f32(ptr noundef %1985, i32 noundef %1990, i32 noundef %1995, i32 noundef %2000, ptr noundef %2002, i32 noundef %2004, i32 noundef %2006, i32 noundef %2008, ptr noundef %2010, i32 noundef %2012, i32 noundef %2014, i32 noundef %2016, i32 noundef %2018, ptr noundef %2020, i32 noundef %2022, i32 noundef %2024, i32 noundef %2026, i32 noundef %2031, ptr noundef %2033, i32 noundef %2035, i32 noundef %2037, i32 noundef %2039, i32 noundef %2044, ptr noundef %2045, i32 noundef %2046, ptr noundef %2047)
  br label %2058

2048:                                             ; preds = %1978
  %2049 = load i32, ptr %30, align 4, !tbaa !5
  %2050 = icmp eq i32 %2049, 2
  br i1 %2050, label %2051, label %2052

2051:                                             ; preds = %2048
  br label %2057

2052:                                             ; preds = %2048
  %2053 = load i32, ptr %30, align 4, !tbaa !5
  %2054 = icmp eq i32 %2053, 3
  br i1 %2054, label %2055, label %2056

2055:                                             ; preds = %2052
  br label %2056

2056:                                             ; preds = %2055, %2052
  br label %2057

2057:                                             ; preds = %2056, %2051
  br label %2058

2058:                                             ; preds = %2057, %1981
  %2059 = call i64 @libxsmm_timer_tick()
  store i64 %2059, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %2060

2060:                                             ; preds = %2148, %2058
  %2061 = load i32, ptr %22, align 4, !tbaa !5
  %2062 = load i32, ptr %31, align 4, !tbaa !5
  %2063 = icmp slt i32 %2061, %2062
  br i1 %2063, label %2064, label %2151

2064:                                             ; preds = %2060
  %2065 = load i32, ptr %30, align 4, !tbaa !5
  %2066 = icmp eq i32 %2065, 0
  br i1 %2066, label %2070, label %2067

2067:                                             ; preds = %2064
  %2068 = load i32, ptr %30, align 4, !tbaa !5
  %2069 = icmp eq i32 %2068, 1
  br i1 %2069, label %2070, label %2137

2070:                                             ; preds = %2067, %2064
  %2071 = load i32, ptr %63, align 4, !tbaa !5
  %2072 = sext i32 %2071 to i64
  %2073 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2072
  %2074 = load ptr, ptr %2073, align 8, !tbaa !9
  %2075 = load i32, ptr %62, align 4, !tbaa !5
  %2076 = sub nsw i32 %2075, 1
  %2077 = sext i32 %2076 to i64
  %2078 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %2077
  %2079 = load i32, ptr %2078, align 4, !tbaa !5
  %2080 = load i32, ptr %62, align 4, !tbaa !5
  %2081 = sub nsw i32 %2080, 1
  %2082 = sext i32 %2081 to i64
  %2083 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2082
  %2084 = load i32, ptr %2083, align 4, !tbaa !5
  %2085 = load i32, ptr %62, align 4, !tbaa !5
  %2086 = sub nsw i32 %2085, 1
  %2087 = sext i32 %2086 to i64
  %2088 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2087
  %2089 = load i32, ptr %2088, align 4, !tbaa !5
  %2090 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %2091 = load ptr, ptr %2090, align 16, !tbaa !9
  %2092 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %2093 = load i32, ptr %2092, align 16, !tbaa !5
  %2094 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %2095 = load i32, ptr %2094, align 16, !tbaa !5
  %2096 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %2097 = load i32, ptr %2096, align 16, !tbaa !5
  %2098 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %2099 = load ptr, ptr %2098, align 8, !tbaa !9
  %2100 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %2101 = load i32, ptr %2100, align 4, !tbaa !5
  %2102 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %2103 = load i32, ptr %2102, align 4, !tbaa !5
  %2104 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %2105 = load i32, ptr %2104, align 4, !tbaa !5
  %2106 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2107 = load i32, ptr %2106, align 8, !tbaa !5
  %2108 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %2109 = load ptr, ptr %2108, align 16, !tbaa !9
  %2110 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %2111 = load i32, ptr %2110, align 8, !tbaa !5
  %2112 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2113 = load i32, ptr %2112, align 8, !tbaa !5
  %2114 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2115 = load i32, ptr %2114, align 8, !tbaa !5
  %2116 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2117 = load i32, ptr %2116, align 8, !tbaa !5
  %2118 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2119 = load i32, ptr %2118, align 8, !tbaa !5
  %2120 = mul nsw i32 %2117, %2119
  %2121 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %2122 = load ptr, ptr %2121, align 8, !tbaa !9
  %2123 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %2124 = load i32, ptr %2123, align 4, !tbaa !5
  %2125 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2126 = load i32, ptr %2125, align 4, !tbaa !5
  %2127 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2128 = load i32, ptr %2127, align 4, !tbaa !5
  %2129 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2130 = load i32, ptr %2129, align 4, !tbaa !5
  %2131 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2132 = load i32, ptr %2131, align 4, !tbaa !5
  %2133 = mul nsw i32 %2130, %2132
  %2134 = load ptr, ptr %49, align 8, !tbaa !9
  %2135 = load i32, ptr %66, align 4, !tbaa !5
  %2136 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn4_f32(ptr noundef %2074, i32 noundef %2079, i32 noundef %2084, i32 noundef %2089, ptr noundef %2091, i32 noundef %2093, i32 noundef %2095, i32 noundef %2097, ptr noundef %2099, i32 noundef %2101, i32 noundef %2103, i32 noundef %2105, i32 noundef %2107, ptr noundef %2109, i32 noundef %2111, i32 noundef %2113, i32 noundef %2115, i32 noundef %2120, ptr noundef %2122, i32 noundef %2124, i32 noundef %2126, i32 noundef %2128, i32 noundef %2133, ptr noundef %2134, i32 noundef %2135, ptr noundef %2136)
  br label %2147

2137:                                             ; preds = %2067
  %2138 = load i32, ptr %30, align 4, !tbaa !5
  %2139 = icmp eq i32 %2138, 2
  br i1 %2139, label %2140, label %2141

2140:                                             ; preds = %2137
  br label %2146

2141:                                             ; preds = %2137
  %2142 = load i32, ptr %30, align 4, !tbaa !5
  %2143 = icmp eq i32 %2142, 3
  br i1 %2143, label %2144, label %2145

2144:                                             ; preds = %2141
  br label %2145

2145:                                             ; preds = %2144, %2141
  br label %2146

2146:                                             ; preds = %2145, %2140
  br label %2147

2147:                                             ; preds = %2146, %2070
  br label %2148

2148:                                             ; preds = %2147
  %2149 = load i32, ptr %22, align 4, !tbaa !5
  %2150 = add nsw i32 %2149, 1
  store i32 %2150, ptr %22, align 4, !tbaa !5
  br label %2060, !llvm.loop !71

2151:                                             ; preds = %2060
  %2152 = call i64 @libxsmm_timer_tick()
  store i64 %2152, ptr %26, align 8, !tbaa !56
  %2153 = load i64, ptr %25, align 8, !tbaa !56
  %2154 = load i64, ptr %26, align 8, !tbaa !56
  %2155 = call double @libxsmm_timer_duration(i64 noundef %2153, i64 noundef %2154)
  store double %2155, ptr %27, align 8, !tbaa !11
  %2156 = load double, ptr %27, align 8, !tbaa !11
  %2157 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %2156)
  %2158 = load ptr, ptr %17, align 8, !tbaa !9
  call void %2158(ptr noundef %24)
  %2159 = call i64 @libxsmm_timer_tick()
  store i64 %2159, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %2160

2160:                                             ; preds = %2166, %2151
  %2161 = load i32, ptr %22, align 4, !tbaa !5
  %2162 = load i32, ptr %31, align 4, !tbaa !5
  %2163 = icmp slt i32 %2161, %2162
  br i1 %2163, label %2164, label %2169

2164:                                             ; preds = %2160
  %2165 = load ptr, ptr %17, align 8, !tbaa !9
  call void %2165(ptr noundef %24)
  br label %2166

2166:                                             ; preds = %2164
  %2167 = load i32, ptr %22, align 4, !tbaa !5
  %2168 = add nsw i32 %2167, 1
  store i32 %2168, ptr %22, align 4, !tbaa !5
  br label %2160, !llvm.loop !72

2169:                                             ; preds = %2160
  %2170 = call i64 @libxsmm_timer_tick()
  store i64 %2170, ptr %26, align 8, !tbaa !56
  %2171 = load i64, ptr %25, align 8, !tbaa !56
  %2172 = load i64, ptr %26, align 8, !tbaa !56
  %2173 = call double @libxsmm_timer_duration(i64 noundef %2171, i64 noundef %2172)
  store double %2173, ptr %28, align 8, !tbaa !11
  %2174 = load double, ptr %28, align 8, !tbaa !11
  %2175 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %2174)
  %2176 = load double, ptr %28, align 8, !tbaa !11
  %2177 = fcmp olt double 0.000000e+00, %2176
  br i1 %2177, label %2178, label %2184

2178:                                             ; preds = %2169
  %2179 = load i32, ptr %31, align 4, !tbaa !5
  %2180 = load double, ptr %27, align 8, !tbaa !11
  %2181 = load double, ptr %28, align 8, !tbaa !11
  %2182 = fdiv double %2180, %2181
  %2183 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %2179, double noundef %2182)
  br label %2184

2184:                                             ; preds = %2178, %2169
  br label %2185

2185:                                             ; preds = %2184, %1736
  %2186 = load i32, ptr %30, align 4, !tbaa !5
  %2187 = icmp eq i32 %2186, 1
  br i1 %2187, label %2188, label %3695

2188:                                             ; preds = %2185
  %2189 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2190 = load i32, ptr %2189, align 8, !tbaa !5
  %2191 = srem i32 %2190, 2
  %2192 = icmp eq i32 %2191, 0
  br i1 %2192, label %2193, label %3695

2193:                                             ; preds = %2188
  %2194 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  %2195 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 0
  store i32 1, ptr %2195, align 4, !tbaa !37
  %2196 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 1
  store i32 3, ptr %2196, align 4, !tbaa !63
  %2197 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2198 = load i32, ptr %2197, align 8, !tbaa !5
  %2199 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 2
  store i32 %2198, ptr %2199, align 4, !tbaa !64
  %2200 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2201 = load i32, ptr %2200, align 8, !tbaa !5
  %2202 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2203 = load i32, ptr %2202, align 8, !tbaa !5
  %2204 = mul nsw i32 %2201, %2203
  %2205 = sext i32 %2204 to i64
  %2206 = mul i64 %2205, 2
  %2207 = trunc i64 %2206 to i32
  %2208 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 3
  store i32 %2207, ptr %2208, align 4, !tbaa !65
  %2209 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 0
  store i32 1, ptr %2209, align 4, !tbaa !37
  %2210 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 1
  store i32 3, ptr %2210, align 4, !tbaa !63
  %2211 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 3
  %2212 = load i32, ptr %2211, align 4, !tbaa !5
  %2213 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 2
  store i32 %2212, ptr %2213, align 4, !tbaa !64
  %2214 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2215 = load i32, ptr %2214, align 4, !tbaa !5
  %2216 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2217 = load i32, ptr %2216, align 4, !tbaa !5
  %2218 = mul nsw i32 %2215, %2217
  %2219 = sext i32 %2218 to i64
  %2220 = mul i64 %2219, 2
  %2221 = trunc i64 %2220 to i32
  %2222 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 3
  store i32 %2221, ptr %2222, align 4, !tbaa !65
  %2223 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2224 = load i32, ptr %2223, align 8, !tbaa !5
  %2225 = sext i32 %2224 to i64
  store i64 %2225, ptr %67, align 8, !tbaa !56
  %2226 = getelementptr inbounds [9 x %struct.libxsmm_matrix_op_arg], ptr %65, i64 0, i64 7
  %2227 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %2226, i32 0, i32 2
  store ptr %67, ptr %2227, align 16, !tbaa !66
  %2228 = getelementptr inbounds [9 x %struct.libxsmm_matrix_op_arg], ptr %65, i64 0, i64 0
  %2229 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %24, i32 0, i32 0
  store ptr %2228, ptr %2229, align 8, !tbaa !68
  %2230 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2231 = load i32, ptr %2230, align 8, !tbaa !5
  %2232 = sext i32 %2231 to i64
  %2233 = mul i64 2, %2232
  %2234 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2235 = load i32, ptr %2234, align 8, !tbaa !5
  %2236 = sext i32 %2235 to i64
  %2237 = mul i64 %2233, %2236
  %2238 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2239 = load i32, ptr %2238, align 8, !tbaa !5
  %2240 = sext i32 %2239 to i64
  %2241 = mul i64 %2237, %2240
  %2242 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %2241, i64 noundef 64)
  store ptr %2242, ptr %52, align 8, !tbaa !9
  %2243 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 2
  %2244 = load ptr, ptr %2243, align 16, !tbaa !9
  store ptr %2244, ptr %53, align 8, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %2245

2245:                                             ; preds = %2322, %2193
  %2246 = load i32, ptr %21, align 4, !tbaa !5
  %2247 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2248 = load i32, ptr %2247, align 8, !tbaa !5
  %2249 = icmp slt i32 %2246, %2248
  br i1 %2249, label %2250, label %2325

2250:                                             ; preds = %2245
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %2251

2251:                                             ; preds = %2318, %2250
  %2252 = load i32, ptr %18, align 4, !tbaa !5
  %2253 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2254 = load i32, ptr %2253, align 8, !tbaa !5
  %2255 = sdiv i32 %2254, 2
  %2256 = icmp slt i32 %2252, %2255
  br i1 %2256, label %2257, label %2321

2257:                                             ; preds = %2251
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %2258

2258:                                             ; preds = %2314, %2257
  %2259 = load i32, ptr %19, align 4, !tbaa !5
  %2260 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %2261 = load i32, ptr %2260, align 8, !tbaa !5
  %2262 = icmp slt i32 %2259, %2261
  br i1 %2262, label %2263, label %2317

2263:                                             ; preds = %2258
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %2264

2264:                                             ; preds = %2310, %2263
  %2265 = load i32, ptr %23, align 4, !tbaa !5
  %2266 = icmp slt i32 %2265, 2
  br i1 %2266, label %2267, label %2313

2267:                                             ; preds = %2264
  %2268 = load ptr, ptr %53, align 8, !tbaa !9
  %2269 = load i32, ptr %19, align 4, !tbaa !5
  %2270 = load i32, ptr %18, align 4, !tbaa !5
  %2271 = mul nsw i32 %2270, 2
  %2272 = load i32, ptr %23, align 4, !tbaa !5
  %2273 = add nsw i32 %2271, %2272
  %2274 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2275 = load i32, ptr %2274, align 8, !tbaa !5
  %2276 = mul nsw i32 %2273, %2275
  %2277 = add nsw i32 %2269, %2276
  %2278 = load i32, ptr %21, align 4, !tbaa !5
  %2279 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2280 = load i32, ptr %2279, align 8, !tbaa !5
  %2281 = mul nsw i32 %2278, %2280
  %2282 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2283 = load i32, ptr %2282, align 8, !tbaa !5
  %2284 = mul nsw i32 %2281, %2283
  %2285 = add nsw i32 %2277, %2284
  %2286 = sext i32 %2285 to i64
  %2287 = getelementptr inbounds i16, ptr %2268, i64 %2286
  %2288 = load i16, ptr %2287, align 2, !tbaa !29
  %2289 = load ptr, ptr %52, align 8, !tbaa !9
  %2290 = load i32, ptr %23, align 4, !tbaa !5
  %2291 = load i32, ptr %19, align 4, !tbaa !5
  %2292 = mul nsw i32 %2291, 2
  %2293 = add nsw i32 %2290, %2292
  %2294 = load i32, ptr %18, align 4, !tbaa !5
  %2295 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2296 = load i32, ptr %2295, align 8, !tbaa !5
  %2297 = mul nsw i32 %2294, %2296
  %2298 = mul nsw i32 %2297, 2
  %2299 = add nsw i32 %2293, %2298
  %2300 = load i32, ptr %21, align 4, !tbaa !5
  %2301 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2302 = load i32, ptr %2301, align 8, !tbaa !5
  %2303 = mul nsw i32 %2300, %2302
  %2304 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2305 = load i32, ptr %2304, align 8, !tbaa !5
  %2306 = mul nsw i32 %2303, %2305
  %2307 = add nsw i32 %2299, %2306
  %2308 = sext i32 %2307 to i64
  %2309 = getelementptr inbounds i16, ptr %2289, i64 %2308
  store i16 %2288, ptr %2309, align 2, !tbaa !29
  br label %2310

2310:                                             ; preds = %2267
  %2311 = load i32, ptr %23, align 4, !tbaa !5
  %2312 = add nsw i32 %2311, 1
  store i32 %2312, ptr %23, align 4, !tbaa !5
  br label %2264, !llvm.loop !73

2313:                                             ; preds = %2264
  br label %2314

2314:                                             ; preds = %2313
  %2315 = load i32, ptr %19, align 4, !tbaa !5
  %2316 = add nsw i32 %2315, 1
  store i32 %2316, ptr %19, align 4, !tbaa !5
  br label %2258, !llvm.loop !74

2317:                                             ; preds = %2258
  br label %2318

2318:                                             ; preds = %2317
  %2319 = load i32, ptr %18, align 4, !tbaa !5
  %2320 = add nsw i32 %2319, 1
  store i32 %2320, ptr %18, align 4, !tbaa !5
  br label %2251, !llvm.loop !75

2321:                                             ; preds = %2251
  br label %2322

2322:                                             ; preds = %2321
  %2323 = load i32, ptr %21, align 4, !tbaa !5
  %2324 = add nsw i32 %2323, 1
  store i32 %2324, ptr %21, align 4, !tbaa !5
  br label %2245, !llvm.loop !76

2325:                                             ; preds = %2245
  %2326 = load ptr, ptr %52, align 8, !tbaa !9
  %2327 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %59, i64 0, i64 2
  %2328 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %2327, i32 0, i32 0
  store ptr %2326, ptr %2328, align 16, !tbaa !34
  %2329 = call i32 @libxsmm_meqn_create()
  store i32 %2329, ptr %8, align 4, !tbaa !5
  %2330 = load i32, ptr %8, align 4, !tbaa !5
  %2331 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %2332 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %2331, i32 0, i32 0
  store i32 %2330, ptr %2332, align 16, !tbaa !39
  %2333 = load i32, ptr %8, align 4, !tbaa !5
  %2334 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %2335 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %2334, i32 0, i32 0
  store i32 %2333, ptr %2335, align 16, !tbaa !39
  %2336 = load i32, ptr %8, align 4, !tbaa !5
  %2337 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %2338 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %2337, i32 0, i32 0
  store i32 %2336, ptr %2338, align 8, !tbaa !39
  %2339 = load i32, ptr %8, align 4, !tbaa !5
  %2340 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2341 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %2340, i32 0, i32 0
  store i32 %2339, ptr %2341, align 16, !tbaa !42
  %2342 = load i32, ptr %8, align 4, !tbaa !5
  %2343 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %2344 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %2343, i32 0, i32 0
  store i32 %2342, ptr %2344, align 8, !tbaa !42
  %2345 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2346 = load i64, ptr %2345, align 16
  %2347 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %2346, i32 noundef 1, i32 noundef 1, i32 noundef 0)
  %2348 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2349 = load i64, ptr %2348, align 16
  %2350 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %2349, i32 noundef 11, i32 noundef 1, i32 noundef 0)
  %2351 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %2352 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 0
  %2353 = load i64, ptr %2351, align 16
  %2354 = getelementptr inbounds { i64, i64 }, ptr %2352, i32 0, i32 0
  %2355 = load i64, ptr %2354, align 16
  %2356 = getelementptr inbounds { i64, i64 }, ptr %2352, i32 0, i32 1
  %2357 = load i64, ptr %2356, align 8
  %2358 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %2359 = load i64, ptr %2358, align 4
  %2360 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %2361 = load i64, ptr %2360, align 4
  %2362 = call i32 @libxsmm_meqn_push_back_arg(i64 %2353, i64 %2355, i64 %2357, i64 %2359, i64 %2361)
  %2363 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2364 = load i64, ptr %2363, align 16
  %2365 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %2364, i32 noundef 7, i32 noundef 1, i32 noundef 0)
  %2366 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %2367 = load i64, ptr %2366, align 8
  %2368 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %2367, i32 noundef 15, i32 noundef 1, i32 noundef 0)
  %2369 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %2370 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 2
  %2371 = load i64, ptr %2369, align 16
  %2372 = getelementptr inbounds { i64, i64 }, ptr %2370, i32 0, i32 0
  %2373 = load i64, ptr %2372, align 16
  %2374 = getelementptr inbounds { i64, i64 }, ptr %2370, i32 0, i32 1
  %2375 = load i64, ptr %2374, align 8
  %2376 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 0
  %2377 = load i64, ptr %2376, align 4
  %2378 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 1
  %2379 = load i64, ptr %2378, align 4
  %2380 = call i32 @libxsmm_meqn_push_back_arg(i64 %2371, i64 %2373, i64 %2375, i64 %2377, i64 %2379)
  %2381 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %2382 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 3
  %2383 = load i64, ptr %2381, align 8
  %2384 = getelementptr inbounds { i64, i64 }, ptr %2382, i32 0, i32 0
  %2385 = load i64, ptr %2384, align 16
  %2386 = getelementptr inbounds { i64, i64 }, ptr %2382, i32 0, i32 1
  %2387 = load i64, ptr %2386, align 8
  %2388 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 0
  %2389 = load i64, ptr %2388, align 4
  %2390 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 1
  %2391 = load i64, ptr %2390, align 4
  %2392 = call i32 @libxsmm_meqn_push_back_arg(i64 %2383, i64 %2385, i64 %2387, i64 %2389, i64 %2391)
  %2393 = load i32, ptr %8, align 4, !tbaa !5
  call void @libxsmm_meqn_tree_print(i32 noundef %2393)
  %2394 = load i32, ptr %8, align 4, !tbaa !5
  %2395 = load i32, ptr %62, align 4, !tbaa !5
  %2396 = sub nsw i32 %2395, 1
  %2397 = sext i32 %2396 to i64
  %2398 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %2397
  %2399 = getelementptr inbounds { i64, i64 }, ptr %2398, i32 0, i32 0
  %2400 = load i64, ptr %2399, align 16
  %2401 = getelementptr inbounds { i64, i64 }, ptr %2398, i32 0, i32 1
  %2402 = load i64, ptr %2401, align 8
  %2403 = call ptr @libxsmm_dispatch_meqn(i32 noundef %2394, i64 %2400, i64 %2402)
  store ptr %2403, ptr %14, align 8, !tbaa !9
  %2404 = load ptr, ptr %14, align 8, !tbaa !9
  call void %2404(ptr noundef %24)
  %2405 = load i32, ptr %63, align 4, !tbaa !5
  %2406 = sext i32 %2405 to i64
  %2407 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2406
  %2408 = load ptr, ptr %2407, align 8, !tbaa !9
  %2409 = load i32, ptr %62, align 4, !tbaa !5
  %2410 = sub nsw i32 %2409, 1
  %2411 = sext i32 %2410 to i64
  %2412 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %2411
  %2413 = load i32, ptr %2412, align 4, !tbaa !5
  %2414 = load i32, ptr %62, align 4, !tbaa !5
  %2415 = sub nsw i32 %2414, 1
  %2416 = sext i32 %2415 to i64
  %2417 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2416
  %2418 = load i32, ptr %2417, align 4, !tbaa !5
  %2419 = load i32, ptr %62, align 4, !tbaa !5
  %2420 = sub nsw i32 %2419, 1
  %2421 = sext i32 %2420 to i64
  %2422 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2421
  %2423 = load i32, ptr %2422, align 4, !tbaa !5
  %2424 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %2425 = load ptr, ptr %2424, align 16, !tbaa !9
  %2426 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %2427 = load i32, ptr %2426, align 16, !tbaa !5
  %2428 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %2429 = load i32, ptr %2428, align 16, !tbaa !5
  %2430 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %2431 = load i32, ptr %2430, align 16, !tbaa !5
  %2432 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %2433 = load ptr, ptr %2432, align 8, !tbaa !9
  %2434 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %2435 = load i32, ptr %2434, align 4, !tbaa !5
  %2436 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %2437 = load i32, ptr %2436, align 4, !tbaa !5
  %2438 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %2439 = load i32, ptr %2438, align 4, !tbaa !5
  %2440 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2441 = load i32, ptr %2440, align 8, !tbaa !5
  %2442 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %2443 = load ptr, ptr %2442, align 16, !tbaa !9
  %2444 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %2445 = load i32, ptr %2444, align 8, !tbaa !5
  %2446 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2447 = load i32, ptr %2446, align 8, !tbaa !5
  %2448 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2449 = load i32, ptr %2448, align 8, !tbaa !5
  %2450 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2451 = load i32, ptr %2450, align 8, !tbaa !5
  %2452 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2453 = load i32, ptr %2452, align 8, !tbaa !5
  %2454 = mul nsw i32 %2451, %2453
  %2455 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %2456 = load ptr, ptr %2455, align 8, !tbaa !9
  %2457 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %2458 = load i32, ptr %2457, align 4, !tbaa !5
  %2459 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2460 = load i32, ptr %2459, align 4, !tbaa !5
  %2461 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2462 = load i32, ptr %2461, align 4, !tbaa !5
  %2463 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2464 = load i32, ptr %2463, align 4, !tbaa !5
  %2465 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2466 = load i32, ptr %2465, align 4, !tbaa !5
  %2467 = mul nsw i32 %2464, %2466
  %2468 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn2_f32(ptr noundef %2408, i32 noundef %2413, i32 noundef %2418, i32 noundef %2423, ptr noundef %2425, i32 noundef %2427, i32 noundef %2429, i32 noundef %2431, ptr noundef %2433, i32 noundef %2435, i32 noundef %2437, i32 noundef %2439, i32 noundef %2441, ptr noundef %2443, i32 noundef %2445, i32 noundef %2447, i32 noundef %2449, i32 noundef %2454, ptr noundef %2456, i32 noundef %2458, i32 noundef %2460, i32 noundef %2462, i32 noundef %2467, ptr noundef %2468)
  %2469 = load i32, ptr %62, align 4, !tbaa !5
  %2470 = sub nsw i32 %2469, 1
  %2471 = sext i32 %2470 to i64
  %2472 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %2471
  %2473 = load ptr, ptr %2472, align 8, !tbaa !9
  %2474 = load i32, ptr %62, align 4, !tbaa !5
  %2475 = sub nsw i32 %2474, 1
  %2476 = sext i32 %2475 to i64
  %2477 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2476
  %2478 = load ptr, ptr %2477, align 8, !tbaa !9
  %2479 = load i32, ptr %62, align 4, !tbaa !5
  %2480 = sub nsw i32 %2479, 1
  %2481 = sext i32 %2480 to i64
  %2482 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2481
  %2483 = load i32, ptr %2482, align 4, !tbaa !5
  %2484 = load i32, ptr %62, align 4, !tbaa !5
  %2485 = sub nsw i32 %2484, 1
  %2486 = sext i32 %2485 to i64
  %2487 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2486
  %2488 = load i32, ptr %2487, align 4, !tbaa !5
  %2489 = mul nsw i32 %2483, %2488
  %2490 = load i32, ptr %62, align 4, !tbaa !5
  %2491 = sub nsw i32 %2490, 1
  %2492 = sext i32 %2491 to i64
  %2493 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %2492
  %2494 = load i32, ptr %2493, align 4, !tbaa !5
  %2495 = mul nsw i32 %2489, %2494
  %2496 = sext i32 %2495 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %2473, ptr noundef %2478, i64 noundef %2496)
  %2497 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %2498 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %2499 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %2500 = load i32, ptr %62, align 4, !tbaa !5
  %2501 = sub nsw i32 %2500, 1
  %2502 = sext i32 %2501 to i64
  %2503 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2502
  %2504 = load i32, ptr %2503, align 4, !tbaa !5
  %2505 = load i32, ptr %62, align 4, !tbaa !5
  %2506 = sub nsw i32 %2505, 1
  %2507 = sext i32 %2506 to i64
  %2508 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2507
  %2509 = load i32, ptr %2508, align 4, !tbaa !5
  %2510 = mul nsw i32 %2504, %2509
  %2511 = load i32, ptr %62, align 4, !tbaa !5
  %2512 = sub nsw i32 %2511, 1
  %2513 = sext i32 %2512 to i64
  %2514 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %2513
  %2515 = load i32, ptr %2514, align 4, !tbaa !5
  %2516 = mul nsw i32 %2510, %2515
  %2517 = load i32, ptr %63, align 4, !tbaa !5
  %2518 = sext i32 %2517 to i64
  %2519 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2518
  %2520 = load ptr, ptr %2519, align 8, !tbaa !9
  %2521 = load i32, ptr %62, align 4, !tbaa !5
  %2522 = sub nsw i32 %2521, 1
  %2523 = sext i32 %2522 to i64
  %2524 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2523
  %2525 = load ptr, ptr %2524, align 8, !tbaa !9
  %2526 = call i32 @libxsmm_matdiff(ptr noundef %29, i32 noundef 1, i32 noundef %2516, i32 noundef 1, ptr noundef %2520, ptr noundef %2525, ptr noundef null, ptr noundef null)
  %2527 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 10
  %2528 = load double, ptr %2527, align 8, !tbaa !48
  %2529 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %2528)
  %2530 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 15
  %2531 = load double, ptr %2530, align 8, !tbaa !50
  %2532 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %2531)
  %2533 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 7
  %2534 = load double, ptr %2533, align 8, !tbaa !51
  %2535 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %2534)
  %2536 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 8
  %2537 = load double, ptr %2536, align 8, !tbaa !52
  %2538 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %2537)
  %2539 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 5
  %2540 = load double, ptr %2539, align 8, !tbaa !53
  %2541 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %2540)
  %2542 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 6
  %2543 = load double, ptr %2542, align 8, !tbaa !54
  %2544 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %2543)
  %2545 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 4
  %2546 = load double, ptr %2545, align 8, !tbaa !55
  %2547 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %2546)
  %2548 = load i32, ptr %30, align 4, !tbaa !5
  %2549 = icmp eq i32 %2548, 0
  br i1 %2549, label %2553, label %2550

2550:                                             ; preds = %2325
  %2551 = load i32, ptr %30, align 4, !tbaa !5
  %2552 = icmp eq i32 %2551, 1
  br i1 %2552, label %2553, label %2618

2553:                                             ; preds = %2550, %2325
  %2554 = load i32, ptr %63, align 4, !tbaa !5
  %2555 = sext i32 %2554 to i64
  %2556 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2555
  %2557 = load ptr, ptr %2556, align 8, !tbaa !9
  %2558 = load i32, ptr %62, align 4, !tbaa !5
  %2559 = sub nsw i32 %2558, 1
  %2560 = sext i32 %2559 to i64
  %2561 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %2560
  %2562 = load i32, ptr %2561, align 4, !tbaa !5
  %2563 = load i32, ptr %62, align 4, !tbaa !5
  %2564 = sub nsw i32 %2563, 1
  %2565 = sext i32 %2564 to i64
  %2566 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2565
  %2567 = load i32, ptr %2566, align 4, !tbaa !5
  %2568 = load i32, ptr %62, align 4, !tbaa !5
  %2569 = sub nsw i32 %2568, 1
  %2570 = sext i32 %2569 to i64
  %2571 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2570
  %2572 = load i32, ptr %2571, align 4, !tbaa !5
  %2573 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %2574 = load ptr, ptr %2573, align 16, !tbaa !9
  %2575 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %2576 = load i32, ptr %2575, align 16, !tbaa !5
  %2577 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %2578 = load i32, ptr %2577, align 16, !tbaa !5
  %2579 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %2580 = load i32, ptr %2579, align 16, !tbaa !5
  %2581 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %2582 = load ptr, ptr %2581, align 8, !tbaa !9
  %2583 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %2584 = load i32, ptr %2583, align 4, !tbaa !5
  %2585 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %2586 = load i32, ptr %2585, align 4, !tbaa !5
  %2587 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %2588 = load i32, ptr %2587, align 4, !tbaa !5
  %2589 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2590 = load i32, ptr %2589, align 8, !tbaa !5
  %2591 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %2592 = load ptr, ptr %2591, align 16, !tbaa !9
  %2593 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %2594 = load i32, ptr %2593, align 8, !tbaa !5
  %2595 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2596 = load i32, ptr %2595, align 8, !tbaa !5
  %2597 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2598 = load i32, ptr %2597, align 8, !tbaa !5
  %2599 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2600 = load i32, ptr %2599, align 8, !tbaa !5
  %2601 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2602 = load i32, ptr %2601, align 8, !tbaa !5
  %2603 = mul nsw i32 %2600, %2602
  %2604 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %2605 = load ptr, ptr %2604, align 8, !tbaa !9
  %2606 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %2607 = load i32, ptr %2606, align 4, !tbaa !5
  %2608 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2609 = load i32, ptr %2608, align 4, !tbaa !5
  %2610 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2611 = load i32, ptr %2610, align 4, !tbaa !5
  %2612 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2613 = load i32, ptr %2612, align 4, !tbaa !5
  %2614 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2615 = load i32, ptr %2614, align 4, !tbaa !5
  %2616 = mul nsw i32 %2613, %2615
  %2617 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn2_f32(ptr noundef %2557, i32 noundef %2562, i32 noundef %2567, i32 noundef %2572, ptr noundef %2574, i32 noundef %2576, i32 noundef %2578, i32 noundef %2580, ptr noundef %2582, i32 noundef %2584, i32 noundef %2586, i32 noundef %2588, i32 noundef %2590, ptr noundef %2592, i32 noundef %2594, i32 noundef %2596, i32 noundef %2598, i32 noundef %2603, ptr noundef %2605, i32 noundef %2607, i32 noundef %2609, i32 noundef %2611, i32 noundef %2616, ptr noundef %2617)
  br label %2628

2618:                                             ; preds = %2550
  %2619 = load i32, ptr %30, align 4, !tbaa !5
  %2620 = icmp eq i32 %2619, 2
  br i1 %2620, label %2621, label %2622

2621:                                             ; preds = %2618
  br label %2627

2622:                                             ; preds = %2618
  %2623 = load i32, ptr %30, align 4, !tbaa !5
  %2624 = icmp eq i32 %2623, 3
  br i1 %2624, label %2625, label %2626

2625:                                             ; preds = %2622
  br label %2626

2626:                                             ; preds = %2625, %2622
  br label %2627

2627:                                             ; preds = %2626, %2621
  br label %2628

2628:                                             ; preds = %2627, %2553
  %2629 = call i64 @libxsmm_timer_tick()
  store i64 %2629, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %2630

2630:                                             ; preds = %2716, %2628
  %2631 = load i32, ptr %22, align 4, !tbaa !5
  %2632 = load i32, ptr %31, align 4, !tbaa !5
  %2633 = icmp slt i32 %2631, %2632
  br i1 %2633, label %2634, label %2719

2634:                                             ; preds = %2630
  %2635 = load i32, ptr %30, align 4, !tbaa !5
  %2636 = icmp eq i32 %2635, 0
  br i1 %2636, label %2640, label %2637

2637:                                             ; preds = %2634
  %2638 = load i32, ptr %30, align 4, !tbaa !5
  %2639 = icmp eq i32 %2638, 1
  br i1 %2639, label %2640, label %2705

2640:                                             ; preds = %2637, %2634
  %2641 = load i32, ptr %63, align 4, !tbaa !5
  %2642 = sext i32 %2641 to i64
  %2643 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2642
  %2644 = load ptr, ptr %2643, align 8, !tbaa !9
  %2645 = load i32, ptr %62, align 4, !tbaa !5
  %2646 = sub nsw i32 %2645, 1
  %2647 = sext i32 %2646 to i64
  %2648 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %2647
  %2649 = load i32, ptr %2648, align 4, !tbaa !5
  %2650 = load i32, ptr %62, align 4, !tbaa !5
  %2651 = sub nsw i32 %2650, 1
  %2652 = sext i32 %2651 to i64
  %2653 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2652
  %2654 = load i32, ptr %2653, align 4, !tbaa !5
  %2655 = load i32, ptr %62, align 4, !tbaa !5
  %2656 = sub nsw i32 %2655, 1
  %2657 = sext i32 %2656 to i64
  %2658 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2657
  %2659 = load i32, ptr %2658, align 4, !tbaa !5
  %2660 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %2661 = load ptr, ptr %2660, align 16, !tbaa !9
  %2662 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %2663 = load i32, ptr %2662, align 16, !tbaa !5
  %2664 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %2665 = load i32, ptr %2664, align 16, !tbaa !5
  %2666 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %2667 = load i32, ptr %2666, align 16, !tbaa !5
  %2668 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %2669 = load ptr, ptr %2668, align 8, !tbaa !9
  %2670 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %2671 = load i32, ptr %2670, align 4, !tbaa !5
  %2672 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %2673 = load i32, ptr %2672, align 4, !tbaa !5
  %2674 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %2675 = load i32, ptr %2674, align 4, !tbaa !5
  %2676 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2677 = load i32, ptr %2676, align 8, !tbaa !5
  %2678 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %2679 = load ptr, ptr %2678, align 16, !tbaa !9
  %2680 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %2681 = load i32, ptr %2680, align 8, !tbaa !5
  %2682 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2683 = load i32, ptr %2682, align 8, !tbaa !5
  %2684 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2685 = load i32, ptr %2684, align 8, !tbaa !5
  %2686 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2687 = load i32, ptr %2686, align 8, !tbaa !5
  %2688 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2689 = load i32, ptr %2688, align 8, !tbaa !5
  %2690 = mul nsw i32 %2687, %2689
  %2691 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %2692 = load ptr, ptr %2691, align 8, !tbaa !9
  %2693 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %2694 = load i32, ptr %2693, align 4, !tbaa !5
  %2695 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2696 = load i32, ptr %2695, align 4, !tbaa !5
  %2697 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2698 = load i32, ptr %2697, align 4, !tbaa !5
  %2699 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2700 = load i32, ptr %2699, align 4, !tbaa !5
  %2701 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2702 = load i32, ptr %2701, align 4, !tbaa !5
  %2703 = mul nsw i32 %2700, %2702
  %2704 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn2_f32(ptr noundef %2644, i32 noundef %2649, i32 noundef %2654, i32 noundef %2659, ptr noundef %2661, i32 noundef %2663, i32 noundef %2665, i32 noundef %2667, ptr noundef %2669, i32 noundef %2671, i32 noundef %2673, i32 noundef %2675, i32 noundef %2677, ptr noundef %2679, i32 noundef %2681, i32 noundef %2683, i32 noundef %2685, i32 noundef %2690, ptr noundef %2692, i32 noundef %2694, i32 noundef %2696, i32 noundef %2698, i32 noundef %2703, ptr noundef %2704)
  br label %2715

2705:                                             ; preds = %2637
  %2706 = load i32, ptr %30, align 4, !tbaa !5
  %2707 = icmp eq i32 %2706, 2
  br i1 %2707, label %2708, label %2709

2708:                                             ; preds = %2705
  br label %2714

2709:                                             ; preds = %2705
  %2710 = load i32, ptr %30, align 4, !tbaa !5
  %2711 = icmp eq i32 %2710, 3
  br i1 %2711, label %2712, label %2713

2712:                                             ; preds = %2709
  br label %2713

2713:                                             ; preds = %2712, %2709
  br label %2714

2714:                                             ; preds = %2713, %2708
  br label %2715

2715:                                             ; preds = %2714, %2640
  br label %2716

2716:                                             ; preds = %2715
  %2717 = load i32, ptr %22, align 4, !tbaa !5
  %2718 = add nsw i32 %2717, 1
  store i32 %2718, ptr %22, align 4, !tbaa !5
  br label %2630, !llvm.loop !77

2719:                                             ; preds = %2630
  %2720 = call i64 @libxsmm_timer_tick()
  store i64 %2720, ptr %26, align 8, !tbaa !56
  %2721 = load i64, ptr %25, align 8, !tbaa !56
  %2722 = load i64, ptr %26, align 8, !tbaa !56
  %2723 = call double @libxsmm_timer_duration(i64 noundef %2721, i64 noundef %2722)
  store double %2723, ptr %27, align 8, !tbaa !11
  %2724 = load double, ptr %27, align 8, !tbaa !11
  %2725 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %2724)
  %2726 = load ptr, ptr %14, align 8, !tbaa !9
  call void %2726(ptr noundef %24)
  %2727 = call i64 @libxsmm_timer_tick()
  store i64 %2727, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %2728

2728:                                             ; preds = %2734, %2719
  %2729 = load i32, ptr %22, align 4, !tbaa !5
  %2730 = load i32, ptr %31, align 4, !tbaa !5
  %2731 = icmp slt i32 %2729, %2730
  br i1 %2731, label %2732, label %2737

2732:                                             ; preds = %2728
  %2733 = load ptr, ptr %14, align 8, !tbaa !9
  call void %2733(ptr noundef %24)
  br label %2734

2734:                                             ; preds = %2732
  %2735 = load i32, ptr %22, align 4, !tbaa !5
  %2736 = add nsw i32 %2735, 1
  store i32 %2736, ptr %22, align 4, !tbaa !5
  br label %2728, !llvm.loop !78

2737:                                             ; preds = %2728
  %2738 = call i64 @libxsmm_timer_tick()
  store i64 %2738, ptr %26, align 8, !tbaa !56
  %2739 = load i64, ptr %25, align 8, !tbaa !56
  %2740 = load i64, ptr %26, align 8, !tbaa !56
  %2741 = call double @libxsmm_timer_duration(i64 noundef %2739, i64 noundef %2740)
  store double %2741, ptr %28, align 8, !tbaa !11
  %2742 = load double, ptr %28, align 8, !tbaa !11
  %2743 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %2742)
  %2744 = load double, ptr %28, align 8, !tbaa !11
  %2745 = fcmp olt double 0.000000e+00, %2744
  br i1 %2745, label %2746, label %2752

2746:                                             ; preds = %2737
  %2747 = load i32, ptr %31, align 4, !tbaa !5
  %2748 = load double, ptr %27, align 8, !tbaa !11
  %2749 = load double, ptr %28, align 8, !tbaa !11
  %2750 = fdiv double %2748, %2749
  %2751 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %2747, double noundef %2750)
  br label %2752

2752:                                             ; preds = %2746, %2737
  %2753 = call i32 (ptr, ...) @printf(ptr noundef @.str.22)
  %2754 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 0
  store i32 1, ptr %2754, align 4, !tbaa !37
  %2755 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 1
  store i32 3, ptr %2755, align 4, !tbaa !63
  %2756 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2757 = load i32, ptr %2756, align 8, !tbaa !5
  %2758 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 2
  store i32 %2757, ptr %2758, align 4, !tbaa !64
  %2759 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2760 = load i32, ptr %2759, align 8, !tbaa !5
  %2761 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2762 = load i32, ptr %2761, align 8, !tbaa !5
  %2763 = mul nsw i32 %2760, %2762
  %2764 = sext i32 %2763 to i64
  %2765 = mul i64 %2764, 2
  %2766 = trunc i64 %2765 to i32
  %2767 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %41, i32 0, i32 3
  store i32 %2766, ptr %2767, align 4, !tbaa !65
  %2768 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 0
  store i32 1, ptr %2768, align 4, !tbaa !37
  %2769 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 1
  store i32 3, ptr %2769, align 4, !tbaa !63
  %2770 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 3
  %2771 = load i32, ptr %2770, align 4, !tbaa !5
  %2772 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 2
  store i32 %2771, ptr %2772, align 4, !tbaa !64
  %2773 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2774 = load i32, ptr %2773, align 4, !tbaa !5
  %2775 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2776 = load i32, ptr %2775, align 4, !tbaa !5
  %2777 = mul nsw i32 %2774, %2776
  %2778 = sext i32 %2777 to i64
  %2779 = mul i64 %2778, 2
  %2780 = trunc i64 %2779 to i32
  %2781 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %42, i32 0, i32 3
  store i32 %2780, ptr %2781, align 4, !tbaa !65
  %2782 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2783 = load i32, ptr %2782, align 8, !tbaa !5
  %2784 = sext i32 %2783 to i64
  store i64 %2784, ptr %67, align 8, !tbaa !56
  %2785 = getelementptr inbounds [9 x %struct.libxsmm_matrix_op_arg], ptr %65, i64 0, i64 7
  %2786 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %2785, i32 0, i32 2
  store ptr %67, ptr %2786, align 16, !tbaa !66
  %2787 = getelementptr inbounds [9 x %struct.libxsmm_matrix_op_arg], ptr %65, i64 0, i64 0
  %2788 = getelementptr inbounds %struct.libxsmm_meqn_param, ptr %24, i32 0, i32 0
  store ptr %2787, ptr %2788, align 8, !tbaa !68
  %2789 = call i32 @libxsmm_meqn_create()
  store i32 %2789, ptr %9, align 4, !tbaa !5
  %2790 = load i32, ptr %9, align 4, !tbaa !5
  %2791 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %2792 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %2791, i32 0, i32 0
  store i32 %2790, ptr %2792, align 16, !tbaa !39
  %2793 = load i32, ptr %9, align 4, !tbaa !5
  %2794 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %2795 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %2794, i32 0, i32 0
  store i32 %2793, ptr %2795, align 16, !tbaa !39
  %2796 = load i32, ptr %9, align 4, !tbaa !5
  %2797 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %2798 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %2797, i32 0, i32 0
  store i32 %2796, ptr %2798, align 8, !tbaa !39
  %2799 = load i32, ptr %9, align 4, !tbaa !5
  %2800 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2801 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %2800, i32 0, i32 0
  store i32 %2799, ptr %2801, align 16, !tbaa !42
  %2802 = load i32, ptr %9, align 4, !tbaa !5
  %2803 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %2804 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %2803, i32 0, i32 0
  store i32 %2802, ptr %2804, align 8, !tbaa !42
  %2805 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2806 = load i64, ptr %2805, align 16
  %2807 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %2806, i32 noundef 1, i32 noundef 2, i32 noundef 0)
  %2808 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %2809 = load i64, ptr %2808, align 8
  %2810 = call i32 @libxsmm_meqn_push_back_ternary_op(i64 %2809, i32 noundef 9, i32 noundef 2, i32 noundef 512)
  %2811 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %2812 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 2
  %2813 = load i64, ptr %2811, align 16
  %2814 = getelementptr inbounds { i64, i64 }, ptr %2812, i32 0, i32 0
  %2815 = load i64, ptr %2814, align 16
  %2816 = getelementptr inbounds { i64, i64 }, ptr %2812, i32 0, i32 1
  %2817 = load i64, ptr %2816, align 8
  %2818 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 0
  %2819 = load i64, ptr %2818, align 4
  %2820 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 1
  %2821 = load i64, ptr %2820, align 4
  %2822 = call i32 @libxsmm_meqn_push_back_arg(i64 %2813, i64 %2815, i64 %2817, i64 %2819, i64 %2821)
  %2823 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %2824 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 3
  %2825 = load i64, ptr %2823, align 8
  %2826 = getelementptr inbounds { i64, i64 }, ptr %2824, i32 0, i32 0
  %2827 = load i64, ptr %2826, align 16
  %2828 = getelementptr inbounds { i64, i64 }, ptr %2824, i32 0, i32 1
  %2829 = load i64, ptr %2828, align 8
  %2830 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 0
  %2831 = load i64, ptr %2830, align 4
  %2832 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 1
  %2833 = load i64, ptr %2832, align 4
  %2834 = call i32 @libxsmm_meqn_push_back_arg(i64 %2825, i64 %2827, i64 %2829, i64 %2831, i64 %2833)
  %2835 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2836 = load i64, ptr %2835, align 16
  %2837 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %2836, i32 noundef 1, i32 noundef 2, i32 noundef 0)
  %2838 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %2839 = load i64, ptr %2838, align 16
  %2840 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %2839, i32 noundef 11, i32 noundef 1, i32 noundef 0)
  %2841 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 0
  %2842 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 0
  %2843 = load i64, ptr %2841, align 16
  %2844 = getelementptr inbounds { i64, i64 }, ptr %2842, i32 0, i32 0
  %2845 = load i64, ptr %2844, align 16
  %2846 = getelementptr inbounds { i64, i64 }, ptr %2842, i32 0, i32 1
  %2847 = load i64, ptr %2846, align 8
  %2848 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %2849 = load i64, ptr %2848, align 4
  %2850 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %2851 = load i64, ptr %2850, align 4
  %2852 = call i32 @libxsmm_meqn_push_back_arg(i64 %2843, i64 %2845, i64 %2847, i64 %2849, i64 %2851)
  %2853 = load i32, ptr %9, align 4, !tbaa !5
  call void @libxsmm_meqn_tree_print(i32 noundef %2853)
  %2854 = load i32, ptr %9, align 4, !tbaa !5
  %2855 = load i32, ptr %62, align 4, !tbaa !5
  %2856 = sub nsw i32 %2855, 1
  %2857 = sext i32 %2856 to i64
  %2858 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %2857
  %2859 = getelementptr inbounds { i64, i64 }, ptr %2858, i32 0, i32 0
  %2860 = load i64, ptr %2859, align 16
  %2861 = getelementptr inbounds { i64, i64 }, ptr %2858, i32 0, i32 1
  %2862 = load i64, ptr %2861, align 8
  %2863 = call ptr @libxsmm_dispatch_meqn(i32 noundef %2854, i64 %2860, i64 %2862)
  store ptr %2863, ptr %15, align 8, !tbaa !9
  %2864 = load ptr, ptr %15, align 8, !tbaa !9
  call void %2864(ptr noundef %24)
  %2865 = load i32, ptr %63, align 4, !tbaa !5
  %2866 = sext i32 %2865 to i64
  %2867 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2866
  %2868 = load ptr, ptr %2867, align 8, !tbaa !9
  %2869 = load i32, ptr %62, align 4, !tbaa !5
  %2870 = sub nsw i32 %2869, 1
  %2871 = sext i32 %2870 to i64
  %2872 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %2871
  %2873 = load i32, ptr %2872, align 4, !tbaa !5
  %2874 = load i32, ptr %62, align 4, !tbaa !5
  %2875 = sub nsw i32 %2874, 1
  %2876 = sext i32 %2875 to i64
  %2877 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2876
  %2878 = load i32, ptr %2877, align 4, !tbaa !5
  %2879 = load i32, ptr %62, align 4, !tbaa !5
  %2880 = sub nsw i32 %2879, 1
  %2881 = sext i32 %2880 to i64
  %2882 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2881
  %2883 = load i32, ptr %2882, align 4, !tbaa !5
  %2884 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %2885 = load ptr, ptr %2884, align 16, !tbaa !9
  %2886 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %2887 = load i32, ptr %2886, align 16, !tbaa !5
  %2888 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %2889 = load i32, ptr %2888, align 16, !tbaa !5
  %2890 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %2891 = load i32, ptr %2890, align 16, !tbaa !5
  %2892 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %2893 = load ptr, ptr %2892, align 8, !tbaa !9
  %2894 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %2895 = load i32, ptr %2894, align 4, !tbaa !5
  %2896 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %2897 = load i32, ptr %2896, align 4, !tbaa !5
  %2898 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %2899 = load i32, ptr %2898, align 4, !tbaa !5
  %2900 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %2901 = load i32, ptr %2900, align 8, !tbaa !5
  %2902 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %2903 = load ptr, ptr %2902, align 16, !tbaa !9
  %2904 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %2905 = load i32, ptr %2904, align 8, !tbaa !5
  %2906 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2907 = load i32, ptr %2906, align 8, !tbaa !5
  %2908 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2909 = load i32, ptr %2908, align 8, !tbaa !5
  %2910 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %2911 = load i32, ptr %2910, align 8, !tbaa !5
  %2912 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %2913 = load i32, ptr %2912, align 8, !tbaa !5
  %2914 = mul nsw i32 %2911, %2913
  %2915 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %2916 = load ptr, ptr %2915, align 8, !tbaa !9
  %2917 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %2918 = load i32, ptr %2917, align 4, !tbaa !5
  %2919 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2920 = load i32, ptr %2919, align 4, !tbaa !5
  %2921 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2922 = load i32, ptr %2921, align 4, !tbaa !5
  %2923 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %2924 = load i32, ptr %2923, align 4, !tbaa !5
  %2925 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %2926 = load i32, ptr %2925, align 4, !tbaa !5
  %2927 = mul nsw i32 %2924, %2926
  %2928 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn3_f32(ptr noundef %2868, i32 noundef %2873, i32 noundef %2878, i32 noundef %2883, ptr noundef %2885, i32 noundef %2887, i32 noundef %2889, i32 noundef %2891, ptr noundef %2893, i32 noundef %2895, i32 noundef %2897, i32 noundef %2899, i32 noundef %2901, ptr noundef %2903, i32 noundef %2905, i32 noundef %2907, i32 noundef %2909, i32 noundef %2914, ptr noundef %2916, i32 noundef %2918, i32 noundef %2920, i32 noundef %2922, i32 noundef %2927, ptr noundef %2928)
  %2929 = load i32, ptr %62, align 4, !tbaa !5
  %2930 = sub nsw i32 %2929, 1
  %2931 = sext i32 %2930 to i64
  %2932 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %2931
  %2933 = load ptr, ptr %2932, align 8, !tbaa !9
  %2934 = load i32, ptr %62, align 4, !tbaa !5
  %2935 = sub nsw i32 %2934, 1
  %2936 = sext i32 %2935 to i64
  %2937 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2936
  %2938 = load ptr, ptr %2937, align 8, !tbaa !9
  %2939 = load i32, ptr %62, align 4, !tbaa !5
  %2940 = sub nsw i32 %2939, 1
  %2941 = sext i32 %2940 to i64
  %2942 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2941
  %2943 = load i32, ptr %2942, align 4, !tbaa !5
  %2944 = load i32, ptr %62, align 4, !tbaa !5
  %2945 = sub nsw i32 %2944, 1
  %2946 = sext i32 %2945 to i64
  %2947 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2946
  %2948 = load i32, ptr %2947, align 4, !tbaa !5
  %2949 = mul nsw i32 %2943, %2948
  %2950 = load i32, ptr %62, align 4, !tbaa !5
  %2951 = sub nsw i32 %2950, 1
  %2952 = sext i32 %2951 to i64
  %2953 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %2952
  %2954 = load i32, ptr %2953, align 4, !tbaa !5
  %2955 = mul nsw i32 %2949, %2954
  %2956 = sext i32 %2955 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %2933, ptr noundef %2938, i64 noundef %2956)
  %2957 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %2958 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %2959 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %2960 = load i32, ptr %62, align 4, !tbaa !5
  %2961 = sub nsw i32 %2960, 1
  %2962 = sext i32 %2961 to i64
  %2963 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %2962
  %2964 = load i32, ptr %2963, align 4, !tbaa !5
  %2965 = load i32, ptr %62, align 4, !tbaa !5
  %2966 = sub nsw i32 %2965, 1
  %2967 = sext i32 %2966 to i64
  %2968 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %2967
  %2969 = load i32, ptr %2968, align 4, !tbaa !5
  %2970 = mul nsw i32 %2964, %2969
  %2971 = load i32, ptr %62, align 4, !tbaa !5
  %2972 = sub nsw i32 %2971, 1
  %2973 = sext i32 %2972 to i64
  %2974 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %2973
  %2975 = load i32, ptr %2974, align 4, !tbaa !5
  %2976 = mul nsw i32 %2970, %2975
  %2977 = load i32, ptr %63, align 4, !tbaa !5
  %2978 = sext i32 %2977 to i64
  %2979 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2978
  %2980 = load ptr, ptr %2979, align 8, !tbaa !9
  %2981 = load i32, ptr %62, align 4, !tbaa !5
  %2982 = sub nsw i32 %2981, 1
  %2983 = sext i32 %2982 to i64
  %2984 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %2983
  %2985 = load ptr, ptr %2984, align 8, !tbaa !9
  %2986 = call i32 @libxsmm_matdiff(ptr noundef %29, i32 noundef 1, i32 noundef %2976, i32 noundef 1, ptr noundef %2980, ptr noundef %2985, ptr noundef null, ptr noundef null)
  %2987 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 10
  %2988 = load double, ptr %2987, align 8, !tbaa !48
  %2989 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %2988)
  %2990 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 15
  %2991 = load double, ptr %2990, align 8, !tbaa !50
  %2992 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %2991)
  %2993 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 7
  %2994 = load double, ptr %2993, align 8, !tbaa !51
  %2995 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %2994)
  %2996 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 8
  %2997 = load double, ptr %2996, align 8, !tbaa !52
  %2998 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %2997)
  %2999 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 5
  %3000 = load double, ptr %2999, align 8, !tbaa !53
  %3001 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %3000)
  %3002 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 6
  %3003 = load double, ptr %3002, align 8, !tbaa !54
  %3004 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %3003)
  %3005 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 4
  %3006 = load double, ptr %3005, align 8, !tbaa !55
  %3007 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %3006)
  %3008 = load i32, ptr %30, align 4, !tbaa !5
  %3009 = icmp eq i32 %3008, 0
  br i1 %3009, label %3013, label %3010

3010:                                             ; preds = %2752
  %3011 = load i32, ptr %30, align 4, !tbaa !5
  %3012 = icmp eq i32 %3011, 1
  br i1 %3012, label %3013, label %3078

3013:                                             ; preds = %3010, %2752
  %3014 = load i32, ptr %63, align 4, !tbaa !5
  %3015 = sext i32 %3014 to i64
  %3016 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3015
  %3017 = load ptr, ptr %3016, align 8, !tbaa !9
  %3018 = load i32, ptr %62, align 4, !tbaa !5
  %3019 = sub nsw i32 %3018, 1
  %3020 = sext i32 %3019 to i64
  %3021 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %3020
  %3022 = load i32, ptr %3021, align 4, !tbaa !5
  %3023 = load i32, ptr %62, align 4, !tbaa !5
  %3024 = sub nsw i32 %3023, 1
  %3025 = sext i32 %3024 to i64
  %3026 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %3025
  %3027 = load i32, ptr %3026, align 4, !tbaa !5
  %3028 = load i32, ptr %62, align 4, !tbaa !5
  %3029 = sub nsw i32 %3028, 1
  %3030 = sext i32 %3029 to i64
  %3031 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %3030
  %3032 = load i32, ptr %3031, align 4, !tbaa !5
  %3033 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %3034 = load ptr, ptr %3033, align 16, !tbaa !9
  %3035 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %3036 = load i32, ptr %3035, align 16, !tbaa !5
  %3037 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %3038 = load i32, ptr %3037, align 16, !tbaa !5
  %3039 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %3040 = load i32, ptr %3039, align 16, !tbaa !5
  %3041 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %3042 = load ptr, ptr %3041, align 8, !tbaa !9
  %3043 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %3044 = load i32, ptr %3043, align 4, !tbaa !5
  %3045 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %3046 = load i32, ptr %3045, align 4, !tbaa !5
  %3047 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %3048 = load i32, ptr %3047, align 4, !tbaa !5
  %3049 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %3050 = load i32, ptr %3049, align 8, !tbaa !5
  %3051 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %3052 = load ptr, ptr %3051, align 16, !tbaa !9
  %3053 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3054 = load i32, ptr %3053, align 8, !tbaa !5
  %3055 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3056 = load i32, ptr %3055, align 8, !tbaa !5
  %3057 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3058 = load i32, ptr %3057, align 8, !tbaa !5
  %3059 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3060 = load i32, ptr %3059, align 8, !tbaa !5
  %3061 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3062 = load i32, ptr %3061, align 8, !tbaa !5
  %3063 = mul nsw i32 %3060, %3062
  %3064 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %3065 = load ptr, ptr %3064, align 8, !tbaa !9
  %3066 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %3067 = load i32, ptr %3066, align 4, !tbaa !5
  %3068 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3069 = load i32, ptr %3068, align 4, !tbaa !5
  %3070 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3071 = load i32, ptr %3070, align 4, !tbaa !5
  %3072 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3073 = load i32, ptr %3072, align 4, !tbaa !5
  %3074 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3075 = load i32, ptr %3074, align 4, !tbaa !5
  %3076 = mul nsw i32 %3073, %3075
  %3077 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn3_f32(ptr noundef %3017, i32 noundef %3022, i32 noundef %3027, i32 noundef %3032, ptr noundef %3034, i32 noundef %3036, i32 noundef %3038, i32 noundef %3040, ptr noundef %3042, i32 noundef %3044, i32 noundef %3046, i32 noundef %3048, i32 noundef %3050, ptr noundef %3052, i32 noundef %3054, i32 noundef %3056, i32 noundef %3058, i32 noundef %3063, ptr noundef %3065, i32 noundef %3067, i32 noundef %3069, i32 noundef %3071, i32 noundef %3076, ptr noundef %3077)
  br label %3088

3078:                                             ; preds = %3010
  %3079 = load i32, ptr %30, align 4, !tbaa !5
  %3080 = icmp eq i32 %3079, 2
  br i1 %3080, label %3081, label %3082

3081:                                             ; preds = %3078
  br label %3087

3082:                                             ; preds = %3078
  %3083 = load i32, ptr %30, align 4, !tbaa !5
  %3084 = icmp eq i32 %3083, 3
  br i1 %3084, label %3085, label %3086

3085:                                             ; preds = %3082
  br label %3086

3086:                                             ; preds = %3085, %3082
  br label %3087

3087:                                             ; preds = %3086, %3081
  br label %3088

3088:                                             ; preds = %3087, %3013
  %3089 = call i64 @libxsmm_timer_tick()
  store i64 %3089, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %3090

3090:                                             ; preds = %3176, %3088
  %3091 = load i32, ptr %22, align 4, !tbaa !5
  %3092 = load i32, ptr %31, align 4, !tbaa !5
  %3093 = icmp slt i32 %3091, %3092
  br i1 %3093, label %3094, label %3179

3094:                                             ; preds = %3090
  %3095 = load i32, ptr %30, align 4, !tbaa !5
  %3096 = icmp eq i32 %3095, 0
  br i1 %3096, label %3100, label %3097

3097:                                             ; preds = %3094
  %3098 = load i32, ptr %30, align 4, !tbaa !5
  %3099 = icmp eq i32 %3098, 1
  br i1 %3099, label %3100, label %3165

3100:                                             ; preds = %3097, %3094
  %3101 = load i32, ptr %63, align 4, !tbaa !5
  %3102 = sext i32 %3101 to i64
  %3103 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3102
  %3104 = load ptr, ptr %3103, align 8, !tbaa !9
  %3105 = load i32, ptr %62, align 4, !tbaa !5
  %3106 = sub nsw i32 %3105, 1
  %3107 = sext i32 %3106 to i64
  %3108 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %3107
  %3109 = load i32, ptr %3108, align 4, !tbaa !5
  %3110 = load i32, ptr %62, align 4, !tbaa !5
  %3111 = sub nsw i32 %3110, 1
  %3112 = sext i32 %3111 to i64
  %3113 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %3112
  %3114 = load i32, ptr %3113, align 4, !tbaa !5
  %3115 = load i32, ptr %62, align 4, !tbaa !5
  %3116 = sub nsw i32 %3115, 1
  %3117 = sext i32 %3116 to i64
  %3118 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %3117
  %3119 = load i32, ptr %3118, align 4, !tbaa !5
  %3120 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %3121 = load ptr, ptr %3120, align 16, !tbaa !9
  %3122 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %3123 = load i32, ptr %3122, align 16, !tbaa !5
  %3124 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %3125 = load i32, ptr %3124, align 16, !tbaa !5
  %3126 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %3127 = load i32, ptr %3126, align 16, !tbaa !5
  %3128 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %3129 = load ptr, ptr %3128, align 8, !tbaa !9
  %3130 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %3131 = load i32, ptr %3130, align 4, !tbaa !5
  %3132 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %3133 = load i32, ptr %3132, align 4, !tbaa !5
  %3134 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %3135 = load i32, ptr %3134, align 4, !tbaa !5
  %3136 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %3137 = load i32, ptr %3136, align 8, !tbaa !5
  %3138 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %3139 = load ptr, ptr %3138, align 16, !tbaa !9
  %3140 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3141 = load i32, ptr %3140, align 8, !tbaa !5
  %3142 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3143 = load i32, ptr %3142, align 8, !tbaa !5
  %3144 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3145 = load i32, ptr %3144, align 8, !tbaa !5
  %3146 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3147 = load i32, ptr %3146, align 8, !tbaa !5
  %3148 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3149 = load i32, ptr %3148, align 8, !tbaa !5
  %3150 = mul nsw i32 %3147, %3149
  %3151 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %3152 = load ptr, ptr %3151, align 8, !tbaa !9
  %3153 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %3154 = load i32, ptr %3153, align 4, !tbaa !5
  %3155 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3156 = load i32, ptr %3155, align 4, !tbaa !5
  %3157 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3158 = load i32, ptr %3157, align 4, !tbaa !5
  %3159 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3160 = load i32, ptr %3159, align 4, !tbaa !5
  %3161 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3162 = load i32, ptr %3161, align 4, !tbaa !5
  %3163 = mul nsw i32 %3160, %3162
  %3164 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn3_f32(ptr noundef %3104, i32 noundef %3109, i32 noundef %3114, i32 noundef %3119, ptr noundef %3121, i32 noundef %3123, i32 noundef %3125, i32 noundef %3127, ptr noundef %3129, i32 noundef %3131, i32 noundef %3133, i32 noundef %3135, i32 noundef %3137, ptr noundef %3139, i32 noundef %3141, i32 noundef %3143, i32 noundef %3145, i32 noundef %3150, ptr noundef %3152, i32 noundef %3154, i32 noundef %3156, i32 noundef %3158, i32 noundef %3163, ptr noundef %3164)
  br label %3175

3165:                                             ; preds = %3097
  %3166 = load i32, ptr %30, align 4, !tbaa !5
  %3167 = icmp eq i32 %3166, 2
  br i1 %3167, label %3168, label %3169

3168:                                             ; preds = %3165
  br label %3174

3169:                                             ; preds = %3165
  %3170 = load i32, ptr %30, align 4, !tbaa !5
  %3171 = icmp eq i32 %3170, 3
  br i1 %3171, label %3172, label %3173

3172:                                             ; preds = %3169
  br label %3173

3173:                                             ; preds = %3172, %3169
  br label %3174

3174:                                             ; preds = %3173, %3168
  br label %3175

3175:                                             ; preds = %3174, %3100
  br label %3176

3176:                                             ; preds = %3175
  %3177 = load i32, ptr %22, align 4, !tbaa !5
  %3178 = add nsw i32 %3177, 1
  store i32 %3178, ptr %22, align 4, !tbaa !5
  br label %3090, !llvm.loop !79

3179:                                             ; preds = %3090
  %3180 = call i64 @libxsmm_timer_tick()
  store i64 %3180, ptr %26, align 8, !tbaa !56
  %3181 = load i64, ptr %25, align 8, !tbaa !56
  %3182 = load i64, ptr %26, align 8, !tbaa !56
  %3183 = call double @libxsmm_timer_duration(i64 noundef %3181, i64 noundef %3182)
  store double %3183, ptr %27, align 8, !tbaa !11
  %3184 = load double, ptr %27, align 8, !tbaa !11
  %3185 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %3184)
  %3186 = load ptr, ptr %15, align 8, !tbaa !9
  call void %3186(ptr noundef %24)
  %3187 = call i64 @libxsmm_timer_tick()
  store i64 %3187, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %3188

3188:                                             ; preds = %3194, %3179
  %3189 = load i32, ptr %22, align 4, !tbaa !5
  %3190 = load i32, ptr %31, align 4, !tbaa !5
  %3191 = icmp slt i32 %3189, %3190
  br i1 %3191, label %3192, label %3197

3192:                                             ; preds = %3188
  %3193 = load ptr, ptr %15, align 8, !tbaa !9
  call void %3193(ptr noundef %24)
  br label %3194

3194:                                             ; preds = %3192
  %3195 = load i32, ptr %22, align 4, !tbaa !5
  %3196 = add nsw i32 %3195, 1
  store i32 %3196, ptr %22, align 4, !tbaa !5
  br label %3188, !llvm.loop !80

3197:                                             ; preds = %3188
  %3198 = call i64 @libxsmm_timer_tick()
  store i64 %3198, ptr %26, align 8, !tbaa !56
  %3199 = load i64, ptr %25, align 8, !tbaa !56
  %3200 = load i64, ptr %26, align 8, !tbaa !56
  %3201 = call double @libxsmm_timer_duration(i64 noundef %3199, i64 noundef %3200)
  store double %3201, ptr %28, align 8, !tbaa !11
  %3202 = load double, ptr %28, align 8, !tbaa !11
  %3203 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %3202)
  %3204 = load double, ptr %28, align 8, !tbaa !11
  %3205 = fcmp olt double 0.000000e+00, %3204
  br i1 %3205, label %3206, label %3212

3206:                                             ; preds = %3197
  %3207 = load i32, ptr %31, align 4, !tbaa !5
  %3208 = load double, ptr %27, align 8, !tbaa !11
  %3209 = load double, ptr %28, align 8, !tbaa !11
  %3210 = fdiv double %3208, %3209
  %3211 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %3207, double noundef %3210)
  br label %3212

3212:                                             ; preds = %3206, %3197
  %3213 = call i32 (ptr, ...) @printf(ptr noundef @.str.23)
  %3214 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3215 = load i32, ptr %3214, align 8, !tbaa !5
  %3216 = sext i32 %3215 to i64
  %3217 = mul i64 2, %3216
  %3218 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %3217, i64 noundef 64)
  store ptr %3218, ptr %54, align 8, !tbaa !9
  %3219 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3220 = load i32, ptr %3219, align 8, !tbaa !5
  %3221 = sext i32 %3220 to i64
  %3222 = mul i64 4, %3221
  %3223 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %3222, i64 noundef 64)
  store ptr %3223, ptr %48, align 8, !tbaa !9
  %3224 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %3225 = load ptr, ptr %3224, align 16, !tbaa !9
  %3226 = load ptr, ptr %54, align 8, !tbaa !9
  %3227 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3228 = load i32, ptr %3227, align 8, !tbaa !5
  %3229 = sext i32 %3228 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %3225, ptr noundef %3226, i64 noundef %3229)
  %3230 = load ptr, ptr %54, align 8, !tbaa !9
  %3231 = load ptr, ptr %48, align 8, !tbaa !9
  %3232 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3233 = load i32, ptr %3232, align 8, !tbaa !5
  %3234 = sext i32 %3233 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %3230, ptr noundef %3231, i64 noundef %3234)
  %3235 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3236 = load i32, ptr %3235, align 8, !tbaa !5
  %3237 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %39, i32 0, i32 0
  store i32 %3236, ptr %3237, align 4, !tbaa !15
  %3238 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %39, i32 0, i32 1
  store i32 1, ptr %3238, align 4, !tbaa !17
  %3239 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3240 = load i32, ptr %3239, align 8, !tbaa !5
  %3241 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %39, i32 0, i32 2
  store i32 %3240, ptr %3241, align 4, !tbaa !18
  %3242 = load i32, ptr %32, align 4, !tbaa !5
  %3243 = getelementptr inbounds %struct.libxsmm_meqn_arg_shape, ptr %39, i32 0, i32 3
  store i32 %3242, ptr %3243, align 4, !tbaa !19
  %3244 = call i32 @libxsmm_meqn_create()
  store i32 %3244, ptr %10, align 4, !tbaa !5
  %3245 = load i32, ptr %10, align 4, !tbaa !5
  %3246 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %3247 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %3246, i32 0, i32 0
  store i32 %3245, ptr %3247, align 16, !tbaa !39
  %3248 = load i32, ptr %10, align 4, !tbaa !5
  %3249 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %3250 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %3249, i32 0, i32 0
  store i32 %3248, ptr %3250, align 8, !tbaa !39
  %3251 = load i32, ptr %10, align 4, !tbaa !5
  %3252 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 42
  %3253 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %3252, i32 0, i32 0
  store i32 %3251, ptr %3253, align 16, !tbaa !39
  %3254 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 42
  %3255 = getelementptr inbounds %struct.libxsmm_meqn_arg_metadata, ptr %3254, i32 0, i32 1
  store i32 42, ptr %3255, align 4, !tbaa !41
  %3256 = load i32, ptr %10, align 4, !tbaa !5
  %3257 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %3258 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %3257, i32 0, i32 0
  store i32 %3256, ptr %3258, align 16, !tbaa !42
  %3259 = load i32, ptr %10, align 4, !tbaa !5
  %3260 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %3261 = getelementptr inbounds %struct.libxsmm_meqn_op_metadata, ptr %3260, i32 0, i32 0
  store i32 %3259, ptr %3261, align 8, !tbaa !42
  %3262 = load i32, ptr %66, align 4, !tbaa !5
  %3263 = icmp eq i32 %3262, 0
  br i1 %3263, label %3264, label %3265

3264:                                             ; preds = %3212
  br label %3281

3265:                                             ; preds = %3212
  %3266 = load i32, ptr %66, align 4, !tbaa !5
  %3267 = icmp eq i32 %3266, 1
  br i1 %3267, label %3268, label %3272

3268:                                             ; preds = %3265
  %3269 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %3270 = load i64, ptr %3269, align 16
  %3271 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %3270, i32 noundef 5, i32 noundef 1, i32 noundef 0)
  br label %3280

3272:                                             ; preds = %3265
  %3273 = load i32, ptr %66, align 4, !tbaa !5
  %3274 = icmp eq i32 %3273, 2
  br i1 %3274, label %3275, label %3279

3275:                                             ; preds = %3272
  %3276 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %3277 = load i64, ptr %3276, align 16
  %3278 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %3277, i32 noundef 9, i32 noundef 1, i32 noundef 0)
  br label %3279

3279:                                             ; preds = %3275, %3272
  br label %3280

3280:                                             ; preds = %3279, %3268
  br label %3281

3281:                                             ; preds = %3280, %3264
  %3282 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %3283 = load i64, ptr %3282, align 16
  %3284 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %3283, i32 noundef 1, i32 noundef 1, i32 noundef 4)
  %3285 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 0
  %3286 = load i64, ptr %3285, align 16
  %3287 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %3286, i32 noundef 14, i32 noundef 1, i32 noundef 0)
  %3288 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 42
  %3289 = load i64, ptr %3288, align 16
  %3290 = getelementptr inbounds { i64, i64 }, ptr %39, i32 0, i32 0
  %3291 = load i64, ptr %3290, align 4
  %3292 = getelementptr inbounds { i64, i64 }, ptr %39, i32 0, i32 1
  %3293 = load i64, ptr %3292, align 4
  %3294 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 0
  %3295 = load i64, ptr %3294, align 4
  %3296 = getelementptr inbounds { i64, i64 }, ptr %43, i32 0, i32 1
  %3297 = load i64, ptr %3296, align 4
  %3298 = call i32 @libxsmm_meqn_push_back_arg(i64 %3289, i64 %3291, i64 %3293, i64 %3295, i64 %3297)
  %3299 = getelementptr inbounds [128 x %struct.libxsmm_meqn_op_metadata], ptr %61, i64 0, i64 1
  %3300 = load i64, ptr %3299, align 8
  %3301 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %3300, i32 noundef 15, i32 noundef 2, i32 noundef 0)
  %3302 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 2
  %3303 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 2
  %3304 = load i64, ptr %3302, align 16
  %3305 = getelementptr inbounds { i64, i64 }, ptr %3303, i32 0, i32 0
  %3306 = load i64, ptr %3305, align 16
  %3307 = getelementptr inbounds { i64, i64 }, ptr %3303, i32 0, i32 1
  %3308 = load i64, ptr %3307, align 8
  %3309 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 0
  %3310 = load i64, ptr %3309, align 4
  %3311 = getelementptr inbounds { i64, i64 }, ptr %41, i32 0, i32 1
  %3312 = load i64, ptr %3311, align 4
  %3313 = call i32 @libxsmm_meqn_push_back_arg(i64 %3304, i64 %3306, i64 %3308, i64 %3310, i64 %3312)
  %3314 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_metadata], ptr %60, i64 0, i64 3
  %3315 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 3
  %3316 = load i64, ptr %3314, align 8
  %3317 = getelementptr inbounds { i64, i64 }, ptr %3315, i32 0, i32 0
  %3318 = load i64, ptr %3317, align 16
  %3319 = getelementptr inbounds { i64, i64 }, ptr %3315, i32 0, i32 1
  %3320 = load i64, ptr %3319, align 8
  %3321 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 0
  %3322 = load i64, ptr %3321, align 4
  %3323 = getelementptr inbounds { i64, i64 }, ptr %42, i32 0, i32 1
  %3324 = load i64, ptr %3323, align 4
  %3325 = call i32 @libxsmm_meqn_push_back_arg(i64 %3316, i64 %3318, i64 %3320, i64 %3322, i64 %3324)
  %3326 = load i32, ptr %10, align 4, !tbaa !5
  call void @libxsmm_meqn_tree_print(i32 noundef %3326)
  %3327 = load i32, ptr %10, align 4, !tbaa !5
  %3328 = load i32, ptr %62, align 4, !tbaa !5
  %3329 = sub nsw i32 %3328, 1
  %3330 = sext i32 %3329 to i64
  %3331 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %38, i64 0, i64 %3330
  %3332 = getelementptr inbounds { i64, i64 }, ptr %3331, i32 0, i32 0
  %3333 = load i64, ptr %3332, align 16
  %3334 = getelementptr inbounds { i64, i64 }, ptr %3331, i32 0, i32 1
  %3335 = load i64, ptr %3334, align 8
  %3336 = call ptr @libxsmm_dispatch_meqn(i32 noundef %3327, i64 %3333, i64 %3335)
  store ptr %3336, ptr %16, align 8, !tbaa !9
  %3337 = load ptr, ptr %54, align 8, !tbaa !9
  %3338 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %59, i64 0, i64 42
  %3339 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %3338, i32 0, i32 0
  store ptr %3337, ptr %3339, align 16, !tbaa !34
  %3340 = load ptr, ptr %16, align 8, !tbaa !9
  call void %3340(ptr noundef %24)
  %3341 = load i32, ptr %63, align 4, !tbaa !5
  %3342 = sext i32 %3341 to i64
  %3343 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3342
  %3344 = load ptr, ptr %3343, align 8, !tbaa !9
  %3345 = load i32, ptr %62, align 4, !tbaa !5
  %3346 = sub nsw i32 %3345, 1
  %3347 = sext i32 %3346 to i64
  %3348 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %3347
  %3349 = load i32, ptr %3348, align 4, !tbaa !5
  %3350 = load i32, ptr %62, align 4, !tbaa !5
  %3351 = sub nsw i32 %3350, 1
  %3352 = sext i32 %3351 to i64
  %3353 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %3352
  %3354 = load i32, ptr %3353, align 4, !tbaa !5
  %3355 = load i32, ptr %62, align 4, !tbaa !5
  %3356 = sub nsw i32 %3355, 1
  %3357 = sext i32 %3356 to i64
  %3358 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %3357
  %3359 = load i32, ptr %3358, align 4, !tbaa !5
  %3360 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %3361 = load ptr, ptr %3360, align 16, !tbaa !9
  %3362 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %3363 = load i32, ptr %3362, align 16, !tbaa !5
  %3364 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %3365 = load i32, ptr %3364, align 16, !tbaa !5
  %3366 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %3367 = load i32, ptr %3366, align 16, !tbaa !5
  %3368 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %3369 = load ptr, ptr %3368, align 8, !tbaa !9
  %3370 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %3371 = load i32, ptr %3370, align 4, !tbaa !5
  %3372 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %3373 = load i32, ptr %3372, align 4, !tbaa !5
  %3374 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %3375 = load i32, ptr %3374, align 4, !tbaa !5
  %3376 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %3377 = load i32, ptr %3376, align 8, !tbaa !5
  %3378 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %3379 = load ptr, ptr %3378, align 16, !tbaa !9
  %3380 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3381 = load i32, ptr %3380, align 8, !tbaa !5
  %3382 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3383 = load i32, ptr %3382, align 8, !tbaa !5
  %3384 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3385 = load i32, ptr %3384, align 8, !tbaa !5
  %3386 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3387 = load i32, ptr %3386, align 8, !tbaa !5
  %3388 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3389 = load i32, ptr %3388, align 8, !tbaa !5
  %3390 = mul nsw i32 %3387, %3389
  %3391 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %3392 = load ptr, ptr %3391, align 8, !tbaa !9
  %3393 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %3394 = load i32, ptr %3393, align 4, !tbaa !5
  %3395 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3396 = load i32, ptr %3395, align 4, !tbaa !5
  %3397 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3398 = load i32, ptr %3397, align 4, !tbaa !5
  %3399 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3400 = load i32, ptr %3399, align 4, !tbaa !5
  %3401 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3402 = load i32, ptr %3401, align 4, !tbaa !5
  %3403 = mul nsw i32 %3400, %3402
  %3404 = load ptr, ptr %48, align 8, !tbaa !9
  %3405 = load i32, ptr %66, align 4, !tbaa !5
  %3406 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn4_f32(ptr noundef %3344, i32 noundef %3349, i32 noundef %3354, i32 noundef %3359, ptr noundef %3361, i32 noundef %3363, i32 noundef %3365, i32 noundef %3367, ptr noundef %3369, i32 noundef %3371, i32 noundef %3373, i32 noundef %3375, i32 noundef %3377, ptr noundef %3379, i32 noundef %3381, i32 noundef %3383, i32 noundef %3385, i32 noundef %3390, ptr noundef %3392, i32 noundef %3394, i32 noundef %3396, i32 noundef %3398, i32 noundef %3403, ptr noundef %3404, i32 noundef %3405, ptr noundef %3406)
  %3407 = load i32, ptr %62, align 4, !tbaa !5
  %3408 = sub nsw i32 %3407, 1
  %3409 = sext i32 %3408 to i64
  %3410 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %3409
  %3411 = load ptr, ptr %3410, align 8, !tbaa !9
  %3412 = load i32, ptr %62, align 4, !tbaa !5
  %3413 = sub nsw i32 %3412, 1
  %3414 = sext i32 %3413 to i64
  %3415 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3414
  %3416 = load ptr, ptr %3415, align 8, !tbaa !9
  %3417 = load i32, ptr %62, align 4, !tbaa !5
  %3418 = sub nsw i32 %3417, 1
  %3419 = sext i32 %3418 to i64
  %3420 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %3419
  %3421 = load i32, ptr %3420, align 4, !tbaa !5
  %3422 = load i32, ptr %62, align 4, !tbaa !5
  %3423 = sub nsw i32 %3422, 1
  %3424 = sext i32 %3423 to i64
  %3425 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %3424
  %3426 = load i32, ptr %3425, align 4, !tbaa !5
  %3427 = mul nsw i32 %3421, %3426
  %3428 = load i32, ptr %62, align 4, !tbaa !5
  %3429 = sub nsw i32 %3428, 1
  %3430 = sext i32 %3429 to i64
  %3431 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %3430
  %3432 = load i32, ptr %3431, align 4, !tbaa !5
  %3433 = mul nsw i32 %3427, %3432
  %3434 = sext i32 %3433 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %3411, ptr noundef %3416, i64 noundef %3434)
  %3435 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %3436 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %3437 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %3438 = load i32, ptr %62, align 4, !tbaa !5
  %3439 = sub nsw i32 %3438, 1
  %3440 = sext i32 %3439 to i64
  %3441 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %3440
  %3442 = load i32, ptr %3441, align 4, !tbaa !5
  %3443 = load i32, ptr %62, align 4, !tbaa !5
  %3444 = sub nsw i32 %3443, 1
  %3445 = sext i32 %3444 to i64
  %3446 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %3445
  %3447 = load i32, ptr %3446, align 4, !tbaa !5
  %3448 = mul nsw i32 %3442, %3447
  %3449 = load i32, ptr %62, align 4, !tbaa !5
  %3450 = sub nsw i32 %3449, 1
  %3451 = sext i32 %3450 to i64
  %3452 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 %3451
  %3453 = load i32, ptr %3452, align 4, !tbaa !5
  %3454 = mul nsw i32 %3448, %3453
  %3455 = load i32, ptr %63, align 4, !tbaa !5
  %3456 = sext i32 %3455 to i64
  %3457 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3456
  %3458 = load ptr, ptr %3457, align 8, !tbaa !9
  %3459 = load i32, ptr %62, align 4, !tbaa !5
  %3460 = sub nsw i32 %3459, 1
  %3461 = sext i32 %3460 to i64
  %3462 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3461
  %3463 = load ptr, ptr %3462, align 8, !tbaa !9
  %3464 = call i32 @libxsmm_matdiff(ptr noundef %29, i32 noundef 1, i32 noundef %3454, i32 noundef 1, ptr noundef %3458, ptr noundef %3463, ptr noundef null, ptr noundef null)
  %3465 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 10
  %3466 = load double, ptr %3465, align 8, !tbaa !48
  %3467 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, double noundef %3466)
  %3468 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 15
  %3469 = load double, ptr %3468, align 8, !tbaa !50
  %3470 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, double noundef %3469)
  %3471 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 7
  %3472 = load double, ptr %3471, align 8, !tbaa !51
  %3473 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, double noundef %3472)
  %3474 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 8
  %3475 = load double, ptr %3474, align 8, !tbaa !52
  %3476 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %3475)
  %3477 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 5
  %3478 = load double, ptr %3477, align 8, !tbaa !53
  %3479 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, double noundef %3478)
  %3480 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 6
  %3481 = load double, ptr %3480, align 8, !tbaa !54
  %3482 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %3481)
  %3483 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %29, i32 0, i32 4
  %3484 = load double, ptr %3483, align 8, !tbaa !55
  %3485 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %3484)
  %3486 = load i32, ptr %30, align 4, !tbaa !5
  %3487 = icmp eq i32 %3486, 0
  br i1 %3487, label %3491, label %3488

3488:                                             ; preds = %3281
  %3489 = load i32, ptr %30, align 4, !tbaa !5
  %3490 = icmp eq i32 %3489, 1
  br i1 %3490, label %3491, label %3558

3491:                                             ; preds = %3488, %3281
  %3492 = load i32, ptr %63, align 4, !tbaa !5
  %3493 = sext i32 %3492 to i64
  %3494 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3493
  %3495 = load ptr, ptr %3494, align 8, !tbaa !9
  %3496 = load i32, ptr %62, align 4, !tbaa !5
  %3497 = sub nsw i32 %3496, 1
  %3498 = sext i32 %3497 to i64
  %3499 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %3498
  %3500 = load i32, ptr %3499, align 4, !tbaa !5
  %3501 = load i32, ptr %62, align 4, !tbaa !5
  %3502 = sub nsw i32 %3501, 1
  %3503 = sext i32 %3502 to i64
  %3504 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %3503
  %3505 = load i32, ptr %3504, align 4, !tbaa !5
  %3506 = load i32, ptr %62, align 4, !tbaa !5
  %3507 = sub nsw i32 %3506, 1
  %3508 = sext i32 %3507 to i64
  %3509 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %3508
  %3510 = load i32, ptr %3509, align 4, !tbaa !5
  %3511 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %3512 = load ptr, ptr %3511, align 16, !tbaa !9
  %3513 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %3514 = load i32, ptr %3513, align 16, !tbaa !5
  %3515 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %3516 = load i32, ptr %3515, align 16, !tbaa !5
  %3517 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %3518 = load i32, ptr %3517, align 16, !tbaa !5
  %3519 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %3520 = load ptr, ptr %3519, align 8, !tbaa !9
  %3521 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %3522 = load i32, ptr %3521, align 4, !tbaa !5
  %3523 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %3524 = load i32, ptr %3523, align 4, !tbaa !5
  %3525 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %3526 = load i32, ptr %3525, align 4, !tbaa !5
  %3527 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %3528 = load i32, ptr %3527, align 8, !tbaa !5
  %3529 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %3530 = load ptr, ptr %3529, align 16, !tbaa !9
  %3531 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3532 = load i32, ptr %3531, align 8, !tbaa !5
  %3533 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3534 = load i32, ptr %3533, align 8, !tbaa !5
  %3535 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3536 = load i32, ptr %3535, align 8, !tbaa !5
  %3537 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3538 = load i32, ptr %3537, align 8, !tbaa !5
  %3539 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3540 = load i32, ptr %3539, align 8, !tbaa !5
  %3541 = mul nsw i32 %3538, %3540
  %3542 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %3543 = load ptr, ptr %3542, align 8, !tbaa !9
  %3544 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %3545 = load i32, ptr %3544, align 4, !tbaa !5
  %3546 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3547 = load i32, ptr %3546, align 4, !tbaa !5
  %3548 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3549 = load i32, ptr %3548, align 4, !tbaa !5
  %3550 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3551 = load i32, ptr %3550, align 4, !tbaa !5
  %3552 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3553 = load i32, ptr %3552, align 4, !tbaa !5
  %3554 = mul nsw i32 %3551, %3553
  %3555 = load ptr, ptr %48, align 8, !tbaa !9
  %3556 = load i32, ptr %66, align 4, !tbaa !5
  %3557 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn4_f32(ptr noundef %3495, i32 noundef %3500, i32 noundef %3505, i32 noundef %3510, ptr noundef %3512, i32 noundef %3514, i32 noundef %3516, i32 noundef %3518, ptr noundef %3520, i32 noundef %3522, i32 noundef %3524, i32 noundef %3526, i32 noundef %3528, ptr noundef %3530, i32 noundef %3532, i32 noundef %3534, i32 noundef %3536, i32 noundef %3541, ptr noundef %3543, i32 noundef %3545, i32 noundef %3547, i32 noundef %3549, i32 noundef %3554, ptr noundef %3555, i32 noundef %3556, ptr noundef %3557)
  br label %3568

3558:                                             ; preds = %3488
  %3559 = load i32, ptr %30, align 4, !tbaa !5
  %3560 = icmp eq i32 %3559, 2
  br i1 %3560, label %3561, label %3562

3561:                                             ; preds = %3558
  br label %3567

3562:                                             ; preds = %3558
  %3563 = load i32, ptr %30, align 4, !tbaa !5
  %3564 = icmp eq i32 %3563, 3
  br i1 %3564, label %3565, label %3566

3565:                                             ; preds = %3562
  br label %3566

3566:                                             ; preds = %3565, %3562
  br label %3567

3567:                                             ; preds = %3566, %3561
  br label %3568

3568:                                             ; preds = %3567, %3491
  %3569 = call i64 @libxsmm_timer_tick()
  store i64 %3569, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %3570

3570:                                             ; preds = %3658, %3568
  %3571 = load i32, ptr %22, align 4, !tbaa !5
  %3572 = load i32, ptr %31, align 4, !tbaa !5
  %3573 = icmp slt i32 %3571, %3572
  br i1 %3573, label %3574, label %3661

3574:                                             ; preds = %3570
  %3575 = load i32, ptr %30, align 4, !tbaa !5
  %3576 = icmp eq i32 %3575, 0
  br i1 %3576, label %3580, label %3577

3577:                                             ; preds = %3574
  %3578 = load i32, ptr %30, align 4, !tbaa !5
  %3579 = icmp eq i32 %3578, 1
  br i1 %3579, label %3580, label %3647

3580:                                             ; preds = %3577, %3574
  %3581 = load i32, ptr %63, align 4, !tbaa !5
  %3582 = sext i32 %3581 to i64
  %3583 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3582
  %3584 = load ptr, ptr %3583, align 8, !tbaa !9
  %3585 = load i32, ptr %62, align 4, !tbaa !5
  %3586 = sub nsw i32 %3585, 1
  %3587 = sext i32 %3586 to i64
  %3588 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 %3587
  %3589 = load i32, ptr %3588, align 4, !tbaa !5
  %3590 = load i32, ptr %62, align 4, !tbaa !5
  %3591 = sub nsw i32 %3590, 1
  %3592 = sext i32 %3591 to i64
  %3593 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 %3592
  %3594 = load i32, ptr %3593, align 4, !tbaa !5
  %3595 = load i32, ptr %62, align 4, !tbaa !5
  %3596 = sub nsw i32 %3595, 1
  %3597 = sext i32 %3596 to i64
  %3598 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 %3597
  %3599 = load i32, ptr %3598, align 4, !tbaa !5
  %3600 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 0
  %3601 = load ptr, ptr %3600, align 16, !tbaa !9
  %3602 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 0
  %3603 = load i32, ptr %3602, align 16, !tbaa !5
  %3604 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 0
  %3605 = load i32, ptr %3604, align 16, !tbaa !5
  %3606 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 0
  %3607 = load i32, ptr %3606, align 16, !tbaa !5
  %3608 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 1
  %3609 = load ptr, ptr %3608, align 8, !tbaa !9
  %3610 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 1
  %3611 = load i32, ptr %3610, align 4, !tbaa !5
  %3612 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 1
  %3613 = load i32, ptr %3612, align 4, !tbaa !5
  %3614 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 1
  %3615 = load i32, ptr %3614, align 4, !tbaa !5
  %3616 = getelementptr inbounds [128 x i32], ptr %37, i64 0, i64 2
  %3617 = load i32, ptr %3616, align 8, !tbaa !5
  %3618 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 2
  %3619 = load ptr, ptr %3618, align 16, !tbaa !9
  %3620 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 2
  %3621 = load i32, ptr %3620, align 8, !tbaa !5
  %3622 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3623 = load i32, ptr %3622, align 8, !tbaa !5
  %3624 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3625 = load i32, ptr %3624, align 8, !tbaa !5
  %3626 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 2
  %3627 = load i32, ptr %3626, align 8, !tbaa !5
  %3628 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 2
  %3629 = load i32, ptr %3628, align 8, !tbaa !5
  %3630 = mul nsw i32 %3627, %3629
  %3631 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 3
  %3632 = load ptr, ptr %3631, align 8, !tbaa !9
  %3633 = getelementptr inbounds [128 x i32], ptr %34, i64 0, i64 3
  %3634 = load i32, ptr %3633, align 4, !tbaa !5
  %3635 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3636 = load i32, ptr %3635, align 4, !tbaa !5
  %3637 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3638 = load i32, ptr %3637, align 4, !tbaa !5
  %3639 = getelementptr inbounds [128 x i32], ptr %36, i64 0, i64 3
  %3640 = load i32, ptr %3639, align 4, !tbaa !5
  %3641 = getelementptr inbounds [128 x i32], ptr %35, i64 0, i64 3
  %3642 = load i32, ptr %3641, align 4, !tbaa !5
  %3643 = mul nsw i32 %3640, %3642
  %3644 = load ptr, ptr %48, align 8, !tbaa !9
  %3645 = load i32, ptr %66, align 4, !tbaa !5
  %3646 = load ptr, ptr %45, align 8, !tbaa !9
  call void @eqn4_f32(ptr noundef %3584, i32 noundef %3589, i32 noundef %3594, i32 noundef %3599, ptr noundef %3601, i32 noundef %3603, i32 noundef %3605, i32 noundef %3607, ptr noundef %3609, i32 noundef %3611, i32 noundef %3613, i32 noundef %3615, i32 noundef %3617, ptr noundef %3619, i32 noundef %3621, i32 noundef %3623, i32 noundef %3625, i32 noundef %3630, ptr noundef %3632, i32 noundef %3634, i32 noundef %3636, i32 noundef %3638, i32 noundef %3643, ptr noundef %3644, i32 noundef %3645, ptr noundef %3646)
  br label %3657

3647:                                             ; preds = %3577
  %3648 = load i32, ptr %30, align 4, !tbaa !5
  %3649 = icmp eq i32 %3648, 2
  br i1 %3649, label %3650, label %3651

3650:                                             ; preds = %3647
  br label %3656

3651:                                             ; preds = %3647
  %3652 = load i32, ptr %30, align 4, !tbaa !5
  %3653 = icmp eq i32 %3652, 3
  br i1 %3653, label %3654, label %3655

3654:                                             ; preds = %3651
  br label %3655

3655:                                             ; preds = %3654, %3651
  br label %3656

3656:                                             ; preds = %3655, %3650
  br label %3657

3657:                                             ; preds = %3656, %3580
  br label %3658

3658:                                             ; preds = %3657
  %3659 = load i32, ptr %22, align 4, !tbaa !5
  %3660 = add nsw i32 %3659, 1
  store i32 %3660, ptr %22, align 4, !tbaa !5
  br label %3570, !llvm.loop !81

3661:                                             ; preds = %3570
  %3662 = call i64 @libxsmm_timer_tick()
  store i64 %3662, ptr %26, align 8, !tbaa !56
  %3663 = load i64, ptr %25, align 8, !tbaa !56
  %3664 = load i64, ptr %26, align 8, !tbaa !56
  %3665 = call double @libxsmm_timer_duration(i64 noundef %3663, i64 noundef %3664)
  store double %3665, ptr %27, align 8, !tbaa !11
  %3666 = load double, ptr %27, align 8, !tbaa !11
  %3667 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %3666)
  %3668 = load ptr, ptr %16, align 8, !tbaa !9
  call void %3668(ptr noundef %24)
  %3669 = call i64 @libxsmm_timer_tick()
  store i64 %3669, ptr %25, align 8, !tbaa !56
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %3670

3670:                                             ; preds = %3676, %3661
  %3671 = load i32, ptr %22, align 4, !tbaa !5
  %3672 = load i32, ptr %31, align 4, !tbaa !5
  %3673 = icmp slt i32 %3671, %3672
  br i1 %3673, label %3674, label %3679

3674:                                             ; preds = %3670
  %3675 = load ptr, ptr %16, align 8, !tbaa !9
  call void %3675(ptr noundef %24)
  br label %3676

3676:                                             ; preds = %3674
  %3677 = load i32, ptr %22, align 4, !tbaa !5
  %3678 = add nsw i32 %3677, 1
  store i32 %3678, ptr %22, align 4, !tbaa !5
  br label %3670, !llvm.loop !82

3679:                                             ; preds = %3670
  %3680 = call i64 @libxsmm_timer_tick()
  store i64 %3680, ptr %26, align 8, !tbaa !56
  %3681 = load i64, ptr %25, align 8, !tbaa !56
  %3682 = load i64, ptr %26, align 8, !tbaa !56
  %3683 = call double @libxsmm_timer_duration(i64 noundef %3681, i64 noundef %3682)
  store double %3683, ptr %28, align 8, !tbaa !11
  %3684 = load double, ptr %28, align 8, !tbaa !11
  %3685 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %3684)
  %3686 = load double, ptr %28, align 8, !tbaa !11
  %3687 = fcmp olt double 0.000000e+00, %3686
  br i1 %3687, label %3688, label %3694

3688:                                             ; preds = %3679
  %3689 = load i32, ptr %31, align 4, !tbaa !5
  %3690 = load double, ptr %27, align 8, !tbaa !11
  %3691 = load double, ptr %28, align 8, !tbaa !11
  %3692 = fdiv double %3690, %3691
  %3693 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef %3689, double noundef %3692)
  br label %3694

3694:                                             ; preds = %3688, %3679
  br label %3695

3695:                                             ; preds = %3694, %2188, %2185
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %3696

3696:                                             ; preds = %3709, %3695
  %3697 = load i32, ptr %18, align 4, !tbaa !5
  %3698 = load i32, ptr %62, align 4, !tbaa !5
  %3699 = icmp slt i32 %3697, %3698
  br i1 %3699, label %3700, label %3712

3700:                                             ; preds = %3696
  %3701 = load i32, ptr %18, align 4, !tbaa !5
  %3702 = sext i32 %3701 to i64
  %3703 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %3702
  %3704 = load ptr, ptr %3703, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3704)
  %3705 = load i32, ptr %18, align 4, !tbaa !5
  %3706 = sext i32 %3705 to i64
  %3707 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3706
  %3708 = load ptr, ptr %3707, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3708)
  br label %3709

3709:                                             ; preds = %3700
  %3710 = load i32, ptr %18, align 4, !tbaa !5
  %3711 = add nsw i32 %3710, 1
  store i32 %3711, ptr %18, align 4, !tbaa !5
  br label %3696, !llvm.loop !83

3712:                                             ; preds = %3696
  %3713 = load i32, ptr %63, align 4, !tbaa !5
  %3714 = sext i32 %3713 to i64
  %3715 = getelementptr inbounds [128 x ptr], ptr %57, i64 0, i64 %3714
  %3716 = load ptr, ptr %3715, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3716)
  %3717 = load ptr, ptr %49, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3717)
  %3718 = load ptr, ptr %48, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3718)
  %3719 = load ptr, ptr %54, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3719)
  %3720 = load i32, ptr %63, align 4, !tbaa !5
  %3721 = sext i32 %3720 to i64
  %3722 = getelementptr inbounds [128 x ptr], ptr %44, i64 0, i64 %3721
  %3723 = load ptr, ptr %3722, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3723)
  %3724 = load ptr, ptr %50, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3724)
  %3725 = load ptr, ptr %52, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3725)
  %3726 = load ptr, ptr %45, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %3726)
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 288, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 1024, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 1024, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 6144, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 6144, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 1024, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 1024, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 2048, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 512, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 512, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 512, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 512, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 192, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  ret i32 0
}

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

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

declare void @libxsmm_init() #3

declare void @libxsmm_matdiff_clear(ptr noundef) #3

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

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

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

declare noalias ptr @libxsmm_malloc(i64 noundef) #3

declare double @libxsmm_rng_f64() #3

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

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

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

declare i32 @libxsmm_meqn_create() #3

declare i32 @libxsmm_meqn_push_back_binary_op(i64, i32 noundef, i32 noundef, i32 noundef) #3

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

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

declare void @libxsmm_meqn_tree_print(i32 noundef) #3

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

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

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

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

declare i64 @libxsmm_timer_tick() #3

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

declare i32 @libxsmm_meqn_push_back_ternary_op(i64, i32 noundef, i32 noundef, i32 noundef) #3

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

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

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

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

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

declare void @libxsmm_free(ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !6, i64 0}
!16 = !{!"libxsmm_meqn_arg_shape", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!17 = !{!16, !6, i64 4}
!18 = !{!16, !6, i64 8}
!19 = !{!16, !6, i64 12}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = !{!24, !24, i64 0}
!24 = !{!"float", !7, i64 0}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = !{!30, !30, i64 0}
!30 = !{!"short", !7, i64 0}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = !{!35, !10, i64 0}
!35 = !{!"libxsmm_matrix_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!36 = distinct !{!36, !14}
!37 = !{!38, !6, i64 0}
!38 = !{!"libxsmm_matrix_arg_attributes", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!39 = !{!40, !6, i64 0}
!40 = !{!"libxsmm_meqn_arg_metadata", !6, i64 0, !6, i64 4}
!41 = !{!40, !6, i64 4}
!42 = !{!43, !6, i64 0}
!43 = !{!"libxsmm_meqn_op_metadata", !6, i64 0, !6, i64 4}
!44 = !{!43, !6, i64 4}
!45 = !{!46, !10, i64 8}
!46 = !{!"libxsmm_meqn_param", !10, i64 0, !10, i64 8, !35, i64 16}
!47 = !{!46, !10, i64 16}
!48 = !{!49, !12, i64 80}
!49 = !{!"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}
!50 = !{!49, !12, i64 120}
!51 = !{!49, !12, i64 56}
!52 = !{!49, !12, i64 64}
!53 = !{!49, !12, i64 40}
!54 = !{!49, !12, i64 48}
!55 = !{!49, !12, i64 32}
!56 = !{!57, !57, i64 0}
!57 = !{!"long long", !7, i64 0}
!58 = distinct !{!58, !14}
!59 = distinct !{!59, !14}
!60 = distinct !{!60, !14}
!61 = distinct !{!61, !14}
!62 = distinct !{!62, !14}
!63 = !{!38, !6, i64 4}
!64 = !{!38, !6, i64 8}
!65 = !{!38, !6, i64 12}
!66 = !{!67, !10, i64 16}
!67 = !{!"libxsmm_matrix_op_arg", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!68 = !{!46, !10, i64 0}
!69 = distinct !{!69, !14}
!70 = distinct !{!70, !14}
!71 = distinct !{!71, !14}
!72 = distinct !{!72, !14}
!73 = distinct !{!73, !14}
!74 = distinct !{!74, !14}
!75 = distinct !{!75, !14}
!76 = distinct !{!76, !14}
!77 = distinct !{!77, !14}
!78 = distinct !{!78, !14}
!79 = distinct !{!79, !14}
!80 = distinct !{!80, !14}
!81 = distinct !{!81, !14}
!82 = distinct !{!82, !14}
!83 = distinct !{!83, !14}


; 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_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_shape = type { i32, i32, i32, i32 }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef 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 [128 x i32], align 16
  %6 = alloca [128 x i32], align 16
  %7 = alloca [128 x i32], align 16
  %8 = alloca [128 x i32], align 16
  %9 = alloca [128 x %struct.libxsmm_meqn_arg_shape], align 16
  %10 = alloca [128 x ptr], align 16
  %11 = alloca [128 x ptr], align 16
  %12 = alloca [128 x %struct.libxsmm_matrix_arg], align 16
  %13 = alloca [128 x %struct.libxsmm_matrix_arg], align 16
  %14 = alloca [9 x %struct.libxsmm_matrix_op_arg], align 16
  %15 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3) #10
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %5) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %5, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %6) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %6, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %7) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %7, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %8) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %8, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %10) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) %10, i8 0, i64 1024, i1 false)
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %11) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) %11, i8 0, i64 1024, i1 false)
  call void @llvm.lifetime.start.p0(i64 6144, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 6144, ptr nonnull %13) #10
  call void @llvm.lifetime.start.p0(i64 288, ptr nonnull %14) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  tail call void @libxsmm_init() #10
  call void @libxsmm_matdiff_clear(ptr noundef nonnull %4) #10
  %16 = getelementptr inbounds i8, ptr %1, i64 8
  %17 = load ptr, ptr %16, align 8, !tbaa !5
  %18 = call i32 @atoi(ptr nocapture noundef %17) #11
  %invariant.gep = getelementptr inbounds i8, ptr %1, i64 24
  %19 = icmp sgt i32 %18, 0
  br i1 %19, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %2
  %wide.trip.count = zext nneg i32 %18 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv1079 = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next1080, %.lr.ph ]
  %indvars.iv = phi i64 [ 2, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %20 = getelementptr inbounds ptr, ptr %1, i64 %indvars.iv
  %21 = load ptr, ptr %20, align 8, !tbaa !5
  %22 = call i32 @atoi(ptr nocapture noundef %21) #11
  %23 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %indvars.iv1079
  store i32 %22, ptr %23, align 4, !tbaa !9
  %24 = getelementptr i8, ptr %20, i64 8
  %25 = load ptr, ptr %24, align 8, !tbaa !5
  %26 = call i32 @atoi(ptr nocapture noundef %25) #11
  %27 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %indvars.iv1079
  store i32 %26, ptr %27, align 4, !tbaa !9
  %28 = getelementptr i8, ptr %20, i64 16
  %29 = load ptr, ptr %28, align 8, !tbaa !5
  %30 = call i32 @atoi(ptr nocapture noundef %29) #11
  %31 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %indvars.iv1079
  store i32 %30, ptr %31, align 4, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 4
  %gep = getelementptr inbounds ptr, ptr %invariant.gep, i64 %indvars.iv
  %32 = load ptr, ptr %gep, align 8, !tbaa !5
  %33 = call i32 @atoi(ptr nocapture noundef %32) #11
  %34 = getelementptr inbounds [128 x i32], ptr %8, i64 0, i64 %indvars.iv1079
  store i32 %33, ptr %34, align 4, !tbaa !9
  %indvars.iv.next1080 = add nuw nsw i64 %indvars.iv1079, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next1080, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !11

._crit_edge:                                      ; preds = %.lr.ph, %2
  %.0.lcssa = phi i64 [ 2, %2 ], [ %indvars.iv.next, %.lr.ph ]
  %35 = and i64 %.0.lcssa, 4294967295
  %36 = getelementptr inbounds ptr, ptr %1, i64 %35
  %37 = load ptr, ptr %36, align 8, !tbaa !5
  %38 = call i32 @atoi(ptr nocapture noundef %37) #11
  %.fr1069 = freeze i32 %38
  %39 = getelementptr i8, ptr %36, i64 8
  %40 = load ptr, ptr %39, align 8, !tbaa !5
  %41 = call i32 @atoi(ptr nocapture noundef %40) #11
  %42 = getelementptr i8, ptr %36, i64 16
  %43 = load ptr, ptr %42, align 8, !tbaa !5
  %44 = call i32 @atoi(ptr nocapture noundef %43) #11
  %45 = icmp eq i32 %.fr1069, 0
  br i1 %45, label %49, label %46

46:                                               ; preds = %._crit_edge
  switch i32 %.fr1069, label %.fold.split [
    i32 1, label %49
    i32 2, label %47
    i32 3, label %48
  ]

47:                                               ; preds = %46
  br label %49

48:                                               ; preds = %46
  br label %49

.fold.split:                                      ; preds = %46
  br label %49

49:                                               ; preds = %46, %.fold.split, %._crit_edge, %48, %47
  %50 = phi i1 [ true, %47 ], [ false, %48 ], [ true, %._crit_edge ], [ false, %46 ], [ true, %.fold.split ]
  %.0917 = phi i32 [ 1, %47 ], [ 2, %48 ], [ 1, %._crit_edge ], [ 2, %46 ], [ 1, %.fold.split ]
  %51 = phi i1 [ false, %47 ], [ true, %48 ], [ true, %._crit_edge ], [ false, %46 ], [ true, %.fold.split ]
  %.0916 = phi i32 [ 2, %47 ], [ 1, %48 ], [ 1, %._crit_edge ], [ 2, %46 ], [ 1, %.fold.split ]
  br i1 %19, label %.lr.ph962, label %._crit_edge965

.lr.ph962:                                        ; preds = %49
  %52 = add nsw i32 %18, -1
  %53 = zext nneg i32 %52 to i64
  %wide.trip.count1087 = zext nneg i32 %18 to i64
  %xtraiter = and i64 %wide.trip.count1087, 1
  %54 = icmp eq i32 %18, 1
  br i1 %54, label %.preheader957.unr-lcssa, label %.lr.ph962.new

.lr.ph962.new:                                    ; preds = %.lr.ph962
  %unroll_iter = and i64 %wide.trip.count1087, 2147483646
  br label %66

.preheader957.unr-lcssa:                          ; preds = %66, %.lr.ph962
  %indvars.iv1084.unr = phi i64 [ 0, %.lr.ph962 ], [ %indvars.iv.next1085.1, %66 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader957, label %.preheader957.epilog-lcssa

.preheader957.epilog-lcssa:                       ; preds = %.preheader957.unr-lcssa
  %55 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %indvars.iv1084.unr
  %56 = load i32, ptr %55, align 4, !tbaa !9
  %57 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %9, i64 0, i64 %indvars.iv1084.unr
  store i32 %56, ptr %57, align 16, !tbaa !13
  %58 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %indvars.iv1084.unr
  %59 = load i32, ptr %58, align 4, !tbaa !9
  %60 = getelementptr inbounds i8, ptr %57, i64 4
  store i32 %59, ptr %60, align 4, !tbaa !15
  %61 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %indvars.iv1084.unr
  %62 = load i32, ptr %61, align 4, !tbaa !9
  %63 = getelementptr inbounds i8, ptr %57, i64 8
  store i32 %62, ptr %63, align 8, !tbaa !16
  %64 = icmp eq i64 %indvars.iv1084.unr, %53
  %spec.select.epil = select i1 %64, i32 %.0916, i32 %.0917
  %65 = getelementptr inbounds i8, ptr %57, i64 12
  store i32 %spec.select.epil, ptr %65, align 4
  br label %.preheader957

.preheader957:                                    ; preds = %.preheader957.unr-lcssa, %.preheader957.epilog-lcssa
  br i1 %19, label %.lr.ph964.preheader, label %._crit_edge965

.lr.ph964.preheader:                              ; preds = %.preheader957
  %wide.trip.count1092 = zext nneg i32 %18 to i64
  br label %.lr.ph964

66:                                               ; preds = %66, %.lr.ph962.new
  %indvars.iv1084 = phi i64 [ 0, %.lr.ph962.new ], [ %indvars.iv.next1085.1, %66 ]
  %niter = phi i64 [ 0, %.lr.ph962.new ], [ %niter.next.1, %66 ]
  %67 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %indvars.iv1084
  %68 = load i32, ptr %67, align 8, !tbaa !9
  %69 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %9, i64 0, i64 %indvars.iv1084
  store i32 %68, ptr %69, align 16, !tbaa !13
  %70 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %indvars.iv1084
  %71 = load i32, ptr %70, align 8, !tbaa !9
  %72 = getelementptr inbounds i8, ptr %69, i64 4
  store i32 %71, ptr %72, align 4, !tbaa !15
  %73 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %indvars.iv1084
  %74 = load i32, ptr %73, align 8, !tbaa !9
  %75 = getelementptr inbounds i8, ptr %69, i64 8
  store i32 %74, ptr %75, align 8, !tbaa !16
  %76 = icmp eq i64 %indvars.iv1084, %53
  %spec.select = select i1 %76, i32 %.0916, i32 %.0917
  %77 = getelementptr inbounds i8, ptr %69, i64 12
  store i32 %spec.select, ptr %77, align 4
  %indvars.iv.next1085 = or disjoint i64 %indvars.iv1084, 1
  %78 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %indvars.iv.next1085
  %79 = load i32, ptr %78, align 4, !tbaa !9
  %80 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %9, i64 0, i64 %indvars.iv.next1085
  store i32 %79, ptr %80, align 16, !tbaa !13
  %81 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %indvars.iv.next1085
  %82 = load i32, ptr %81, align 4, !tbaa !9
  %83 = getelementptr inbounds i8, ptr %80, i64 4
  store i32 %82, ptr %83, align 4, !tbaa !15
  %84 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %indvars.iv.next1085
  %85 = load i32, ptr %84, align 4, !tbaa !9
  %86 = getelementptr inbounds i8, ptr %80, i64 8
  store i32 %85, ptr %86, align 8, !tbaa !16
  %87 = icmp eq i64 %indvars.iv.next1085, %53
  %spec.select.1 = select i1 %87, i32 %.0916, i32 %.0917
  %88 = getelementptr inbounds i8, ptr %80, i64 12
  store i32 %spec.select.1, ptr %88, align 4
  %indvars.iv.next1085.1 = add nuw nsw i64 %indvars.iv1084, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader957.unr-lcssa, label %66, !llvm.loop !17

.lr.ph964:                                        ; preds = %.lr.ph964.preheader, %.lr.ph964
  %indvars.iv1089 = phi i64 [ 0, %.lr.ph964.preheader ], [ %indvars.iv.next1090, %.lr.ph964 ]
  %89 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %indvars.iv1089
  %90 = load i32, ptr %89, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = shl nsw i64 %91, 2
  %93 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %indvars.iv1089
  %94 = load i32, ptr %93, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = mul i64 %92, %95
  %97 = getelementptr inbounds [128 x i32], ptr %8, i64 0, i64 %indvars.iv1089
  %98 = load i32, ptr %97, align 4, !tbaa !9
  %99 = sext i32 %98 to i64
  %100 = mul i64 %96, %99
  %101 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %100, i64 noundef 64) #10
  %102 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %indvars.iv1089
  store ptr %101, ptr %102, align 8, !tbaa !5
  %indvars.iv.next1090 = add nuw nsw i64 %indvars.iv1089, 1
  %exitcond1093.not = icmp eq i64 %indvars.iv.next1090, %wide.trip.count1092
  br i1 %exitcond1093.not, label %._crit_edge965, label %.lr.ph964, !llvm.loop !18

._crit_edge965:                                   ; preds = %.lr.ph964, %49, %.preheader957
  %103 = add nsw i32 %18, -1
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %104
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = shl nsw i64 %107, 2
  %109 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %104
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = sext i32 %110 to i64
  %112 = mul i64 %108, %111
  %113 = getelementptr inbounds [128 x i32], ptr %8, i64 0, i64 %104
  %114 = load i32, ptr %113, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = mul i64 %112, %115
  %117 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %116, i64 noundef 64) #10
  %118 = sext i32 %18 to i64
  %119 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %118
  store ptr %117, ptr %119, align 8, !tbaa !5
  br i1 %19, label %.lr.ph968.preheader, label %._crit_edge969

.lr.ph968.preheader:                              ; preds = %._crit_edge965
  %wide.trip.count1097 = zext nneg i32 %18 to i64
  br label %.lr.ph968

.lr.ph968:                                        ; preds = %.lr.ph968.preheader, %.lr.ph968
  %indvars.iv1094 = phi i64 [ 0, %.lr.ph968.preheader ], [ %indvars.iv.next1095, %.lr.ph968 ]
  %120 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %indvars.iv1094
  %121 = load i32, ptr %120, align 4, !tbaa !9
  %122 = sext i32 %121 to i64
  %123 = shl nsw i64 %122, 1
  %124 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %indvars.iv1094
  %125 = load i32, ptr %124, align 4, !tbaa !9
  %126 = sext i32 %125 to i64
  %127 = mul i64 %123, %126
  %128 = getelementptr inbounds [128 x i32], ptr %8, i64 0, i64 %indvars.iv1094
  %129 = load i32, ptr %128, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = mul i64 %127, %130
  %132 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %131, i64 noundef 64) #10
  %133 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %indvars.iv1094
  store ptr %132, ptr %133, align 8, !tbaa !5
  %indvars.iv.next1095 = add nuw nsw i64 %indvars.iv1094, 1
  %exitcond1098.not = icmp eq i64 %indvars.iv.next1095, %wide.trip.count1097
  br i1 %exitcond1098.not, label %._crit_edge969, label %.lr.ph968, !llvm.loop !19

._crit_edge969:                                   ; preds = %.lr.ph968, %._crit_edge965
  %134 = load i32, ptr %105, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = load i32, ptr %109, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = shl nsw i64 %115, 1
  %139 = mul i64 %138, %135
  %140 = mul i64 %139, %137
  %141 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %140, i64 noundef 64) #10
  %142 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %118
  store ptr %141, ptr %142, align 8, !tbaa !5
  %143 = icmp sgt i32 %18, 3
  br i1 %143, label %145, label %144

144:                                              ; preds = %._crit_edge969
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 344, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #12
  unreachable

145:                                              ; preds = %._crit_edge969
  %146 = getelementptr inbounds i8, ptr %5, i64 8
  %147 = load i32, ptr %146, align 8, !tbaa !9
  %148 = getelementptr inbounds i8, ptr %5, i64 12
  %149 = load i32, ptr %148, align 4, !tbaa !9
  %150 = mul nsw i32 %149, %147
  %151 = sext i32 %150 to i64
  %152 = call noalias ptr @libxsmm_malloc(i64 noundef %151) #10
  %153 = icmp eq i32 %.fr1069, 1
  %wide.trip.count1104 = zext nneg i32 %18 to i64
  br label %154

154:                                              ; preds = %145, %._crit_edge982
  %indvars.iv1101 = phi i64 [ 0, %145 ], [ %indvars.iv.next1102, %._crit_edge982 ]
  %155 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %indvars.iv1101
  %156 = load ptr, ptr %155, align 8, !tbaa !5
  %157 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %indvars.iv1101
  %158 = load ptr, ptr %157, align 8, !tbaa !5
  %159 = getelementptr inbounds [128 x i32], ptr %7, i64 0, i64 %indvars.iv1101
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = getelementptr inbounds [128 x i32], ptr %6, i64 0, i64 %indvars.iv1101
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = mul nsw i32 %162, %160
  %164 = icmp sgt i32 %162, 0
  br i1 %164, label %.preheader956.lr.ph, label %._crit_edge982

.preheader956.lr.ph:                              ; preds = %154
  %165 = getelementptr inbounds [128 x i32], ptr %8, i64 0, i64 %indvars.iv1101
  %166 = icmp sgt i32 %160, 0
  br i1 %166, label %.preheader956, label %._crit_edge982

.preheader956:                                    ; preds = %.preheader956.lr.ph, %._crit_edge975
  %167 = phi i32 [ %207, %._crit_edge975 ], [ %160, %.preheader956.lr.ph ]
  %.3979 = phi i32 [ %208, %._crit_edge975 ], [ 0, %.preheader956.lr.ph ]
  %168 = icmp sgt i32 %167, 0
  br i1 %168, label %.preheader955.lr.ph, label %._crit_edge975

.preheader955.lr.ph:                              ; preds = %.preheader956
  %169 = load i32, ptr %165, align 4, !tbaa !9
  %170 = icmp sgt i32 %169, 0
  br i1 %170, label %.preheader955.lr.ph.split.us, label %._crit_edge975

.preheader955.lr.ph.split.us:                     ; preds = %.preheader955.lr.ph
  br i1 %153, label %.preheader955.us.us, label %.preheader955.us

.preheader955.us.us:                              ; preds = %.preheader955.lr.ph.split.us, %._crit_edge972.split.us.us.us
  %.2893973.us.us = phi i32 [ %189, %._crit_edge972.split.us.us.us ], [ 0, %.preheader955.lr.ph.split.us ]
  br label %171

171:                                              ; preds = %171, %.preheader955.us.us
  %.0899970.us.us.us = phi i32 [ 0, %.preheader955.us.us ], [ %188, %171 ]
  %172 = call double @libxsmm_rng_f64() #10
  %173 = fptrunc double %172 to float
  %174 = load i32, ptr %159, align 4, !tbaa !9
  %175 = mul nsw i32 %174, %.3979
  %176 = mul nuw nsw i32 %163, %.0899970.us.us.us
  %177 = add nuw i32 %176, %.2893973.us.us
  %178 = add i32 %177, %175
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds float, ptr %156, i64 %179
  store float %173, ptr %180, align 4, !tbaa !20
  %181 = getelementptr inbounds i16, ptr %158, i64 %179
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %180, ptr noundef %181, i64 noundef 1) #10
  %182 = load i32, ptr %159, align 4, !tbaa !9
  %183 = mul nsw i32 %182, %.3979
  %184 = add i32 %177, %183
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i16, ptr %158, i64 %185
  %187 = getelementptr inbounds float, ptr %156, i64 %185
  call void @libxsmm_convert_bf16_f32(ptr noundef %186, ptr noundef %187, i64 noundef 1) #10
  %188 = add nuw nsw i32 %.0899970.us.us.us, 1
  %exitcond1100.not = icmp eq i32 %188, %169
  br i1 %exitcond1100.not, label %._crit_edge972.split.us.us.us, label %171, !llvm.loop !22

._crit_edge972.split.us.us.us:                    ; preds = %171
  %189 = add nuw nsw i32 %.2893973.us.us, 1
  %190 = load i32, ptr %159, align 4, !tbaa !9
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %.preheader955.us.us, label %._crit_edge975, !llvm.loop !23

.preheader955.us:                                 ; preds = %.preheader955.lr.ph.split.us, %._crit_edge972.split.us977
  %.2893973.us = phi i32 [ %204, %._crit_edge972.split.us977 ], [ 0, %.preheader955.lr.ph.split.us ]
  br label %192

192:                                              ; preds = %.preheader955.us, %192
  %.0899970.us976 = phi i32 [ 0, %.preheader955.us ], [ %203, %192 ]
  %193 = call double @libxsmm_rng_f64() #10
  %194 = fptrunc double %193 to float
  %195 = load i32, ptr %159, align 4, !tbaa !9
  %196 = mul nsw i32 %195, %.3979
  %197 = mul nuw nsw i32 %163, %.0899970.us976
  %198 = add nuw i32 %197, %.2893973.us
  %199 = add i32 %198, %196
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds float, ptr %156, i64 %200
  store float %194, ptr %201, align 4, !tbaa !20
  %202 = getelementptr inbounds i16, ptr %158, i64 %200
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %201, ptr noundef %202, i64 noundef 1) #10
  %203 = add nuw nsw i32 %.0899970.us976, 1
  %exitcond1099.not = icmp eq i32 %203, %169
  br i1 %exitcond1099.not, label %._crit_edge972.split.us977, label %192, !llvm.loop !22

._crit_edge972.split.us977:                       ; preds = %192
  %204 = add nuw nsw i32 %.2893973.us, 1
  %205 = load i32, ptr %159, align 4, !tbaa !9
  %206 = icmp slt i32 %204, %205
  br i1 %206, label %.preheader955.us, label %._crit_edge975, !llvm.loop !23

._crit_edge975:                                   ; preds = %._crit_edge972.split.us977, %._crit_edge972.split.us.us.us, %.preheader955.lr.ph, %.preheader956
  %207 = phi i32 [ %167, %.preheader956 ], [ %167, %.preheader955.lr.ph ], [ %190, %._crit_edge972.split.us.us.us ], [ %205, %._crit_edge972.split.us977 ]
  %208 = add nuw nsw i32 %.3979, 1
  %209 = load i32, ptr %161, align 4, !tbaa !9
  %210 = icmp slt i32 %208, %209
  br i1 %210, label %.preheader956, label %._crit_edge982, !llvm.loop !24

._crit_edge982:                                   ; preds = %._crit_edge975, %.preheader956.lr.ph, %154
  %indvars.iv.next1102 = add nuw nsw i64 %indvars.iv1101, 1
  %exitcond1105.not = icmp eq i64 %indvars.iv.next1102, %wide.trip.count1104
  br i1 %exitcond1105.not, label %211, label %154, !llvm.loop !26

211:                                              ; preds = %._crit_edge982
  %212 = load ptr, ptr %119, align 8, !tbaa !5
  %213 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %104
  %214 = load ptr, ptr %213, align 8, !tbaa !5
  %215 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %104
  %216 = load ptr, ptr %215, align 8, !tbaa !5
  %217 = load i32, ptr %109, align 4, !tbaa !9
  %218 = load i32, ptr %105, align 4, !tbaa !9
  %219 = icmp sgt i32 %218, 0
  %220 = icmp sgt i32 %217, 0
  %or.cond1188 = select i1 %219, i1 %220, i1 false
  %221 = icmp sgt i32 %114, 0
  %or.cond1189 = and i1 %or.cond1188, %221
  br i1 %or.cond1189, label %.preheader954.us.us.preheader, label %.lr.ph996.preheader

.preheader954.us.us.preheader:                    ; preds = %211
  %wide.trip.count1109 = zext nneg i32 %114 to i64
  %xtraiter1236 = and i64 %wide.trip.count1109, 1
  %222 = icmp eq i32 %114, 1
  %unroll_iter1238 = and i64 %wide.trip.count1109, 2147483646
  %lcmp.mod1237.not = icmp eq i64 %xtraiter1236, 0
  br label %.preheader954.us.us

.preheader954.us.us:                              ; preds = %.preheader954.us.us.preheader, %._crit_edge988.split.us.us.us
  %.4989.us.us = phi i32 [ %255, %._crit_edge988.split.us.us.us ], [ 0, %.preheader954.us.us.preheader ]
  br label %.preheader953.us.us.us

.preheader953.us.us.us:                           ; preds = %._crit_edge986.us.us.us, %.preheader954.us.us
  %.3894987.us.us.us = phi i32 [ 0, %.preheader954.us.us ], [ %254, %._crit_edge986.us.us.us ]
  br i1 %222, label %._crit_edge986.us.us.us.unr-lcssa, label %.preheader953.us.us.us.new

.preheader953.us.us.us.new:                       ; preds = %.preheader953.us.us.us, %.preheader953.us.us.us.new
  %indvars.iv1106 = phi i64 [ %indvars.iv.next1107.1, %.preheader953.us.us.us.new ], [ 0, %.preheader953.us.us.us ]
  %niter1239 = phi i64 [ %niter1239.next.1, %.preheader953.us.us.us.new ], [ 0, %.preheader953.us.us.us ]
  %223 = trunc nuw nsw i64 %indvars.iv1106 to i32
  %224 = mul i32 %218, %223
  %reass.add.us.us.us = add i32 %224, %.4989.us.us
  %reass.mul.us.us.us = mul i32 %reass.add.us.us.us, %217
  %225 = add i32 %reass.mul.us.us.us, %.3894987.us.us.us
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds float, ptr %214, i64 %226
  %228 = load float, ptr %227, align 4, !tbaa !20
  %229 = getelementptr inbounds float, ptr %212, i64 %226
  store float %228, ptr %229, align 4, !tbaa !20
  %230 = getelementptr inbounds i16, ptr %216, i64 %226
  %231 = load i16, ptr %230, align 2, !tbaa !27
  %232 = getelementptr inbounds i16, ptr %141, i64 %226
  store i16 %231, ptr %232, align 2, !tbaa !27
  %233 = trunc i64 %indvars.iv1106 to i32
  %234 = or disjoint i32 %233, 1
  %235 = mul i32 %218, %234
  %reass.add.us.us.us.1 = add i32 %235, %.4989.us.us
  %reass.mul.us.us.us.1 = mul i32 %reass.add.us.us.us.1, %217
  %236 = add i32 %reass.mul.us.us.us.1, %.3894987.us.us.us
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds float, ptr %214, i64 %237
  %239 = load float, ptr %238, align 4, !tbaa !20
  %240 = getelementptr inbounds float, ptr %212, i64 %237
  store float %239, ptr %240, align 4, !tbaa !20
  %241 = getelementptr inbounds i16, ptr %216, i64 %237
  %242 = load i16, ptr %241, align 2, !tbaa !27
  %243 = getelementptr inbounds i16, ptr %141, i64 %237
  store i16 %242, ptr %243, align 2, !tbaa !27
  %indvars.iv.next1107.1 = add nuw nsw i64 %indvars.iv1106, 2
  %niter1239.next.1 = add i64 %niter1239, 2
  %niter1239.ncmp.1 = icmp eq i64 %niter1239.next.1, %unroll_iter1238
  br i1 %niter1239.ncmp.1, label %._crit_edge986.us.us.us.unr-lcssa, label %.preheader953.us.us.us.new, !llvm.loop !29

._crit_edge986.us.us.us.unr-lcssa:                ; preds = %.preheader953.us.us.us.new, %.preheader953.us.us.us
  %indvars.iv1106.unr = phi i64 [ 0, %.preheader953.us.us.us ], [ %indvars.iv.next1107.1, %.preheader953.us.us.us.new ]
  br i1 %lcmp.mod1237.not, label %._crit_edge986.us.us.us, label %._crit_edge986.us.us.us.epilog-lcssa

._crit_edge986.us.us.us.epilog-lcssa:             ; preds = %._crit_edge986.us.us.us.unr-lcssa
  %244 = trunc nuw nsw i64 %indvars.iv1106.unr to i32
  %245 = mul i32 %218, %244
  %reass.add.us.us.us.epil = add i32 %245, %.4989.us.us
  %reass.mul.us.us.us.epil = mul i32 %reass.add.us.us.us.epil, %217
  %246 = add i32 %reass.mul.us.us.us.epil, %.3894987.us.us.us
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds float, ptr %214, i64 %247
  %249 = load float, ptr %248, align 4, !tbaa !20
  %250 = getelementptr inbounds float, ptr %212, i64 %247
  store float %249, ptr %250, align 4, !tbaa !20
  %251 = getelementptr inbounds i16, ptr %216, i64 %247
  %252 = load i16, ptr %251, align 2, !tbaa !27
  %253 = getelementptr inbounds i16, ptr %141, i64 %247
  store i16 %252, ptr %253, align 2, !tbaa !27
  br label %._crit_edge986.us.us.us

._crit_edge986.us.us.us:                          ; preds = %._crit_edge986.us.us.us.unr-lcssa, %._crit_edge986.us.us.us.epilog-lcssa
  %254 = add nuw nsw i32 %.3894987.us.us.us, 1
  %exitcond1111.not = icmp eq i32 %254, %217
  br i1 %exitcond1111.not, label %._crit_edge988.split.us.us.us, label %.preheader953.us.us.us, !llvm.loop !30

._crit_edge988.split.us.us.us:                    ; preds = %._crit_edge986.us.us.us
  %255 = add nuw nsw i32 %.4989.us.us, 1
  %exitcond1112.not = icmp eq i32 %255, %218
  br i1 %exitcond1112.not, label %.lr.ph996.preheader, label %.preheader954.us.us, !llvm.loop !31

.lr.ph996.preheader:                              ; preds = %._crit_edge988.split.us.us.us, %211
  %smax = call i32 @llvm.smax.i32(i32 %103, i32 1)
  %wide.trip.count1116 = zext nneg i32 %smax to i64
  %xtraiter1240 = and i64 %wide.trip.count1116, 1
  %unroll_iter1242 = and i64 %wide.trip.count1116, 2147483646
  br label %.lr.ph996

.lr.ph996:                                        ; preds = %.lr.ph996, %.lr.ph996.preheader
  %indvars.iv1113 = phi i64 [ 0, %.lr.ph996.preheader ], [ %indvars.iv.next1114.1, %.lr.ph996 ]
  %niter1243 = phi i64 [ 0, %.lr.ph996.preheader ], [ %niter1243.next.1, %.lr.ph996 ]
  %256 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %indvars.iv1113
  %257 = load ptr, ptr %256, align 16, !tbaa !5
  %258 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %12, i64 0, i64 %indvars.iv1113
  store ptr %257, ptr %258, align 16, !tbaa !32
  %259 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %indvars.iv1113
  %260 = load ptr, ptr %259, align 16, !tbaa !5
  %261 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %13, i64 0, i64 %indvars.iv1113
  store ptr %260, ptr %261, align 16, !tbaa !32
  %indvars.iv.next1114 = or disjoint i64 %indvars.iv1113, 1
  %262 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %indvars.iv.next1114
  %263 = load ptr, ptr %262, align 8, !tbaa !5
  %264 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %12, i64 0, i64 %indvars.iv.next1114
  store ptr %263, ptr %264, align 16, !tbaa !32
  %265 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %indvars.iv.next1114
  %266 = load ptr, ptr %265, align 8, !tbaa !5
  %267 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %13, i64 0, i64 %indvars.iv.next1114
  store ptr %266, ptr %267, align 16, !tbaa !32
  %indvars.iv.next1114.1 = add nuw nsw i64 %indvars.iv1113, 2
  %niter1243.next.1 = add i64 %niter1243, 2
  %niter1243.ncmp.1 = icmp eq i64 %niter1243.next.1, %unroll_iter1242
  br i1 %niter1243.ncmp.1, label %._crit_edge997.unr-lcssa, label %.lr.ph996, !llvm.loop !34

._crit_edge997.unr-lcssa:                         ; preds = %.lr.ph996
  %lcmp.mod1241.not = icmp eq i64 %xtraiter1240, 0
  br i1 %lcmp.mod1241.not, label %._crit_edge997, label %.lr.ph996.epil

.lr.ph996.epil:                                   ; preds = %._crit_edge997.unr-lcssa
  %268 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %indvars.iv.next1114.1
  %269 = load ptr, ptr %268, align 8, !tbaa !5
  %270 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %12, i64 0, i64 %indvars.iv.next1114.1
  store ptr %269, ptr %270, align 16, !tbaa !32
  %271 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %indvars.iv.next1114.1
  %272 = load ptr, ptr %271, align 8, !tbaa !5
  %273 = getelementptr inbounds [128 x %struct.libxsmm_matrix_arg], ptr %13, i64 0, i64 %indvars.iv.next1114.1
  store ptr %272, ptr %273, align 16, !tbaa !32
  br label %._crit_edge997

._crit_edge997:                                   ; preds = %._crit_edge997.unr-lcssa, %.lr.ph996.epil
  %274 = call i32 @libxsmm_meqn_create() #10
  %.sroa.0282.0.insert.ext = zext i32 %274 to i64
  %.sroa.11.12.insert.insert = or disjoint i64 %.sroa.0282.0.insert.ext, 4294967296
  %.sroa.16.20.insert.insert = or disjoint i64 %.sroa.0282.0.insert.ext, 8589934592
  %.sroa.29.28.insert.insert = or disjoint i64 %.sroa.0282.0.insert.ext, 12884901888
  %.sroa.0.4.insert.insert = or disjoint i64 %.sroa.0282.0.insert.ext, -4294967296
  %275 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.0.4.insert.insert, i32 noundef 2, i32 noundef 1, i32 noundef 0) #10
  %276 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.4.insert.insert, i32 noundef 11, i32 noundef 1, i32 noundef 0) #10
  %277 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.0.4.insert.insert, i32 noundef 1, i32 noundef 1, i32 noundef 0) #10
  %278 = load i64, ptr %9, align 16
  %279 = getelementptr inbounds i8, ptr %9, i64 8
  %280 = load i64, ptr %279, align 8
  %281 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.0282.0.insert.ext, i64 %278, i64 %280, i64 0, i64 undef) #10
  %282 = getelementptr inbounds i8, ptr %9, i64 16
  %283 = load i64, ptr %282, align 16
  %284 = getelementptr inbounds i8, ptr %9, i64 24
  %285 = load i64, ptr %284, align 8
  %286 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.11.12.insert.insert, i64 %283, i64 %285, i64 0, i64 undef) #10
  %287 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.4.insert.insert, i32 noundef 7, i32 noundef 1, i32 noundef 0) #10
  %288 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.0.4.insert.insert, i32 noundef 6, i32 noundef 1, i32 noundef 0) #10
  %289 = getelementptr inbounds i8, ptr %9, i64 32
  %290 = load i64, ptr %289, align 16
  %291 = getelementptr inbounds i8, ptr %9, i64 40
  %292 = load i64, ptr %291, align 8
  %293 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.16.20.insert.insert, i64 %290, i64 %292, i64 0, i64 undef) #10
  %294 = getelementptr inbounds i8, ptr %9, i64 48
  %295 = load i64, ptr %294, align 16
  %296 = getelementptr inbounds i8, ptr %9, i64 56
  %297 = load i64, ptr %296, align 8
  %298 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.29.28.insert.insert, i64 %295, i64 %297, i64 0, i64 undef) #10
  call void @libxsmm_meqn_tree_print(i32 noundef %274) #10
  %299 = getelementptr inbounds [128 x %struct.libxsmm_meqn_arg_shape], ptr %9, i64 0, i64 %104
  %300 = load i64, ptr %299, align 16
  %301 = getelementptr inbounds i8, ptr %299, i64 8
  %302 = load i64, ptr %301, align 8
  %303 = call ptr @libxsmm_dispatch_meqn(i32 noundef %274, i64 %300, i64 %302) #10
  %spec.select1190 = select i1 %50, ptr %12, ptr %13
  %304 = getelementptr inbounds i8, ptr %3, i64 8
  store ptr %spec.select1190, ptr %304, align 8
  br i1 %51, label %305, label %307

305:                                              ; preds = %._crit_edge997
  %306 = load ptr, ptr %213, align 8, !tbaa !5
  br label %307

307:                                              ; preds = %._crit_edge997, %305
  %.sink1165 = phi ptr [ %306, %305 ], [ %216, %._crit_edge997 ]
  %308 = getelementptr inbounds i8, ptr %3, i64 16
  store ptr %.sink1165, ptr %308, align 8
  call void %303(ptr noundef nonnull %3) #10
  %or.cond = icmp ult i32 %.fr1069, 2
  br i1 %or.cond, label %309, label %341

309:                                              ; preds = %307
  %310 = load ptr, ptr %119, align 8, !tbaa !5
  %311 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %312 = load i32, ptr %311, align 4, !tbaa !9
  %313 = load i32, ptr %105, align 4, !tbaa !9
  %314 = load i32, ptr %109, align 4, !tbaa !9
  %315 = load ptr, ptr %10, align 16, !tbaa !5
  %316 = load i32, ptr %5, align 16, !tbaa !9
  %317 = load i32, ptr %6, align 16, !tbaa !9
  %318 = load i32, ptr %7, align 16, !tbaa !9
  %319 = getelementptr inbounds i8, ptr %10, i64 8
  %320 = load ptr, ptr %319, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %5, i64 4
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = getelementptr inbounds i8, ptr %6, i64 4
  %324 = load i32, ptr %323, align 4, !tbaa !9
  %325 = getelementptr inbounds i8, ptr %7, i64 4
  %326 = load i32, ptr %325, align 4, !tbaa !9
  %327 = getelementptr inbounds i8, ptr %10, i64 16
  %328 = load ptr, ptr %327, align 16, !tbaa !5
  %329 = load i32, ptr %146, align 8, !tbaa !9
  %330 = getelementptr inbounds i8, ptr %6, i64 8
  %331 = load i32, ptr %330, align 8, !tbaa !9
  %332 = getelementptr inbounds i8, ptr %7, i64 8
  %333 = load i32, ptr %332, align 8, !tbaa !9
  %334 = getelementptr inbounds i8, ptr %10, i64 24
  %335 = load ptr, ptr %334, align 8, !tbaa !5
  %336 = load i32, ptr %148, align 4, !tbaa !9
  %337 = getelementptr inbounds i8, ptr %6, i64 12
  %338 = load i32, ptr %337, align 4, !tbaa !9
  %339 = getelementptr inbounds i8, ptr %7, i64 12
  %340 = load i32, ptr %339, align 4, !tbaa !9
  call void @eqn0_f32(ptr noundef %310, i32 noundef %312, i32 noundef %313, i32 noundef %314, ptr noundef %315, i32 noundef %316, i32 noundef %317, i32 noundef %318, ptr noundef %320, i32 noundef %322, i32 noundef %324, i32 noundef %326, ptr noundef %328, i32 noundef %329, i32 noundef %331, i32 noundef %333, ptr noundef %335, i32 noundef %336, i32 noundef %338, i32 noundef %340, ptr noundef %152)
  br i1 %45, label %.thread936.sink.split, label %345

341:                                              ; preds = %307
  switch i32 %.fr1069, label %.thread936 [
    i32 2, label %.thread936.sink.split
    i32 3, label %342
  ]

342:                                              ; preds = %341
  br label %.thread936.sink.split

.thread936.sink.split:                            ; preds = %341, %309, %342
  %.str.5.sink = phi ptr [ @.str.5, %342 ], [ @.str.2, %309 ], [ @.str.4, %341 ]
  %343 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.5.sink)
  br label %.thread936

.thread936:                                       ; preds = %.thread936.sink.split, %341
  %344 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  br label %354

345:                                              ; preds = %309
  %346 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %347 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %348 = load ptr, ptr %213, align 8, !tbaa !5
  %349 = load i32, ptr %109, align 4, !tbaa !9
  %350 = load i32, ptr %105, align 4, !tbaa !9
  %351 = mul i32 %349, %114
  %352 = mul i32 %351, %350
  %353 = sext i32 %352 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %216, ptr noundef %348, i64 noundef %353) #10
  br label %354

354:                                              ; preds = %.thread936, %345
  %355 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %356 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %357 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %358 = load i32, ptr %109, align 4, !tbaa !9
  %359 = load i32, ptr %105, align 4, !tbaa !9
  %360 = mul i32 %358, %114
  %361 = mul i32 %360, %359
  %362 = load ptr, ptr %119, align 8, !tbaa !5
  %363 = load ptr, ptr %213, align 8, !tbaa !5
  %364 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %361, i32 noundef 1, ptr noundef %362, ptr noundef %363, ptr noundef null, ptr noundef null) #10
  %365 = getelementptr inbounds i8, ptr %4, i64 80
  %366 = load double, ptr %365, align 8, !tbaa !35
  %367 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %366)
  %368 = getelementptr inbounds i8, ptr %4, i64 120
  %369 = load double, ptr %368, align 8, !tbaa !38
  %370 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %369)
  %371 = getelementptr inbounds i8, ptr %4, i64 56
  %372 = load double, ptr %371, align 8, !tbaa !39
  %373 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %372)
  %374 = getelementptr inbounds i8, ptr %4, i64 64
  %375 = load double, ptr %374, align 8, !tbaa !40
  %376 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %375)
  %377 = getelementptr inbounds i8, ptr %4, i64 40
  %378 = load double, ptr %377, align 8, !tbaa !41
  %379 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %378)
  %380 = getelementptr inbounds i8, ptr %4, i64 48
  %381 = load double, ptr %380, align 8, !tbaa !42
  %382 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %381)
  %383 = getelementptr inbounds i8, ptr %4, i64 32
  %384 = load double, ptr %383, align 8, !tbaa !43
  %385 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %384)
  br i1 %or.cond, label %386, label %.thread

386:                                              ; preds = %354
  %387 = load ptr, ptr %119, align 8, !tbaa !5
  %388 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %389 = load i32, ptr %388, align 4, !tbaa !9
  %390 = load i32, ptr %105, align 4, !tbaa !9
  %391 = load i32, ptr %109, align 4, !tbaa !9
  %392 = load ptr, ptr %10, align 16, !tbaa !5
  %393 = load i32, ptr %5, align 16, !tbaa !9
  %394 = load i32, ptr %6, align 16, !tbaa !9
  %395 = load i32, ptr %7, align 16, !tbaa !9
  %396 = getelementptr inbounds i8, ptr %10, i64 8
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  %398 = getelementptr inbounds i8, ptr %5, i64 4
  %399 = load i32, ptr %398, align 4, !tbaa !9
  %400 = getelementptr inbounds i8, ptr %6, i64 4
  %401 = load i32, ptr %400, align 4, !tbaa !9
  %402 = getelementptr inbounds i8, ptr %7, i64 4
  %403 = load i32, ptr %402, align 4, !tbaa !9
  %404 = getelementptr inbounds i8, ptr %10, i64 16
  %405 = load ptr, ptr %404, align 16, !tbaa !5
  %406 = load i32, ptr %146, align 8, !tbaa !9
  %407 = getelementptr inbounds i8, ptr %6, i64 8
  %408 = load i32, ptr %407, align 8, !tbaa !9
  %409 = getelementptr inbounds i8, ptr %7, i64 8
  %410 = load i32, ptr %409, align 8, !tbaa !9
  %411 = getelementptr inbounds i8, ptr %10, i64 24
  %412 = load ptr, ptr %411, align 8, !tbaa !5
  %413 = load i32, ptr %148, align 4, !tbaa !9
  %414 = getelementptr inbounds i8, ptr %6, i64 12
  %415 = load i32, ptr %414, align 4, !tbaa !9
  %416 = getelementptr inbounds i8, ptr %7, i64 12
  %417 = load i32, ptr %416, align 4, !tbaa !9
  call void @eqn0_f32(ptr noundef %387, i32 noundef %389, i32 noundef %390, i32 noundef %391, ptr noundef %392, i32 noundef %393, i32 noundef %394, i32 noundef %395, ptr noundef %397, i32 noundef %399, i32 noundef %401, i32 noundef %403, ptr noundef %405, i32 noundef %406, i32 noundef %408, i32 noundef %410, ptr noundef %412, i32 noundef %413, i32 noundef %415, i32 noundef %417, ptr noundef %152)
  %418 = call i64 @libxsmm_timer_tick() #10
  %419 = icmp sgt i32 %44, 0
  br i1 %419, label %.lr.ph1000.split.us.preheader, label %._crit_edge1001

.thread:                                          ; preds = %354
  %420 = call i64 @libxsmm_timer_tick() #10
  %421 = icmp sgt i32 %44, 0
  br label %._crit_edge1001

.lr.ph1000.split.us.preheader:                    ; preds = %386
  %422 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %423 = getelementptr inbounds i8, ptr %10, i64 8
  %424 = getelementptr inbounds i8, ptr %5, i64 4
  %425 = getelementptr inbounds i8, ptr %6, i64 4
  %426 = getelementptr inbounds i8, ptr %7, i64 4
  %427 = getelementptr inbounds i8, ptr %10, i64 16
  %428 = getelementptr inbounds i8, ptr %6, i64 8
  %429 = getelementptr inbounds i8, ptr %7, i64 8
  %430 = getelementptr inbounds i8, ptr %10, i64 24
  %431 = getelementptr inbounds i8, ptr %6, i64 12
  %432 = getelementptr inbounds i8, ptr %7, i64 12
  br label %.lr.ph1000.split.us

.lr.ph1000.split.us:                              ; preds = %.lr.ph1000.split.us.preheader, %.lr.ph1000.split.us
  %.0903998.us = phi i32 [ %453, %.lr.ph1000.split.us ], [ 0, %.lr.ph1000.split.us.preheader ]
  %433 = load ptr, ptr %119, align 8, !tbaa !5
  %434 = load i32, ptr %422, align 4, !tbaa !9
  %435 = load i32, ptr %105, align 4, !tbaa !9
  %436 = load i32, ptr %109, align 4, !tbaa !9
  %437 = load ptr, ptr %10, align 16, !tbaa !5
  %438 = load i32, ptr %5, align 16, !tbaa !9
  %439 = load i32, ptr %6, align 16, !tbaa !9
  %440 = load i32, ptr %7, align 16, !tbaa !9
  %441 = load ptr, ptr %423, align 8, !tbaa !5
  %442 = load i32, ptr %424, align 4, !tbaa !9
  %443 = load i32, ptr %425, align 4, !tbaa !9
  %444 = load i32, ptr %426, align 4, !tbaa !9
  %445 = load ptr, ptr %427, align 16, !tbaa !5
  %446 = load i32, ptr %146, align 8, !tbaa !9
  %447 = load i32, ptr %428, align 8, !tbaa !9
  %448 = load i32, ptr %429, align 8, !tbaa !9
  %449 = load ptr, ptr %430, align 8, !tbaa !5
  %450 = load i32, ptr %148, align 4, !tbaa !9
  %451 = load i32, ptr %431, align 4, !tbaa !9
  %452 = load i32, ptr %432, align 4, !tbaa !9
  call void @eqn0_f32(ptr noundef %433, i32 noundef %434, i32 noundef %435, i32 noundef %436, ptr noundef %437, i32 noundef %438, i32 noundef %439, i32 noundef %440, ptr noundef %441, i32 noundef %442, i32 noundef %443, i32 noundef %444, ptr noundef %445, i32 noundef %446, i32 noundef %447, i32 noundef %448, ptr noundef %449, i32 noundef %450, i32 noundef %451, i32 noundef %452, ptr noundef %152)
  %453 = add nuw nsw i32 %.0903998.us, 1
  %exitcond1118.not = icmp eq i32 %453, %44
  br i1 %exitcond1118.not, label %._crit_edge1001, label %.lr.ph1000.split.us, !llvm.loop !44

._crit_edge1001:                                  ; preds = %.lr.ph1000.split.us, %.thread, %386
  %454 = phi i1 [ false, %386 ], [ %421, %.thread ], [ true, %.lr.ph1000.split.us ]
  %455 = phi i64 [ %418, %386 ], [ %420, %.thread ], [ %418, %.lr.ph1000.split.us ]
  %456 = call i64 @libxsmm_timer_tick() #10
  %457 = call double @libxsmm_timer_duration(i64 noundef %455, i64 noundef %456) #10
  %458 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %457)
  call void %303(ptr noundef nonnull %3) #10
  %459 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1004, label %._crit_edge1005

.lr.ph1004:                                       ; preds = %._crit_edge1001, %.lr.ph1004
  %.19041002 = phi i32 [ %460, %.lr.ph1004 ], [ 0, %._crit_edge1001 ]
  call void %303(ptr noundef nonnull %3) #10
  %460 = add nuw nsw i32 %.19041002, 1
  %exitcond1119.not = icmp eq i32 %460, %44
  br i1 %exitcond1119.not, label %._crit_edge1005, label %.lr.ph1004, !llvm.loop !45

._crit_edge1005:                                  ; preds = %.lr.ph1004, %._crit_edge1001
  %461 = call i64 @libxsmm_timer_tick() #10
  %462 = call double @libxsmm_timer_duration(i64 noundef %459, i64 noundef %461) #10
  %463 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %462)
  %464 = fcmp ogt double %462, 0.000000e+00
  br i1 %464, label %465, label %468

465:                                              ; preds = %._crit_edge1005
  %466 = fdiv double %457, %462
  %467 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %44, double noundef %466)
  br label %468

468:                                              ; preds = %465, %._crit_edge1005
  %469 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19)
  %470 = getelementptr inbounds i8, ptr %6, i64 4
  %471 = load i32, ptr %470, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = shl nsw i64 %472, 2
  %474 = getelementptr inbounds i8, ptr %7, i64 4
  %475 = load i32, ptr %474, align 4, !tbaa !9
  %476 = sext i32 %475 to i64
  %477 = mul i64 %473, %476
  %478 = getelementptr inbounds i8, ptr %8, i64 4
  %479 = load i32, ptr %478, align 4, !tbaa !9
  %480 = sext i32 %479 to i64
  %481 = mul i64 %477, %480
  %482 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %481, i64 noundef 64) #10
  %483 = ptrtoint ptr %482 to i64
  %484 = getelementptr inbounds i8, ptr %10, i64 8
  %485 = load ptr, ptr %484, align 8, !tbaa !5
  %486 = ptrtoint ptr %485 to i64
  %487 = load i32, ptr %470, align 4, !tbaa !9
  %488 = icmp sgt i32 %487, 0
  br i1 %488, label %.preheader951.lr.ph, label %._crit_edge1012

.preheader951.lr.ph:                              ; preds = %468
  %489 = load i32, ptr %474, align 4, !tbaa !9
  %490 = icmp sgt i32 %489, 0
  %491 = icmp sgt i32 %479, 0
  br i1 %490, label %.preheader951.us.preheader, label %._crit_edge1012

.preheader951.us.preheader:                       ; preds = %.preheader951.lr.ph
  %492 = zext nneg i32 %489 to i64
  %wide.trip.count1129 = zext nneg i32 %487 to i64
  %493 = sub i64 %483, %486
  %min.iters.check = icmp ult i32 %489, 8
  %diff.check = icmp ult i64 %493, 32
  %or.cond1231 = select i1 %min.iters.check, i1 true, i1 %diff.check
  %n.vec = and i64 %492, 2147483640
  %cmp.n = icmp eq i64 %n.vec, %492
  %xtraiter1244 = and i64 %492, 3
  %lcmp.mod1245.not = icmp eq i64 %xtraiter1244, 0
  br label %.preheader951.us

.preheader951.us:                                 ; preds = %.preheader951.us.preheader, %._crit_edge1010.us
  %indvars.iv1126 = phi i64 [ 0, %.preheader951.us.preheader ], [ %indvars.iv.next1127, %._crit_edge1010.us ]
  %494 = mul nuw nsw i64 %indvars.iv1126, %492
  br i1 %491, label %.preheader950.us.us.preheader, label %._crit_edge1010.us

.preheader950.us.us.preheader:                    ; preds = %.preheader951.us
  br i1 %or.cond1231, label %.preheader950.us.us.preheader1232, label %vector.body

.preheader950.us.us.preheader1232:                ; preds = %middle.block, %.preheader950.us.us.preheader
  %indvars.iv1121.ph = phi i64 [ 0, %.preheader950.us.us.preheader ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod1245.not, label %.preheader950.us.us.prol.loopexit, label %.preheader950.us.us.prol

.preheader950.us.us.prol:                         ; preds = %.preheader950.us.us.preheader1232, %.preheader950.us.us.prol
  %indvars.iv1121.prol = phi i64 [ %indvars.iv.next1122.prol, %.preheader950.us.us.prol ], [ %indvars.iv1121.ph, %.preheader950.us.us.preheader1232 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.preheader950.us.us.prol ], [ 0, %.preheader950.us.us.preheader1232 ]
  %495 = add nuw nsw i64 %494, %indvars.iv1121.prol
  %496 = getelementptr inbounds float, ptr %485, i64 %495
  %497 = getelementptr inbounds float, ptr %482, i64 %495
  %.pre.prol = load float, ptr %496, align 4, !tbaa !20
  store float %.pre.prol, ptr %497, align 4, !tbaa !20
  %indvars.iv.next1122.prol = add nuw nsw i64 %indvars.iv1121.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter1244
  br i1 %prol.iter.cmp.not, label %.preheader950.us.us.prol.loopexit, label %.preheader950.us.us.prol, !llvm.loop !46

.preheader950.us.us.prol.loopexit:                ; preds = %.preheader950.us.us.prol, %.preheader950.us.us.preheader1232
  %indvars.iv1121.unr = phi i64 [ %indvars.iv1121.ph, %.preheader950.us.us.preheader1232 ], [ %indvars.iv.next1122.prol, %.preheader950.us.us.prol ]
  %498 = sub nsw i64 %indvars.iv1121.ph, %492
  %499 = icmp ugt i64 %498, -4
  br i1 %499, label %._crit_edge1010.us, label %.preheader950.us.us

vector.body:                                      ; preds = %.preheader950.us.us.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader950.us.us.preheader ]
  %500 = add nuw nsw i64 %494, %index
  %501 = getelementptr inbounds float, ptr %485, i64 %500
  %502 = getelementptr inbounds float, ptr %482, i64 %500
  %503 = getelementptr inbounds i8, ptr %501, i64 16
  %wide.load = load <4 x float>, ptr %501, align 4, !tbaa !20
  %wide.load1198 = load <4 x float>, ptr %503, align 4, !tbaa !20
  %504 = getelementptr inbounds i8, ptr %502, i64 16
  store <4 x float> %wide.load, ptr %502, align 4, !tbaa !20
  store <4 x float> %wide.load1198, ptr %504, align 4, !tbaa !20
  %index.next = add nuw i64 %index, 8
  %505 = icmp eq i64 %index.next, %n.vec
  br i1 %505, label %middle.block, label %vector.body, !llvm.loop !48

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge1010.us, label %.preheader950.us.us.preheader1232

._crit_edge1010.us:                               ; preds = %.preheader950.us.us.prol.loopexit, %.preheader950.us.us, %middle.block, %.preheader951.us
  %indvars.iv.next1127 = add nuw nsw i64 %indvars.iv1126, 1
  %exitcond1130.not = icmp eq i64 %indvars.iv.next1127, %wide.trip.count1129
  br i1 %exitcond1130.not, label %._crit_edge1012, label %.preheader951.us, !llvm.loop !51

.preheader950.us.us:                              ; preds = %.preheader950.us.us.prol.loopexit, %.preheader950.us.us
  %indvars.iv1121 = phi i64 [ %indvars.iv.next1122.3, %.preheader950.us.us ], [ %indvars.iv1121.unr, %.preheader950.us.us.prol.loopexit ]
  %506 = add nuw nsw i64 %494, %indvars.iv1121
  %507 = getelementptr inbounds float, ptr %485, i64 %506
  %508 = getelementptr inbounds float, ptr %482, i64 %506
  %.pre = load float, ptr %507, align 4, !tbaa !20
  store float %.pre, ptr %508, align 4, !tbaa !20
  %indvars.iv.next1122 = add nuw nsw i64 %indvars.iv1121, 1
  %509 = add nuw nsw i64 %494, %indvars.iv.next1122
  %510 = getelementptr inbounds float, ptr %485, i64 %509
  %511 = getelementptr inbounds float, ptr %482, i64 %509
  %.pre.1 = load float, ptr %510, align 4, !tbaa !20
  store float %.pre.1, ptr %511, align 4, !tbaa !20
  %indvars.iv.next1122.1 = add nuw nsw i64 %indvars.iv1121, 2
  %512 = add nuw nsw i64 %494, %indvars.iv.next1122.1
  %513 = getelementptr inbounds float, ptr %485, i64 %512
  %514 = getelementptr inbounds float, ptr %482, i64 %512
  %.pre.2 = load float, ptr %513, align 4, !tbaa !20
  store float %.pre.2, ptr %514, align 4, !tbaa !20
  %indvars.iv.next1122.2 = add nuw nsw i64 %indvars.iv1121, 3
  %515 = add nuw nsw i64 %494, %indvars.iv.next1122.2
  %516 = getelementptr inbounds float, ptr %485, i64 %515
  %517 = getelementptr inbounds float, ptr %482, i64 %515
  %.pre.3 = load float, ptr %516, align 4, !tbaa !20
  store float %.pre.3, ptr %517, align 4, !tbaa !20
  %indvars.iv.next1122.3 = add nuw nsw i64 %indvars.iv1121, 4
  %exitcond1125.not.3 = icmp eq i64 %indvars.iv.next1122.3, %492
  br i1 %exitcond1125.not.3, label %._crit_edge1010.us, label %.preheader950.us.us, !llvm.loop !52

._crit_edge1012:                                  ; preds = %._crit_edge1010.us, %.preheader951.lr.ph, %468
  %518 = getelementptr inbounds i8, ptr %12, i64 48
  store ptr %482, ptr %518, align 16, !tbaa !32
  %519 = getelementptr inbounds i8, ptr %13, i64 48
  store ptr %482, ptr %519, align 16, !tbaa !32
  %520 = getelementptr inbounds i8, ptr %9, i64 28
  store i32 1, ptr %520, align 4, !tbaa !53
  %521 = getelementptr inbounds i8, ptr %8, i64 8
  %522 = load i32, ptr %521, align 8, !tbaa !9
  %.sroa.13488.8.insert.ext = zext i32 %522 to i64
  %523 = getelementptr inbounds i8, ptr %7, i64 8
  %524 = load i32, ptr %523, align 8, !tbaa !9
  %525 = getelementptr inbounds i8, ptr %6, i64 8
  %526 = load i32, ptr %525, align 8, !tbaa !9
  %527 = getelementptr inbounds i8, ptr %8, i64 12
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = getelementptr inbounds i8, ptr %7, i64 12
  %530 = load i32, ptr %529, align 4, !tbaa !9
  %531 = getelementptr inbounds i8, ptr %6, i64 12
  %532 = load i32, ptr %531, align 4, !tbaa !9
  %. = select i1 %50, i32 2, i32 1
  %533 = shl i32 %524, %.
  %534 = mul i32 %533, %526
  %535 = shl i32 %530, %.
  %536 = mul i32 %535, %532
  %.sroa.13488.12.insert.shift.pn940.pn.in = zext i32 %534 to i64
  %.sroa.13488.12.insert.shift.pn940.pn = shl nuw i64 %.sroa.13488.12.insert.shift.pn940.pn.in, 32
  %.sroa.13488.0943 = or disjoint i64 %.sroa.13488.12.insert.shift.pn940.pn, %.sroa.13488.8.insert.ext
  %.sroa.13443.8.insert.ext945 = zext i32 %528 to i64
  %.sroa.13443.12.insert.shift.pn.in = zext i32 %536 to i64
  %.sroa.13443.12.insert.shift.pn = shl nuw i64 %.sroa.13443.12.insert.shift.pn.in, 32
  %.sroa.13443.0 = or disjoint i64 %.sroa.13443.12.insert.shift.pn, %.sroa.13443.8.insert.ext945
  %537 = sext i32 %522 to i64
  store i64 %537, ptr %15, align 8, !tbaa !54
  %538 = getelementptr inbounds i8, ptr %14, i64 240
  store ptr %15, ptr %538, align 16, !tbaa !56
  store ptr %14, ptr %3, align 8, !tbaa !58
  %539 = call i32 @libxsmm_meqn_create() #10
  %.sroa.0282.0.insert.ext287 = zext i32 %539 to i64
  %.sroa.11.8.insert.insert302 = or disjoint i64 %.sroa.0282.0.insert.ext287, 4294967296
  %.sroa.16.16.insert.insert311 = or disjoint i64 %.sroa.0282.0.insert.ext287, 8589934592
  %.sroa.29.24.insert.insert336 = or disjoint i64 %.sroa.0282.0.insert.ext287, 12884901888
  %.sroa.0.0.insert.insert245 = or disjoint i64 %.sroa.0282.0.insert.ext287, -4294967296
  %.sroa.31.12.insert.insert = or disjoint i64 %.sroa.0282.0.insert.ext287, 30064771072
  %540 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.0.0.insert.insert245, i32 noundef 2, i32 noundef 1, i32 noundef 0) #10
  %541 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert245, i32 noundef 11, i32 noundef 1, i32 noundef 0) #10
  %542 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.0282.0.insert.ext287, i64 %278, i64 %280, i64 0, i64 undef) #10
  %543 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert245, i32 noundef 7, i32 noundef 1, i32 noundef 0) #10
  %544 = call i32 @libxsmm_meqn_push_back_ternary_op(i64 %.sroa.31.12.insert.insert, i32 noundef 5, i32 noundef 1, i32 noundef 512) #10
  %545 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.16.16.insert.insert311, i64 %290, i64 %292, i64 12884901889, i64 %.sroa.13488.0943) #10
  %546 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.29.24.insert.insert336, i64 %295, i64 %297, i64 12884901889, i64 %.sroa.13443.0) #10
  %547 = load i64, ptr %284, align 8
  %548 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.11.8.insert.insert302, i64 %283, i64 %547, i64 0, i64 undef) #10
  call void @libxsmm_meqn_tree_print(i32 noundef %539) #10
  %549 = load i64, ptr %301, align 8
  %550 = call ptr @libxsmm_dispatch_meqn(i32 noundef %539, i64 %300, i64 %549) #10
  call void %550(ptr noundef nonnull %3) #10
  store i32 %.0917, ptr %520, align 4, !tbaa !53
  br i1 %or.cond, label %551, label %.thread947

551:                                              ; preds = %._crit_edge1012
  %552 = load ptr, ptr %119, align 8, !tbaa !5
  %553 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %554 = load i32, ptr %553, align 4, !tbaa !9
  %555 = load i32, ptr %105, align 4, !tbaa !9
  %556 = load i32, ptr %109, align 4, !tbaa !9
  %557 = load ptr, ptr %10, align 16, !tbaa !5
  %558 = load i32, ptr %5, align 16, !tbaa !9
  %559 = load i32, ptr %6, align 16, !tbaa !9
  %560 = load i32, ptr %7, align 16, !tbaa !9
  %561 = load ptr, ptr %484, align 8, !tbaa !5
  %562 = getelementptr inbounds i8, ptr %5, i64 4
  %563 = load i32, ptr %562, align 4, !tbaa !9
  %564 = load i32, ptr %470, align 4, !tbaa !9
  %565 = load i32, ptr %474, align 4, !tbaa !9
  %566 = getelementptr inbounds i8, ptr %10, i64 16
  %567 = load ptr, ptr %566, align 16, !tbaa !5
  %568 = load i32, ptr %146, align 8, !tbaa !9
  %569 = getelementptr inbounds i8, ptr %6, i64 8
  %570 = load i32, ptr %569, align 8, !tbaa !9
  %571 = getelementptr inbounds i8, ptr %7, i64 8
  %572 = load i32, ptr %571, align 8, !tbaa !9
  %573 = mul nsw i32 %572, %570
  %574 = getelementptr inbounds i8, ptr %10, i64 24
  %575 = load ptr, ptr %574, align 8, !tbaa !5
  %576 = load i32, ptr %148, align 4, !tbaa !9
  %577 = getelementptr inbounds i8, ptr %6, i64 12
  %578 = load i32, ptr %577, align 4, !tbaa !9
  %579 = getelementptr inbounds i8, ptr %7, i64 12
  %580 = load i32, ptr %579, align 4, !tbaa !9
  %581 = mul nsw i32 %580, %578
  call void @eqn1_f32(ptr noundef %552, i32 noundef %554, i32 noundef %555, i32 noundef %556, ptr noundef %557, i32 noundef %558, i32 noundef %559, i32 noundef %560, ptr noundef %561, i32 noundef %563, i32 noundef %564, i32 noundef %565, i32 noundef %522, ptr noundef %567, i32 noundef %568, i32 noundef %570, i32 noundef %572, i32 noundef %573, ptr noundef %575, i32 noundef %576, i32 noundef %578, i32 noundef %580, i32 noundef %581)
  br i1 %153, label %582, label %.thread947

582:                                              ; preds = %551
  %583 = load ptr, ptr %213, align 8, !tbaa !5
  %584 = load i32, ptr %109, align 4, !tbaa !9
  %585 = load i32, ptr %105, align 4, !tbaa !9
  %586 = mul nsw i32 %585, %584
  %587 = mul nsw i32 %586, %114
  %588 = sext i32 %587 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %216, ptr noundef %583, i64 noundef %588) #10
  br label %.thread947

.thread947:                                       ; preds = %._crit_edge1012, %582, %551
  %589 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %590 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %591 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %592 = load i32, ptr %109, align 4, !tbaa !9
  %593 = load i32, ptr %105, align 4, !tbaa !9
  %594 = mul nsw i32 %593, %592
  %595 = mul nsw i32 %594, %114
  %596 = load ptr, ptr %119, align 8, !tbaa !5
  %597 = load ptr, ptr %213, align 8, !tbaa !5
  %598 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %595, i32 noundef 1, ptr noundef %596, ptr noundef %597, ptr noundef null, ptr noundef null) #10
  %599 = load double, ptr %365, align 8, !tbaa !35
  %600 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %599)
  %601 = load double, ptr %368, align 8, !tbaa !38
  %602 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %601)
  %603 = load double, ptr %371, align 8, !tbaa !39
  %604 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %603)
  %605 = load double, ptr %374, align 8, !tbaa !40
  %606 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %605)
  %607 = load double, ptr %377, align 8, !tbaa !41
  %608 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %607)
  %609 = load double, ptr %380, align 8, !tbaa !42
  %610 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %609)
  %611 = load double, ptr %383, align 8, !tbaa !43
  %612 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %611)
  br i1 %or.cond, label %613, label %644

613:                                              ; preds = %.thread947
  %614 = load ptr, ptr %119, align 8, !tbaa !5
  %615 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %616 = load i32, ptr %615, align 4, !tbaa !9
  %617 = load i32, ptr %105, align 4, !tbaa !9
  %618 = load i32, ptr %109, align 4, !tbaa !9
  %619 = load ptr, ptr %10, align 16, !tbaa !5
  %620 = load i32, ptr %5, align 16, !tbaa !9
  %621 = load i32, ptr %6, align 16, !tbaa !9
  %622 = load i32, ptr %7, align 16, !tbaa !9
  %623 = load ptr, ptr %484, align 8, !tbaa !5
  %624 = getelementptr inbounds i8, ptr %5, i64 4
  %625 = load i32, ptr %624, align 4, !tbaa !9
  %626 = load i32, ptr %470, align 4, !tbaa !9
  %627 = load i32, ptr %474, align 4, !tbaa !9
  %628 = getelementptr inbounds i8, ptr %10, i64 16
  %629 = load ptr, ptr %628, align 16, !tbaa !5
  %630 = load i32, ptr %146, align 8, !tbaa !9
  %631 = getelementptr inbounds i8, ptr %6, i64 8
  %632 = load i32, ptr %631, align 8, !tbaa !9
  %633 = getelementptr inbounds i8, ptr %7, i64 8
  %634 = load i32, ptr %633, align 8, !tbaa !9
  %635 = mul nsw i32 %634, %632
  %636 = getelementptr inbounds i8, ptr %10, i64 24
  %637 = load ptr, ptr %636, align 8, !tbaa !5
  %638 = load i32, ptr %148, align 4, !tbaa !9
  %639 = getelementptr inbounds i8, ptr %6, i64 12
  %640 = load i32, ptr %639, align 4, !tbaa !9
  %641 = getelementptr inbounds i8, ptr %7, i64 12
  %642 = load i32, ptr %641, align 4, !tbaa !9
  %643 = mul nsw i32 %642, %640
  call void @eqn1_f32(ptr noundef %614, i32 noundef %616, i32 noundef %617, i32 noundef %618, ptr noundef %619, i32 noundef %620, i32 noundef %621, i32 noundef %622, ptr noundef %623, i32 noundef %625, i32 noundef %626, i32 noundef %627, i32 noundef %522, ptr noundef %629, i32 noundef %630, i32 noundef %632, i32 noundef %634, i32 noundef %635, ptr noundef %637, i32 noundef %638, i32 noundef %640, i32 noundef %642, i32 noundef %643)
  br label %644

644:                                              ; preds = %.thread947, %613
  %645 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1019, label %._crit_edge1020

.lr.ph1019:                                       ; preds = %644
  %646 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %647 = getelementptr inbounds i8, ptr %5, i64 4
  %648 = getelementptr inbounds i8, ptr %10, i64 16
  %649 = getelementptr inbounds i8, ptr %6, i64 8
  %650 = getelementptr inbounds i8, ptr %7, i64 8
  %651 = getelementptr inbounds i8, ptr %10, i64 24
  %652 = getelementptr inbounds i8, ptr %6, i64 12
  %653 = getelementptr inbounds i8, ptr %7, i64 12
  br label %654

654:                                              ; preds = %.lr.ph1019, %678
  %.29051017 = phi i32 [ 0, %.lr.ph1019 ], [ %679, %678 ]
  br i1 %or.cond, label %655, label %678

655:                                              ; preds = %654
  %656 = load ptr, ptr %119, align 8, !tbaa !5
  %657 = load i32, ptr %646, align 4, !tbaa !9
  %658 = load i32, ptr %105, align 4, !tbaa !9
  %659 = load i32, ptr %109, align 4, !tbaa !9
  %660 = load ptr, ptr %10, align 16, !tbaa !5
  %661 = load i32, ptr %5, align 16, !tbaa !9
  %662 = load i32, ptr %6, align 16, !tbaa !9
  %663 = load i32, ptr %7, align 16, !tbaa !9
  %664 = load ptr, ptr %484, align 8, !tbaa !5
  %665 = load i32, ptr %647, align 4, !tbaa !9
  %666 = load i32, ptr %470, align 4, !tbaa !9
  %667 = load i32, ptr %474, align 4, !tbaa !9
  %668 = load ptr, ptr %648, align 16, !tbaa !5
  %669 = load i32, ptr %146, align 8, !tbaa !9
  %670 = load i32, ptr %649, align 8, !tbaa !9
  %671 = load i32, ptr %650, align 8, !tbaa !9
  %672 = mul nsw i32 %671, %670
  %673 = load ptr, ptr %651, align 8, !tbaa !5
  %674 = load i32, ptr %148, align 4, !tbaa !9
  %675 = load i32, ptr %652, align 4, !tbaa !9
  %676 = load i32, ptr %653, align 4, !tbaa !9
  %677 = mul nsw i32 %676, %675
  call void @eqn1_f32(ptr noundef %656, i32 noundef %657, i32 noundef %658, i32 noundef %659, ptr noundef %660, i32 noundef %661, i32 noundef %662, i32 noundef %663, ptr noundef %664, i32 noundef %665, i32 noundef %666, i32 noundef %667, i32 noundef %522, ptr noundef %668, i32 noundef %669, i32 noundef %670, i32 noundef %671, i32 noundef %672, ptr noundef %673, i32 noundef %674, i32 noundef %675, i32 noundef %676, i32 noundef %677)
  br label %678

678:                                              ; preds = %654, %655
  %679 = add nuw nsw i32 %.29051017, 1
  %exitcond1131.not = icmp eq i32 %679, %44
  br i1 %exitcond1131.not, label %._crit_edge1020, label %654, !llvm.loop !60

._crit_edge1020:                                  ; preds = %678, %644
  %680 = call i64 @libxsmm_timer_tick() #10
  %681 = call double @libxsmm_timer_duration(i64 noundef %645, i64 noundef %680) #10
  %682 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %681)
  call void %550(ptr noundef nonnull %3) #10
  %683 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1023, label %._crit_edge1024

.lr.ph1023:                                       ; preds = %._crit_edge1020, %.lr.ph1023
  %.39061021 = phi i32 [ %684, %.lr.ph1023 ], [ 0, %._crit_edge1020 ]
  call void %550(ptr noundef nonnull %3) #10
  %684 = add nuw nsw i32 %.39061021, 1
  %exitcond1132.not = icmp eq i32 %684, %44
  br i1 %exitcond1132.not, label %._crit_edge1024, label %.lr.ph1023, !llvm.loop !61

._crit_edge1024:                                  ; preds = %.lr.ph1023, %._crit_edge1020
  %685 = call i64 @libxsmm_timer_tick() #10
  %686 = call double @libxsmm_timer_duration(i64 noundef %683, i64 noundef %685) #10
  %687 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %686)
  %688 = fcmp ogt double %686, 0.000000e+00
  br i1 %688, label %689, label %692

689:                                              ; preds = %._crit_edge1024
  %690 = fdiv double %681, %686
  %691 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %44, double noundef %690)
  br label %692

692:                                              ; preds = %689, %._crit_edge1024
  br i1 %45, label %693, label %828

693:                                              ; preds = %692
  %694 = load i32, ptr %146, align 8, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = shl nsw i64 %695, 2
  %697 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %696, i64 noundef 64) #10
  %698 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20)
  %699 = getelementptr inbounds i8, ptr %10, i64 16
  %700 = load ptr, ptr %699, align 16, !tbaa !5
  %701 = load i32, ptr %146, align 8, !tbaa !9
  %702 = sext i32 %701 to i64
  %703 = shl nsw i64 %702, 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %697, ptr align 4 %700, i64 %703, i1 false)
  %.sroa.0516.0.insert.ext = zext i32 %701 to i64
  %.sroa.0516.4.insert.insert = or disjoint i64 %.sroa.0516.0.insert.ext, 4294967296
  %.sroa.5.12.insert.ext = zext nneg i32 %.0917 to i64
  %.sroa.5.12.insert.shift = shl nuw nsw i64 %.sroa.5.12.insert.ext, 32
  %.sroa.5.12.insert.insert = or disjoint i64 %.sroa.5.12.insert.shift, %.sroa.0516.0.insert.ext
  %704 = call i32 @libxsmm_meqn_create() #10
  %.sroa.16.16.insert.ext313 = zext i32 %704 to i64
  %.sroa.16.16.insert.insert315 = or disjoint i64 %.sroa.16.16.insert.ext313, 8589934592
  %.sroa.29.24.insert.insert340 = or disjoint i64 %.sroa.16.16.insert.ext313, 12884901888
  %.sroa.0.0.insert.insert249 = or disjoint i64 %.sroa.16.16.insert.ext313, -4294967296
  %.sroa.31.8.insert.insert269 = or disjoint i64 %.sroa.16.16.insert.ext313, 30064771072
  %.sroa.42354.340.insert.insert = or disjoint i64 %.sroa.16.16.insert.ext313, 180388626432
  switch i32 %41, label %707 [
    i32 2, label %705
    i32 1, label %.sink.split
  ]

705:                                              ; preds = %693
  br label %.sink.split

.sink.split:                                      ; preds = %693, %705
  %.sink = phi i32 [ 9, %705 ], [ 5, %693 ]
  %706 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert249, i32 noundef %.sink, i32 noundef 1, i32 noundef 0) #10
  br label %707

707:                                              ; preds = %.sink.split, %693
  %708 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.0.0.insert.insert249, i32 noundef 1, i32 noundef 1, i32 noundef 4) #10
  %709 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert249, i32 noundef 14, i32 noundef 1, i32 noundef 0) #10
  %710 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.42354.340.insert.insert, i64 %.sroa.0516.4.insert.insert, i64 %.sroa.5.12.insert.insert, i64 0, i64 undef) #10
  %711 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.31.8.insert.insert269, i32 noundef 11, i32 noundef 1, i32 noundef 0) #10
  %712 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.16.16.insert.insert315, i64 %290, i64 %292, i64 12884901889, i64 %.sroa.13488.0943) #10
  %713 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.29.24.insert.insert340, i64 %295, i64 %297, i64 12884901889, i64 %.sroa.13443.0) #10
  call void @libxsmm_meqn_tree_print(i32 noundef %704) #10
  %714 = load i64, ptr %301, align 8
  %715 = call ptr @libxsmm_dispatch_meqn(i32 noundef %704, i64 %300, i64 %714) #10
  %716 = getelementptr inbounds i8, ptr %12, i64 2016
  store ptr %697, ptr %716, align 16, !tbaa !32
  call void %715(ptr noundef nonnull %3) #10
  %717 = load ptr, ptr %119, align 8, !tbaa !5
  %718 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %719 = load i32, ptr %718, align 4, !tbaa !9
  %720 = load i32, ptr %105, align 4, !tbaa !9
  %721 = load i32, ptr %109, align 4, !tbaa !9
  %722 = load ptr, ptr %10, align 16, !tbaa !5
  %723 = load i32, ptr %5, align 16, !tbaa !9
  %724 = load i32, ptr %6, align 16, !tbaa !9
  %725 = load i32, ptr %7, align 16, !tbaa !9
  %726 = load ptr, ptr %484, align 8, !tbaa !5
  %727 = getelementptr inbounds i8, ptr %5, i64 4
  %728 = load i32, ptr %727, align 4, !tbaa !9
  %729 = load i32, ptr %470, align 4, !tbaa !9
  %730 = load i32, ptr %474, align 4, !tbaa !9
  %731 = load ptr, ptr %699, align 16, !tbaa !5
  %732 = load i32, ptr %146, align 8, !tbaa !9
  %733 = getelementptr inbounds i8, ptr %6, i64 8
  %734 = load i32, ptr %733, align 8, !tbaa !9
  %735 = getelementptr inbounds i8, ptr %7, i64 8
  %736 = load i32, ptr %735, align 8, !tbaa !9
  %737 = mul nsw i32 %736, %734
  %738 = getelementptr inbounds i8, ptr %10, i64 24
  %739 = load ptr, ptr %738, align 8, !tbaa !5
  %740 = load i32, ptr %148, align 4, !tbaa !9
  %741 = getelementptr inbounds i8, ptr %6, i64 12
  %742 = load i32, ptr %741, align 4, !tbaa !9
  %743 = getelementptr inbounds i8, ptr %7, i64 12
  %744 = load i32, ptr %743, align 4, !tbaa !9
  %745 = mul nsw i32 %744, %742
  call void @eqn4_f32(ptr noundef %717, i32 noundef %719, i32 noundef %720, i32 noundef %721, ptr noundef %722, i32 noundef %723, i32 noundef %724, i32 noundef %725, ptr noundef %726, i32 noundef %728, i32 noundef %729, i32 noundef %730, i32 noundef %522, ptr noundef %731, i32 noundef %732, i32 noundef %734, i32 noundef %736, i32 noundef %737, ptr noundef %739, i32 noundef %740, i32 noundef %742, i32 noundef %744, i32 noundef %745, ptr noundef %697, i32 noundef %41, ptr noundef %152)
  %746 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %747 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %748 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %749 = load i32, ptr %109, align 4, !tbaa !9
  %750 = load i32, ptr %105, align 4, !tbaa !9
  %751 = mul i32 %749, %114
  %752 = mul i32 %751, %750
  %753 = load ptr, ptr %119, align 8, !tbaa !5
  %754 = load ptr, ptr %213, align 8, !tbaa !5
  %755 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %752, i32 noundef 1, ptr noundef %753, ptr noundef %754, ptr noundef null, ptr noundef null) #10
  %756 = load double, ptr %365, align 8, !tbaa !35
  %757 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %756)
  %758 = load double, ptr %368, align 8, !tbaa !38
  %759 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %758)
  %760 = load double, ptr %371, align 8, !tbaa !39
  %761 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %760)
  %762 = load double, ptr %374, align 8, !tbaa !40
  %763 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %762)
  %764 = load double, ptr %377, align 8, !tbaa !41
  %765 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %764)
  %766 = load double, ptr %380, align 8, !tbaa !42
  %767 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %766)
  %768 = load double, ptr %383, align 8, !tbaa !43
  %769 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %768)
  %770 = load ptr, ptr %119, align 8, !tbaa !5
  %771 = load i32, ptr %718, align 4, !tbaa !9
  %772 = load i32, ptr %105, align 4, !tbaa !9
  %773 = load i32, ptr %109, align 4, !tbaa !9
  %774 = load ptr, ptr %10, align 16, !tbaa !5
  %775 = load i32, ptr %5, align 16, !tbaa !9
  %776 = load i32, ptr %6, align 16, !tbaa !9
  %777 = load i32, ptr %7, align 16, !tbaa !9
  %778 = load ptr, ptr %484, align 8, !tbaa !5
  %779 = load i32, ptr %727, align 4, !tbaa !9
  %780 = load i32, ptr %470, align 4, !tbaa !9
  %781 = load i32, ptr %474, align 4, !tbaa !9
  %782 = load ptr, ptr %699, align 16, !tbaa !5
  %783 = load i32, ptr %146, align 8, !tbaa !9
  %784 = load i32, ptr %733, align 8, !tbaa !9
  %785 = load i32, ptr %735, align 8, !tbaa !9
  %786 = mul nsw i32 %785, %784
  %787 = load ptr, ptr %738, align 8, !tbaa !5
  %788 = load i32, ptr %148, align 4, !tbaa !9
  %789 = load i32, ptr %741, align 4, !tbaa !9
  %790 = load i32, ptr %743, align 4, !tbaa !9
  %791 = mul nsw i32 %790, %789
  call void @eqn4_f32(ptr noundef %770, i32 noundef %771, i32 noundef %772, i32 noundef %773, ptr noundef %774, i32 noundef %775, i32 noundef %776, i32 noundef %777, ptr noundef %778, i32 noundef %779, i32 noundef %780, i32 noundef %781, i32 noundef %522, ptr noundef %782, i32 noundef %783, i32 noundef %784, i32 noundef %785, i32 noundef %786, ptr noundef %787, i32 noundef %788, i32 noundef %789, i32 noundef %790, i32 noundef %791, ptr noundef %697, i32 noundef %41, ptr noundef %152)
  %792 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1027, label %._crit_edge1028

.lr.ph1027:                                       ; preds = %707, %.lr.ph1027
  %.49071025 = phi i32 [ %815, %.lr.ph1027 ], [ 0, %707 ]
  %793 = load ptr, ptr %119, align 8, !tbaa !5
  %794 = load i32, ptr %718, align 4, !tbaa !9
  %795 = load i32, ptr %105, align 4, !tbaa !9
  %796 = load i32, ptr %109, align 4, !tbaa !9
  %797 = load ptr, ptr %10, align 16, !tbaa !5
  %798 = load i32, ptr %5, align 16, !tbaa !9
  %799 = load i32, ptr %6, align 16, !tbaa !9
  %800 = load i32, ptr %7, align 16, !tbaa !9
  %801 = load ptr, ptr %484, align 8, !tbaa !5
  %802 = load i32, ptr %727, align 4, !tbaa !9
  %803 = load i32, ptr %470, align 4, !tbaa !9
  %804 = load i32, ptr %474, align 4, !tbaa !9
  %805 = load ptr, ptr %699, align 16, !tbaa !5
  %806 = load i32, ptr %146, align 8, !tbaa !9
  %807 = load i32, ptr %733, align 8, !tbaa !9
  %808 = load i32, ptr %735, align 8, !tbaa !9
  %809 = mul nsw i32 %808, %807
  %810 = load ptr, ptr %738, align 8, !tbaa !5
  %811 = load i32, ptr %148, align 4, !tbaa !9
  %812 = load i32, ptr %741, align 4, !tbaa !9
  %813 = load i32, ptr %743, align 4, !tbaa !9
  %814 = mul nsw i32 %813, %812
  call void @eqn4_f32(ptr noundef %793, i32 noundef %794, i32 noundef %795, i32 noundef %796, ptr noundef %797, i32 noundef %798, i32 noundef %799, i32 noundef %800, ptr noundef %801, i32 noundef %802, i32 noundef %803, i32 noundef %804, i32 noundef %522, ptr noundef %805, i32 noundef %806, i32 noundef %807, i32 noundef %808, i32 noundef %809, ptr noundef %810, i32 noundef %811, i32 noundef %812, i32 noundef %813, i32 noundef %814, ptr noundef %697, i32 noundef %41, ptr noundef %152)
  %815 = add nuw nsw i32 %.49071025, 1
  %exitcond1133.not = icmp eq i32 %815, %44
  br i1 %exitcond1133.not, label %._crit_edge1028, label %.lr.ph1027, !llvm.loop !62

._crit_edge1028:                                  ; preds = %.lr.ph1027, %707
  %816 = call i64 @libxsmm_timer_tick() #10
  %817 = call double @libxsmm_timer_duration(i64 noundef %792, i64 noundef %816) #10
  %818 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %817)
  call void %715(ptr noundef nonnull %3) #10
  %819 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1031, label %._crit_edge1032

.lr.ph1031:                                       ; preds = %._crit_edge1028, %.lr.ph1031
  %.59081029 = phi i32 [ %820, %.lr.ph1031 ], [ 0, %._crit_edge1028 ]
  call void %715(ptr noundef nonnull %3) #10
  %820 = add nuw nsw i32 %.59081029, 1
  %exitcond1134.not = icmp eq i32 %820, %44
  br i1 %exitcond1134.not, label %._crit_edge1032, label %.lr.ph1031, !llvm.loop !63

._crit_edge1032:                                  ; preds = %.lr.ph1031, %._crit_edge1028
  %821 = call i64 @libxsmm_timer_tick() #10
  %822 = call double @libxsmm_timer_duration(i64 noundef %819, i64 noundef %821) #10
  %823 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %822)
  %824 = fcmp ogt double %822, 0.000000e+00
  br i1 %824, label %825, label %828

825:                                              ; preds = %._crit_edge1032
  %826 = fdiv double %817, %822
  %827 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %44, double noundef %826)
  br label %828

828:                                              ; preds = %._crit_edge1032, %825, %692
  %.0914 = phi ptr [ %697, %825 ], [ %697, %._crit_edge1032 ], [ null, %692 ]
  br i1 %153, label %829, label %.lr.ph1067.preheader

829:                                              ; preds = %828
  %830 = getelementptr inbounds i8, ptr %6, i64 8
  %831 = load i32, ptr %830, align 8, !tbaa !9
  %832 = and i32 %831, 1
  %833 = icmp eq i32 %832, 0
  br i1 %833, label %834, label %.lr.ph1067.preheader

834:                                              ; preds = %829
  %835 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  %836 = getelementptr inbounds i8, ptr %7, i64 8
  %837 = load i32, ptr %836, align 8, !tbaa !9
  %838 = load i32, ptr %830, align 8, !tbaa !9
  %839 = shl i32 %837, 1
  %840 = mul i32 %839, %838
  %.sroa.13488.12.insert.ext507 = zext i32 %840 to i64
  %.sroa.13488.12.insert.shift508 = shl nuw i64 %.sroa.13488.12.insert.ext507, 32
  %.sroa.13488.12.insert.insert510 = or disjoint i64 %.sroa.13488.12.insert.shift508, %.sroa.13488.8.insert.ext
  %841 = load i32, ptr %527, align 4, !tbaa !9
  %.sroa.13443.8.insert.ext449 = zext i32 %841 to i64
  %842 = getelementptr inbounds i8, ptr %7, i64 12
  %843 = load i32, ptr %842, align 4, !tbaa !9
  %844 = getelementptr inbounds i8, ptr %6, i64 12
  %845 = load i32, ptr %844, align 4, !tbaa !9
  %846 = shl i32 %843, 1
  %847 = mul i32 %846, %845
  %.sroa.13443.12.insert.ext462 = zext i32 %847 to i64
  %.sroa.13443.12.insert.shift463 = shl nuw i64 %.sroa.13443.12.insert.ext462, 32
  %.sroa.13443.12.insert.insert465 = or disjoint i64 %.sroa.13443.12.insert.shift463, %.sroa.13443.8.insert.ext449
  store i64 %537, ptr %15, align 8, !tbaa !54
  store ptr %15, ptr %538, align 16, !tbaa !56
  store ptr %14, ptr %3, align 8, !tbaa !58
  %848 = sext i32 %838 to i64
  %849 = sext i32 %837 to i64
  %850 = shl nsw i64 %537, 1
  %851 = mul i64 %850, %849
  %852 = mul i64 %851, %848
  %853 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %852, i64 noundef 64) #10
  %854 = getelementptr inbounds i8, ptr %11, i64 16
  %855 = load ptr, ptr %854, align 16, !tbaa !5
  %856 = icmp sgt i32 %522, 0
  br i1 %856, label %.preheader949.lr.ph, label %._crit_edge1039

.preheader949.lr.ph:                              ; preds = %834
  %857 = load i32, ptr %830, align 8, !tbaa !9
  %858 = sdiv i32 %857, 2
  %859 = icmp slt i32 %857, 2
  %860 = load i32, ptr %146, align 8
  %861 = icmp slt i32 %860, 1
  %862 = load i32, ptr %836, align 8
  %factor.op.mul1040 = mul i32 %857, %862
  %factor.op.mul = shl i32 %862, 1
  %863 = sext i32 %862 to i64
  %wide.trip.count1146 = zext i32 %858 to i64
  %wide.trip.count1141 = zext i32 %860 to i64
  %864 = shl nuw nsw i64 %wide.trip.count1141, 2
  %scevgep1201 = getelementptr i8, ptr %853, i64 %864
  %865 = shl nsw i64 %863, 1
  %scevgep1204 = getelementptr i8, ptr %855, i64 %865
  %866 = shl nuw nsw i64 %wide.trip.count1146, 2
  %867 = add nsw i64 %866, -2
  %868 = mul i64 %867, %863
  %869 = shl nuw nsw i64 %wide.trip.count1141, 1
  %870 = getelementptr i8, ptr %855, i64 %868
  %scevgep1206 = getelementptr i8, ptr %870, i64 %869
  %871 = add nuw nsw i64 %wide.trip.count1146, 4611686018427387903
  %872 = mul i64 %871, %863
  %873 = shl i64 %872, 2
  %874 = getelementptr i8, ptr %855, i64 %873
  %scevgep1209 = getelementptr i8, ptr %874, i64 %869
  %brmerge = select i1 %859, i1 true, i1 %861
  %min.iters.check1217 = icmp ult i32 %860, 8
  %stride.check1214 = icmp slt i32 %862, 0
  %n.vec1220 = and i64 %wide.trip.count1141, 2147483640
  %cmp.n1230 = icmp eq i64 %n.vec1220, %wide.trip.count1141
  %xtraiter1246 = and i64 %wide.trip.count1141, 1
  %lcmp.mod1247.not = icmp eq i64 %xtraiter1246, 0
  %875 = add nsw i64 %wide.trip.count1141, -1
  br label %.preheader949

.preheader949:                                    ; preds = %.preheader949.lr.ph, %._crit_edge1037
  %indvars.iv1148 = phi i64 [ 0, %.preheader949.lr.ph ], [ %indvars.iv.next1149, %._crit_edge1037 ]
  %876 = trunc i64 %indvars.iv1148 to i32
  %877 = mul i32 %factor.op.mul1040, %876
  %878 = sext i32 %877 to i64
  %879 = shl nsw i64 %878, 1
  %scevgep1205 = getelementptr i8, ptr %scevgep1204, i64 %879
  %scevgep1207 = getelementptr i8, ptr %scevgep1206, i64 %879
  %scevgep1208 = getelementptr i8, ptr %855, i64 %879
  %scevgep1210 = getelementptr i8, ptr %scevgep1209, i64 %879
  br i1 %brmerge, label %._crit_edge1037, label %.preheader948.us.preheader

.preheader948.us.preheader:                       ; preds = %.preheader949
  %880 = trunc nuw nsw i64 %indvars.iv1148 to i32
  %.reass = mul i32 %factor.op.mul1040, %880
  %881 = sext i32 %.reass to i64
  %invariant.gep1180 = getelementptr i16, ptr %855, i64 %881
  %invariant.gep1182 = getelementptr i16, ptr %853, i64 %881
  %invariant.gep1184 = getelementptr i16, ptr %855, i64 %881
  %invariant.gep1186 = getelementptr i16, ptr %853, i64 %881
  %scevgep = getelementptr i8, ptr %853, i64 %879
  %scevgep1202 = getelementptr i8, ptr %scevgep1201, i64 %879
  br label %.preheader948.us

.preheader948.us:                                 ; preds = %.preheader948.us.preheader, %._crit_edge1035.us
  %indvars.iv1143 = phi i64 [ 0, %.preheader948.us.preheader ], [ %indvars.iv.next1144, %._crit_edge1035.us ]
  %882 = shl nuw nsw i64 %indvars.iv1143, 1
  %883 = trunc nuw nsw i64 %indvars.iv1143 to i32
  %.reass.us = mul i32 %factor.op.mul, %883
  %884 = sext i32 %.reass.us to i64
  %885 = mul nsw i64 %882, %863
  %gep1181 = getelementptr i16, ptr %invariant.gep1180, i64 %885
  %gep1183 = getelementptr i16, ptr %invariant.gep1182, i64 %884
  %886 = or disjoint i64 %882, 1
  %887 = mul nsw i64 %886, %863
  %gep1185 = getelementptr i16, ptr %invariant.gep1184, i64 %887
  %gep1187 = getelementptr i16, ptr %invariant.gep1186, i64 %884
  br i1 %min.iters.check1217, label %.preheader.us.preheader, label %vector.memcheck1199

vector.memcheck1199:                              ; preds = %.preheader948.us
  %888 = trunc i64 %indvars.iv1143 to i32
  %889 = mul i32 %factor.op.mul, %888
  %890 = sext i32 %889 to i64
  %891 = shl nsw i64 %890, 1
  %scevgep1203 = getelementptr i8, ptr %scevgep1202, i64 %891
  %scevgep1200 = getelementptr i8, ptr %scevgep, i64 %891
  %bound0 = icmp ult ptr %scevgep1200, %scevgep1207
  %bound1 = icmp ult ptr %scevgep1205, %scevgep1203
  %found.conflict = and i1 %bound0, %bound1
  %bound01211 = icmp ult ptr %scevgep1200, %scevgep1210
  %bound11212 = icmp ult ptr %scevgep1208, %scevgep1203
  %found.conflict1213 = and i1 %bound01211, %bound11212
  %892 = or i1 %found.conflict1213, %stride.check1214
  %conflict.rdx = or i1 %found.conflict, %892
  br i1 %conflict.rdx, label %.preheader.us.preheader, label %vector.ph1218

vector.ph1218:                                    ; preds = %vector.memcheck1199
  %invariant.gep1250 = getelementptr i8, ptr %gep1187, i64 -2
  %invariant.gep1252 = getelementptr i8, ptr %gep1187, i64 -2
  br label %vector.body1222

vector.body1222:                                  ; preds = %vector.body1222, %vector.ph1218
  %index1223 = phi i64 [ 0, %vector.ph1218 ], [ %index.next1229, %vector.body1222 ]
  %893 = shl nuw nsw i64 %index1223, 1
  %894 = shl i64 %index1223, 1
  %895 = getelementptr i16, ptr %gep1181, i64 %index1223
  %896 = getelementptr i8, ptr %895, i64 8
  %wide.load1224 = load <4 x i16>, ptr %895, align 2, !tbaa !27, !alias.scope !64
  %wide.load1225 = load <4 x i16>, ptr %896, align 2, !tbaa !27, !alias.scope !64
  %897 = getelementptr i16, ptr %gep1185, i64 %index1223
  %898 = getelementptr i8, ptr %897, i64 8
  %wide.load1226 = load <4 x i16>, ptr %897, align 2, !tbaa !27, !alias.scope !67
  %wide.load1227 = load <4 x i16>, ptr %898, align 2, !tbaa !27, !alias.scope !67
  %899 = or disjoint i64 %893, 1
  %900 = or disjoint i64 %894, 9
  %gep1251 = getelementptr i16, ptr %invariant.gep1250, i64 %899
  %gep1253 = getelementptr i16, ptr %invariant.gep1252, i64 %900
  %interleaved.vec = shufflevector <4 x i16> %wide.load1224, <4 x i16> %wide.load1226, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x i16> %interleaved.vec, ptr %gep1251, align 2, !tbaa !27
  %interleaved.vec1228 = shufflevector <4 x i16> %wide.load1225, <4 x i16> %wide.load1227, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x i16> %interleaved.vec1228, ptr %gep1253, align 2, !tbaa !27
  %index.next1229 = add nuw i64 %index1223, 8
  %901 = icmp eq i64 %index.next1229, %n.vec1220
  br i1 %901, label %middle.block1215, label %vector.body1222, !llvm.loop !69

middle.block1215:                                 ; preds = %vector.body1222
  br i1 %cmp.n1230, label %._crit_edge1035.us, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %middle.block1215, %vector.memcheck1199, %.preheader948.us
  %indvars.iv1138.ph = phi i64 [ 0, %vector.memcheck1199 ], [ 0, %.preheader948.us ], [ %n.vec1220, %middle.block1215 ]
  br i1 %lcmp.mod1247.not, label %.preheader.us.prol.loopexit, label %.preheader.us.prol

.preheader.us.prol:                               ; preds = %.preheader.us.preheader
  %902 = shl nuw nsw i64 %indvars.iv1138.ph, 1
  %gep1169.prol = getelementptr i16, ptr %gep1181, i64 %indvars.iv1138.ph
  %903 = load i16, ptr %gep1169.prol, align 2, !tbaa !27
  %gep1173.prol = getelementptr i16, ptr %gep1183, i64 %902
  store i16 %903, ptr %gep1173.prol, align 2, !tbaa !27
  %gep1175.prol = getelementptr i16, ptr %gep1185, i64 %indvars.iv1138.ph
  %904 = load i16, ptr %gep1175.prol, align 2, !tbaa !27
  %905 = or disjoint i64 %902, 1
  %gep1179.prol = getelementptr i16, ptr %gep1187, i64 %905
  store i16 %904, ptr %gep1179.prol, align 2, !tbaa !27
  %indvars.iv.next1139.prol = or disjoint i64 %indvars.iv1138.ph, 1
  br label %.preheader.us.prol.loopexit

.preheader.us.prol.loopexit:                      ; preds = %.preheader.us.prol, %.preheader.us.preheader
  %indvars.iv1138.unr = phi i64 [ %indvars.iv1138.ph, %.preheader.us.preheader ], [ %indvars.iv.next1139.prol, %.preheader.us.prol ]
  %906 = icmp eq i64 %indvars.iv1138.ph, %875
  br i1 %906, label %._crit_edge1035.us, label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.prol.loopexit, %.preheader.us
  %indvars.iv1138 = phi i64 [ %indvars.iv.next1139.1, %.preheader.us ], [ %indvars.iv1138.unr, %.preheader.us.prol.loopexit ]
  %907 = shl nuw nsw i64 %indvars.iv1138, 1
  %gep1169 = getelementptr i16, ptr %gep1181, i64 %indvars.iv1138
  %908 = load i16, ptr %gep1169, align 2, !tbaa !27
  %gep1173 = getelementptr i16, ptr %gep1183, i64 %907
  store i16 %908, ptr %gep1173, align 2, !tbaa !27
  %gep1175 = getelementptr i16, ptr %gep1185, i64 %indvars.iv1138
  %909 = load i16, ptr %gep1175, align 2, !tbaa !27
  %910 = or disjoint i64 %907, 1
  %gep1179 = getelementptr i16, ptr %gep1187, i64 %910
  store i16 %909, ptr %gep1179, align 2, !tbaa !27
  %indvars.iv.next1139 = add nuw nsw i64 %indvars.iv1138, 1
  %911 = shl nuw nsw i64 %indvars.iv.next1139, 1
  %gep1169.1 = getelementptr i16, ptr %gep1181, i64 %indvars.iv.next1139
  %912 = load i16, ptr %gep1169.1, align 2, !tbaa !27
  %gep1173.1 = getelementptr i16, ptr %gep1183, i64 %911
  store i16 %912, ptr %gep1173.1, align 2, !tbaa !27
  %gep1175.1 = getelementptr i16, ptr %gep1185, i64 %indvars.iv.next1139
  %913 = load i16, ptr %gep1175.1, align 2, !tbaa !27
  %914 = or disjoint i64 %911, 1
  %gep1179.1 = getelementptr i16, ptr %gep1187, i64 %914
  store i16 %913, ptr %gep1179.1, align 2, !tbaa !27
  %indvars.iv.next1139.1 = add nuw nsw i64 %indvars.iv1138, 2
  %exitcond1142.not.1 = icmp eq i64 %indvars.iv.next1139.1, %wide.trip.count1141
  br i1 %exitcond1142.not.1, label %._crit_edge1035.us, label %.preheader.us, !llvm.loop !70

._crit_edge1035.us:                               ; preds = %.preheader.us.prol.loopexit, %.preheader.us, %middle.block1215
  %indvars.iv.next1144 = add nuw nsw i64 %indvars.iv1143, 1
  %exitcond1147.not = icmp eq i64 %indvars.iv.next1144, %wide.trip.count1146
  br i1 %exitcond1147.not, label %._crit_edge1037, label %.preheader948.us, !llvm.loop !71

._crit_edge1037:                                  ; preds = %._crit_edge1035.us, %.preheader949
  %indvars.iv.next1149 = add nuw nsw i64 %indvars.iv1148, 1
  %exitcond1152.not = icmp eq i64 %indvars.iv.next1149, %.sroa.13488.8.insert.ext
  br i1 %exitcond1152.not, label %._crit_edge1039, label %.preheader949, !llvm.loop !72

._crit_edge1039:                                  ; preds = %._crit_edge1037, %834
  %915 = getelementptr inbounds i8, ptr %13, i64 96
  store ptr %853, ptr %915, align 16, !tbaa !32
  %916 = call i32 @libxsmm_meqn_create() #10
  %.sroa.0282.0.insert.ext291 = zext i32 %916 to i64
  %.sroa.16.16.insert.insert319 = or disjoint i64 %.sroa.0282.0.insert.ext291, 8589934592
  %.sroa.29.24.insert.insert344 = or disjoint i64 %.sroa.0282.0.insert.ext291, 12884901888
  %.sroa.0.0.insert.insert253 = or disjoint i64 %.sroa.0282.0.insert.ext291, -4294967296
  %.sroa.31.8.insert.insert273 = or disjoint i64 %.sroa.0282.0.insert.ext291, 30064771072
  %917 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.0.0.insert.insert253, i32 noundef 1, i32 noundef 1, i32 noundef 0) #10
  %918 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert253, i32 noundef 11, i32 noundef 1, i32 noundef 0) #10
  %919 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.0282.0.insert.ext291, i64 %278, i64 %280, i64 0, i64 undef) #10
  %920 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert253, i32 noundef 7, i32 noundef 1, i32 noundef 0) #10
  %921 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.31.8.insert.insert273, i32 noundef 15, i32 noundef 1, i32 noundef 0) #10
  %922 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.16.16.insert.insert319, i64 %290, i64 %292, i64 12884901889, i64 %.sroa.13488.12.insert.insert510) #10
  %923 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.29.24.insert.insert344, i64 %295, i64 %297, i64 12884901889, i64 %.sroa.13443.12.insert.insert465) #10
  call void @libxsmm_meqn_tree_print(i32 noundef %916) #10
  %924 = load i64, ptr %301, align 8
  %925 = call ptr @libxsmm_dispatch_meqn(i32 noundef %916, i64 %300, i64 %924) #10
  call void %925(ptr noundef nonnull %3) #10
  %926 = load ptr, ptr %119, align 8, !tbaa !5
  %927 = getelementptr inbounds [128 x i32], ptr %5, i64 0, i64 %104
  %928 = load i32, ptr %927, align 4, !tbaa !9
  %929 = load i32, ptr %105, align 4, !tbaa !9
  %930 = load i32, ptr %109, align 4, !tbaa !9
  %931 = load ptr, ptr %10, align 16, !tbaa !5
  %932 = load i32, ptr %5, align 16, !tbaa !9
  %933 = load i32, ptr %6, align 16, !tbaa !9
  %934 = load i32, ptr %7, align 16, !tbaa !9
  %935 = load ptr, ptr %484, align 8, !tbaa !5
  %936 = getelementptr inbounds i8, ptr %5, i64 4
  %937 = load i32, ptr %936, align 4, !tbaa !9
  %938 = load i32, ptr %470, align 4, !tbaa !9
  %939 = load i32, ptr %474, align 4, !tbaa !9
  %940 = getelementptr inbounds i8, ptr %10, i64 16
  %941 = load ptr, ptr %940, align 16, !tbaa !5
  %942 = load i32, ptr %146, align 8, !tbaa !9
  %943 = load i32, ptr %830, align 8, !tbaa !9
  %944 = load i32, ptr %836, align 8, !tbaa !9
  %945 = mul nsw i32 %944, %943
  %946 = getelementptr inbounds i8, ptr %10, i64 24
  %947 = load ptr, ptr %946, align 8, !tbaa !5
  %948 = load i32, ptr %148, align 4, !tbaa !9
  %949 = load i32, ptr %844, align 4, !tbaa !9
  %950 = load i32, ptr %842, align 4, !tbaa !9
  %951 = mul nsw i32 %950, %949
  call void @eqn2_f32(ptr noundef %926, i32 noundef %928, i32 noundef %929, i32 noundef %930, ptr noundef %931, i32 noundef %932, i32 noundef %933, i32 noundef %934, ptr noundef %935, i32 noundef %937, i32 noundef %938, i32 noundef %939, i32 noundef %522, ptr noundef %941, i32 noundef %942, i32 noundef %943, i32 noundef %944, i32 noundef %945, ptr noundef %947, i32 noundef %948, i32 noundef %949, i32 noundef %950, i32 noundef %951, ptr noundef %152)
  %952 = load ptr, ptr %213, align 8, !tbaa !5
  %953 = load i32, ptr %109, align 4, !tbaa !9
  %954 = load i32, ptr %105, align 4, !tbaa !9
  %955 = mul nsw i32 %954, %953
  %956 = mul nsw i32 %955, %114
  %957 = sext i32 %956 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %216, ptr noundef %952, i64 noundef %957) #10
  %958 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %959 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %960 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %961 = load i32, ptr %109, align 4, !tbaa !9
  %962 = load i32, ptr %105, align 4, !tbaa !9
  %963 = mul i32 %961, %114
  %964 = mul i32 %963, %962
  %965 = load ptr, ptr %119, align 8, !tbaa !5
  %966 = load ptr, ptr %213, align 8, !tbaa !5
  %967 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %964, i32 noundef 1, ptr noundef %965, ptr noundef %966, ptr noundef null, ptr noundef null) #10
  %968 = load double, ptr %365, align 8, !tbaa !35
  %969 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %968)
  %970 = load double, ptr %368, align 8, !tbaa !38
  %971 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %970)
  %972 = load double, ptr %371, align 8, !tbaa !39
  %973 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %972)
  %974 = load double, ptr %374, align 8, !tbaa !40
  %975 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %974)
  %976 = load double, ptr %377, align 8, !tbaa !41
  %977 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %976)
  %978 = load double, ptr %380, align 8, !tbaa !42
  %979 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %978)
  %980 = load double, ptr %383, align 8, !tbaa !43
  %981 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %980)
  %982 = load ptr, ptr %119, align 8, !tbaa !5
  %983 = load i32, ptr %927, align 4, !tbaa !9
  %984 = load i32, ptr %105, align 4, !tbaa !9
  %985 = load i32, ptr %109, align 4, !tbaa !9
  %986 = load ptr, ptr %10, align 16, !tbaa !5
  %987 = load i32, ptr %5, align 16, !tbaa !9
  %988 = load i32, ptr %6, align 16, !tbaa !9
  %989 = load i32, ptr %7, align 16, !tbaa !9
  %990 = load ptr, ptr %484, align 8, !tbaa !5
  %991 = load i32, ptr %936, align 4, !tbaa !9
  %992 = load i32, ptr %470, align 4, !tbaa !9
  %993 = load i32, ptr %474, align 4, !tbaa !9
  %994 = load ptr, ptr %940, align 16, !tbaa !5
  %995 = load i32, ptr %146, align 8, !tbaa !9
  %996 = load i32, ptr %830, align 8, !tbaa !9
  %997 = load i32, ptr %836, align 8, !tbaa !9
  %998 = mul nsw i32 %997, %996
  %999 = load ptr, ptr %946, align 8, !tbaa !5
  %1000 = load i32, ptr %148, align 4, !tbaa !9
  %1001 = load i32, ptr %844, align 4, !tbaa !9
  %1002 = load i32, ptr %842, align 4, !tbaa !9
  %1003 = mul nsw i32 %1002, %1001
  call void @eqn2_f32(ptr noundef %982, i32 noundef %983, i32 noundef %984, i32 noundef %985, ptr noundef %986, i32 noundef %987, i32 noundef %988, i32 noundef %989, ptr noundef %990, i32 noundef %991, i32 noundef %992, i32 noundef %993, i32 noundef %522, ptr noundef %994, i32 noundef %995, i32 noundef %996, i32 noundef %997, i32 noundef %998, ptr noundef %999, i32 noundef %1000, i32 noundef %1001, i32 noundef %1002, i32 noundef %1003, ptr noundef %152)
  %1004 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1043, label %._crit_edge1044

.lr.ph1043:                                       ; preds = %._crit_edge1039, %.lr.ph1043
  %.69091041 = phi i32 [ %1027, %.lr.ph1043 ], [ 0, %._crit_edge1039 ]
  %1005 = load ptr, ptr %119, align 8, !tbaa !5
  %1006 = load i32, ptr %927, align 4, !tbaa !9
  %1007 = load i32, ptr %105, align 4, !tbaa !9
  %1008 = load i32, ptr %109, align 4, !tbaa !9
  %1009 = load ptr, ptr %10, align 16, !tbaa !5
  %1010 = load i32, ptr %5, align 16, !tbaa !9
  %1011 = load i32, ptr %6, align 16, !tbaa !9
  %1012 = load i32, ptr %7, align 16, !tbaa !9
  %1013 = load ptr, ptr %484, align 8, !tbaa !5
  %1014 = load i32, ptr %936, align 4, !tbaa !9
  %1015 = load i32, ptr %470, align 4, !tbaa !9
  %1016 = load i32, ptr %474, align 4, !tbaa !9
  %1017 = load ptr, ptr %940, align 16, !tbaa !5
  %1018 = load i32, ptr %146, align 8, !tbaa !9
  %1019 = load i32, ptr %830, align 8, !tbaa !9
  %1020 = load i32, ptr %836, align 8, !tbaa !9
  %1021 = mul nsw i32 %1020, %1019
  %1022 = load ptr, ptr %946, align 8, !tbaa !5
  %1023 = load i32, ptr %148, align 4, !tbaa !9
  %1024 = load i32, ptr %844, align 4, !tbaa !9
  %1025 = load i32, ptr %842, align 4, !tbaa !9
  %1026 = mul nsw i32 %1025, %1024
  call void @eqn2_f32(ptr noundef %1005, i32 noundef %1006, i32 noundef %1007, i32 noundef %1008, ptr noundef %1009, i32 noundef %1010, i32 noundef %1011, i32 noundef %1012, ptr noundef %1013, i32 noundef %1014, i32 noundef %1015, i32 noundef %1016, i32 noundef %522, ptr noundef %1017, i32 noundef %1018, i32 noundef %1019, i32 noundef %1020, i32 noundef %1021, ptr noundef %1022, i32 noundef %1023, i32 noundef %1024, i32 noundef %1025, i32 noundef %1026, ptr noundef %152)
  %1027 = add nuw nsw i32 %.69091041, 1
  %exitcond1153.not = icmp eq i32 %1027, %44
  br i1 %exitcond1153.not, label %._crit_edge1044, label %.lr.ph1043, !llvm.loop !73

._crit_edge1044:                                  ; preds = %.lr.ph1043, %._crit_edge1039
  %1028 = call i64 @libxsmm_timer_tick() #10
  %1029 = call double @libxsmm_timer_duration(i64 noundef %1004, i64 noundef %1028) #10
  %1030 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %1029)
  call void %925(ptr noundef nonnull %3) #10
  %1031 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1047, label %._crit_edge1048

.lr.ph1047:                                       ; preds = %._crit_edge1044, %.lr.ph1047
  %.79101045 = phi i32 [ %1032, %.lr.ph1047 ], [ 0, %._crit_edge1044 ]
  call void %925(ptr noundef nonnull %3) #10
  %1032 = add nuw nsw i32 %.79101045, 1
  %exitcond1154.not = icmp eq i32 %1032, %44
  br i1 %exitcond1154.not, label %._crit_edge1048, label %.lr.ph1047, !llvm.loop !74

._crit_edge1048:                                  ; preds = %.lr.ph1047, %._crit_edge1044
  %1033 = call i64 @libxsmm_timer_tick() #10
  %1034 = call double @libxsmm_timer_duration(i64 noundef %1031, i64 noundef %1033) #10
  %1035 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %1034)
  %1036 = fcmp ogt double %1034, 0.000000e+00
  br i1 %1036, label %1037, label %1040

1037:                                             ; preds = %._crit_edge1048
  %1038 = fdiv double %1029, %1034
  %1039 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %44, double noundef %1038)
  br label %1040

1040:                                             ; preds = %1037, %._crit_edge1048
  %1041 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22)
  %1042 = load i32, ptr %836, align 8, !tbaa !9
  %1043 = load i32, ptr %830, align 8, !tbaa !9
  %1044 = shl i32 %1042, 1
  %1045 = mul i32 %1044, %1043
  %.sroa.13488.12.insert.ext512 = zext i32 %1045 to i64
  %.sroa.13488.12.insert.shift513 = shl nuw i64 %.sroa.13488.12.insert.ext512, 32
  %.sroa.13488.12.insert.insert515 = or disjoint i64 %.sroa.13488.12.insert.shift513, %.sroa.13488.8.insert.ext
  %1046 = load i32, ptr %842, align 4, !tbaa !9
  %1047 = load i32, ptr %844, align 4, !tbaa !9
  %1048 = shl i32 %1046, 1
  %1049 = mul i32 %1048, %1047
  %.sroa.13443.12.insert.ext467 = zext i32 %1049 to i64
  %.sroa.13443.12.insert.shift468 = shl nuw i64 %.sroa.13443.12.insert.ext467, 32
  %.sroa.13443.12.insert.insert470 = or disjoint i64 %.sroa.13443.12.insert.shift468, %.sroa.13443.8.insert.ext449
  store i64 %537, ptr %15, align 8, !tbaa !54
  store ptr %15, ptr %538, align 16, !tbaa !56
  store ptr %14, ptr %3, align 8, !tbaa !58
  %1050 = call i32 @libxsmm_meqn_create() #10
  %.sroa.0282.0.insert.ext295 = zext i32 %1050 to i64
  %.sroa.16.16.insert.insert323 = or disjoint i64 %.sroa.0282.0.insert.ext295, 8589934592
  %.sroa.29.24.insert.insert348 = or disjoint i64 %.sroa.0282.0.insert.ext295, 12884901888
  %.sroa.0.0.insert.insert257 = or disjoint i64 %.sroa.0282.0.insert.ext295, -4294967296
  %.sroa.31.8.insert.insert277 = or disjoint i64 %.sroa.0282.0.insert.ext295, 30064771072
  %1051 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert257, i32 noundef 1, i32 noundef 2, i32 noundef 0) #10
  %1052 = call i32 @libxsmm_meqn_push_back_ternary_op(i64 %.sroa.31.8.insert.insert277, i32 noundef 9, i32 noundef 2, i32 noundef 512) #10
  %1053 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.16.16.insert.insert323, i64 %290, i64 %292, i64 12884901889, i64 %.sroa.13488.12.insert.insert515) #10
  %1054 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.29.24.insert.insert348, i64 %295, i64 %297, i64 12884901889, i64 %.sroa.13443.12.insert.insert470) #10
  %1055 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert257, i32 noundef 1, i32 noundef 2, i32 noundef 0) #10
  %1056 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert257, i32 noundef 11, i32 noundef 1, i32 noundef 0) #10
  %1057 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.0282.0.insert.ext295, i64 %278, i64 %280, i64 0, i64 undef) #10
  call void @libxsmm_meqn_tree_print(i32 noundef %1050) #10
  %1058 = call ptr @libxsmm_dispatch_meqn(i32 noundef %1050, i64 %300, i64 %924) #10
  call void %1058(ptr noundef nonnull %3) #10
  %1059 = load ptr, ptr %119, align 8, !tbaa !5
  %1060 = load i32, ptr %927, align 4, !tbaa !9
  %1061 = load i32, ptr %105, align 4, !tbaa !9
  %1062 = load i32, ptr %109, align 4, !tbaa !9
  %1063 = load ptr, ptr %10, align 16, !tbaa !5
  %1064 = load i32, ptr %5, align 16, !tbaa !9
  %1065 = load i32, ptr %6, align 16, !tbaa !9
  %1066 = load i32, ptr %7, align 16, !tbaa !9
  %1067 = load ptr, ptr %484, align 8, !tbaa !5
  %1068 = load i32, ptr %936, align 4, !tbaa !9
  %1069 = load i32, ptr %470, align 4, !tbaa !9
  %1070 = load i32, ptr %474, align 4, !tbaa !9
  %1071 = load ptr, ptr %940, align 16, !tbaa !5
  %1072 = load i32, ptr %146, align 8, !tbaa !9
  %1073 = load i32, ptr %830, align 8, !tbaa !9
  %1074 = load i32, ptr %836, align 8, !tbaa !9
  %1075 = mul nsw i32 %1074, %1073
  %1076 = load ptr, ptr %946, align 8, !tbaa !5
  %1077 = load i32, ptr %148, align 4, !tbaa !9
  %1078 = load i32, ptr %844, align 4, !tbaa !9
  %1079 = load i32, ptr %842, align 4, !tbaa !9
  %1080 = mul nsw i32 %1079, %1078
  call void @eqn3_f32(ptr noundef %1059, i32 noundef %1060, i32 noundef %1061, i32 noundef %1062, ptr noundef %1063, i32 noundef %1064, i32 noundef %1065, i32 noundef %1066, ptr noundef %1067, i32 noundef %1068, i32 noundef %1069, i32 noundef %1070, i32 noundef %522, ptr noundef %1071, i32 noundef %1072, i32 noundef %1073, i32 noundef %1074, i32 noundef %1075, ptr noundef %1076, i32 noundef %1077, i32 noundef %1078, i32 noundef %1079, i32 noundef %1080, ptr noundef %152)
  %1081 = load ptr, ptr %213, align 8, !tbaa !5
  %1082 = load i32, ptr %109, align 4, !tbaa !9
  %1083 = load i32, ptr %105, align 4, !tbaa !9
  %1084 = mul i32 %1082, %114
  %1085 = mul i32 %1084, %1083
  %1086 = sext i32 %1085 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %216, ptr noundef %1081, i64 noundef %1086) #10
  %1087 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %1088 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %1089 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %1090 = load i32, ptr %109, align 4, !tbaa !9
  %1091 = load i32, ptr %105, align 4, !tbaa !9
  %1092 = mul i32 %1090, %114
  %1093 = mul i32 %1092, %1091
  %1094 = load ptr, ptr %119, align 8, !tbaa !5
  %1095 = load ptr, ptr %213, align 8, !tbaa !5
  %1096 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %1093, i32 noundef 1, ptr noundef %1094, ptr noundef %1095, ptr noundef null, ptr noundef null) #10
  %1097 = load double, ptr %365, align 8, !tbaa !35
  %1098 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %1097)
  %1099 = load double, ptr %368, align 8, !tbaa !38
  %1100 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %1099)
  %1101 = load double, ptr %371, align 8, !tbaa !39
  %1102 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %1101)
  %1103 = load double, ptr %374, align 8, !tbaa !40
  %1104 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %1103)
  %1105 = load double, ptr %377, align 8, !tbaa !41
  %1106 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %1105)
  %1107 = load double, ptr %380, align 8, !tbaa !42
  %1108 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %1107)
  %1109 = load double, ptr %383, align 8, !tbaa !43
  %1110 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %1109)
  %1111 = load ptr, ptr %119, align 8, !tbaa !5
  %1112 = load i32, ptr %927, align 4, !tbaa !9
  %1113 = load i32, ptr %105, align 4, !tbaa !9
  %1114 = load i32, ptr %109, align 4, !tbaa !9
  %1115 = load ptr, ptr %10, align 16, !tbaa !5
  %1116 = load i32, ptr %5, align 16, !tbaa !9
  %1117 = load i32, ptr %6, align 16, !tbaa !9
  %1118 = load i32, ptr %7, align 16, !tbaa !9
  %1119 = load ptr, ptr %484, align 8, !tbaa !5
  %1120 = load i32, ptr %936, align 4, !tbaa !9
  %1121 = load i32, ptr %470, align 4, !tbaa !9
  %1122 = load i32, ptr %474, align 4, !tbaa !9
  %1123 = load ptr, ptr %940, align 16, !tbaa !5
  %1124 = load i32, ptr %146, align 8, !tbaa !9
  %1125 = load i32, ptr %830, align 8, !tbaa !9
  %1126 = load i32, ptr %836, align 8, !tbaa !9
  %1127 = mul nsw i32 %1126, %1125
  %1128 = load ptr, ptr %946, align 8, !tbaa !5
  %1129 = load i32, ptr %148, align 4, !tbaa !9
  %1130 = load i32, ptr %844, align 4, !tbaa !9
  %1131 = load i32, ptr %842, align 4, !tbaa !9
  %1132 = mul nsw i32 %1131, %1130
  call void @eqn3_f32(ptr noundef %1111, i32 noundef %1112, i32 noundef %1113, i32 noundef %1114, ptr noundef %1115, i32 noundef %1116, i32 noundef %1117, i32 noundef %1118, ptr noundef %1119, i32 noundef %1120, i32 noundef %1121, i32 noundef %1122, i32 noundef %522, ptr noundef %1123, i32 noundef %1124, i32 noundef %1125, i32 noundef %1126, i32 noundef %1127, ptr noundef %1128, i32 noundef %1129, i32 noundef %1130, i32 noundef %1131, i32 noundef %1132, ptr noundef %152)
  %1133 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1051, label %._crit_edge1052

.lr.ph1051:                                       ; preds = %1040, %.lr.ph1051
  %.81049 = phi i32 [ %1156, %.lr.ph1051 ], [ 0, %1040 ]
  %1134 = load ptr, ptr %119, align 8, !tbaa !5
  %1135 = load i32, ptr %927, align 4, !tbaa !9
  %1136 = load i32, ptr %105, align 4, !tbaa !9
  %1137 = load i32, ptr %109, align 4, !tbaa !9
  %1138 = load ptr, ptr %10, align 16, !tbaa !5
  %1139 = load i32, ptr %5, align 16, !tbaa !9
  %1140 = load i32, ptr %6, align 16, !tbaa !9
  %1141 = load i32, ptr %7, align 16, !tbaa !9
  %1142 = load ptr, ptr %484, align 8, !tbaa !5
  %1143 = load i32, ptr %936, align 4, !tbaa !9
  %1144 = load i32, ptr %470, align 4, !tbaa !9
  %1145 = load i32, ptr %474, align 4, !tbaa !9
  %1146 = load ptr, ptr %940, align 16, !tbaa !5
  %1147 = load i32, ptr %146, align 8, !tbaa !9
  %1148 = load i32, ptr %830, align 8, !tbaa !9
  %1149 = load i32, ptr %836, align 8, !tbaa !9
  %1150 = mul nsw i32 %1149, %1148
  %1151 = load ptr, ptr %946, align 8, !tbaa !5
  %1152 = load i32, ptr %148, align 4, !tbaa !9
  %1153 = load i32, ptr %844, align 4, !tbaa !9
  %1154 = load i32, ptr %842, align 4, !tbaa !9
  %1155 = mul nsw i32 %1154, %1153
  call void @eqn3_f32(ptr noundef %1134, i32 noundef %1135, i32 noundef %1136, i32 noundef %1137, ptr noundef %1138, i32 noundef %1139, i32 noundef %1140, i32 noundef %1141, ptr noundef %1142, i32 noundef %1143, i32 noundef %1144, i32 noundef %1145, i32 noundef %522, ptr noundef %1146, i32 noundef %1147, i32 noundef %1148, i32 noundef %1149, i32 noundef %1150, ptr noundef %1151, i32 noundef %1152, i32 noundef %1153, i32 noundef %1154, i32 noundef %1155, ptr noundef %152)
  %1156 = add nuw nsw i32 %.81049, 1
  %exitcond1155.not = icmp eq i32 %1156, %44
  br i1 %exitcond1155.not, label %._crit_edge1052, label %.lr.ph1051, !llvm.loop !75

._crit_edge1052:                                  ; preds = %.lr.ph1051, %1040
  %1157 = call i64 @libxsmm_timer_tick() #10
  %1158 = call double @libxsmm_timer_duration(i64 noundef %1133, i64 noundef %1157) #10
  %1159 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %1158)
  call void %1058(ptr noundef nonnull %3) #10
  %1160 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1055, label %._crit_edge1056

.lr.ph1055:                                       ; preds = %._crit_edge1052, %.lr.ph1055
  %.91053 = phi i32 [ %1161, %.lr.ph1055 ], [ 0, %._crit_edge1052 ]
  call void %1058(ptr noundef nonnull %3) #10
  %1161 = add nuw nsw i32 %.91053, 1
  %exitcond1156.not = icmp eq i32 %1161, %44
  br i1 %exitcond1156.not, label %._crit_edge1056, label %.lr.ph1055, !llvm.loop !76

._crit_edge1056:                                  ; preds = %.lr.ph1055, %._crit_edge1052
  %1162 = call i64 @libxsmm_timer_tick() #10
  %1163 = call double @libxsmm_timer_duration(i64 noundef %1160, i64 noundef %1162) #10
  %1164 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %1163)
  %1165 = fcmp ogt double %1163, 0.000000e+00
  br i1 %1165, label %1166, label %1169

1166:                                             ; preds = %._crit_edge1056
  %1167 = fdiv double %1158, %1163
  %1168 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %44, double noundef %1167)
  br label %1169

1169:                                             ; preds = %1166, %._crit_edge1056
  %1170 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23)
  %1171 = load i32, ptr %146, align 8, !tbaa !9
  %1172 = sext i32 %1171 to i64
  %1173 = shl nsw i64 %1172, 1
  %1174 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %1173, i64 noundef 64) #10
  %1175 = load i32, ptr %146, align 8, !tbaa !9
  %1176 = sext i32 %1175 to i64
  %1177 = shl nsw i64 %1176, 2
  %1178 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %1177, i64 noundef 64) #10
  %1179 = load ptr, ptr %940, align 16, !tbaa !5
  %1180 = load i32, ptr %146, align 8, !tbaa !9
  %1181 = sext i32 %1180 to i64
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %1179, ptr noundef %1174, i64 noundef %1181) #10
  %1182 = load i32, ptr %146, align 8, !tbaa !9
  %1183 = sext i32 %1182 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %1174, ptr noundef %1178, i64 noundef %1183) #10
  %1184 = load i32, ptr %146, align 8, !tbaa !9
  %.sroa.0517.0.insert.ext = zext i32 %1184 to i64
  %.sroa.0517.4.insert.insert = or disjoint i64 %.sroa.0517.0.insert.ext, 4294967296
  %.sroa.5518.12.insert.ext = zext nneg i32 %.0917 to i64
  %.sroa.5518.12.insert.shift = shl nuw nsw i64 %.sroa.5518.12.insert.ext, 32
  %.sroa.5518.12.insert.insert = or disjoint i64 %.sroa.5518.12.insert.shift, %.sroa.0517.0.insert.ext
  %1185 = call i32 @libxsmm_meqn_create() #10
  %.sroa.16.16.insert.ext325 = zext i32 %1185 to i64
  %.sroa.16.16.insert.insert327 = or disjoint i64 %.sroa.16.16.insert.ext325, 8589934592
  %.sroa.29.24.insert.insert352 = or disjoint i64 %.sroa.16.16.insert.ext325, 12884901888
  %.sroa.42354.340.insert.insert362 = or disjoint i64 %.sroa.16.16.insert.ext325, 180388626432
  %.sroa.0.0.insert.insert261 = or disjoint i64 %.sroa.16.16.insert.ext325, -4294967296
  %.sroa.31.8.insert.insert281 = or disjoint i64 %.sroa.16.16.insert.ext325, 30064771072
  switch i32 %41, label %1188 [
    i32 2, label %1186
    i32 1, label %.sink.split1194
  ]

1186:                                             ; preds = %1169
  br label %.sink.split1194

.sink.split1194:                                  ; preds = %1169, %1186
  %.sink1195 = phi i32 [ 9, %1186 ], [ 5, %1169 ]
  %1187 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert261, i32 noundef %.sink1195, i32 noundef 1, i32 noundef 0) #10
  br label %1188

1188:                                             ; preds = %.sink.split1194, %1169
  %1189 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.0.0.insert.insert261, i32 noundef 1, i32 noundef 1, i32 noundef 4) #10
  %1190 = call i32 @libxsmm_meqn_push_back_unary_op(i64 %.sroa.0.0.insert.insert261, i32 noundef 14, i32 noundef 1, i32 noundef 0) #10
  %1191 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.42354.340.insert.insert362, i64 %.sroa.0517.4.insert.insert, i64 %.sroa.5518.12.insert.insert, i64 0, i64 undef) #10
  %1192 = call i32 @libxsmm_meqn_push_back_binary_op(i64 %.sroa.31.8.insert.insert281, i32 noundef 15, i32 noundef 2, i32 noundef 0) #10
  %1193 = load i64, ptr %289, align 16
  %1194 = load i64, ptr %291, align 8
  %1195 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.16.16.insert.insert327, i64 %1193, i64 %1194, i64 12884901889, i64 %.sroa.13488.12.insert.insert515) #10
  %1196 = load i64, ptr %294, align 16
  %1197 = load i64, ptr %296, align 8
  %1198 = call i32 @libxsmm_meqn_push_back_arg(i64 %.sroa.29.24.insert.insert352, i64 %1196, i64 %1197, i64 12884901889, i64 %.sroa.13443.12.insert.insert470) #10
  call void @libxsmm_meqn_tree_print(i32 noundef %1185) #10
  %1199 = load i64, ptr %299, align 16
  %1200 = load i64, ptr %301, align 8
  %1201 = call ptr @libxsmm_dispatch_meqn(i32 noundef %1185, i64 %1199, i64 %1200) #10
  %1202 = getelementptr inbounds i8, ptr %13, i64 2016
  store ptr %1174, ptr %1202, align 16, !tbaa !32
  call void %1201(ptr noundef nonnull %3) #10
  %1203 = load ptr, ptr %119, align 8, !tbaa !5
  %1204 = load i32, ptr %927, align 4, !tbaa !9
  %1205 = load i32, ptr %105, align 4, !tbaa !9
  %1206 = load i32, ptr %109, align 4, !tbaa !9
  %1207 = load ptr, ptr %10, align 16, !tbaa !5
  %1208 = load i32, ptr %5, align 16, !tbaa !9
  %1209 = load i32, ptr %6, align 16, !tbaa !9
  %1210 = load i32, ptr %7, align 16, !tbaa !9
  %1211 = load ptr, ptr %484, align 8, !tbaa !5
  %1212 = load i32, ptr %936, align 4, !tbaa !9
  %1213 = load i32, ptr %470, align 4, !tbaa !9
  %1214 = load i32, ptr %474, align 4, !tbaa !9
  %1215 = load i32, ptr %521, align 8, !tbaa !9
  %1216 = load ptr, ptr %940, align 16, !tbaa !5
  %1217 = load i32, ptr %146, align 8, !tbaa !9
  %1218 = load i32, ptr %830, align 8, !tbaa !9
  %1219 = load i32, ptr %836, align 8, !tbaa !9
  %1220 = mul nsw i32 %1219, %1218
  %1221 = load ptr, ptr %946, align 8, !tbaa !5
  %1222 = load i32, ptr %148, align 4, !tbaa !9
  %1223 = load i32, ptr %844, align 4, !tbaa !9
  %1224 = load i32, ptr %842, align 4, !tbaa !9
  %1225 = mul nsw i32 %1224, %1223
  call void @eqn4_f32(ptr noundef %1203, i32 noundef %1204, i32 noundef %1205, i32 noundef %1206, ptr noundef %1207, i32 noundef %1208, i32 noundef %1209, i32 noundef %1210, ptr noundef %1211, i32 noundef %1212, i32 noundef %1213, i32 noundef %1214, i32 noundef %1215, ptr noundef %1216, i32 noundef %1217, i32 noundef %1218, i32 noundef %1219, i32 noundef %1220, ptr noundef %1221, i32 noundef %1222, i32 noundef %1223, i32 noundef %1224, i32 noundef %1225, ptr noundef %1178, i32 noundef %41, ptr noundef %152)
  %1226 = load ptr, ptr %215, align 8, !tbaa !5
  %1227 = load ptr, ptr %213, align 8, !tbaa !5
  %1228 = load i32, ptr %109, align 4, !tbaa !9
  %1229 = load i32, ptr %105, align 4, !tbaa !9
  %1230 = mul nsw i32 %1229, %1228
  %1231 = load i32, ptr %113, align 4, !tbaa !9
  %1232 = mul nsw i32 %1230, %1231
  %1233 = sext i32 %1232 to i64
  call void @libxsmm_convert_bf16_f32(ptr noundef %1226, ptr noundef %1227, i64 noundef %1233) #10
  %1234 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %1235 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %1236 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %1237 = load i32, ptr %109, align 4, !tbaa !9
  %1238 = load i32, ptr %105, align 4, !tbaa !9
  %1239 = mul i32 %1237, %1231
  %1240 = mul i32 %1239, %1238
  %1241 = load ptr, ptr %119, align 8, !tbaa !5
  %1242 = load ptr, ptr %213, align 8, !tbaa !5
  %1243 = call i32 @libxsmm_matdiff(ptr noundef nonnull %4, i32 noundef 1, i32 noundef %1240, i32 noundef 1, ptr noundef %1241, ptr noundef %1242, ptr noundef null, ptr noundef null) #10
  %1244 = load double, ptr %365, align 8, !tbaa !35
  %1245 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, double noundef %1244)
  %1246 = load double, ptr %368, align 8, !tbaa !38
  %1247 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, double noundef %1246)
  %1248 = load double, ptr %371, align 8, !tbaa !39
  %1249 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, double noundef %1248)
  %1250 = load double, ptr %374, align 8, !tbaa !40
  %1251 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %1250)
  %1252 = load double, ptr %377, align 8, !tbaa !41
  %1253 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13, double noundef %1252)
  %1254 = load double, ptr %380, align 8, !tbaa !42
  %1255 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %1254)
  %1256 = load double, ptr %383, align 8, !tbaa !43
  %1257 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %1256)
  %1258 = load ptr, ptr %119, align 8, !tbaa !5
  %1259 = load i32, ptr %927, align 4, !tbaa !9
  %1260 = load i32, ptr %105, align 4, !tbaa !9
  %1261 = load i32, ptr %109, align 4, !tbaa !9
  %1262 = load ptr, ptr %10, align 16, !tbaa !5
  %1263 = load i32, ptr %5, align 16, !tbaa !9
  %1264 = load i32, ptr %6, align 16, !tbaa !9
  %1265 = load i32, ptr %7, align 16, !tbaa !9
  %1266 = load ptr, ptr %484, align 8, !tbaa !5
  %1267 = load i32, ptr %936, align 4, !tbaa !9
  %1268 = load i32, ptr %470, align 4, !tbaa !9
  %1269 = load i32, ptr %474, align 4, !tbaa !9
  %1270 = load ptr, ptr %940, align 16, !tbaa !5
  %1271 = load i32, ptr %146, align 8, !tbaa !9
  %1272 = load i32, ptr %830, align 8, !tbaa !9
  %1273 = load i32, ptr %836, align 8, !tbaa !9
  %1274 = mul nsw i32 %1273, %1272
  %1275 = load ptr, ptr %946, align 8, !tbaa !5
  %1276 = load i32, ptr %148, align 4, !tbaa !9
  %1277 = load i32, ptr %844, align 4, !tbaa !9
  %1278 = load i32, ptr %842, align 4, !tbaa !9
  %1279 = mul nsw i32 %1278, %1277
  call void @eqn4_f32(ptr noundef %1258, i32 noundef %1259, i32 noundef %1260, i32 noundef %1261, ptr noundef %1262, i32 noundef %1263, i32 noundef %1264, i32 noundef %1265, ptr noundef %1266, i32 noundef %1267, i32 noundef %1268, i32 noundef %1269, i32 noundef %1215, ptr noundef %1270, i32 noundef %1271, i32 noundef %1272, i32 noundef %1273, i32 noundef %1274, ptr noundef %1275, i32 noundef %1276, i32 noundef %1277, i32 noundef %1278, i32 noundef %1279, ptr noundef %1178, i32 noundef %41, ptr noundef %152)
  %1280 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1059, label %._crit_edge1060

.lr.ph1059:                                       ; preds = %1188, %.lr.ph1059
  %.101057 = phi i32 [ %1303, %.lr.ph1059 ], [ 0, %1188 ]
  %1281 = load ptr, ptr %119, align 8, !tbaa !5
  %1282 = load i32, ptr %927, align 4, !tbaa !9
  %1283 = load i32, ptr %105, align 4, !tbaa !9
  %1284 = load i32, ptr %109, align 4, !tbaa !9
  %1285 = load ptr, ptr %10, align 16, !tbaa !5
  %1286 = load i32, ptr %5, align 16, !tbaa !9
  %1287 = load i32, ptr %6, align 16, !tbaa !9
  %1288 = load i32, ptr %7, align 16, !tbaa !9
  %1289 = load ptr, ptr %484, align 8, !tbaa !5
  %1290 = load i32, ptr %936, align 4, !tbaa !9
  %1291 = load i32, ptr %470, align 4, !tbaa !9
  %1292 = load i32, ptr %474, align 4, !tbaa !9
  %1293 = load ptr, ptr %940, align 16, !tbaa !5
  %1294 = load i32, ptr %146, align 8, !tbaa !9
  %1295 = load i32, ptr %830, align 8, !tbaa !9
  %1296 = load i32, ptr %836, align 8, !tbaa !9
  %1297 = mul nsw i32 %1296, %1295
  %1298 = load ptr, ptr %946, align 8, !tbaa !5
  %1299 = load i32, ptr %148, align 4, !tbaa !9
  %1300 = load i32, ptr %844, align 4, !tbaa !9
  %1301 = load i32, ptr %842, align 4, !tbaa !9
  %1302 = mul nsw i32 %1301, %1300
  call void @eqn4_f32(ptr noundef %1281, i32 noundef %1282, i32 noundef %1283, i32 noundef %1284, ptr noundef %1285, i32 noundef %1286, i32 noundef %1287, i32 noundef %1288, ptr noundef %1289, i32 noundef %1290, i32 noundef %1291, i32 noundef %1292, i32 noundef %1215, ptr noundef %1293, i32 noundef %1294, i32 noundef %1295, i32 noundef %1296, i32 noundef %1297, ptr noundef %1298, i32 noundef %1299, i32 noundef %1300, i32 noundef %1301, i32 noundef %1302, ptr noundef %1178, i32 noundef %41, ptr noundef %152)
  %1303 = add nuw nsw i32 %.101057, 1
  %exitcond1157.not = icmp eq i32 %1303, %44
  br i1 %exitcond1157.not, label %._crit_edge1060, label %.lr.ph1059, !llvm.loop !77

._crit_edge1060:                                  ; preds = %.lr.ph1059, %1188
  %1304 = call i64 @libxsmm_timer_tick() #10
  %1305 = call double @libxsmm_timer_duration(i64 noundef %1280, i64 noundef %1304) #10
  %1306 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %1305)
  call void %1201(ptr noundef nonnull %3) #10
  %1307 = call i64 @libxsmm_timer_tick() #10
  br i1 %454, label %.lr.ph1063, label %._crit_edge1064

.lr.ph1063:                                       ; preds = %._crit_edge1060, %.lr.ph1063
  %.111061 = phi i32 [ %1308, %.lr.ph1063 ], [ 0, %._crit_edge1060 ]
  call void %1201(ptr noundef nonnull %3) #10
  %1308 = add nuw nsw i32 %.111061, 1
  %exitcond1158.not = icmp eq i32 %1308, %44
  br i1 %exitcond1158.not, label %._crit_edge1064, label %.lr.ph1063, !llvm.loop !78

._crit_edge1064:                                  ; preds = %.lr.ph1063, %._crit_edge1060
  %1309 = call i64 @libxsmm_timer_tick() #10
  %1310 = call double @libxsmm_timer_duration(i64 noundef %1307, i64 noundef %1309) #10
  %1311 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %1310)
  %1312 = fcmp ogt double %1310, 0.000000e+00
  br i1 %1312, label %1313, label %.lr.ph1067.preheader

1313:                                             ; preds = %._crit_edge1064
  %1314 = fdiv double %1305, %1310
  %1315 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, i32 noundef %44, double noundef %1314)
  br label %.lr.ph1067.preheader

.lr.ph1067.preheader:                             ; preds = %828, %829, %1313, %._crit_edge1064
  %.0915 = phi ptr [ %1178, %1313 ], [ %1178, %._crit_edge1064 ], [ null, %829 ], [ null, %828 ]
  %.0913 = phi ptr [ %853, %1313 ], [ %853, %._crit_edge1064 ], [ null, %829 ], [ null, %828 ]
  %.0912 = phi ptr [ %1174, %1313 ], [ %1174, %._crit_edge1064 ], [ null, %829 ], [ null, %828 ]
  %smax1162 = call i32 @llvm.smax.i32(i32 %18, i32 1)
  %wide.trip.count1163 = zext nneg i32 %smax1162 to i64
  br label %.lr.ph1067

.lr.ph1067:                                       ; preds = %.lr.ph1067.preheader, %.lr.ph1067
  %indvars.iv1159 = phi i64 [ 0, %.lr.ph1067.preheader ], [ %indvars.iv.next1160, %.lr.ph1067 ]
  %1316 = getelementptr inbounds [128 x ptr], ptr %11, i64 0, i64 %indvars.iv1159
  %1317 = load ptr, ptr %1316, align 8, !tbaa !5
  call void @libxsmm_free(ptr noundef %1317) #10
  %1318 = getelementptr inbounds [128 x ptr], ptr %10, i64 0, i64 %indvars.iv1159
  %1319 = load ptr, ptr %1318, align 8, !tbaa !5
  call void @libxsmm_free(ptr noundef %1319) #10
  %indvars.iv.next1160 = add nuw nsw i64 %indvars.iv1159, 1
  %exitcond1164.not = icmp eq i64 %indvars.iv.next1160, %wide.trip.count1163
  br i1 %exitcond1164.not, label %._crit_edge1068, label %.lr.ph1067, !llvm.loop !79

._crit_edge1068:                                  ; preds = %.lr.ph1067
  %1320 = load ptr, ptr %142, align 8, !tbaa !5
  call void @libxsmm_free(ptr noundef %1320) #10
  call void @libxsmm_free(ptr noundef %.0914) #10
  call void @libxsmm_free(ptr noundef %.0915) #10
  call void @libxsmm_free(ptr noundef %.0912) #10
  %1321 = load ptr, ptr %119, align 8, !tbaa !5
  call void @libxsmm_free(ptr noundef %1321) #10
  call void @libxsmm_free(ptr noundef %482) #10
  call void @libxsmm_free(ptr noundef %.0913) #10
  call void @libxsmm_free(ptr noundef %152) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 288, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 6144, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 6144, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3) #10
  ret i32 0
}

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

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

declare void @libxsmm_init() local_unnamed_addr #3

declare void @libxsmm_matdiff_clear(ptr noundef) local_unnamed_addr #3

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

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

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

declare noalias ptr @libxsmm_malloc(i64 noundef) local_unnamed_addr #3

declare double @libxsmm_rng_f64() local_unnamed_addr #3

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

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

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

declare i32 @libxsmm_meqn_create() local_unnamed_addr #3

declare i32 @libxsmm_meqn_push_back_binary_op(i64, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

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

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

declare void @libxsmm_meqn_tree_print(i32 noundef) local_unnamed_addr #3

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

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

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

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

declare i64 @libxsmm_timer_tick() local_unnamed_addr #3

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

declare i32 @libxsmm_meqn_push_back_ternary_op(i64, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

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

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

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

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

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

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #3

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

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

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

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


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