; LLVM IR from libxsmm/libxsmm :: src (generator_matequation_scratch_avx_avx512)

; 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_gemm_batch_reduce_config = type { i32, i32, i32, i8 }
%struct.libxsmm_meqn_elem = type { ptr, ptr, ptr, ptr, i32, %union.libxsmm_meqn_info, i32, i32, %struct.libxsmm_meqn_tmp_info, i32, i32, i32, %union.libxsmm_meqn_fusion_info }
%union.libxsmm_meqn_info = type { %struct.libxsmm_meqn_arg }
%struct.libxsmm_meqn_arg = type { i32, i32, i32, i32, i32, i32, i32, %struct.libxsmm_matrix_arg_attributes }
%struct.libxsmm_matrix_arg_attributes = type { i32, i32, i32, i32 }
%struct.libxsmm_meqn_tmp_info = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%union.libxsmm_meqn_fusion_info = type { %struct.libxsmm_meqn_xgemm_fusion_info }
%struct.libxsmm_meqn_xgemm_fusion_info = type { i32, i32, i32, i32, i32 }
%struct.libxsmm_meqn_binary_op = type { i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_meqn_ternary_op = type { i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_gemm_descriptor = type <{ i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], i8, i64, i64, i8, i32, i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, i32, i32, i32, i8 }>

@.str.1 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [821 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_matequation_gemm_set_descriptor = external hidden unnamed_addr constant [163 x i8], align 1
@__func__.libxsmm_generator_matequation_gemm_set_descriptor = external hidden unnamed_addr constant [50 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@.str.8 = external hidden unnamed_addr constant [726 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [426 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_matequation_gemm_set_descriptor(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %struct.libxsmm_gemm_batch_reduce_config, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 16384, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %22 = load ptr, ptr %6, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %22, i32 0, i32 8
  %24 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %23, i32 0, i32 1
  %25 = load i32, ptr %24, align 4, !tbaa !11
  store i32 %25, ptr %12, align 4, !tbaa !9
  %26 = load ptr, ptr %6, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %26, i32 0, i32 8
  %28 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %27, i32 0, i32 2
  %29 = load i32, ptr %28, align 8, !tbaa !11
  store i32 %29, ptr %13, align 4, !tbaa !9
  %30 = load ptr, ptr %6, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %30, i32 0, i32 0
  %32 = load ptr, ptr %31, align 8, !tbaa !11
  %33 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %32, i32 0, i32 4
  %34 = load i32, ptr %33, align 8, !tbaa !11
  %35 = icmp eq i32 %34, 8
  br i1 %35, label %36, label %55

36:                                               ; preds = %4
  %37 = load ptr, ptr %6, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !11
  %40 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %39, i32 0, i32 5
  %41 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %40, i32 0, i32 1
  %42 = load i32, ptr %41, align 4, !tbaa !11
  store i32 %42, ptr %14, align 4, !tbaa !9
  %43 = load ptr, ptr %6, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %43, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8, !tbaa !11
  %46 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %45, i32 0, i32 5
  %47 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %46, i32 0, i32 2
  %48 = load i32, ptr %47, align 4, !tbaa !11
  store i32 %48, ptr %15, align 4, !tbaa !9
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %49, i32 0, i32 0
  %51 = load ptr, ptr %50, align 8, !tbaa !11
  %52 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %51, i32 0, i32 5
  %53 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %52, i32 0, i32 5
  %54 = load i32, ptr %53, align 4, !tbaa !11
  store i32 %54, ptr %18, align 4, !tbaa !9
  br label %74

55:                                               ; preds = %4
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %56, i32 0, i32 0
  %58 = load ptr, ptr %57, align 8, !tbaa !11
  %59 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %58, i32 0, i32 8
  %60 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %59, i32 0, i32 2
  %61 = load i32, ptr %60, align 8, !tbaa !11
  store i32 %61, ptr %14, align 4, !tbaa !9
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %62, i32 0, i32 0
  %64 = load ptr, ptr %63, align 8, !tbaa !11
  %65 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %64, i32 0, i32 8
  %66 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %65, i32 0, i32 3
  %67 = load i32, ptr %66, align 4, !tbaa !11
  store i32 %67, ptr %15, align 4, !tbaa !9
  %68 = load ptr, ptr %6, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %68, i32 0, i32 0
  %70 = load ptr, ptr %69, align 8, !tbaa !11
  %71 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %70, i32 0, i32 8
  %72 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %71, i32 0, i32 4
  %73 = load i32, ptr %72, align 8, !tbaa !11
  store i32 %73, ptr %18, align 4, !tbaa !9
  br label %74

74:                                               ; preds = %55, %36
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %75, i32 0, i32 1
  %77 = load ptr, ptr %76, align 8, !tbaa !11
  %78 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %77, i32 0, i32 4
  %79 = load i32, ptr %78, align 8, !tbaa !11
  %80 = icmp eq i32 %79, 8
  br i1 %80, label %81, label %94

81:                                               ; preds = %74
  %82 = load ptr, ptr %6, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %82, i32 0, i32 1
  %84 = load ptr, ptr %83, align 8, !tbaa !11
  %85 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %84, i32 0, i32 5
  %86 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %85, i32 0, i32 2
  %87 = load i32, ptr %86, align 4, !tbaa !11
  store i32 %87, ptr %16, align 4, !tbaa !9
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %88, i32 0, i32 1
  %90 = load ptr, ptr %89, align 8, !tbaa !11
  %91 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %90, i32 0, i32 5
  %92 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %91, i32 0, i32 5
  %93 = load i32, ptr %92, align 4, !tbaa !11
  store i32 %93, ptr %19, align 4, !tbaa !9
  br label %107

94:                                               ; preds = %74
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %95, i32 0, i32 1
  %97 = load ptr, ptr %96, align 8, !tbaa !11
  %98 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %97, i32 0, i32 8
  %99 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %98, i32 0, i32 3
  %100 = load i32, ptr %99, align 4, !tbaa !11
  store i32 %100, ptr %16, align 4, !tbaa !9
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %101, i32 0, i32 1
  %103 = load ptr, ptr %102, align 8, !tbaa !11
  %104 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %103, i32 0, i32 8
  %105 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %104, i32 0, i32 4
  %106 = load i32, ptr %105, align 8, !tbaa !11
  store i32 %106, ptr %19, align 4, !tbaa !9
  br label %107

107:                                              ; preds = %94, %81
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %108, i32 0, i32 8
  %110 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %109, i32 0, i32 3
  %111 = load i32, ptr %110, align 4, !tbaa !11
  store i32 %111, ptr %17, align 4, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 4 %11, i8 0, i64 16, i1 false)
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %112, i32 0, i32 4
  %114 = load i32, ptr %113, align 8, !tbaa !11
  %115 = icmp eq i32 %114, 2
  br i1 %115, label %116, label %119

116:                                              ; preds = %107
  %117 = load i32, ptr %10, align 4, !tbaa !9
  %118 = or i32 %117, 4
  store i32 %118, ptr %10, align 4, !tbaa !9
  br label %119

119:                                              ; preds = %116, %107
  %120 = load ptr, ptr %6, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %120, i32 0, i32 4
  %122 = load i32, ptr %121, align 8, !tbaa !11
  %123 = icmp eq i32 %122, 2
  br i1 %123, label %124, label %130

124:                                              ; preds = %119
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %125, i32 0, i32 5
  %127 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %126, i32 0, i32 5
  %128 = load i32, ptr %127, align 4, !tbaa !11
  %129 = icmp eq i32 %128, 1
  br i1 %129, label %141, label %130

130:                                              ; preds = %124, %119
  %131 = load ptr, ptr %6, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %131, i32 0, i32 4
  %133 = load i32, ptr %132, align 8, !tbaa !11
  %134 = icmp eq i32 %133, 4
  br i1 %134, label %135, label %402

135:                                              ; preds = %130
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %136, i32 0, i32 5
  %138 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %137, i32 0, i32 5
  %139 = load i32, ptr %138, align 4, !tbaa !11
  %140 = icmp eq i32 %139, 1
  br i1 %140, label %141, label %402

141:                                              ; preds = %135, %124
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %142, i32 0, i32 0
  %144 = load ptr, ptr %143, align 8, !tbaa !11
  %145 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %144, i32 0, i32 4
  %146 = load i32, ptr %145, align 8, !tbaa !11
  %147 = icmp eq i32 %146, 8
  br i1 %147, label %148, label %342

148:                                              ; preds = %141
  %149 = load ptr, ptr %6, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %149, i32 0, i32 0
  %151 = load ptr, ptr %150, align 8, !tbaa !11
  %152 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %151, i32 0, i32 5
  %153 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %152, i32 0, i32 7
  %154 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %153, i32 0, i32 0
  %155 = load i32, ptr %154, align 4, !tbaa !11
  %156 = icmp eq i32 %155, 1
  br i1 %156, label %157, label %342

157:                                              ; preds = %148
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %158, i32 0, i32 0
  %160 = load ptr, ptr %159, align 8, !tbaa !11
  %161 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %160, i32 0, i32 5
  %162 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %161, i32 0, i32 7
  %163 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %162, i32 0, i32 2
  %164 = load i32, ptr %163, align 4, !tbaa !11
  %165 = icmp sle i32 %164, 255
  br i1 %165, label %166, label %174

166:                                              ; preds = %157
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %167, i32 0, i32 0
  %169 = load ptr, ptr %168, align 8, !tbaa !11
  %170 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %169, i32 0, i32 5
  %171 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %170, i32 0, i32 7
  %172 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %171, i32 0, i32 2
  %173 = load i32, ptr %172, align 4, !tbaa !11
  br label %175

174:                                              ; preds = %157
  br label %175

175:                                              ; preds = %174, %166
  %176 = phi i32 [ %173, %166 ], [ 0, %174 ]
  %177 = trunc i32 %176 to i8
  %178 = zext i8 %177 to i32
  %179 = icmp eq i32 0, %178
  br i1 %179, label %203, label %180

180:                                              ; preds = %175
  %181 = load ptr, ptr %6, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %181, i32 0, i32 0
  %183 = load ptr, ptr %182, align 8, !tbaa !11
  %184 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %183, i32 0, i32 5
  %185 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %184, i32 0, i32 7
  %186 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %185, i32 0, i32 2
  %187 = load i32, ptr %186, align 4, !tbaa !11
  %188 = icmp sle i32 %187, 255
  br i1 %188, label %189, label %197

189:                                              ; preds = %180
  %190 = load ptr, ptr %6, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %190, i32 0, i32 0
  %192 = load ptr, ptr %191, align 8, !tbaa !11
  %193 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %192, i32 0, i32 5
  %194 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %193, i32 0, i32 7
  %195 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %194, i32 0, i32 2
  %196 = load i32, ptr %195, align 4, !tbaa !11
  br label %198

197:                                              ; preds = %180
  br label %198

198:                                              ; preds = %197, %189
  %199 = phi i32 [ %196, %189 ], [ 0, %197 ]
  %200 = trunc i32 %199 to i8
  %201 = zext i8 %200 to i32
  %202 = icmp slt i32 0, %201
  br i1 %202, label %203, label %275

203:                                              ; preds = %198, %175
  %204 = load ptr, ptr %6, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %204, i32 0, i32 0
  %206 = load ptr, ptr %205, align 8, !tbaa !11
  %207 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %206, i32 0, i32 5
  %208 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %207, i32 0, i32 7
  %209 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %208, i32 0, i32 2
  %210 = load i32, ptr %209, align 4, !tbaa !11
  %211 = icmp sle i32 %210, 255
  br i1 %211, label %212, label %220

212:                                              ; preds = %203
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !11
  %216 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %215, i32 0, i32 5
  %217 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %216, i32 0, i32 7
  %218 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %217, i32 0, i32 2
  %219 = load i32, ptr %218, align 4, !tbaa !11
  br label %221

220:                                              ; preds = %203
  br label %221

221:                                              ; preds = %220, %212
  %222 = phi i32 [ %219, %212 ], [ 0, %220 ]
  %223 = sext i32 %222 to i64
  %224 = mul i64 1, %223
  %225 = icmp ult i64 %224, 255
  br i1 %225, label %226, label %248

226:                                              ; preds = %221
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %227, i32 0, i32 0
  %229 = load ptr, ptr %228, align 8, !tbaa !11
  %230 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %229, i32 0, i32 5
  %231 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %230, i32 0, i32 7
  %232 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %231, i32 0, i32 2
  %233 = load i32, ptr %232, align 4, !tbaa !11
  %234 = icmp sle i32 %233, 255
  br i1 %234, label %235, label %243

235:                                              ; preds = %226
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %236, i32 0, i32 0
  %238 = load ptr, ptr %237, align 8, !tbaa !11
  %239 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %238, i32 0, i32 5
  %240 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %239, i32 0, i32 7
  %241 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %240, i32 0, i32 2
  %242 = load i32, ptr %241, align 4, !tbaa !11
  br label %244

243:                                              ; preds = %226
  br label %244

244:                                              ; preds = %243, %235
  %245 = phi i32 [ %242, %235 ], [ 0, %243 ]
  %246 = sext i32 %245 to i64
  %247 = mul i64 1, %246
  br label %249

248:                                              ; preds = %221
  br label %249

249:                                              ; preds = %248, %244
  %250 = phi i64 [ %247, %244 ], [ 255, %248 ]
  %251 = icmp ule i64 %250, 255
  br i1 %251, label %252, label %275

252:                                              ; preds = %249
  %253 = load ptr, ptr %6, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %253, i32 0, i32 0
  %255 = load ptr, ptr %254, align 8, !tbaa !11
  %256 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %255, i32 0, i32 5
  %257 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %256, i32 0, i32 7
  %258 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %257, i32 0, i32 2
  %259 = load i32, ptr %258, align 4, !tbaa !11
  %260 = icmp sle i32 %259, 255
  br i1 %260, label %261, label %269

261:                                              ; preds = %252
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %262, i32 0, i32 0
  %264 = load ptr, ptr %263, align 8, !tbaa !11
  %265 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %264, i32 0, i32 5
  %266 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %265, i32 0, i32 7
  %267 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %266, i32 0, i32 2
  %268 = load i32, ptr %267, align 4, !tbaa !11
  br label %270

269:                                              ; preds = %252
  br label %270

270:                                              ; preds = %269, %261
  %271 = phi i32 [ %268, %261 ], [ 0, %269 ]
  %272 = sitofp i32 %271 to double
  %273 = fcmp ole double 0.000000e+00, %272
  br i1 %273, label %274, label %275

274:                                              ; preds = %270
  br label %276

275:                                              ; preds = %270, %249, %198
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 100, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_matequation_gemm_set_descriptor) #6
  unreachable

276:                                              ; preds = %274
  %277 = load ptr, ptr %6, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %277, i32 0, i32 0
  %279 = load ptr, ptr %278, align 8, !tbaa !11
  %280 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %279, i32 0, i32 5
  %281 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %280, i32 0, i32 7
  %282 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %281, i32 0, i32 2
  %283 = load i32, ptr %282, align 4, !tbaa !11
  %284 = icmp sle i32 %283, 255
  br i1 %284, label %285, label %293

285:                                              ; preds = %276
  %286 = load ptr, ptr %6, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %286, i32 0, i32 0
  %288 = load ptr, ptr %287, align 8, !tbaa !11
  %289 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %288, i32 0, i32 5
  %290 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %289, i32 0, i32 7
  %291 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %290, i32 0, i32 2
  %292 = load i32, ptr %291, align 4, !tbaa !11
  br label %294

293:                                              ; preds = %276
  br label %294

294:                                              ; preds = %293, %285
  %295 = phi i32 [ %292, %285 ], [ 0, %293 ]
  %296 = trunc i32 %295 to i8
  %297 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  store i8 %296, ptr %297, align 4, !tbaa !12
  %298 = load ptr, ptr %6, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %298, i32 0, i32 0
  %300 = load ptr, ptr %299, align 8, !tbaa !11
  %301 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %300, i32 0, i32 5
  %302 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %301, i32 0, i32 7
  %303 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %302, i32 0, i32 1
  %304 = load i32, ptr %303, align 4, !tbaa !11
  %305 = icmp eq i32 %304, 1
  br i1 %305, label %306, label %308

306:                                              ; preds = %294
  %307 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  store i32 1, ptr %307, align 4, !tbaa !14
  br label %341

308:                                              ; preds = %294
  %309 = load ptr, ptr %6, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %309, i32 0, i32 0
  %311 = load ptr, ptr %310, align 8, !tbaa !11
  %312 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %311, i32 0, i32 5
  %313 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %312, i32 0, i32 7
  %314 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %313, i32 0, i32 1
  %315 = load i32, ptr %314, align 4, !tbaa !11
  %316 = icmp eq i32 %315, 2
  br i1 %316, label %317, label %319

317:                                              ; preds = %308
  %318 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  store i32 2, ptr %318, align 4, !tbaa !14
  br label %340

319:                                              ; preds = %308
  %320 = load ptr, ptr %6, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %320, i32 0, i32 0
  %322 = load ptr, ptr %321, align 8, !tbaa !11
  %323 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %322, i32 0, i32 5
  %324 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %323, i32 0, i32 7
  %325 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %324, i32 0, i32 1
  %326 = load i32, ptr %325, align 4, !tbaa !11
  %327 = icmp eq i32 %326, 3
  br i1 %327, label %328, label %338

328:                                              ; preds = %319
  %329 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  store i32 4, ptr %329, align 4, !tbaa !14
  %330 = load ptr, ptr %6, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %330, i32 0, i32 0
  %332 = load ptr, ptr %331, align 8, !tbaa !11
  %333 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %332, i32 0, i32 5
  %334 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %333, i32 0, i32 7
  %335 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %334, i32 0, i32 3
  %336 = load i32, ptr %335, align 4, !tbaa !11
  %337 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 1
  store i32 %336, ptr %337, align 4, !tbaa !15
  br label %339

338:                                              ; preds = %319
  br label %339

339:                                              ; preds = %338, %328
  br label %340

340:                                              ; preds = %339, %317
  br label %341

341:                                              ; preds = %340, %306
  br label %342

342:                                              ; preds = %341, %148, %141
  %343 = load ptr, ptr %6, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %343, i32 0, i32 1
  %345 = load ptr, ptr %344, align 8, !tbaa !11
  %346 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %345, i32 0, i32 4
  %347 = load i32, ptr %346, align 8, !tbaa !11
  %348 = icmp eq i32 %347, 8
  br i1 %348, label %349, label %377

349:                                              ; preds = %342
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %350, i32 0, i32 1
  %352 = load ptr, ptr %351, align 8, !tbaa !11
  %353 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %352, i32 0, i32 5
  %354 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %353, i32 0, i32 7
  %355 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %354, i32 0, i32 0
  %356 = load i32, ptr %355, align 4, !tbaa !11
  %357 = icmp eq i32 %356, 1
  br i1 %357, label %358, label %377

358:                                              ; preds = %349
  %359 = load ptr, ptr %6, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %359, i32 0, i32 1
  %361 = load ptr, ptr %360, align 8, !tbaa !11
  %362 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %361, i32 0, i32 5
  %363 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %362, i32 0, i32 7
  %364 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %363, i32 0, i32 1
  %365 = load i32, ptr %364, align 4, !tbaa !11
  %366 = icmp eq i32 %365, 3
  br i1 %366, label %367, label %376

367:                                              ; preds = %358
  %368 = load ptr, ptr %6, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %368, i32 0, i32 1
  %370 = load ptr, ptr %369, align 8, !tbaa !11
  %371 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %370, i32 0, i32 5
  %372 = getelementptr inbounds %struct.libxsmm_meqn_arg, ptr %371, i32 0, i32 7
  %373 = getelementptr inbounds %struct.libxsmm_matrix_arg_attributes, ptr %372, i32 0, i32 3
  %374 = load i32, ptr %373, align 4, !tbaa !11
  %375 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 2
  store i32 %374, ptr %375, align 4, !tbaa !16
  br label %376

376:                                              ; preds = %367, %358
  br label %377

377:                                              ; preds = %376, %349, %342
  %378 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  %379 = load i32, ptr %378, align 4, !tbaa !14
  %380 = icmp eq i32 %379, 1
  br i1 %380, label %381, label %384

381:                                              ; preds = %377
  %382 = load i32, ptr %10, align 4, !tbaa !9
  %383 = or i32 %382, 65536
  store i32 %383, ptr %10, align 4, !tbaa !9
  br label %401

384:                                              ; preds = %377
  %385 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  %386 = load i32, ptr %385, align 4, !tbaa !14
  %387 = icmp eq i32 %386, 2
  br i1 %387, label %388, label %391

388:                                              ; preds = %384
  %389 = load i32, ptr %10, align 4, !tbaa !9
  %390 = or i32 %389, 131072
  store i32 %390, ptr %10, align 4, !tbaa !9
  br label %400

391:                                              ; preds = %384
  %392 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  %393 = load i32, ptr %392, align 4, !tbaa !14
  %394 = icmp eq i32 %393, 4
  br i1 %394, label %395, label %398

395:                                              ; preds = %391
  %396 = load i32, ptr %10, align 4, !tbaa !9
  %397 = or i32 %396, 262144
  store i32 %397, ptr %10, align 4, !tbaa !9
  br label %399

398:                                              ; preds = %391
  br label %399

399:                                              ; preds = %398, %395
  br label %400

400:                                              ; preds = %399, %388
  br label %401

401:                                              ; preds = %400, %381
  br label %402

402:                                              ; preds = %401, %135, %130
  %403 = load ptr, ptr %6, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %403, i32 0, i32 4
  %405 = load i32, ptr %404, align 8, !tbaa !11
  %406 = icmp eq i32 %405, 2
  br i1 %406, label %407, label %431

407:                                              ; preds = %402
  %408 = load ptr, ptr %6, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %408, i32 0, i32 5
  %410 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %409, i32 0, i32 0
  %411 = load i32, ptr %410, align 4, !tbaa !11
  %412 = icmp eq i32 %411, 15
  br i1 %412, label %460, label %413

413:                                              ; preds = %407
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %414, i32 0, i32 5
  %416 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %415, i32 0, i32 0
  %417 = load i32, ptr %416, align 4, !tbaa !11
  %418 = icmp eq i32 %417, 16
  br i1 %418, label %460, label %419

419:                                              ; preds = %413
  %420 = load ptr, ptr %6, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %420, i32 0, i32 5
  %422 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %421, i32 0, i32 0
  %423 = load i32, ptr %422, align 4, !tbaa !11
  %424 = icmp eq i32 %423, 17
  br i1 %424, label %460, label %425

425:                                              ; preds = %419
  %426 = load ptr, ptr %6, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %426, i32 0, i32 5
  %428 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %427, i32 0, i32 0
  %429 = load i32, ptr %428, align 4, !tbaa !11
  %430 = icmp eq i32 %429, 18
  br i1 %430, label %460, label %431

431:                                              ; preds = %425, %402
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %432, i32 0, i32 4
  %434 = load i32, ptr %433, align 8, !tbaa !11
  %435 = icmp eq i32 %434, 4
  br i1 %435, label %436, label %463

436:                                              ; preds = %431
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %437, i32 0, i32 5
  %439 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %438, i32 0, i32 0
  %440 = load i32, ptr %439, align 4, !tbaa !11
  %441 = icmp eq i32 %440, 9
  br i1 %441, label %460, label %442

442:                                              ; preds = %436
  %443 = load ptr, ptr %6, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %443, i32 0, i32 5
  %445 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %444, i32 0, i32 0
  %446 = load i32, ptr %445, align 4, !tbaa !11
  %447 = icmp eq i32 %446, 10
  br i1 %447, label %460, label %448

448:                                              ; preds = %442
  %449 = load ptr, ptr %6, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %449, i32 0, i32 5
  %451 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %450, i32 0, i32 0
  %452 = load i32, ptr %451, align 4, !tbaa !11
  %453 = icmp eq i32 %452, 11
  br i1 %453, label %460, label %454

454:                                              ; preds = %448
  %455 = load ptr, ptr %6, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %455, i32 0, i32 5
  %457 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %456, i32 0, i32 0
  %458 = load i32, ptr %457, align 4, !tbaa !11
  %459 = icmp eq i32 %458, 12
  br i1 %459, label %460, label %463

460:                                              ; preds = %454, %448, %442, %436, %425, %419, %413, %407
  %461 = load i32, ptr %10, align 4, !tbaa !9
  %462 = or i32 %461, 2048
  store i32 %462, ptr %10, align 4, !tbaa !9
  br label %463

463:                                              ; preds = %460, %454, %431
  %464 = load ptr, ptr %5, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %464, i32 0, i32 6
  %466 = load i32, ptr %465, align 4, !tbaa !17
  %467 = icmp ule i32 %466, 1999
  br i1 %467, label %468, label %504

468:                                              ; preds = %463
  %469 = load ptr, ptr %5, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %469, i32 0, i32 6
  %471 = load i32, ptr %470, align 4, !tbaa !17
  %472 = icmp uge i32 %471, 1006
  br i1 %472, label %473, label %504

473:                                              ; preds = %468
  %474 = load i32, ptr %18, align 4, !tbaa !9
  %475 = icmp eq i32 2, %474
  br i1 %475, label %476, label %504

476:                                              ; preds = %473
  %477 = load i32, ptr %14, align 4, !tbaa !9
  %478 = srem i32 %477, 2
  %479 = icmp ne i32 %478, 0
  br i1 %479, label %480, label %493

480:                                              ; preds = %476
  %481 = load i32, ptr %10, align 4, !tbaa !9
  %482 = and i32 %481, 2048
  %483 = icmp ne i32 %482, 0
  br i1 %483, label %484, label %493

484:                                              ; preds = %480
  %485 = load ptr, ptr %5, align 8, !tbaa !5
  %486 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %487 = icmp ult i32 1, %486
  br i1 %487, label %488, label %490

488:                                              ; preds = %484
  %489 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %491

490:                                              ; preds = %484
  br label %491

491:                                              ; preds = %490, %488
  %492 = phi i32 [ %489, %488 ], [ 1, %490 ]
  call void @libxsmm_handle_error(ptr noundef %485, i32 noundef 90004, ptr noundef @__func__.libxsmm_generator_matequation_gemm_set_descriptor, ptr noundef @.str.1, i32 noundef 148, i32 noundef %492)
  store i32 1, ptr %20, align 4
  br label %836

493:                                              ; preds = %480, %476
  %494 = load i32, ptr %10, align 4, !tbaa !9
  %495 = and i32 %494, 2048
  %496 = icmp eq i32 %495, 0
  br i1 %496, label %497, label %498

497:                                              ; preds = %493
  br label %503

498:                                              ; preds = %493
  %499 = load i32, ptr %14, align 4, !tbaa !9
  %500 = sdiv i32 %499, 2
  store i32 %500, ptr %14, align 4, !tbaa !9
  %501 = load i32, ptr %16, align 4, !tbaa !9
  %502 = sdiv i32 %501, 2
  store i32 %502, ptr %16, align 4, !tbaa !9
  br label %503

503:                                              ; preds = %498, %497
  br label %549

504:                                              ; preds = %473, %468, %463
  %505 = load ptr, ptr %5, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %505, i32 0, i32 6
  %507 = load i32, ptr %506, align 4, !tbaa !17
  %508 = icmp ule i32 %507, 1999
  br i1 %508, label %509, label %548

509:                                              ; preds = %504
  %510 = load ptr, ptr %5, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %510, i32 0, i32 6
  %512 = load i32, ptr %511, align 4, !tbaa !17
  %513 = icmp uge i32 %512, 1101
  br i1 %513, label %514, label %548

514:                                              ; preds = %509
  %515 = load i32, ptr %18, align 4, !tbaa !9
  %516 = icmp eq i32 4, %515
  br i1 %516, label %520, label %517

517:                                              ; preds = %514
  %518 = load i32, ptr %18, align 4, !tbaa !9
  %519 = icmp eq i32 5, %518
  br i1 %519, label %520, label %548

520:                                              ; preds = %517, %514
  %521 = load i32, ptr %14, align 4, !tbaa !9
  %522 = srem i32 %521, 4
  %523 = icmp ne i32 %522, 0
  br i1 %523, label %524, label %537

524:                                              ; preds = %520
  %525 = load i32, ptr %10, align 4, !tbaa !9
  %526 = and i32 %525, 2048
  %527 = icmp ne i32 %526, 0
  br i1 %527, label %528, label %537

528:                                              ; preds = %524
  %529 = load ptr, ptr %5, align 8, !tbaa !5
  %530 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %531 = icmp ult i32 1, %530
  br i1 %531, label %532, label %534

532:                                              ; preds = %528
  %533 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %535

534:                                              ; preds = %528
  br label %535

535:                                              ; preds = %534, %532
  %536 = phi i32 [ %533, %532 ], [ 1, %534 ]
  call void @libxsmm_handle_error(ptr noundef %529, i32 noundef 90004, ptr noundef @__func__.libxsmm_generator_matequation_gemm_set_descriptor, ptr noundef @.str.1, i32 noundef 160, i32 noundef %536)
  store i32 1, ptr %20, align 4
  br label %836

537:                                              ; preds = %524, %520
  %538 = load i32, ptr %10, align 4, !tbaa !9
  %539 = and i32 %538, 2048
  %540 = icmp eq i32 %539, 0
  br i1 %540, label %541, label %542

541:                                              ; preds = %537
  br label %547

542:                                              ; preds = %537
  %543 = load i32, ptr %14, align 4, !tbaa !9
  %544 = sdiv i32 %543, 4
  store i32 %544, ptr %14, align 4, !tbaa !9
  %545 = load i32, ptr %16, align 4, !tbaa !9
  %546 = sdiv i32 %545, 4
  store i32 %546, ptr %16, align 4, !tbaa !9
  br label %547

547:                                              ; preds = %542, %541
  br label %548

548:                                              ; preds = %547, %517, %509, %504
  br label %549

549:                                              ; preds = %548, %503
  %550 = load ptr, ptr %6, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %550, i32 0, i32 12
  %552 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %551, i32 0, i32 2
  %553 = load i32, ptr %552, align 4, !tbaa !11
  %554 = icmp eq i32 %553, 1
  br i1 %554, label %567, label %555

555:                                              ; preds = %549
  %556 = load ptr, ptr %6, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %556, i32 0, i32 12
  %558 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %557, i32 0, i32 1
  %559 = load i32, ptr %558, align 4, !tbaa !11
  %560 = icmp eq i32 %559, 1
  br i1 %560, label %567, label %561

561:                                              ; preds = %555
  %562 = load ptr, ptr %6, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %562, i32 0, i32 12
  %564 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %563, i32 0, i32 0
  %565 = load i32, ptr %564, align 4, !tbaa !11
  %566 = icmp eq i32 %565, 1
  br i1 %566, label %567, label %572

567:                                              ; preds = %561, %555, %549
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 -16385, ptr %21, align 4, !tbaa !9
  %568 = load i32, ptr %10, align 4, !tbaa !9
  %569 = load i32, ptr %21, align 4, !tbaa !9
  %570 = and i32 %568, %569
  %571 = or i32 %570, 32768
  store i32 %571, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  br label %572

572:                                              ; preds = %567, %561
  %573 = load ptr, ptr %7, align 8, !tbaa !5
  %574 = load i32, ptr %18, align 4, !tbaa !9
  %575 = load i32, ptr %19, align 4, !tbaa !9
  %576 = load ptr, ptr %6, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %576, i32 0, i32 8
  %578 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %577, i32 0, i32 4
  %579 = load i32, ptr %578, align 8, !tbaa !11
  %580 = load i32, ptr %12, align 4, !tbaa !9
  %581 = load i32, ptr %13, align 4, !tbaa !9
  %582 = load i32, ptr %14, align 4, !tbaa !9
  %583 = load i32, ptr %15, align 4, !tbaa !9
  %584 = load i32, ptr %16, align 4, !tbaa !9
  %585 = load i32, ptr %17, align 4, !tbaa !9
  %586 = load i32, ptr %10, align 4, !tbaa !9
  %587 = call ptr @libxsmm_gemm_descriptor_init(ptr noundef %573, i32 noundef %574, i32 noundef %575, i32 noundef %579, i32 noundef 1, i32 noundef %580, i32 noundef %581, i32 noundef %582, i32 noundef %583, i32 noundef %584, i32 noundef %585, i32 noundef %586, i32 noundef 0)
  store ptr %587, ptr %9, align 8, !tbaa !5
  %588 = load ptr, ptr %9, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %588, i32 0, i32 31
  %590 = load i8, ptr %589, align 1, !tbaa !19
  %591 = zext i8 %590 to i32
  %592 = and i32 %591, 251
  %593 = trunc i32 %592 to i8
  %594 = load ptr, ptr %9, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %594, i32 0, i32 31
  store i8 %593, ptr %595, align 1, !tbaa !19
  %596 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  %597 = load i32, ptr %596, align 4, !tbaa !14
  %598 = icmp ne i32 %597, 0
  br i1 %598, label %599, label %728

599:                                              ; preds = %572
  %600 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %601 = load i8, ptr %600, align 4, !tbaa !12
  %602 = zext i8 %601 to i32
  %603 = icmp ne i32 %602, 0
  br i1 %603, label %604, label %728

604:                                              ; preds = %599
  %605 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %606 = load i8, ptr %605, align 4, !tbaa !12
  %607 = zext i8 %606 to i32
  %608 = icmp slt i32 %607, 255
  br i1 %608, label %609, label %618

609:                                              ; preds = %604
  %610 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %611 = load i8, ptr %610, align 4, !tbaa !12
  %612 = zext i8 %611 to i32
  %613 = icmp sgt i32 %612, 0
  br i1 %613, label %614, label %618

614:                                              ; preds = %609
  %615 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %616 = load i8, ptr %615, align 4, !tbaa !12
  %617 = zext i8 %616 to i32
  br label %619

618:                                              ; preds = %609, %604
  br label %619

619:                                              ; preds = %618, %614
  %620 = phi i32 [ %617, %614 ], [ 0, %618 ]
  %621 = trunc i32 %620 to i8
  %622 = zext i8 %621 to i32
  %623 = icmp eq i32 0, %622
  br i1 %623, label %644, label %624

624:                                              ; preds = %619
  %625 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %626 = load i8, ptr %625, align 4, !tbaa !12
  %627 = zext i8 %626 to i32
  %628 = icmp slt i32 %627, 255
  br i1 %628, label %629, label %638

629:                                              ; preds = %624
  %630 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %631 = load i8, ptr %630, align 4, !tbaa !12
  %632 = zext i8 %631 to i32
  %633 = icmp sgt i32 %632, 0
  br i1 %633, label %634, label %638

634:                                              ; preds = %629
  %635 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %636 = load i8, ptr %635, align 4, !tbaa !12
  %637 = zext i8 %636 to i32
  br label %639

638:                                              ; preds = %629, %624
  br label %639

639:                                              ; preds = %638, %634
  %640 = phi i32 [ %637, %634 ], [ 0, %638 ]
  %641 = trunc i32 %640 to i8
  %642 = zext i8 %641 to i32
  %643 = icmp slt i32 0, %642
  br i1 %643, label %644, label %707

644:                                              ; preds = %639, %619
  %645 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %646 = load i8, ptr %645, align 4, !tbaa !12
  %647 = zext i8 %646 to i32
  %648 = icmp slt i32 %647, 255
  br i1 %648, label %649, label %658

649:                                              ; preds = %644
  %650 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %651 = load i8, ptr %650, align 4, !tbaa !12
  %652 = zext i8 %651 to i32
  %653 = icmp sgt i32 %652, 0
  br i1 %653, label %654, label %658

654:                                              ; preds = %649
  %655 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %656 = load i8, ptr %655, align 4, !tbaa !12
  %657 = zext i8 %656 to i32
  br label %659

658:                                              ; preds = %649, %644
  br label %659

659:                                              ; preds = %658, %654
  %660 = phi i32 [ %657, %654 ], [ 0, %658 ]
  %661 = sext i32 %660 to i64
  %662 = mul i64 1, %661
  %663 = icmp ult i64 %662, 255
  br i1 %663, label %664, label %683

664:                                              ; preds = %659
  %665 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %666 = load i8, ptr %665, align 4, !tbaa !12
  %667 = zext i8 %666 to i32
  %668 = icmp slt i32 %667, 255
  br i1 %668, label %669, label %678

669:                                              ; preds = %664
  %670 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %671 = load i8, ptr %670, align 4, !tbaa !12
  %672 = zext i8 %671 to i32
  %673 = icmp sgt i32 %672, 0
  br i1 %673, label %674, label %678

674:                                              ; preds = %669
  %675 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %676 = load i8, ptr %675, align 4, !tbaa !12
  %677 = zext i8 %676 to i32
  br label %679

678:                                              ; preds = %669, %664
  br label %679

679:                                              ; preds = %678, %674
  %680 = phi i32 [ %677, %674 ], [ 0, %678 ]
  %681 = sext i32 %680 to i64
  %682 = mul i64 1, %681
  br label %684

683:                                              ; preds = %659
  br label %684

684:                                              ; preds = %683, %679
  %685 = phi i64 [ %682, %679 ], [ 255, %683 ]
  %686 = icmp ule i64 %685, 255
  br i1 %686, label %687, label %707

687:                                              ; preds = %684
  %688 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %689 = load i8, ptr %688, align 4, !tbaa !12
  %690 = zext i8 %689 to i32
  %691 = icmp slt i32 %690, 255
  br i1 %691, label %692, label %701

692:                                              ; preds = %687
  %693 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %694 = load i8, ptr %693, align 4, !tbaa !12
  %695 = zext i8 %694 to i32
  %696 = icmp sgt i32 %695, 0
  br i1 %696, label %697, label %701

697:                                              ; preds = %692
  %698 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %699 = load i8, ptr %698, align 4, !tbaa !12
  %700 = zext i8 %699 to i32
  br label %702

701:                                              ; preds = %692, %687
  br label %702

702:                                              ; preds = %701, %697
  %703 = phi i32 [ %700, %697 ], [ 0, %701 ]
  %704 = sitofp i32 %703 to double
  %705 = fcmp ole double 0.000000e+00, %704
  br i1 %705, label %706, label %707

706:                                              ; preds = %702
  br label %708

707:                                              ; preds = %702, %684, %639
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 192, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_matequation_gemm_set_descriptor) #6
  unreachable

708:                                              ; preds = %706
  %709 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %710 = load i8, ptr %709, align 4, !tbaa !12
  %711 = zext i8 %710 to i32
  %712 = icmp slt i32 %711, 255
  br i1 %712, label %713, label %722

713:                                              ; preds = %708
  %714 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %715 = load i8, ptr %714, align 4, !tbaa !12
  %716 = zext i8 %715 to i32
  %717 = icmp sgt i32 %716, 0
  br i1 %717, label %718, label %722

718:                                              ; preds = %713
  %719 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 3
  %720 = load i8, ptr %719, align 4, !tbaa !12
  %721 = zext i8 %720 to i32
  br label %723

722:                                              ; preds = %713, %708
  br label %723

723:                                              ; preds = %722, %718
  %724 = phi i32 [ %721, %718 ], [ 0, %722 ]
  %725 = trunc i32 %724 to i8
  %726 = load ptr, ptr %9, align 8, !tbaa !5
  %727 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %726, i32 0, i32 12
  store i8 %725, ptr %727, align 1, !tbaa !23
  br label %728

728:                                              ; preds = %723, %599, %572
  %729 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 0
  %730 = load i32, ptr %729, align 4, !tbaa !14
  %731 = icmp eq i32 %730, 4
  br i1 %731, label %732, label %743

732:                                              ; preds = %728
  %733 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 1
  %734 = load i32, ptr %733, align 4, !tbaa !15
  %735 = sext i32 %734 to i64
  %736 = load ptr, ptr %9, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %736, i32 0, i32 10
  store i64 %735, ptr %737, align 1, !tbaa !24
  %738 = getelementptr inbounds %struct.libxsmm_gemm_batch_reduce_config, ptr %11, i32 0, i32 2
  %739 = load i32, ptr %738, align 4, !tbaa !16
  %740 = sext i32 %739 to i64
  %741 = load ptr, ptr %9, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %741, i32 0, i32 11
  store i64 %740, ptr %742, align 1, !tbaa !25
  br label %743

743:                                              ; preds = %732, %728
  %744 = load ptr, ptr %6, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %744, i32 0, i32 12
  %746 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %745, i32 0, i32 2
  %747 = load i32, ptr %746, align 4, !tbaa !11
  %748 = icmp eq i32 %747, 1
  br i1 %748, label %749, label %807

749:                                              ; preds = %743
  %750 = load ptr, ptr %9, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %750, i32 0, i32 18
  store i8 2, ptr %751, align 1, !tbaa !26
  %752 = load ptr, ptr %9, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %752, i32 0, i32 16
  store i16 1, ptr %753, align 1, !tbaa !27
  %754 = load ptr, ptr %9, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %754, i32 0, i32 17
  store i16 8, ptr %755, align 1, !tbaa !28
  %756 = load ptr, ptr %6, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %756, i32 0, i32 12
  %758 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %757, i32 0, i32 4
  %759 = load i32, ptr %758, align 4, !tbaa !11
  %760 = trunc i32 %759 to i8
  %761 = zext i8 %760 to i32
  %762 = icmp eq i32 0, %761
  br i1 %762, label %771, label %763

763:                                              ; preds = %749
  %764 = load ptr, ptr %6, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %764, i32 0, i32 12
  %766 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %765, i32 0, i32 4
  %767 = load i32, ptr %766, align 4, !tbaa !11
  %768 = trunc i32 %767 to i8
  %769 = zext i8 %768 to i32
  %770 = icmp slt i32 0, %769
  br i1 %770, label %771, label %798

771:                                              ; preds = %763, %749
  %772 = load ptr, ptr %6, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %772, i32 0, i32 12
  %774 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %773, i32 0, i32 4
  %775 = load i32, ptr %774, align 4, !tbaa !11
  %776 = zext i32 %775 to i64
  %777 = mul i64 1, %776
  %778 = icmp ult i64 %777, 255
  br i1 %778, label %779, label %786

779:                                              ; preds = %771
  %780 = load ptr, ptr %6, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %780, i32 0, i32 12
  %782 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %781, i32 0, i32 4
  %783 = load i32, ptr %782, align 4, !tbaa !11
  %784 = zext i32 %783 to i64
  %785 = mul i64 1, %784
  br label %787

786:                                              ; preds = %771
  br label %787

787:                                              ; preds = %786, %779
  %788 = phi i64 [ %785, %779 ], [ 255, %786 ]
  %789 = icmp ule i64 %788, 255
  br i1 %789, label %790, label %798

790:                                              ; preds = %787
  %791 = load ptr, ptr %6, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %791, i32 0, i32 12
  %793 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %792, i32 0, i32 4
  %794 = load i32, ptr %793, align 4, !tbaa !11
  %795 = uitofp i32 %794 to double
  %796 = fcmp ole double 0.000000e+00, %795
  br i1 %796, label %797, label %798

797:                                              ; preds = %790
  br label %799

798:                                              ; preds = %790, %787, %763
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 203, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_matequation_gemm_set_descriptor) #6
  unreachable

799:                                              ; preds = %797
  %800 = load ptr, ptr %6, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %800, i32 0, i32 12
  %802 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %801, i32 0, i32 4
  %803 = load i32, ptr %802, align 4, !tbaa !11
  %804 = trunc i32 %803 to i8
  %805 = load ptr, ptr %9, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %805, i32 0, i32 9
  store i8 %804, ptr %806, align 1, !tbaa !29
  br label %807

807:                                              ; preds = %799, %743
  %808 = load ptr, ptr %6, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %808, i32 0, i32 12
  %810 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %809, i32 0, i32 1
  %811 = load i32, ptr %810, align 4, !tbaa !11
  %812 = icmp eq i32 %811, 1
  br i1 %812, label %813, label %820

813:                                              ; preds = %807
  %814 = load ptr, ptr %9, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %814, i32 0, i32 21
  store i8 1, ptr %815, align 1, !tbaa !30
  %816 = load ptr, ptr %9, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %816, i32 0, i32 27
  store i16 5, ptr %817, align 1, !tbaa !31
  %818 = load ptr, ptr %9, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %818, i32 0, i32 24
  store i16 0, ptr %819, align 1, !tbaa !32
  br label %820

820:                                              ; preds = %813, %807
  %821 = load ptr, ptr %6, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %821, i32 0, i32 12
  %823 = getelementptr inbounds %struct.libxsmm_meqn_xgemm_fusion_info, ptr %822, i32 0, i32 0
  %824 = load i32, ptr %823, align 4, !tbaa !11
  %825 = icmp eq i32 %824, 1
  br i1 %825, label %826, label %833

826:                                              ; preds = %820
  %827 = load ptr, ptr %9, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %827, i32 0, i32 21
  store i8 1, ptr %828, align 1, !tbaa !30
  %829 = load ptr, ptr %9, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %829, i32 0, i32 27
  store i16 9, ptr %830, align 1, !tbaa !31
  %831 = load ptr, ptr %9, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %831, i32 0, i32 24
  store i16 0, ptr %832, align 1, !tbaa !32
  br label %833

833:                                              ; preds = %826, %820
  %834 = load ptr, ptr %9, align 8, !tbaa !5
  %835 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %834, ptr %835, align 8, !tbaa !5
  store i32 0, ptr %20, align 4
  br label %836

836:                                              ; preds = %833, %535, %491
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  %837 = load i32, ptr %20, align 4
  switch i32 %837, label %839 [
    i32 0, label %838
    i32 1, label %838
  ]

838:                                              ; preds = %836, %836
  ret void

839:                                              ; preds = %836
  unreachable
}

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

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #4

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }
attributes #6 = { 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 = !{!7, !7, i64 0}
!12 = !{!13, !7, i64 12}
!13 = !{!"libxsmm_gemm_batch_reduce_config", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 12}
!14 = !{!13, !10, i64 0}
!15 = !{!13, !10, i64 4}
!16 = !{!13, !10, i64 8}
!17 = !{!18, !10, i64 28}
!18 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!19 = !{!20, !7, i64 94}
!20 = !{!"libxsmm_gemm_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !7, i64 28, !7, i64 29, !7, i64 32, !21, i64 33, !21, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !22, i64 62, !22, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !22, i64 70, !22, i64 72, !22, i64 74, !22, i64 76, !22, i64 78, !22, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!21 = !{!"long long", !7, i64 0}
!22 = !{!"short", !7, i64 0}
!23 = !{!20, !7, i64 49}
!24 = !{!20, !21, i64 33}
!25 = !{!20, !21, i64 41}
!26 = !{!20, !7, i64 66}
!27 = !{!20, !22, i64 62}
!28 = !{!20, !22, i64 64}
!29 = !{!20, !7, i64 32}
!30 = !{!20, !7, i64 69}
!31 = !{!20, !22, i64 80}
!32 = !{!20, !22, i64 74}


; 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"

@.str.1 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [821 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_matequation_gemm_set_descriptor = external hidden unnamed_addr constant [163 x i8], align 1
@__func__.libxsmm_generator_matequation_gemm_set_descriptor = external hidden unnamed_addr constant [50 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_matequation_gemm_set_descriptor(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr nocapture noundef writeonly %3) local_unnamed_addr #1 {
  %5 = getelementptr inbounds i8, ptr %1, i64 92
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %1, i64 96
  %8 = load i32, ptr %7, align 8, !tbaa !5
  %9 = load ptr, ptr %1, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %9, i64 32
  %11 = load i32, ptr %10, align 8, !tbaa !5
  %12 = icmp eq i32 %11, 8
  %.0195.in.v = select i1 %12, i64 40, i64 96
  %.0195.in = getelementptr inbounds i8, ptr %9, i64 %.0195.in.v
  %.0194.in.v = select i1 %12, i64 44, i64 100
  %.0194.in = getelementptr inbounds i8, ptr %9, i64 %.0194.in.v
  %.0192.in.v = select i1 %12, i64 56, i64 104
  %.0192.in = getelementptr inbounds i8, ptr %9, i64 %.0192.in.v
  %.0192 = load i32, ptr %.0192.in, align 4, !tbaa !5
  %.0194 = load i32, ptr %.0194.in, align 4, !tbaa !5
  %.0195 = load i32, ptr %.0195.in, align 4, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %1, i64 8
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %14, i64 32
  %16 = load i32, ptr %15, align 8, !tbaa !5
  %17 = icmp eq i32 %16, 8
  %.0193.in.v = select i1 %17, i64 44, i64 100
  %.0193.in = getelementptr inbounds i8, ptr %14, i64 %.0193.in.v
  %.0.in.v = select i1 %17, i64 56, i64 104
  %.0.in = getelementptr inbounds i8, ptr %14, i64 %.0.in.v
  %.0 = load i32, ptr %.0.in, align 4, !tbaa !5
  %.0193 = load i32, ptr %.0193.in, align 4, !tbaa !5
  %18 = getelementptr inbounds i8, ptr %1, i64 100
  %19 = load i32, ptr %18, align 4, !tbaa !5
  %20 = getelementptr inbounds i8, ptr %1, i64 32
  %21 = load i32, ptr %20, align 8, !tbaa !5
  %22 = icmp eq i32 %21, 2
  %.0197 = select i1 %22, i32 16388, i32 16384
  br i1 %22, label %23, label %27

23:                                               ; preds = %4
  %24 = getelementptr inbounds i8, ptr %1, i64 56
  %25 = load i32, ptr %24, align 4, !tbaa !5
  %26 = icmp eq i32 %25, 1
  br i1 %26, label %33, label %.thread253

27:                                               ; preds = %4
  %28 = icmp eq i32 %21, 4
  br i1 %28, label %29, label %.thread233

29:                                               ; preds = %27
  %30 = getelementptr inbounds i8, ptr %1, i64 56
  %31 = load i32, ptr %30, align 4, !tbaa !5
  %32 = icmp eq i32 %31, 1
  br i1 %32, label %33, label %.thread233.thread

33:                                               ; preds = %29, %23
  br i1 %12, label %34, label %51

34:                                               ; preds = %33
  %35 = getelementptr inbounds i8, ptr %9, i64 64
  %36 = load i32, ptr %35, align 4, !tbaa !5
  %37 = icmp eq i32 %36, 1
  br i1 %37, label %38, label %51

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %9, i64 72
  %40 = load i32, ptr %39, align 4, !tbaa !5
  %41 = icmp slt i32 %40, 256
  %spec.select = select i1 %41, i32 %40, i32 0
  %42 = icmp sgt i32 %spec.select, -1
  br i1 %42, label %.thread232, label %43

43:                                               ; preds = %38
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 100, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_matequation_gemm_set_descriptor) #3
  unreachable

.thread232:                                       ; preds = %38
  %44 = trunc i32 %spec.select to i8
  %45 = getelementptr inbounds i8, ptr %9, i64 68
  %46 = load i32, ptr %45, align 4, !tbaa !5
  switch i32 %46, label %.fold.split [
    i32 1, label %51
    i32 2, label %47
    i32 3, label %48
  ]

47:                                               ; preds = %.thread232
  br label %51

48:                                               ; preds = %.thread232
  %49 = getelementptr inbounds i8, ptr %9, i64 76
  %50 = load i32, ptr %49, align 4, !tbaa !5
  br label %51

.fold.split:                                      ; preds = %.thread232
  br label %51

51:                                               ; preds = %.thread232, %.fold.split, %48, %47, %34, %33
  %52 = phi i1 [ false, %47 ], [ false, %48 ], [ false, %34 ], [ false, %33 ], [ true, %.thread232 ], [ false, %.fold.split ]
  %53 = phi i1 [ true, %47 ], [ false, %48 ], [ false, %34 ], [ false, %33 ], [ false, %.thread232 ], [ false, %.fold.split ]
  %54 = phi i1 [ false, %47 ], [ true, %48 ], [ false, %34 ], [ false, %33 ], [ false, %.thread232 ], [ false, %.fold.split ]
  %.sroa.0.0 = phi i32 [ %46, %47 ], [ 4, %48 ], [ 0, %34 ], [ 0, %33 ], [ %46, %.thread232 ], [ 0, %.fold.split ]
  %.sroa.11.0 = phi i32 [ 0, %47 ], [ %50, %48 ], [ 0, %34 ], [ 0, %33 ], [ 0, %.thread232 ], [ 0, %.fold.split ]
  %.sroa.15.0 = phi i8 [ %44, %47 ], [ %44, %48 ], [ 0, %34 ], [ 0, %33 ], [ %44, %.thread232 ], [ %44, %.fold.split ]
  br i1 %17, label %55, label %66

55:                                               ; preds = %51
  %56 = getelementptr inbounds i8, ptr %14, i64 64
  %57 = load i32, ptr %56, align 4, !tbaa !5
  %58 = icmp eq i32 %57, 1
  br i1 %58, label %59, label %66

59:                                               ; preds = %55
  %60 = getelementptr inbounds i8, ptr %14, i64 68
  %61 = load i32, ptr %60, align 4, !tbaa !5
  %62 = icmp eq i32 %61, 3
  br i1 %62, label %63, label %66

63:                                               ; preds = %59
  %64 = getelementptr inbounds i8, ptr %14, i64 76
  %65 = load i32, ptr %64, align 4, !tbaa !5
  br label %66

66:                                               ; preds = %59, %63, %55, %51
  %.sroa.13.0 = phi i32 [ %65, %63 ], [ 0, %59 ], [ 0, %55 ], [ 0, %51 ]
  br i1 %52, label %67, label %69

67:                                               ; preds = %66
  %68 = or disjoint i32 %.0197, 65536
  br label %74

69:                                               ; preds = %66
  br i1 %53, label %70, label %72

70:                                               ; preds = %69
  %71 = or disjoint i32 %.0197, 131072
  br label %74

72:                                               ; preds = %69
  %73 = or disjoint i32 %.0197, 262144
  %spec.select224 = select i1 %54, i32 %73, i32 %.0197
  %spec.select225 = select i1 %54, i32 4, i32 %.sroa.0.0
  br label %74

74:                                               ; preds = %72, %67, %70
  %.1198 = phi i32 [ %68, %67 ], [ %71, %70 ], [ %spec.select224, %72 ]
  %.sroa.0.1 = phi i32 [ 1, %67 ], [ 2, %70 ], [ %spec.select225, %72 ]
  br i1 %22, label %.thread253, label %.thread233

.thread253:                                       ; preds = %23, %74
  %.sroa.15.1263 = phi i8 [ %.sroa.15.0, %74 ], [ 0, %23 ]
  %.sroa.13.1262 = phi i32 [ %.sroa.13.0, %74 ], [ 0, %23 ]
  %.sroa.11.1261 = phi i32 [ %.sroa.11.0, %74 ], [ 0, %23 ]
  %.sroa.0.1260 = phi i32 [ %.sroa.0.1, %74 ], [ 0, %23 ]
  %.1198259 = phi i32 [ %.1198, %74 ], [ 16388, %23 ]
  %75 = getelementptr inbounds i8, ptr %1, i64 36
  %76 = load i32, ptr %75, align 4, !tbaa !5
  %.off = add i32 %76, -15
  %switch = icmp ult i32 %.off, 4
  br i1 %switch, label %80, label %.thread264

.thread233:                                       ; preds = %27, %74
  %.sroa.15.1252 = phi i8 [ %.sroa.15.0, %74 ], [ 0, %27 ]
  %.sroa.13.1249 = phi i32 [ %.sroa.13.0, %74 ], [ 0, %27 ]
  %.sroa.11.1246 = phi i32 [ %.sroa.11.0, %74 ], [ 0, %27 ]
  %.sroa.0.1243 = phi i32 [ %.sroa.0.1, %74 ], [ 0, %27 ]
  %.1198240 = phi i32 [ %.1198, %74 ], [ 16384, %27 ]
  %77 = icmp eq i32 %21, 4
  br i1 %77, label %.thread233.thread, label %.thread264

.thread233.thread:                                ; preds = %29, %.thread233
  %.1198240283 = phi i32 [ %.1198240, %.thread233 ], [ 16384, %29 ]
  %.sroa.0.1243282 = phi i32 [ %.sroa.0.1243, %.thread233 ], [ 0, %29 ]
  %.sroa.11.1246281 = phi i32 [ %.sroa.11.1246, %.thread233 ], [ 0, %29 ]
  %.sroa.13.1249280 = phi i32 [ %.sroa.13.1249, %.thread233 ], [ 0, %29 ]
  %.sroa.15.1252279 = phi i8 [ %.sroa.15.1252, %.thread233 ], [ 0, %29 ]
  %78 = getelementptr inbounds i8, ptr %1, i64 36
  %79 = load i32, ptr %78, align 4, !tbaa !5
  %.off230 = add i32 %79, -9
  %switch231 = icmp ult i32 %.off230, 4
  br i1 %switch231, label %80, label %.thread264

80:                                               ; preds = %.thread233.thread, %.thread253
  %.sroa.15.1251 = phi i8 [ %.sroa.15.1252279, %.thread233.thread ], [ %.sroa.15.1263, %.thread253 ]
  %.sroa.13.1248 = phi i32 [ %.sroa.13.1249280, %.thread233.thread ], [ %.sroa.13.1262, %.thread253 ]
  %.sroa.11.1245 = phi i32 [ %.sroa.11.1246281, %.thread233.thread ], [ %.sroa.11.1261, %.thread253 ]
  %.sroa.0.1242 = phi i32 [ %.sroa.0.1243282, %.thread233.thread ], [ %.sroa.0.1260, %.thread253 ]
  %.1198239 = phi i32 [ %.1198240283, %.thread233.thread ], [ %.1198259, %.thread253 ]
  %81 = or i32 %.1198239, 2048
  br label %.thread264

.thread264:                                       ; preds = %.thread253, %.thread233.thread, %80, %.thread233
  %.sroa.15.1250 = phi i8 [ %.sroa.15.1251, %80 ], [ %.sroa.15.1252, %.thread233 ], [ %.sroa.15.1252279, %.thread233.thread ], [ %.sroa.15.1263, %.thread253 ]
  %.sroa.13.1247 = phi i32 [ %.sroa.13.1248, %80 ], [ %.sroa.13.1249, %.thread233 ], [ %.sroa.13.1249280, %.thread233.thread ], [ %.sroa.13.1262, %.thread253 ]
  %.sroa.11.1244 = phi i32 [ %.sroa.11.1245, %80 ], [ %.sroa.11.1246, %.thread233 ], [ %.sroa.11.1246281, %.thread233.thread ], [ %.sroa.11.1261, %.thread253 ]
  %.sroa.0.1241 = phi i32 [ %.sroa.0.1242, %80 ], [ %.sroa.0.1243, %.thread233 ], [ %.sroa.0.1243282, %.thread233.thread ], [ %.sroa.0.1260, %.thread253 ]
  %.2 = phi i32 [ %81, %80 ], [ %.1198240, %.thread233 ], [ %.1198240283, %.thread233.thread ], [ %.1198259, %.thread253 ]
  %82 = getelementptr inbounds i8, ptr %0, i64 28
  %83 = load i32, ptr %82, align 4, !tbaa !8
  %84 = icmp ult i32 %83, 2000
  br i1 %84, label %85, label %.thread270

85:                                               ; preds = %.thread264
  %86 = icmp ugt i32 %83, 1005
  %87 = icmp eq i32 %.0192, 2
  %or.cond = select i1 %86, i1 %87, i1 false
  br i1 %or.cond, label %88, label %100

88:                                               ; preds = %85
  %89 = and i32 %.0195, 1
  %.not215 = icmp eq i32 %89, 0
  %90 = and i32 %.2, 2048
  %.not216 = icmp eq i32 %90, 0
  %or.cond226 = select i1 %.not215, i1 true, i1 %.not216
  br i1 %or.cond226, label %96, label %91

91:                                               ; preds = %88
  %92 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %93 = icmp ugt i32 %92, 1
  %94 = load i32, ptr @libxsmm_verbosity, align 4
  %95 = select i1 %93, i32 %94, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90004, ptr noundef nonnull @__func__.libxsmm_generator_matequation_gemm_set_descriptor, ptr noundef nonnull @.str.1, i32 noundef 148, i32 noundef %95) #4
  br label %174

96:                                               ; preds = %88
  br i1 %.not216, label %.thread270, label %97

97:                                               ; preds = %96
  %98 = sdiv i32 %.0195, 2
  %99 = sdiv i32 %.0193, 2
  br label %.thread270

100:                                              ; preds = %85
  %101 = add nsw i32 %83, -1101
  %or.cond227 = icmp ult i32 %101, 899
  %102 = and i32 %.0192, -2
  %or.cond3 = icmp eq i32 %102, 4
  %or.cond228 = select i1 %or.cond227, i1 %or.cond3, i1 false
  br i1 %or.cond228, label %103, label %.thread270

103:                                              ; preds = %100
  %104 = and i32 %.0195, 3
  %.not213 = icmp eq i32 %104, 0
  %105 = and i32 %.2, 2048
  %.not214 = icmp eq i32 %105, 0
  %or.cond229 = select i1 %.not213, i1 true, i1 %.not214
  br i1 %or.cond229, label %111, label %106

106:                                              ; preds = %103
  %107 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %108 = icmp ugt i32 %107, 1
  %109 = load i32, ptr @libxsmm_verbosity, align 4
  %110 = select i1 %108, i32 %109, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90004, ptr noundef nonnull @__func__.libxsmm_generator_matequation_gemm_set_descriptor, ptr noundef nonnull @.str.1, i32 noundef 160, i32 noundef %110) #4
  br label %174

111:                                              ; preds = %103
  br i1 %.not214, label %.thread270, label %112

112:                                              ; preds = %111
  %113 = sdiv i32 %.0195, 4
  %114 = sdiv i32 %.0193, 4
  br label %.thread270

.thread270:                                       ; preds = %.thread264, %100, %111, %112, %97, %96
  %.1196 = phi i32 [ %.0195, %96 ], [ %98, %97 ], [ %.0195, %111 ], [ %113, %112 ], [ %.0195, %100 ], [ %.0195, %.thread264 ]
  %.1 = phi i32 [ %.0193, %96 ], [ %99, %97 ], [ %.0193, %111 ], [ %114, %112 ], [ %.0193, %100 ], [ %.0193, %.thread264 ]
  %115 = getelementptr inbounds i8, ptr %1, i64 164
  %116 = getelementptr inbounds i8, ptr %1, i64 172
  %117 = load i32, ptr %116, align 4, !tbaa !5
  %118 = icmp eq i32 %117, 1
  br i1 %118, label %126, label %119

119:                                              ; preds = %.thread270
  %120 = getelementptr inbounds i8, ptr %1, i64 168
  %121 = load i32, ptr %120, align 4, !tbaa !5
  %122 = icmp eq i32 %121, 1
  br i1 %122, label %126, label %123

123:                                              ; preds = %119
  %124 = load i32, ptr %115, align 4, !tbaa !5
  %125 = icmp eq i32 %124, 1
  br i1 %125, label %126, label %129

126:                                              ; preds = %123, %119, %.thread270
  %127 = and i32 %.2, -49153
  %128 = or disjoint i32 %127, 32768
  br label %129

129:                                              ; preds = %126, %123
  %.3 = phi i32 [ %128, %126 ], [ %.2, %123 ]
  %130 = getelementptr inbounds i8, ptr %1, i64 104
  %131 = load i32, ptr %130, align 8, !tbaa !5
  %132 = tail call ptr @libxsmm_gemm_descriptor_init(ptr noundef %2, i32 noundef %.0192, i32 noundef %.0, i32 noundef %131, i32 noundef 1, i32 noundef %6, i32 noundef %8, i32 noundef %.1196, i32 noundef %.0194, i32 noundef %.1, i32 noundef %19, i32 noundef %.3, i32 noundef 0) #4
  %133 = getelementptr inbounds i8, ptr %132, i64 94
  %134 = load i8, ptr %133, align 1, !tbaa !13
  %135 = and i8 %134, -5
  store i8 %135, ptr %133, align 1, !tbaa !13
  %136 = icmp ne i32 %.sroa.0.1241, 0
  %137 = icmp ne i8 %.sroa.15.1250, 0
  %or.cond7 = and i1 %137, %136
  br i1 %or.cond7, label %138, label %140

138:                                              ; preds = %129
  %.not217 = icmp eq i8 %.sroa.15.1250, -1
  %narrow = select i1 %.not217, i8 0, i8 %.sroa.15.1250
  %139 = getelementptr inbounds i8, ptr %132, i64 49
  store i8 %narrow, ptr %139, align 1, !tbaa !17
  br label %140

140:                                              ; preds = %138, %129
  %141 = icmp eq i32 %.sroa.0.1241, 4
  br i1 %141, label %142, label %147

142:                                              ; preds = %140
  %143 = sext i32 %.sroa.11.1244 to i64
  %144 = getelementptr inbounds i8, ptr %132, i64 33
  store i64 %143, ptr %144, align 1, !tbaa !18
  %145 = sext i32 %.sroa.13.1247 to i64
  %146 = getelementptr inbounds i8, ptr %132, i64 41
  store i64 %145, ptr %146, align 1, !tbaa !19
  br label %147

147:                                              ; preds = %142, %140
  %148 = load i32, ptr %116, align 4, !tbaa !5
  %149 = icmp eq i32 %148, 1
  br i1 %149, label %150, label %158

150:                                              ; preds = %147
  %151 = getelementptr inbounds i8, ptr %132, i64 66
  store i8 2, ptr %151, align 1, !tbaa !20
  %152 = getelementptr inbounds i8, ptr %132, i64 62
  store i16 1, ptr %152, align 1, !tbaa !21
  %153 = getelementptr inbounds i8, ptr %132, i64 64
  store i16 8, ptr %153, align 1, !tbaa !22
  %154 = getelementptr inbounds i8, ptr %1, i64 180
  %155 = load i32, ptr %154, align 4, !tbaa !5
  %156 = trunc i32 %155 to i8
  %157 = getelementptr inbounds i8, ptr %132, i64 32
  store i8 %156, ptr %157, align 1, !tbaa !23
  br label %158

158:                                              ; preds = %150, %147
  %159 = getelementptr inbounds i8, ptr %1, i64 168
  %160 = load i32, ptr %159, align 4, !tbaa !5
  %161 = icmp eq i32 %160, 1
  br i1 %161, label %162, label %166

162:                                              ; preds = %158
  %163 = getelementptr inbounds i8, ptr %132, i64 69
  store i8 1, ptr %163, align 1, !tbaa !24
  %164 = getelementptr inbounds i8, ptr %132, i64 80
  store i16 5, ptr %164, align 1, !tbaa !25
  %165 = getelementptr inbounds i8, ptr %132, i64 74
  store i16 0, ptr %165, align 1, !tbaa !26
  br label %166

166:                                              ; preds = %162, %158
  %167 = load i32, ptr %115, align 4, !tbaa !5
  %168 = icmp eq i32 %167, 1
  br i1 %168, label %169, label %173

169:                                              ; preds = %166
  %170 = getelementptr inbounds i8, ptr %132, i64 69
  store i8 1, ptr %170, align 1, !tbaa !24
  %171 = getelementptr inbounds i8, ptr %132, i64 80
  store i16 9, ptr %171, align 1, !tbaa !25
  %172 = getelementptr inbounds i8, ptr %132, i64 74
  store i16 0, ptr %172, align 1, !tbaa !26
  br label %173

173:                                              ; preds = %169, %166
  store ptr %132, ptr %3, align 8, !tbaa !27
  br label %174

174:                                              ; preds = %173, %106, %91
  ret void
}

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

attributes #0 = { 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 #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind }
attributes #4 = { 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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !11, i64 28}
!9 = !{!"libxsmm_generated_code", !10, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28}
!10 = !{!"any pointer", !6, i64 0}
!11 = !{!"int", !6, i64 0}
!12 = !{!11, !11, i64 0}
!13 = !{!14, !6, i64 94}
!14 = !{!"libxsmm_gemm_descriptor", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !6, i64 28, !6, i64 29, !6, i64 32, !15, i64 33, !15, i64 41, !6, i64 49, !11, i64 50, !11, i64 54, !11, i64 58, !16, i64 62, !16, i64 64, !6, i64 66, !6, i64 67, !6, i64 68, !6, i64 69, !16, i64 70, !16, i64 72, !16, i64 74, !16, i64 76, !16, i64 78, !16, i64 80, !11, i64 82, !11, i64 86, !11, i64 90, !6, i64 94}
!15 = !{!"long long", !6, i64 0}
!16 = !{!"short", !6, i64 0}
!17 = !{!14, !6, i64 49}
!18 = !{!14, !15, i64 33}
!19 = !{!14, !15, i64 41}
!20 = !{!14, !6, i64 66}
!21 = !{!14, !16, i64 62}
!22 = !{!14, !16, i64 64}
!23 = !{!14, !6, i64 32}
!24 = !{!14, !6, i64 69}
!25 = !{!14, !16, i64 80}
!26 = !{!14, !16, i64 74}
!27 = !{!10, !10, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass