; LLVM IR from libxsmm/libxsmm :: src (generator_gemm_common_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_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 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64 = external hidden unnamed_addr constant [278 x i8], align 1

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

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

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) #2

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

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

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

declare void @libxsmm_rv64_instruction_rvv_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9) #0 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca [2 x 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
  %32 = alloca i32, align 4
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store i32 %2, ptr %13, align 4, !tbaa !9
  store i32 %3, ptr %14, align 4, !tbaa !9
  store i32 %4, ptr %15, align 4, !tbaa !9
  store i32 %5, ptr %16, align 4, !tbaa !9
  store i32 %6, ptr %17, align 4, !tbaa !9
  store i32 %7, ptr %18, align 4, !tbaa !9
  store i32 %8, ptr %19, align 4, !tbaa !9
  store i32 %9, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 0, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.memset.p0.i64(ptr align 4 %23, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  store i32 0, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  store i32 0, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %35 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %35, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %36 = load i32, ptr %17, align 4, !tbaa !9
  %37 = icmp eq i32 0, %36
  br i1 %37, label %38, label %39

38:                                               ; preds = %10
  br label %119

39:                                               ; preds = %10
  %40 = load i32, ptr %17, align 4, !tbaa !9
  %41 = icmp eq i32 1, %40
  br i1 %41, label %42, label %43

42:                                               ; preds = %39
  br label %117

43:                                               ; preds = %39
  %44 = load i32, ptr %17, align 4, !tbaa !9
  %45 = icmp eq i32 2, %44
  br i1 %45, label %46, label %47

46:                                               ; preds = %43
  br label %115

47:                                               ; preds = %43
  %48 = load i32, ptr %17, align 4, !tbaa !9
  %49 = icmp eq i32 3, %48
  br i1 %49, label %50, label %51

50:                                               ; preds = %47
  br label %113

51:                                               ; preds = %47
  %52 = load i32, ptr %17, align 4, !tbaa !9
  %53 = icmp eq i32 4, %52
  br i1 %53, label %54, label %55

54:                                               ; preds = %51
  br label %111

55:                                               ; preds = %51
  %56 = load i32, ptr %17, align 4, !tbaa !9
  %57 = icmp eq i32 5, %56
  br i1 %57, label %58, label %59

58:                                               ; preds = %55
  br label %109

59:                                               ; preds = %55
  %60 = load i32, ptr %17, align 4, !tbaa !9
  %61 = icmp eq i32 6, %60
  br i1 %61, label %62, label %63

62:                                               ; preds = %59
  br label %107

63:                                               ; preds = %59
  %64 = load i32, ptr %17, align 4, !tbaa !9
  %65 = icmp eq i32 7, %64
  br i1 %65, label %66, label %67

66:                                               ; preds = %63
  br label %105

67:                                               ; preds = %63
  %68 = load i32, ptr %17, align 4, !tbaa !9
  %69 = icmp eq i32 8, %68
  br i1 %69, label %70, label %71

70:                                               ; preds = %67
  br label %103

71:                                               ; preds = %67
  %72 = load i32, ptr %17, align 4, !tbaa !9
  %73 = icmp eq i32 9, %72
  br i1 %73, label %74, label %75

74:                                               ; preds = %71
  br label %101

75:                                               ; preds = %71
  %76 = load i32, ptr %17, align 4, !tbaa !9
  %77 = icmp eq i32 10, %76
  br i1 %77, label %78, label %79

78:                                               ; preds = %75
  br label %99

79:                                               ; preds = %75
  %80 = load i32, ptr %17, align 4, !tbaa !9
  %81 = icmp eq i32 11, %80
  br i1 %81, label %82, label %83

82:                                               ; preds = %79
  br label %97

83:                                               ; preds = %79
  %84 = load i32, ptr %17, align 4, !tbaa !9
  %85 = icmp eq i32 12, %84
  br i1 %85, label %86, label %87

86:                                               ; preds = %83
  br label %95

87:                                               ; preds = %83
  %88 = load i32, ptr %17, align 4, !tbaa !9
  %89 = icmp eq i32 13, %88
  br i1 %89, label %90, label %91

90:                                               ; preds = %87
  br label %93

91:                                               ; preds = %87
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str, i32 noundef 725, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64) #6
  unreachable

92:                                               ; No predecessors!
  br label %93

93:                                               ; preds = %92, %90
  %94 = phi i32 [ 1, %90 ], [ 0, %92 ]
  br label %95

95:                                               ; preds = %93, %86
  %96 = phi i32 [ 1, %86 ], [ %94, %93 ]
  br label %97

97:                                               ; preds = %95, %82
  %98 = phi i32 [ 2, %82 ], [ %96, %95 ]
  br label %99

99:                                               ; preds = %97, %78
  %100 = phi i32 [ 2, %78 ], [ %98, %97 ]
  br label %101

101:                                              ; preds = %99, %74
  %102 = phi i32 [ 4, %74 ], [ %100, %99 ]
  br label %103

103:                                              ; preds = %101, %70
  %104 = phi i32 [ 4, %70 ], [ %102, %101 ]
  br label %105

105:                                              ; preds = %103, %66
  %106 = phi i32 [ 8, %66 ], [ %104, %103 ]
  br label %107

107:                                              ; preds = %105, %62
  %108 = phi i32 [ 8, %62 ], [ %106, %105 ]
  br label %109

109:                                              ; preds = %107, %58
  %110 = phi i32 [ 1, %58 ], [ %108, %107 ]
  br label %111

111:                                              ; preds = %109, %54
  %112 = phi i32 [ 1, %54 ], [ %110, %109 ]
  br label %113

113:                                              ; preds = %111, %50
  %114 = phi i32 [ 2, %50 ], [ %112, %111 ]
  br label %115

115:                                              ; preds = %113, %46
  %116 = phi i32 [ 2, %46 ], [ %114, %113 ]
  br label %117

117:                                              ; preds = %115, %42
  %118 = phi i32 [ 4, %42 ], [ %116, %115 ]
  br label %119

119:                                              ; preds = %117, %38
  %120 = phi i32 [ 8, %38 ], [ %118, %117 ]
  store i32 %120, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %121 = load ptr, ptr %12, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %121, i32 0, i32 8
  %123 = getelementptr inbounds [3 x i8], ptr %122, i64 0, i64 0
  %124 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %123)
  %125 = icmp eq i32 0, %124
  br i1 %125, label %126, label %127

126:                                              ; preds = %119
  br label %246

127:                                              ; preds = %119
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %128, i32 0, i32 8
  %130 = getelementptr inbounds [3 x i8], ptr %129, i64 0, i64 0
  %131 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %130)
  %132 = icmp eq i32 1, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %127
  br label %244

134:                                              ; preds = %127
  %135 = load ptr, ptr %12, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %135, i32 0, i32 8
  %137 = getelementptr inbounds [3 x i8], ptr %136, i64 0, i64 0
  %138 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %137)
  %139 = icmp eq i32 2, %138
  br i1 %139, label %140, label %141

140:                                              ; preds = %134
  br label %242

141:                                              ; preds = %134
  %142 = load ptr, ptr %12, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %142, i32 0, i32 8
  %144 = getelementptr inbounds [3 x i8], ptr %143, i64 0, i64 0
  %145 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %144)
  %146 = icmp eq i32 3, %145
  br i1 %146, label %147, label %148

147:                                              ; preds = %141
  br label %240

148:                                              ; preds = %141
  %149 = load ptr, ptr %12, 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_C_PREC(ptr noundef %151)
  %153 = icmp eq i32 4, %152
  br i1 %153, label %154, label %155

154:                                              ; preds = %148
  br label %238

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

161:                                              ; preds = %155
  br label %236

162:                                              ; preds = %155
  %163 = load ptr, ptr %12, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %163, i32 0, i32 8
  %165 = getelementptr inbounds [3 x i8], ptr %164, i64 0, i64 0
  %166 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %165)
  %167 = icmp eq i32 6, %166
  br i1 %167, label %168, label %169

168:                                              ; preds = %162
  br label %234

169:                                              ; preds = %162
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %170, i32 0, i32 8
  %172 = getelementptr inbounds [3 x i8], ptr %171, i64 0, i64 0
  %173 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %172)
  %174 = icmp eq i32 7, %173
  br i1 %174, label %175, label %176

175:                                              ; preds = %169
  br label %232

176:                                              ; preds = %169
  %177 = load ptr, ptr %12, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %177, i32 0, i32 8
  %179 = getelementptr inbounds [3 x i8], ptr %178, i64 0, i64 0
  %180 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %179)
  %181 = icmp eq i32 8, %180
  br i1 %181, label %182, label %183

182:                                              ; preds = %176
  br label %230

183:                                              ; preds = %176
  %184 = load ptr, ptr %12, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %184, i32 0, i32 8
  %186 = getelementptr inbounds [3 x i8], ptr %185, i64 0, i64 0
  %187 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %186)
  %188 = icmp eq i32 9, %187
  br i1 %188, label %189, label %190

189:                                              ; preds = %183
  br label %228

190:                                              ; preds = %183
  %191 = load ptr, ptr %12, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %191, i32 0, i32 8
  %193 = getelementptr inbounds [3 x i8], ptr %192, i64 0, i64 0
  %194 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %193)
  %195 = icmp eq i32 10, %194
  br i1 %195, label %196, label %197

196:                                              ; preds = %190
  br label %226

197:                                              ; preds = %190
  %198 = load ptr, ptr %12, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %198, i32 0, i32 8
  %200 = getelementptr inbounds [3 x i8], ptr %199, i64 0, i64 0
  %201 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %200)
  %202 = icmp eq i32 11, %201
  br i1 %202, label %203, label %204

203:                                              ; preds = %197
  br label %224

204:                                              ; preds = %197
  %205 = load ptr, ptr %12, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %205, i32 0, i32 8
  %207 = getelementptr inbounds [3 x i8], ptr %206, i64 0, i64 0
  %208 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %207)
  %209 = icmp eq i32 12, %208
  br i1 %209, label %210, label %211

210:                                              ; preds = %204
  br label %222

211:                                              ; preds = %204
  %212 = load ptr, ptr %12, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %212, i32 0, i32 8
  %214 = getelementptr inbounds [3 x i8], ptr %213, i64 0, i64 0
  %215 = call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef %214)
  %216 = icmp eq i32 13, %215
  br i1 %216, label %217, label %218

217:                                              ; preds = %211
  br label %220

218:                                              ; preds = %211
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str, i32 noundef 726, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64) #6
  unreachable

219:                                              ; No predecessors!
  br label %220

220:                                              ; preds = %219, %217
  %221 = phi i32 [ 1, %217 ], [ 0, %219 ]
  br label %222

222:                                              ; preds = %220, %210
  %223 = phi i32 [ 1, %210 ], [ %221, %220 ]
  br label %224

224:                                              ; preds = %222, %203
  %225 = phi i32 [ 2, %203 ], [ %223, %222 ]
  br label %226

226:                                              ; preds = %224, %196
  %227 = phi i32 [ 2, %196 ], [ %225, %224 ]
  br label %228

228:                                              ; preds = %226, %189
  %229 = phi i32 [ 4, %189 ], [ %227, %226 ]
  br label %230

230:                                              ; preds = %228, %182
  %231 = phi i32 [ 4, %182 ], [ %229, %228 ]
  br label %232

232:                                              ; preds = %230, %175
  %233 = phi i32 [ 8, %175 ], [ %231, %230 ]
  br label %234

234:                                              ; preds = %232, %168
  %235 = phi i32 [ 8, %168 ], [ %233, %232 ]
  br label %236

236:                                              ; preds = %234, %161
  %237 = phi i32 [ 1, %161 ], [ %235, %234 ]
  br label %238

238:                                              ; preds = %236, %154
  %239 = phi i32 [ 1, %154 ], [ %237, %236 ]
  br label %240

240:                                              ; preds = %238, %147
  %241 = phi i32 [ 2, %147 ], [ %239, %238 ]
  br label %242

242:                                              ; preds = %240, %140
  %243 = phi i32 [ 2, %140 ], [ %241, %240 ]
  br label %244

244:                                              ; preds = %242, %133
  %245 = phi i32 [ 4, %133 ], [ %243, %242 ]
  br label %246

246:                                              ; preds = %244, %126
  %247 = phi i32 [ 8, %126 ], [ %245, %244 ]
  store i32 %247, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %248 = load i32, ptr %30, align 4, !tbaa !9
  %249 = icmp eq i32 2, %248
  br i1 %249, label %250, label %251

250:                                              ; preds = %246
  br label %256

251:                                              ; preds = %246
  %252 = load i32, ptr %29, align 4, !tbaa !9
  %253 = icmp eq i32 4, %252
  %254 = zext i1 %253 to i64
  %255 = select i1 %253, i32 24583, i32 28679
  br label %256

256:                                              ; preds = %251, %250
  %257 = phi i32 [ 20487, %250 ], [ %255, %251 ]
  store i32 %257, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %258 = load i32, ptr %29, align 4, !tbaa !9
  %259 = icmp eq i32 2, %258
  br i1 %259, label %260, label %261

260:                                              ; preds = %256
  br label %266

261:                                              ; preds = %256
  %262 = load i32, ptr %29, align 4, !tbaa !9
  %263 = icmp eq i32 4, %262
  %264 = zext i1 %263 to i64
  %265 = select i1 %263, i32 24583, i32 28679
  br label %266

266:                                              ; preds = %261, %260
  %267 = phi i32 [ 20487, %260 ], [ %265, %261 ]
  store i32 %267, ptr %32, align 4, !tbaa !9
  %268 = load i32, ptr %18, align 4, !tbaa !9
  %269 = load i32, ptr %15, align 4, !tbaa !9
  %270 = udiv i32 %268, %269
  %271 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  store i32 %270, ptr %271, align 4, !tbaa !9
  %272 = load i32, ptr %18, align 4, !tbaa !9
  %273 = load i32, ptr %15, align 4, !tbaa !9
  %274 = urem i32 %272, %273
  store i32 %274, ptr %27, align 4, !tbaa !9
  %275 = load i32, ptr %27, align 4, !tbaa !9
  %276 = icmp ugt i32 %275, 0
  %277 = zext i1 %276 to i32
  %278 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 1
  store i32 %277, ptr %278, align 4, !tbaa !9
  %279 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 1
  %282 = load i32, ptr %281, align 4, !tbaa !9
  %283 = add i32 %280, %282
  store i32 %283, ptr %24, align 4, !tbaa !9
  %284 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %285 = load i32, ptr %284, align 4, !tbaa !9
  %286 = load i32, ptr %15, align 4, !tbaa !9
  %287 = mul i32 %285, %286
  %288 = load i32, ptr %30, align 4, !tbaa !9
  %289 = mul i32 %287, %288
  store i32 %289, ptr %25, align 4, !tbaa !9
  %290 = load i32, ptr %16, align 4, !tbaa !9
  %291 = load i32, ptr %19, align 4, !tbaa !9
  %292 = load i32, ptr %24, align 4, !tbaa !9
  %293 = mul i32 %291, %292
  %294 = sub i32 %290, %293
  store i32 %294, ptr %26, align 4, !tbaa !9
  %295 = load ptr, ptr %11, align 8, !tbaa !5
  %296 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef %295, i32 noundef 7, i32 noundef %296)
  %297 = load ptr, ptr %12, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %297, i32 0, i32 6
  %299 = load i32, ptr %298, align 1, !tbaa !11
  %300 = and i32 %299, 4
  %301 = icmp eq i32 %300, 0
  br i1 %301, label %302, label %472

302:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  store i64 0, ptr %33, align 8, !tbaa !15
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %303

303:                                              ; preds = %456, %302
  %304 = load i32, ptr %21, align 4, !tbaa !9
  %305 = load i32, ptr %19, align 4, !tbaa !9
  %306 = icmp ult i32 %304, %305
  br i1 %306, label %307, label %459

307:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  store i64 0, ptr %34, align 8, !tbaa !15
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %388, %307
  %309 = load i32, ptr %22, align 4, !tbaa !9
  %310 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %311 = load i32, ptr %310, align 4, !tbaa !9
  %312 = icmp ult i32 %309, %311
  br i1 %312, label %313, label %391

313:                                              ; preds = %308
  %314 = load i32, ptr %21, align 4, !tbaa !9
  %315 = icmp eq i32 %314, 0
  br i1 %315, label %316, label %338

316:                                              ; preds = %313
  %317 = load ptr, ptr %11, align 8, !tbaa !5
  %318 = load i32, ptr %32, align 4, !tbaa !9
  %319 = load i32, ptr %28, align 4, !tbaa !9
  %320 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %317, i32 noundef %318, i32 noundef %319, i32 noundef 127, i32 noundef %320, i32 noundef 1)
  %321 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 1
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = icmp ne i32 %322, 0
  br i1 %323, label %330, label %324

324:                                              ; preds = %316
  %325 = load i32, ptr %22, align 4, !tbaa !9
  %326 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %327 = load i32, ptr %326, align 4, !tbaa !9
  %328 = sub i32 %327, 1
  %329 = icmp ne i32 %325, %328
  br i1 %329, label %330, label %337

330:                                              ; preds = %324, %316
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = load i32, ptr %28, align 4, !tbaa !9
  %333 = load i32, ptr %28, align 4, !tbaa !9
  %334 = load i32, ptr %15, align 4, !tbaa !9
  %335 = load i32, ptr %29, align 4, !tbaa !9
  %336 = mul i32 %334, %335
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %331, i32 noundef 19, i32 noundef %332, i32 noundef %333, i32 noundef %336)
  br label %337

337:                                              ; preds = %330, %324
  br label %338

338:                                              ; preds = %337, %313
  %339 = load ptr, ptr %11, align 8, !tbaa !5
  %340 = load i32, ptr %31, align 4, !tbaa !9
  %341 = load i32, ptr %13, align 4, !tbaa !9
  %342 = load i32, ptr %26, align 4, !tbaa !9
  %343 = load i32, ptr %24, align 4, !tbaa !9
  %344 = load i32, ptr %21, align 4, !tbaa !9
  %345 = mul i32 %343, %344
  %346 = add i32 %342, %345
  %347 = load i32, ptr %22, align 4, !tbaa !9
  %348 = add i32 %346, %347
  call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %339, i32 noundef %340, i32 noundef %341, i32 noundef 127, i32 noundef %348, i32 noundef 1)
  %349 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 1
  %350 = load i32, ptr %349, align 4, !tbaa !9
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %358, label %352

352:                                              ; preds = %338
  %353 = load i32, ptr %22, align 4, !tbaa !9
  %354 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %355 = load i32, ptr %354, align 4, !tbaa !9
  %356 = sub i32 %355, 1
  %357 = icmp ne i32 %353, %356
  br i1 %357, label %358, label %365

358:                                              ; preds = %352, %338
  %359 = load ptr, ptr %11, align 8, !tbaa !5
  %360 = load i32, ptr %13, align 4, !tbaa !9
  %361 = load i32, ptr %13, align 4, !tbaa !9
  %362 = load i32, ptr %15, align 4, !tbaa !9
  %363 = load i32, ptr %30, align 4, !tbaa !9
  %364 = mul i32 %362, %363
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %359, i32 noundef 19, i32 noundef %360, i32 noundef %361, i32 noundef %364)
  br label %371

365:                                              ; preds = %352
  %366 = load i32, ptr %15, align 4, !tbaa !9
  %367 = zext i32 %366 to i64
  %368 = load i32, ptr %30, align 4, !tbaa !9
  %369 = zext i32 %368 to i64
  %370 = mul nsw i64 %367, %369
  store i64 %370, ptr %34, align 8, !tbaa !15
  br label %371

371:                                              ; preds = %365, %358
  %372 = load ptr, ptr %11, align 8, !tbaa !5
  %373 = load i32, ptr %26, align 4, !tbaa !9
  %374 = load i32, ptr %24, align 4, !tbaa !9
  %375 = load i32, ptr %21, align 4, !tbaa !9
  %376 = mul i32 %374, %375
  %377 = add i32 %373, %376
  %378 = load i32, ptr %22, align 4, !tbaa !9
  %379 = add i32 %377, %378
  %380 = load i32, ptr %22, align 4, !tbaa !9
  %381 = load i32, ptr %26, align 4, !tbaa !9
  %382 = load i32, ptr %24, align 4, !tbaa !9
  %383 = load i32, ptr %21, align 4, !tbaa !9
  %384 = mul i32 %382, %383
  %385 = add i32 %381, %384
  %386 = load i32, ptr %22, align 4, !tbaa !9
  %387 = add i32 %385, %386
  call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %372, i32 noundef 87, i32 noundef %379, i32 noundef %380, i32 noundef %387, i32 noundef 1)
  br label %388

388:                                              ; preds = %371
  %389 = load i32, ptr %22, align 4, !tbaa !9
  %390 = add i32 %389, 1
  store i32 %390, ptr %22, align 4, !tbaa !9
  br label %308, !llvm.loop !16

391:                                              ; preds = %308
  %392 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 1
  %393 = load i32, ptr %392, align 4, !tbaa !9
  %394 = icmp ne i32 %393, 0
  br i1 %394, label %395, label %435

395:                                              ; preds = %391
  %396 = load i32, ptr %21, align 4, !tbaa !9
  %397 = icmp eq i32 %396, 0
  br i1 %397, label %398, label %404

398:                                              ; preds = %395
  %399 = load ptr, ptr %11, align 8, !tbaa !5
  %400 = load i32, ptr %32, align 4, !tbaa !9
  %401 = load i32, ptr %28, align 4, !tbaa !9
  %402 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %403 = load i32, ptr %402, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %399, i32 noundef %400, i32 noundef %401, i32 noundef 127, i32 noundef %403, i32 noundef 1)
  br label %404

404:                                              ; preds = %398, %395
  %405 = load ptr, ptr %11, align 8, !tbaa !5
  %406 = load i32, ptr %31, align 4, !tbaa !9
  %407 = load i32, ptr %13, align 4, !tbaa !9
  %408 = load i32, ptr %26, align 4, !tbaa !9
  %409 = load i32, ptr %24, align 4, !tbaa !9
  %410 = load i32, ptr %21, align 4, !tbaa !9
  %411 = mul i32 %409, %410
  %412 = add i32 %408, %411
  %413 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %414 = load i32, ptr %413, align 4, !tbaa !9
  %415 = add i32 %412, %414
  call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %405, i32 noundef %406, i32 noundef %407, i32 noundef 127, i32 noundef %415, i32 noundef 1)
  %416 = load ptr, ptr %11, align 8, !tbaa !5
  %417 = load i32, ptr %26, align 4, !tbaa !9
  %418 = load i32, ptr %24, align 4, !tbaa !9
  %419 = load i32, ptr %21, align 4, !tbaa !9
  %420 = mul i32 %418, %419
  %421 = add i32 %417, %420
  %422 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %423 = load i32, ptr %422, align 4, !tbaa !9
  %424 = add i32 %421, %423
  %425 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %426 = load i32, ptr %425, align 4, !tbaa !9
  %427 = load i32, ptr %26, align 4, !tbaa !9
  %428 = load i32, ptr %24, align 4, !tbaa !9
  %429 = load i32, ptr %21, align 4, !tbaa !9
  %430 = mul i32 %428, %429
  %431 = add i32 %427, %430
  %432 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = add i32 %431, %433
  call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %416, i32 noundef 4183, i32 noundef %424, i32 noundef %426, i32 noundef %434, i32 noundef 1)
  br label %435

435:                                              ; preds = %404, %391
  %436 = load i32, ptr %20, align 4, !tbaa !9
  %437 = zext i32 %436 to i64
  %438 = load i32, ptr %25, align 4, !tbaa !9
  %439 = zext i32 %438 to i64
  %440 = sub i64 %437, %439
  %441 = load i64, ptr %34, align 8, !tbaa !15
  %442 = add i64 %441, %440
  store i64 %442, ptr %34, align 8, !tbaa !15
  %443 = load i32, ptr %21, align 4, !tbaa !9
  %444 = load i32, ptr %19, align 4, !tbaa !9
  %445 = sub i32 %444, 1
  %446 = icmp ne i32 %443, %445
  br i1 %446, label %447, label %453

447:                                              ; preds = %435
  %448 = load ptr, ptr %11, align 8, !tbaa !5
  %449 = load i32, ptr %13, align 4, !tbaa !9
  %450 = load i32, ptr %14, align 4, !tbaa !9
  %451 = load i32, ptr %13, align 4, !tbaa !9
  %452 = load i64, ptr %34, align 8, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %448, i32 noundef 51, i32 noundef %449, i32 noundef %450, i32 noundef %451, i64 noundef %452)
  br label %455

453:                                              ; preds = %435
  %454 = load i64, ptr %34, align 8, !tbaa !15
  store i64 %454, ptr %33, align 8, !tbaa !15
  br label %455

455:                                              ; preds = %453, %447
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %456

456:                                              ; preds = %455
  %457 = load i32, ptr %21, align 4, !tbaa !9
  %458 = add i32 %457, 1
  store i32 %458, ptr %21, align 4, !tbaa !9
  br label %303, !llvm.loop !18

459:                                              ; preds = %303
  %460 = load i32, ptr %20, align 4, !tbaa !9
  %461 = zext i32 %460 to i64
  %462 = load i32, ptr %19, align 4, !tbaa !9
  %463 = zext i32 %462 to i64
  %464 = mul nsw i64 %461, %463
  %465 = load i64, ptr %33, align 8, !tbaa !15
  %466 = sub i64 %464, %465
  store i64 %466, ptr %33, align 8, !tbaa !15
  %467 = load ptr, ptr %11, align 8, !tbaa !5
  %468 = load i32, ptr %13, align 4, !tbaa !9
  %469 = load i32, ptr %14, align 4, !tbaa !9
  %470 = load i32, ptr %13, align 4, !tbaa !9
  %471 = load i64, ptr %33, align 8, !tbaa !15
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %467, i32 noundef 1073741875, i32 noundef %468, i32 noundef %469, i32 noundef %470, i64 noundef %471)
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %554

472:                                              ; preds = %266
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %473

473:                                              ; preds = %550, %472
  %474 = load i32, ptr %21, align 4, !tbaa !9
  %475 = load i32, ptr %19, align 4, !tbaa !9
  %476 = icmp ult i32 %474, %475
  br i1 %476, label %477, label %553

477:                                              ; preds = %473
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %478

478:                                              ; preds = %519, %477
  %479 = load i32, ptr %22, align 4, !tbaa !9
  %480 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %481 = load i32, ptr %480, align 4, !tbaa !9
  %482 = icmp ult i32 %479, %481
  br i1 %482, label %483, label %522

483:                                              ; preds = %478
  %484 = load i32, ptr %21, align 4, !tbaa !9
  %485 = icmp eq i32 %484, 0
  br i1 %485, label %486, label %508

486:                                              ; preds = %483
  %487 = load ptr, ptr %11, align 8, !tbaa !5
  %488 = load i32, ptr %32, align 4, !tbaa !9
  %489 = load i32, ptr %28, align 4, !tbaa !9
  %490 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %487, i32 noundef %488, i32 noundef %489, i32 noundef 127, i32 noundef %490, i32 noundef 1)
  %491 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 1
  %492 = load i32, ptr %491, align 4, !tbaa !9
  %493 = icmp ne i32 %492, 0
  br i1 %493, label %500, label %494

494:                                              ; preds = %486
  %495 = load i32, ptr %22, align 4, !tbaa !9
  %496 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %497 = load i32, ptr %496, align 4, !tbaa !9
  %498 = sub i32 %497, 1
  %499 = icmp ne i32 %495, %498
  br i1 %499, label %500, label %507

500:                                              ; preds = %494, %486
  %501 = load ptr, ptr %11, align 8, !tbaa !5
  %502 = load i32, ptr %28, align 4, !tbaa !9
  %503 = load i32, ptr %28, align 4, !tbaa !9
  %504 = load i32, ptr %15, align 4, !tbaa !9
  %505 = load i32, ptr %29, align 4, !tbaa !9
  %506 = mul i32 %504, %505
  call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %501, i32 noundef 19, i32 noundef %502, i32 noundef %503, i32 noundef %506)
  br label %507

507:                                              ; preds = %500, %494
  br label %508

508:                                              ; preds = %507, %483
  %509 = load ptr, ptr %11, align 8, !tbaa !5
  %510 = load i32, ptr %22, align 4, !tbaa !9
  %511 = load i32, ptr %22, align 4, !tbaa !9
  %512 = load i32, ptr %26, align 4, !tbaa !9
  %513 = load i32, ptr %24, align 4, !tbaa !9
  %514 = load i32, ptr %21, align 4, !tbaa !9
  %515 = mul i32 %513, %514
  %516 = add i32 %512, %515
  %517 = load i32, ptr %22, align 4, !tbaa !9
  %518 = add i32 %516, %517
  call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %509, i32 noundef 671088727, i32 noundef %510, i32 noundef %511, i32 noundef %518, i32 noundef 1)
  br label %519

519:                                              ; preds = %508
  %520 = load i32, ptr %22, align 4, !tbaa !9
  %521 = add i32 %520, 1
  store i32 %521, ptr %22, align 4, !tbaa !9
  br label %478, !llvm.loop !19

522:                                              ; preds = %478
  %523 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 1
  %524 = load i32, ptr %523, align 4, !tbaa !9
  %525 = icmp ne i32 %524, 0
  br i1 %525, label %526, label %549

526:                                              ; preds = %522
  %527 = load i32, ptr %21, align 4, !tbaa !9
  %528 = icmp eq i32 %527, 0
  br i1 %528, label %529, label %535

529:                                              ; preds = %526
  %530 = load ptr, ptr %11, align 8, !tbaa !5
  %531 = load i32, ptr %32, align 4, !tbaa !9
  %532 = load i32, ptr %28, align 4, !tbaa !9
  %533 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %534 = load i32, ptr %533, align 4, !tbaa !9
  call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %530, i32 noundef %531, i32 noundef %532, i32 noundef 127, i32 noundef %534, i32 noundef 1)
  br label %535

535:                                              ; preds = %529, %526
  %536 = load ptr, ptr %11, align 8, !tbaa !5
  %537 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %538 = load i32, ptr %537, align 4, !tbaa !9
  %539 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %540 = load i32, ptr %539, align 4, !tbaa !9
  %541 = load i32, ptr %26, align 4, !tbaa !9
  %542 = load i32, ptr %24, align 4, !tbaa !9
  %543 = load i32, ptr %21, align 4, !tbaa !9
  %544 = mul i32 %542, %543
  %545 = add i32 %541, %544
  %546 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  %547 = load i32, ptr %546, align 4, !tbaa !9
  %548 = add i32 %545, %547
  call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %536, i32 noundef 671088727, i32 noundef %538, i32 noundef %540, i32 noundef %548, i32 noundef 1)
  br label %549

549:                                              ; preds = %535, %522
  br label %550

550:                                              ; preds = %549
  %551 = load i32, ptr %21, align 4, !tbaa !9
  %552 = add i32 %551, 1
  store i32 %552, ptr %21, align 4, !tbaa !9
  br label %473, !llvm.loop !20

553:                                              ; preds = %473
  br label %554

554:                                              ; preds = %553, %459
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  ret void
}

declare void @libxsmm_rv64_instruction_rvv_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 24}
!12 = !{!"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, !13, i64 33, !13, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !14, i64 62, !14, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !14, i64 70, !14, i64 72, !14, i64 74, !14, i64 76, !14, i64 78, !14, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!13, !13, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [82 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64 = external hidden unnamed_addr constant [278 x i8], align 1
@switch.table.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64 = private unnamed_addr constant [11 x i32] [i32 28679, i32 28679, i32 28679, i32 28679, i32 28679, i32 28679, i32 24583, i32 28679, i32 28679, i32 28679, i32 28679], align 4
@switch.table.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64.1 = private unnamed_addr constant [11 x i32] [i32 20487, i32 20487, i32 28679, i32 20487, i32 28679, i32 20487, i32 24583, i32 20487, i32 20487, i32 20487, i32 28679], align 4
@switch.table.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64.2 = private unnamed_addr constant [11 x i32] [i32 2, i32 2, i32 1, i32 2, i32 8, i32 2, i32 4, i32 2, i32 2, i32 2, i32 1], align 4

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

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

declare i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef) local_unnamed_addr #1

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

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_rvv_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9) local_unnamed_addr #0 {
  switch i32 %6, label %11 [
    i32 0, label %18
    i32 1, label %.fold.split
  ]

11:                                               ; preds = %10
  %12 = and i32 %6, -2
  %switch.tableidx = add i32 %12, -2
  %13 = icmp ult i32 %switch.tableidx, 11
  br i1 %13, label %switch.hole_check, label %14

14:                                               ; preds = %switch.hole_check, %11
  tail call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str, i32 noundef 725, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64) #3
  unreachable

.fold.split:                                      ; preds = %10
  br label %18

switch.hole_check:                                ; preds = %11
  %switch.maskindex = trunc nuw i32 %switch.tableidx to i16
  %switch.shifted = lshr i16 1365, %switch.maskindex
  %switch.lobit = trunc i16 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %14

switch.lookup:                                    ; preds = %switch.hole_check
  %15 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [11 x i32], ptr @switch.table.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64, i64 0, i64 %15
  %switch.load = load i32, ptr %switch.gep, align 4
  %16 = zext nneg i32 %switch.tableidx to i64
  %switch.gep257 = getelementptr inbounds [11 x i32], ptr @switch.table.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64.1, i64 0, i64 %16
  %switch.load258 = load i32, ptr %switch.gep257, align 4
  %17 = zext nneg i32 %switch.tableidx to i64
  %switch.gep259 = getelementptr inbounds [11 x i32], ptr @switch.table.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64.2, i64 0, i64 %17
  %switch.load260 = load i32, ptr %switch.gep259, align 4
  br label %18

18:                                               ; preds = %switch.lookup, %10, %.fold.split
  %19 = phi i32 [ 28679, %10 ], [ 24583, %.fold.split ], [ %switch.load, %switch.lookup ]
  %20 = phi i32 [ 28679, %10 ], [ 24583, %.fold.split ], [ %switch.load258, %switch.lookup ]
  %21 = phi i32 [ 8, %10 ], [ 4, %.fold.split ], [ %switch.load260, %switch.lookup ]
  %22 = getelementptr inbounds i8, ptr %1, i64 29
  %23 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %24 = icmp eq i32 %23, 0
  br i1 %24, label %.thread, label %25

25:                                               ; preds = %18
  %26 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %27 = icmp eq i32 %26, 1
  br i1 %27, label %.thread, label %28

28:                                               ; preds = %25
  %29 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %30 = icmp eq i32 %29, 2
  br i1 %30, label %.thread, label %31

31:                                               ; preds = %28
  %32 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %33 = icmp eq i32 %32, 3
  br i1 %33, label %.thread, label %34

34:                                               ; preds = %31
  %35 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %36 = icmp eq i32 %35, 4
  br i1 %36, label %.thread, label %37

37:                                               ; preds = %34
  %38 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %39 = icmp eq i32 %38, 5
  br i1 %39, label %.thread, label %40

40:                                               ; preds = %37
  %41 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %42 = icmp eq i32 %41, 6
  br i1 %42, label %.thread, label %43

43:                                               ; preds = %40
  %44 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %45 = icmp eq i32 %44, 7
  br i1 %45, label %.thread, label %46

46:                                               ; preds = %43
  %47 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %48 = icmp eq i32 %47, 8
  br i1 %48, label %.thread, label %49

49:                                               ; preds = %46
  %50 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %51 = icmp eq i32 %50, 9
  br i1 %51, label %.thread, label %52

52:                                               ; preds = %49
  %53 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %54 = icmp eq i32 %53, 10
  br i1 %54, label %.thread, label %55

55:                                               ; preds = %52
  %56 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %57 = icmp eq i32 %56, 11
  br i1 %57, label %.thread, label %58

58:                                               ; preds = %55
  %59 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %60 = icmp eq i32 %59, 12
  br i1 %60, label %.thread, label %61

61:                                               ; preds = %58
  %62 = tail call i32 @LIBXSMM_GEMM_GETENUM_C_PREC(ptr noundef nonnull %22) #4
  %63 = icmp eq i32 %62, 13
  br i1 %63, label %.thread, label %64

64:                                               ; preds = %61
  tail call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str, i32 noundef 726, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_gemm_load_add_colbias_2dregblock_rv64) #3
  unreachable

.thread:                                          ; preds = %61, %58, %49, %46, %43, %40, %37, %34, %25, %18, %31, %55, %52, %28
  %65 = phi i32 [ 2, %28 ], [ 2, %31 ], [ 2, %52 ], [ 2, %55 ], [ 1, %61 ], [ 1, %58 ], [ 4, %49 ], [ 4, %46 ], [ 8, %43 ], [ 8, %40 ], [ 1, %37 ], [ 1, %34 ], [ 4, %25 ], [ 8, %18 ]
  %66 = phi i32 [ 20487, %28 ], [ 20487, %31 ], [ 20487, %52 ], [ 20487, %55 ], [ %19, %61 ], [ %19, %58 ], [ %19, %49 ], [ %19, %46 ], [ %19, %43 ], [ %19, %40 ], [ %19, %37 ], [ %19, %34 ], [ %19, %25 ], [ %19, %18 ]
  %67 = udiv i32 %7, %4
  %68 = urem i32 %7, %4
  %69 = icmp ne i32 %68, 0
  %70 = zext i1 %69 to i32
  %71 = add i32 %67, %70
  %72 = mul i32 %65, %4
  %73 = mul i32 %72, %67
  %74 = mul i32 %71, %8
  %75 = sub i32 %5, %74
  tail call void @libxsmm_generator_gemm_getval_stack_var_rv64(ptr noundef %0, i32 noundef 7, i32 noundef %3)
  %76 = getelementptr inbounds i8, ptr %1, i64 24
  %77 = load i32, ptr %76, align 1, !tbaa !5
  %78 = and i32 %77, 4
  %79 = icmp eq i32 %78, 0
  %.not241 = icmp eq i32 %8, 0
  br i1 %79, label %.preheader224, label %.preheader226

.preheader226:                                    ; preds = %.thread
  br i1 %.not241, label %.loopexit, label %.preheader225.lr.ph

.preheader225.lr.ph:                              ; preds = %.preheader226
  %.not240 = icmp ugt i32 %4, %7
  %80 = add i32 %67, -1
  %81 = mul i32 %21, %4
  %82 = add i32 %75, %67
  br i1 %.not240, label %.preheader225.lr.ph.split, label %.preheader225.us

.preheader225.us:                                 ; preds = %.preheader225.lr.ph, %90
  %.1202228.us = phi i32 [ %91, %90 ], [ 0, %.preheader225.lr.ph ]
  %83 = icmp eq i32 %.1202228.us, 0
  %84 = mul i32 %.1202228.us, %71
  %85 = add i32 %84, %75
  br i1 %83, label %.lr.ph.split.us.us, label %.lr.ph.split.us231

86:                                               ; preds = %._crit_edge.us
  br i1 %83, label %87, label %88

87:                                               ; preds = %86
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %20, i32 noundef %3, i32 noundef 127, i32 noundef %67, i32 noundef 1) #4
  br label %88

88:                                               ; preds = %87, %86
  %89 = add i32 %82, %84
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 671088727, i32 noundef %67, i32 noundef %67, i32 noundef %89, i32 noundef 1) #4
  br label %90

90:                                               ; preds = %88, %._crit_edge.us
  %91 = add nuw i32 %.1202228.us, 1
  %exitcond.not = icmp eq i32 %91, %8
  br i1 %exitcond.not, label %.loopexit, label %.preheader225.us, !llvm.loop !12

.lr.ph.split.us231:                               ; preds = %.preheader225.us, %.lr.ph.split.us231
  %.1204227.us229 = phi i32 [ %93, %.lr.ph.split.us231 ], [ 0, %.preheader225.us ]
  %92 = add i32 %85, %.1204227.us229
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 671088727, i32 noundef %.1204227.us229, i32 noundef %.1204227.us229, i32 noundef %92, i32 noundef 1) #4
  %93 = add nuw i32 %.1204227.us229, 1
  %94 = icmp ult i32 %93, %67
  br i1 %94, label %.lr.ph.split.us231, label %._crit_edge.us, !llvm.loop !14

._crit_edge.us:                                   ; preds = %.lr.ph.split.us231, %96
  br i1 %69, label %86, label %90

.lr.ph.split.us.us:                               ; preds = %.preheader225.us, %96
  %.1204227.us.us = phi i32 [ %98, %96 ], [ 0, %.preheader225.us ]
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %20, i32 noundef %3, i32 noundef 127, i32 noundef %.1204227.us.us, i32 noundef 1) #4
  %.not.us.us = icmp ne i32 %.1204227.us.us, %80
  %or.cond219.not.us.us = or i1 %69, %.not.us.us
  br i1 %or.cond219.not.us.us, label %95, label %96

95:                                               ; preds = %.lr.ph.split.us.us
  tail call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 19, i32 noundef %3, i32 noundef %3, i32 noundef %81) #4
  br label %96

96:                                               ; preds = %95, %.lr.ph.split.us.us
  %97 = add i32 %85, %.1204227.us.us
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 671088727, i32 noundef %.1204227.us.us, i32 noundef %.1204227.us.us, i32 noundef %97, i32 noundef 1) #4
  %98 = add nuw i32 %.1204227.us.us, 1
  %99 = icmp ult i32 %98, %67
  br i1 %99, label %.lr.ph.split.us.us, label %._crit_edge.us, !llvm.loop !14

.preheader225.lr.ph.split:                        ; preds = %.preheader225.lr.ph
  br i1 %69, label %100, label %.loopexit

100:                                              ; preds = %.preheader225.lr.ph.split
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %20, i32 noundef %3, i32 noundef 127, i32 noundef %67, i32 noundef 1) #4
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 671088727, i32 noundef %67, i32 noundef %67, i32 noundef %82, i32 noundef 1) #4
  %exitcond247.peel.not = icmp eq i32 %8, 1
  br i1 %exitcond247.peel.not, label %.loopexit, label %.preheader225.us232.peel.next

.preheader225.us232.peel.next:                    ; preds = %100, %.preheader225.us232.peel.next
  %.1202228.us233 = phi i32 [ %103, %.preheader225.us232.peel.next ], [ 1, %100 ]
  %101 = mul i32 %.1202228.us233, %71
  %102 = add i32 %82, %101
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 671088727, i32 noundef %67, i32 noundef %67, i32 noundef %102, i32 noundef 1) #4
  %103 = add nuw i32 %.1202228.us233, 1
  %exitcond247.not = icmp eq i32 %103, %8
  br i1 %exitcond247.not, label %.loopexit, label %.preheader225.us232.peel.next, !llvm.loop !15

.preheader224:                                    ; preds = %.thread
  br i1 %.not241, label %.preheader224.._crit_edge238_crit_edge, label %.preheader.lr.ph

.preheader224.._crit_edge238_crit_edge:           ; preds = %.preheader224
  %.pre = zext i32 %9 to i64
  br label %._crit_edge238

.preheader.lr.ph:                                 ; preds = %.preheader224
  %.not242 = icmp ugt i32 %4, %7
  %104 = add i32 %67, -1
  %105 = mul i32 %21, %4
  %106 = zext i32 %4 to i64
  %107 = zext nneg i32 %65 to i64
  %108 = mul nuw nsw i64 %107, %106
  %109 = add i32 %75, %67
  %110 = zext i32 %9 to i64
  %111 = zext i32 %73 to i64
  %112 = sub nsw i64 %110, %111
  %113 = add i32 %8, -1
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %139
  %.0199237 = phi i64 [ 0, %.preheader.lr.ph ], [ %.1200, %139 ]
  %.0201236 = phi i32 [ 0, %.preheader.lr.ph ], [ %140, %139 ]
  br i1 %.not242, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %114 = icmp eq i32 %.0201236, 0
  %115 = mul i32 %.0201236, %71
  %116 = add i32 %115, %75
  br i1 %114, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %121
  %.0235.us = phi i64 [ %.1.us, %121 ], [ 0, %.lr.ph ]
  %.0203234.us = phi i32 [ %123, %121 ], [ 0, %.lr.ph ]
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %20, i32 noundef %3, i32 noundef 127, i32 noundef %.0203234.us, i32 noundef 1) #4
  %.not212.us = icmp ne i32 %.0203234.us, %104
  %or.cond215.not.us = or i1 %69, %.not212.us
  br i1 %or.cond215.not.us, label %119, label %117

117:                                              ; preds = %.lr.ph.split.us
  %118 = add i32 %116, %.0203234.us
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %66, i32 noundef %2, i32 noundef 127, i32 noundef %118, i32 noundef 1) #4
  br label %121

119:                                              ; preds = %.lr.ph.split.us
  tail call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 19, i32 noundef %3, i32 noundef %3, i32 noundef %105) #4
  %120 = add i32 %116, %.0203234.us
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %66, i32 noundef %2, i32 noundef 127, i32 noundef %120, i32 noundef 1) #4
  tail call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 19, i32 noundef %2, i32 noundef %2, i32 noundef %72) #4
  br label %121

121:                                              ; preds = %117, %119
  %122 = phi i32 [ %120, %119 ], [ %118, %117 ]
  %.1.us = phi i64 [ %.0235.us, %119 ], [ %108, %117 ]
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 87, i32 noundef %122, i32 noundef %.0203234.us, i32 noundef %122, i32 noundef 1) #4
  %123 = add nuw i32 %.0203234.us, 1
  %124 = icmp ult i32 %123, %67
  br i1 %124, label %.lr.ph.split.us, label %._crit_edge, !llvm.loop !17

.lr.ph.split:                                     ; preds = %.lr.ph, %127
  %.0235 = phi i64 [ %.1, %127 ], [ 0, %.lr.ph ]
  %.0203234 = phi i32 [ %128, %127 ], [ 0, %.lr.ph ]
  %125 = add i32 %116, %.0203234
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %66, i32 noundef %2, i32 noundef 127, i32 noundef %125, i32 noundef 1) #4
  %.not213 = icmp ne i32 %.0203234, %104
  %or.cond217.not = or i1 %69, %.not213
  br i1 %or.cond217.not, label %126, label %127

126:                                              ; preds = %.lr.ph.split
  tail call void @libxsmm_rv64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 19, i32 noundef %2, i32 noundef %2, i32 noundef %72) #4
  br label %127

127:                                              ; preds = %.lr.ph.split, %126
  %.1 = phi i64 [ %.0235, %126 ], [ %108, %.lr.ph.split ]
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 87, i32 noundef %125, i32 noundef %.0203234, i32 noundef %125, i32 noundef 1) #4
  %128 = add nuw i32 %.0203234, 1
  %129 = icmp ult i32 %128, %67
  br i1 %129, label %.lr.ph.split, label %._crit_edge, !llvm.loop !17

._crit_edge:                                      ; preds = %127, %121, %.preheader
  %.0.lcssa = phi i64 [ 0, %.preheader ], [ %.1.us, %121 ], [ %.1, %127 ]
  br i1 %69, label %130, label %136

130:                                              ; preds = %._crit_edge
  %131 = icmp eq i32 %.0201236, 0
  br i1 %131, label %132, label %133

132:                                              ; preds = %130
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %20, i32 noundef %3, i32 noundef 127, i32 noundef %67, i32 noundef 1) #4
  br label %133

133:                                              ; preds = %132, %130
  %134 = mul i32 %.0201236, %71
  %135 = add i32 %109, %134
  tail call void @libxsmm_rv64_instruction_rvv_move(ptr noundef %0, i32 noundef %66, i32 noundef %2, i32 noundef 127, i32 noundef %135, i32 noundef 1) #4
  tail call void @libxsmm_rv64_instruction_rvv_compute(ptr noundef %0, i32 noundef 4183, i32 noundef %135, i32 noundef %67, i32 noundef %135, i32 noundef 1) #4
  br label %136

136:                                              ; preds = %133, %._crit_edge
  %137 = add nsw i64 %.0.lcssa, %112
  %.not211 = icmp eq i32 %.0201236, %113
  br i1 %.not211, label %139, label %138

138:                                              ; preds = %136
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 51, i32 noundef %2, i32 noundef %3, i32 noundef %2, i64 noundef %137) #4
  br label %139

139:                                              ; preds = %136, %138
  %.1200 = phi i64 [ %.0199237, %138 ], [ %137, %136 ]
  %140 = add nuw i32 %.0201236, 1
  %exitcond249.not = icmp eq i32 %140, %8
  br i1 %exitcond249.not, label %._crit_edge238, label %.preheader, !llvm.loop !18

._crit_edge238:                                   ; preds = %139, %.preheader224.._crit_edge238_crit_edge
  %.pre-phi = phi i64 [ %.pre, %.preheader224.._crit_edge238_crit_edge ], [ %110, %139 ]
  %.0199.lcssa = phi i64 [ 0, %.preheader224.._crit_edge238_crit_edge ], [ %.1200, %139 ]
  %141 = zext i32 %8 to i64
  %142 = mul nuw nsw i64 %.pre-phi, %141
  %143 = sub i64 %142, %.0199.lcssa
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 1073741875, i32 noundef %2, i32 noundef %3, i32 noundef %2, i64 noundef %143) #4
  br label %.loopexit

.loopexit:                                        ; preds = %90, %.preheader225.us232.peel.next, %100, %.preheader225.lr.ph.split, %.preheader226, %._crit_edge238
  ret void
}

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "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 = { 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 = { noreturn nounwind }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 24}
!6 = !{!"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, !10, i64 33, !10, i64 41, !8, i64 49, !7, i64 50, !7, i64 54, !7, i64 58, !11, i64 62, !11, i64 64, !8, i64 66, !8, i64 67, !8, i64 68, !8, i64 69, !11, i64 70, !11, i64 72, !11, i64 74, !11, i64 76, !11, i64 78, !11, i64 80, !7, i64 82, !7, i64 86, !7, i64 90, !8, i64 94}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13, !16}
!16 = !{!"llvm.loop.peeled.count", i32 1}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}


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