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

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

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare zeroext i8 @libxsmm_typesize(i32 noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_gemm_batch_blas(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, i32 noundef %18, i32 noundef %19, i32 noundef %20) #2 {
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i8, align 1
  %49 = alloca i8, align 1
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca i8, align 1
  %62 = alloca i8, align 1
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  store i32 %0, ptr %22, align 4, !tbaa !5
  store i32 %1, ptr %23, align 4, !tbaa !5
  store ptr %2, ptr %24, align 8, !tbaa !9
  store ptr %3, ptr %25, align 8, !tbaa !9
  store i32 %4, ptr %26, align 4, !tbaa !5
  store i32 %5, ptr %27, align 4, !tbaa !5
  store i32 %6, ptr %28, align 4, !tbaa !5
  store ptr %7, ptr %29, align 8, !tbaa !9
  store ptr %8, ptr %30, align 8, !tbaa !9
  store ptr %9, ptr %31, align 8, !tbaa !9
  store ptr %10, ptr %32, align 8, !tbaa !9
  store ptr %11, ptr %33, align 8, !tbaa !9
  store ptr %12, ptr %34, align 8, !tbaa !9
  store ptr %13, ptr %35, align 8, !tbaa !9
  store ptr %14, ptr %36, align 8, !tbaa !9
  store ptr %15, ptr %37, align 8, !tbaa !9
  store ptr %16, ptr %38, align 8, !tbaa !9
  store ptr %17, ptr %39, align 8, !tbaa !9
  store i32 %18, ptr %40, align 4, !tbaa !5
  store i32 %19, ptr %41, align 4, !tbaa !5
  store i32 %20, ptr %42, align 4, !tbaa !5
  %69 = load ptr, ptr %30, align 8, !tbaa !9
  %70 = icmp ne ptr null, %69
  br i1 %70, label %71, label %384

71:                                               ; preds = %21
  %72 = load ptr, ptr %33, align 8, !tbaa !9
  %73 = icmp ne ptr null, %72
  br i1 %73, label %74, label %384

74:                                               ; preds = %71
  %75 = load ptr, ptr %37, align 8, !tbaa !9
  %76 = icmp ne ptr null, %75
  br i1 %76, label %77, label %384

77:                                               ; preds = %74
  %78 = load i32, ptr %22, align 4, !tbaa !5
  %79 = load i32, ptr %23, align 4, !tbaa !5
  %80 = icmp eq i32 %78, %79
  br i1 %80, label %81, label %384

81:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  %82 = load ptr, ptr %30, align 8, !tbaa !9
  store ptr %82, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  %83 = load ptr, ptr %33, align 8, !tbaa !9
  store ptr %83, ptr %44, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  %84 = load ptr, ptr %37, align 8, !tbaa !9
  store ptr %84, ptr %45, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  %85 = load i32, ptr %42, align 4, !tbaa !5
  %86 = icmp sle i32 0, %85
  br i1 %86, label %87, label %89

87:                                               ; preds = %81
  %88 = load i32, ptr %42, align 4, !tbaa !5
  br label %92

89:                                               ; preds = %81
  %90 = load i32, ptr %42, align 4, !tbaa !5
  %91 = sub nsw i32 0, %90
  br label %92

92:                                               ; preds = %89, %87
  %93 = phi i32 [ %88, %87 ], [ %91, %89 ]
  store i32 %93, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #3
  store i32 0, ptr %47, align 4, !tbaa !5
  %94 = load i32, ptr %40, align 4, !tbaa !5
  %95 = icmp sle i32 0, %94
  br i1 %95, label %96, label %98

96:                                               ; preds = %92
  %97 = load i32, ptr %40, align 4, !tbaa !5
  br label %101

98:                                               ; preds = %92
  %99 = load i32, ptr %40, align 4, !tbaa !5
  %100 = sub nsw i32 0, %99
  br label %101

101:                                              ; preds = %98, %96
  %102 = phi i32 [ %97, %96 ], [ %100, %98 ]
  %103 = icmp sle i32 4, %102
  br i1 %103, label %104, label %204

104:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #3
  %105 = load i32, ptr %22, align 4, !tbaa !5
  %106 = call zeroext i8 @libxsmm_typesize(i32 noundef %105)
  store i8 %106, ptr %48, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #3
  %107 = load i32, ptr %23, align 4, !tbaa !5
  %108 = call zeroext i8 @libxsmm_typesize(i32 noundef %107)
  store i8 %108, ptr %49, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #3
  %109 = load i32, ptr %46, align 4, !tbaa !5
  %110 = load i32, ptr %40, align 4, !tbaa !5
  %111 = mul nsw i32 %109, %110
  store i32 %111, ptr %50, align 4, !tbaa !5
  br label %112

112:                                              ; preds = %199, %104
  %113 = load i32, ptr %47, align 4, !tbaa !5
  %114 = load i32, ptr %50, align 4, !tbaa !5
  %115 = icmp slt i32 %113, %114
  br i1 %115, label %116, label %203

116:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #3
  %117 = load ptr, ptr %32, align 8, !tbaa !9
  %118 = icmp ne ptr null, %117
  br i1 %118, label %119, label %125

119:                                              ; preds = %116
  %120 = load ptr, ptr %32, align 8, !tbaa !9
  %121 = load i32, ptr %47, align 4, !tbaa !5
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr %120, i64 %122
  %124 = load i32, ptr %123, align 4, !tbaa !5
  br label %127

125:                                              ; preds = %116
  %126 = load i32, ptr %41, align 4, !tbaa !5
  br label %127

127:                                              ; preds = %125, %119
  %128 = phi i32 [ %124, %119 ], [ %126, %125 ]
  %129 = load i32, ptr %41, align 4, !tbaa !5
  %130 = sub nsw i32 %128, %129
  store i32 %130, ptr %51, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #3
  %131 = load ptr, ptr %35, align 8, !tbaa !9
  %132 = icmp ne ptr null, %131
  br i1 %132, label %133, label %139

133:                                              ; preds = %127
  %134 = load ptr, ptr %35, align 8, !tbaa !9
  %135 = load i32, ptr %47, align 4, !tbaa !5
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds i8, ptr %134, i64 %136
  %138 = load i32, ptr %137, align 4, !tbaa !5
  br label %141

139:                                              ; preds = %127
  %140 = load i32, ptr %41, align 4, !tbaa !5
  br label %141

141:                                              ; preds = %139, %133
  %142 = phi i32 [ %138, %133 ], [ %140, %139 ]
  %143 = load i32, ptr %41, align 4, !tbaa !5
  %144 = sub nsw i32 %142, %143
  store i32 %144, ptr %52, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #3
  %145 = load ptr, ptr %39, align 8, !tbaa !9
  %146 = icmp ne ptr null, %145
  br i1 %146, label %147, label %153

147:                                              ; preds = %141
  %148 = load ptr, ptr %39, align 8, !tbaa !9
  %149 = load i32, ptr %47, align 4, !tbaa !5
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds i8, ptr %148, i64 %150
  %152 = load i32, ptr %151, align 4, !tbaa !5
  br label %155

153:                                              ; preds = %141
  %154 = load i32, ptr %41, align 4, !tbaa !5
  br label %155

155:                                              ; preds = %153, %147
  %156 = phi i32 [ %152, %147 ], [ %154, %153 ]
  %157 = load i32, ptr %41, align 4, !tbaa !5
  %158 = sub nsw i32 %156, %157
  store i32 %158, ptr %53, align 4, !tbaa !5
  %159 = load i32, ptr %51, align 4, !tbaa !5
  %160 = icmp sle i32 0, %159
  br i1 %160, label %161, label %198

161:                                              ; preds = %155
  %162 = load i32, ptr %52, align 4, !tbaa !5
  %163 = icmp sle i32 0, %162
  br i1 %163, label %164, label %198

164:                                              ; preds = %161
  %165 = load i32, ptr %53, align 4, !tbaa !5
  %166 = icmp sle i32 0, %165
  br i1 %166, label %167, label %198

167:                                              ; preds = %164
  %168 = load i32, ptr %22, align 4, !tbaa !5
  %169 = load i32, ptr %23, align 4, !tbaa !5
  %170 = load ptr, ptr %24, align 8, !tbaa !9
  %171 = load ptr, ptr %25, align 8, !tbaa !9
  %172 = load ptr, ptr %29, align 8, !tbaa !9
  %173 = load ptr, ptr %43, align 8, !tbaa !9
  %174 = load i32, ptr %51, align 4, !tbaa !5
  %175 = load i8, ptr %48, align 1, !tbaa !11
  %176 = zext i8 %175 to i32
  %177 = mul nsw i32 %174, %176
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds i8, ptr %173, i64 %178
  %180 = load ptr, ptr %31, align 8, !tbaa !9
  %181 = load ptr, ptr %44, align 8, !tbaa !9
  %182 = load i32, ptr %52, align 4, !tbaa !5
  %183 = load i8, ptr %48, align 1, !tbaa !11
  %184 = zext i8 %183 to i32
  %185 = mul nsw i32 %182, %184
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i8, ptr %181, i64 %186
  %188 = load ptr, ptr %34, align 8, !tbaa !9
  %189 = load ptr, ptr %36, align 8, !tbaa !9
  %190 = load ptr, ptr %45, align 8, !tbaa !9
  %191 = load i32, ptr %53, align 4, !tbaa !5
  %192 = load i8, ptr %49, align 1, !tbaa !11
  %193 = zext i8 %192 to i32
  %194 = mul nsw i32 %191, %193
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds i8, ptr %190, i64 %195
  %197 = load ptr, ptr %38, align 8, !tbaa !9
  call void @libxsmm_blas_gemm(i32 noundef %168, i32 noundef %169, ptr noundef %170, ptr noundef %171, ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %172, ptr noundef %179, ptr noundef %180, ptr noundef %187, ptr noundef %188, ptr noundef %189, ptr noundef %196, ptr noundef %197)
  br label %198

198:                                              ; preds = %167, %164, %161, %155
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #3
  br label %199

199:                                              ; preds = %198
  %200 = load i32, ptr %40, align 4, !tbaa !5
  %201 = load i32, ptr %47, align 4, !tbaa !5
  %202 = add nsw i32 %201, %200
  store i32 %202, ptr %47, align 4, !tbaa !5
  br label %112, !llvm.loop !12

203:                                              ; preds = %112
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #3
  br label %383

204:                                              ; preds = %101
  %205 = load i32, ptr %40, align 4, !tbaa !5
  %206 = icmp eq i32 0, %205
  br i1 %206, label %207, label %293

207:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #3
  store i32 8, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #3
  %208 = load ptr, ptr %32, align 8, !tbaa !9
  %209 = icmp ne ptr null, %208
  br i1 %209, label %210, label %213

210:                                              ; preds = %207
  %211 = load ptr, ptr %32, align 8, !tbaa !9
  %212 = load i32, ptr %211, align 4, !tbaa !5
  br label %214

213:                                              ; preds = %207
  br label %214

214:                                              ; preds = %213, %210
  %215 = phi i32 [ %212, %210 ], [ 8, %213 ]
  %216 = load i32, ptr %41, align 4, !tbaa !5
  %217 = mul nsw i32 %216, 8
  %218 = sub nsw i32 %215, %217
  store i32 %218, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #3
  %219 = load ptr, ptr %35, align 8, !tbaa !9
  %220 = icmp ne ptr null, %219
  br i1 %220, label %221, label %224

221:                                              ; preds = %214
  %222 = load ptr, ptr %35, align 8, !tbaa !9
  %223 = load i32, ptr %222, align 4, !tbaa !5
  br label %225

224:                                              ; preds = %214
  br label %225

225:                                              ; preds = %224, %221
  %226 = phi i32 [ %223, %221 ], [ 8, %224 ]
  %227 = load i32, ptr %41, align 4, !tbaa !5
  %228 = mul nsw i32 %227, 8
  %229 = sub nsw i32 %226, %228
  store i32 %229, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #3
  %230 = load ptr, ptr %39, align 8, !tbaa !9
  %231 = icmp ne ptr null, %230
  br i1 %231, label %232, label %235

232:                                              ; preds = %225
  %233 = load ptr, ptr %39, align 8, !tbaa !9
  %234 = load i32, ptr %233, align 4, !tbaa !5
  br label %236

235:                                              ; preds = %225
  br label %236

236:                                              ; preds = %235, %232
  %237 = phi i32 [ %234, %232 ], [ 8, %235 ]
  %238 = load i32, ptr %41, align 4, !tbaa !5
  %239 = mul nsw i32 %238, 8
  %240 = sub nsw i32 %237, %239
  store i32 %240, ptr %57, align 4, !tbaa !5
  store i32 0, ptr %47, align 4, !tbaa !5
  br label %241

241:                                              ; preds = %289, %236
  %242 = load i32, ptr %47, align 4, !tbaa !5
  %243 = load i32, ptr %46, align 4, !tbaa !5
  %244 = icmp slt i32 %242, %243
  br i1 %244, label %245, label %292

245:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #3
  %246 = load ptr, ptr %43, align 8, !tbaa !9
  %247 = load i32, ptr %47, align 4, !tbaa !5
  %248 = load i32, ptr %55, align 4, !tbaa !5
  %249 = mul nsw i32 %247, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i8, ptr %246, i64 %250
  %252 = load ptr, ptr %251, align 8, !tbaa !9
  store ptr %252, ptr %58, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #3
  %253 = load ptr, ptr %44, align 8, !tbaa !9
  %254 = load i32, ptr %47, align 4, !tbaa !5
  %255 = load i32, ptr %56, align 4, !tbaa !5
  %256 = mul nsw i32 %254, %255
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i8, ptr %253, i64 %257
  %259 = load ptr, ptr %258, align 8, !tbaa !9
  store ptr %259, ptr %59, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #3
  %260 = load ptr, ptr %45, align 8, !tbaa !9
  %261 = load i32, ptr %47, align 4, !tbaa !5
  %262 = load i32, ptr %57, align 4, !tbaa !5
  %263 = mul nsw i32 %261, %262
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds i8, ptr %260, i64 %264
  %266 = load ptr, ptr %265, align 8, !tbaa !9
  store ptr %266, ptr %60, align 8, !tbaa !9
  %267 = load ptr, ptr %58, align 8, !tbaa !9
  %268 = icmp ne ptr null, %267
  br i1 %268, label %269, label %288

269:                                              ; preds = %245
  %270 = load ptr, ptr %59, align 8, !tbaa !9
  %271 = icmp ne ptr null, %270
  br i1 %271, label %272, label %288

272:                                              ; preds = %269
  %273 = load ptr, ptr %60, align 8, !tbaa !9
  %274 = icmp ne ptr null, %273
  br i1 %274, label %275, label %288

275:                                              ; preds = %272
  %276 = load i32, ptr %22, align 4, !tbaa !5
  %277 = load i32, ptr %23, align 4, !tbaa !5
  %278 = load ptr, ptr %24, align 8, !tbaa !9
  %279 = load ptr, ptr %25, align 8, !tbaa !9
  %280 = load ptr, ptr %29, align 8, !tbaa !9
  %281 = load ptr, ptr %58, align 8, !tbaa !9
  %282 = load ptr, ptr %31, align 8, !tbaa !9
  %283 = load ptr, ptr %59, align 8, !tbaa !9
  %284 = load ptr, ptr %34, align 8, !tbaa !9
  %285 = load ptr, ptr %36, align 8, !tbaa !9
  %286 = load ptr, ptr %60, align 8, !tbaa !9
  %287 = load ptr, ptr %38, align 8, !tbaa !9
  call void @libxsmm_blas_gemm(i32 noundef %276, i32 noundef %277, ptr noundef %278, ptr noundef %279, ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %280, ptr noundef %281, ptr noundef %282, ptr noundef %283, ptr noundef %284, ptr noundef %285, ptr noundef %286, ptr noundef %287)
  br label %288

288:                                              ; preds = %275, %272, %269, %245
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #3
  br label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %47, align 4, !tbaa !5
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %47, align 4, !tbaa !5
  br label %241, !llvm.loop !14

292:                                              ; preds = %241
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #3
  br label %382

293:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #3
  %294 = load i32, ptr %22, align 4, !tbaa !5
  %295 = call zeroext i8 @libxsmm_typesize(i32 noundef %294)
  store i8 %295, ptr %61, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %62) #3
  %296 = load i32, ptr %23, align 4, !tbaa !5
  %297 = call zeroext i8 @libxsmm_typesize(i32 noundef %296)
  store i8 %297, ptr %62, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #3
  %298 = load ptr, ptr %32, align 8, !tbaa !9
  %299 = icmp ne ptr null, %298
  br i1 %299, label %300, label %308

300:                                              ; preds = %293
  %301 = load ptr, ptr %32, align 8, !tbaa !9
  %302 = load i32, ptr %301, align 4, !tbaa !5
  %303 = load i32, ptr %41, align 4, !tbaa !5
  %304 = sub nsw i32 %302, %303
  %305 = load i8, ptr %61, align 1, !tbaa !11
  %306 = zext i8 %305 to i32
  %307 = mul nsw i32 %304, %306
  br label %311

308:                                              ; preds = %293
  %309 = load i8, ptr %61, align 1, !tbaa !11
  %310 = zext i8 %309 to i32
  br label %311

311:                                              ; preds = %308, %300
  %312 = phi i32 [ %307, %300 ], [ %310, %308 ]
  store i32 %312, ptr %63, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #3
  %313 = load ptr, ptr %35, align 8, !tbaa !9
  %314 = icmp ne ptr null, %313
  br i1 %314, label %315, label %323

315:                                              ; preds = %311
  %316 = load ptr, ptr %35, align 8, !tbaa !9
  %317 = load i32, ptr %316, align 4, !tbaa !5
  %318 = load i32, ptr %41, align 4, !tbaa !5
  %319 = sub nsw i32 %317, %318
  %320 = load i8, ptr %61, align 1, !tbaa !11
  %321 = zext i8 %320 to i32
  %322 = mul nsw i32 %319, %321
  br label %326

323:                                              ; preds = %311
  %324 = load i8, ptr %61, align 1, !tbaa !11
  %325 = zext i8 %324 to i32
  br label %326

326:                                              ; preds = %323, %315
  %327 = phi i32 [ %322, %315 ], [ %325, %323 ]
  store i32 %327, ptr %64, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #3
  %328 = load ptr, ptr %39, align 8, !tbaa !9
  %329 = icmp ne ptr null, %328
  br i1 %329, label %330, label %338

330:                                              ; preds = %326
  %331 = load ptr, ptr %39, align 8, !tbaa !9
  %332 = load i32, ptr %331, align 4, !tbaa !5
  %333 = load i32, ptr %41, align 4, !tbaa !5
  %334 = sub nsw i32 %332, %333
  %335 = load i8, ptr %62, align 1, !tbaa !11
  %336 = zext i8 %335 to i32
  %337 = mul nsw i32 %334, %336
  br label %341

338:                                              ; preds = %326
  %339 = load i8, ptr %62, align 1, !tbaa !11
  %340 = zext i8 %339 to i32
  br label %341

341:                                              ; preds = %338, %330
  %342 = phi i32 [ %337, %330 ], [ %340, %338 ]
  store i32 %342, ptr %65, align 4, !tbaa !5
  store i32 0, ptr %47, align 4, !tbaa !5
  br label %343

343:                                              ; preds = %378, %341
  %344 = load i32, ptr %47, align 4, !tbaa !5
  %345 = load i32, ptr %46, align 4, !tbaa !5
  %346 = icmp slt i32 %344, %345
  br i1 %346, label %347, label %381

347:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #3
  %348 = load ptr, ptr %43, align 8, !tbaa !9
  %349 = load i32, ptr %47, align 4, !tbaa !5
  %350 = load i32, ptr %63, align 4, !tbaa !5
  %351 = mul nsw i32 %349, %350
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds i8, ptr %348, i64 %352
  store ptr %353, ptr %66, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #3
  %354 = load ptr, ptr %44, align 8, !tbaa !9
  %355 = load i32, ptr %47, align 4, !tbaa !5
  %356 = load i32, ptr %64, align 4, !tbaa !5
  %357 = mul nsw i32 %355, %356
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds i8, ptr %354, i64 %358
  store ptr %359, ptr %67, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #3
  %360 = load ptr, ptr %45, align 8, !tbaa !9
  %361 = load i32, ptr %47, align 4, !tbaa !5
  %362 = load i32, ptr %65, align 4, !tbaa !5
  %363 = mul nsw i32 %361, %362
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds i8, ptr %360, i64 %364
  store ptr %365, ptr %68, align 8, !tbaa !9
  %366 = load i32, ptr %22, align 4, !tbaa !5
  %367 = load i32, ptr %23, align 4, !tbaa !5
  %368 = load ptr, ptr %24, align 8, !tbaa !9
  %369 = load ptr, ptr %25, align 8, !tbaa !9
  %370 = load ptr, ptr %29, align 8, !tbaa !9
  %371 = load ptr, ptr %66, align 8, !tbaa !9
  %372 = load ptr, ptr %31, align 8, !tbaa !9
  %373 = load ptr, ptr %67, align 8, !tbaa !9
  %374 = load ptr, ptr %34, align 8, !tbaa !9
  %375 = load ptr, ptr %36, align 8, !tbaa !9
  %376 = load ptr, ptr %68, align 8, !tbaa !9
  %377 = load ptr, ptr %38, align 8, !tbaa !9
  call void @libxsmm_blas_gemm(i32 noundef %366, i32 noundef %367, ptr noundef %368, ptr noundef %369, ptr noundef %26, ptr noundef %27, ptr noundef %28, ptr noundef %370, ptr noundef %371, ptr noundef %372, ptr noundef %373, ptr noundef %374, ptr noundef %375, ptr noundef %376, ptr noundef %377)
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #3
  br label %378

378:                                              ; preds = %347
  %379 = load i32, ptr %47, align 4, !tbaa !5
  %380 = add nsw i32 %379, 1
  store i32 %380, ptr %47, align 4, !tbaa !5
  br label %343, !llvm.loop !15

381:                                              ; preds = %343
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #3
  br label %382

382:                                              ; preds = %381, %292
  br label %383

383:                                              ; preds = %382, %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  br label %384

384:                                              ; preds = %383, %77, %74, %71, %21
  ret void
}

attributes #0 = { 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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}


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

declare zeroext i8 @libxsmm_typesize(i32 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_gemm_batch_blas(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef readonly %10, ptr noundef %11, ptr noundef %12, ptr noundef readonly %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef readonly %17, i32 noundef %18, i32 noundef %19, i32 noundef %20) local_unnamed_addr #1 {
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  store i32 %4, ptr %22, align 4, !tbaa !5
  store i32 %5, ptr %23, align 4, !tbaa !5
  store i32 %6, ptr %24, align 4, !tbaa !5
  %25 = icmp ne ptr %8, null
  %26 = icmp ne ptr %11, null
  %or.cond = and i1 %25, %26
  %27 = icmp ne ptr %15, null
  %or.cond3 = and i1 %or.cond, %27
  %28 = icmp eq i32 %0, %1
  %or.cond174 = and i1 %28, %or.cond3
  br i1 %or.cond174, label %29, label %.loopexit

29:                                               ; preds = %21
  %30 = tail call i32 @llvm.abs.i32(i32 %18, i1 true)
  %31 = icmp ugt i32 %30, 3
  br i1 %31, label %32, label %95

32:                                               ; preds = %29
  %33 = tail call i32 @llvm.abs.i32(i32 %20, i1 true)
  %34 = tail call zeroext i8 @libxsmm_typesize(i32 noundef %0) #3
  %35 = tail call zeroext i8 @libxsmm_typesize(i32 noundef %0) #3
  %36 = mul nsw i32 %33, %18
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %.lr.ph181, label %.loopexit

.lr.ph181:                                        ; preds = %32
  %.not171 = icmp eq ptr %10, null
  %.not172 = icmp eq ptr %13, null
  %.not173 = icmp eq ptr %17, null
  %38 = zext i8 %34 to i32
  %39 = zext i8 %35 to i32
  %40 = sext i32 %18 to i64
  %41 = zext nneg i32 %36 to i64
  br i1 %.not171, label %.lr.ph181.split.us, label %.lr.ph181.split

.lr.ph181.split.us:                               ; preds = %.lr.ph181, %63
  %indvars.iv197 = phi i64 [ %indvars.iv.next198, %63 ], [ 0, %.lr.ph181 ]
  br i1 %.not172, label %45, label %42

42:                                               ; preds = %.lr.ph181.split.us
  %43 = getelementptr inbounds i8, ptr %13, i64 %indvars.iv197
  %44 = load i32, ptr %43, align 4, !tbaa !5
  br label %45

45:                                               ; preds = %42, %.lr.ph181.split.us
  %46 = phi i32 [ %44, %42 ], [ %19, %.lr.ph181.split.us ]
  %47 = sub nsw i32 %46, %19
  br i1 %.not173, label %51, label %48

48:                                               ; preds = %45
  %49 = getelementptr inbounds i8, ptr %17, i64 %indvars.iv197
  %50 = load i32, ptr %49, align 4, !tbaa !5
  br label %51

51:                                               ; preds = %48, %45
  %52 = phi i32 [ %50, %48 ], [ %19, %45 ]
  %53 = sub nsw i32 %52, %19
  %54 = icmp sgt i32 %47, -1
  %55 = icmp sgt i32 %53, -1
  %or.cond7.us = select i1 %54, i1 %55, i1 false
  br i1 %or.cond7.us, label %56, label %63

56:                                               ; preds = %51
  %57 = mul nuw nsw i32 %47, %38
  %58 = zext nneg i32 %57 to i64
  %59 = getelementptr inbounds i8, ptr %11, i64 %58
  %60 = mul nuw nsw i32 %53, %39
  %61 = zext nneg i32 %60 to i64
  %62 = getelementptr inbounds i8, ptr %15, i64 %61
  call void @libxsmm_blas_gemm(i32 noundef %0, i32 noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef %7, ptr noundef nonnull %8, ptr noundef %9, ptr noundef nonnull %59, ptr noundef %12, ptr noundef %14, ptr noundef nonnull %62, ptr noundef %16)
  br label %63

63:                                               ; preds = %56, %51
  %indvars.iv.next198 = add nsw i64 %indvars.iv197, %40
  %64 = icmp slt i64 %indvars.iv.next198, %41
  br i1 %64, label %.lr.ph181.split.us, label %.loopexit, !llvm.loop !9

.lr.ph181.split:                                  ; preds = %.lr.ph181, %93
  %indvars.iv194 = phi i64 [ %indvars.iv.next195, %93 ], [ 0, %.lr.ph181 ]
  %65 = getelementptr inbounds i8, ptr %10, i64 %indvars.iv194
  %66 = load i32, ptr %65, align 4, !tbaa !5
  %67 = sub nsw i32 %66, %19
  br i1 %.not172, label %71, label %68

68:                                               ; preds = %.lr.ph181.split
  %69 = getelementptr inbounds i8, ptr %13, i64 %indvars.iv194
  %70 = load i32, ptr %69, align 4, !tbaa !5
  br label %71

71:                                               ; preds = %.lr.ph181.split, %68
  %72 = phi i32 [ %70, %68 ], [ %19, %.lr.ph181.split ]
  %73 = sub nsw i32 %72, %19
  br i1 %.not173, label %77, label %74

74:                                               ; preds = %71
  %75 = getelementptr inbounds i8, ptr %17, i64 %indvars.iv194
  %76 = load i32, ptr %75, align 4, !tbaa !5
  br label %77

77:                                               ; preds = %71, %74
  %78 = phi i32 [ %76, %74 ], [ %19, %71 ]
  %79 = sub nsw i32 %78, %19
  %80 = icmp sgt i32 %67, -1
  %81 = icmp sgt i32 %73, -1
  %or.cond5 = select i1 %80, i1 %81, i1 false
  %82 = icmp sgt i32 %79, -1
  %or.cond7 = select i1 %or.cond5, i1 %82, i1 false
  br i1 %or.cond7, label %83, label %93

83:                                               ; preds = %77
  %84 = mul nuw nsw i32 %67, %38
  %85 = zext nneg i32 %84 to i64
  %86 = getelementptr inbounds i8, ptr %8, i64 %85
  %87 = mul nuw nsw i32 %73, %38
  %88 = zext nneg i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %11, i64 %88
  %90 = mul nuw nsw i32 %79, %39
  %91 = zext nneg i32 %90 to i64
  %92 = getelementptr inbounds i8, ptr %15, i64 %91
  call void @libxsmm_blas_gemm(i32 noundef %0, i32 noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef %7, ptr noundef nonnull %86, ptr noundef %9, ptr noundef nonnull %89, ptr noundef %12, ptr noundef %14, ptr noundef nonnull %92, ptr noundef %16)
  br label %93

93:                                               ; preds = %83, %77
  %indvars.iv.next195 = add nsw i64 %indvars.iv194, %40
  %94 = icmp slt i64 %indvars.iv.next195, %41
  br i1 %94, label %.lr.ph181.split, label %.loopexit, !llvm.loop !9

95:                                               ; preds = %29
  %96 = icmp eq i32 %18, 0
  br i1 %96, label %97, label %131

97:                                               ; preds = %95
  %.not168 = icmp eq ptr %10, null
  br i1 %.not168, label %100, label %98

98:                                               ; preds = %97
  %99 = load i32, ptr %10, align 4, !tbaa !5
  br label %100

100:                                              ; preds = %97, %98
  %101 = phi i32 [ %99, %98 ], [ 8, %97 ]
  %102 = shl nsw i32 %19, 3
  %103 = sub nsw i32 %101, %102
  %.not169 = icmp eq ptr %13, null
  br i1 %.not169, label %106, label %104

104:                                              ; preds = %100
  %105 = load i32, ptr %13, align 4, !tbaa !5
  br label %106

106:                                              ; preds = %100, %104
  %107 = phi i32 [ %105, %104 ], [ 8, %100 ]
  %108 = sub nsw i32 %107, %102
  %.not170 = icmp eq ptr %17, null
  br i1 %.not170, label %111, label %109

109:                                              ; preds = %106
  %110 = load i32, ptr %17, align 4, !tbaa !5
  br label %111

111:                                              ; preds = %106, %109
  %112 = phi i32 [ %110, %109 ], [ 8, %106 ]
  %.not183 = icmp eq i32 %20, 0
  br i1 %.not183, label %.loopexit, label %.lr.ph179.preheader

.lr.ph179.preheader:                              ; preds = %111
  %113 = sub nsw i32 %112, %102
  %114 = sext i32 %103 to i64
  %115 = sext i32 %108 to i64
  %116 = sext i32 %113 to i64
  %smax191 = tail call i32 @llvm.abs.i32(i32 %20, i1 false)
  %wide.trip.count192 = zext i32 %smax191 to i64
  br label %.lr.ph179

.lr.ph179:                                        ; preds = %.lr.ph179.preheader, %130
  %indvars.iv188 = phi i64 [ 0, %.lr.ph179.preheader ], [ %indvars.iv.next189, %130 ]
  %117 = mul nsw i64 %indvars.iv188, %114
  %118 = getelementptr inbounds i8, ptr %8, i64 %117
  %119 = load ptr, ptr %118, align 8, !tbaa !11
  %120 = mul nsw i64 %indvars.iv188, %115
  %121 = getelementptr inbounds i8, ptr %11, i64 %120
  %122 = load ptr, ptr %121, align 8, !tbaa !11
  %123 = mul nsw i64 %indvars.iv188, %116
  %124 = getelementptr inbounds i8, ptr %15, i64 %123
  %125 = load ptr, ptr %124, align 8, !tbaa !11
  %126 = icmp ne ptr %119, null
  %127 = icmp ne ptr %122, null
  %or.cond9 = select i1 %126, i1 %127, i1 false
  %128 = icmp ne ptr %125, null
  %or.cond11 = select i1 %or.cond9, i1 %128, i1 false
  br i1 %or.cond11, label %129, label %130

129:                                              ; preds = %.lr.ph179
  call void @libxsmm_blas_gemm(i32 noundef %0, i32 noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef %7, ptr noundef nonnull %119, ptr noundef %9, ptr noundef nonnull %122, ptr noundef %12, ptr noundef %14, ptr noundef nonnull %125, ptr noundef %16)
  br label %130

130:                                              ; preds = %129, %.lr.ph179
  %indvars.iv.next189 = add nuw nsw i64 %indvars.iv188, 1
  %exitcond193.not = icmp eq i64 %indvars.iv.next189, %wide.trip.count192
  br i1 %exitcond193.not, label %.loopexit, label %.lr.ph179, !llvm.loop !13

131:                                              ; preds = %95
  %132 = tail call zeroext i8 @libxsmm_typesize(i32 noundef %0) #3
  %133 = tail call zeroext i8 @libxsmm_typesize(i32 noundef %0) #3
  %.not = icmp eq ptr %10, null
  br i1 %.not, label %139, label %134

134:                                              ; preds = %131
  %135 = load i32, ptr %10, align 4, !tbaa !5
  %136 = sub nsw i32 %135, %19
  %137 = zext i8 %132 to i32
  %138 = mul nsw i32 %136, %137
  br label %141

139:                                              ; preds = %131
  %140 = zext i8 %132 to i32
  br label %141

141:                                              ; preds = %139, %134
  %142 = phi i32 [ %138, %134 ], [ %140, %139 ]
  %.not166 = icmp eq ptr %13, null
  br i1 %.not166, label %148, label %143

143:                                              ; preds = %141
  %144 = load i32, ptr %13, align 4, !tbaa !5
  %145 = sub nsw i32 %144, %19
  %146 = zext i8 %132 to i32
  %147 = mul nsw i32 %145, %146
  br label %150

148:                                              ; preds = %141
  %149 = zext i8 %132 to i32
  br label %150

150:                                              ; preds = %148, %143
  %151 = phi i32 [ %147, %143 ], [ %149, %148 ]
  %.not167 = icmp eq ptr %17, null
  br i1 %.not167, label %157, label %152

152:                                              ; preds = %150
  %153 = load i32, ptr %17, align 4, !tbaa !5
  %154 = sub nsw i32 %153, %19
  %155 = zext i8 %133 to i32
  %156 = mul nsw i32 %154, %155
  br label %159

157:                                              ; preds = %150
  %158 = zext i8 %133 to i32
  br label %159

159:                                              ; preds = %157, %152
  %160 = phi i32 [ %156, %152 ], [ %158, %157 ]
  %.not182 = icmp eq i32 %20, 0
  br i1 %.not182, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %159
  %161 = sext i32 %142 to i64
  %162 = sext i32 %151 to i64
  %163 = sext i32 %160 to i64
  %smax = tail call i32 @llvm.abs.i32(i32 %20, i1 false)
  %wide.trip.count = zext i32 %smax to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %164 = mul nsw i64 %indvars.iv, %161
  %165 = getelementptr inbounds i8, ptr %8, i64 %164
  %166 = mul nsw i64 %indvars.iv, %162
  %167 = getelementptr inbounds i8, ptr %11, i64 %166
  %168 = mul nsw i64 %indvars.iv, %163
  %169 = getelementptr inbounds i8, ptr %15, i64 %168
  call void @libxsmm_blas_gemm(i32 noundef %0, i32 noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef %7, ptr noundef nonnull %165, ptr noundef %9, ptr noundef nonnull %167, ptr noundef %12, ptr noundef %14, ptr noundef nonnull %169, ptr noundef %16)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph, !llvm.loop !14

.loopexit:                                        ; preds = %.lr.ph, %130, %93, %63, %159, %111, %32, %21
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}


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