; LLVM IR from libxsmm/libxsmm :: samples/spmm (spmm_kernel)

; 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.spmm_def = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%union.libxsmm_bfloat16_f32 = type { float }

; 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

; Function Attrs: nounwind uwtable
define dso_local void @dense_gemm_ref(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #1 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %struct.spmm_def, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca float, align 4
  %25 = alloca i16, align 2
  %26 = alloca %union.libxsmm_bfloat16_f32, align 4
  %27 = alloca %union.libxsmm_bfloat16_f32, align 4
  %28 = alloca %union.libxsmm_bfloat16_f32, 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
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 88, ptr %9) #5
  %35 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %35, i64 88, i1 false), !tbaa.struct !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %36 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 4
  %37 = load i32, ptr %36, align 8, !tbaa !14
  store i32 %37, ptr %10, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %38 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 5
  %39 = load i32, ptr %38, align 4, !tbaa !16
  store i32 %39, ptr %11, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %40 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 6
  %41 = load i32, ptr %40, align 8, !tbaa !17
  store i32 %41, ptr %12, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %42 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 9
  %43 = load i32, ptr %42, align 4, !tbaa !18
  store i32 %43, ptr %13, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %44 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 1
  %45 = load i32, ptr %44, align 4, !tbaa !19
  %46 = icmp eq i32 %45, 1
  br i1 %46, label %47, label %175

47:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %48, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %49, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %50 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %50, ptr %20, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %51

51:                                               ; preds = %171, %47
  %52 = load i32, ptr %17, align 4, !tbaa !10
  %53 = load i32, ptr %13, align 4, !tbaa !10
  %54 = icmp slt i32 %52, %53
  br i1 %54, label %55, label %174

55:                                               ; preds = %51
  store i32 0, ptr %14, align 4, !tbaa !10
  br label %56

56:                                               ; preds = %155, %55
  %57 = load i32, ptr %14, align 4, !tbaa !10
  %58 = load i32, ptr %11, align 4, !tbaa !10
  %59 = icmp slt i32 %57, %58
  br i1 %59, label %60, label %158

60:                                               ; preds = %56
  store i32 0, ptr %15, align 4, !tbaa !10
  br label %61

61:                                               ; preds = %151, %60
  %62 = load i32, ptr %15, align 4, !tbaa !10
  %63 = load i32, ptr %10, align 4, !tbaa !10
  %64 = icmp slt i32 %62, %63
  br i1 %64, label %65, label %154

65:                                               ; preds = %61
  %66 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 10
  %67 = load double, ptr %66, align 8, !tbaa !20
  %68 = fcmp oeq double %67, 0.000000e+00
  br i1 %68, label %69, label %78

69:                                               ; preds = %65
  %70 = load ptr, ptr %20, align 8, !tbaa !5
  %71 = load i32, ptr %14, align 4, !tbaa !10
  %72 = load i32, ptr %10, align 4, !tbaa !10
  %73 = mul nsw i32 %71, %72
  %74 = load i32, ptr %15, align 4, !tbaa !10
  %75 = add nsw i32 %73, %74
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds float, ptr %70, i64 %76
  store float 0.000000e+00, ptr %77, align 4, !tbaa !21
  br label %78

78:                                               ; preds = %69, %65
  store i32 0, ptr %16, align 4, !tbaa !10
  br label %79

79:                                               ; preds = %147, %78
  %80 = load i32, ptr %16, align 4, !tbaa !10
  %81 = load i32, ptr %12, align 4, !tbaa !10
  %82 = icmp slt i32 %80, %81
  br i1 %82, label %83, label %150

83:                                               ; preds = %79
  %84 = load ptr, ptr %5, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.spmm_def, ptr %84, i32 0, i32 11
  %86 = load i32, ptr %85, align 8, !tbaa !23
  %87 = icmp sgt i32 %86, 0
  br i1 %87, label %88, label %117

88:                                               ; preds = %83
  %89 = load ptr, ptr %19, align 8, !tbaa !5
  %90 = load i32, ptr %16, align 4, !tbaa !10
  %91 = load i32, ptr %15, align 4, !tbaa !10
  %92 = load i32, ptr %12, align 4, !tbaa !10
  %93 = mul nsw i32 %91, %92
  %94 = add nsw i32 %90, %93
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds float, ptr %89, i64 %95
  %97 = load float, ptr %96, align 4, !tbaa !21
  %98 = load ptr, ptr %18, align 8, !tbaa !5
  %99 = load i32, ptr %14, align 4, !tbaa !10
  %100 = load i32, ptr %12, align 4, !tbaa !10
  %101 = mul nsw i32 %99, %100
  %102 = load i32, ptr %16, align 4, !tbaa !10
  %103 = add nsw i32 %101, %102
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds float, ptr %98, i64 %104
  %106 = load float, ptr %105, align 4, !tbaa !21
  %107 = load ptr, ptr %20, align 8, !tbaa !5
  %108 = load i32, ptr %14, align 4, !tbaa !10
  %109 = load i32, ptr %15, align 4, !tbaa !10
  %110 = load i32, ptr %11, align 4, !tbaa !10
  %111 = mul nsw i32 %109, %110
  %112 = add nsw i32 %108, %111
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds float, ptr %107, i64 %113
  %115 = load float, ptr %114, align 4, !tbaa !21
  %116 = call float @llvm.fmuladd.f32(float %97, float %106, float %115)
  store float %116, ptr %114, align 4, !tbaa !21
  br label %146

117:                                              ; preds = %83
  %118 = load ptr, ptr %19, align 8, !tbaa !5
  %119 = load i32, ptr %16, align 4, !tbaa !10
  %120 = load i32, ptr %10, align 4, !tbaa !10
  %121 = mul nsw i32 %119, %120
  %122 = load i32, ptr %15, align 4, !tbaa !10
  %123 = add nsw i32 %121, %122
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds float, ptr %118, i64 %124
  %126 = load float, ptr %125, align 4, !tbaa !21
  %127 = load ptr, ptr %18, align 8, !tbaa !5
  %128 = load i32, ptr %14, align 4, !tbaa !10
  %129 = load i32, ptr %12, align 4, !tbaa !10
  %130 = mul nsw i32 %128, %129
  %131 = load i32, ptr %16, align 4, !tbaa !10
  %132 = add nsw i32 %130, %131
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds float, ptr %127, i64 %133
  %135 = load float, ptr %134, align 4, !tbaa !21
  %136 = load ptr, ptr %20, align 8, !tbaa !5
  %137 = load i32, ptr %14, align 4, !tbaa !10
  %138 = load i32, ptr %10, align 4, !tbaa !10
  %139 = mul nsw i32 %137, %138
  %140 = load i32, ptr %15, align 4, !tbaa !10
  %141 = add nsw i32 %139, %140
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds float, ptr %136, i64 %142
  %144 = load float, ptr %143, align 4, !tbaa !21
  %145 = call float @llvm.fmuladd.f32(float %126, float %135, float %144)
  store float %145, ptr %143, align 4, !tbaa !21
  br label %146

146:                                              ; preds = %117, %88
  br label %147

147:                                              ; preds = %146
  %148 = load i32, ptr %16, align 4, !tbaa !10
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %16, align 4, !tbaa !10
  br label %79, !llvm.loop !24

150:                                              ; preds = %79
  br label %151

151:                                              ; preds = %150
  %152 = load i32, ptr %15, align 4, !tbaa !10
  %153 = add nsw i32 %152, 1
  store i32 %153, ptr %15, align 4, !tbaa !10
  br label %61, !llvm.loop !26

154:                                              ; preds = %61
  br label %155

155:                                              ; preds = %154
  %156 = load i32, ptr %14, align 4, !tbaa !10
  %157 = add nsw i32 %156, 1
  store i32 %157, ptr %14, align 4, !tbaa !10
  br label %56, !llvm.loop !27

158:                                              ; preds = %56
  %159 = load ptr, ptr %19, align 8, !tbaa !5
  %160 = load i32, ptr %12, align 4, !tbaa !10
  %161 = load i32, ptr %10, align 4, !tbaa !10
  %162 = mul nsw i32 %160, %161
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds float, ptr %159, i64 %163
  store ptr %164, ptr %19, align 8, !tbaa !5
  %165 = load ptr, ptr %20, align 8, !tbaa !5
  %166 = load i32, ptr %11, align 4, !tbaa !10
  %167 = load i32, ptr %10, align 4, !tbaa !10
  %168 = mul nsw i32 %166, %167
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds float, ptr %165, i64 %169
  store ptr %170, ptr %20, align 8, !tbaa !5
  br label %171

171:                                              ; preds = %158
  %172 = load i32, ptr %17, align 4, !tbaa !10
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %17, align 4, !tbaa !10
  br label %51, !llvm.loop !28

174:                                              ; preds = %51
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %658

175:                                              ; preds = %4
  %176 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 1
  %177 = load i32, ptr %176, align 4, !tbaa !19
  %178 = icmp eq i32 %177, 2
  br i1 %178, label %179, label %334

179:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %180, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %181 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %181, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %182, ptr %23, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %183

183:                                              ; preds = %330, %179
  %184 = load i32, ptr %17, align 4, !tbaa !10
  %185 = load i32, ptr %13, align 4, !tbaa !10
  %186 = icmp slt i32 %184, %185
  br i1 %186, label %187, label %333

187:                                              ; preds = %183
  store i32 0, ptr %14, align 4, !tbaa !10
  br label %188

188:                                              ; preds = %314, %187
  %189 = load i32, ptr %14, align 4, !tbaa !10
  %190 = load i32, ptr %11, align 4, !tbaa !10
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %192, label %317

192:                                              ; preds = %188
  store i32 0, ptr %15, align 4, !tbaa !10
  br label %193

193:                                              ; preds = %310, %192
  %194 = load i32, ptr %15, align 4, !tbaa !10
  %195 = load i32, ptr %10, align 4, !tbaa !10
  %196 = icmp slt i32 %194, %195
  br i1 %196, label %197, label %313

197:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store float 0.000000e+00, ptr %24, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #5
  %198 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 10
  %199 = load double, ptr %198, align 8, !tbaa !20
  %200 = fcmp oeq double %199, 0.000000e+00
  br i1 %200, label %201, label %202

201:                                              ; preds = %197
  store float 0.000000e+00, ptr %24, align 4, !tbaa !21
  br label %232

202:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %203 = getelementptr inbounds [2 x i16], ptr %26, i64 0, i64 0
  store i16 0, ptr %203, align 4, !tbaa !29
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.spmm_def, ptr %204, i32 0, i32 11
  %206 = load i32, ptr %205, align 8, !tbaa !23
  %207 = icmp sgt i32 %206, 0
  br i1 %207, label %208, label %219

208:                                              ; preds = %202
  %209 = load ptr, ptr %23, align 8, !tbaa !5
  %210 = load i32, ptr %14, align 4, !tbaa !10
  %211 = load i32, ptr %15, align 4, !tbaa !10
  %212 = load i32, ptr %11, align 4, !tbaa !10
  %213 = mul nsw i32 %211, %212
  %214 = add nsw i32 %210, %213
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds i16, ptr %209, i64 %215
  %217 = load i16, ptr %216, align 2, !tbaa !30
  %218 = getelementptr inbounds [2 x i16], ptr %26, i64 0, i64 1
  store i16 %217, ptr %218, align 2, !tbaa !29
  br label %230

219:                                              ; preds = %202
  %220 = load ptr, ptr %23, align 8, !tbaa !5
  %221 = load i32, ptr %14, align 4, !tbaa !10
  %222 = load i32, ptr %10, align 4, !tbaa !10
  %223 = mul nsw i32 %221, %222
  %224 = load i32, ptr %15, align 4, !tbaa !10
  %225 = add nsw i32 %223, %224
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i16, ptr %220, i64 %226
  %228 = load i16, ptr %227, align 2, !tbaa !30
  %229 = getelementptr inbounds [2 x i16], ptr %26, i64 0, i64 1
  store i16 %228, ptr %229, align 2, !tbaa !29
  br label %230

230:                                              ; preds = %219, %208
  %231 = load float, ptr %26, align 4, !tbaa !29
  store float %231, ptr %24, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  br label %232

232:                                              ; preds = %230, %201
  store i32 0, ptr %16, align 4, !tbaa !10
  br label %233

233:                                              ; preds = %281, %232
  %234 = load i32, ptr %16, align 4, !tbaa !10
  %235 = load i32, ptr %12, align 4, !tbaa !10
  %236 = icmp slt i32 %234, %235
  br i1 %236, label %237, label %284

237:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %238 = getelementptr inbounds [2 x i16], ptr %27, i64 0, i64 0
  store i16 0, ptr %238, align 4, !tbaa !29
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.spmm_def, ptr %239, i32 0, i32 11
  %241 = load i32, ptr %240, align 8, !tbaa !23
  %242 = icmp sgt i32 %241, 0
  br i1 %242, label %243, label %254

243:                                              ; preds = %237
  %244 = load ptr, ptr %22, align 8, !tbaa !5
  %245 = load i32, ptr %16, align 4, !tbaa !10
  %246 = load i32, ptr %15, align 4, !tbaa !10
  %247 = load i32, ptr %12, align 4, !tbaa !10
  %248 = mul nsw i32 %246, %247
  %249 = add nsw i32 %245, %248
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i16, ptr %244, i64 %250
  %252 = load i16, ptr %251, align 2, !tbaa !30
  %253 = getelementptr inbounds [2 x i16], ptr %27, i64 0, i64 1
  store i16 %252, ptr %253, align 2, !tbaa !29
  br label %265

254:                                              ; preds = %237
  %255 = load ptr, ptr %22, align 8, !tbaa !5
  %256 = load i32, ptr %16, align 4, !tbaa !10
  %257 = load i32, ptr %10, align 4, !tbaa !10
  %258 = mul nsw i32 %256, %257
  %259 = load i32, ptr %15, align 4, !tbaa !10
  %260 = add nsw i32 %258, %259
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds i16, ptr %255, i64 %261
  %263 = load i16, ptr %262, align 2, !tbaa !30
  %264 = getelementptr inbounds [2 x i16], ptr %27, i64 0, i64 1
  store i16 %263, ptr %264, align 2, !tbaa !29
  br label %265

265:                                              ; preds = %254, %243
  %266 = getelementptr inbounds [2 x i16], ptr %28, i64 0, i64 0
  store i16 0, ptr %266, align 4, !tbaa !29
  %267 = load ptr, ptr %21, align 8, !tbaa !5
  %268 = load i32, ptr %14, align 4, !tbaa !10
  %269 = load i32, ptr %12, align 4, !tbaa !10
  %270 = mul nsw i32 %268, %269
  %271 = load i32, ptr %16, align 4, !tbaa !10
  %272 = add nsw i32 %270, %271
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i16, ptr %267, i64 %273
  %275 = load i16, ptr %274, align 2, !tbaa !30
  %276 = getelementptr inbounds [2 x i16], ptr %28, i64 0, i64 1
  store i16 %275, ptr %276, align 2, !tbaa !29
  %277 = load float, ptr %27, align 4, !tbaa !29
  %278 = load float, ptr %28, align 4, !tbaa !29
  %279 = load float, ptr %24, align 4, !tbaa !21
  %280 = call float @llvm.fmuladd.f32(float %277, float %278, float %279)
  store float %280, ptr %24, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  br label %281

281:                                              ; preds = %265
  %282 = load i32, ptr %16, align 4, !tbaa !10
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %16, align 4, !tbaa !10
  br label %233, !llvm.loop !32

284:                                              ; preds = %233
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef %24, ptr noundef %25, i64 noundef 1)
  %285 = load ptr, ptr %5, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.spmm_def, ptr %285, i32 0, i32 11
  %287 = load i32, ptr %286, align 8, !tbaa !23
  %288 = icmp sgt i32 %287, 0
  br i1 %288, label %289, label %299

289:                                              ; preds = %284
  %290 = load i16, ptr %25, align 2, !tbaa !30
  %291 = load ptr, ptr %23, align 8, !tbaa !5
  %292 = load i32, ptr %14, align 4, !tbaa !10
  %293 = load i32, ptr %15, align 4, !tbaa !10
  %294 = load i32, ptr %11, align 4, !tbaa !10
  %295 = mul nsw i32 %293, %294
  %296 = add nsw i32 %292, %295
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds i16, ptr %291, i64 %297
  store i16 %290, ptr %298, align 2, !tbaa !30
  br label %309

299:                                              ; preds = %284
  %300 = load i16, ptr %25, align 2, !tbaa !30
  %301 = load ptr, ptr %23, align 8, !tbaa !5
  %302 = load i32, ptr %14, align 4, !tbaa !10
  %303 = load i32, ptr %10, align 4, !tbaa !10
  %304 = mul nsw i32 %302, %303
  %305 = load i32, ptr %15, align 4, !tbaa !10
  %306 = add nsw i32 %304, %305
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i16, ptr %301, i64 %307
  store i16 %300, ptr %308, align 2, !tbaa !30
  br label %309

309:                                              ; preds = %299, %289
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %310

310:                                              ; preds = %309
  %311 = load i32, ptr %15, align 4, !tbaa !10
  %312 = add nsw i32 %311, 1
  store i32 %312, ptr %15, align 4, !tbaa !10
  br label %193, !llvm.loop !33

313:                                              ; preds = %193
  br label %314

314:                                              ; preds = %313
  %315 = load i32, ptr %14, align 4, !tbaa !10
  %316 = add nsw i32 %315, 1
  store i32 %316, ptr %14, align 4, !tbaa !10
  br label %188, !llvm.loop !34

317:                                              ; preds = %188
  %318 = load ptr, ptr %22, align 8, !tbaa !5
  %319 = load i32, ptr %12, align 4, !tbaa !10
  %320 = load i32, ptr %10, align 4, !tbaa !10
  %321 = mul nsw i32 %319, %320
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i16, ptr %318, i64 %322
  store ptr %323, ptr %22, align 8, !tbaa !5
  %324 = load ptr, ptr %23, align 8, !tbaa !5
  %325 = load i32, ptr %11, align 4, !tbaa !10
  %326 = load i32, ptr %10, align 4, !tbaa !10
  %327 = mul nsw i32 %325, %326
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i16, ptr %324, i64 %328
  store ptr %329, ptr %23, align 8, !tbaa !5
  br label %330

330:                                              ; preds = %317
  %331 = load i32, ptr %17, align 4, !tbaa !10
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %17, align 4, !tbaa !10
  br label %183, !llvm.loop !35

333:                                              ; preds = %183
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %657

334:                                              ; preds = %175
  %335 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 1
  %336 = load i32, ptr %335, align 4, !tbaa !19
  %337 = icmp eq i32 %336, 12
  br i1 %337, label %338, label %655

338:                                              ; preds = %334
  %339 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 16
  %340 = load i32, ptr %339, align 4, !tbaa !36
  %341 = icmp eq i32 %340, 1
  br i1 %341, label %342, label %495

342:                                              ; preds = %338
  %343 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 17
  %344 = load i32, ptr %343, align 8, !tbaa !37
  %345 = icmp eq i32 %344, 0
  br i1 %345, label %346, label %495

346:                                              ; preds = %342
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %347 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %347, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %348 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %348, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %349 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %349, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %350

350:                                              ; preds = %491, %346
  %351 = load i32, ptr %17, align 4, !tbaa !10
  %352 = load i32, ptr %13, align 4, !tbaa !10
  %353 = icmp slt i32 %351, %352
  br i1 %353, label %354, label %494

354:                                              ; preds = %350
  store i32 0, ptr %14, align 4, !tbaa !10
  br label %355

355:                                              ; preds = %475, %354
  %356 = load i32, ptr %14, align 4, !tbaa !10
  %357 = load i32, ptr %11, align 4, !tbaa !10
  %358 = icmp slt i32 %356, %357
  br i1 %358, label %359, label %478

359:                                              ; preds = %355
  store i32 0, ptr %15, align 4, !tbaa !10
  br label %360

360:                                              ; preds = %471, %359
  %361 = load i32, ptr %15, align 4, !tbaa !10
  %362 = load i32, ptr %10, align 4, !tbaa !10
  %363 = icmp slt i32 %361, %362
  br i1 %363, label %364, label %474

364:                                              ; preds = %360
  %365 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 10
  %366 = load double, ptr %365, align 8, !tbaa !20
  %367 = fcmp oeq double %366, 0.000000e+00
  br i1 %367, label %368, label %392

368:                                              ; preds = %364
  %369 = load ptr, ptr %5, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.spmm_def, ptr %369, i32 0, i32 11
  %371 = load i32, ptr %370, align 8, !tbaa !23
  %372 = icmp sgt i32 %371, 0
  br i1 %372, label %373, label %382

373:                                              ; preds = %368
  %374 = load ptr, ptr %31, align 8, !tbaa !5
  %375 = load i32, ptr %14, align 4, !tbaa !10
  %376 = load i32, ptr %15, align 4, !tbaa !10
  %377 = load i32, ptr %11, align 4, !tbaa !10
  %378 = mul nsw i32 %376, %377
  %379 = add nsw i32 %375, %378
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds i32, ptr %374, i64 %380
  store i32 0, ptr %381, align 4, !tbaa !10
  br label %391

382:                                              ; preds = %368
  %383 = load ptr, ptr %31, align 8, !tbaa !5
  %384 = load i32, ptr %14, align 4, !tbaa !10
  %385 = load i32, ptr %10, align 4, !tbaa !10
  %386 = mul nsw i32 %384, %385
  %387 = load i32, ptr %15, align 4, !tbaa !10
  %388 = add nsw i32 %386, %387
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds i32, ptr %383, i64 %389
  store i32 0, ptr %390, align 4, !tbaa !10
  br label %391

391:                                              ; preds = %382, %373
  br label %392

392:                                              ; preds = %391, %364
  store i32 0, ptr %16, align 4, !tbaa !10
  br label %393

393:                                              ; preds = %467, %392
  %394 = load i32, ptr %16, align 4, !tbaa !10
  %395 = load i32, ptr %12, align 4, !tbaa !10
  %396 = icmp slt i32 %394, %395
  br i1 %396, label %397, label %470

397:                                              ; preds = %393
  %398 = load ptr, ptr %5, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.spmm_def, ptr %398, i32 0, i32 11
  %400 = load i32, ptr %399, align 8, !tbaa !23
  %401 = icmp sgt i32 %400, 0
  br i1 %401, label %402, label %434

402:                                              ; preds = %397
  %403 = load ptr, ptr %30, align 8, !tbaa !5
  %404 = load i32, ptr %16, align 4, !tbaa !10
  %405 = load i32, ptr %15, align 4, !tbaa !10
  %406 = load i32, ptr %12, align 4, !tbaa !10
  %407 = mul nsw i32 %405, %406
  %408 = add nsw i32 %404, %407
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i8, ptr %403, i64 %409
  %411 = load i8, ptr %410, align 1, !tbaa !29
  %412 = zext i8 %411 to i32
  %413 = load ptr, ptr %29, align 8, !tbaa !5
  %414 = load i32, ptr %14, align 4, !tbaa !10
  %415 = load i32, ptr %12, align 4, !tbaa !10
  %416 = mul nsw i32 %414, %415
  %417 = load i32, ptr %16, align 4, !tbaa !10
  %418 = add nsw i32 %416, %417
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i8, ptr %413, i64 %419
  %421 = load i8, ptr %420, align 1, !tbaa !29
  %422 = sext i8 %421 to i32
  %423 = mul nsw i32 %412, %422
  %424 = load ptr, ptr %31, align 8, !tbaa !5
  %425 = load i32, ptr %14, align 4, !tbaa !10
  %426 = load i32, ptr %15, align 4, !tbaa !10
  %427 = load i32, ptr %11, align 4, !tbaa !10
  %428 = mul nsw i32 %426, %427
  %429 = add nsw i32 %425, %428
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds i32, ptr %424, i64 %430
  %432 = load i32, ptr %431, align 4, !tbaa !10
  %433 = add nsw i32 %432, %423
  store i32 %433, ptr %431, align 4, !tbaa !10
  br label %466

434:                                              ; preds = %397
  %435 = load ptr, ptr %30, align 8, !tbaa !5
  %436 = load i32, ptr %16, align 4, !tbaa !10
  %437 = load i32, ptr %10, align 4, !tbaa !10
  %438 = mul nsw i32 %436, %437
  %439 = load i32, ptr %15, align 4, !tbaa !10
  %440 = add nsw i32 %438, %439
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds i8, ptr %435, i64 %441
  %443 = load i8, ptr %442, align 1, !tbaa !29
  %444 = zext i8 %443 to i32
  %445 = load ptr, ptr %29, align 8, !tbaa !5
  %446 = load i32, ptr %14, align 4, !tbaa !10
  %447 = load i32, ptr %12, align 4, !tbaa !10
  %448 = mul nsw i32 %446, %447
  %449 = load i32, ptr %16, align 4, !tbaa !10
  %450 = add nsw i32 %448, %449
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i8, ptr %445, i64 %451
  %453 = load i8, ptr %452, align 1, !tbaa !29
  %454 = sext i8 %453 to i32
  %455 = mul nsw i32 %444, %454
  %456 = load ptr, ptr %31, align 8, !tbaa !5
  %457 = load i32, ptr %14, align 4, !tbaa !10
  %458 = load i32, ptr %10, align 4, !tbaa !10
  %459 = mul nsw i32 %457, %458
  %460 = load i32, ptr %15, align 4, !tbaa !10
  %461 = add nsw i32 %459, %460
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %456, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !10
  %465 = add nsw i32 %464, %455
  store i32 %465, ptr %463, align 4, !tbaa !10
  br label %466

466:                                              ; preds = %434, %402
  br label %467

467:                                              ; preds = %466
  %468 = load i32, ptr %16, align 4, !tbaa !10
  %469 = add nsw i32 %468, 1
  store i32 %469, ptr %16, align 4, !tbaa !10
  br label %393, !llvm.loop !38

470:                                              ; preds = %393
  br label %471

471:                                              ; preds = %470
  %472 = load i32, ptr %15, align 4, !tbaa !10
  %473 = add nsw i32 %472, 1
  store i32 %473, ptr %15, align 4, !tbaa !10
  br label %360, !llvm.loop !39

474:                                              ; preds = %360
  br label %475

475:                                              ; preds = %474
  %476 = load i32, ptr %14, align 4, !tbaa !10
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %14, align 4, !tbaa !10
  br label %355, !llvm.loop !40

478:                                              ; preds = %355
  %479 = load ptr, ptr %30, align 8, !tbaa !5
  %480 = load i32, ptr %12, align 4, !tbaa !10
  %481 = load i32, ptr %10, align 4, !tbaa !10
  %482 = mul nsw i32 %480, %481
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i8, ptr %479, i64 %483
  store ptr %484, ptr %30, align 8, !tbaa !5
  %485 = load ptr, ptr %31, align 8, !tbaa !5
  %486 = load i32, ptr %11, align 4, !tbaa !10
  %487 = load i32, ptr %10, align 4, !tbaa !10
  %488 = mul nsw i32 %486, %487
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds i32, ptr %485, i64 %489
  store ptr %490, ptr %31, align 8, !tbaa !5
  br label %491

491:                                              ; preds = %478
  %492 = load i32, ptr %17, align 4, !tbaa !10
  %493 = add nsw i32 %492, 1
  store i32 %493, ptr %17, align 4, !tbaa !10
  br label %350, !llvm.loop !41

494:                                              ; preds = %350
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %654

495:                                              ; preds = %342, %338
  %496 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 16
  %497 = load i32, ptr %496, align 4, !tbaa !36
  %498 = icmp eq i32 %497, 0
  br i1 %498, label %499, label %652

499:                                              ; preds = %495
  %500 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 17
  %501 = load i32, ptr %500, align 8, !tbaa !37
  %502 = icmp eq i32 %501, 1
  br i1 %502, label %503, label %652

503:                                              ; preds = %499
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %504 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %504, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %505 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %505, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %506 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %506, ptr %34, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %507

507:                                              ; preds = %648, %503
  %508 = load i32, ptr %17, align 4, !tbaa !10
  %509 = load i32, ptr %13, align 4, !tbaa !10
  %510 = icmp slt i32 %508, %509
  br i1 %510, label %511, label %651

511:                                              ; preds = %507
  store i32 0, ptr %14, align 4, !tbaa !10
  br label %512

512:                                              ; preds = %632, %511
  %513 = load i32, ptr %14, align 4, !tbaa !10
  %514 = load i32, ptr %11, align 4, !tbaa !10
  %515 = icmp slt i32 %513, %514
  br i1 %515, label %516, label %635

516:                                              ; preds = %512
  store i32 0, ptr %15, align 4, !tbaa !10
  br label %517

517:                                              ; preds = %628, %516
  %518 = load i32, ptr %15, align 4, !tbaa !10
  %519 = load i32, ptr %10, align 4, !tbaa !10
  %520 = icmp slt i32 %518, %519
  br i1 %520, label %521, label %631

521:                                              ; preds = %517
  %522 = getelementptr inbounds %struct.spmm_def, ptr %9, i32 0, i32 10
  %523 = load double, ptr %522, align 8, !tbaa !20
  %524 = fcmp oeq double %523, 0.000000e+00
  br i1 %524, label %525, label %549

525:                                              ; preds = %521
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.spmm_def, ptr %526, i32 0, i32 11
  %528 = load i32, ptr %527, align 8, !tbaa !23
  %529 = icmp sgt i32 %528, 0
  br i1 %529, label %530, label %539

530:                                              ; preds = %525
  %531 = load ptr, ptr %34, align 8, !tbaa !5
  %532 = load i32, ptr %14, align 4, !tbaa !10
  %533 = load i32, ptr %15, align 4, !tbaa !10
  %534 = load i32, ptr %11, align 4, !tbaa !10
  %535 = mul nsw i32 %533, %534
  %536 = add nsw i32 %532, %535
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds i32, ptr %531, i64 %537
  store i32 0, ptr %538, align 4, !tbaa !10
  br label %548

539:                                              ; preds = %525
  %540 = load ptr, ptr %34, align 8, !tbaa !5
  %541 = load i32, ptr %14, align 4, !tbaa !10
  %542 = load i32, ptr %10, align 4, !tbaa !10
  %543 = mul nsw i32 %541, %542
  %544 = load i32, ptr %15, align 4, !tbaa !10
  %545 = add nsw i32 %543, %544
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds i32, ptr %540, i64 %546
  store i32 0, ptr %547, align 4, !tbaa !10
  br label %548

548:                                              ; preds = %539, %530
  br label %549

549:                                              ; preds = %548, %521
  store i32 0, ptr %16, align 4, !tbaa !10
  br label %550

550:                                              ; preds = %624, %549
  %551 = load i32, ptr %16, align 4, !tbaa !10
  %552 = load i32, ptr %12, align 4, !tbaa !10
  %553 = icmp slt i32 %551, %552
  br i1 %553, label %554, label %627

554:                                              ; preds = %550
  %555 = load ptr, ptr %5, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.spmm_def, ptr %555, i32 0, i32 11
  %557 = load i32, ptr %556, align 8, !tbaa !23
  %558 = icmp sgt i32 %557, 0
  br i1 %558, label %559, label %591

559:                                              ; preds = %554
  %560 = load ptr, ptr %33, align 8, !tbaa !5
  %561 = load i32, ptr %16, align 4, !tbaa !10
  %562 = load i32, ptr %15, align 4, !tbaa !10
  %563 = load i32, ptr %12, align 4, !tbaa !10
  %564 = mul nsw i32 %562, %563
  %565 = add nsw i32 %561, %564
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i8, ptr %560, i64 %566
  %568 = load i8, ptr %567, align 1, !tbaa !29
  %569 = sext i8 %568 to i32
  %570 = load ptr, ptr %32, align 8, !tbaa !5
  %571 = load i32, ptr %14, align 4, !tbaa !10
  %572 = load i32, ptr %12, align 4, !tbaa !10
  %573 = mul nsw i32 %571, %572
  %574 = load i32, ptr %16, align 4, !tbaa !10
  %575 = add nsw i32 %573, %574
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds i8, ptr %570, i64 %576
  %578 = load i8, ptr %577, align 1, !tbaa !29
  %579 = zext i8 %578 to i32
  %580 = mul nsw i32 %569, %579
  %581 = load ptr, ptr %34, align 8, !tbaa !5
  %582 = load i32, ptr %14, align 4, !tbaa !10
  %583 = load i32, ptr %15, align 4, !tbaa !10
  %584 = load i32, ptr %11, align 4, !tbaa !10
  %585 = mul nsw i32 %583, %584
  %586 = add nsw i32 %582, %585
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds i32, ptr %581, i64 %587
  %589 = load i32, ptr %588, align 4, !tbaa !10
  %590 = add nsw i32 %589, %580
  store i32 %590, ptr %588, align 4, !tbaa !10
  br label %623

591:                                              ; preds = %554
  %592 = load ptr, ptr %33, align 8, !tbaa !5
  %593 = load i32, ptr %16, align 4, !tbaa !10
  %594 = load i32, ptr %10, align 4, !tbaa !10
  %595 = mul nsw i32 %593, %594
  %596 = load i32, ptr %15, align 4, !tbaa !10
  %597 = add nsw i32 %595, %596
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds i8, ptr %592, i64 %598
  %600 = load i8, ptr %599, align 1, !tbaa !29
  %601 = sext i8 %600 to i32
  %602 = load ptr, ptr %32, align 8, !tbaa !5
  %603 = load i32, ptr %14, align 4, !tbaa !10
  %604 = load i32, ptr %12, align 4, !tbaa !10
  %605 = mul nsw i32 %603, %604
  %606 = load i32, ptr %16, align 4, !tbaa !10
  %607 = add nsw i32 %605, %606
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds i8, ptr %602, i64 %608
  %610 = load i8, ptr %609, align 1, !tbaa !29
  %611 = zext i8 %610 to i32
  %612 = mul nsw i32 %601, %611
  %613 = load ptr, ptr %34, align 8, !tbaa !5
  %614 = load i32, ptr %14, align 4, !tbaa !10
  %615 = load i32, ptr %10, align 4, !tbaa !10
  %616 = mul nsw i32 %614, %615
  %617 = load i32, ptr %15, align 4, !tbaa !10
  %618 = add nsw i32 %616, %617
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds i32, ptr %613, i64 %619
  %621 = load i32, ptr %620, align 4, !tbaa !10
  %622 = add nsw i32 %621, %612
  store i32 %622, ptr %620, align 4, !tbaa !10
  br label %623

623:                                              ; preds = %591, %559
  br label %624

624:                                              ; preds = %623
  %625 = load i32, ptr %16, align 4, !tbaa !10
  %626 = add nsw i32 %625, 1
  store i32 %626, ptr %16, align 4, !tbaa !10
  br label %550, !llvm.loop !42

627:                                              ; preds = %550
  br label %628

628:                                              ; preds = %627
  %629 = load i32, ptr %15, align 4, !tbaa !10
  %630 = add nsw i32 %629, 1
  store i32 %630, ptr %15, align 4, !tbaa !10
  br label %517, !llvm.loop !43

631:                                              ; preds = %517
  br label %632

632:                                              ; preds = %631
  %633 = load i32, ptr %14, align 4, !tbaa !10
  %634 = add nsw i32 %633, 1
  store i32 %634, ptr %14, align 4, !tbaa !10
  br label %512, !llvm.loop !44

635:                                              ; preds = %512
  %636 = load ptr, ptr %33, align 8, !tbaa !5
  %637 = load i32, ptr %12, align 4, !tbaa !10
  %638 = load i32, ptr %10, align 4, !tbaa !10
  %639 = mul nsw i32 %637, %638
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds i8, ptr %636, i64 %640
  store ptr %641, ptr %33, align 8, !tbaa !5
  %642 = load ptr, ptr %34, align 8, !tbaa !5
  %643 = load i32, ptr %11, align 4, !tbaa !10
  %644 = load i32, ptr %10, align 4, !tbaa !10
  %645 = mul nsw i32 %643, %644
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds i32, ptr %642, i64 %646
  store ptr %647, ptr %34, align 8, !tbaa !5
  br label %648

648:                                              ; preds = %635
  %649 = load i32, ptr %17, align 4, !tbaa !10
  %650 = add nsw i32 %649, 1
  store i32 %650, ptr %17, align 4, !tbaa !10
  br label %507, !llvm.loop !45

651:                                              ; preds = %507
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %653

652:                                              ; preds = %499, %495
  br label %653

653:                                              ; preds = %652, %651
  br label %654

654:                                              ; preds = %653, %494
  br label %656

655:                                              ; preds = %334
  br label %656

656:                                              ; preds = %655, %654
  br label %657

657:                                              ; preds = %656, %333
  br label %658

658:                                              ; preds = %657, %174
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 88, ptr %9) #5
  ret void
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #3

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

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

!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 = !{i64 0, i64 4, !10, i64 4, i64 4, !10, i64 8, i64 4, !10, i64 12, i64 4, !10, i64 16, i64 4, !10, i64 20, i64 4, !10, i64 24, i64 4, !10, i64 28, i64 4, !10, i64 32, i64 4, !10, i64 36, i64 4, !10, i64 40, i64 8, !12, i64 48, i64 4, !10, i64 52, i64 4, !10, i64 56, i64 4, !10, i64 60, i64 4, !10, i64 64, i64 4, !10, i64 68, i64 4, !10, i64 72, i64 4, !10, i64 76, i64 4, !10, i64 80, i64 4, !10, i64 84, i64 4, !10}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!15, !11, i64 16}
!15 = !{!"spmm_def", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !13, i64 40, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84}
!16 = !{!15, !11, i64 20}
!17 = !{!15, !11, i64 24}
!18 = !{!15, !11, i64 36}
!19 = !{!15, !11, i64 4}
!20 = !{!15, !13, i64 40}
!21 = !{!22, !22, i64 0}
!22 = !{!"float", !7, i64 0}
!23 = !{!15, !11, i64 48}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = !{!7, !7, i64 0}
!30 = !{!31, !31, i64 0}
!31 = !{!"short", !7, i64 0}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = !{!15, !11, i64 68}
!37 = !{!15, !11, i64 72}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !25}


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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @dense_gemm_ref(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef %3) local_unnamed_addr #1 {
  %5 = alloca float, align 4
  %6 = alloca i16, align 2
  %.sroa.3.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 4
  %.sroa.3.0.copyload = load i32, ptr %.sroa.3.0..sroa_idx, align 4, !tbaa !5
  %.sroa.6211.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 16
  %.sroa.6211.0.copyload = load i32, ptr %.sroa.6211.0..sroa_idx, align 8, !tbaa !5
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 20
  %.sroa.7.0.copyload = load i32, ptr %.sroa.7.0..sroa_idx, align 4, !tbaa !5
  %.sroa.8.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 24
  %.sroa.8.0.copyload = load i32, ptr %.sroa.8.0..sroa_idx, align 8, !tbaa !5
  %.sroa.9212.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 36
  %.sroa.9212.0.copyload = load i32, ptr %.sroa.9212.0..sroa_idx, align 4, !tbaa !5
  %.sroa.10.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 40
  %.sroa.10.0.copyload = load double, ptr %.sroa.10.0..sroa_idx, align 8, !tbaa !9
  %.sroa.14.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 48
  %.sroa.14216.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 68
  %.sroa.14216.0.copyload = load i32, ptr %.sroa.14216.0..sroa_idx, align 4, !tbaa !5
  %.sroa.16.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 72
  %.sroa.16.0.copyload = load i32, ptr %.sroa.16.0..sroa_idx, align 8, !tbaa !5
  switch i32 %.sroa.3.0.copyload, label %.loopexit [
    i32 1, label %.preheader262
    i32 2, label %.preheader265
    i32 12, label %234
  ]

.preheader265:                                    ; preds = %4
  %7 = icmp sgt i32 %.sroa.9212.0.copyload, 0
  br i1 %7, label %.preheader264.lr.ph, label %.loopexit

.preheader264.lr.ph:                              ; preds = %.preheader265
  %8 = icmp sgt i32 %.sroa.7.0.copyload, 0
  %9 = fcmp oeq double %.sroa.10.0.copyload, 0.000000e+00
  %10 = mul nsw i32 %.sroa.8.0.copyload, %.sroa.6211.0.copyload
  %11 = sext i32 %10 to i64
  %12 = mul nsw i32 %.sroa.7.0.copyload, %.sroa.6211.0.copyload
  %13 = sext i32 %12 to i64
  %14 = icmp sgt i32 %.sroa.6211.0.copyload, 0
  %or.cond822 = select i1 %8, i1 %14, i1 false
  br i1 %or.cond822, label %.preheader264.lr.ph.split.us.split.us, label %.loopexit

.preheader264.lr.ph.split.us.split.us:            ; preds = %.preheader264.lr.ph
  %15 = icmp sgt i32 %.sroa.8.0.copyload, 0
  br i1 %15, label %.preheader264.us.us.us.preheader, label %.preheader264.lr.ph.split.us.split.us.split

.preheader264.us.us.us.preheader:                 ; preds = %.preheader264.lr.ph.split.us.split.us
  %16 = zext nneg i32 %.sroa.6211.0.copyload to i64
  %17 = zext nneg i32 %.sroa.7.0.copyload to i64
  %18 = zext nneg i32 %.sroa.8.0.copyload to i64
  %.pre765.pre.pre.pre = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %19 = add nsw i64 %18, -1
  %xtraiter919 = and i64 %18, 1
  %20 = icmp eq i64 %19, 0
  %unroll_iter922 = and i64 %18, 2147483646
  %lcmp.mod920.not = icmp eq i64 %xtraiter919, 0
  %xtraiter924 = and i64 %18, 1
  %21 = icmp eq i64 %19, 0
  %unroll_iter928 = and i64 %18, 2147483646
  %lcmp.mod926.not = icmp eq i64 %xtraiter924, 0
  br label %.preheader264.us.us.us

.preheader264.us.us.us:                           ; preds = %.preheader264.us.us.us.preheader, %._crit_edge.split.us.split.us.us.us.us
  %.pre765.pre.pre = phi i32 [ %52, %._crit_edge.split.us.split.us.us.us.us ], [ %.pre765.pre.pre.pre, %.preheader264.us.us.us.preheader ]
  %.0248426.us.us.us = phi ptr [ %69, %._crit_edge.split.us.split.us.us.us.us ], [ %3, %.preheader264.us.us.us.preheader ]
  %.0249423.us.us.us = phi ptr [ %68, %._crit_edge.split.us.split.us.us.us.us ], [ %1, %.preheader264.us.us.us.preheader ]
  %.1257422.us.us.us = phi i32 [ %70, %._crit_edge.split.us.split.us.us.us.us ], [ 0, %.preheader264.us.us.us.preheader ]
  br label %.preheader263.us.us.us.us.us

.preheader263.us.us.us.us.us:                     ; preds = %._crit_edge375.split.us.us.us.us.us.us, %.preheader264.us.us.us
  %.pre765.pre = phi i32 [ %52, %._crit_edge375.split.us.us.us.us.us.us ], [ %.pre765.pre.pre, %.preheader264.us.us.us ]
  %indvars.iv675 = phi i64 [ %indvars.iv.next676, %._crit_edge375.split.us.us.us.us.us.us ], [ 0, %.preheader264.us.us.us ]
  %22 = mul nuw nsw i64 %indvars.iv675, %16
  %23 = mul nuw nsw i64 %indvars.iv675, %18
  %invariant.gep810 = getelementptr inbounds i16, ptr %2, i64 %23
  %invariant.gep812 = getelementptr inbounds i16, ptr %2, i64 %23
  br label %24

24:                                               ; preds = %._crit_edge.us.us.us.us.us.us449, %.preheader263.us.us.us.us.us
  %.pre765 = phi i32 [ %52, %._crit_edge.us.us.us.us.us.us449 ], [ %.pre765.pre, %.preheader263.us.us.us.us.us ]
  %indvars.iv670 = phi i64 [ %indvars.iv.next671, %._crit_edge.us.us.us.us.us.us449 ], [ 0, %.preheader263.us.us.us.us.us ]
  %.fr = freeze i32 %.pre765
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %6) #5
  br i1 %9, label %.lr.ph.us.us.us.us.us.us448, label %25

25:                                               ; preds = %24
  %26 = icmp sgt i32 %.fr, 0
  %27 = mul nuw nsw i64 %indvars.iv670, %17
  %28 = add nuw nsw i64 %27, %indvars.iv675
  %29 = add nuw i64 %indvars.iv670, %22
  %.pn.in.us.us.us.us.us.us = select i1 %26, i64 %28, i64 %29
  %.pn.us.us.us.us.us.us = and i64 %.pn.in.us.us.us.us.us.us, 4294967295
  %.sroa.031.3.in.in.in.in.us.us.us.us.us.us = getelementptr inbounds i16, ptr %.0248426.us.us.us, i64 %.pn.us.us.us.us.us.us
  %.sroa.031.3.in.in.in.us.us.us.us.us.us = load i16, ptr %.sroa.031.3.in.in.in.in.us.us.us.us.us.us, align 2, !tbaa !13
  %.sroa.031.3.in.in.us.us.us.us.us.us = zext i16 %.sroa.031.3.in.in.in.us.us.us.us.us.us to i32
  %.sroa.031.3.in.us.us.us.us.us.us = shl nuw i32 %.sroa.031.3.in.in.us.us.us.us.us.us, 16
  br label %.lr.ph.us.us.us.us.us.us448

.lr.ph.us.us.us.us.us.us448:                      ; preds = %24, %25
  %storemerge.us.us.us.us.us.us = phi i32 [ %.sroa.031.3.in.us.us.us.us.us.us, %25 ], [ 0, %24 ]
  %.promoted.us.us.us.us.us.us.cast = bitcast i32 %storemerge.us.us.us.us.us.us to float
  %30 = icmp sgt i32 %.fr, 0
  %31 = mul nuw nsw i64 %indvars.iv670, %18
  br i1 %30, label %.lr.ph.split.us.us.us.us.us.us.us.preheader, label %.lr.ph.split.us392.us.us.us.us.us.preheader

.lr.ph.split.us392.us.us.us.us.us.preheader:      ; preds = %.lr.ph.us.us.us.us.us.us448
  br i1 %20, label %._crit_edge.us.us.us.us.us.us449.loopexit901.unr-lcssa, label %.lr.ph.split.us392.us.us.us.us.us

.lr.ph.split.us.us.us.us.us.us.us.preheader:      ; preds = %.lr.ph.us.us.us.us.us.us448
  br i1 %21, label %._crit_edge.us.us.us.us.us.us449.loopexit.unr-lcssa, label %.lr.ph.split.us.us.us.us.us.us.us

.lr.ph.split.us392.us.us.us.us.us:                ; preds = %.lr.ph.split.us392.us.us.us.us.us.preheader, %.lr.ph.split.us392.us.us.us.us.us
  %indvars.iv660 = phi i64 [ %indvars.iv.next661.1, %.lr.ph.split.us392.us.us.us.us.us ], [ 0, %.lr.ph.split.us392.us.us.us.us.us.preheader ]
  %32 = phi float [ %42, %.lr.ph.split.us392.us.us.us.us.us ], [ %.promoted.us.us.us.us.us.us.cast, %.lr.ph.split.us392.us.us.us.us.us.preheader ]
  %niter923 = phi i64 [ %niter923.next.1, %.lr.ph.split.us392.us.us.us.us.us ], [ 0, %.lr.ph.split.us392.us.us.us.us.us.preheader ]
  %33 = mul nuw nsw i64 %indvars.iv660, %16
  %34 = add nuw nsw i64 %33, %indvars.iv670
  %.sroa.025.4.in.in.in.in.us381.us.us.us.us.us = getelementptr inbounds i16, ptr %.0249423.us.us.us, i64 %34
  %.sroa.025.4.in.in.in.us382.us.us.us.us.us = load i16, ptr %.sroa.025.4.in.in.in.in.us381.us.us.us.us.us, align 2, !tbaa !13
  %.sroa.025.4.in.in.us383.us.us.us.us.us = zext i16 %.sroa.025.4.in.in.in.us382.us.us.us.us.us to i32
  %.sroa.025.4.in.us384.us.us.us.us.us = shl nuw i32 %.sroa.025.4.in.in.us383.us.us.us.us.us, 16
  %.sroa.025.4.us385.us.us.us.us.us = bitcast i32 %.sroa.025.4.in.us384.us.us.us.us.us to float
  %gep811 = getelementptr inbounds i16, ptr %invariant.gep810, i64 %indvars.iv660
  %35 = load i16, ptr %gep811, align 2, !tbaa !13
  %.sroa.0.2.insert.ext.us386.us.us.us.us.us = zext i16 %35 to i32
  %.sroa.0.2.insert.shift.us387.us.us.us.us.us = shl nuw i32 %.sroa.0.2.insert.ext.us386.us.us.us.us.us, 16
  %36 = bitcast i32 %.sroa.0.2.insert.shift.us387.us.us.us.us.us to float
  %37 = call float @llvm.fmuladd.f32(float %.sroa.025.4.us385.us.us.us.us.us, float %36, float %32)
  %indvars.iv.next661 = or disjoint i64 %indvars.iv660, 1
  %38 = mul nuw nsw i64 %indvars.iv.next661, %16
  %39 = add nuw nsw i64 %38, %indvars.iv670
  %.sroa.025.4.in.in.in.in.us381.us.us.us.us.us.1 = getelementptr inbounds i16, ptr %.0249423.us.us.us, i64 %39
  %.sroa.025.4.in.in.in.us382.us.us.us.us.us.1 = load i16, ptr %.sroa.025.4.in.in.in.in.us381.us.us.us.us.us.1, align 2, !tbaa !13
  %.sroa.025.4.in.in.us383.us.us.us.us.us.1 = zext i16 %.sroa.025.4.in.in.in.us382.us.us.us.us.us.1 to i32
  %.sroa.025.4.in.us384.us.us.us.us.us.1 = shl nuw i32 %.sroa.025.4.in.in.us383.us.us.us.us.us.1, 16
  %.sroa.025.4.us385.us.us.us.us.us.1 = bitcast i32 %.sroa.025.4.in.us384.us.us.us.us.us.1 to float
  %gep811.1 = getelementptr inbounds i16, ptr %invariant.gep810, i64 %indvars.iv.next661
  %40 = load i16, ptr %gep811.1, align 2, !tbaa !13
  %.sroa.0.2.insert.ext.us386.us.us.us.us.us.1 = zext i16 %40 to i32
  %.sroa.0.2.insert.shift.us387.us.us.us.us.us.1 = shl nuw i32 %.sroa.0.2.insert.ext.us386.us.us.us.us.us.1, 16
  %41 = bitcast i32 %.sroa.0.2.insert.shift.us387.us.us.us.us.us.1 to float
  %42 = call float @llvm.fmuladd.f32(float %.sroa.025.4.us385.us.us.us.us.us.1, float %41, float %37)
  %indvars.iv.next661.1 = add nuw nsw i64 %indvars.iv660, 2
  %niter923.next.1 = add i64 %niter923, 2
  %niter923.ncmp.1 = icmp eq i64 %niter923.next.1, %unroll_iter922
  br i1 %niter923.ncmp.1, label %._crit_edge.us.us.us.us.us.us449.loopexit901.unr-lcssa, label %.lr.ph.split.us392.us.us.us.us.us, !llvm.loop !15

._crit_edge.us.us.us.us.us.us449.loopexit.unr-lcssa: ; preds = %.lr.ph.split.us.us.us.us.us.us.us, %.lr.ph.split.us.us.us.us.us.us.us.preheader
  %.lcssa903.ph = phi float [ poison, %.lr.ph.split.us.us.us.us.us.us.us.preheader ], [ %67, %.lr.ph.split.us.us.us.us.us.us.us ]
  %indvars.iv665.unr = phi i64 [ 0, %.lr.ph.split.us.us.us.us.us.us.us.preheader ], [ %indvars.iv.next666.1, %.lr.ph.split.us.us.us.us.us.us.us ]
  %.unr925 = phi float [ %.promoted.us.us.us.us.us.us.cast, %.lr.ph.split.us.us.us.us.us.us.us.preheader ], [ %67, %.lr.ph.split.us.us.us.us.us.us.us ]
  br i1 %lcmp.mod926.not, label %._crit_edge.us.us.us.us.us.us449, label %.lr.ph.split.us.us.us.us.us.us.us.epil

.lr.ph.split.us.us.us.us.us.us.us.epil:           ; preds = %._crit_edge.us.us.us.us.us.us449.loopexit.unr-lcssa
  %43 = add nuw nsw i64 %indvars.iv665.unr, %31
  %.sroa.025.4.in.in.in.in.us.us.us.us.us.us.us.epil = getelementptr inbounds i16, ptr %.0249423.us.us.us, i64 %43
  %.sroa.025.4.in.in.in.us.us.us.us.us.us.us.epil = load i16, ptr %.sroa.025.4.in.in.in.in.us.us.us.us.us.us.us.epil, align 2, !tbaa !13
  %.sroa.025.4.in.in.us.us.us.us.us.us.us.epil = zext i16 %.sroa.025.4.in.in.in.us.us.us.us.us.us.us.epil to i32
  %.sroa.025.4.in.us.us.us.us.us.us.us.epil = shl nuw i32 %.sroa.025.4.in.in.us.us.us.us.us.us.us.epil, 16
  %.sroa.025.4.us.us.us.us.us.us.us.epil = bitcast i32 %.sroa.025.4.in.us.us.us.us.us.us.us.epil to float
  %gep813.epil = getelementptr inbounds i16, ptr %invariant.gep812, i64 %indvars.iv665.unr
  %44 = load i16, ptr %gep813.epil, align 2, !tbaa !13
  %.sroa.0.2.insert.ext.us.us.us.us.us.us.us.epil = zext i16 %44 to i32
  %.sroa.0.2.insert.shift.us.us.us.us.us.us.us.epil = shl nuw i32 %.sroa.0.2.insert.ext.us.us.us.us.us.us.us.epil, 16
  %45 = bitcast i32 %.sroa.0.2.insert.shift.us.us.us.us.us.us.us.epil to float
  %46 = call float @llvm.fmuladd.f32(float %.sroa.025.4.us.us.us.us.us.us.us.epil, float %45, float %.unr925)
  br label %._crit_edge.us.us.us.us.us.us449

._crit_edge.us.us.us.us.us.us449.loopexit901.unr-lcssa: ; preds = %.lr.ph.split.us392.us.us.us.us.us, %.lr.ph.split.us392.us.us.us.us.us.preheader
  %.lcssa.ph = phi float [ poison, %.lr.ph.split.us392.us.us.us.us.us.preheader ], [ %42, %.lr.ph.split.us392.us.us.us.us.us ]
  %indvars.iv660.unr = phi i64 [ 0, %.lr.ph.split.us392.us.us.us.us.us.preheader ], [ %indvars.iv.next661.1, %.lr.ph.split.us392.us.us.us.us.us ]
  %.unr = phi float [ %.promoted.us.us.us.us.us.us.cast, %.lr.ph.split.us392.us.us.us.us.us.preheader ], [ %42, %.lr.ph.split.us392.us.us.us.us.us ]
  br i1 %lcmp.mod920.not, label %._crit_edge.us.us.us.us.us.us449, label %.lr.ph.split.us392.us.us.us.us.us.epil

.lr.ph.split.us392.us.us.us.us.us.epil:           ; preds = %._crit_edge.us.us.us.us.us.us449.loopexit901.unr-lcssa
  %47 = mul nuw nsw i64 %indvars.iv660.unr, %16
  %48 = add nuw nsw i64 %47, %indvars.iv670
  %.sroa.025.4.in.in.in.in.us381.us.us.us.us.us.epil = getelementptr inbounds i16, ptr %.0249423.us.us.us, i64 %48
  %.sroa.025.4.in.in.in.us382.us.us.us.us.us.epil = load i16, ptr %.sroa.025.4.in.in.in.in.us381.us.us.us.us.us.epil, align 2, !tbaa !13
  %.sroa.025.4.in.in.us383.us.us.us.us.us.epil = zext i16 %.sroa.025.4.in.in.in.us382.us.us.us.us.us.epil to i32
  %.sroa.025.4.in.us384.us.us.us.us.us.epil = shl nuw i32 %.sroa.025.4.in.in.us383.us.us.us.us.us.epil, 16
  %.sroa.025.4.us385.us.us.us.us.us.epil = bitcast i32 %.sroa.025.4.in.us384.us.us.us.us.us.epil to float
  %gep811.epil = getelementptr inbounds i16, ptr %invariant.gep810, i64 %indvars.iv660.unr
  %49 = load i16, ptr %gep811.epil, align 2, !tbaa !13
  %.sroa.0.2.insert.ext.us386.us.us.us.us.us.epil = zext i16 %49 to i32
  %.sroa.0.2.insert.shift.us387.us.us.us.us.us.epil = shl nuw i32 %.sroa.0.2.insert.ext.us386.us.us.us.us.us.epil, 16
  %50 = bitcast i32 %.sroa.0.2.insert.shift.us387.us.us.us.us.us.epil to float
  %51 = call float @llvm.fmuladd.f32(float %.sroa.025.4.us385.us.us.us.us.us.epil, float %50, float %.unr)
  br label %._crit_edge.us.us.us.us.us.us449

._crit_edge.us.us.us.us.us.us449:                 ; preds = %.lr.ph.split.us392.us.us.us.us.us.epil, %._crit_edge.us.us.us.us.us.us449.loopexit901.unr-lcssa, %.lr.ph.split.us.us.us.us.us.us.us.epil, %._crit_edge.us.us.us.us.us.us449.loopexit.unr-lcssa
  %.us-phi.us.us.us.us.us.us = phi float [ %.lcssa903.ph, %._crit_edge.us.us.us.us.us.us449.loopexit.unr-lcssa ], [ %46, %.lr.ph.split.us.us.us.us.us.us.us.epil ], [ %.lcssa.ph, %._crit_edge.us.us.us.us.us.us449.loopexit901.unr-lcssa ], [ %51, %.lr.ph.split.us392.us.us.us.us.us.epil ]
  store float %.us-phi.us.us.us.us.us.us, ptr %5, align 4, !tbaa !17
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %5, ptr noundef nonnull %6, i64 noundef 1) #5
  %52 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %53 = icmp sgt i32 %52, 0
  %54 = load i16, ptr %6, align 2, !tbaa !13
  %55 = mul nuw nsw i64 %indvars.iv670, %17
  %56 = add nuw nsw i64 %55, %indvars.iv675
  %57 = add nuw nsw i64 %indvars.iv670, %22
  %.sink824 = select i1 %53, i64 %56, i64 %57
  %58 = getelementptr inbounds i16, ptr %.0248426.us.us.us, i64 %.sink824
  store i16 %54, ptr %58, align 2, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  %indvars.iv.next671 = add nuw nsw i64 %indvars.iv670, 1
  %exitcond674.not = icmp eq i64 %indvars.iv.next671, %16
  br i1 %exitcond674.not, label %._crit_edge375.split.us.us.us.us.us.us, label %24, !llvm.loop !19

.lr.ph.split.us.us.us.us.us.us.us:                ; preds = %.lr.ph.split.us.us.us.us.us.us.us.preheader, %.lr.ph.split.us.us.us.us.us.us.us
  %indvars.iv665 = phi i64 [ %indvars.iv.next666.1, %.lr.ph.split.us.us.us.us.us.us.us ], [ 0, %.lr.ph.split.us.us.us.us.us.us.us.preheader ]
  %59 = phi float [ %67, %.lr.ph.split.us.us.us.us.us.us.us ], [ %.promoted.us.us.us.us.us.us.cast, %.lr.ph.split.us.us.us.us.us.us.us.preheader ]
  %niter929 = phi i64 [ %niter929.next.1, %.lr.ph.split.us.us.us.us.us.us.us ], [ 0, %.lr.ph.split.us.us.us.us.us.us.us.preheader ]
  %60 = add nuw nsw i64 %indvars.iv665, %31
  %.sroa.025.4.in.in.in.in.us.us.us.us.us.us.us = getelementptr inbounds i16, ptr %.0249423.us.us.us, i64 %60
  %.sroa.025.4.in.in.in.us.us.us.us.us.us.us = load i16, ptr %.sroa.025.4.in.in.in.in.us.us.us.us.us.us.us, align 2, !tbaa !13
  %.sroa.025.4.in.in.us.us.us.us.us.us.us = zext i16 %.sroa.025.4.in.in.in.us.us.us.us.us.us.us to i32
  %.sroa.025.4.in.us.us.us.us.us.us.us = shl nuw i32 %.sroa.025.4.in.in.us.us.us.us.us.us.us, 16
  %.sroa.025.4.us.us.us.us.us.us.us = bitcast i32 %.sroa.025.4.in.us.us.us.us.us.us.us to float
  %gep813 = getelementptr inbounds i16, ptr %invariant.gep812, i64 %indvars.iv665
  %61 = load i16, ptr %gep813, align 2, !tbaa !13
  %.sroa.0.2.insert.ext.us.us.us.us.us.us.us = zext i16 %61 to i32
  %.sroa.0.2.insert.shift.us.us.us.us.us.us.us = shl nuw i32 %.sroa.0.2.insert.ext.us.us.us.us.us.us.us, 16
  %62 = bitcast i32 %.sroa.0.2.insert.shift.us.us.us.us.us.us.us to float
  %63 = call float @llvm.fmuladd.f32(float %.sroa.025.4.us.us.us.us.us.us.us, float %62, float %59)
  %indvars.iv.next666 = or disjoint i64 %indvars.iv665, 1
  %64 = add nuw nsw i64 %indvars.iv.next666, %31
  %.sroa.025.4.in.in.in.in.us.us.us.us.us.us.us.1 = getelementptr inbounds i16, ptr %.0249423.us.us.us, i64 %64
  %.sroa.025.4.in.in.in.us.us.us.us.us.us.us.1 = load i16, ptr %.sroa.025.4.in.in.in.in.us.us.us.us.us.us.us.1, align 2, !tbaa !13
  %.sroa.025.4.in.in.us.us.us.us.us.us.us.1 = zext i16 %.sroa.025.4.in.in.in.us.us.us.us.us.us.us.1 to i32
  %.sroa.025.4.in.us.us.us.us.us.us.us.1 = shl nuw i32 %.sroa.025.4.in.in.us.us.us.us.us.us.us.1, 16
  %.sroa.025.4.us.us.us.us.us.us.us.1 = bitcast i32 %.sroa.025.4.in.us.us.us.us.us.us.us.1 to float
  %gep813.1 = getelementptr inbounds i16, ptr %invariant.gep812, i64 %indvars.iv.next666
  %65 = load i16, ptr %gep813.1, align 2, !tbaa !13
  %.sroa.0.2.insert.ext.us.us.us.us.us.us.us.1 = zext i16 %65 to i32
  %.sroa.0.2.insert.shift.us.us.us.us.us.us.us.1 = shl nuw i32 %.sroa.0.2.insert.ext.us.us.us.us.us.us.us.1, 16
  %66 = bitcast i32 %.sroa.0.2.insert.shift.us.us.us.us.us.us.us.1 to float
  %67 = call float @llvm.fmuladd.f32(float %.sroa.025.4.us.us.us.us.us.us.us.1, float %66, float %63)
  %indvars.iv.next666.1 = add nuw nsw i64 %indvars.iv665, 2
  %niter929.next.1 = add i64 %niter929, 2
  %niter929.ncmp.1 = icmp eq i64 %niter929.next.1, %unroll_iter928
  br i1 %niter929.ncmp.1, label %._crit_edge.us.us.us.us.us.us449.loopexit.unr-lcssa, label %.lr.ph.split.us.us.us.us.us.us.us, !llvm.loop !15

._crit_edge375.split.us.us.us.us.us.us:           ; preds = %._crit_edge.us.us.us.us.us.us449
  %indvars.iv.next676 = add nuw nsw i64 %indvars.iv675, 1
  %exitcond679.not = icmp eq i64 %indvars.iv.next676, %17
  br i1 %exitcond679.not, label %._crit_edge.split.us.split.us.us.us.us, label %.preheader263.us.us.us.us.us, !llvm.loop !20

._crit_edge.split.us.split.us.us.us.us:           ; preds = %._crit_edge375.split.us.us.us.us.us.us
  %68 = getelementptr inbounds i16, ptr %.0249423.us.us.us, i64 %11
  %69 = getelementptr inbounds i16, ptr %.0248426.us.us.us, i64 %13
  %70 = add nuw nsw i32 %.1257422.us.us.us, 1
  %exitcond680.not = icmp eq i32 %70, %.sroa.9212.0.copyload
  br i1 %exitcond680.not, label %.loopexit, label %.preheader264.us.us.us, !llvm.loop !21

.preheader264.lr.ph.split.us.split.us.split:      ; preds = %.preheader264.lr.ph.split.us.split.us
  %71 = zext nneg i32 %.sroa.7.0.copyload to i64
  %72 = zext nneg i32 %.sroa.6211.0.copyload to i64
  br i1 %9, label %.preheader264.us.us.us450, label %.preheader264.us.us.preheader

.preheader264.us.us.preheader:                    ; preds = %.preheader264.lr.ph.split.us.split.us.split
  %.pre764.pre.pre = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  br label %.preheader264.us.us

.preheader264.us.us.us450:                        ; preds = %.preheader264.lr.ph.split.us.split.us.split, %._crit_edge.split.us.split.us439.split.us.us.us
  %.0248426.us.us.us452 = phi ptr [ %82, %._crit_edge.split.us.split.us439.split.us.us.us ], [ %3, %.preheader264.lr.ph.split.us.split.us.split ]
  %.1257422.us.us.us454 = phi i32 [ %83, %._crit_edge.split.us.split.us439.split.us.us.us ], [ 0, %.preheader264.lr.ph.split.us.split.us.split ]
  br label %.preheader263.us.us436.us.us.us

.preheader263.us.us436.us.us.us:                  ; preds = %._crit_edge375.split.us414.us.split.us.us.us.us, %.preheader264.us.us.us450
  %indvars.iv654 = phi i64 [ %indvars.iv.next655, %._crit_edge375.split.us414.us.split.us.us.us.us ], [ 0, %.preheader264.us.us.us450 ]
  %73 = mul nuw nsw i64 %indvars.iv654, %72
  br label %74

74:                                               ; preds = %74, %.preheader263.us.us436.us.us.us
  %indvars.iv649 = phi i64 [ %indvars.iv.next650, %74 ], [ 0, %.preheader263.us.us436.us.us.us ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %6) #5
  store i32 0, ptr %5, align 4, !tbaa !17
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %5, ptr noundef nonnull %6, i64 noundef 1) #5
  %75 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %76 = icmp sgt i32 %75, 0
  %77 = load i16, ptr %6, align 2, !tbaa !13
  %78 = mul nuw nsw i64 %indvars.iv649, %71
  %79 = add nuw nsw i64 %78, %indvars.iv654
  %80 = add nuw nsw i64 %indvars.iv649, %73
  %.sink826 = select i1 %76, i64 %79, i64 %80
  %81 = getelementptr inbounds i16, ptr %.0248426.us.us.us452, i64 %.sink826
  store i16 %77, ptr %81, align 2, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  %indvars.iv.next650 = add nuw nsw i64 %indvars.iv649, 1
  %exitcond653.not = icmp eq i64 %indvars.iv.next650, %72
  br i1 %exitcond653.not, label %._crit_edge375.split.us414.us.split.us.us.us.us, label %74, !llvm.loop !19

._crit_edge375.split.us414.us.split.us.us.us.us:  ; preds = %74
  %indvars.iv.next655 = add nuw nsw i64 %indvars.iv654, 1
  %exitcond658.not = icmp eq i64 %indvars.iv.next655, %71
  br i1 %exitcond658.not, label %._crit_edge.split.us.split.us439.split.us.us.us, label %.preheader263.us.us436.us.us.us, !llvm.loop !20

._crit_edge.split.us.split.us439.split.us.us.us:  ; preds = %._crit_edge375.split.us414.us.split.us.us.us.us
  %82 = getelementptr inbounds i16, ptr %.0248426.us.us.us452, i64 %13
  %83 = add nuw nsw i32 %.1257422.us.us.us454, 1
  %exitcond659.not = icmp eq i32 %83, %.sroa.9212.0.copyload
  br i1 %exitcond659.not, label %.loopexit, label %.preheader264.us.us.us450, !llvm.loop !21

.preheader264.us.us:                              ; preds = %.preheader264.us.us.preheader, %._crit_edge.split.us.split.us439.split.us446
  %.pre764.pre = phi i32 [ %91, %._crit_edge.split.us.split.us439.split.us446 ], [ %.pre764.pre.pre, %.preheader264.us.us.preheader ]
  %.0248426.us.us = phi ptr [ %96, %._crit_edge.split.us.split.us439.split.us446 ], [ %3, %.preheader264.us.us.preheader ]
  %.1257422.us.us = phi i32 [ %97, %._crit_edge.split.us.split.us439.split.us446 ], [ 0, %.preheader264.us.us.preheader ]
  br label %.preheader263.us.us436.us444

.preheader263.us.us436.us444:                     ; preds = %.preheader264.us.us, %._crit_edge375.split.us414.us.split.us
  %.pre764 = phi i32 [ %.pre764.pre, %.preheader264.us.us ], [ %91, %._crit_edge375.split.us414.us.split.us ]
  %indvars.iv643 = phi i64 [ 0, %.preheader264.us.us ], [ %indvars.iv.next644, %._crit_edge375.split.us414.us.split.us ]
  %84 = mul nuw nsw i64 %indvars.iv643, %72
  br label %85

85:                                               ; preds = %85, %.preheader263.us.us436.us444
  %86 = phi i32 [ %91, %85 ], [ %.pre764, %.preheader263.us.us436.us444 ]
  %indvars.iv638 = phi i64 [ %indvars.iv.next639, %85 ], [ 0, %.preheader263.us.us436.us444 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %6) #5
  %87 = icmp sgt i32 %86, 0
  %88 = mul nuw nsw i64 %indvars.iv638, %71
  %89 = add nuw nsw i64 %88, %indvars.iv643
  %90 = add nuw i64 %indvars.iv638, %84
  %.pn.in.us405.us.us = select i1 %87, i64 %89, i64 %90
  %.pn.us406.us.us = and i64 %.pn.in.us405.us.us, 4294967295
  %.sroa.031.3.in.in.in.in.us407.us.us = getelementptr inbounds i16, ptr %.0248426.us.us, i64 %.pn.us406.us.us
  %.sroa.031.3.in.in.in.us408.us.us = load i16, ptr %.sroa.031.3.in.in.in.in.us407.us.us, align 2, !tbaa !13
  %.sroa.031.3.in.in.us409.us.us = zext i16 %.sroa.031.3.in.in.in.us408.us.us to i32
  %.sroa.031.3.in.us410.us.us = shl nuw i32 %.sroa.031.3.in.in.us409.us.us, 16
  store i32 %.sroa.031.3.in.us410.us.us, ptr %5, align 4, !tbaa !17
  call void @libxsmm_rne_convert_fp32_bf16(ptr noundef nonnull %5, ptr noundef nonnull %6, i64 noundef 1) #5
  %91 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %92 = icmp sgt i32 %91, 0
  %93 = load i16, ptr %6, align 2, !tbaa !13
  %94 = add nuw nsw i64 %indvars.iv638, %84
  %.sink828 = select i1 %92, i64 %89, i64 %94
  %95 = getelementptr inbounds i16, ptr %.0248426.us.us, i64 %.sink828
  store i16 %93, ptr %95, align 2, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  %indvars.iv.next639 = add nuw nsw i64 %indvars.iv638, 1
  %exitcond642.not = icmp eq i64 %indvars.iv.next639, %72
  br i1 %exitcond642.not, label %._crit_edge375.split.us414.us.split.us, label %85, !llvm.loop !19

._crit_edge375.split.us414.us.split.us:           ; preds = %85
  %indvars.iv.next644 = add nuw nsw i64 %indvars.iv643, 1
  %exitcond647.not = icmp eq i64 %indvars.iv.next644, %71
  br i1 %exitcond647.not, label %._crit_edge.split.us.split.us439.split.us446, label %.preheader263.us.us436.us444, !llvm.loop !20

._crit_edge.split.us.split.us439.split.us446:     ; preds = %._crit_edge375.split.us414.us.split.us
  %96 = getelementptr inbounds i16, ptr %.0248426.us.us, i64 %13
  %97 = add nuw nsw i32 %.1257422.us.us, 1
  %exitcond648.not = icmp eq i32 %97, %.sroa.9212.0.copyload
  br i1 %exitcond648.not, label %.loopexit, label %.preheader264.us.us, !llvm.loop !21

.preheader262:                                    ; preds = %4
  %98 = icmp sgt i32 %.sroa.9212.0.copyload, 0
  br i1 %98, label %.preheader261.lr.ph, label %.loopexit

.preheader261.lr.ph:                              ; preds = %.preheader262
  %99 = icmp sgt i32 %.sroa.7.0.copyload, 0
  %100 = fcmp oeq double %.sroa.10.0.copyload, 0.000000e+00
  %101 = mul nsw i32 %.sroa.8.0.copyload, %.sroa.6211.0.copyload
  %102 = sext i32 %101 to i64
  %103 = mul i32 %.sroa.7.0.copyload, %.sroa.6211.0.copyload
  %104 = sext i32 %103 to i64
  %105 = icmp sgt i32 %.sroa.6211.0.copyload, 0
  %or.cond829 = select i1 %99, i1 %105, i1 false
  br i1 %or.cond829, label %.preheader261.lr.ph.split.us.split.us, label %.loopexit

.preheader261.lr.ph.split.us.split.us:            ; preds = %.preheader261.lr.ph
  %106 = icmp sgt i32 %.sroa.8.0.copyload, 0
  br i1 %106, label %.preheader261.lr.ph.split.us.split.us.split.us, label %.preheader261.lr.ph.split.us.split.us.split

.preheader261.lr.ph.split.us.split.us.split.us:   ; preds = %.preheader261.lr.ph.split.us.split.us
  %107 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %108 = icmp sgt i32 %107, 0
  br i1 %108, label %.preheader261.lr.ph.split.us.split.us.split.us.split.us, label %.preheader261.lr.ph.split.us.split.us.split.us.split

.preheader261.lr.ph.split.us.split.us.split.us.split.us: ; preds = %.preheader261.lr.ph.split.us.split.us.split.us
  %109 = zext nneg i32 %.sroa.8.0.copyload to i64
  %110 = zext nneg i32 %.sroa.7.0.copyload to i64
  %111 = zext nneg i32 %.sroa.6211.0.copyload to i64
  br i1 %100, label %.preheader261.us.us.us.us.us.preheader, label %.preheader261.us.us.us.us.preheader

.preheader261.us.us.us.us.preheader:              ; preds = %.preheader261.lr.ph.split.us.split.us.split.us.split.us
  %xtraiter949 = and i64 %109, 1
  %112 = icmp eq i32 %.sroa.8.0.copyload, 1
  %unroll_iter953 = and i64 %109, 2147483646
  %lcmp.mod952.not = icmp eq i64 %xtraiter949, 0
  br label %.preheader261.us.us.us.us

.preheader261.us.us.us.us.us.preheader:           ; preds = %.preheader261.lr.ph.split.us.split.us.split.us.split.us
  %xtraiter956 = and i64 %109, 1
  %113 = icmp eq i32 %.sroa.8.0.copyload, 1
  %unroll_iter960 = and i64 %109, 2147483646
  %lcmp.mod959.not = icmp eq i64 %xtraiter956, 0
  br label %.preheader261.us.us.us.us.us

.preheader261.us.us.us.us.us:                     ; preds = %.preheader261.us.us.us.us.us.preheader, %._crit_edge.split.us.split.us.split.us.split.us.us.us.us.us.us
  %.0254489.us.us.us.us.us = phi ptr [ %139, %._crit_edge.split.us.split.us.split.us.split.us.us.us.us.us.us ], [ %3, %.preheader261.us.us.us.us.us.preheader ]
  %.0255484.us.us.us.us.us = phi ptr [ %138, %._crit_edge.split.us.split.us.split.us.split.us.us.us.us.us.us ], [ %1, %.preheader261.us.us.us.us.us.preheader ]
  %.0256483.us.us.us.us.us = phi i32 [ %140, %._crit_edge.split.us.split.us.split.us.split.us.us.us.us.us.us ], [ 0, %.preheader261.us.us.us.us.us.preheader ]
  br label %.preheader.us.us.us.us.us.us.us.us.us

.preheader.us.us.us.us.us.us.us.us.us:            ; preds = %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us.us.us.us, %.preheader261.us.us.us.us.us
  %indvars.iv756 = phi i64 [ %indvars.iv.next757, %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us.us.us.us ], [ 0, %.preheader261.us.us.us.us.us ]
  %114 = mul nuw nsw i64 %indvars.iv756, %111
  %115 = mul nuw nsw i64 %indvars.iv756, %109
  %invariant.gep820 = getelementptr inbounds float, ptr %2, i64 %115
  br label %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us

.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us:    ; preds = %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us, %.preheader.us.us.us.us.us.us.us.us.us
  %indvars.iv751 = phi i64 [ %indvars.iv.next752, %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us ], [ 0, %.preheader.us.us.us.us.us.us.us.us.us ]
  %116 = add nuw nsw i64 %indvars.iv751, %114
  %117 = getelementptr inbounds float, ptr %.0254489.us.us.us.us.us, i64 %116
  store float 0.000000e+00, ptr %117, align 4, !tbaa !17
  %118 = mul nuw nsw i64 %indvars.iv751, %109
  %119 = mul nuw nsw i64 %indvars.iv751, %110
  %120 = add nuw nsw i64 %119, %indvars.iv756
  %121 = getelementptr inbounds float, ptr %.0254489.us.us.us.us.us, i64 %120
  %.promoted456.us.us.us.us.us.us.us.us.us.us.us.us = load float, ptr %121, align 4, !tbaa !17
  br i1 %113, label %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new

.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new: ; preds = %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new
  %indvars.iv742 = phi i64 [ %indvars.iv.next743.1, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new ], [ 0, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us ]
  %122 = phi float [ %132, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new ], [ %.promoted456.us.us.us.us.us.us.us.us.us.us.us.us, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us ]
  %niter961 = phi i64 [ %niter961.next.1, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new ], [ 0, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us ]
  %123 = add nuw nsw i64 %indvars.iv742, %118
  %124 = getelementptr inbounds float, ptr %.0255484.us.us.us.us.us, i64 %123
  %125 = load float, ptr %124, align 4, !tbaa !17
  %gep821 = getelementptr inbounds float, ptr %invariant.gep820, i64 %indvars.iv742
  %126 = load float, ptr %gep821, align 4, !tbaa !17
  %127 = tail call float @llvm.fmuladd.f32(float %125, float %126, float %122)
  store float %127, ptr %121, align 4, !tbaa !17
  %indvars.iv.next743 = or disjoint i64 %indvars.iv742, 1
  %128 = add nuw nsw i64 %indvars.iv.next743, %118
  %129 = getelementptr inbounds float, ptr %.0255484.us.us.us.us.us, i64 %128
  %130 = load float, ptr %129, align 4, !tbaa !17
  %gep821.1 = getelementptr inbounds float, ptr %invariant.gep820, i64 %indvars.iv.next743
  %131 = load float, ptr %gep821.1, align 4, !tbaa !17
  %132 = tail call float @llvm.fmuladd.f32(float %130, float %131, float %127)
  store float %132, ptr %121, align 4, !tbaa !17
  %indvars.iv.next743.1 = add nuw nsw i64 %indvars.iv742, 2
  %niter961.next.1 = add i64 %niter961, 2
  %niter961.ncmp.1 = icmp eq i64 %niter961.next.1, %unroll_iter960
  br i1 %niter961.ncmp.1, label %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new, !llvm.loop !22

._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.unr-lcssa: ; preds = %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us
  %indvars.iv742.unr = phi i64 [ 0, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us ], [ %indvars.iv.next743.1, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new ]
  %.unr958 = phi float [ %.promoted456.us.us.us.us.us.us.us.us.us.us.us.us, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us ], [ %132, %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us.new ]
  br i1 %lcmp.mod959.not, label %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us, label %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.epilog-lcssa

._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.epilog-lcssa: ; preds = %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.unr-lcssa
  %133 = add nuw nsw i64 %indvars.iv742.unr, %118
  %134 = getelementptr inbounds float, ptr %.0255484.us.us.us.us.us, i64 %133
  %135 = load float, ptr %134, align 4, !tbaa !17
  %gep821.epil = getelementptr inbounds float, ptr %invariant.gep820, i64 %indvars.iv742.unr
  %136 = load float, ptr %gep821.epil, align 4, !tbaa !17
  %137 = tail call float @llvm.fmuladd.f32(float %135, float %136, float %.unr958)
  store float %137, ptr %121, align 4, !tbaa !17
  br label %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us

._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us: ; preds = %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.unr-lcssa, %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us.epilog-lcssa
  %indvars.iv.next752 = add nuw nsw i64 %indvars.iv751, 1
  %exitcond755.not = icmp eq i64 %indvars.iv.next752, %111
  br i1 %exitcond755.not, label %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us.us.us.us, label %.lr.ph.us.us.us.us.us.us481.us.us.us.us.us.us, !llvm.loop !23

._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us.us.us.us: ; preds = %._crit_edge.split.us.us.us.us.us.us.us482.us.us.us.us.us.us
  %indvars.iv.next757 = add nuw nsw i64 %indvars.iv756, 1
  %exitcond760.not = icmp eq i64 %indvars.iv.next757, %110
  br i1 %exitcond760.not, label %._crit_edge.split.us.split.us.split.us.split.us.us.us.us.us.us, label %.preheader.us.us.us.us.us.us.us.us.us, !llvm.loop !24

._crit_edge.split.us.split.us.split.us.split.us.us.us.us.us.us: ; preds = %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us.us.us.us
  %138 = getelementptr inbounds float, ptr %.0255484.us.us.us.us.us, i64 %102
  %139 = getelementptr inbounds float, ptr %.0254489.us.us.us.us.us, i64 %104
  %140 = add nuw nsw i32 %.0256483.us.us.us.us.us, 1
  %exitcond761.not = icmp eq i32 %140, %.sroa.9212.0.copyload
  br i1 %exitcond761.not, label %.loopexit, label %.preheader261.us.us.us.us.us, !llvm.loop !25

.preheader261.us.us.us.us:                        ; preds = %.preheader261.us.us.us.us.preheader, %._crit_edge.split.us.split.us.split.us.split.us512.us.us.us
  %.0254489.us.us.us.us = phi ptr [ %163, %._crit_edge.split.us.split.us.split.us.split.us512.us.us.us ], [ %3, %.preheader261.us.us.us.us.preheader ]
  %.0255484.us.us.us.us = phi ptr [ %162, %._crit_edge.split.us.split.us.split.us.split.us512.us.us.us ], [ %1, %.preheader261.us.us.us.us.preheader ]
  %.0256483.us.us.us.us = phi i32 [ %164, %._crit_edge.split.us.split.us.split.us.split.us512.us.us.us ], [ 0, %.preheader261.us.us.us.us.preheader ]
  br label %.preheader.us.us.us.us508.us.us.us

.preheader.us.us.us.us508.us.us.us:               ; preds = %.preheader261.us.us.us.us, %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us
  %indvars.iv736 = phi i64 [ 0, %.preheader261.us.us.us.us ], [ %indvars.iv.next737, %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us ]
  %141 = mul nuw nsw i64 %indvars.iv736, %109
  %invariant.gep818 = getelementptr inbounds float, ptr %2, i64 %141
  br label %.lr.ph.us.us.us.us.us.us510.us.us.us

.lr.ph.us.us.us.us.us.us510.us.us.us:             ; preds = %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us, %.preheader.us.us.us.us508.us.us.us
  %indvars.iv731 = phi i64 [ %indvars.iv.next732, %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us ], [ 0, %.preheader.us.us.us.us508.us.us.us ]
  %142 = mul nuw nsw i64 %indvars.iv731, %109
  %143 = mul nuw nsw i64 %indvars.iv731, %110
  %144 = add nuw nsw i64 %143, %indvars.iv736
  %145 = getelementptr inbounds float, ptr %.0254489.us.us.us.us, i64 %144
  %.promoted456.us.us.us.us.us.us.us.us.us = load float, ptr %145, align 4, !tbaa !17
  br i1 %112, label %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.us.us.us510.us.us.us.new

.lr.ph.us.us.us.us.us.us510.us.us.us.new:         ; preds = %.lr.ph.us.us.us.us.us.us510.us.us.us, %.lr.ph.us.us.us.us.us.us510.us.us.us.new
  %indvars.iv726 = phi i64 [ %indvars.iv.next727.1, %.lr.ph.us.us.us.us.us.us510.us.us.us.new ], [ 0, %.lr.ph.us.us.us.us.us.us510.us.us.us ]
  %146 = phi float [ %156, %.lr.ph.us.us.us.us.us.us510.us.us.us.new ], [ %.promoted456.us.us.us.us.us.us.us.us.us, %.lr.ph.us.us.us.us.us.us510.us.us.us ]
  %niter954 = phi i64 [ %niter954.next.1, %.lr.ph.us.us.us.us.us.us510.us.us.us.new ], [ 0, %.lr.ph.us.us.us.us.us.us510.us.us.us ]
  %147 = add nuw nsw i64 %indvars.iv726, %142
  %148 = getelementptr inbounds float, ptr %.0255484.us.us.us.us, i64 %147
  %149 = load float, ptr %148, align 4, !tbaa !17
  %gep819 = getelementptr inbounds float, ptr %invariant.gep818, i64 %indvars.iv726
  %150 = load float, ptr %gep819, align 4, !tbaa !17
  %151 = tail call float @llvm.fmuladd.f32(float %149, float %150, float %146)
  store float %151, ptr %145, align 4, !tbaa !17
  %indvars.iv.next727 = or disjoint i64 %indvars.iv726, 1
  %152 = add nuw nsw i64 %indvars.iv.next727, %142
  %153 = getelementptr inbounds float, ptr %.0255484.us.us.us.us, i64 %152
  %154 = load float, ptr %153, align 4, !tbaa !17
  %gep819.1 = getelementptr inbounds float, ptr %invariant.gep818, i64 %indvars.iv.next727
  %155 = load float, ptr %gep819.1, align 4, !tbaa !17
  %156 = tail call float @llvm.fmuladd.f32(float %154, float %155, float %151)
  store float %156, ptr %145, align 4, !tbaa !17
  %indvars.iv.next727.1 = add nuw nsw i64 %indvars.iv726, 2
  %niter954.next.1 = add i64 %niter954, 2
  %niter954.ncmp.1 = icmp eq i64 %niter954.next.1, %unroll_iter953
  br i1 %niter954.ncmp.1, label %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.us.us.us510.us.us.us.new, !llvm.loop !22

._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.unr-lcssa: ; preds = %.lr.ph.us.us.us.us.us.us510.us.us.us.new, %.lr.ph.us.us.us.us.us.us510.us.us.us
  %indvars.iv726.unr = phi i64 [ 0, %.lr.ph.us.us.us.us.us.us510.us.us.us ], [ %indvars.iv.next727.1, %.lr.ph.us.us.us.us.us.us510.us.us.us.new ]
  %.unr951 = phi float [ %.promoted456.us.us.us.us.us.us.us.us.us, %.lr.ph.us.us.us.us.us.us510.us.us.us ], [ %156, %.lr.ph.us.us.us.us.us.us510.us.us.us.new ]
  br i1 %lcmp.mod952.not, label %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us, label %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.epilog-lcssa

._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.epilog-lcssa: ; preds = %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.unr-lcssa
  %157 = add nuw nsw i64 %indvars.iv726.unr, %142
  %158 = getelementptr inbounds float, ptr %.0255484.us.us.us.us, i64 %157
  %159 = load float, ptr %158, align 4, !tbaa !17
  %gep819.epil = getelementptr inbounds float, ptr %invariant.gep818, i64 %indvars.iv726.unr
  %160 = load float, ptr %gep819.epil, align 4, !tbaa !17
  %161 = tail call float @llvm.fmuladd.f32(float %159, float %160, float %.unr951)
  store float %161, ptr %145, align 4, !tbaa !17
  br label %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us

._crit_edge.split.us.us.us.us.us.us.us511.us.us.us: ; preds = %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.unr-lcssa, %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us.epilog-lcssa
  %indvars.iv.next732 = add nuw nsw i64 %indvars.iv731, 1
  %exitcond735.not = icmp eq i64 %indvars.iv.next732, %111
  br i1 %exitcond735.not, label %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us, label %.lr.ph.us.us.us.us.us.us510.us.us.us, !llvm.loop !23

._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us: ; preds = %._crit_edge.split.us.us.us.us.us.us.us511.us.us.us
  %indvars.iv.next737 = add nuw nsw i64 %indvars.iv736, 1
  %exitcond740.not = icmp eq i64 %indvars.iv.next737, %110
  br i1 %exitcond740.not, label %._crit_edge.split.us.split.us.split.us.split.us512.us.us.us, label %.preheader.us.us.us.us508.us.us.us, !llvm.loop !24

._crit_edge.split.us.split.us.split.us.split.us512.us.us.us: ; preds = %._crit_edge460.split.us.split.us.us.us.us.split.us.us.us.us
  %162 = getelementptr inbounds float, ptr %.0255484.us.us.us.us, i64 %102
  %163 = getelementptr inbounds float, ptr %.0254489.us.us.us.us, i64 %104
  %164 = add nuw nsw i32 %.0256483.us.us.us.us, 1
  %exitcond741.not = icmp eq i32 %164, %.sroa.9212.0.copyload
  br i1 %exitcond741.not, label %.loopexit, label %.preheader261.us.us.us.us, !llvm.loop !25

.preheader261.lr.ph.split.us.split.us.split.us.split: ; preds = %.preheader261.lr.ph.split.us.split.us.split.us
  %165 = zext nneg i32 %.sroa.6211.0.copyload to i64
  %166 = zext nneg i32 %.sroa.8.0.copyload to i64
  %wide.trip.count723 = zext nneg i32 %.sroa.7.0.copyload to i64
  br i1 %100, label %.preheader261.us.us.us.us525.preheader, label %.preheader261.us.us.us.preheader

.preheader261.us.us.us.preheader:                 ; preds = %.preheader261.lr.ph.split.us.split.us.split.us.split
  %xtraiter935 = and i64 %166, 1
  %167 = icmp eq i32 %.sroa.8.0.copyload, 1
  %unroll_iter939 = and i64 %166, 2147483646
  %lcmp.mod938.not = icmp eq i64 %xtraiter935, 0
  br label %.preheader261.us.us.us

.preheader261.us.us.us.us525.preheader:           ; preds = %.preheader261.lr.ph.split.us.split.us.split.us.split
  %xtraiter942 = and i64 %166, 1
  %168 = icmp eq i32 %.sroa.8.0.copyload, 1
  %unroll_iter946 = and i64 %166, 2147483646
  %lcmp.mod945.not = icmp eq i64 %xtraiter942, 0
  br label %.preheader261.us.us.us.us525

.preheader261.us.us.us.us525:                     ; preds = %.preheader261.us.us.us.us525.preheader, %._crit_edge.split.us.split.us.split.split.us.us.us.us.us
  %.0254489.us.us.us.us526 = phi ptr [ %193, %._crit_edge.split.us.split.us.split.split.us.us.us.us.us ], [ %3, %.preheader261.us.us.us.us525.preheader ]
  %.0255484.us.us.us.us527 = phi ptr [ %192, %._crit_edge.split.us.split.us.split.split.us.us.us.us.us ], [ %1, %.preheader261.us.us.us.us525.preheader ]
  %.0256483.us.us.us.us528 = phi i32 [ %194, %._crit_edge.split.us.split.us.split.split.us.us.us.us.us ], [ 0, %.preheader261.us.us.us.us525.preheader ]
  br label %.preheader.us.us.us479.us.us.us.us

.preheader.us.us.us479.us.us.us.us:               ; preds = %._crit_edge460.split.us.split.us473.us.split.us.us.us.us.us.us, %.preheader261.us.us.us.us525
  %indvars.iv720 = phi i64 [ %indvars.iv.next721, %._crit_edge460.split.us.split.us473.us.split.us.us.us.us.us.us ], [ 0, %.preheader261.us.us.us.us525 ]
  %169 = mul nuw nsw i64 %indvars.iv720, %165
  %170 = mul nuw nsw i64 %indvars.iv720, %166
  %invariant.gep816 = getelementptr inbounds float, ptr %2, i64 %170
  br label %.lr.ph.us.us472.us.us.us.us.us.us.us

.lr.ph.us.us472.us.us.us.us.us.us.us:             ; preds = %._crit_edge.split.us462.us.us.us.us.us.us.us.us, %.preheader.us.us.us479.us.us.us.us
  %indvars.iv715 = phi i64 [ %indvars.iv.next716, %._crit_edge.split.us462.us.us.us.us.us.us.us.us ], [ 0, %.preheader.us.us.us479.us.us.us.us ]
  %171 = add nuw nsw i64 %indvars.iv715, %169
  %172 = getelementptr inbounds float, ptr %.0254489.us.us.us.us526, i64 %171
  store float 0.000000e+00, ptr %172, align 4, !tbaa !17
  br i1 %168, label %._crit_edge.split.us462.us.us.us.us.us.us.us.us.unr-lcssa, label %.lr.ph.us.us472.us.us.us.us.us.us.us.new

.lr.ph.us.us472.us.us.us.us.us.us.us.new:         ; preds = %.lr.ph.us.us472.us.us.us.us.us.us.us, %.lr.ph.us.us472.us.us.us.us.us.us.us.new
  %indvars.iv706 = phi i64 [ %indvars.iv.next707.1, %.lr.ph.us.us472.us.us.us.us.us.us.us.new ], [ 0, %.lr.ph.us.us472.us.us.us.us.us.us.us ]
  %173 = phi float [ %185, %.lr.ph.us.us472.us.us.us.us.us.us.us.new ], [ 0.000000e+00, %.lr.ph.us.us472.us.us.us.us.us.us.us ]
  %niter947 = phi i64 [ %niter947.next.1, %.lr.ph.us.us472.us.us.us.us.us.us.us.new ], [ 0, %.lr.ph.us.us472.us.us.us.us.us.us.us ]
  %174 = mul nuw nsw i64 %indvars.iv706, %165
  %175 = add nuw nsw i64 %174, %indvars.iv715
  %176 = getelementptr inbounds float, ptr %.0255484.us.us.us.us527, i64 %175
  %177 = load float, ptr %176, align 4, !tbaa !17
  %gep817 = getelementptr inbounds float, ptr %invariant.gep816, i64 %indvars.iv706
  %178 = load float, ptr %gep817, align 4, !tbaa !17
  %179 = tail call float @llvm.fmuladd.f32(float %177, float %178, float %173)
  store float %179, ptr %172, align 4, !tbaa !17
  %indvars.iv.next707 = or disjoint i64 %indvars.iv706, 1
  %180 = mul nuw nsw i64 %indvars.iv.next707, %165
  %181 = add nuw nsw i64 %180, %indvars.iv715
  %182 = getelementptr inbounds float, ptr %.0255484.us.us.us.us527, i64 %181
  %183 = load float, ptr %182, align 4, !tbaa !17
  %gep817.1 = getelementptr inbounds float, ptr %invariant.gep816, i64 %indvars.iv.next707
  %184 = load float, ptr %gep817.1, align 4, !tbaa !17
  %185 = tail call float @llvm.fmuladd.f32(float %183, float %184, float %179)
  store float %185, ptr %172, align 4, !tbaa !17
  %indvars.iv.next707.1 = add nuw nsw i64 %indvars.iv706, 2
  %niter947.next.1 = add i64 %niter947, 2
  %niter947.ncmp.1 = icmp eq i64 %niter947.next.1, %unroll_iter946
  br i1 %niter947.ncmp.1, label %._crit_edge.split.us462.us.us.us.us.us.us.us.us.unr-lcssa, label %.lr.ph.us.us472.us.us.us.us.us.us.us.new, !llvm.loop !22

._crit_edge.split.us462.us.us.us.us.us.us.us.us.unr-lcssa: ; preds = %.lr.ph.us.us472.us.us.us.us.us.us.us.new, %.lr.ph.us.us472.us.us.us.us.us.us.us
  %indvars.iv706.unr = phi i64 [ 0, %.lr.ph.us.us472.us.us.us.us.us.us.us ], [ %indvars.iv.next707.1, %.lr.ph.us.us472.us.us.us.us.us.us.us.new ]
  %.unr944 = phi float [ 0.000000e+00, %.lr.ph.us.us472.us.us.us.us.us.us.us ], [ %185, %.lr.ph.us.us472.us.us.us.us.us.us.us.new ]
  br i1 %lcmp.mod945.not, label %._crit_edge.split.us462.us.us.us.us.us.us.us.us, label %._crit_edge.split.us462.us.us.us.us.us.us.us.us.epilog-lcssa

._crit_edge.split.us462.us.us.us.us.us.us.us.us.epilog-lcssa: ; preds = %._crit_edge.split.us462.us.us.us.us.us.us.us.us.unr-lcssa
  %186 = mul nuw nsw i64 %indvars.iv706.unr, %165
  %187 = add nuw nsw i64 %186, %indvars.iv715
  %188 = getelementptr inbounds float, ptr %.0255484.us.us.us.us527, i64 %187
  %189 = load float, ptr %188, align 4, !tbaa !17
  %gep817.epil = getelementptr inbounds float, ptr %invariant.gep816, i64 %indvars.iv706.unr
  %190 = load float, ptr %gep817.epil, align 4, !tbaa !17
  %191 = tail call float @llvm.fmuladd.f32(float %189, float %190, float %.unr944)
  store float %191, ptr %172, align 4, !tbaa !17
  br label %._crit_edge.split.us462.us.us.us.us.us.us.us.us

._crit_edge.split.us462.us.us.us.us.us.us.us.us:  ; preds = %._crit_edge.split.us462.us.us.us.us.us.us.us.us.unr-lcssa, %._crit_edge.split.us462.us.us.us.us.us.us.us.us.epilog-lcssa
  %indvars.iv.next716 = add nuw nsw i64 %indvars.iv715, 1
  %exitcond719.not = icmp eq i64 %indvars.iv.next716, %165
  br i1 %exitcond719.not, label %._crit_edge460.split.us.split.us473.us.split.us.us.us.us.us.us, label %.lr.ph.us.us472.us.us.us.us.us.us.us, !llvm.loop !23

._crit_edge460.split.us.split.us473.us.split.us.us.us.us.us.us: ; preds = %._crit_edge.split.us462.us.us.us.us.us.us.us.us
  %indvars.iv.next721 = add nuw nsw i64 %indvars.iv720, 1
  %exitcond724.not = icmp eq i64 %indvars.iv.next721, %wide.trip.count723
  br i1 %exitcond724.not, label %._crit_edge.split.us.split.us.split.split.us.us.us.us.us, label %.preheader.us.us.us479.us.us.us.us, !llvm.loop !24

._crit_edge.split.us.split.us.split.split.us.us.us.us.us: ; preds = %._crit_edge460.split.us.split.us473.us.split.us.us.us.us.us.us
  %192 = getelementptr inbounds float, ptr %.0255484.us.us.us.us527, i64 %102
  %193 = getelementptr inbounds float, ptr %.0254489.us.us.us.us526, i64 %104
  %194 = add nuw nsw i32 %.0256483.us.us.us.us528, 1
  %exitcond725.not = icmp eq i32 %194, %.sroa.9212.0.copyload
  br i1 %exitcond725.not, label %.loopexit, label %.preheader261.us.us.us.us525, !llvm.loop !25

.preheader261.us.us.us:                           ; preds = %.preheader261.us.us.us.preheader, %._crit_edge.split.us.split.us.split.split.us504.us.us
  %.0254489.us.us.us = phi ptr [ %219, %._crit_edge.split.us.split.us.split.split.us504.us.us ], [ %3, %.preheader261.us.us.us.preheader ]
  %.0255484.us.us.us = phi ptr [ %218, %._crit_edge.split.us.split.us.split.split.us504.us.us ], [ %1, %.preheader261.us.us.us.preheader ]
  %.0256483.us.us.us = phi i32 [ %220, %._crit_edge.split.us.split.us.split.split.us504.us.us ], [ 0, %.preheader261.us.us.us.preheader ]
  br label %.preheader.us.us.us502.us.us

.preheader.us.us.us502.us.us:                     ; preds = %.preheader261.us.us.us, %._crit_edge460.split.us.split.us473.us.split.us.us.us
  %indvars.iv700 = phi i64 [ 0, %.preheader261.us.us.us ], [ %indvars.iv.next701, %._crit_edge460.split.us.split.us473.us.split.us.us.us ]
  %195 = mul nuw nsw i64 %indvars.iv700, %166
  %196 = mul nuw nsw i64 %indvars.iv700, %165
  %invariant.gep814 = getelementptr inbounds float, ptr %2, i64 %195
  br label %.lr.ph.us.us472.us.us.us.us

.lr.ph.us.us472.us.us.us.us:                      ; preds = %._crit_edge.split.us462.us.us.us.us.us, %.preheader.us.us.us502.us.us
  %indvars.iv695 = phi i64 [ %indvars.iv.next696, %._crit_edge.split.us462.us.us.us.us.us ], [ 0, %.preheader.us.us.us502.us.us ]
  %197 = add nuw nsw i64 %indvars.iv695, %196
  %198 = getelementptr inbounds float, ptr %.0254489.us.us.us, i64 %197
  %.promoted.us.us.us.us.us.us517 = load float, ptr %198, align 4, !tbaa !17
  br i1 %167, label %._crit_edge.split.us462.us.us.us.us.us.unr-lcssa, label %.lr.ph.us.us472.us.us.us.us.new

.lr.ph.us.us472.us.us.us.us.new:                  ; preds = %.lr.ph.us.us472.us.us.us.us, %.lr.ph.us.us472.us.us.us.us.new
  %indvars.iv690 = phi i64 [ %indvars.iv.next691.1, %.lr.ph.us.us472.us.us.us.us.new ], [ 0, %.lr.ph.us.us472.us.us.us.us ]
  %199 = phi float [ %211, %.lr.ph.us.us472.us.us.us.us.new ], [ %.promoted.us.us.us.us.us.us517, %.lr.ph.us.us472.us.us.us.us ]
  %niter940 = phi i64 [ %niter940.next.1, %.lr.ph.us.us472.us.us.us.us.new ], [ 0, %.lr.ph.us.us472.us.us.us.us ]
  %200 = mul nuw nsw i64 %indvars.iv690, %165
  %201 = add nuw nsw i64 %200, %indvars.iv695
  %202 = getelementptr inbounds float, ptr %.0255484.us.us.us, i64 %201
  %203 = load float, ptr %202, align 4, !tbaa !17
  %gep815 = getelementptr inbounds float, ptr %invariant.gep814, i64 %indvars.iv690
  %204 = load float, ptr %gep815, align 4, !tbaa !17
  %205 = tail call float @llvm.fmuladd.f32(float %203, float %204, float %199)
  store float %205, ptr %198, align 4, !tbaa !17
  %indvars.iv.next691 = or disjoint i64 %indvars.iv690, 1
  %206 = mul nuw nsw i64 %indvars.iv.next691, %165
  %207 = add nuw nsw i64 %206, %indvars.iv695
  %208 = getelementptr inbounds float, ptr %.0255484.us.us.us, i64 %207
  %209 = load float, ptr %208, align 4, !tbaa !17
  %gep815.1 = getelementptr inbounds float, ptr %invariant.gep814, i64 %indvars.iv.next691
  %210 = load float, ptr %gep815.1, align 4, !tbaa !17
  %211 = tail call float @llvm.fmuladd.f32(float %209, float %210, float %205)
  store float %211, ptr %198, align 4, !tbaa !17
  %indvars.iv.next691.1 = add nuw nsw i64 %indvars.iv690, 2
  %niter940.next.1 = add i64 %niter940, 2
  %niter940.ncmp.1 = icmp eq i64 %niter940.next.1, %unroll_iter939
  br i1 %niter940.ncmp.1, label %._crit_edge.split.us462.us.us.us.us.us.unr-lcssa, label %.lr.ph.us.us472.us.us.us.us.new, !llvm.loop !22

._crit_edge.split.us462.us.us.us.us.us.unr-lcssa: ; preds = %.lr.ph.us.us472.us.us.us.us.new, %.lr.ph.us.us472.us.us.us.us
  %indvars.iv690.unr = phi i64 [ 0, %.lr.ph.us.us472.us.us.us.us ], [ %indvars.iv.next691.1, %.lr.ph.us.us472.us.us.us.us.new ]
  %.unr937 = phi float [ %.promoted.us.us.us.us.us.us517, %.lr.ph.us.us472.us.us.us.us ], [ %211, %.lr.ph.us.us472.us.us.us.us.new ]
  br i1 %lcmp.mod938.not, label %._crit_edge.split.us462.us.us.us.us.us, label %._crit_edge.split.us462.us.us.us.us.us.epilog-lcssa

._crit_edge.split.us462.us.us.us.us.us.epilog-lcssa: ; preds = %._crit_edge.split.us462.us.us.us.us.us.unr-lcssa
  %212 = mul nuw nsw i64 %indvars.iv690.unr, %165
  %213 = add nuw nsw i64 %212, %indvars.iv695
  %214 = getelementptr inbounds float, ptr %.0255484.us.us.us, i64 %213
  %215 = load float, ptr %214, align 4, !tbaa !17
  %gep815.epil = getelementptr inbounds float, ptr %invariant.gep814, i64 %indvars.iv690.unr
  %216 = load float, ptr %gep815.epil, align 4, !tbaa !17
  %217 = tail call float @llvm.fmuladd.f32(float %215, float %216, float %.unr937)
  store float %217, ptr %198, align 4, !tbaa !17
  br label %._crit_edge.split.us462.us.us.us.us.us

._crit_edge.split.us462.us.us.us.us.us:           ; preds = %._crit_edge.split.us462.us.us.us.us.us.unr-lcssa, %._crit_edge.split.us462.us.us.us.us.us.epilog-lcssa
  %indvars.iv.next696 = add nuw nsw i64 %indvars.iv695, 1
  %exitcond699.not = icmp eq i64 %indvars.iv.next696, %165
  br i1 %exitcond699.not, label %._crit_edge460.split.us.split.us473.us.split.us.us.us, label %.lr.ph.us.us472.us.us.us.us, !llvm.loop !23

._crit_edge460.split.us.split.us473.us.split.us.us.us: ; preds = %._crit_edge.split.us462.us.us.us.us.us
  %indvars.iv.next701 = add nuw nsw i64 %indvars.iv700, 1
  %exitcond704.not = icmp eq i64 %indvars.iv.next701, %wide.trip.count723
  br i1 %exitcond704.not, label %._crit_edge.split.us.split.us.split.split.us504.us.us, label %.preheader.us.us.us502.us.us, !llvm.loop !24

._crit_edge.split.us.split.us.split.split.us504.us.us: ; preds = %._crit_edge460.split.us.split.us473.us.split.us.us.us
  %218 = getelementptr inbounds float, ptr %.0255484.us.us.us, i64 %102
  %219 = getelementptr inbounds float, ptr %.0254489.us.us.us, i64 %104
  %220 = add nuw nsw i32 %.0256483.us.us.us, 1
  %exitcond705.not = icmp eq i32 %220, %.sroa.9212.0.copyload
  br i1 %exitcond705.not, label %.loopexit, label %.preheader261.us.us.us, !llvm.loop !25

.preheader261.lr.ph.split.us.split.us.split:      ; preds = %.preheader261.lr.ph.split.us.split.us
  br i1 %100, label %.preheader261.us.us.us519.preheader, label %.loopexit

.preheader261.us.us.us519.preheader:              ; preds = %.preheader261.lr.ph.split.us.split.us.split
  %221 = zext nneg i32 %.sroa.6211.0.copyload to i64
  %222 = zext nneg i32 %.sroa.7.0.copyload to i64
  %223 = mul nuw nsw i64 %221, %222
  %224 = shl nuw i64 %223, 2
  %wide.trip.count688 = zext nneg i32 %.sroa.9212.0.copyload to i64
  %xtraiter930 = and i64 %wide.trip.count688, 7
  %225 = icmp ult i32 %.sroa.9212.0.copyload, 8
  br i1 %225, label %.loopexit.loopexit900.unr-lcssa, label %.preheader261.us.us.us519.preheader.new

.preheader261.us.us.us519.preheader.new:          ; preds = %.preheader261.us.us.us519.preheader
  %unroll_iter932 = and i64 %wide.trip.count688, 2147483640
  br label %.preheader261.us.us.us519

.preheader261.us.us.us519:                        ; preds = %.preheader261.us.us.us519, %.preheader261.us.us.us519.preheader.new
  %.0254489.us.us.us520 = phi ptr [ %3, %.preheader261.us.us.us519.preheader.new ], [ %233, %.preheader261.us.us.us519 ]
  %niter933 = phi i64 [ 0, %.preheader261.us.us.us519.preheader.new ], [ %niter933.next.7, %.preheader261.us.us.us519 ]
  tail call void @llvm.memset.p0.i64(ptr align 4 %.0254489.us.us.us520, i8 0, i64 %224, i1 false), !tbaa !17
  %226 = getelementptr float, ptr %.0254489.us.us.us520, i64 %104
  tail call void @llvm.memset.p0.i64(ptr align 4 %226, i8 0, i64 %224, i1 false), !tbaa !17
  %227 = getelementptr float, ptr %226, i64 %104
  tail call void @llvm.memset.p0.i64(ptr align 4 %227, i8 0, i64 %224, i1 false), !tbaa !17
  %228 = getelementptr float, ptr %227, i64 %104
  tail call void @llvm.memset.p0.i64(ptr align 4 %228, i8 0, i64 %224, i1 false), !tbaa !17
  %229 = getelementptr float, ptr %228, i64 %104
  tail call void @llvm.memset.p0.i64(ptr align 4 %229, i8 0, i64 %224, i1 false), !tbaa !17
  %230 = getelementptr float, ptr %229, i64 %104
  tail call void @llvm.memset.p0.i64(ptr align 4 %230, i8 0, i64 %224, i1 false), !tbaa !17
  %231 = getelementptr float, ptr %230, i64 %104
  tail call void @llvm.memset.p0.i64(ptr align 4 %231, i8 0, i64 %224, i1 false), !tbaa !17
  %232 = getelementptr float, ptr %231, i64 %104
  tail call void @llvm.memset.p0.i64(ptr align 4 %232, i8 0, i64 %224, i1 false), !tbaa !17
  %233 = getelementptr float, ptr %232, i64 %104
  %niter933.next.7 = add i64 %niter933, 8
  %niter933.ncmp.7 = icmp eq i64 %niter933.next.7, %unroll_iter932
  br i1 %niter933.ncmp.7, label %.loopexit.loopexit900.unr-lcssa, label %.preheader261.us.us.us519, !llvm.loop !25

234:                                              ; preds = %4
  %235 = icmp eq i32 %.sroa.14216.0.copyload, 1
  %236 = icmp eq i32 %.sroa.16.0.copyload, 0
  %or.cond = select i1 %235, i1 %236, i1 false
  br i1 %or.cond, label %.preheader269, label %328

.preheader269:                                    ; preds = %234
  %237 = icmp sgt i32 %.sroa.9212.0.copyload, 0
  br i1 %237, label %.preheader268.lr.ph, label %.loopexit

.preheader268.lr.ph:                              ; preds = %.preheader269
  %238 = icmp sgt i32 %.sroa.7.0.copyload, 0
  %239 = fcmp oeq double %.sroa.10.0.copyload, 0.000000e+00
  %240 = mul nsw i32 %.sroa.8.0.copyload, %.sroa.6211.0.copyload
  %241 = sext i32 %240 to i64
  %242 = mul nsw i32 %.sroa.7.0.copyload, %.sroa.6211.0.copyload
  %243 = sext i32 %242 to i64
  %244 = icmp sgt i32 %.sroa.6211.0.copyload, 0
  %or.cond830 = select i1 %238, i1 %244, i1 false
  br i1 %or.cond830, label %.preheader268.lr.ph.split.us.split.us, label %.loopexit

.preheader268.lr.ph.split.us.split.us:            ; preds = %.preheader268.lr.ph
  %245 = icmp sgt i32 %.sroa.8.0.copyload, 0
  br i1 %245, label %.preheader268.lr.ph.split.us.split.us.split.us, label %.preheader268.lr.ph.split.us.split.us.split

.preheader268.lr.ph.split.us.split.us.split.us:   ; preds = %.preheader268.lr.ph.split.us.split.us
  %246 = zext nneg i32 %.sroa.6211.0.copyload to i64
  br i1 %239, label %.preheader268.us.us.us.us.preheader, label %.preheader268.us.us.us.preheader

.preheader268.us.us.us.preheader:                 ; preds = %.preheader268.lr.ph.split.us.split.us.split.us
  %247 = zext nneg i32 %.sroa.8.0.copyload to i64
  %248 = zext nneg i32 %.sroa.7.0.copyload to i64
  br label %.preheader268.us.us.us

.preheader268.us.us.us.us.preheader:              ; preds = %.preheader268.lr.ph.split.us.split.us.split.us
  %249 = zext nneg i32 %.sroa.7.0.copyload to i64
  %250 = zext nneg i32 %.sroa.8.0.copyload to i64
  br label %.preheader268.us.us.us.us

.preheader268.us.us.us.us:                        ; preds = %.preheader268.us.us.us.us.preheader, %._crit_edge.split.us.split.us.split.us.us.us.us.us364
  %.0242337.us.us.us.us = phi ptr [ %279, %._crit_edge.split.us.split.us.split.us.us.us.us.us364 ], [ %3, %.preheader268.us.us.us.us.preheader ]
  %.0243333.us.us.us.us = phi ptr [ %278, %._crit_edge.split.us.split.us.split.us.us.us.us.us364 ], [ %1, %.preheader268.us.us.us.us.preheader ]
  %.2258332.us.us.us.us = phi i32 [ %280, %._crit_edge.split.us.split.us.split.us.us.us.us.us364 ], [ 0, %.preheader268.us.us.us.us.preheader ]
  br label %.preheader267.us.us.us.us.us.us.us

.preheader267.us.us.us.us.us.us.us:               ; preds = %._crit_edge320.split.us.us.us.split.us.us.us.us.us.us, %.preheader268.us.us.us.us
  %indvars.iv632 = phi i64 [ %indvars.iv.next633, %._crit_edge320.split.us.us.us.split.us.us.us.us.us.us ], [ 0, %.preheader268.us.us.us.us ]
  %251 = mul nuw nsw i64 %indvars.iv632, %246
  %252 = mul nuw nsw i64 %indvars.iv632, %250
  %invariant.gep808.sink = getelementptr inbounds i8, ptr %2, i64 %252
  br label %253

253:                                              ; preds = %._crit_edge.us.us.us.us.us.us356.us.us.us, %.preheader267.us.us.us.us.us.us.us
  %indvars.iv627 = phi i64 [ %indvars.iv.next628, %._crit_edge.us.us.us.us.us.us356.us.us.us ], [ 0, %.preheader267.us.us.us.us.us.us.us ]
  %254 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %255 = icmp sgt i32 %254, 0
  br i1 %255, label %259, label %256

256:                                              ; preds = %253
  %257 = add nuw nsw i64 %indvars.iv627, %251
  %258 = getelementptr inbounds i32, ptr %.0242337.us.us.us.us, i64 %257
  store i32 0, ptr %258, align 4, !tbaa !5
  %.pre771 = mul nuw nsw i64 %indvars.iv627, %249
  %.pre773 = add nuw nsw i64 %.pre771, %indvars.iv632
  br label %.lr.ph.us.us.us.us.us.us355.us.us.us

259:                                              ; preds = %253
  %260 = mul nuw nsw i64 %indvars.iv627, %249
  %261 = add nuw nsw i64 %260, %indvars.iv632
  %262 = getelementptr inbounds i32, ptr %.0242337.us.us.us.us, i64 %261
  store i32 0, ptr %262, align 4, !tbaa !5
  %.pre762 = add nuw nsw i64 %indvars.iv627, %251
  br label %.lr.ph.us.us.us.us.us.us355.us.us.us

.lr.ph.us.us.us.us.us.us355.us.us.us:             ; preds = %259, %256
  %.pre-phi774 = phi i64 [ %261, %259 ], [ %.pre773, %256 ]
  %.pre-phi763 = phi i64 [ %.pre762, %259 ], [ %257, %256 ]
  %263 = mul nuw nsw i64 %indvars.iv627, %250
  br label %264

264:                                              ; preds = %264, %.lr.ph.us.us.us.us.us.us355.us.us.us
  %indvars.iv622 = phi i64 [ %indvars.iv.next623, %264 ], [ 0, %.lr.ph.us.us.us.us.us.us355.us.us.us ]
  %265 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %266 = icmp sgt i32 %265, 0
  %267 = add nuw nsw i64 %indvars.iv622, %263
  %268 = mul nuw nsw i64 %indvars.iv622, %246
  %269 = add nuw nsw i64 %268, %indvars.iv627
  %.sink841 = select i1 %266, i64 %267, i64 %269
  %.sink835.v = select i1 %266, i64 %.pre-phi774, i64 %.pre-phi763
  %.sink835 = getelementptr inbounds i32, ptr %.0242337.us.us.us.us, i64 %.sink835.v
  %270 = getelementptr inbounds i8, ptr %.0243333.us.us.us.us, i64 %.sink841
  %271 = load i8, ptr %270, align 1, !tbaa !26
  %272 = zext i8 %271 to i32
  %gep809 = getelementptr inbounds i8, ptr %invariant.gep808.sink, i64 %indvars.iv622
  %273 = load i8, ptr %gep809, align 1, !tbaa !26
  %274 = sext i8 %273 to i32
  %275 = mul nsw i32 %274, %272
  %276 = load i32, ptr %.sink835, align 4, !tbaa !5
  %277 = add nsw i32 %275, %276
  store i32 %277, ptr %.sink835, align 4, !tbaa !5
  %indvars.iv.next623 = add nuw nsw i64 %indvars.iv622, 1
  %exitcond626.not = icmp eq i64 %indvars.iv.next623, %250
  br i1 %exitcond626.not, label %._crit_edge.us.us.us.us.us.us356.us.us.us, label %264, !llvm.loop !27

._crit_edge.us.us.us.us.us.us356.us.us.us:        ; preds = %264
  %indvars.iv.next628 = add nuw nsw i64 %indvars.iv627, 1
  %exitcond631.not = icmp eq i64 %indvars.iv.next628, %246
  br i1 %exitcond631.not, label %._crit_edge320.split.us.us.us.split.us.us.us.us.us.us, label %253, !llvm.loop !28

._crit_edge320.split.us.us.us.split.us.us.us.us.us.us: ; preds = %._crit_edge.us.us.us.us.us.us356.us.us.us
  %indvars.iv.next633 = add nuw nsw i64 %indvars.iv632, 1
  %exitcond636.not = icmp eq i64 %indvars.iv.next633, %249
  br i1 %exitcond636.not, label %._crit_edge.split.us.split.us.split.us.us.us.us.us364, label %.preheader267.us.us.us.us.us.us.us, !llvm.loop !29

._crit_edge.split.us.split.us.split.us.us.us.us.us364: ; preds = %._crit_edge320.split.us.us.us.split.us.us.us.us.us.us
  %278 = getelementptr inbounds i8, ptr %.0243333.us.us.us.us, i64 %241
  %279 = getelementptr inbounds i32, ptr %.0242337.us.us.us.us, i64 %243
  %280 = add nuw nsw i32 %.2258332.us.us.us.us, 1
  %exitcond637.not = icmp eq i32 %280, %.sroa.9212.0.copyload
  br i1 %exitcond637.not, label %.loopexit, label %.preheader268.us.us.us.us, !llvm.loop !30

.preheader268.us.us.us:                           ; preds = %.preheader268.us.us.us.preheader, %._crit_edge.split.us.split.us.split.us351.us.us
  %.0242337.us.us.us = phi ptr [ %302, %._crit_edge.split.us.split.us.split.us351.us.us ], [ %3, %.preheader268.us.us.us.preheader ]
  %.0243333.us.us.us = phi ptr [ %301, %._crit_edge.split.us.split.us.split.us351.us.us ], [ %1, %.preheader268.us.us.us.preheader ]
  %.2258332.us.us.us = phi i32 [ %303, %._crit_edge.split.us.split.us.split.us351.us.us ], [ 0, %.preheader268.us.us.us.preheader ]
  br label %.preheader267.us.us.us349.us.us

.preheader267.us.us.us349.us.us:                  ; preds = %.preheader268.us.us.us, %._crit_edge320.split.us.us.us.split.us.us.us
  %indvars.iv616 = phi i64 [ 0, %.preheader268.us.us.us ], [ %indvars.iv.next617, %._crit_edge320.split.us.us.us.split.us.us.us ]
  %281 = mul nuw nsw i64 %indvars.iv616, %247
  %282 = mul nuw nsw i64 %indvars.iv616, %246
  %invariant.gep804.sink = getelementptr inbounds i8, ptr %2, i64 %281
  br label %.lr.ph.us.us.us.us.us.us357

.lr.ph.us.us.us.us.us.us357:                      ; preds = %._crit_edge.us.us.us.us.us.us358, %.preheader267.us.us.us349.us.us
  %indvars.iv611 = phi i64 [ %indvars.iv.next612, %._crit_edge.us.us.us.us.us.us358 ], [ 0, %.preheader267.us.us.us349.us.us ]
  %283 = add nuw nsw i64 %indvars.iv611, %282
  %284 = mul nuw nsw i64 %indvars.iv611, %247
  %285 = mul nuw nsw i64 %indvars.iv611, %248
  %286 = add nuw nsw i64 %285, %indvars.iv616
  br label %287

287:                                              ; preds = %287, %.lr.ph.us.us.us.us.us.us357
  %indvars.iv606 = phi i64 [ %indvars.iv.next607, %287 ], [ 0, %.lr.ph.us.us.us.us.us.us357 ]
  %288 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %289 = icmp sgt i32 %288, 0
  %290 = add nuw nsw i64 %indvars.iv606, %284
  %291 = mul nuw nsw i64 %indvars.iv606, %246
  %292 = add nuw nsw i64 %291, %indvars.iv611
  %.sink852 = select i1 %289, i64 %290, i64 %292
  %.sink846.v = select i1 %289, i64 %286, i64 %283
  %.sink846 = getelementptr inbounds i32, ptr %.0242337.us.us.us, i64 %.sink846.v
  %293 = getelementptr inbounds i8, ptr %.0243333.us.us.us, i64 %.sink852
  %294 = load i8, ptr %293, align 1, !tbaa !26
  %295 = zext i8 %294 to i32
  %gep805 = getelementptr inbounds i8, ptr %invariant.gep804.sink, i64 %indvars.iv606
  %296 = load i8, ptr %gep805, align 1, !tbaa !26
  %297 = sext i8 %296 to i32
  %298 = mul nsw i32 %297, %295
  %299 = load i32, ptr %.sink846, align 4, !tbaa !5
  %300 = add nsw i32 %298, %299
  store i32 %300, ptr %.sink846, align 4, !tbaa !5
  %indvars.iv.next607 = add nuw nsw i64 %indvars.iv606, 1
  %exitcond610.not = icmp eq i64 %indvars.iv.next607, %247
  br i1 %exitcond610.not, label %._crit_edge.us.us.us.us.us.us358, label %287, !llvm.loop !27

._crit_edge.us.us.us.us.us.us358:                 ; preds = %287
  %indvars.iv.next612 = add nuw nsw i64 %indvars.iv611, 1
  %exitcond615.not = icmp eq i64 %indvars.iv.next612, %246
  br i1 %exitcond615.not, label %._crit_edge320.split.us.us.us.split.us.us.us, label %.lr.ph.us.us.us.us.us.us357, !llvm.loop !28

._crit_edge320.split.us.us.us.split.us.us.us:     ; preds = %._crit_edge.us.us.us.us.us.us358
  %indvars.iv.next617 = add nuw nsw i64 %indvars.iv616, 1
  %exitcond620.not = icmp eq i64 %indvars.iv.next617, %248
  br i1 %exitcond620.not, label %._crit_edge.split.us.split.us.split.us351.us.us, label %.preheader267.us.us.us349.us.us, !llvm.loop !29

._crit_edge.split.us.split.us.split.us351.us.us:  ; preds = %._crit_edge320.split.us.us.us.split.us.us.us
  %301 = getelementptr inbounds i8, ptr %.0243333.us.us.us, i64 %241
  %302 = getelementptr inbounds i32, ptr %.0242337.us.us.us, i64 %243
  %303 = add nuw nsw i32 %.2258332.us.us.us, 1
  %exitcond621.not = icmp eq i32 %303, %.sroa.9212.0.copyload
  br i1 %exitcond621.not, label %.loopexit, label %.preheader268.us.us.us, !llvm.loop !30

.preheader268.lr.ph.split.us.split.us.split:      ; preds = %.preheader268.lr.ph.split.us.split.us
  br i1 %239, label %.preheader268.us.us.us359.preheader, label %.loopexit

.preheader268.us.us.us359.preheader:              ; preds = %.preheader268.lr.ph.split.us.split.us.split
  %304 = zext nneg i32 %.sroa.7.0.copyload to i64
  %305 = zext nneg i32 %.sroa.6211.0.copyload to i64
  %xtraiter915 = and i64 %305, 1
  %306 = icmp eq i32 %.sroa.6211.0.copyload, 1
  %unroll_iter917 = and i64 %305, 2147483646
  %lcmp.mod916.not = icmp eq i64 %xtraiter915, 0
  br label %.preheader268.us.us.us359

.preheader268.us.us.us359:                        ; preds = %.preheader268.us.us.us359.preheader, %._crit_edge.split.us.split.split.us.us.us.us363
  %.0242337.us.us.us360 = phi ptr [ %326, %._crit_edge.split.us.split.split.us.us.us.us363 ], [ %3, %.preheader268.us.us.us359.preheader ]
  %.2258332.us.us.us362 = phi i32 [ %327, %._crit_edge.split.us.split.split.us.us.us.us363 ], [ 0, %.preheader268.us.us.us359.preheader ]
  br label %.preheader267.us.us330.us.us.us

.preheader267.us.us330.us.us.us:                  ; preds = %._crit_edge320.split.split.us.us.us.us.us.us, %.preheader268.us.us.us359
  %indvars.iv600 = phi i64 [ %indvars.iv.next601, %._crit_edge320.split.split.us.us.us.us.us.us ], [ 0, %.preheader268.us.us.us359 ]
  %307 = mul nuw nsw i64 %indvars.iv600, %305
  br i1 %306, label %._crit_edge320.split.split.us.us.us.us.us.us.unr-lcssa, label %.preheader267.us.us330.us.us.us.new

.preheader267.us.us330.us.us.us.new:              ; preds = %.preheader267.us.us330.us.us.us, %.preheader267.us.us330.us.us.us.new
  %indvars.iv595 = phi i64 [ %indvars.iv.next596.1, %.preheader267.us.us330.us.us.us.new ], [ 0, %.preheader267.us.us330.us.us.us ]
  %niter918 = phi i64 [ %niter918.next.1, %.preheader267.us.us330.us.us.us.new ], [ 0, %.preheader267.us.us330.us.us.us ]
  %308 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %309 = icmp sgt i32 %308, 0
  %310 = mul nuw nsw i64 %indvars.iv595, %304
  %311 = add nuw nsw i64 %310, %indvars.iv600
  %312 = add nuw nsw i64 %indvars.iv595, %307
  %.sink854 = select i1 %309, i64 %311, i64 %312
  %313 = getelementptr inbounds i32, ptr %.0242337.us.us.us360, i64 %.sink854
  store i32 0, ptr %313, align 4, !tbaa !5
  %indvars.iv.next596 = or disjoint i64 %indvars.iv595, 1
  %314 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %315 = icmp sgt i32 %314, 0
  %316 = mul nuw nsw i64 %indvars.iv.next596, %304
  %317 = add nuw nsw i64 %316, %indvars.iv600
  %318 = add nuw nsw i64 %indvars.iv.next596, %307
  %.sink854.1 = select i1 %315, i64 %317, i64 %318
  %319 = getelementptr inbounds i32, ptr %.0242337.us.us.us360, i64 %.sink854.1
  store i32 0, ptr %319, align 4, !tbaa !5
  %indvars.iv.next596.1 = add nuw nsw i64 %indvars.iv595, 2
  %niter918.next.1 = add i64 %niter918, 2
  %niter918.ncmp.1 = icmp eq i64 %niter918.next.1, %unroll_iter917
  br i1 %niter918.ncmp.1, label %._crit_edge320.split.split.us.us.us.us.us.us.unr-lcssa, label %.preheader267.us.us330.us.us.us.new, !llvm.loop !28

._crit_edge320.split.split.us.us.us.us.us.us.unr-lcssa: ; preds = %.preheader267.us.us330.us.us.us.new, %.preheader267.us.us330.us.us.us
  %indvars.iv595.unr = phi i64 [ 0, %.preheader267.us.us330.us.us.us ], [ %indvars.iv.next596.1, %.preheader267.us.us330.us.us.us.new ]
  br i1 %lcmp.mod916.not, label %._crit_edge320.split.split.us.us.us.us.us.us, label %._crit_edge320.split.split.us.us.us.us.us.us.epilog-lcssa

._crit_edge320.split.split.us.us.us.us.us.us.epilog-lcssa: ; preds = %._crit_edge320.split.split.us.us.us.us.us.us.unr-lcssa
  %320 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %321 = icmp sgt i32 %320, 0
  %322 = mul nuw nsw i64 %indvars.iv595.unr, %304
  %323 = add nuw nsw i64 %322, %indvars.iv600
  %324 = add nuw nsw i64 %indvars.iv595.unr, %307
  %.sink854.epil = select i1 %321, i64 %323, i64 %324
  %325 = getelementptr inbounds i32, ptr %.0242337.us.us.us360, i64 %.sink854.epil
  store i32 0, ptr %325, align 4, !tbaa !5
  br label %._crit_edge320.split.split.us.us.us.us.us.us

._crit_edge320.split.split.us.us.us.us.us.us:     ; preds = %._crit_edge320.split.split.us.us.us.us.us.us.unr-lcssa, %._crit_edge320.split.split.us.us.us.us.us.us.epilog-lcssa
  %indvars.iv.next601 = add nuw nsw i64 %indvars.iv600, 1
  %exitcond604.not = icmp eq i64 %indvars.iv.next601, %304
  br i1 %exitcond604.not, label %._crit_edge.split.us.split.split.us.us.us.us363, label %.preheader267.us.us330.us.us.us, !llvm.loop !29

._crit_edge.split.us.split.split.us.us.us.us363:  ; preds = %._crit_edge320.split.split.us.us.us.us.us.us
  %326 = getelementptr inbounds i32, ptr %.0242337.us.us.us360, i64 %243
  %327 = add nuw nsw i32 %.2258332.us.us.us362, 1
  %exitcond605.not = icmp eq i32 %327, %.sroa.9212.0.copyload
  br i1 %exitcond605.not, label %.loopexit, label %.preheader268.us.us.us359, !llvm.loop !30

328:                                              ; preds = %234
  %329 = icmp eq i32 %.sroa.14216.0.copyload, 0
  %330 = icmp eq i32 %.sroa.16.0.copyload, 1
  %or.cond5 = select i1 %329, i1 %330, i1 false
  %331 = icmp sgt i32 %.sroa.9212.0.copyload, 0
  %or.cond529 = select i1 %or.cond5, i1 %331, i1 false
  br i1 %or.cond529, label %.preheader272.lr.ph, label %.loopexit

.preheader272.lr.ph:                              ; preds = %328
  %332 = icmp sgt i32 %.sroa.7.0.copyload, 0
  %333 = fcmp oeq double %.sroa.10.0.copyload, 0.000000e+00
  %334 = mul nsw i32 %.sroa.8.0.copyload, %.sroa.6211.0.copyload
  %335 = sext i32 %334 to i64
  %336 = mul nsw i32 %.sroa.7.0.copyload, %.sroa.6211.0.copyload
  %337 = sext i32 %336 to i64
  %338 = icmp sgt i32 %.sroa.6211.0.copyload, 0
  %or.cond855 = select i1 %332, i1 %338, i1 false
  br i1 %or.cond855, label %.preheader272.lr.ph.split.us.split.us, label %.loopexit

.preheader272.lr.ph.split.us.split.us:            ; preds = %.preheader272.lr.ph
  %339 = icmp sgt i32 %.sroa.8.0.copyload, 0
  br i1 %339, label %.preheader272.lr.ph.split.us.split.us.split.us, label %.preheader272.lr.ph.split.us.split.us.split

.preheader272.lr.ph.split.us.split.us.split.us:   ; preds = %.preheader272.lr.ph.split.us.split.us
  %340 = zext nneg i32 %.sroa.6211.0.copyload to i64
  br i1 %333, label %.preheader272.us.us.us.us.preheader, label %.preheader272.us.us.us.preheader

.preheader272.us.us.us.preheader:                 ; preds = %.preheader272.lr.ph.split.us.split.us.split.us
  %341 = zext nneg i32 %.sroa.8.0.copyload to i64
  %342 = zext nneg i32 %.sroa.7.0.copyload to i64
  br label %.preheader272.us.us.us

.preheader272.us.us.us.us.preheader:              ; preds = %.preheader272.lr.ph.split.us.split.us.split.us
  %343 = zext nneg i32 %.sroa.7.0.copyload to i64
  %344 = zext nneg i32 %.sroa.8.0.copyload to i64
  br label %.preheader272.us.us.us.us

.preheader272.us.us.us.us:                        ; preds = %.preheader272.us.us.us.us.preheader, %._crit_edge.split.us.split.us.split.us.us.us.us.us
  %.0295.us.us.us.us = phi ptr [ %373, %._crit_edge.split.us.split.us.split.us.us.us.us.us ], [ %3, %.preheader272.us.us.us.us.preheader ]
  %.0240291.us.us.us.us = phi ptr [ %372, %._crit_edge.split.us.split.us.split.us.us.us.us.us ], [ %1, %.preheader272.us.us.us.us.preheader ]
  %.3259290.us.us.us.us = phi i32 [ %374, %._crit_edge.split.us.split.us.split.us.us.us.us.us ], [ 0, %.preheader272.us.us.us.us.preheader ]
  br label %.preheader271.us.us.us.us.us.us.us

.preheader271.us.us.us.us.us.us.us:               ; preds = %._crit_edge278.split.us.us.us.split.us.us.us.us.us.us, %.preheader272.us.us.us.us
  %indvars.iv589 = phi i64 [ %indvars.iv.next590, %._crit_edge278.split.us.us.us.split.us.us.us.us.us.us ], [ 0, %.preheader272.us.us.us.us ]
  %345 = mul nuw nsw i64 %indvars.iv589, %340
  %346 = mul nuw nsw i64 %indvars.iv589, %344
  %invariant.gep800.sink = getelementptr inbounds i8, ptr %2, i64 %346
  br label %347

347:                                              ; preds = %._crit_edge.us.us.us.us.us.us.us.us.us, %.preheader271.us.us.us.us.us.us.us
  %indvars.iv584 = phi i64 [ %indvars.iv.next585, %._crit_edge.us.us.us.us.us.us.us.us.us ], [ 0, %.preheader271.us.us.us.us.us.us.us ]
  %348 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %349 = icmp sgt i32 %348, 0
  br i1 %349, label %353, label %350

350:                                              ; preds = %347
  %351 = add nuw nsw i64 %indvars.iv584, %345
  %352 = getelementptr inbounds i32, ptr %.0295.us.us.us.us, i64 %351
  store i32 0, ptr %352, align 4, !tbaa !5
  %.pre775 = mul nuw nsw i64 %indvars.iv584, %343
  %.pre777 = add nuw nsw i64 %.pre775, %indvars.iv589
  br label %.lr.ph.us.us.us.us.us.us.us.us.us

353:                                              ; preds = %347
  %354 = mul nuw nsw i64 %indvars.iv584, %343
  %355 = add nuw nsw i64 %354, %indvars.iv589
  %356 = getelementptr inbounds i32, ptr %.0295.us.us.us.us, i64 %355
  store i32 0, ptr %356, align 4, !tbaa !5
  %.pre = add nuw nsw i64 %indvars.iv584, %345
  br label %.lr.ph.us.us.us.us.us.us.us.us.us

.lr.ph.us.us.us.us.us.us.us.us.us:                ; preds = %353, %350
  %.pre-phi778 = phi i64 [ %355, %353 ], [ %.pre777, %350 ]
  %.pre-phi = phi i64 [ %.pre, %353 ], [ %351, %350 ]
  %357 = mul nuw nsw i64 %indvars.iv584, %344
  br label %358

358:                                              ; preds = %358, %.lr.ph.us.us.us.us.us.us.us.us.us
  %indvars.iv579 = phi i64 [ %indvars.iv.next580, %358 ], [ 0, %.lr.ph.us.us.us.us.us.us.us.us.us ]
  %359 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %360 = icmp sgt i32 %359, 0
  %361 = add nuw nsw i64 %indvars.iv579, %357
  %362 = mul nuw nsw i64 %indvars.iv579, %340
  %363 = add nuw nsw i64 %362, %indvars.iv584
  %.sink866 = select i1 %360, i64 %361, i64 %363
  %.sink860.v = select i1 %360, i64 %.pre-phi778, i64 %.pre-phi
  %.sink860 = getelementptr inbounds i32, ptr %.0295.us.us.us.us, i64 %.sink860.v
  %364 = getelementptr inbounds i8, ptr %.0240291.us.us.us.us, i64 %.sink866
  %365 = load i8, ptr %364, align 1, !tbaa !26
  %366 = sext i8 %365 to i32
  %gep801 = getelementptr inbounds i8, ptr %invariant.gep800.sink, i64 %indvars.iv579
  %367 = load i8, ptr %gep801, align 1, !tbaa !26
  %368 = zext i8 %367 to i32
  %369 = mul nsw i32 %368, %366
  %370 = load i32, ptr %.sink860, align 4, !tbaa !5
  %371 = add nsw i32 %369, %370
  store i32 %371, ptr %.sink860, align 4, !tbaa !5
  %indvars.iv.next580 = add nuw nsw i64 %indvars.iv579, 1
  %exitcond583.not = icmp eq i64 %indvars.iv.next580, %344
  br i1 %exitcond583.not, label %._crit_edge.us.us.us.us.us.us.us.us.us, label %358, !llvm.loop !31

._crit_edge.us.us.us.us.us.us.us.us.us:           ; preds = %358
  %indvars.iv.next585 = add nuw nsw i64 %indvars.iv584, 1
  %exitcond588.not = icmp eq i64 %indvars.iv.next585, %340
  br i1 %exitcond588.not, label %._crit_edge278.split.us.us.us.split.us.us.us.us.us.us, label %347, !llvm.loop !32

._crit_edge278.split.us.us.us.split.us.us.us.us.us.us: ; preds = %._crit_edge.us.us.us.us.us.us.us.us.us
  %indvars.iv.next590 = add nuw nsw i64 %indvars.iv589, 1
  %exitcond593.not = icmp eq i64 %indvars.iv.next590, %343
  br i1 %exitcond593.not, label %._crit_edge.split.us.split.us.split.us.us.us.us.us, label %.preheader271.us.us.us.us.us.us.us, !llvm.loop !33

._crit_edge.split.us.split.us.split.us.us.us.us.us: ; preds = %._crit_edge278.split.us.us.us.split.us.us.us.us.us.us
  %372 = getelementptr inbounds i8, ptr %.0240291.us.us.us.us, i64 %335
  %373 = getelementptr inbounds i32, ptr %.0295.us.us.us.us, i64 %337
  %374 = add nuw nsw i32 %.3259290.us.us.us.us, 1
  %exitcond594.not = icmp eq i32 %374, %.sroa.9212.0.copyload
  br i1 %exitcond594.not, label %.loopexit, label %.preheader272.us.us.us.us, !llvm.loop !34

.preheader272.us.us.us:                           ; preds = %.preheader272.us.us.us.preheader, %._crit_edge.split.us.split.us.split.us309.us.us
  %.0295.us.us.us = phi ptr [ %396, %._crit_edge.split.us.split.us.split.us309.us.us ], [ %3, %.preheader272.us.us.us.preheader ]
  %.0240291.us.us.us = phi ptr [ %395, %._crit_edge.split.us.split.us.split.us309.us.us ], [ %1, %.preheader272.us.us.us.preheader ]
  %.3259290.us.us.us = phi i32 [ %397, %._crit_edge.split.us.split.us.split.us309.us.us ], [ 0, %.preheader272.us.us.us.preheader ]
  br label %.preheader271.us.us.us307.us.us

.preheader271.us.us.us307.us.us:                  ; preds = %.preheader272.us.us.us, %._crit_edge278.split.us.us.us.split.us.us.us
  %indvars.iv573 = phi i64 [ 0, %.preheader272.us.us.us ], [ %indvars.iv.next574, %._crit_edge278.split.us.us.us.split.us.us.us ]
  %375 = mul nuw nsw i64 %indvars.iv573, %341
  %376 = mul nuw nsw i64 %indvars.iv573, %340
  %invariant.gep796.sink = getelementptr inbounds i8, ptr %2, i64 %375
  br label %.lr.ph.us.us.us.us.us.us

.lr.ph.us.us.us.us.us.us:                         ; preds = %._crit_edge.us.us.us.us.us.us, %.preheader271.us.us.us307.us.us
  %indvars.iv568 = phi i64 [ %indvars.iv.next569, %._crit_edge.us.us.us.us.us.us ], [ 0, %.preheader271.us.us.us307.us.us ]
  %377 = add nuw nsw i64 %indvars.iv568, %376
  %378 = mul nuw nsw i64 %indvars.iv568, %341
  %379 = mul nuw nsw i64 %indvars.iv568, %342
  %380 = add nuw nsw i64 %379, %indvars.iv573
  br label %381

381:                                              ; preds = %381, %.lr.ph.us.us.us.us.us.us
  %indvars.iv563 = phi i64 [ %indvars.iv.next564, %381 ], [ 0, %.lr.ph.us.us.us.us.us.us ]
  %382 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %383 = icmp sgt i32 %382, 0
  %384 = add nuw nsw i64 %indvars.iv563, %378
  %385 = mul nuw nsw i64 %indvars.iv563, %340
  %386 = add nuw nsw i64 %385, %indvars.iv568
  %.sink877 = select i1 %383, i64 %384, i64 %386
  %.sink871.v = select i1 %383, i64 %380, i64 %377
  %.sink871 = getelementptr inbounds i32, ptr %.0295.us.us.us, i64 %.sink871.v
  %387 = getelementptr inbounds i8, ptr %.0240291.us.us.us, i64 %.sink877
  %388 = load i8, ptr %387, align 1, !tbaa !26
  %389 = sext i8 %388 to i32
  %gep797 = getelementptr inbounds i8, ptr %invariant.gep796.sink, i64 %indvars.iv563
  %390 = load i8, ptr %gep797, align 1, !tbaa !26
  %391 = zext i8 %390 to i32
  %392 = mul nsw i32 %391, %389
  %393 = load i32, ptr %.sink871, align 4, !tbaa !5
  %394 = add nsw i32 %392, %393
  store i32 %394, ptr %.sink871, align 4, !tbaa !5
  %indvars.iv.next564 = add nuw nsw i64 %indvars.iv563, 1
  %exitcond567.not = icmp eq i64 %indvars.iv.next564, %341
  br i1 %exitcond567.not, label %._crit_edge.us.us.us.us.us.us, label %381, !llvm.loop !31

._crit_edge.us.us.us.us.us.us:                    ; preds = %381
  %indvars.iv.next569 = add nuw nsw i64 %indvars.iv568, 1
  %exitcond572.not = icmp eq i64 %indvars.iv.next569, %340
  br i1 %exitcond572.not, label %._crit_edge278.split.us.us.us.split.us.us.us, label %.lr.ph.us.us.us.us.us.us, !llvm.loop !32

._crit_edge278.split.us.us.us.split.us.us.us:     ; preds = %._crit_edge.us.us.us.us.us.us
  %indvars.iv.next574 = add nuw nsw i64 %indvars.iv573, 1
  %exitcond577.not = icmp eq i64 %indvars.iv.next574, %342
  br i1 %exitcond577.not, label %._crit_edge.split.us.split.us.split.us309.us.us, label %.preheader271.us.us.us307.us.us, !llvm.loop !33

._crit_edge.split.us.split.us.split.us309.us.us:  ; preds = %._crit_edge278.split.us.us.us.split.us.us.us
  %395 = getelementptr inbounds i8, ptr %.0240291.us.us.us, i64 %335
  %396 = getelementptr inbounds i32, ptr %.0295.us.us.us, i64 %337
  %397 = add nuw nsw i32 %.3259290.us.us.us, 1
  %exitcond578.not = icmp eq i32 %397, %.sroa.9212.0.copyload
  br i1 %exitcond578.not, label %.loopexit, label %.preheader272.us.us.us, !llvm.loop !34

.preheader272.lr.ph.split.us.split.us.split:      ; preds = %.preheader272.lr.ph.split.us.split.us
  br i1 %333, label %.preheader272.us.us.us313.preheader, label %.loopexit

.preheader272.us.us.us313.preheader:              ; preds = %.preheader272.lr.ph.split.us.split.us.split
  %398 = zext nneg i32 %.sroa.7.0.copyload to i64
  %399 = zext nneg i32 %.sroa.6211.0.copyload to i64
  %xtraiter = and i64 %399, 1
  %400 = icmp eq i32 %.sroa.6211.0.copyload, 1
  %unroll_iter = and i64 %399, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader272.us.us.us313

.preheader272.us.us.us313:                        ; preds = %.preheader272.us.us.us313.preheader, %._crit_edge.split.us.split.split.us.us.us.us
  %.0295.us.us.us314 = phi ptr [ %420, %._crit_edge.split.us.split.split.us.us.us.us ], [ %3, %.preheader272.us.us.us313.preheader ]
  %.3259290.us.us.us316 = phi i32 [ %421, %._crit_edge.split.us.split.split.us.us.us.us ], [ 0, %.preheader272.us.us.us313.preheader ]
  br label %.preheader271.us.us288.us.us.us

.preheader271.us.us288.us.us.us:                  ; preds = %._crit_edge278.split.split.us.us.us.us.us.us, %.preheader272.us.us.us313
  %indvars.iv557 = phi i64 [ %indvars.iv.next558, %._crit_edge278.split.split.us.us.us.us.us.us ], [ 0, %.preheader272.us.us.us313 ]
  %401 = mul nuw nsw i64 %indvars.iv557, %399
  br i1 %400, label %._crit_edge278.split.split.us.us.us.us.us.us.unr-lcssa, label %.preheader271.us.us288.us.us.us.new

.preheader271.us.us288.us.us.us.new:              ; preds = %.preheader271.us.us288.us.us.us, %.preheader271.us.us288.us.us.us.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader271.us.us288.us.us.us.new ], [ 0, %.preheader271.us.us288.us.us.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader271.us.us288.us.us.us.new ], [ 0, %.preheader271.us.us288.us.us.us ]
  %402 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %403 = icmp sgt i32 %402, 0
  %404 = mul nuw nsw i64 %indvars.iv, %398
  %405 = add nuw nsw i64 %404, %indvars.iv557
  %406 = add nuw nsw i64 %indvars.iv, %401
  %.sink879 = select i1 %403, i64 %405, i64 %406
  %407 = getelementptr inbounds i32, ptr %.0295.us.us.us314, i64 %.sink879
  store i32 0, ptr %407, align 4, !tbaa !5
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %408 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %409 = icmp sgt i32 %408, 0
  %410 = mul nuw nsw i64 %indvars.iv.next, %398
  %411 = add nuw nsw i64 %410, %indvars.iv557
  %412 = add nuw nsw i64 %indvars.iv.next, %401
  %.sink879.1 = select i1 %409, i64 %411, i64 %412
  %413 = getelementptr inbounds i32, ptr %.0295.us.us.us314, i64 %.sink879.1
  store i32 0, ptr %413, align 4, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge278.split.split.us.us.us.us.us.us.unr-lcssa, label %.preheader271.us.us288.us.us.us.new, !llvm.loop !32

._crit_edge278.split.split.us.us.us.us.us.us.unr-lcssa: ; preds = %.preheader271.us.us288.us.us.us.new, %.preheader271.us.us288.us.us.us
  %indvars.iv.unr = phi i64 [ 0, %.preheader271.us.us288.us.us.us ], [ %indvars.iv.next.1, %.preheader271.us.us288.us.us.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge278.split.split.us.us.us.us.us.us, label %._crit_edge278.split.split.us.us.us.us.us.us.epilog-lcssa

._crit_edge278.split.split.us.us.us.us.us.us.epilog-lcssa: ; preds = %._crit_edge278.split.split.us.us.us.us.us.us.unr-lcssa
  %414 = load i32, ptr %.sroa.14.0..sroa_idx, align 8, !tbaa !11
  %415 = icmp sgt i32 %414, 0
  %416 = mul nuw nsw i64 %indvars.iv.unr, %398
  %417 = add nuw nsw i64 %416, %indvars.iv557
  %418 = add nuw nsw i64 %indvars.iv.unr, %401
  %.sink879.epil = select i1 %415, i64 %417, i64 %418
  %419 = getelementptr inbounds i32, ptr %.0295.us.us.us314, i64 %.sink879.epil
  store i32 0, ptr %419, align 4, !tbaa !5
  br label %._crit_edge278.split.split.us.us.us.us.us.us

._crit_edge278.split.split.us.us.us.us.us.us:     ; preds = %._crit_edge278.split.split.us.us.us.us.us.us.unr-lcssa, %._crit_edge278.split.split.us.us.us.us.us.us.epilog-lcssa
  %indvars.iv.next558 = add nuw nsw i64 %indvars.iv557, 1
  %exitcond561.not = icmp eq i64 %indvars.iv.next558, %398
  br i1 %exitcond561.not, label %._crit_edge.split.us.split.split.us.us.us.us, label %.preheader271.us.us288.us.us.us, !llvm.loop !33

._crit_edge.split.us.split.split.us.us.us.us:     ; preds = %._crit_edge278.split.split.us.us.us.us.us.us
  %420 = getelementptr inbounds i32, ptr %.0295.us.us.us314, i64 %337
  %421 = add nuw nsw i32 %.3259290.us.us.us316, 1
  %exitcond562.not = icmp eq i32 %421, %.sroa.9212.0.copyload
  br i1 %exitcond562.not, label %.loopexit, label %.preheader272.us.us.us313, !llvm.loop !34

.loopexit.loopexit900.unr-lcssa:                  ; preds = %.preheader261.us.us.us519, %.preheader261.us.us.us519.preheader
  %.0254489.us.us.us520.unr = phi ptr [ %3, %.preheader261.us.us.us519.preheader ], [ %233, %.preheader261.us.us.us519 ]
  %lcmp.mod931.not = icmp eq i64 %xtraiter930, 0
  br i1 %lcmp.mod931.not, label %.loopexit, label %.preheader261.us.us.us519.epil

.preheader261.us.us.us519.epil:                   ; preds = %.loopexit.loopexit900.unr-lcssa, %.preheader261.us.us.us519.epil
  %.0254489.us.us.us520.epil = phi ptr [ %422, %.preheader261.us.us.us519.epil ], [ %.0254489.us.us.us520.unr, %.loopexit.loopexit900.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.preheader261.us.us.us519.epil ], [ 0, %.loopexit.loopexit900.unr-lcssa ]
  tail call void @llvm.memset.p0.i64(ptr align 4 %.0254489.us.us.us520.epil, i8 0, i64 %224, i1 false), !tbaa !17
  %422 = getelementptr float, ptr %.0254489.us.us.us520.epil, i64 %104
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter930
  br i1 %epil.iter.cmp.not, label %.loopexit, label %.preheader261.us.us.us519.epil, !llvm.loop !35

.loopexit:                                        ; preds = %._crit_edge.split.us.split.split.us.us.us.us, %._crit_edge.split.us.split.us.split.us309.us.us, %._crit_edge.split.us.split.us.split.us.us.us.us.us, %._crit_edge.split.us.split.split.us.us.us.us363, %._crit_edge.split.us.split.us.split.us351.us.us, %._crit_edge.split.us.split.us.split.us.us.us.us.us364, %._crit_edge.split.us.split.us439.split.us446, %._crit_edge.split.us.split.us439.split.us.us.us, %._crit_edge.split.us.split.us.us.us.us, %.loopexit.loopexit900.unr-lcssa, %.preheader261.us.us.us519.epil, %._crit_edge.split.us.split.us.split.split.us504.us.us, %._crit_edge.split.us.split.us.split.split.us.us.us.us.us, %._crit_edge.split.us.split.us.split.us.split.us512.us.us.us, %._crit_edge.split.us.split.us.split.us.split.us.us.us.us.us.us, %.preheader272.lr.ph.split.us.split.us.split, %.preheader272.lr.ph, %.preheader268.lr.ph.split.us.split.us.split, %.preheader268.lr.ph, %.preheader261.lr.ph.split.us.split.us.split, %.preheader261.lr.ph, %.preheader264.lr.ph, %.preheader269, %.preheader265, %.preheader262, %4, %328
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #2

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { 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 = !{!"double", !7, i64 0}
!11 = !{!12, !6, i64 48}
!12 = !{!"spmm_def", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !10, i64 40, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84}
!13 = !{!14, !14, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !18, i64 0}
!18 = !{!"float", !7, i64 0}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = !{!7, !7, i64 0}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = distinct !{!29, !16}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = distinct !{!34, !16}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.unroll.disable"}


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