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

; 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_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_loop_label_tracker_struct = type { [512 x i32], i32 }
%struct.libxsmm_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, 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 }>
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [75 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__func__.libxsmm_generator_gemm_rv64_kernel = external hidden unnamed_addr constant [35 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_rv64_kernel = external hidden unnamed_addr constant [99 x i8], align 1

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) #3

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #3

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

declare void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) #3

declare void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef, i32 noundef, i64 noundef) #3

declare void @libxsmm_rv64_instruction_alu_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_rv64_instruction_alu_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

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

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_gemm_rv64_kloop(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #4

declare void @libxsmm_generator_loop_header_rv64(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_generator_loop_footer_rv64(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #3

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_rv64_kernel(ptr noundef %0, ptr noundef %1) #4 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.libxsmm_micro_kernel_config, align 8
  %6 = alloca %struct.libxsmm_loop_label_tracker_struct, align 4
  %7 = alloca %struct.libxsmm_gp_reg_mapping_struct, align 4
  %8 = alloca [2 x i32], align 4
  %9 = alloca [2 x i32], align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca %struct.libxsmm_gemm_descriptor, align 1
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 688, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 2052, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 132, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  call void @llvm.memset.p0.i64(ptr align 4 %8, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  call void @llvm.memset.p0.i64(ptr align 4 %9, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 1, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %32, i32 0, i32 8
  %34 = getelementptr inbounds [3 x i8], ptr %33, i64 0, i64 0
  %35 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %34)
  %36 = icmp eq i32 1, %35
  br i1 %36, label %37, label %43

37:                                               ; preds = %2
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %38, i32 0, i32 8
  %40 = getelementptr inbounds [3 x i8], ptr %39, i64 0, i64 0
  %41 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %40)
  %42 = icmp eq i32 12, %41
  br label %43

43:                                               ; preds = %37, %2
  %44 = phi i1 [ false, %2 ], [ %42, %37 ]
  %45 = zext i1 %44 to i64
  %46 = select i1 %44, i32 1, i32 0
  store i32 %46, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %47, i32 0, i32 8
  %49 = getelementptr inbounds [3 x i8], ptr %48, i64 0, i64 0
  %50 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %49)
  %51 = icmp eq i32 4, %50
  br i1 %51, label %52, label %53

52:                                               ; preds = %43
  br label %70

53:                                               ; preds = %43
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %54, i32 0, i32 8
  %56 = getelementptr inbounds [3 x i8], ptr %55, i64 0, i64 0
  %57 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %56)
  %58 = icmp eq i32 2, %57
  br i1 %58, label %59, label %60

59:                                               ; preds = %53
  br label %68

60:                                               ; preds = %53
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %61, i32 0, i32 8
  %63 = getelementptr inbounds [3 x i8], ptr %62, i64 0, i64 0
  %64 = call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef %63)
  %65 = icmp eq i32 1, %64
  %66 = zext i1 %65 to i64
  %67 = select i1 %65, i32 2, i32 3
  br label %68

68:                                               ; preds = %60, %59
  %69 = phi i32 [ 1, %59 ], [ %67, %60 ]
  br label %70

70:                                               ; preds = %68, %52
  %71 = phi i32 [ 0, %52 ], [ %69, %68 ]
  store i32 %71, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 1, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 95, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %72 = load i32, ptr %14, align 4, !tbaa !9
  %73 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 0
  store i32 10, ptr %73, align 4, !tbaa !11
  %74 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  store i32 11, ptr %74, align 4, !tbaa !13
  %75 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  store i32 12, ptr %75, align 4, !tbaa !14
  %76 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  store i32 13, ptr %76, align 4, !tbaa !15
  %77 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 6
  store i32 14, ptr %77, align 4, !tbaa !16
  %78 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 8
  store i32 15, ptr %78, align 4, !tbaa !17
  %79 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 10
  store i32 16, ptr %79, align 4, !tbaa !18
  %80 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 11
  store i32 17, ptr %80, align 4, !tbaa !19
  %81 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 12
  store i32 18, ptr %81, align 4, !tbaa !20
  %82 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  store i32 19, ptr %82, align 4, !tbaa !21
  %83 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  store i32 20, ptr %83, align 4, !tbaa !22
  %84 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  store i32 21, ptr %84, align 4, !tbaa !23
  %85 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 20
  store i32 22, ptr %85, align 4, !tbaa !24
  %86 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  store i32 23, ptr %86, align 4, !tbaa !25
  %87 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 7
  store i32 24, ptr %87, align 4, !tbaa !26
  %88 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 9
  store i32 25, ptr %88, align 4, !tbaa !27
  %89 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  store i32 26, ptr %89, align 4, !tbaa !28
  %90 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  store i32 28, ptr %90, align 4, !tbaa !29
  %91 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  store i32 29, ptr %91, align 4, !tbaa !30
  %92 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  store i32 30, ptr %92, align 4, !tbaa !31
  call void @libxsmm_reset_loop_label_tracker(ptr noundef %6)
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = load ptr, ptr %4, align 8, !tbaa !5
  %95 = load ptr, ptr %3, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %95, i32 0, i32 6
  %97 = load i32, ptr %96, align 4, !tbaa !32
  %98 = getelementptr inbounds [2 x i32], ptr %9, i64 0, i64 0
  %99 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 0
  call void @libxsmm_generator_gemm_rv64_setup_n_blocking(ptr noundef %93, ptr noundef %5, ptr noundef %94, i32 noundef %97, ptr noundef %98, ptr noundef %99)
  %100 = getelementptr inbounds [2 x i32], ptr %9, i64 0, i64 0
  %101 = load i32, ptr %100, align 4, !tbaa !9
  %102 = icmp eq i32 %101, 0
  br i1 %102, label %103, label %112

103:                                              ; preds = %70
  %104 = load ptr, ptr %3, align 8, !tbaa !5
  %105 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %106 = icmp ult i32 1, %105
  br i1 %106, label %107, label %109

107:                                              ; preds = %103
  %108 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %110

109:                                              ; preds = %103
  br label %110

110:                                              ; preds = %109, %107
  %111 = phi i32 [ %108, %107 ], [ 1, %109 ]
  call void @libxsmm_handle_error(ptr noundef %104, i32 noundef 90016, ptr noundef @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef @.str.1, i32 noundef 446, i32 noundef %111)
  store i32 1, ptr %23, align 4
  br label %1364

112:                                              ; preds = %70
  %113 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_rv64_instruction_open_stream(ptr noundef %113, i16 noundef zeroext 1023)
  %114 = load ptr, ptr %4, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %114, i32 0, i32 6
  %116 = load i32, ptr %115, align 1, !tbaa !34
  %117 = and i32 64, %116
  %118 = icmp eq i32 %117, 0
  br i1 %118, label %119, label %125

119:                                              ; preds = %112
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %120, i32 0, i32 6
  %122 = load i32, ptr %121, align 1, !tbaa !34
  %123 = and i32 128, %122
  %124 = icmp eq i32 %123, 0
  br i1 %124, label %139, label %125

125:                                              ; preds = %119, %112
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %126, i32 0, i32 6
  %128 = load i32, ptr %127, align 1, !tbaa !34
  %129 = and i32 64, %128
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %131, label %137

131:                                              ; preds = %125
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %132, i32 0, i32 6
  %134 = load i32, ptr %133, align 1, !tbaa !34
  %135 = and i32 128, %134
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %139, label %137

137:                                              ; preds = %131, %125
  %138 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_rv64_instruction_close_stream(ptr noundef %138, i16 noundef zeroext 1023)
  store i32 1, ptr %23, align 4
  br label %1364

139:                                              ; preds = %131, %119
  %140 = load ptr, ptr %4, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %140, i32 0, i32 0
  %142 = load i32, ptr %141, align 1, !tbaa !38
  store i32 %142, ptr %22, align 4, !tbaa !9
  %143 = load ptr, ptr %4, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %143, i32 0, i32 6
  %145 = load i32, ptr %144, align 1, !tbaa !34
  %146 = and i32 %145, 1
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %179

148:                                              ; preds = %139
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %149, i32 0, i32 8
  %151 = getelementptr inbounds [3 x i8], ptr %150, i64 0, i64 0
  %152 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef %151)
  %153 = icmp eq i32 1, %152
  br i1 %153, label %160, label %154

154:                                              ; preds = %148
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %155, i32 0, i32 8
  %157 = getelementptr inbounds [3 x i8], ptr %156, i64 0, i64 0
  %158 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef %157)
  %159 = icmp eq i32 0, %158
  br i1 %159, label %160, label %169

160:                                              ; preds = %154, %148
  %161 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %21, ptr align 1 %161, i64 95, i1 false), !tbaa.struct !39
  %162 = load i32, ptr %22, align 4, !tbaa !9
  %163 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %21, i32 0, i32 3
  store i32 %162, ptr %163, align 1, !tbaa !43
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %164, i32 0, i32 6
  %166 = load i32, ptr %165, align 1, !tbaa !34
  %167 = and i32 %166, -2
  %168 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %21, i32 0, i32 6
  store i32 %167, ptr %168, align 1, !tbaa !34
  store ptr %21, ptr %20, align 8, !tbaa !5
  br label %178

169:                                              ; preds = %154
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %172 = icmp ult i32 1, %171
  br i1 %172, label %173, label %175

173:                                              ; preds = %169
  %174 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %176

175:                                              ; preds = %169
  br label %176

176:                                              ; preds = %175, %173
  %177 = phi i32 [ %174, %173 ], [ 1, %175 ]
  call void @libxsmm_handle_error(ptr noundef %170, i32 noundef 90033, ptr noundef @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef @.str.1, i32 noundef 470, i32 noundef %177)
  store i32 1, ptr %23, align 4
  br label %1364

178:                                              ; preds = %160
  br label %181

179:                                              ; preds = %139
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %21, ptr align 1 %180, i64 95, i1 false), !tbaa.struct !39
  store ptr %21, ptr %20, align 8, !tbaa !5
  br label %181

181:                                              ; preds = %179, %178
  %182 = load ptr, ptr %20, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %182, i32 0, i32 6
  %184 = load i32, ptr %183, align 1, !tbaa !34
  %185 = and i32 16384, %184
  %186 = icmp eq i32 %185, 16384
  br i1 %186, label %193, label %187

187:                                              ; preds = %181
  %188 = load ptr, ptr %20, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %188, i32 0, i32 6
  %190 = load i32, ptr %189, align 1, !tbaa !34
  %191 = and i32 32768, %190
  %192 = icmp eq i32 %191, 32768
  br i1 %192, label %193, label %294

193:                                              ; preds = %187, %181
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 32, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 80, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store i32 128, ptr %26, align 4, !tbaa !9
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 0
  %196 = load i32, ptr %195, align 4, !tbaa !11
  %197 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %198 = load i32, ptr %197, align 4, !tbaa !22
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %194, i32 noundef 51, i32 noundef %196, i32 noundef 0, i32 noundef %198)
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %201 = load i32, ptr %200, align 4, !tbaa !22
  %202 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %203 = load i32, ptr %202, align 4, !tbaa !13
  %204 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %199, i32 noundef 12291, i32 noundef %201, i32 noundef %203, i32 noundef %204)
  %205 = load ptr, ptr %3, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %207 = load i32, ptr %206, align 4, !tbaa !22
  %208 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %209 = load i32, ptr %208, align 4, !tbaa !14
  %210 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %205, i32 noundef 12291, i32 noundef %207, i32 noundef %209, i32 noundef %210)
  %211 = load ptr, ptr %3, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %213 = load i32, ptr %212, align 4, !tbaa !22
  %214 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %215 = load i32, ptr %214, align 4, !tbaa !15
  %216 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %211, i32 noundef 12291, i32 noundef %213, i32 noundef %215, i32 noundef %216)
  %217 = load i32, ptr %15, align 4, !tbaa !9
  %218 = icmp ugt i32 %217, 0
  br i1 %218, label %219, label %227

219:                                              ; preds = %193
  %220 = load ptr, ptr %3, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %222 = load i32, ptr %221, align 4, !tbaa !22
  %223 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 20
  %224 = load i32, ptr %223, align 4, !tbaa !24
  %225 = load i32, ptr %26, align 4, !tbaa !9
  %226 = add nsw i32 %225, 16
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %220, i32 noundef 12291, i32 noundef %222, i32 noundef %224, i32 noundef %226)
  br label %227

227:                                              ; preds = %219, %193
  %228 = load ptr, ptr %20, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %228, i32 0, i32 7
  %230 = load i8, ptr %229, align 1, !tbaa !44
  %231 = zext i8 %230 to i32
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %233, label %248

233:                                              ; preds = %227
  %234 = load ptr, ptr %3, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %236 = load i32, ptr %235, align 4, !tbaa !22
  %237 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 6
  %238 = load i32, ptr %237, align 4, !tbaa !16
  %239 = load i32, ptr %24, align 4, !tbaa !9
  %240 = add nsw i32 %239, 40
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %234, i32 noundef 12291, i32 noundef %236, i32 noundef %238, i32 noundef %240)
  %241 = load ptr, ptr %3, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %243 = load i32, ptr %242, align 4, !tbaa !22
  %244 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 8
  %245 = load i32, ptr %244, align 4, !tbaa !17
  %246 = load i32, ptr %25, align 4, !tbaa !9
  %247 = add nsw i32 %246, 40
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %241, i32 noundef 12291, i32 noundef %243, i32 noundef %245, i32 noundef %247)
  br label %248

248:                                              ; preds = %233, %227
  %249 = load ptr, ptr %20, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %249, i32 0, i32 6
  %251 = load i32, ptr %250, align 1, !tbaa !34
  %252 = and i32 %251, 65536
  %253 = icmp ne i32 %252, 0
  br i1 %253, label %266, label %254

254:                                              ; preds = %248
  %255 = load ptr, ptr %20, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %255, i32 0, i32 6
  %257 = load i32, ptr %256, align 1, !tbaa !34
  %258 = and i32 %257, 262144
  %259 = icmp ne i32 %258, 0
  br i1 %259, label %266, label %260

260:                                              ; preds = %254
  %261 = load ptr, ptr %20, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %261, i32 0, i32 6
  %263 = load i32, ptr %262, align 1, !tbaa !34
  %264 = and i32 %263, 131072
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %293

266:                                              ; preds = %260, %254, %248
  %267 = load ptr, ptr %3, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %269 = load i32, ptr %268, align 4, !tbaa !22
  %270 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %271 = load i32, ptr %270, align 4, !tbaa !25
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %267, i32 noundef 12291, i32 noundef %269, i32 noundef %271, i32 noundef 16)
  %272 = load ptr, ptr %20, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %272, i32 0, i32 6
  %274 = load i32, ptr %273, align 1, !tbaa !34
  %275 = and i32 %274, 131072
  %276 = icmp ne i32 %275, 0
  br i1 %276, label %277, label %292

277:                                              ; preds = %266
  %278 = load ptr, ptr %3, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %280 = load i32, ptr %279, align 4, !tbaa !22
  %281 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 7
  %282 = load i32, ptr %281, align 4, !tbaa !26
  %283 = load i32, ptr %24, align 4, !tbaa !9
  %284 = add nsw i32 %283, 8
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %278, i32 noundef 12291, i32 noundef %280, i32 noundef %282, i32 noundef %284)
  %285 = load ptr, ptr %3, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %287 = load i32, ptr %286, align 4, !tbaa !22
  %288 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 9
  %289 = load i32, ptr %288, align 4, !tbaa !27
  %290 = load i32, ptr %25, align 4, !tbaa !9
  %291 = add nsw i32 %290, 8
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %285, i32 noundef 12291, i32 noundef %287, i32 noundef %289, i32 noundef %291)
  br label %292

292:                                              ; preds = %277, %266
  br label %293

293:                                              ; preds = %292, %260
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %294

294:                                              ; preds = %293, %187
  %295 = load ptr, ptr %3, align 8, !tbaa !5
  %296 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_setup_stack_frame_rv64(ptr noundef %295, ptr noundef %296, ptr noundef %7, ptr noundef %5)
  call void @libxsmm_reset_loop_label_tracker(ptr noundef %6)
  br label %297

297:                                              ; preds = %1360, %294
  %298 = load i32, ptr %11, align 4, !tbaa !9
  %299 = load ptr, ptr %20, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %299, i32 0, i32 1
  %301 = load i32, ptr %300, align 1, !tbaa !45
  %302 = icmp ne i32 %298, %301
  br i1 %302, label %303, label %1361

303:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %304 = load i32, ptr %10, align 4, !tbaa !9
  %305 = zext i32 %304 to i64
  %306 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 %305
  %307 = load i32, ptr %306, align 4, !tbaa !9
  store i32 %307, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store i32 0, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  store i32 0, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  store i32 0, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 0, ptr %31, align 4, !tbaa !9
  %308 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %308, ptr %12, align 4, !tbaa !9
  %309 = load i32, ptr %10, align 4, !tbaa !9
  %310 = zext i32 %309 to i64
  %311 = getelementptr inbounds [2 x i32], ptr %9, i64 0, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !9
  %313 = load i32, ptr %11, align 4, !tbaa !9
  %314 = add i32 %313, %312
  store i32 %314, ptr %11, align 4, !tbaa !9
  %315 = load i32, ptr %10, align 4, !tbaa !9
  %316 = add i32 %315, 1
  store i32 %316, ptr %10, align 4, !tbaa !9
  %317 = load ptr, ptr %3, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 11
  %319 = load i32, ptr %318, align 4, !tbaa !19
  %320 = load i32, ptr %11, align 4, !tbaa !9
  %321 = load i32, ptr %12, align 4, !tbaa !9
  %322 = sub i32 %320, %321
  call void @libxsmm_generator_loop_header_rv64(ptr noundef %317, ptr noundef %6, i32 noundef %319, i32 noundef %322)
  %323 = load ptr, ptr %3, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %323, i32 0, i32 6
  %325 = load i32, ptr %324, align 4, !tbaa !32
  %326 = icmp ne i32 %325, 3003
  br i1 %326, label %327, label %339

327:                                              ; preds = %303
  %328 = load ptr, ptr %3, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %328, i32 0, i32 6
  %330 = load i32, ptr %329, align 4, !tbaa !32
  %331 = icmp ne i32 %330, 3003
  br i1 %331, label %332, label %339

332:                                              ; preds = %327
  %333 = load ptr, ptr %3, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %335 = load i32, ptr %334, align 8, !tbaa !46
  %336 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %337 = load i32, ptr %336, align 4, !tbaa !30
  %338 = load i32, ptr %16, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_rvv_setivli(ptr noundef %333, i32 noundef %335, i32 noundef %337, i32 noundef %338, i32 noundef 0)
  br label %339

339:                                              ; preds = %332, %327, %303
  store i32 0, ptr %18, align 4, !tbaa !9
  %340 = load ptr, ptr %20, align 8, !tbaa !5
  %341 = load ptr, ptr %3, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %341, i32 0, i32 6
  %343 = load i32, ptr %342, align 4, !tbaa !32
  %344 = call i32 @libxsmm_generator_gemm_rv64_get_initial_m_blocking(ptr noundef %5, ptr noundef %340, i32 noundef %343)
  store i32 %344, ptr %30, align 4, !tbaa !9
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %345

345:                                              ; preds = %1030, %339
  %346 = load i32, ptr %28, align 4, !tbaa !9
  %347 = load ptr, ptr %20, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %347, i32 0, i32 0
  %349 = load i32, ptr %348, align 1, !tbaa !38
  %350 = icmp ne i32 %346, %349
  br i1 %350, label %351, label %1037

351:                                              ; preds = %345
  %352 = load i32, ptr %30, align 4, !tbaa !9
  %353 = icmp eq i32 %352, 0
  br i1 %353, label %354, label %363

354:                                              ; preds = %351
  %355 = load ptr, ptr %3, align 8, !tbaa !5
  %356 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %357 = icmp ult i32 1, %356
  br i1 %357, label %358, label %360

358:                                              ; preds = %354
  %359 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %361

360:                                              ; preds = %354
  br label %361

361:                                              ; preds = %360, %358
  %362 = phi i32 [ %359, %358 ], [ 1, %360 ]
  call void @libxsmm_handle_error(ptr noundef %355, i32 noundef 90017, ptr noundef @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef @.str.1, i32 noundef 567, i32 noundef %362)
  store i32 1, ptr %23, align 4
  br label %1358

363:                                              ; preds = %351
  %364 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %364, ptr %19, align 4, !tbaa !9
  %365 = load ptr, ptr %3, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %365, i32 0, i32 6
  %367 = load i32, ptr %366, align 4, !tbaa !32
  %368 = icmp eq i32 %367, 3003
  br i1 %368, label %374, label %369

369:                                              ; preds = %363
  %370 = load ptr, ptr %3, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %370, i32 0, i32 6
  %372 = load i32, ptr %371, align 4, !tbaa !32
  %373 = icmp eq i32 %372, 3003
  br i1 %373, label %374, label %399

374:                                              ; preds = %369, %363
  %375 = load i32, ptr %30, align 4, !tbaa !9
  %376 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %377 = load i32, ptr %376, align 8, !tbaa !46
  %378 = udiv i32 %375, %377
  %379 = icmp eq i32 %378, 2
  br i1 %379, label %380, label %381

380:                                              ; preds = %374
  store i32 2, ptr %17, align 4, !tbaa !9
  br label %398

381:                                              ; preds = %374
  %382 = load i32, ptr %30, align 4, !tbaa !9
  %383 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %384 = load i32, ptr %383, align 8, !tbaa !46
  %385 = udiv i32 %382, %384
  %386 = icmp eq i32 %385, 4
  br i1 %386, label %387, label %388

387:                                              ; preds = %381
  store i32 4, ptr %17, align 4, !tbaa !9
  br label %397

388:                                              ; preds = %381
  %389 = load i32, ptr %30, align 4, !tbaa !9
  %390 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %391 = load i32, ptr %390, align 8, !tbaa !46
  %392 = udiv i32 %389, %391
  %393 = icmp eq i32 %392, 8
  br i1 %393, label %394, label %395

394:                                              ; preds = %388
  store i32 8, ptr %17, align 4, !tbaa !9
  br label %396

395:                                              ; preds = %388
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %396

396:                                              ; preds = %395, %394
  br label %397

397:                                              ; preds = %396, %387
  br label %398

398:                                              ; preds = %397, %380
  br label %400

399:                                              ; preds = %369
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %400

400:                                              ; preds = %399, %398
  %401 = load i32, ptr %17, align 4, !tbaa !9
  switch i32 %401, label %406 [
    i32 1, label %402
    i32 2, label %403
    i32 4, label %404
    i32 8, label %405
  ]

402:                                              ; preds = %400
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %406

403:                                              ; preds = %400
  store i32 1, ptr %18, align 4, !tbaa !9
  br label %406

404:                                              ; preds = %400
  store i32 2, ptr %18, align 4, !tbaa !9
  br label %406

405:                                              ; preds = %400
  store i32 3, ptr %18, align 4, !tbaa !9
  br label %406

406:                                              ; preds = %405, %404, %403, %402, %400
  %407 = load i32, ptr %19, align 4, !tbaa !9
  %408 = load i32, ptr %18, align 4, !tbaa !9
  %409 = icmp ne i32 %407, %408
  br i1 %409, label %410, label %427

410:                                              ; preds = %406
  %411 = load ptr, ptr %3, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %413 = load i32, ptr %412, align 4, !tbaa !30
  %414 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %415 = load i32, ptr %414, align 8, !tbaa !46
  %416 = zext i32 %415 to i64
  %417 = load i32, ptr %17, align 4, !tbaa !9
  %418 = zext i32 %417 to i64
  %419 = mul i64 %416, %418
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %411, i32 noundef %413, i64 noundef %419)
  %420 = load ptr, ptr %3, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %422 = load i32, ptr %421, align 4, !tbaa !30
  %423 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %424 = load i32, ptr %423, align 4, !tbaa !30
  %425 = load i32, ptr %16, align 4, !tbaa !9
  %426 = load i32, ptr %18, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_rvv_setvli(ptr noundef %420, i32 noundef %422, i32 noundef %424, i32 noundef %425, i32 noundef %426)
  br label %427

427:                                              ; preds = %410, %406
  %428 = load i32, ptr %30, align 4, !tbaa !9
  %429 = icmp ne i32 %428, 0
  br i1 %429, label %430, label %441

430:                                              ; preds = %427
  %431 = load i32, ptr %30, align 4, !tbaa !9
  %432 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %433 = load i32, ptr %432, align 8, !tbaa !46
  %434 = icmp ult i32 %431, %433
  br i1 %434, label %435, label %441

435:                                              ; preds = %430
  %436 = load ptr, ptr %3, align 8, !tbaa !5
  %437 = load i32, ptr %30, align 4, !tbaa !9
  %438 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %439 = load i32, ptr %438, align 4, !tbaa !30
  %440 = load i32, ptr %16, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_rvv_setivli(ptr noundef %436, i32 noundef %437, i32 noundef %439, i32 noundef %440, i32 noundef 0)
  br label %441

441:                                              ; preds = %435, %430, %427
  %442 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %442, ptr %29, align 4, !tbaa !9
  %443 = load i32, ptr %30, align 4, !tbaa !9
  %444 = icmp ne i32 0, %443
  br i1 %444, label %445, label %446

445:                                              ; preds = %441
  br label %447

446:                                              ; preds = %441
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 619, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_rv64_kernel) #7
  unreachable

447:                                              ; preds = %445
  %448 = load i32, ptr %28, align 4, !tbaa !9
  %449 = load ptr, ptr %20, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %449, i32 0, i32 0
  %451 = load i32, ptr %450, align 1, !tbaa !38
  %452 = load i32, ptr %29, align 4, !tbaa !9
  %453 = sub i32 %451, %452
  %454 = load i32, ptr %30, align 4, !tbaa !9
  %455 = udiv i32 %453, %454
  %456 = load i32, ptr %30, align 4, !tbaa !9
  %457 = mul i32 %455, %456
  %458 = add i32 %448, %457
  store i32 %458, ptr %28, align 4, !tbaa !9
  %459 = load i32, ptr %28, align 4, !tbaa !9
  %460 = load i32, ptr %29, align 4, !tbaa !9
  %461 = icmp ne i32 %459, %460
  br i1 %461, label %462, label %1030

462:                                              ; preds = %447
  %463 = load i32, ptr %28, align 4, !tbaa !9
  %464 = icmp ugt i32 %463, 0
  br i1 %464, label %465, label %1030

465:                                              ; preds = %462
  %466 = load ptr, ptr %3, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 10
  %468 = load i32, ptr %467, align 4, !tbaa !18
  %469 = load i32, ptr %28, align 4, !tbaa !9
  %470 = load i32, ptr %29, align 4, !tbaa !9
  %471 = sub i32 %469, %470
  call void @libxsmm_generator_loop_header_rv64(ptr noundef %466, ptr noundef %6, i32 noundef %468, i32 noundef %471)
  %472 = load ptr, ptr %3, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %472, i32 0, i32 6
  %474 = load i32, ptr %473, align 4, !tbaa !32
  %475 = icmp uge i32 %474, 3001
  br i1 %475, label %476, label %542

476:                                              ; preds = %465
  %477 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %478 = load i32, ptr %477, align 4, !tbaa !49
  %479 = icmp eq i32 %478, 1
  br i1 %479, label %484, label %480

480:                                              ; preds = %476
  %481 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 25
  %482 = load i32, ptr %481, align 4, !tbaa !50
  %483 = icmp eq i32 %482, 1
  br i1 %483, label %484, label %508

484:                                              ; preds = %480, %476
  %485 = load ptr, ptr %3, align 8, !tbaa !5
  %486 = load ptr, ptr %20, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %488 = load i32, ptr %487, align 4, !tbaa !15
  %489 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %490 = load i32, ptr %489, align 4, !tbaa !21
  %491 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %492 = load i32, ptr %491, align 8, !tbaa !46
  %493 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %494 = load i32, ptr %493, align 4, !tbaa !51
  %495 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %496 = load i32, ptr %495, align 4, !tbaa !49
  %497 = icmp eq i32 %496, 1
  %498 = zext i1 %497 to i64
  %499 = select i1 %497, i32 1, i32 2
  %500 = load i32, ptr %30, align 4, !tbaa !9
  %501 = load i32, ptr %27, align 4, !tbaa !9
  %502 = load ptr, ptr %20, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %502, i32 0, i32 5
  %504 = load i32, ptr %503, align 1, !tbaa !52
  %505 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %506 = load i32, ptr %505, align 4, !tbaa !53
  %507 = mul i32 %504, %506
  call void @libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64(ptr noundef %485, ptr noundef %486, i32 noundef %488, i32 noundef %490, i32 noundef %492, i32 noundef %494, i32 noundef %499, i32 noundef %500, i32 noundef %501, i32 noundef %507)
  br label %541

508:                                              ; preds = %480
  %509 = load ptr, ptr %3, align 8, !tbaa !5
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %510, i32 0, i32 8
  %512 = getelementptr inbounds [3 x i8], ptr %511, i64 0, i64 0
  %513 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %512)
  %514 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %515 = load i32, ptr %514, align 4, !tbaa !15
  %516 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %517 = load i32, ptr %516, align 4, !tbaa !21
  %518 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %519 = load i32, ptr %518, align 8, !tbaa !46
  %520 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %521 = load i32, ptr %520, align 4, !tbaa !51
  %522 = load i32, ptr %30, align 4, !tbaa !9
  %523 = load i32, ptr %27, align 4, !tbaa !9
  %524 = load ptr, ptr %20, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %524, i32 0, i32 5
  %526 = load i32, ptr %525, align 1, !tbaa !52
  %527 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %528 = load i32, ptr %527, align 4, !tbaa !53
  %529 = mul i32 %526, %528
  %530 = load i32, ptr %15, align 4, !tbaa !9
  %531 = icmp ugt i32 %530, 0
  br i1 %531, label %532, label %533

532:                                              ; preds = %508
  br label %538

533:                                              ; preds = %508
  %534 = load ptr, ptr %20, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %534, i32 0, i32 6
  %536 = load i32, ptr %535, align 1, !tbaa !34
  %537 = and i32 4, %536
  br label %538

538:                                              ; preds = %533, %532
  %539 = phi i32 [ 1, %532 ], [ %537, %533 ]
  %540 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_load_2dregblock_rv64_rvv(ptr noundef %509, i32 noundef %513, i32 noundef %515, i32 noundef %517, i32 noundef %519, i32 noundef %521, i32 noundef %522, i32 noundef %523, i32 noundef %529, i32 noundef %539, i32 noundef %540)
  br label %541

541:                                              ; preds = %538, %484
  br label %551

542:                                              ; preds = %465
  %543 = load ptr, ptr %3, align 8, !tbaa !5
  %544 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %545 = icmp ult i32 1, %544
  br i1 %545, label %546, label %548

546:                                              ; preds = %542
  %547 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %549

548:                                              ; preds = %542
  br label %549

549:                                              ; preds = %548, %546
  %550 = phi i32 [ %547, %546 ], [ 1, %548 ]
  call void @libxsmm_handle_error(ptr noundef %543, i32 noundef 90005, ptr noundef @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef @.str.1, i32 noundef 639, i32 noundef %550)
  store i32 1, ptr %23, align 4
  br label %1358

551:                                              ; preds = %541
  %552 = load ptr, ptr %20, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %552, i32 0, i32 6
  %554 = load i32, ptr %553, align 1, !tbaa !34
  %555 = and i32 %554, 65536
  %556 = icmp ugt i32 %555, 0
  br i1 %556, label %569, label %557

557:                                              ; preds = %551
  %558 = load ptr, ptr %20, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %558, i32 0, i32 6
  %560 = load i32, ptr %559, align 1, !tbaa !34
  %561 = and i32 %560, 131072
  %562 = icmp ugt i32 %561, 0
  br i1 %562, label %569, label %563

563:                                              ; preds = %557
  %564 = load ptr, ptr %20, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %564, i32 0, i32 6
  %566 = load i32, ptr %565, align 1, !tbaa !34
  %567 = and i32 %566, 262144
  %568 = icmp ugt i32 %567, 0
  br i1 %568, label %569, label %679

569:                                              ; preds = %563, %557, %551
  %570 = load ptr, ptr %20, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %570, i32 0, i32 6
  %572 = load i32, ptr %571, align 1, !tbaa !34
  %573 = and i32 %572, 262144
  %574 = icmp ugt i32 %573, 0
  br i1 %574, label %575, label %582

575:                                              ; preds = %569
  %576 = load ptr, ptr %3, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %578 = load i32, ptr %577, align 4, !tbaa !29
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %576, i32 noundef %578, i64 noundef 0)
  %579 = load ptr, ptr %3, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %581 = load i32, ptr %580, align 4, !tbaa !30
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %579, i32 noundef %581, i64 noundef 0)
  br label %596

582:                                              ; preds = %569
  %583 = load ptr, ptr %3, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %585 = load i32, ptr %584, align 4, !tbaa !28
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %583, i32 noundef %585, i64 noundef 0)
  %586 = load ptr, ptr %3, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %588 = load i32, ptr %587, align 4, !tbaa !13
  %589 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %590 = load i32, ptr %589, align 4, !tbaa !29
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %586, i32 noundef 19, i32 noundef %588, i32 noundef %590, i32 noundef 0)
  %591 = load ptr, ptr %3, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %593 = load i32, ptr %592, align 4, !tbaa !14
  %594 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %595 = load i32, ptr %594, align 4, !tbaa !30
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %591, i32 noundef 19, i32 noundef %593, i32 noundef %595, i32 noundef 0)
  br label %596

596:                                              ; preds = %582, %575
  %597 = load ptr, ptr %3, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %599 = load i32, ptr %598, align 4, !tbaa !25
  %600 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %601 = load i32, ptr %600, align 4, !tbaa !31
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %597, i32 noundef 12291, i32 noundef %599, i32 noundef %601, i32 noundef 0)
  %602 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef %602, ptr noundef %6)
  %603 = load ptr, ptr %20, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %603, i32 0, i32 6
  %605 = load i32, ptr %604, align 1, !tbaa !34
  %606 = and i32 %605, 65536
  %607 = icmp ugt i32 %606, 0
  br i1 %607, label %608, label %633

608:                                              ; preds = %596
  %609 = load ptr, ptr %3, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %611 = load i32, ptr %610, align 4, !tbaa !29
  %612 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %613 = load i32, ptr %612, align 4, !tbaa !28
  %614 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %615 = load i32, ptr %614, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %609, i32 noundef 51, i32 noundef %611, i32 noundef %613, i32 noundef %615)
  %616 = load ptr, ptr %3, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %618 = load i32, ptr %617, align 4, !tbaa !21
  %619 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %620 = load i32, ptr %619, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %616, i32 noundef 12291, i32 noundef %618, i32 noundef %620, i32 noundef 0)
  %621 = load ptr, ptr %3, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %623 = load i32, ptr %622, align 4, !tbaa !30
  %624 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %625 = load i32, ptr %624, align 4, !tbaa !28
  %626 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %627 = load i32, ptr %626, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %621, i32 noundef 51, i32 noundef %623, i32 noundef %625, i32 noundef %627)
  %628 = load ptr, ptr %3, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %630 = load i32, ptr %629, align 4, !tbaa !21
  %631 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %632 = load i32, ptr %631, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %628, i32 noundef 12291, i32 noundef %630, i32 noundef %632, i32 noundef 0)
  br label %633

633:                                              ; preds = %608, %596
  %634 = load ptr, ptr %20, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %634, i32 0, i32 6
  %636 = load i32, ptr %635, align 1, !tbaa !34
  %637 = and i32 %636, 131072
  %638 = icmp ugt i32 %637, 0
  br i1 %638, label %639, label %678

639:                                              ; preds = %633
  %640 = load ptr, ptr %3, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 7
  %642 = load i32, ptr %641, align 4, !tbaa !26
  %643 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %644 = load i32, ptr %643, align 4, !tbaa !28
  %645 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %646 = load i32, ptr %645, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %640, i32 noundef 51, i32 noundef %642, i32 noundef %644, i32 noundef %646)
  %647 = load ptr, ptr %3, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %649 = load i32, ptr %648, align 4, !tbaa !21
  %650 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %651 = load i32, ptr %650, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %647, i32 noundef 12291, i32 noundef %649, i32 noundef %651, i32 noundef 0)
  %652 = load ptr, ptr %3, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %654 = load i32, ptr %653, align 4, !tbaa !29
  %655 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %656 = load i32, ptr %655, align 4, !tbaa !21
  %657 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %658 = load i32, ptr %657, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %652, i32 noundef 51, i32 noundef %654, i32 noundef %656, i32 noundef %658)
  %659 = load ptr, ptr %3, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 9
  %661 = load i32, ptr %660, align 4, !tbaa !27
  %662 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %663 = load i32, ptr %662, align 4, !tbaa !28
  %664 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %665 = load i32, ptr %664, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %659, i32 noundef 51, i32 noundef %661, i32 noundef %663, i32 noundef %665)
  %666 = load ptr, ptr %3, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %668 = load i32, ptr %667, align 4, !tbaa !21
  %669 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %670 = load i32, ptr %669, align 4, !tbaa !22
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %666, i32 noundef 12291, i32 noundef %668, i32 noundef %670, i32 noundef 0)
  %671 = load ptr, ptr %3, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %673 = load i32, ptr %672, align 4, !tbaa !30
  %674 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %675 = load i32, ptr %674, align 4, !tbaa !22
  %676 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %677 = load i32, ptr %676, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %671, i32 noundef 51, i32 noundef %673, i32 noundef %675, i32 noundef %677)
  br label %678

678:                                              ; preds = %639, %633
  br label %679

679:                                              ; preds = %678, %563
  %680 = load ptr, ptr %3, align 8, !tbaa !5
  %681 = load ptr, ptr %20, align 8, !tbaa !5
  %682 = load i32, ptr %30, align 4, !tbaa !9
  %683 = load i32, ptr %27, align 4, !tbaa !9
  %684 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_rv64_kloop(ptr noundef %680, ptr noundef %6, ptr noundef %7, ptr noundef %5, ptr noundef %681, i32 noundef %682, i32 noundef %683, i32 noundef %684)
  %685 = load ptr, ptr %20, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %685, i32 0, i32 6
  %687 = load i32, ptr %686, align 1, !tbaa !34
  %688 = and i32 %687, 65536
  %689 = icmp ugt i32 %688, 0
  br i1 %689, label %702, label %690

690:                                              ; preds = %679
  %691 = load ptr, ptr %20, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %691, i32 0, i32 6
  %693 = load i32, ptr %692, align 1, !tbaa !34
  %694 = and i32 %693, 131072
  %695 = icmp ugt i32 %694, 0
  br i1 %695, label %702, label %696

696:                                              ; preds = %690
  %697 = load ptr, ptr %20, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %697, i32 0, i32 6
  %699 = load i32, ptr %698, align 1, !tbaa !34
  %700 = and i32 %699, 262144
  %701 = icmp ugt i32 %700, 0
  br i1 %701, label %702, label %798

702:                                              ; preds = %696, %690, %679
  %703 = load ptr, ptr %20, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %703, i32 0, i32 6
  %705 = load i32, ptr %704, align 1, !tbaa !34
  %706 = and i32 %705, 262144
  %707 = icmp ugt i32 %706, 0
  br i1 %707, label %708, label %709

708:                                              ; preds = %702
  br label %715

709:                                              ; preds = %702
  %710 = load ptr, ptr %3, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %712 = load i32, ptr %711, align 4, !tbaa !28
  %713 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %714 = load i32, ptr %713, align 4, !tbaa !28
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %710, i32 noundef 19, i32 noundef %712, i32 noundef %714, i32 noundef 8)
  br label %715

715:                                              ; preds = %709, %708
  %716 = load ptr, ptr %20, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %716, i32 0, i32 6
  %718 = load i32, ptr %717, align 1, !tbaa !34
  %719 = and i32 %718, 262144
  %720 = icmp ugt i32 %719, 0
  br i1 %720, label %721, label %762

721:                                              ; preds = %715
  %722 = load ptr, ptr %3, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %724 = load i32, ptr %723, align 4, !tbaa !21
  %725 = load ptr, ptr %20, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %725, i32 0, i32 10
  %727 = load i64, ptr %726, align 1, !tbaa !54
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %722, i32 noundef %724, i64 noundef %727)
  %728 = load ptr, ptr %3, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %730 = load i32, ptr %729, align 4, !tbaa !22
  %731 = load ptr, ptr %20, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %731, i32 0, i32 11
  %733 = load i64, ptr %732, align 1, !tbaa !55
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %728, i32 noundef %730, i64 noundef %733)
  %734 = load ptr, ptr %3, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %736 = load i32, ptr %735, align 4, !tbaa !21
  %737 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %738 = load i32, ptr %737, align 4, !tbaa !13
  %739 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %740 = load i32, ptr %739, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %734, i32 noundef 51, i32 noundef %736, i32 noundef %738, i32 noundef %740)
  %741 = load ptr, ptr %3, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %743 = load i32, ptr %742, align 4, !tbaa !22
  %744 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %745 = load i32, ptr %744, align 4, !tbaa !14
  %746 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %747 = load i32, ptr %746, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %741, i32 noundef 51, i32 noundef %743, i32 noundef %745, i32 noundef %747)
  %748 = load ptr, ptr %3, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %750 = load i32, ptr %749, align 4, !tbaa !21
  %751 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %752 = load i32, ptr %751, align 4, !tbaa !29
  %753 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %754 = load i32, ptr %753, align 4, !tbaa !29
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %748, i32 noundef 51, i32 noundef %750, i32 noundef %752, i32 noundef %754)
  %755 = load ptr, ptr %3, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %757 = load i32, ptr %756, align 4, !tbaa !22
  %758 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %759 = load i32, ptr %758, align 4, !tbaa !30
  %760 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %761 = load i32, ptr %760, align 4, !tbaa !30
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %755, i32 noundef 51, i32 noundef %757, i32 noundef %759, i32 noundef %761)
  br label %762

762:                                              ; preds = %721, %715
  %763 = load ptr, ptr %3, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %765 = load i32, ptr %764, align 4, !tbaa !31
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef %763, ptr noundef %6, i32 noundef %765, i32 noundef 1)
  %766 = load ptr, ptr %20, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %766, i32 0, i32 6
  %768 = load i32, ptr %767, align 1, !tbaa !34
  %769 = and i32 %768, 262144
  %770 = icmp ugt i32 %769, 0
  br i1 %770, label %771, label %786

771:                                              ; preds = %762
  %772 = load ptr, ptr %3, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %774 = load i32, ptr %773, align 4, !tbaa !13
  %775 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %776 = load i32, ptr %775, align 4, !tbaa !29
  %777 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %778 = load i32, ptr %777, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %772, i32 noundef 1073741875, i32 noundef %774, i32 noundef %776, i32 noundef %778)
  %779 = load ptr, ptr %3, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %781 = load i32, ptr %780, align 4, !tbaa !14
  %782 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %783 = load i32, ptr %782, align 4, !tbaa !30
  %784 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %785 = load i32, ptr %784, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %779, i32 noundef 1073741875, i32 noundef %781, i32 noundef %783, i32 noundef %785)
  br label %797

786:                                              ; preds = %762
  %787 = load ptr, ptr %3, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %789 = load i32, ptr %788, align 4, !tbaa !29
  %790 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %791 = load i32, ptr %790, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %787, i32 noundef 19, i32 noundef %789, i32 noundef %791, i32 noundef 0)
  %792 = load ptr, ptr %3, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %794 = load i32, ptr %793, align 4, !tbaa !30
  %795 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %796 = load i32, ptr %795, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %792, i32 noundef 19, i32 noundef %794, i32 noundef %796, i32 noundef 0)
  br label %797

797:                                              ; preds = %786, %771
  br label %798

798:                                              ; preds = %797, %696
  %799 = load ptr, ptr %3, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %799, i32 0, i32 6
  %801 = load i32, ptr %800, align 4, !tbaa !32
  %802 = icmp uge i32 %801, 3001
  br i1 %802, label %803, label %869

803:                                              ; preds = %798
  %804 = load ptr, ptr %3, align 8, !tbaa !5
  %805 = load ptr, ptr %20, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %807 = load i32, ptr %806, align 4, !tbaa !21
  %808 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %809 = load i32, ptr %808, align 4, !tbaa !22
  %810 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %811 = load i32, ptr %810, align 8, !tbaa !46
  %812 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %813 = load i32, ptr %812, align 4, !tbaa !51
  %814 = load i32, ptr %30, align 4, !tbaa !9
  %815 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_apply_fusion_2dregblock_rv64(ptr noundef %804, ptr noundef %805, ptr noundef %5, i32 noundef %807, i32 noundef %809, i32 noundef %811, i32 noundef %813, i32 noundef %814, i32 noundef %815)
  %816 = load ptr, ptr %3, align 8, !tbaa !5
  %817 = load ptr, ptr %4, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %817, i32 0, i32 8
  %819 = getelementptr inbounds [3 x i8], ptr %818, i64 0, i64 0
  %820 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %819)
  %821 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %822 = load i32, ptr %821, align 4, !tbaa !15
  %823 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %824 = load i32, ptr %823, align 4, !tbaa !29
  %825 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 2
  %826 = load i32, ptr %825, align 8, !tbaa !46
  %827 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 1
  %828 = load i32, ptr %827, align 4, !tbaa !51
  %829 = load i32, ptr %30, align 4, !tbaa !9
  %830 = load i32, ptr %27, align 4, !tbaa !9
  %831 = load ptr, ptr %20, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %831, i32 0, i32 5
  %833 = load i32, ptr %832, align 1, !tbaa !52
  %834 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %835 = load i32, ptr %834, align 4, !tbaa !53
  %836 = mul i32 %833, %835
  %837 = load i32, ptr %15, align 4, !tbaa !9
  %838 = icmp ugt i32 %837, 0
  br i1 %838, label %839, label %840

839:                                              ; preds = %803
  br label %845

840:                                              ; preds = %803
  %841 = load ptr, ptr %4, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %841, i32 0, i32 8
  %843 = getelementptr inbounds [3 x i8], ptr %842, i64 0, i64 0
  %844 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %843)
  br label %845

845:                                              ; preds = %840, %839
  %846 = phi i32 [ 8, %839 ], [ %844, %840 ]
  %847 = load i32, ptr %15, align 4, !tbaa !9
  %848 = icmp ugt i32 %847, 0
  br i1 %848, label %849, label %852

849:                                              ; preds = %845
  %850 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 20
  %851 = load i32, ptr %850, align 4, !tbaa !24
  br label %853

852:                                              ; preds = %845
  br label %853

853:                                              ; preds = %852, %849
  %854 = phi i32 [ %851, %849 ], [ 0, %852 ]
  %855 = load i32, ptr %15, align 4, !tbaa !9
  %856 = icmp ugt i32 %855, 0
  br i1 %856, label %857, label %865

857:                                              ; preds = %853
  %858 = load ptr, ptr %20, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %858, i32 0, i32 6
  %860 = load i32, ptr %859, align 1, !tbaa !34
  %861 = and i32 4, %860
  %862 = icmp eq i32 %861, 0
  %863 = zext i1 %862 to i64
  %864 = select i1 %862, i32 1, i32 0
  br label %866

865:                                              ; preds = %853
  br label %866

866:                                              ; preds = %865, %857
  %867 = phi i32 [ %864, %857 ], [ 0, %865 ]
  %868 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_store_2dregblock_rv64_rvv(ptr noundef %816, i32 noundef %820, i32 noundef %822, i32 noundef %824, i32 noundef %826, i32 noundef %828, i32 noundef %829, i32 noundef %830, i32 noundef %836, i32 noundef %846, i32 noundef %854, i32 noundef %867, i32 noundef %868)
  br label %869

869:                                              ; preds = %866, %798
  %870 = load ptr, ptr %3, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %872 = load i32, ptr %871, align 4, !tbaa !15
  %873 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %874 = load i32, ptr %873, align 4, !tbaa !23
  %875 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %876 = load i32, ptr %875, align 4, !tbaa !15
  %877 = load i32, ptr %30, align 4, !tbaa !9
  %878 = zext i32 %877 to i64
  %879 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %880 = load i32, ptr %879, align 4, !tbaa !53
  %881 = zext i32 %880 to i64
  %882 = mul nsw i64 %878, %881
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %870, i32 noundef 51, i32 noundef %872, i32 noundef %874, i32 noundef %876, i64 noundef %882)
  %883 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %884 = load i32, ptr %883, align 4, !tbaa !49
  %885 = icmp eq i32 %884, 1
  br i1 %885, label %890, label %886

886:                                              ; preds = %869
  %887 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 25
  %888 = load i32, ptr %887, align 4, !tbaa !50
  %889 = icmp eq i32 %888, 1
  br i1 %889, label %890, label %919

890:                                              ; preds = %886, %869
  %891 = load ptr, ptr %3, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %893 = load i32, ptr %892, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef %891, i32 noundef 7, i32 noundef %893)
  %894 = load ptr, ptr %3, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %896 = load i32, ptr %895, align 4, !tbaa !22
  %897 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %898 = load i32, ptr %897, align 4, !tbaa !23
  %899 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %900 = load i32, ptr %899, align 4, !tbaa !22
  %901 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %902 = load i32, ptr %901, align 4, !tbaa !49
  %903 = icmp eq i32 %902, 1
  br i1 %903, label %904, label %908

904:                                              ; preds = %890
  %905 = load i32, ptr %30, align 4, !tbaa !9
  %906 = zext i32 %905 to i64
  %907 = mul nsw i64 %906, 4
  br label %912

908:                                              ; preds = %890
  %909 = load i32, ptr %30, align 4, !tbaa !9
  %910 = zext i32 %909 to i64
  %911 = mul nsw i64 %910, 2
  br label %912

912:                                              ; preds = %908, %904
  %913 = phi i64 [ %907, %904 ], [ %911, %908 ]
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %894, i32 noundef 51, i32 noundef %896, i32 noundef %898, i32 noundef %900, i64 noundef %913)
  %914 = load ptr, ptr %3, align 8, !tbaa !5
  %915 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %916 = load i32, ptr %915, align 4, !tbaa !23
  %917 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %918 = load i32, ptr %917, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef %914, i32 noundef 7, i32 noundef %916, i32 noundef %918)
  br label %919

919:                                              ; preds = %912, %886
  %920 = load ptr, ptr %20, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %920, i32 0, i32 6
  %922 = load i32, ptr %921, align 1, !tbaa !34
  %923 = and i32 %922, 65536
  %924 = icmp ugt i32 %923, 0
  br i1 %924, label %925, label %993

925:                                              ; preds = %919
  %926 = load ptr, ptr %3, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %928 = load i32, ptr %927, align 4, !tbaa !28
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %926, i32 noundef %928, i64 noundef 0)
  %929 = load ptr, ptr %3, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %931 = load i32, ptr %930, align 4, !tbaa !13
  %932 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %933 = load i32, ptr %932, align 4, !tbaa !29
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %929, i32 noundef 19, i32 noundef %931, i32 noundef %933, i32 noundef 0)
  %934 = load ptr, ptr %3, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %936 = load i32, ptr %935, align 4, !tbaa !25
  %937 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %938 = load i32, ptr %937, align 4, !tbaa !31
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %934, i32 noundef 12291, i32 noundef %936, i32 noundef %938, i32 noundef 0)
  %939 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef %939, ptr noundef %6)
  %940 = load ptr, ptr %3, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %942 = load i32, ptr %941, align 4, !tbaa !29
  %943 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %944 = load i32, ptr %943, align 4, !tbaa !28
  %945 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %946 = load i32, ptr %945, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %940, i32 noundef 51, i32 noundef %942, i32 noundef %944, i32 noundef %946)
  %947 = load ptr, ptr %3, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %949 = load i32, ptr %948, align 4, !tbaa !21
  %950 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %951 = load i32, ptr %950, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %947, i32 noundef 12291, i32 noundef %949, i32 noundef %951, i32 noundef 0)
  %952 = load ptr, ptr %3, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %954 = load i32, ptr %953, align 4, !tbaa !13
  %955 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %956 = load i32, ptr %955, align 4, !tbaa !21
  %957 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %958 = load i32, ptr %957, align 4, !tbaa !13
  %959 = load i32, ptr %30, align 4, !tbaa !9
  %960 = zext i32 %959 to i64
  %961 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %962 = load i32, ptr %961, align 4, !tbaa !56
  %963 = zext i32 %962 to i64
  %964 = mul nsw i64 %960, %963
  %965 = load i32, ptr %13, align 4, !tbaa !9
  %966 = zext i32 %965 to i64
  %967 = mul nsw i64 %964, %966
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %952, i32 noundef 51, i32 noundef %954, i32 noundef %956, i32 noundef %958, i64 noundef %967)
  %968 = load ptr, ptr %3, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %970 = load i32, ptr %969, align 4, !tbaa !29
  %971 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %972 = load i32, ptr %971, align 4, !tbaa !28
  %973 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %974 = load i32, ptr %973, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %968, i32 noundef 51, i32 noundef %970, i32 noundef %972, i32 noundef %974)
  %975 = load ptr, ptr %3, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %977 = load i32, ptr %976, align 4, !tbaa !21
  %978 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %979 = load i32, ptr %978, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %975, i32 noundef 12323, i32 noundef %977, i32 noundef %979, i32 noundef 0)
  %980 = load ptr, ptr %3, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %982 = load i32, ptr %981, align 4, !tbaa !28
  %983 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %984 = load i32, ptr %983, align 4, !tbaa !28
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %980, i32 noundef 19, i32 noundef %982, i32 noundef %984, i32 noundef 8)
  %985 = load ptr, ptr %3, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %987 = load i32, ptr %986, align 4, !tbaa !31
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef %985, ptr noundef %6, i32 noundef %987, i32 noundef 1)
  %988 = load ptr, ptr %3, align 8, !tbaa !5
  %989 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %990 = load i32, ptr %989, align 4, !tbaa !29
  %991 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %992 = load i32, ptr %991, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %988, i32 noundef 19, i32 noundef %990, i32 noundef %992, i32 noundef 0)
  br label %1025

993:                                              ; preds = %919
  %994 = load i32, ptr %28, align 4, !tbaa !9
  %995 = load ptr, ptr %20, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %995, i32 0, i32 0
  %997 = load i32, ptr %996, align 1, !tbaa !38
  %998 = icmp ne i32 %994, %997
  br i1 %998, label %1005, label %999

999:                                              ; preds = %993
  %1000 = load i32, ptr %30, align 4, !tbaa !9
  %1001 = load ptr, ptr %20, align 8, !tbaa !5
  %1002 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1001, i32 0, i32 0
  %1003 = load i32, ptr %1002, align 1, !tbaa !38
  %1004 = icmp ult i32 %1000, %1003
  br i1 %1004, label %1005, label %1024

1005:                                             ; preds = %999, %993
  %1006 = load ptr, ptr %3, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1008 = load i32, ptr %1007, align 4, !tbaa !13
  %1009 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1010 = load i32, ptr %1009, align 4, !tbaa !21
  %1011 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1012 = load i32, ptr %1011, align 4, !tbaa !13
  %1013 = load i32, ptr %30, align 4, !tbaa !9
  %1014 = zext i32 %1013 to i64
  %1015 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1016 = load i32, ptr %1015, align 4, !tbaa !56
  %1017 = zext i32 %1016 to i64
  %1018 = mul nsw i64 %1014, %1017
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1006, i32 noundef 51, i32 noundef %1008, i32 noundef %1010, i32 noundef %1012, i64 noundef %1018)
  %1019 = load i32, ptr %28, align 4, !tbaa !9
  %1020 = load i32, ptr %29, align 4, !tbaa !9
  %1021 = sub i32 %1019, %1020
  %1022 = load i32, ptr %31, align 4, !tbaa !9
  %1023 = add i32 %1022, %1021
  store i32 %1023, ptr %31, align 4, !tbaa !9
  br label %1024

1024:                                             ; preds = %1005, %999
  br label %1025

1025:                                             ; preds = %1024, %925
  %1026 = load ptr, ptr %3, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 10
  %1028 = load i32, ptr %1027, align 4, !tbaa !18
  %1029 = load i32, ptr %30, align 4, !tbaa !9
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef %1026, ptr noundef %6, i32 noundef %1028, i32 noundef %1029)
  br label %1030

1030:                                             ; preds = %1025, %462, %447
  %1031 = load ptr, ptr %20, align 8, !tbaa !5
  %1032 = load ptr, ptr %3, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1032, i32 0, i32 6
  %1034 = load i32, ptr %1033, align 4, !tbaa !32
  %1035 = load i32, ptr %30, align 4, !tbaa !9
  %1036 = call i32 @libxsmm_generator_gemm_rv64_update_m_blocking(ptr noundef %5, ptr noundef %1031, i32 noundef %1034, i32 noundef %1035)
  store i32 %1036, ptr %30, align 4, !tbaa !9
  br label %345, !llvm.loop !57

1037:                                             ; preds = %345
  %1038 = load ptr, ptr %3, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1040 = load i32, ptr %1039, align 4, !tbaa !15
  %1041 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1042 = load i32, ptr %1041, align 4, !tbaa !23
  %1043 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 5
  %1044 = load i32, ptr %1043, align 4, !tbaa !15
  %1045 = load i32, ptr %27, align 4, !tbaa !9
  %1046 = zext i32 %1045 to i64
  %1047 = load ptr, ptr %20, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1047, i32 0, i32 5
  %1049 = load i32, ptr %1048, align 1, !tbaa !52
  %1050 = zext i32 %1049 to i64
  %1051 = mul nsw i64 %1046, %1050
  %1052 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1053 = load i32, ptr %1052, align 4, !tbaa !53
  %1054 = zext i32 %1053 to i64
  %1055 = mul nsw i64 %1051, %1054
  %1056 = load ptr, ptr %20, align 8, !tbaa !5
  %1057 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1056, i32 0, i32 0
  %1058 = load i32, ptr %1057, align 1, !tbaa !38
  %1059 = zext i32 %1058 to i64
  %1060 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 5
  %1061 = load i32, ptr %1060, align 4, !tbaa !53
  %1062 = zext i32 %1061 to i64
  %1063 = mul nsw i64 %1059, %1062
  %1064 = sub nsw i64 %1055, %1063
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1038, i32 noundef 51, i32 noundef %1040, i32 noundef %1042, i32 noundef %1044, i64 noundef %1064)
  %1065 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 30
  %1066 = load i32, ptr %1065, align 8, !tbaa !59
  %1067 = icmp eq i32 %1066, 1
  br i1 %1067, label %1068, label %1103

1068:                                             ; preds = %1037
  %1069 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 34
  %1070 = load i32, ptr %1069, align 8, !tbaa !60
  %1071 = icmp eq i32 %1070, 1
  br i1 %1071, label %1072, label %1103

1072:                                             ; preds = %1068
  %1073 = load ptr, ptr %3, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1075 = load i32, ptr %1074, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef %1073, i32 noundef 8, i32 noundef %1075)
  %1076 = load ptr, ptr %3, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1078 = load i32, ptr %1077, align 4, !tbaa !22
  %1079 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1080 = load i32, ptr %1079, align 4, !tbaa !23
  %1081 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1082 = load i32, ptr %1081, align 4, !tbaa !22
  %1083 = load i32, ptr %27, align 4, !tbaa !9
  %1084 = zext i32 %1083 to i64
  %1085 = load ptr, ptr %4, align 8, !tbaa !5
  %1086 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1085, i32 0, i32 30
  %1087 = load i32, ptr %1086, align 1, !tbaa !61
  %1088 = zext i32 %1087 to i64
  %1089 = mul nsw i64 %1084, %1088
  %1090 = sdiv i64 %1089, 8
  %1091 = load ptr, ptr %20, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1091, i32 0, i32 0
  %1093 = load i32, ptr %1092, align 1, !tbaa !38
  %1094 = zext i32 %1093 to i64
  %1095 = add nsw i64 %1094, 7
  %1096 = sdiv i64 %1095, 8
  %1097 = sub nsw i64 %1090, %1096
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1076, i32 noundef 51, i32 noundef %1078, i32 noundef %1080, i32 noundef %1082, i64 noundef %1097)
  %1098 = load ptr, ptr %3, align 8, !tbaa !5
  %1099 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1100 = load i32, ptr %1099, align 4, !tbaa !23
  %1101 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1102 = load i32, ptr %1101, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef %1098, i32 noundef 8, i32 noundef %1100, i32 noundef %1102)
  br label %1103

1103:                                             ; preds = %1072, %1068, %1037
  %1104 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1105 = load i32, ptr %1104, align 4, !tbaa !49
  %1106 = icmp eq i32 %1105, 1
  br i1 %1106, label %1111, label %1107

1107:                                             ; preds = %1103
  %1108 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 25
  %1109 = load i32, ptr %1108, align 4, !tbaa !50
  %1110 = icmp eq i32 %1109, 1
  br i1 %1110, label %1111, label %1144

1111:                                             ; preds = %1107, %1103
  %1112 = load ptr, ptr %3, align 8, !tbaa !5
  %1113 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1114 = load i32, ptr %1113, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef %1112, i32 noundef 7, i32 noundef %1114)
  %1115 = load ptr, ptr %3, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1117 = load i32, ptr %1116, align 4, !tbaa !22
  %1118 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1119 = load i32, ptr %1118, align 4, !tbaa !23
  %1120 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1121 = load i32, ptr %1120, align 4, !tbaa !22
  %1122 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 29
  %1123 = load i32, ptr %1122, align 4, !tbaa !49
  %1124 = icmp eq i32 %1123, 1
  br i1 %1124, label %1125, label %1131

1125:                                             ; preds = %1111
  %1126 = load ptr, ptr %20, align 8, !tbaa !5
  %1127 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1126, i32 0, i32 0
  %1128 = load i32, ptr %1127, align 1, !tbaa !38
  %1129 = zext i32 %1128 to i64
  %1130 = mul nsw i64 %1129, 4
  br label %1137

1131:                                             ; preds = %1111
  %1132 = load ptr, ptr %20, align 8, !tbaa !5
  %1133 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1132, i32 0, i32 0
  %1134 = load i32, ptr %1133, align 1, !tbaa !38
  %1135 = zext i32 %1134 to i64
  %1136 = mul nsw i64 %1135, 2
  br label %1137

1137:                                             ; preds = %1131, %1125
  %1138 = phi i64 [ %1130, %1125 ], [ %1136, %1131 ]
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1115, i32 noundef 1073741875, i32 noundef %1117, i32 noundef %1119, i32 noundef %1121, i64 noundef %1138)
  %1139 = load ptr, ptr %3, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 24
  %1141 = load i32, ptr %1140, align 4, !tbaa !23
  %1142 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1143 = load i32, ptr %1142, align 4, !tbaa !22
  call void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef %1139, i32 noundef 7, i32 noundef %1141, i32 noundef %1143)
  br label %1144

1144:                                             ; preds = %1137, %1107
  %1145 = load ptr, ptr %20, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1145, i32 0, i32 6
  %1147 = load i32, ptr %1146, align 1, !tbaa !34
  %1148 = and i32 %1147, 65536
  %1149 = icmp ugt i32 %1148, 0
  br i1 %1149, label %1150, label %1194

1150:                                             ; preds = %1144
  %1151 = load ptr, ptr %3, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1153 = load i32, ptr %1152, align 4, !tbaa !28
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef %1151, i32 noundef %1153, i64 noundef 0)
  %1154 = load ptr, ptr %3, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1156 = load i32, ptr %1155, align 4, !tbaa !13
  %1157 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1158 = load i32, ptr %1157, align 4, !tbaa !29
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %1154, i32 noundef 19, i32 noundef %1156, i32 noundef %1158, i32 noundef 0)
  %1159 = load ptr, ptr %3, align 8, !tbaa !5
  %1160 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1161 = load i32, ptr %1160, align 4, !tbaa !14
  %1162 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1163 = load i32, ptr %1162, align 4, !tbaa !30
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %1159, i32 noundef 19, i32 noundef %1161, i32 noundef %1163, i32 noundef 0)
  %1164 = load ptr, ptr %3, align 8, !tbaa !5
  %1165 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 13
  %1166 = load i32, ptr %1165, align 4, !tbaa !25
  %1167 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %1168 = load i32, ptr %1167, align 4, !tbaa !31
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %1164, i32 noundef 12291, i32 noundef %1166, i32 noundef %1168, i32 noundef 0)
  %1169 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef %1169, ptr noundef %6)
  %1170 = load ptr, ptr %3, align 8, !tbaa !5
  %1171 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1172 = load i32, ptr %1171, align 4, !tbaa !29
  %1173 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1174 = load i32, ptr %1173, align 4, !tbaa !28
  %1175 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1176 = load i32, ptr %1175, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %1170, i32 noundef 51, i32 noundef %1172, i32 noundef %1174, i32 noundef %1176)
  %1177 = load ptr, ptr %3, align 8, !tbaa !5
  %1178 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1179 = load i32, ptr %1178, align 4, !tbaa !21
  %1180 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1181 = load i32, ptr %1180, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %1177, i32 noundef 12291, i32 noundef %1179, i32 noundef %1181, i32 noundef 0)
  %1182 = load ptr, ptr %3, align 8, !tbaa !5
  %1183 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1184 = load i32, ptr %1183, align 4, !tbaa !30
  %1185 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1186 = load i32, ptr %1185, align 4, !tbaa !28
  %1187 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1188 = load i32, ptr %1187, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %1182, i32 noundef 51, i32 noundef %1184, i32 noundef %1186, i32 noundef %1188)
  %1189 = load ptr, ptr %3, align 8, !tbaa !5
  %1190 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1191 = load i32, ptr %1190, align 4, !tbaa !21
  %1192 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1193 = load i32, ptr %1192, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %1189, i32 noundef 12291, i32 noundef %1191, i32 noundef %1193, i32 noundef 0)
  br label %1194

1194:                                             ; preds = %1150, %1144
  %1195 = load ptr, ptr %20, align 8, !tbaa !5
  %1196 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1195, i32 0, i32 6
  %1197 = load i32, ptr %1196, align 1, !tbaa !34
  %1198 = and i32 %1197, 2
  %1199 = icmp ugt i32 %1198, 0
  br i1 %1199, label %1200, label %1220

1200:                                             ; preds = %1194
  %1201 = load ptr, ptr %20, align 8, !tbaa !5
  %1202 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1201, i32 0, i32 6
  %1203 = load i32, ptr %1202, align 1, !tbaa !34
  %1204 = and i32 %1203, 4096
  %1205 = icmp eq i32 %1204, 0
  br i1 %1205, label %1206, label %1220

1206:                                             ; preds = %1200
  %1207 = load ptr, ptr %3, align 8, !tbaa !5
  %1208 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1209 = load i32, ptr %1208, align 4, !tbaa !14
  %1210 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1211 = load i32, ptr %1210, align 4, !tbaa !22
  %1212 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1213 = load i32, ptr %1212, align 4, !tbaa !14
  %1214 = load i32, ptr %27, align 4, !tbaa !9
  %1215 = zext i32 %1214 to i64
  %1216 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1217 = load i32, ptr %1216, align 4, !tbaa !56
  %1218 = zext i32 %1217 to i64
  %1219 = mul nsw i64 %1215, %1218
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1207, i32 noundef 51, i32 noundef %1209, i32 noundef %1211, i32 noundef %1213, i64 noundef %1219)
  br label %1269

1220:                                             ; preds = %1200, %1194
  %1221 = load ptr, ptr %20, align 8, !tbaa !5
  %1222 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1221, i32 0, i32 6
  %1223 = load i32, ptr %1222, align 1, !tbaa !34
  %1224 = and i32 %1223, 2
  %1225 = icmp ugt i32 %1224, 0
  br i1 %1225, label %1226, label %1249

1226:                                             ; preds = %1220
  %1227 = load ptr, ptr %20, align 8, !tbaa !5
  %1228 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1227, i32 0, i32 6
  %1229 = load i32, ptr %1228, align 1, !tbaa !34
  %1230 = and i32 %1229, 4096
  %1231 = icmp ugt i32 %1230, 0
  br i1 %1231, label %1232, label %1249

1232:                                             ; preds = %1226
  %1233 = load ptr, ptr %3, align 8, !tbaa !5
  %1234 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1235 = load i32, ptr %1234, align 4, !tbaa !14
  %1236 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1237 = load i32, ptr %1236, align 4, !tbaa !22
  %1238 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1239 = load i32, ptr %1238, align 4, !tbaa !14
  %1240 = load i32, ptr %27, align 4, !tbaa !9
  %1241 = zext i32 %1240 to i64
  %1242 = load i32, ptr %13, align 4, !tbaa !9
  %1243 = zext i32 %1242 to i64
  %1244 = mul nsw i64 %1241, %1243
  %1245 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1246 = load i32, ptr %1245, align 4, !tbaa !56
  %1247 = zext i32 %1246 to i64
  %1248 = mul nsw i64 %1244, %1247
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1233, i32 noundef 51, i32 noundef %1235, i32 noundef %1237, i32 noundef %1239, i64 noundef %1248)
  br label %1268

1249:                                             ; preds = %1226, %1220
  %1250 = load ptr, ptr %3, align 8, !tbaa !5
  %1251 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1252 = load i32, ptr %1251, align 4, !tbaa !14
  %1253 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 23
  %1254 = load i32, ptr %1253, align 4, !tbaa !22
  %1255 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1256 = load i32, ptr %1255, align 4, !tbaa !14
  %1257 = load i32, ptr %27, align 4, !tbaa !9
  %1258 = zext i32 %1257 to i64
  %1259 = load ptr, ptr %20, align 8, !tbaa !5
  %1260 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1259, i32 0, i32 4
  %1261 = load i32, ptr %1260, align 1, !tbaa !62
  %1262 = zext i32 %1261 to i64
  %1263 = mul nsw i64 %1258, %1262
  %1264 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1265 = load i32, ptr %1264, align 4, !tbaa !56
  %1266 = zext i32 %1265 to i64
  %1267 = mul nsw i64 %1263, %1266
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1250, i32 noundef 51, i32 noundef %1252, i32 noundef %1254, i32 noundef %1256, i64 noundef %1267)
  br label %1268

1268:                                             ; preds = %1249, %1232
  br label %1269

1269:                                             ; preds = %1268, %1206
  %1270 = load i32, ptr %31, align 4, !tbaa !9
  %1271 = icmp ne i32 %1270, 0
  br i1 %1271, label %1272, label %1286

1272:                                             ; preds = %1269
  %1273 = load ptr, ptr %3, align 8, !tbaa !5
  %1274 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1275 = load i32, ptr %1274, align 4, !tbaa !13
  %1276 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1277 = load i32, ptr %1276, align 4, !tbaa !21
  %1278 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1279 = load i32, ptr %1278, align 4, !tbaa !13
  %1280 = load i32, ptr %31, align 4, !tbaa !9
  %1281 = zext i32 %1280 to i64
  %1282 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1283 = load i32, ptr %1282, align 4, !tbaa !56
  %1284 = zext i32 %1283 to i64
  %1285 = mul nsw i64 %1281, %1284
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1273, i32 noundef 1073741875, i32 noundef %1275, i32 noundef %1277, i32 noundef %1279, i64 noundef %1285)
  br label %1286

1286:                                             ; preds = %1272, %1269
  %1287 = load ptr, ptr %20, align 8, !tbaa !5
  %1288 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1287, i32 0, i32 6
  %1289 = load i32, ptr %1288, align 1, !tbaa !34
  %1290 = and i32 %1289, 65536
  %1291 = icmp ugt i32 %1290, 0
  br i1 %1291, label %1292, label %1353

1292:                                             ; preds = %1286
  %1293 = load ptr, ptr %3, align 8, !tbaa !5
  %1294 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1295 = load i32, ptr %1294, align 4, !tbaa !13
  %1296 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1297 = load i32, ptr %1296, align 4, !tbaa !21
  %1298 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1299 = load i32, ptr %1298, align 4, !tbaa !13
  %1300 = load ptr, ptr %20, align 8, !tbaa !5
  %1301 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1300, i32 0, i32 0
  %1302 = load i32, ptr %1301, align 1, !tbaa !38
  %1303 = zext i32 %1302 to i64
  %1304 = getelementptr inbounds %struct.libxsmm_micro_kernel_config, ptr %5, i32 0, i32 3
  %1305 = load i32, ptr %1304, align 4, !tbaa !56
  %1306 = zext i32 %1305 to i64
  %1307 = mul nsw i64 %1303, %1306
  %1308 = load i32, ptr %13, align 4, !tbaa !9
  %1309 = zext i32 %1308 to i64
  %1310 = mul nsw i64 %1307, %1309
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %1293, i32 noundef 1073741875, i32 noundef %1295, i32 noundef %1297, i32 noundef %1299, i64 noundef %1310)
  %1311 = load ptr, ptr %3, align 8, !tbaa !5
  %1312 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1313 = load i32, ptr %1312, align 4, !tbaa !29
  %1314 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1315 = load i32, ptr %1314, align 4, !tbaa !28
  %1316 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1317 = load i32, ptr %1316, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %1311, i32 noundef 51, i32 noundef %1313, i32 noundef %1315, i32 noundef %1317)
  %1318 = load ptr, ptr %3, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1320 = load i32, ptr %1319, align 4, !tbaa !21
  %1321 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1322 = load i32, ptr %1321, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %1318, i32 noundef 12323, i32 noundef %1320, i32 noundef %1322, i32 noundef 0)
  %1323 = load ptr, ptr %3, align 8, !tbaa !5
  %1324 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1325 = load i32, ptr %1324, align 4, !tbaa !30
  %1326 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1327 = load i32, ptr %1326, align 4, !tbaa !28
  %1328 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1329 = load i32, ptr %1328, align 4, !tbaa !21
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef %1323, i32 noundef 51, i32 noundef %1325, i32 noundef %1327, i32 noundef %1329)
  %1330 = load ptr, ptr %3, align 8, !tbaa !5
  %1331 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 22
  %1332 = load i32, ptr %1331, align 4, !tbaa !21
  %1333 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1334 = load i32, ptr %1333, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef %1330, i32 noundef 12323, i32 noundef %1332, i32 noundef %1334, i32 noundef 0)
  %1335 = load ptr, ptr %3, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1337 = load i32, ptr %1336, align 4, !tbaa !28
  %1338 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 25
  %1339 = load i32, ptr %1338, align 4, !tbaa !28
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %1335, i32 noundef 19, i32 noundef %1337, i32 noundef %1339, i32 noundef 8)
  %1340 = load ptr, ptr %3, align 8, !tbaa !5
  %1341 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 14
  %1342 = load i32, ptr %1341, align 4, !tbaa !31
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef %1340, ptr noundef %6, i32 noundef %1342, i32 noundef 1)
  %1343 = load ptr, ptr %3, align 8, !tbaa !5
  %1344 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 26
  %1345 = load i32, ptr %1344, align 4, !tbaa !29
  %1346 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 1
  %1347 = load i32, ptr %1346, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %1343, i32 noundef 19, i32 noundef %1345, i32 noundef %1347, i32 noundef 0)
  %1348 = load ptr, ptr %3, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 27
  %1350 = load i32, ptr %1349, align 4, !tbaa !30
  %1351 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 3
  %1352 = load i32, ptr %1351, align 4, !tbaa !14
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %1348, i32 noundef 19, i32 noundef %1350, i32 noundef %1352, i32 noundef 0)
  br label %1353

1353:                                             ; preds = %1292, %1286
  %1354 = load ptr, ptr %3, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %7, i32 0, i32 11
  %1356 = load i32, ptr %1355, align 4, !tbaa !19
  %1357 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef %1354, ptr noundef %6, i32 noundef %1356, i32 noundef %1357)
  store i32 0, ptr %23, align 4
  br label %1358

1358:                                             ; preds = %1353, %549, %361
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  %1359 = load i32, ptr %23, align 4
  switch i32 %1359, label %1364 [
    i32 0, label %1360
  ]

1360:                                             ; preds = %1358
  br label %297, !llvm.loop !63

1361:                                             ; preds = %297
  %1362 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_generator_gemm_destroy_stack_frame_rv64(ptr noundef %1362)
  %1363 = load ptr, ptr %3, align 8, !tbaa !5
  call void @libxsmm_rv64_instruction_close_stream(ptr noundef %1363, i16 noundef zeroext 1023)
  store i32 0, ptr %23, align 4
  br label %1364

1364:                                             ; preds = %1361, %1358, %176, %137, %110
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 95, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 132, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 2052, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 688, ptr %5) #6
  %1365 = load i32, ptr %23, align 4
  switch i32 %1365, label %1367 [
    i32 0, label %1366
    i32 1, label %1366
  ]

1366:                                             ; preds = %1364, %1364
  ret void

1367:                                             ; preds = %1364
  unreachable
}

declare i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef) #3

declare void @libxsmm_reset_loop_label_tracker(ptr noundef) #3

declare void @libxsmm_generator_gemm_rv64_setup_n_blocking(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #3

declare void @libxsmm_rv64_instruction_open_stream(ptr noundef, i16 noundef zeroext) #3

declare void @libxsmm_rv64_instruction_close_stream(ptr noundef, i16 noundef zeroext) #3

declare i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef) #3

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

declare void @libxsmm_generator_gemm_setup_stack_frame_rv64(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare void @libxsmm_rv64_instruction_rvv_setivli(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

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

declare void @libxsmm_rv64_instruction_rvv_setvli(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_generator_load_2dregblock_rv64_rvv(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef, ptr noundef) #3

declare void @libxsmm_generator_gemm_apply_fusion_2dregblock_rv64(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_generator_store_2dregblock_rv64_rvv(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) #3

declare void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef, i32 noundef, i32 noundef) #3

declare void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #3

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

declare void @libxsmm_generator_gemm_destroy_stack_frame_rv64(ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { 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 #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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nounwind }
attributes #7 = { 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 = !{!12, !10, i64 0}
!12 = !{!"libxsmm_gp_reg_mapping_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128}
!13 = !{!12, !10, i64 4}
!14 = !{!12, !10, i64 12}
!15 = !{!12, !10, i64 20}
!16 = !{!12, !10, i64 24}
!17 = !{!12, !10, i64 32}
!18 = !{!12, !10, i64 40}
!19 = !{!12, !10, i64 44}
!20 = !{!12, !10, i64 48}
!21 = !{!12, !10, i64 88}
!22 = !{!12, !10, i64 92}
!23 = !{!12, !10, i64 96}
!24 = !{!12, !10, i64 80}
!25 = !{!12, !10, i64 52}
!26 = !{!12, !10, i64 28}
!27 = !{!12, !10, i64 36}
!28 = !{!12, !10, i64 100}
!29 = !{!12, !10, i64 104}
!30 = !{!12, !10, i64 108}
!31 = !{!12, !10, i64 56}
!32 = !{!33, !10, i64 28}
!33 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!34 = !{!35, !10, i64 24}
!35 = !{!"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, !36, i64 33, !36, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !37, i64 62, !37, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !37, i64 70, !37, i64 72, !37, i64 74, !37, i64 76, !37, i64 78, !37, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!36 = !{!"long long", !7, i64 0}
!37 = !{!"short", !7, i64 0}
!38 = !{!35, !10, i64 0}
!39 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 4, !9, i64 28, i64 1, !40, i64 29, i64 3, !40, i64 32, i64 1, !40, i64 33, i64 8, !41, i64 41, i64 8, !41, i64 49, i64 1, !40, i64 50, i64 4, !9, i64 54, i64 4, !9, i64 58, i64 4, !9, i64 62, i64 2, !42, i64 64, i64 2, !42, i64 66, i64 1, !40, i64 67, i64 1, !40, i64 68, i64 1, !40, i64 69, i64 1, !40, i64 70, i64 2, !42, i64 72, i64 2, !42, i64 74, i64 2, !42, i64 76, i64 2, !42, i64 78, i64 2, !42, i64 80, i64 2, !42, i64 82, i64 4, !9, i64 86, i64 4, !9, i64 90, i64 4, !9, i64 94, i64 1, !40}
!40 = !{!7, !7, i64 0}
!41 = !{!36, !36, i64 0}
!42 = !{!37, !37, i64 0}
!43 = !{!35, !10, i64 12}
!44 = !{!35, !7, i64 28}
!45 = !{!35, !10, i64 4}
!46 = !{!47, !10, i64 8}
!47 = !{!"libxsmm_micro_kernel_config", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !7, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !10, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !7, i64 364, !7, i64 380, !7, i64 396, !7, i64 412, !7, i64 428, !7, i64 444, !10, i64 460, !7, i64 464, !48, i64 520, !10, i64 556, !10, i64 560, !10, i64 564, !10, i64 568, !10, i64 572, !10, i64 576, !10, i64 580, !10, i64 584, !6, i64 592, !10, i64 600, !10, i64 604, !10, i64 608, !10, i64 612, !6, i64 616, !10, i64 624, !10, i64 628, !10, i64 632, !10, i64 636, !10, i64 640, !10, i64 644, !10, i64 648, !10, i64 652, !10, i64 656, !10, i64 660, !10, i64 664, !10, i64 668, !10, i64 672, !10, i64 676, !10, i64 680}
!48 = !{!"libxsmm_tile_config", !7, i64 0, !37, i64 2, !7, i64 4, !37, i64 6, !7, i64 8, !37, i64 10, !7, i64 12, !37, i64 14, !7, i64 16, !37, i64 18, !7, i64 20, !37, i64 22, !7, i64 24, !37, i64 26, !7, i64 28, !37, i64 30, !7, i64 32}
!49 = !{!47, !10, i64 116}
!50 = !{!47, !10, i64 100}
!51 = !{!47, !10, i64 4}
!52 = !{!35, !10, i64 20}
!53 = !{!47, !10, i64 20}
!54 = !{!35, !36, i64 33}
!55 = !{!35, !36, i64 41}
!56 = !{!47, !10, i64 12}
!57 = distinct !{!57, !58}
!58 = !{!"llvm.loop.mustprogress"}
!59 = !{!47, !10, i64 120}
!60 = !{!47, !10, i64 136}
!61 = !{!35, !10, i64 90}
!62 = !{!35, !10, i64 16}
!63 = distinct !{!63, !58}


; 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_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_loop_label_tracker_struct = type { [512 x i32], i32 }
%struct.libxsmm_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, 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 [75 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@__func__.libxsmm_generator_gemm_rv64_kernel = external hidden unnamed_addr constant [35 x i8], align 1
@switch.table.libxsmm_generator_gemm_rv64_kernel = private unnamed_addr constant [7 x i32] [i32 2, i32 1, i32 4, i32 1, i32 1, i32 1, i32 8], align 4
@switch.table.libxsmm_generator_gemm_rv64_kernel.1 = private unnamed_addr constant [7 x i32] [i32 1, i32 0, i32 2, i32 0, i32 0, i32 0, i32 3], align 4

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

declare i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef) local_unnamed_addr #1

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #1

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

declare void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_alu_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_alu_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_gemm_rv64_kloop(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @libxsmm_generator_loop_header_rv64(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_loop_footer_rv64(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_rv64_kernel(ptr noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = alloca %struct.libxsmm_micro_kernel_config, align 8
  %4 = alloca %struct.libxsmm_loop_label_tracker_struct, align 4
  %5 = alloca %struct.libxsmm_gp_reg_mapping_struct, align 4
  %6 = alloca [2 x i32], align 8
  %7 = alloca [2 x i32], align 8
  %8 = alloca %struct.libxsmm_gemm_descriptor, align 4
  call void @llvm.lifetime.start.p0(i64 688, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 2052, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 132, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  store i64 0, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  store i64 0, ptr %7, align 8
  %9 = getelementptr inbounds i8, ptr %1, i64 29
  %10 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %11 = icmp eq i32 %10, 1
  br i1 %11, label %12, label %15

12:                                               ; preds = %2
  %13 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %9) #4
  %14 = icmp eq i32 %13, 12
  br label %15

15:                                               ; preds = %12, %2
  %16 = phi i1 [ false, %2 ], [ %14, %12 ]
  %17 = tail call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %9) #4
  %18 = icmp eq i32 %17, 4
  br i1 %18, label %26, label %19

19:                                               ; preds = %15
  %20 = tail call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %9) #4
  %21 = icmp eq i32 %20, 2
  br i1 %21, label %26, label %22

22:                                               ; preds = %19
  %23 = tail call i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef nonnull %9) #4
  %24 = icmp eq i32 %23, 1
  %25 = select i1 %24, i32 2, i32 3
  br label %26

26:                                               ; preds = %22, %19, %15
  %27 = phi i32 [ 0, %15 ], [ %25, %22 ], [ 1, %19 ]
  call void @llvm.lifetime.start.p0(i64 95, ptr nonnull %8) #4
  store i32 10, ptr %5, align 4, !tbaa !5
  %28 = getelementptr inbounds i8, ptr %5, i64 4
  store i32 11, ptr %28, align 4, !tbaa !10
  %29 = getelementptr inbounds i8, ptr %5, i64 12
  store i32 12, ptr %29, align 4, !tbaa !11
  %30 = getelementptr inbounds i8, ptr %5, i64 20
  %31 = getelementptr inbounds i8, ptr %5, i64 24
  %32 = getelementptr inbounds i8, ptr %5, i64 32
  %33 = getelementptr inbounds i8, ptr %5, i64 40
  %34 = getelementptr inbounds i8, ptr %5, i64 44
  %35 = getelementptr inbounds i8, ptr %5, i64 88
  %36 = getelementptr inbounds i8, ptr %5, i64 92
  %37 = getelementptr inbounds i8, ptr %5, i64 96
  %38 = getelementptr inbounds i8, ptr %5, i64 80
  store i32 22, ptr %38, align 4, !tbaa !12
  %39 = getelementptr inbounds i8, ptr %5, i64 52
  store i32 23, ptr %39, align 4, !tbaa !13
  %40 = getelementptr inbounds i8, ptr %5, i64 28
  store <4 x i32> <i32 13, i32 14, i32 24, i32 15>, ptr %30, align 4, !tbaa !14
  %41 = getelementptr inbounds i8, ptr %5, i64 36
  store <4 x i32> <i32 25, i32 16, i32 17, i32 18>, ptr %41, align 4, !tbaa !14
  %42 = getelementptr inbounds i8, ptr %5, i64 100
  store <4 x i32> <i32 19, i32 20, i32 21, i32 26>, ptr %35, align 4, !tbaa !14
  %43 = getelementptr inbounds i8, ptr %5, i64 104
  store i32 28, ptr %43, align 4, !tbaa !15
  %44 = getelementptr inbounds i8, ptr %5, i64 108
  store i32 29, ptr %44, align 4, !tbaa !16
  %45 = getelementptr inbounds i8, ptr %5, i64 56
  store i32 30, ptr %45, align 4, !tbaa !17
  call void @libxsmm_reset_loop_label_tracker(ptr noundef nonnull %4) #4
  %46 = getelementptr inbounds i8, ptr %0, i64 28
  %47 = load i32, ptr %46, align 4, !tbaa !18
  call void @libxsmm_generator_gemm_rv64_setup_n_blocking(ptr noundef %0, ptr noundef nonnull %3, ptr noundef %1, i32 noundef %47, ptr noundef nonnull %7, ptr noundef nonnull %6) #4
  %48 = load i32, ptr %7, align 8, !tbaa !14
  %49 = icmp eq i32 %48, 0
  br i1 %49, label %50, label %55

50:                                               ; preds = %26
  %51 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %52 = icmp ugt i32 %51, 1
  %53 = load i32, ptr @libxsmm_verbosity, align 4
  %54 = select i1 %52, i32 %53, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90016, ptr noundef nonnull @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef nonnull @.str.1, i32 noundef 446, i32 noundef %54) #4
  br label %.thread359

55:                                               ; preds = %26
  call void @libxsmm_rv64_instruction_open_stream(ptr noundef nonnull %0, i16 noundef zeroext 1023) #4
  %56 = getelementptr inbounds i8, ptr %1, i64 24
  %57 = load i32, ptr %56, align 1, !tbaa !21
  %58 = trunc i32 %57 to i8
  %trunc = and i8 %58, -64
  switch i8 %trunc, label %59 [
    i8 -64, label %60
    i8 0, label %60
  ]

59:                                               ; preds = %55
  call void @libxsmm_rv64_instruction_close_stream(ptr noundef nonnull %0, i16 noundef zeroext 1023) #4
  br label %.thread359

60:                                               ; preds = %55, %55
  %61 = load i32, ptr %1, align 1, !tbaa !25
  %62 = and i32 %57, 1
  %.not303 = icmp eq i32 %62, 0
  br i1 %.not303, label %79, label %63

63:                                               ; preds = %60
  %64 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef nonnull %9) #4
  %65 = icmp eq i32 %64, 1
  br i1 %65, label %69, label %66

66:                                               ; preds = %63
  %67 = call i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef nonnull %9) #4
  %68 = icmp eq i32 %67, 0
  br i1 %68, label %69, label %74

69:                                               ; preds = %66, %63
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(95) %8, ptr noundef nonnull align 1 dereferenceable(95) %1, i64 95, i1 false), !tbaa.struct !26
  %70 = getelementptr inbounds i8, ptr %8, i64 12
  store i32 %61, ptr %70, align 4, !tbaa !30
  %71 = load i32, ptr %56, align 1, !tbaa !21
  %72 = and i32 %71, -2
  %73 = getelementptr inbounds i8, ptr %8, i64 24
  store i32 %72, ptr %73, align 4, !tbaa !21
  br label %80

74:                                               ; preds = %66
  %75 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %76 = icmp ugt i32 %75, 1
  %77 = load i32, ptr @libxsmm_verbosity, align 4
  %78 = select i1 %76, i32 %77, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90033, ptr noundef nonnull @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef nonnull @.str.1, i32 noundef 470, i32 noundef %78) #4
  br label %.thread359

79:                                               ; preds = %60
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(95) %8, ptr noundef nonnull align 1 dereferenceable(95) %1, i64 95, i1 false), !tbaa.struct !26
  %.phi.trans.insert = getelementptr inbounds i8, ptr %8, i64 24
  %.pre = load i32, ptr %.phi.trans.insert, align 4, !tbaa !21
  br label %80

80:                                               ; preds = %79, %69
  %81 = phi i32 [ %.pre, %79 ], [ %72, %69 ]
  %82 = getelementptr inbounds i8, ptr %8, i64 24
  %83 = and i32 %81, 49152
  %or.cond338 = icmp eq i32 %83, 0
  br i1 %or.cond338, label %117, label %84

84:                                               ; preds = %80
  %85 = load i32, ptr %5, align 4, !tbaa !5
  %86 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %85, i32 noundef 0, i32 noundef %86) #4
  %87 = load i32, ptr %36, align 4, !tbaa !31
  %88 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %87, i32 noundef %88, i32 noundef 32) #4
  %89 = load i32, ptr %36, align 4, !tbaa !31
  %90 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %89, i32 noundef %90, i32 noundef 80) #4
  %91 = load i32, ptr %36, align 4, !tbaa !31
  %92 = load i32, ptr %30, align 4, !tbaa !32
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %91, i32 noundef %92, i32 noundef 128) #4
  br i1 %16, label %93, label %96

93:                                               ; preds = %84
  %94 = load i32, ptr %36, align 4, !tbaa !31
  %95 = load i32, ptr %38, align 4, !tbaa !12
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %94, i32 noundef %95, i32 noundef 144) #4
  br label %96

96:                                               ; preds = %93, %84
  %97 = getelementptr inbounds i8, ptr %8, i64 28
  %98 = load i8, ptr %97, align 4, !tbaa !33
  %.not306 = icmp eq i8 %98, 0
  br i1 %.not306, label %104, label %99

99:                                               ; preds = %96
  %100 = load i32, ptr %36, align 4, !tbaa !31
  %101 = load i32, ptr %31, align 4, !tbaa !34
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %100, i32 noundef %101, i32 noundef 72) #4
  %102 = load i32, ptr %36, align 4, !tbaa !31
  %103 = load i32, ptr %32, align 4, !tbaa !35
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %102, i32 noundef %103, i32 noundef 120) #4
  br label %104

104:                                              ; preds = %99, %96
  %105 = load i32, ptr %82, align 4, !tbaa !21
  %106 = and i32 %105, 458752
  %or.cond340 = icmp eq i32 %106, 0
  br i1 %or.cond340, label %117, label %107

107:                                              ; preds = %104
  %108 = load i32, ptr %36, align 4, !tbaa !31
  %109 = load i32, ptr %39, align 4, !tbaa !13
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %108, i32 noundef %109, i32 noundef 16) #4
  %110 = load i32, ptr %82, align 4, !tbaa !21
  %111 = and i32 %110, 131072
  %.not310 = icmp eq i32 %111, 0
  br i1 %.not310, label %117, label %112

112:                                              ; preds = %107
  %113 = load i32, ptr %36, align 4, !tbaa !31
  %114 = load i32, ptr %40, align 4, !tbaa !36
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %113, i32 noundef %114, i32 noundef 40) #4
  %115 = load i32, ptr %36, align 4, !tbaa !31
  %116 = load i32, ptr %41, align 4, !tbaa !37
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %115, i32 noundef %116, i32 noundef 88) #4
  br label %117

117:                                              ; preds = %112, %107, %104, %80
  call void @libxsmm_generator_gemm_setup_stack_frame_rv64(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %5, ptr noundef nonnull %3) #4
  call void @libxsmm_reset_loop_label_tracker(ptr noundef nonnull %4) #4
  %118 = getelementptr inbounds i8, ptr %8, i64 4
  %119 = load i32, ptr %118, align 4, !tbaa !38
  %.not311372 = icmp eq i32 %119, 0
  br i1 %.not311372, label %._crit_edge377, label %.lr.ph376

.lr.ph376:                                        ; preds = %117
  %120 = getelementptr inbounds i8, ptr %3, i64 8
  %121 = getelementptr inbounds i8, ptr %3, i64 116
  %122 = getelementptr inbounds i8, ptr %3, i64 100
  %123 = getelementptr inbounds i8, ptr %3, i64 4
  %124 = getelementptr inbounds i8, ptr %8, i64 20
  %125 = getelementptr inbounds i8, ptr %3, i64 20
  %126 = getelementptr inbounds i8, ptr %8, i64 33
  %127 = getelementptr inbounds i8, ptr %8, i64 41
  %128 = getelementptr inbounds i8, ptr %3, i64 12
  %129 = getelementptr inbounds i8, ptr %3, i64 120
  %130 = getelementptr inbounds i8, ptr %3, i64 136
  %131 = getelementptr inbounds i8, ptr %1, i64 90
  %132 = getelementptr inbounds i8, ptr %8, i64 16
  br label %133

133:                                              ; preds = %.lr.ph376, %513
  %.0291374 = phi i32 [ 0, %.lr.ph376 ], [ %140, %513 ]
  %.0292373 = phi i32 [ 0, %.lr.ph376 ], [ %139, %513 ]
  %134 = zext i32 %.0291374 to i64
  %135 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %134
  %136 = load i32, ptr %135, align 4, !tbaa !14
  %137 = getelementptr inbounds [2 x i32], ptr %7, i64 0, i64 %134
  %138 = load i32, ptr %137, align 4, !tbaa !14
  %139 = add i32 %138, %.0292373
  %140 = add i32 %.0291374, 1
  %141 = load i32, ptr %34, align 4, !tbaa !39
  call void @libxsmm_generator_loop_header_rv64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %141, i32 noundef %138) #4
  %142 = load i32, ptr %46, align 4, !tbaa !18
  %.not312 = icmp eq i32 %142, 3003
  br i1 %.not312, label %146, label %143

143:                                              ; preds = %133
  %144 = load i32, ptr %120, align 8, !tbaa !40
  %145 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_rvv_setivli(ptr noundef nonnull %0, i32 noundef %144, i32 noundef %145, i32 noundef %27, i32 noundef 0) #4
  %.pre379 = load i32, ptr %46, align 4, !tbaa !18
  br label %146

146:                                              ; preds = %143, %133
  %147 = phi i32 [ %.pre379, %143 ], [ 3003, %133 ]
  %148 = call i32 @libxsmm_generator_gemm_rv64_get_initial_m_blocking(ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %147) #4
  %149 = load i32, ptr %8, align 4, !tbaa !25
  %.not313366 = icmp eq i32 %149, 0
  br i1 %.not313366, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %146, %387
  %.0370 = phi i32 [ %.2, %387 ], [ 0, %146 ]
  %.0289369 = phi i32 [ %389, %387 ], [ %148, %146 ]
  %.0290368 = phi i32 [ %181, %387 ], [ 0, %146 ]
  %.0295367 = phi i32 [ %.1296, %387 ], [ 0, %146 ]
  %150 = icmp eq i32 %.0289369, 0
  br i1 %150, label %151, label %156

151:                                              ; preds = %.lr.ph
  %152 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %153 = icmp ugt i32 %152, 1
  %154 = load i32, ptr @libxsmm_verbosity, align 4
  %155 = select i1 %153, i32 %154, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90017, ptr noundef nonnull @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef nonnull @.str.1, i32 noundef 567, i32 noundef %155) #4
  br label %.thread359

156:                                              ; preds = %.lr.ph
  %157 = load i32, ptr %46, align 4, !tbaa !18
  %158 = icmp eq i32 %157, 3003
  %.pre381.pre = load i32, ptr %120, align 8, !tbaa !40
  br i1 %158, label %159, label %164

159:                                              ; preds = %156
  %160 = udiv i32 %.0289369, %.pre381.pre
  %switch.tableidx = add i32 %160, -2
  %161 = icmp ult i32 %switch.tableidx, 7
  br i1 %161, label %switch.lookup, label %164

switch.lookup:                                    ; preds = %159
  %162 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [7 x i32], ptr @switch.table.libxsmm_generator_gemm_rv64_kernel, i64 0, i64 %162
  %switch.load = load i32, ptr %switch.gep, align 4
  %163 = zext nneg i32 %switch.tableidx to i64
  %switch.gep392 = getelementptr inbounds [7 x i32], ptr @switch.table.libxsmm_generator_gemm_rv64_kernel.1, i64 0, i64 %163
  %switch.load393 = load i32, ptr %switch.gep392, align 4
  br label %164

164:                                              ; preds = %159, %switch.lookup, %156
  %.0293351 = phi i32 [ 1, %156 ], [ %switch.load, %switch.lookup ], [ 1, %159 ]
  %.1296 = phi i32 [ 0, %156 ], [ %switch.load393, %switch.lookup ], [ 0, %159 ]
  %.not320 = icmp eq i32 %.0295367, %.1296
  br i1 %.not320, label %171, label %165

165:                                              ; preds = %164
  %166 = load i32, ptr %44, align 4, !tbaa !16
  %167 = zext i32 %.pre381.pre to i64
  %168 = zext nneg i32 %.0293351 to i64
  %169 = mul nuw nsw i64 %167, %168
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %166, i64 noundef %169) #4
  %170 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_rvv_setvli(ptr noundef nonnull %0, i32 noundef %170, i32 noundef %170, i32 noundef %27, i32 noundef %.1296) #4
  %.pre380 = load i32, ptr %120, align 8, !tbaa !40
  br label %171

171:                                              ; preds = %164, %165
  %172 = phi i32 [ %.pre381.pre, %164 ], [ %.pre380, %165 ]
  %173 = icmp ult i32 %.0289369, %172
  br i1 %173, label %174, label %176

174:                                              ; preds = %171
  %175 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_rvv_setivli(ptr noundef nonnull %0, i32 noundef %.0289369, i32 noundef %175, i32 noundef %27, i32 noundef 0) #4
  br label %176

176:                                              ; preds = %171, %174
  %177 = load i32, ptr %8, align 4, !tbaa !25
  %178 = sub i32 %177, %.0290368
  %.fr = freeze i32 %178
  %179 = urem i32 %.fr, %.0289369
  %180 = sub nuw i32 %.fr, %179
  %181 = add i32 %180, %.0290368
  %182 = icmp ne i32 %.fr, %179
  %183 = icmp ne i32 %181, 0
  %or.cond = select i1 %182, i1 %183, i1 false
  br i1 %or.cond, label %184, label %387

184:                                              ; preds = %176
  %185 = load i32, ptr %33, align 4, !tbaa !43
  call void @libxsmm_generator_loop_header_rv64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %185, i32 noundef %180) #4
  %186 = load i32, ptr %46, align 4, !tbaa !18
  %187 = icmp ugt i32 %186, 3000
  br i1 %187, label %188, label %214

188:                                              ; preds = %184
  %189 = load i32, ptr %121, align 4, !tbaa !44
  %190 = icmp eq i32 %189, 1
  %191 = load i32, ptr %122, align 4
  %192 = icmp eq i32 %191, 1
  %or.cond4 = select i1 %190, i1 true, i1 %192
  br i1 %or.cond4, label %193, label %202

193:                                              ; preds = %188
  %194 = load i32, ptr %30, align 4, !tbaa !32
  %195 = load i32, ptr %35, align 4, !tbaa !45
  %196 = load i32, ptr %120, align 8, !tbaa !40
  %197 = load i32, ptr %123, align 4, !tbaa !46
  %198 = select i1 %190, i32 1, i32 2
  %199 = load i32, ptr %124, align 4, !tbaa !47
  %200 = load i32, ptr %125, align 4, !tbaa !48
  %201 = mul i32 %200, %199
  call void @libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %194, i32 noundef %195, i32 noundef %196, i32 noundef %197, i32 noundef %198, i32 noundef %.0289369, i32 noundef %136, i32 noundef %201) #4
  br label %219

202:                                              ; preds = %188
  %203 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %204 = load i32, ptr %30, align 4, !tbaa !32
  %205 = load i32, ptr %35, align 4, !tbaa !45
  %206 = load i32, ptr %120, align 8, !tbaa !40
  %207 = load i32, ptr %123, align 4, !tbaa !46
  %208 = load i32, ptr %124, align 4, !tbaa !47
  %209 = load i32, ptr %125, align 4, !tbaa !48
  %210 = mul i32 %209, %208
  %211 = load i32, ptr %82, align 4
  %212 = and i32 %211, 4
  %213 = select i1 %16, i32 1, i32 %212
  call void @libxsmm_generator_load_2dregblock_rv64_rvv(ptr noundef nonnull %0, i32 noundef %203, i32 noundef %204, i32 noundef %205, i32 noundef %206, i32 noundef %207, i32 noundef %.0289369, i32 noundef %136, i32 noundef %210, i32 noundef %213, i32 noundef %.0293351) #4
  br label %219

214:                                              ; preds = %184
  %215 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %216 = icmp ugt i32 %215, 1
  %217 = load i32, ptr @libxsmm_verbosity, align 4
  %218 = select i1 %216, i32 %217, i32 1
  call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90005, ptr noundef nonnull @__func__.libxsmm_generator_gemm_rv64_kernel, ptr noundef nonnull @.str.1, i32 noundef 639, i32 noundef %218) #4
  br label %.thread359

219:                                              ; preds = %193, %202
  %220 = load i32, ptr %82, align 4, !tbaa !21
  %221 = and i32 %220, 458752
  %or.cond342 = icmp eq i32 %221, 0
  br i1 %or.cond342, label %268, label %222

222:                                              ; preds = %219
  %223 = and i32 %220, 262144
  %.not323 = icmp eq i32 %223, 0
  br i1 %.not323, label %227, label %224

224:                                              ; preds = %222
  %225 = load i32, ptr %43, align 4, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %225, i64 noundef 0) #4
  %226 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %226, i64 noundef 0) #4
  br label %233

227:                                              ; preds = %222
  %228 = load i32, ptr %42, align 4, !tbaa !49
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %228, i64 noundef 0) #4
  %229 = load i32, ptr %28, align 4, !tbaa !10
  %230 = load i32, ptr %43, align 4, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %229, i32 noundef %230, i32 noundef 0) #4
  %231 = load i32, ptr %29, align 4, !tbaa !11
  %232 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %231, i32 noundef %232, i32 noundef 0) #4
  br label %233

233:                                              ; preds = %227, %224
  %234 = load i32, ptr %39, align 4, !tbaa !13
  %235 = load i32, ptr %45, align 4, !tbaa !17
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %234, i32 noundef %235, i32 noundef 0) #4
  call void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef nonnull %0, ptr noundef nonnull %4) #4
  %236 = load i32, ptr %82, align 4, !tbaa !21
  %237 = and i32 %236, 65536
  %.not325 = icmp eq i32 %237, 0
  br i1 %.not325, label %249, label %238

238:                                              ; preds = %233
  %239 = load i32, ptr %43, align 4, !tbaa !15
  %240 = load i32, ptr %42, align 4, !tbaa !49
  %241 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %239, i32 noundef %240, i32 noundef %241) #4
  %242 = load i32, ptr %35, align 4, !tbaa !45
  %243 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %242, i32 noundef %243, i32 noundef 0) #4
  %244 = load i32, ptr %44, align 4, !tbaa !16
  %245 = load i32, ptr %42, align 4, !tbaa !49
  %246 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %244, i32 noundef %245, i32 noundef %246) #4
  %247 = load i32, ptr %35, align 4, !tbaa !45
  %248 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %247, i32 noundef %248, i32 noundef 0) #4
  %.pre382 = load i32, ptr %82, align 4, !tbaa !21
  br label %249

249:                                              ; preds = %238, %233
  %250 = phi i32 [ %.pre382, %238 ], [ %236, %233 ]
  %251 = and i32 %250, 131072
  %.not326 = icmp eq i32 %251, 0
  br i1 %.not326, label %268, label %252

252:                                              ; preds = %249
  %253 = load i32, ptr %40, align 4, !tbaa !36
  %254 = load i32, ptr %42, align 4, !tbaa !49
  %255 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %253, i32 noundef %254, i32 noundef %255) #4
  %256 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %256, i32 noundef %256, i32 noundef 0) #4
  %257 = load i32, ptr %43, align 4, !tbaa !15
  %258 = load i32, ptr %35, align 4, !tbaa !45
  %259 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %257, i32 noundef %258, i32 noundef %259) #4
  %260 = load i32, ptr %41, align 4, !tbaa !37
  %261 = load i32, ptr %42, align 4, !tbaa !49
  %262 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %260, i32 noundef %261, i32 noundef %262) #4
  %263 = load i32, ptr %35, align 4, !tbaa !45
  %264 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %263, i32 noundef %264, i32 noundef 0) #4
  %265 = load i32, ptr %44, align 4, !tbaa !16
  %266 = load i32, ptr %36, align 4, !tbaa !31
  %267 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %265, i32 noundef %266, i32 noundef %267) #4
  br label %268

268:                                              ; preds = %219, %249, %252
  call void @libxsmm_generator_gemm_rv64_kloop(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %.0289369, i32 noundef %136, i32 noundef %.0293351)
  %269 = load i32, ptr %82, align 4, !tbaa !21
  %270 = and i32 %269, 458752
  %or.cond344 = icmp eq i32 %270, 0
  br i1 %or.cond344, label %301, label %271

271:                                              ; preds = %268
  %272 = and i32 %269, 262144
  %.not329 = icmp eq i32 %272, 0
  br i1 %.not329, label %273, label %.thread

273:                                              ; preds = %271
  %274 = load i32, ptr %42, align 4, !tbaa !49
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %274, i32 noundef %274, i32 noundef 8) #4
  %.pre383 = load i32, ptr %82, align 4, !tbaa !21
  %.pre385 = and i32 %.pre383, 262144
  %.not331 = icmp eq i32 %.pre385, 0
  br i1 %.not331, label %287, label %.thread

.thread:                                          ; preds = %271, %273
  %275 = load i32, ptr %35, align 4, !tbaa !45
  %276 = load i64, ptr %126, align 1, !tbaa !50
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %275, i64 noundef %276) #4
  %277 = load i32, ptr %36, align 4, !tbaa !31
  %278 = load i64, ptr %127, align 1, !tbaa !51
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %277, i64 noundef %278) #4
  %279 = load i32, ptr %35, align 4, !tbaa !45
  %280 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %279, i32 noundef %280, i32 noundef %280) #4
  %281 = load i32, ptr %36, align 4, !tbaa !31
  %282 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %281, i32 noundef %282, i32 noundef %282) #4
  %283 = load i32, ptr %35, align 4, !tbaa !45
  %284 = load i32, ptr %43, align 4, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %283, i32 noundef %284, i32 noundef %284) #4
  %285 = load i32, ptr %36, align 4, !tbaa !31
  %286 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %285, i32 noundef %286, i32 noundef %286) #4
  br label %287

287:                                              ; preds = %.thread, %273
  %288 = load i32, ptr %45, align 4, !tbaa !17
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %288, i32 noundef 1) #4
  %289 = load i32, ptr %82, align 4, !tbaa !21
  %290 = and i32 %289, 262144
  %.not332 = icmp eq i32 %290, 0
  br i1 %.not332, label %296, label %291

291:                                              ; preds = %287
  %292 = load i32, ptr %28, align 4, !tbaa !10
  %293 = load i32, ptr %43, align 4, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 1073741875, i32 noundef %292, i32 noundef %293, i32 noundef %292) #4
  %294 = load i32, ptr %29, align 4, !tbaa !11
  %295 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 1073741875, i32 noundef %294, i32 noundef %295, i32 noundef %294) #4
  br label %301

296:                                              ; preds = %287
  %297 = load i32, ptr %43, align 4, !tbaa !15
  %298 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %297, i32 noundef %298, i32 noundef 0) #4
  %299 = load i32, ptr %44, align 4, !tbaa !16
  %300 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %299, i32 noundef %300, i32 noundef 0) #4
  br label %301

301:                                              ; preds = %268, %291, %296
  %302 = load i32, ptr %46, align 4, !tbaa !18
  %303 = icmp ugt i32 %302, 3000
  br i1 %303, label %304, label %327

304:                                              ; preds = %301
  %305 = load i32, ptr %35, align 4, !tbaa !45
  %306 = load i32, ptr %36, align 4, !tbaa !31
  %307 = load i32, ptr %120, align 8, !tbaa !40
  %308 = load i32, ptr %123, align 4, !tbaa !46
  call void @libxsmm_generator_gemm_apply_fusion_2dregblock_rv64(ptr noundef nonnull %0, ptr noundef nonnull %8, ptr noundef nonnull %3, i32 noundef %305, i32 noundef %306, i32 noundef %307, i32 noundef %308, i32 noundef %.0289369, i32 noundef %136) #4
  %309 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  %310 = load i32, ptr %30, align 4, !tbaa !32
  %311 = load i32, ptr %43, align 4, !tbaa !15
  %312 = load i32, ptr %120, align 8, !tbaa !40
  %313 = load i32, ptr %123, align 4, !tbaa !46
  %314 = load i32, ptr %124, align 4, !tbaa !47
  %315 = load i32, ptr %125, align 4, !tbaa !48
  %316 = mul i32 %315, %314
  br i1 %16, label %319, label %317

317:                                              ; preds = %304
  %318 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %9) #4
  br label %319

319:                                              ; preds = %304, %317
  %320 = phi i32 [ %318, %317 ], [ 8, %304 ]
  %321 = load i32, ptr %38, align 4
  %322 = select i1 %16, i32 %321, i32 0
  %323 = load i32, ptr %82, align 4
  %324 = lshr i32 %323, 2
  %.lobit = and i32 %324, 1
  %325 = xor i32 %.lobit, 1
  %326 = select i1 %16, i32 %325, i32 0
  call void @libxsmm_generator_store_2dregblock_rv64_rvv(ptr noundef nonnull %0, i32 noundef %309, i32 noundef %310, i32 noundef %311, i32 noundef %312, i32 noundef %313, i32 noundef %.0289369, i32 noundef %136, i32 noundef %316, i32 noundef %320, i32 noundef %322, i32 noundef %326, i32 noundef %.0293351) #4
  br label %327

327:                                              ; preds = %319, %301
  %328 = load i32, ptr %30, align 4, !tbaa !32
  %329 = load i32, ptr %37, align 4, !tbaa !52
  %330 = zext i32 %.0289369 to i64
  %331 = load i32, ptr %125, align 4, !tbaa !48
  %332 = zext i32 %331 to i64
  %333 = mul nuw nsw i64 %332, %330
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %328, i32 noundef %329, i32 noundef %328, i64 noundef %333) #4
  %334 = load i32, ptr %121, align 4, !tbaa !44
  %335 = icmp eq i32 %334, 1
  %336 = load i32, ptr %122, align 4
  %337 = icmp eq i32 %336, 1
  %or.cond7 = select i1 %335, i1 true, i1 %337
  br i1 %or.cond7, label %338, label %347

338:                                              ; preds = %327
  %339 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %339) #4
  %340 = load i32, ptr %36, align 4, !tbaa !31
  %341 = load i32, ptr %37, align 4, !tbaa !52
  %342 = load i32, ptr %121, align 4, !tbaa !44
  %343 = icmp eq i32 %342, 1
  %.v = select i1 %343, i64 2, i64 1
  %344 = shl nuw nsw i64 %330, %.v
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %340, i32 noundef %341, i32 noundef %340, i64 noundef %344) #4
  %345 = load i32, ptr %37, align 4, !tbaa !52
  %346 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %345, i32 noundef %346) #4
  br label %347

347:                                              ; preds = %327, %338
  %348 = load i32, ptr %82, align 4, !tbaa !21
  %349 = and i32 %348, 65536
  %.not333 = icmp eq i32 %349, 0
  br i1 %.not333, label %375, label %350

350:                                              ; preds = %347
  %351 = load i32, ptr %42, align 4, !tbaa !49
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %351, i64 noundef 0) #4
  %352 = load i32, ptr %28, align 4, !tbaa !10
  %353 = load i32, ptr %43, align 4, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %352, i32 noundef %353, i32 noundef 0) #4
  %354 = load i32, ptr %39, align 4, !tbaa !13
  %355 = load i32, ptr %45, align 4, !tbaa !17
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %354, i32 noundef %355, i32 noundef 0) #4
  call void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef nonnull %0, ptr noundef nonnull %4) #4
  %356 = load i32, ptr %43, align 4, !tbaa !15
  %357 = load i32, ptr %42, align 4, !tbaa !49
  %358 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %356, i32 noundef %357, i32 noundef %358) #4
  %359 = load i32, ptr %35, align 4, !tbaa !45
  %360 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %359, i32 noundef %360, i32 noundef 0) #4
  %361 = load i32, ptr %28, align 4, !tbaa !10
  %362 = load i32, ptr %35, align 4, !tbaa !45
  %363 = load i32, ptr %128, align 4, !tbaa !53
  %364 = zext i32 %363 to i64
  %365 = mul nuw nsw i64 %364, %330
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %361, i32 noundef %362, i32 noundef %361, i64 noundef %365) #4
  %366 = load i32, ptr %43, align 4, !tbaa !15
  %367 = load i32, ptr %42, align 4, !tbaa !49
  %368 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %366, i32 noundef %367, i32 noundef %368) #4
  %369 = load i32, ptr %35, align 4, !tbaa !45
  %370 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12323, i32 noundef %369, i32 noundef %370, i32 noundef 0) #4
  %371 = load i32, ptr %42, align 4, !tbaa !49
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %371, i32 noundef %371, i32 noundef 8) #4
  %372 = load i32, ptr %45, align 4, !tbaa !17
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %372, i32 noundef 1) #4
  %373 = load i32, ptr %43, align 4, !tbaa !15
  %374 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %373, i32 noundef %374, i32 noundef 0) #4
  br label %385

375:                                              ; preds = %347
  %376 = load i32, ptr %8, align 4, !tbaa !25
  %.not334 = icmp ne i32 %181, %376
  %377 = icmp ult i32 %.0289369, %376
  %or.cond345 = or i1 %.not334, %377
  br i1 %or.cond345, label %378, label %385

378:                                              ; preds = %375
  %379 = load i32, ptr %28, align 4, !tbaa !10
  %380 = load i32, ptr %35, align 4, !tbaa !45
  %381 = load i32, ptr %128, align 4, !tbaa !53
  %382 = zext i32 %381 to i64
  %383 = mul nuw nsw i64 %382, %330
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %379, i32 noundef %380, i32 noundef %379, i64 noundef %383) #4
  %384 = add i32 %180, %.0370
  br label %385

385:                                              ; preds = %375, %378, %350
  %.1 = phi i32 [ %.0370, %350 ], [ %384, %378 ], [ %.0370, %375 ]
  %386 = load i32, ptr %33, align 4, !tbaa !43
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %386, i32 noundef %.0289369) #4
  br label %387

387:                                              ; preds = %385, %176
  %.2 = phi i32 [ %.1, %385 ], [ %.0370, %176 ]
  %388 = load i32, ptr %46, align 4, !tbaa !18
  %389 = call i32 @libxsmm_generator_gemm_rv64_update_m_blocking(ptr noundef nonnull %3, ptr noundef nonnull %8, i32 noundef %388, i32 noundef %.0289369) #4
  %390 = load i32, ptr %8, align 4, !tbaa !25
  %.not313 = icmp eq i32 %181, %390
  br i1 %.not313, label %._crit_edge, label %.lr.ph, !llvm.loop !54

._crit_edge:                                      ; preds = %387, %146
  %.0.lcssa = phi i32 [ 0, %146 ], [ %.2, %387 ]
  %.lcssa = phi i32 [ 0, %146 ], [ %181, %387 ]
  %391 = load i32, ptr %30, align 4, !tbaa !32
  %392 = load i32, ptr %37, align 4, !tbaa !52
  %393 = zext i32 %136 to i64
  %394 = load i32, ptr %124, align 4, !tbaa !47
  %395 = zext i32 %394 to i64
  %396 = mul nuw nsw i64 %395, %393
  %397 = load i32, ptr %125, align 4, !tbaa !48
  %398 = zext i32 %397 to i64
  %399 = zext i32 %.lcssa to i64
  %400 = sub nsw i64 %396, %399
  %401 = mul i64 %400, %398
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %391, i32 noundef %392, i32 noundef %391, i64 noundef %401) #4
  %402 = load i32, ptr %129, align 8, !tbaa !56
  %403 = icmp eq i32 %402, 1
  %404 = load i32, ptr %130, align 8
  %405 = icmp eq i32 %404, 1
  %or.cond10 = select i1 %403, i1 %405, i1 false
  br i1 %or.cond10, label %406, label %421

406:                                              ; preds = %._crit_edge
  %407 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef nonnull %0, i32 noundef 8, i32 noundef %407) #4
  %408 = load i32, ptr %36, align 4, !tbaa !31
  %409 = load i32, ptr %37, align 4, !tbaa !52
  %410 = load i32, ptr %131, align 1, !tbaa !57
  %411 = zext i32 %410 to i64
  %412 = mul nuw nsw i64 %411, %393
  %413 = lshr i64 %412, 3
  %414 = load i32, ptr %8, align 4, !tbaa !25
  %415 = zext i32 %414 to i64
  %416 = add nuw nsw i64 %415, 7
  %417 = lshr i64 %416, 3
  %418 = sub nsw i64 %413, %417
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %408, i32 noundef %409, i32 noundef %408, i64 noundef %418) #4
  %419 = load i32, ptr %37, align 4, !tbaa !52
  %420 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef nonnull %0, i32 noundef 8, i32 noundef %419, i32 noundef %420) #4
  br label %421

421:                                              ; preds = %406, %._crit_edge
  %422 = load i32, ptr %121, align 4, !tbaa !44
  %423 = icmp eq i32 %422, 1
  %424 = load i32, ptr %122, align 4
  %425 = icmp eq i32 %424, 1
  %or.cond13 = select i1 %423, i1 true, i1 %425
  br i1 %or.cond13, label %426, label %437

426:                                              ; preds = %421
  %427 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %427) #4
  %428 = load i32, ptr %36, align 4, !tbaa !31
  %429 = load i32, ptr %37, align 4, !tbaa !52
  %430 = load i32, ptr %121, align 4, !tbaa !44
  %431 = icmp eq i32 %430, 1
  %432 = load i32, ptr %8, align 4
  %433 = zext i32 %432 to i64
  %.v361 = select i1 %431, i64 2, i64 1
  %434 = shl nuw nsw i64 %433, %.v361
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 1073741875, i32 noundef %428, i32 noundef %429, i32 noundef %428, i64 noundef %434) #4
  %435 = load i32, ptr %37, align 4, !tbaa !52
  %436 = load i32, ptr %36, align 4, !tbaa !31
  call void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef nonnull %0, i32 noundef 7, i32 noundef %435, i32 noundef %436) #4
  br label %437

437:                                              ; preds = %421, %426
  %438 = load i32, ptr %82, align 4, !tbaa !21
  %439 = and i32 %438, 65536
  %.not314 = icmp eq i32 %439, 0
  br i1 %.not314, label %458, label %440

440:                                              ; preds = %437
  %441 = load i32, ptr %42, align 4, !tbaa !49
  call void @libxsmm_rv64_instruction_alu_set_imm64(ptr noundef nonnull %0, i32 noundef %441, i64 noundef 0) #4
  %442 = load i32, ptr %28, align 4, !tbaa !10
  %443 = load i32, ptr %43, align 4, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %442, i32 noundef %443, i32 noundef 0) #4
  %444 = load i32, ptr %29, align 4, !tbaa !11
  %445 = load i32, ptr %44, align 4, !tbaa !16
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %444, i32 noundef %445, i32 noundef 0) #4
  %446 = load i32, ptr %39, align 4, !tbaa !13
  %447 = load i32, ptr %45, align 4, !tbaa !17
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %446, i32 noundef %447, i32 noundef 0) #4
  call void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef nonnull %0, ptr noundef nonnull %4) #4
  %448 = load i32, ptr %43, align 4, !tbaa !15
  %449 = load i32, ptr %42, align 4, !tbaa !49
  %450 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %448, i32 noundef %449, i32 noundef %450) #4
  %451 = load i32, ptr %35, align 4, !tbaa !45
  %452 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %451, i32 noundef %452, i32 noundef 0) #4
  %453 = load i32, ptr %44, align 4, !tbaa !16
  %454 = load i32, ptr %42, align 4, !tbaa !49
  %455 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %453, i32 noundef %454, i32 noundef %455) #4
  %456 = load i32, ptr %35, align 4, !tbaa !45
  %457 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12291, i32 noundef %456, i32 noundef %457, i32 noundef 0) #4
  %.pre384 = load i32, ptr %82, align 4, !tbaa !21
  br label %458

458:                                              ; preds = %440, %437
  %459 = phi i32 [ %.pre384, %440 ], [ %438, %437 ]
  %460 = and i32 %459, 4098
  %461 = load i32, ptr %29, align 4, !tbaa !11
  %462 = load i32, ptr %36, align 4, !tbaa !31
  switch i32 %460, label %471 [
    i32 2, label %463
    i32 4098, label %467
  ]

463:                                              ; preds = %458
  %464 = load i32, ptr %128, align 4, !tbaa !53
  %465 = zext i32 %464 to i64
  %466 = mul nuw nsw i64 %465, %393
  br label %478

467:                                              ; preds = %458
  %468 = load i32, ptr %128, align 4, !tbaa !53
  %469 = zext i32 %468 to i64
  %470 = mul nuw nsw i64 %469, %393
  br label %478

471:                                              ; preds = %458
  %472 = load i32, ptr %132, align 4, !tbaa !58
  %473 = zext i32 %472 to i64
  %474 = mul nuw nsw i64 %473, %393
  %475 = load i32, ptr %128, align 4, !tbaa !53
  %476 = zext i32 %475 to i64
  %477 = mul nuw nsw i64 %474, %476
  br label %478

478:                                              ; preds = %467, %471, %463
  %.sink = phi i64 [ %470, %467 ], [ %477, %471 ], [ %466, %463 ]
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %461, i32 noundef %462, i32 noundef %461, i64 noundef %.sink) #4
  %.not318 = icmp eq i32 %.0.lcssa, 0
  br i1 %.not318, label %486, label %479

479:                                              ; preds = %478
  %480 = load i32, ptr %28, align 4, !tbaa !10
  %481 = load i32, ptr %35, align 4, !tbaa !45
  %482 = zext i32 %.0.lcssa to i64
  %483 = load i32, ptr %128, align 4, !tbaa !53
  %484 = zext i32 %483 to i64
  %485 = mul nuw nsw i64 %484, %482
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 1073741875, i32 noundef %480, i32 noundef %481, i32 noundef %480, i64 noundef %485) #4
  br label %486

486:                                              ; preds = %479, %478
  %487 = load i32, ptr %82, align 4, !tbaa !21
  %488 = and i32 %487, 65536
  %.not319 = icmp eq i32 %488, 0
  br i1 %.not319, label %513, label %489

489:                                              ; preds = %486
  %490 = load i32, ptr %28, align 4, !tbaa !10
  %491 = load i32, ptr %35, align 4, !tbaa !45
  %492 = load i32, ptr %8, align 4, !tbaa !25
  %493 = zext i32 %492 to i64
  %494 = load i32, ptr %128, align 4, !tbaa !53
  %495 = zext i32 %494 to i64
  %496 = mul nuw nsw i64 %495, %493
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 1073741875, i32 noundef %490, i32 noundef %491, i32 noundef %490, i64 noundef %496) #4
  %497 = load i32, ptr %43, align 4, !tbaa !15
  %498 = load i32, ptr %42, align 4, !tbaa !49
  %499 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %497, i32 noundef %498, i32 noundef %499) #4
  %500 = load i32, ptr %35, align 4, !tbaa !45
  %501 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12323, i32 noundef %500, i32 noundef %501, i32 noundef 0) #4
  %502 = load i32, ptr %44, align 4, !tbaa !16
  %503 = load i32, ptr %42, align 4, !tbaa !49
  %504 = load i32, ptr %35, align 4, !tbaa !45
  call void @libxsmm_rv64_instruction_alu_compute(ptr noundef nonnull %0, i32 noundef 51, i32 noundef %502, i32 noundef %503, i32 noundef %504) #4
  %505 = load i32, ptr %35, align 4, !tbaa !45
  %506 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef 12323, i32 noundef %505, i32 noundef %506, i32 noundef 0) #4
  %507 = load i32, ptr %42, align 4, !tbaa !49
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %507, i32 noundef %507, i32 noundef 8) #4
  %508 = load i32, ptr %45, align 4, !tbaa !17
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %508, i32 noundef 1) #4
  %509 = load i32, ptr %43, align 4, !tbaa !15
  %510 = load i32, ptr %28, align 4, !tbaa !10
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %509, i32 noundef %510, i32 noundef 0) #4
  %511 = load i32, ptr %44, align 4, !tbaa !16
  %512 = load i32, ptr %29, align 4, !tbaa !11
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef nonnull %0, i32 noundef 19, i32 noundef %511, i32 noundef %512, i32 noundef 0) #4
  br label %513

513:                                              ; preds = %486, %489
  %514 = load i32, ptr %34, align 4, !tbaa !39
  call void @libxsmm_generator_loop_footer_rv64(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %514, i32 noundef %136) #4
  %515 = load i32, ptr %118, align 4, !tbaa !38
  %.not311 = icmp eq i32 %139, %515
  br i1 %.not311, label %._crit_edge377, label %133

._crit_edge377:                                   ; preds = %513, %117
  call void @libxsmm_generator_gemm_destroy_stack_frame_rv64(ptr noundef nonnull %0) #4
  call void @libxsmm_rv64_instruction_close_stream(ptr noundef nonnull %0, i16 noundef zeroext 1023) #4
  br label %.thread359

.thread359:                                       ; preds = %151, %214, %._crit_edge377, %74, %59, %50
  call void @llvm.lifetime.end.p0(i64 95, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 132, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 2052, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 688, ptr nonnull %3) #4
  ret void
}

declare i32 @LIBXSMM_GEMM_GETENUM_COMP_PREC(ptr noundef) local_unnamed_addr #1

declare void @libxsmm_reset_loop_label_tracker(ptr noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gemm_rv64_setup_n_blocking(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_open_stream(ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_close_stream(ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

declare i32 @LIBXSMM_GEMM_GETENUM_ABC_COMMON_PREC(ptr noundef) local_unnamed_addr #1

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

declare void @libxsmm_generator_gemm_setup_stack_frame_rv64(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_rvv_setivli(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @libxsmm_generator_gemm_rv64_get_initial_m_blocking(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_rvv_setvli(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_load_2dregblock_rv64_rvv(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_rv64_instruction_register_jump_back_label(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gemm_apply_fusion_2dregblock_rv64(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_store_2dregblock_rv64_rvv(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 #1

declare void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gemm_setval_stack_var_rv64(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @libxsmm_generator_gemm_rv64_update_m_blocking(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gemm_destroy_stack_frame_rv64(ptr noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !7, i64 0}
!6 = !{!"libxsmm_gp_reg_mapping_struct", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 4}
!11 = !{!6, !7, i64 12}
!12 = !{!6, !7, i64 80}
!13 = !{!6, !7, i64 52}
!14 = !{!7, !7, i64 0}
!15 = !{!6, !7, i64 104}
!16 = !{!6, !7, i64 108}
!17 = !{!6, !7, i64 56}
!18 = !{!19, !7, i64 28}
!19 = !{!"libxsmm_generated_code", !20, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!20 = !{!"any pointer", !8, i64 0}
!21 = !{!22, !7, i64 24}
!22 = !{!"libxsmm_gemm_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !8, i64 28, !8, i64 29, !8, i64 32, !23, i64 33, !23, i64 41, !8, i64 49, !7, i64 50, !7, i64 54, !7, i64 58, !24, i64 62, !24, i64 64, !8, i64 66, !8, i64 67, !8, i64 68, !8, i64 69, !24, i64 70, !24, i64 72, !24, i64 74, !24, i64 76, !24, i64 78, !24, i64 80, !7, i64 82, !7, i64 86, !7, i64 90, !8, i64 94}
!23 = !{!"long long", !8, i64 0}
!24 = !{!"short", !8, i64 0}
!25 = !{!22, !7, i64 0}
!26 = !{i64 0, i64 4, !14, i64 4, i64 4, !14, i64 8, i64 4, !14, i64 12, i64 4, !14, i64 16, i64 4, !14, i64 20, i64 4, !14, i64 24, i64 4, !14, i64 28, i64 1, !27, i64 29, i64 3, !27, i64 32, i64 1, !27, i64 33, i64 8, !28, i64 41, i64 8, !28, i64 49, i64 1, !27, i64 50, i64 4, !14, i64 54, i64 4, !14, i64 58, i64 4, !14, i64 62, i64 2, !29, i64 64, i64 2, !29, i64 66, i64 1, !27, i64 67, i64 1, !27, i64 68, i64 1, !27, i64 69, i64 1, !27, i64 70, i64 2, !29, i64 72, i64 2, !29, i64 74, i64 2, !29, i64 76, i64 2, !29, i64 78, i64 2, !29, i64 80, i64 2, !29, i64 82, i64 4, !14, i64 86, i64 4, !14, i64 90, i64 4, !14, i64 94, i64 1, !27}
!27 = !{!8, !8, i64 0}
!28 = !{!23, !23, i64 0}
!29 = !{!24, !24, i64 0}
!30 = !{!22, !7, i64 12}
!31 = !{!6, !7, i64 92}
!32 = !{!6, !7, i64 20}
!33 = !{!22, !8, i64 28}
!34 = !{!6, !7, i64 24}
!35 = !{!6, !7, i64 32}
!36 = !{!6, !7, i64 28}
!37 = !{!6, !7, i64 36}
!38 = !{!22, !7, i64 4}
!39 = !{!6, !7, i64 44}
!40 = !{!41, !7, i64 8}
!41 = !{!"libxsmm_micro_kernel_config", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !8, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !7, i64 180, !7, i64 184, !7, i64 188, !7, i64 192, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !7, i64 256, !7, i64 260, !7, i64 264, !7, i64 268, !7, i64 272, !7, i64 276, !7, i64 280, !7, i64 284, !7, i64 288, !7, i64 292, !7, i64 296, !7, i64 300, !7, i64 304, !7, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !7, i64 328, !7, i64 332, !7, i64 336, !7, i64 340, !7, i64 344, !7, i64 348, !7, i64 352, !7, i64 356, !7, i64 360, !8, i64 364, !8, i64 380, !8, i64 396, !8, i64 412, !8, i64 428, !8, i64 444, !7, i64 460, !8, i64 464, !42, i64 520, !7, i64 556, !7, i64 560, !7, i64 564, !7, i64 568, !7, i64 572, !7, i64 576, !7, i64 580, !7, i64 584, !20, i64 592, !7, i64 600, !7, i64 604, !7, i64 608, !7, i64 612, !20, i64 616, !7, i64 624, !7, i64 628, !7, i64 632, !7, i64 636, !7, i64 640, !7, i64 644, !7, i64 648, !7, i64 652, !7, i64 656, !7, i64 660, !7, i64 664, !7, i64 668, !7, i64 672, !7, i64 676, !7, i64 680}
!42 = !{!"libxsmm_tile_config", !8, i64 0, !24, i64 2, !8, i64 4, !24, i64 6, !8, i64 8, !24, i64 10, !8, i64 12, !24, i64 14, !8, i64 16, !24, i64 18, !8, i64 20, !24, i64 22, !8, i64 24, !24, i64 26, !8, i64 28, !24, i64 30, !8, i64 32}
!43 = !{!6, !7, i64 40}
!44 = !{!41, !7, i64 116}
!45 = !{!6, !7, i64 88}
!46 = !{!41, !7, i64 4}
!47 = !{!22, !7, i64 20}
!48 = !{!41, !7, i64 20}
!49 = !{!6, !7, i64 100}
!50 = !{!22, !23, i64 33}
!51 = !{!22, !23, i64 41}
!52 = !{!6, !7, i64 96}
!53 = !{!41, !7, i64 12}
!54 = distinct !{!54, !55}
!55 = !{!"llvm.loop.mustprogress"}
!56 = !{!41, !7, i64 120}
!57 = !{!22, !7, i64 90}
!58 = !{!22, !7, i64 16}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass