; LLVM IR from libxsmm/libxsmm :: tests (gemm)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%union.libxsmm_xmmfunction = type { ptr }
%struct.libxsmm_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_matdiff_info = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32 }

@__const.main.m = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.n = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.k = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.lda = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.ldb = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.ldc = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.alpha = external hidden unnamed_addr constant [37 x double], align 16
@__const.main.beta = external hidden unnamed_addr constant [37 x double], align 16
@__const.main.transa = external hidden unnamed_addr constant [6 x i8], align 1
@__const.main.transb = external hidden unnamed_addr constant [6 x i8], align 1
@.str = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [62 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [15 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca [37 x i32], align 16
  %3 = alloca [37 x i32], align 16
  %4 = alloca [37 x i32], align 16
  %5 = alloca [37 x i32], align 16
  %6 = alloca [37 x i32], align 16
  %7 = alloca [37 x i32], align 16
  %8 = alloca [37 x double], align 16
  %9 = alloca [37 x double], align 16
  %10 = alloca [6 x i8], align 1
  %11 = alloca [6 x i8], align 1
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca i64, align 8
  %50 = alloca i32, align 4
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca i64, align 8
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca %union.libxsmm_xmmfunction, align 8
  %74 = alloca %struct.libxsmm_gemm_shape, align 8
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca %struct.libxsmm_matdiff_info, align 8
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  call void @llvm.lifetime.start.p0(i64 148, ptr %2) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %2, ptr align 16 @__const.main.m, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 148, ptr %3) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %3, ptr align 16 @__const.main.n, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 148, ptr %4) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %4, ptr align 16 @__const.main.k, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 148, ptr %5) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %5, ptr align 16 @__const.main.lda, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 148, ptr %6) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %6, ptr align 16 @__const.main.ldb, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 148, ptr %7) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %7, ptr align 16 @__const.main.ldc, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 296, ptr %8) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %8, ptr align 16 @__const.main.alpha, i64 296, i1 false)
  call void @llvm.lifetime.start.p0(i64 296, ptr %9) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %9, ptr align 16 @__const.main.beta, i64 296, i1 false)
  call void @llvm.lifetime.start.p0(i64 6, ptr %10) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %10, ptr align 1 @__const.main.transa, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 6, ptr %11) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %11, ptr align 1 @__const.main.transb, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 37, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 5, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  store i32 0, ptr %16, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  store i32 0, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  store i32 0, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 1, ptr %19, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  store ptr null, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  store ptr null, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  store ptr null, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  store ptr null, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  store ptr null, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 0, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.x86.sse.stmxcsr(ptr %29)
  %82 = load i32, ptr %29, align 4
  %83 = and i32 %82, 8064
  store i32 %83, ptr %28, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  store i32 1152, ptr %30, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  store i32 0, ptr %31, align 4, !tbaa !5
  call void @llvm.x86.sse.stmxcsr(ptr %32)
  %84 = load i32, ptr %32, align 4
  %85 = and i32 %84, -8065
  %86 = load i32, ptr %28, align 4, !tbaa !5
  %87 = and i32 %86, -1153
  %88 = or i32 %85, %87
  store i32 %88, ptr %33, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr %33)
  store i32 0, ptr %26, align 4, !tbaa !5
  br label %89

89:                                               ; preds = %207, %0
  %90 = load i32, ptr %26, align 4, !tbaa !5
  %91 = icmp slt i32 %90, 37
  br i1 %91, label %92, label %210

92:                                               ; preds = %89
  %93 = load i32, ptr %26, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !5
  %97 = load i32, ptr %19, align 4, !tbaa !5
  %98 = sub nsw i32 %97, 1
  %99 = add nsw i32 %96, %98
  %100 = load i32, ptr %19, align 4, !tbaa !5
  %101 = sdiv i32 %99, %100
  %102 = load i32, ptr %19, align 4, !tbaa !5
  %103 = mul nsw i32 %101, %102
  %104 = load i32, ptr %26, align 4, !tbaa !5
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %105
  store i32 %103, ptr %106, align 4, !tbaa !5
  %107 = load i32, ptr %26, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [37 x i32], ptr %3, i64 0, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !5
  %111 = load i32, ptr %19, align 4, !tbaa !5
  %112 = sub nsw i32 %111, 1
  %113 = add nsw i32 %110, %112
  %114 = load i32, ptr %19, align 4, !tbaa !5
  %115 = sdiv i32 %113, %114
  %116 = load i32, ptr %19, align 4, !tbaa !5
  %117 = mul nsw i32 %115, %116
  %118 = load i32, ptr %26, align 4, !tbaa !5
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds [37 x i32], ptr %3, i64 0, i64 %119
  store i32 %117, ptr %120, align 4, !tbaa !5
  %121 = load i32, ptr %26, align 4, !tbaa !5
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds [37 x i32], ptr %4, i64 0, i64 %122
  %124 = load i32, ptr %123, align 4, !tbaa !5
  %125 = load i32, ptr %19, align 4, !tbaa !5
  %126 = sub nsw i32 %125, 1
  %127 = add nsw i32 %124, %126
  %128 = load i32, ptr %19, align 4, !tbaa !5
  %129 = sdiv i32 %127, %128
  %130 = load i32, ptr %19, align 4, !tbaa !5
  %131 = mul nsw i32 %129, %130
  %132 = load i32, ptr %26, align 4, !tbaa !5
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds [37 x i32], ptr %4, i64 0, i64 %133
  store i32 %131, ptr %134, align 4, !tbaa !5
  %135 = load i32, ptr %26, align 4, !tbaa !5
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 %136
  %138 = load i32, ptr %137, align 4, !tbaa !5
  %139 = load i32, ptr %26, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %140
  %142 = load i32, ptr %141, align 4, !tbaa !5
  %143 = icmp slt i32 %138, %142
  br i1 %143, label %144, label %149

144:                                              ; preds = %92
  %145 = load i32, ptr %26, align 4, !tbaa !5
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %146
  %148 = load i32, ptr %147, align 4, !tbaa !5
  br label %154

149:                                              ; preds = %92
  %150 = load i32, ptr %26, align 4, !tbaa !5
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !5
  br label %154

154:                                              ; preds = %149, %144
  %155 = phi i32 [ %148, %144 ], [ %153, %149 ]
  %156 = load i32, ptr %26, align 4, !tbaa !5
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 %157
  store i32 %155, ptr %158, align 4, !tbaa !5
  %159 = load i32, ptr %26, align 4, !tbaa !5
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !5
  %163 = load i32, ptr %26, align 4, !tbaa !5
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds [37 x i32], ptr %4, i64 0, i64 %164
  %166 = load i32, ptr %165, align 4, !tbaa !5
  %167 = icmp slt i32 %162, %166
  br i1 %167, label %168, label %173

168:                                              ; preds = %154
  %169 = load i32, ptr %26, align 4, !tbaa !5
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds [37 x i32], ptr %4, i64 0, i64 %170
  %172 = load i32, ptr %171, align 4, !tbaa !5
  br label %178

173:                                              ; preds = %154
  %174 = load i32, ptr %26, align 4, !tbaa !5
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !5
  br label %178

178:                                              ; preds = %173, %168
  %179 = phi i32 [ %172, %168 ], [ %177, %173 ]
  %180 = load i32, ptr %26, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 %181
  store i32 %179, ptr %182, align 4, !tbaa !5
  %183 = load i32, ptr %26, align 4, !tbaa !5
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 %184
  %186 = load i32, ptr %185, align 4, !tbaa !5
  %187 = load i32, ptr %26, align 4, !tbaa !5
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !5
  %191 = icmp slt i32 %186, %190
  br i1 %191, label %192, label %197

192:                                              ; preds = %178
  %193 = load i32, ptr %26, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %194
  %196 = load i32, ptr %195, align 4, !tbaa !5
  br label %202

197:                                              ; preds = %178
  %198 = load i32, ptr %26, align 4, !tbaa !5
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !5
  br label %202

202:                                              ; preds = %197, %192
  %203 = phi i32 [ %196, %192 ], [ %201, %197 ]
  %204 = load i32, ptr %26, align 4, !tbaa !5
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 %205
  store i32 %203, ptr %206, align 4, !tbaa !5
  br label %207

207:                                              ; preds = %202
  %208 = load i32, ptr %26, align 4, !tbaa !5
  %209 = add nsw i32 %208, 1
  store i32 %209, ptr %26, align 4, !tbaa !5
  br label %89, !llvm.loop !11

210:                                              ; preds = %89
  store i32 0, ptr %26, align 4, !tbaa !5
  br label %211

211:                                              ; preds = %301, %210
  %212 = load i32, ptr %26, align 4, !tbaa !5
  %213 = icmp slt i32 %212, 37
  br i1 %213, label %214, label %304

214:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %215 = load i32, ptr %26, align 4, !tbaa !5
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !5
  %219 = load i32, ptr %26, align 4, !tbaa !5
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds [37 x i32], ptr %4, i64 0, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !5
  %223 = mul nsw i32 %218, %222
  store i32 %223, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %224 = load i32, ptr %26, align 4, !tbaa !5
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 %225
  %227 = load i32, ptr %226, align 4, !tbaa !5
  %228 = load i32, ptr %26, align 4, !tbaa !5
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds [37 x i32], ptr %3, i64 0, i64 %229
  %231 = load i32, ptr %230, align 4, !tbaa !5
  %232 = mul nsw i32 %227, %231
  store i32 %232, ptr %35, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %233 = load i32, ptr %26, align 4, !tbaa !5
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 %234
  %236 = load i32, ptr %235, align 4, !tbaa !5
  %237 = load i32, ptr %26, align 4, !tbaa !5
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds [37 x i32], ptr %3, i64 0, i64 %238
  %240 = load i32, ptr %239, align 4, !tbaa !5
  %241 = mul nsw i32 %236, %240
  store i32 %241, ptr %36, align 4, !tbaa !5
  %242 = load i32, ptr %26, align 4, !tbaa !5
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %243
  %245 = load i32, ptr %244, align 4, !tbaa !5
  %246 = load i32, ptr %26, align 4, !tbaa !5
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !5
  %250 = icmp sle i32 %245, %249
  br i1 %250, label %251, label %272

251:                                              ; preds = %214
  %252 = load i32, ptr %26, align 4, !tbaa !5
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [37 x i32], ptr %4, i64 0, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !5
  %256 = load i32, ptr %26, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 %257
  %259 = load i32, ptr %258, align 4, !tbaa !5
  %260 = icmp sle i32 %255, %259
  br i1 %260, label %261, label %272

261:                                              ; preds = %251
  %262 = load i32, ptr %26, align 4, !tbaa !5
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %263
  %265 = load i32, ptr %264, align 4, !tbaa !5
  %266 = load i32, ptr %26, align 4, !tbaa !5
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !5
  %270 = icmp sle i32 %265, %269
  br i1 %270, label %271, label %272

271:                                              ; preds = %261
  br label %273

272:                                              ; preds = %261, %251, %214
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 94, ptr noundef @__PRETTY_FUNCTION__.main) #9
  unreachable

273:                                              ; preds = %271
  %274 = load i32, ptr %16, align 4, !tbaa !5
  %275 = load i32, ptr %34, align 4, !tbaa !5
  %276 = icmp slt i32 %274, %275
  br i1 %276, label %277, label %279

277:                                              ; preds = %273
  %278 = load i32, ptr %34, align 4, !tbaa !5
  br label %281

279:                                              ; preds = %273
  %280 = load i32, ptr %16, align 4, !tbaa !5
  br label %281

281:                                              ; preds = %279, %277
  %282 = phi i32 [ %278, %277 ], [ %280, %279 ]
  store i32 %282, ptr %16, align 4, !tbaa !5
  %283 = load i32, ptr %17, align 4, !tbaa !5
  %284 = load i32, ptr %35, align 4, !tbaa !5
  %285 = icmp slt i32 %283, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %281
  %287 = load i32, ptr %35, align 4, !tbaa !5
  br label %290

288:                                              ; preds = %281
  %289 = load i32, ptr %17, align 4, !tbaa !5
  br label %290

290:                                              ; preds = %288, %286
  %291 = phi i32 [ %287, %286 ], [ %289, %288 ]
  store i32 %291, ptr %17, align 4, !tbaa !5
  %292 = load i32, ptr %18, align 4, !tbaa !5
  %293 = load i32, ptr %36, align 4, !tbaa !5
  %294 = icmp slt i32 %292, %293
  br i1 %294, label %295, label %297

295:                                              ; preds = %290
  %296 = load i32, ptr %36, align 4, !tbaa !5
  br label %299

297:                                              ; preds = %290
  %298 = load i32, ptr %18, align 4, !tbaa !5
  br label %299

299:                                              ; preds = %297, %295
  %300 = phi i32 [ %296, %295 ], [ %298, %297 ]
  store i32 %300, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %301

301:                                              ; preds = %299
  %302 = load i32, ptr %26, align 4, !tbaa !5
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr %26, align 4, !tbaa !5
  br label %211, !llvm.loop !13

304:                                              ; preds = %211
  %305 = load i32, ptr %16, align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = mul i64 %306, 8
  %308 = call noalias ptr @libxsmm_malloc(i64 noundef %307)
  store ptr %308, ptr %20, align 8, !tbaa !9
  %309 = load i32, ptr %17, align 4, !tbaa !5
  %310 = sext i32 %309 to i64
  %311 = mul i64 %310, 8
  %312 = call noalias ptr @libxsmm_malloc(i64 noundef %311)
  store ptr %312, ptr %21, align 8, !tbaa !9
  %313 = load i32, ptr %18, align 4, !tbaa !5
  %314 = sext i32 %313 to i64
  %315 = mul i64 %314, 8
  %316 = call noalias ptr @libxsmm_malloc(i64 noundef %315)
  store ptr %316, ptr %22, align 8, !tbaa !9
  %317 = load i32, ptr %18, align 4, !tbaa !5
  %318 = sext i32 %317 to i64
  %319 = mul i64 %318, 8
  %320 = call noalias ptr @libxsmm_malloc(i64 noundef %319)
  store ptr %320, ptr %23, align 8, !tbaa !9
  %321 = load ptr, ptr %23, align 8, !tbaa !9
  %322 = icmp ne ptr null, %321
  br i1 %322, label %323, label %324

323:                                              ; preds = %304
  br label %325

324:                                              ; preds = %304
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 104, ptr noundef @__PRETTY_FUNCTION__.main) #9
  unreachable

325:                                              ; preds = %323
  %326 = load i32, ptr %18, align 4, !tbaa !5
  %327 = sext i32 %326 to i64
  %328 = mul i64 %327, 8
  %329 = call noalias ptr @libxsmm_malloc(i64 noundef %328)
  store ptr %329, ptr %24, align 8, !tbaa !9
  %330 = load ptr, ptr %24, align 8, !tbaa !9
  %331 = icmp ne ptr null, %330
  br i1 %331, label %332, label %333

332:                                              ; preds = %325
  br label %334

333:                                              ; preds = %325
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 108, ptr noundef @__PRETTY_FUNCTION__.main) #9
  unreachable

334:                                              ; preds = %332
  %335 = load ptr, ptr %20, align 8, !tbaa !9
  %336 = icmp ne ptr null, %335
  br i1 %336, label %337, label %344

337:                                              ; preds = %334
  %338 = load ptr, ptr %21, align 8, !tbaa !9
  %339 = icmp ne ptr null, %338
  br i1 %339, label %340, label %344

340:                                              ; preds = %337
  %341 = load ptr, ptr %22, align 8, !tbaa !9
  %342 = icmp ne ptr null, %341
  br i1 %342, label %343, label %344

343:                                              ; preds = %340
  br label %345

344:                                              ; preds = %340, %337, %334
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 110, ptr noundef @__PRETTY_FUNCTION__.main) #9
  unreachable

345:                                              ; preds = %343
  br label %346

346:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  store double 4.200000e+01, ptr %37, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %347 = load double, ptr %37, align 8, !tbaa !14
  %348 = call double @llvm.fmuladd.f64(double %347, double 1.000000e+00, double 1.000000e+00)
  store double %348, ptr %38, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %349 = load i32, ptr %16, align 4, !tbaa !5
  store i32 %349, ptr %39, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 1, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  %350 = load i32, ptr %16, align 4, !tbaa !5
  store i32 %350, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  store i32 0, ptr %42, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  store i32 0, ptr %43, align 4, !tbaa !5
  %351 = load double, ptr %37, align 8, !tbaa !14
  %352 = fcmp une double 0.000000e+00, %351
  br i1 %352, label %353, label %409

353:                                              ; preds = %346
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %354

354:                                              ; preds = %405, %353
  %355 = load i32, ptr %42, align 4, !tbaa !5
  %356 = icmp slt i32 %355, 1
  br i1 %356, label %357, label %408

357:                                              ; preds = %354
  store i32 0, ptr %43, align 4, !tbaa !5
  br label %358

358:                                              ; preds = %382, %357
  %359 = load i32, ptr %43, align 4, !tbaa !5
  %360 = load i32, ptr %39, align 4, !tbaa !5
  %361 = icmp slt i32 %359, %360
  br i1 %361, label %362, label %385

362:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  %363 = load i32, ptr %42, align 4, !tbaa !5
  %364 = load i32, ptr %41, align 4, !tbaa !5
  %365 = mul nsw i32 %363, %364
  %366 = load i32, ptr %43, align 4, !tbaa !5
  %367 = add nsw i32 %365, %366
  store i32 %367, ptr %44, align 4, !tbaa !5
  %368 = load double, ptr %38, align 8, !tbaa !14
  %369 = load i32, ptr %42, align 4, !tbaa !5
  %370 = sitofp i32 %369 to double
  %371 = load i32, ptr %39, align 4, !tbaa !5
  %372 = sitofp i32 %371 to double
  %373 = call double @llvm.fmuladd.f64(double %370, double %372, double 1.000000e+00)
  %374 = load i32, ptr %43, align 4, !tbaa !5
  %375 = sitofp i32 %374 to double
  %376 = fadd double %373, %375
  %377 = fmul double %368, %376
  %378 = load ptr, ptr %20, align 8, !tbaa !9
  %379 = load i32, ptr %44, align 4, !tbaa !5
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds double, ptr %378, i64 %380
  store double %377, ptr %381, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  br label %382

382:                                              ; preds = %362
  %383 = load i32, ptr %43, align 4, !tbaa !5
  %384 = add nsw i32 %383, 1
  store i32 %384, ptr %43, align 4, !tbaa !5
  br label %358, !llvm.loop !16

385:                                              ; preds = %358
  br label %386

386:                                              ; preds = %401, %385
  %387 = load i32, ptr %43, align 4, !tbaa !5
  %388 = load i32, ptr %41, align 4, !tbaa !5
  %389 = icmp slt i32 %387, %388
  br i1 %389, label %390, label %404

390:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  %391 = load i32, ptr %42, align 4, !tbaa !5
  %392 = load i32, ptr %41, align 4, !tbaa !5
  %393 = mul nsw i32 %391, %392
  %394 = load i32, ptr %43, align 4, !tbaa !5
  %395 = add nsw i32 %393, %394
  store i32 %395, ptr %45, align 4, !tbaa !5
  %396 = load double, ptr %37, align 8, !tbaa !14
  %397 = load ptr, ptr %20, align 8, !tbaa !9
  %398 = load i32, ptr %45, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds double, ptr %397, i64 %399
  store double %396, ptr %400, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  br label %401

401:                                              ; preds = %390
  %402 = load i32, ptr %43, align 4, !tbaa !5
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %43, align 4, !tbaa !5
  br label %386, !llvm.loop !17

404:                                              ; preds = %386
  br label %405

405:                                              ; preds = %404
  %406 = load i32, ptr %42, align 4, !tbaa !5
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %42, align 4, !tbaa !5
  br label %354, !llvm.loop !18

408:                                              ; preds = %354
  br label %459

409:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  %410 = load i32, ptr %41, align 4, !tbaa !5
  %411 = mul nsw i32 1, %410
  store i32 %411, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #4
  %412 = load i32, ptr %46, align 4, !tbaa !5
  %413 = add nsw i32 %412, 1
  %414 = sdiv i32 %413, 2
  %415 = sitofp i32 %414 to double
  store double %415, ptr %47, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  %416 = load double, ptr %47, align 8, !tbaa !14
  %417 = fdiv double 1.000000e+00, %416
  store double %417, ptr %48, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #4
  %418 = load i32, ptr %46, align 4, !tbaa !5
  %419 = sext i32 %418 to i64
  %420 = call i64 @libxsmm_coprime2(i64 noundef %419)
  store i64 %420, ptr %49, align 8, !tbaa !19
  store i32 0, ptr %42, align 4, !tbaa !5
  br label %421

421:                                              ; preds = %455, %409
  %422 = load i32, ptr %42, align 4, !tbaa !5
  %423 = icmp slt i32 %422, 1
  br i1 %423, label %424, label %458

424:                                              ; preds = %421
  store i32 0, ptr %43, align 4, !tbaa !5
  br label %425

425:                                              ; preds = %451, %424
  %426 = load i32, ptr %43, align 4, !tbaa !5
  %427 = load i32, ptr %41, align 4, !tbaa !5
  %428 = icmp slt i32 %426, %427
  br i1 %428, label %429, label %454

429:                                              ; preds = %425
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %430 = load i32, ptr %42, align 4, !tbaa !5
  %431 = load i32, ptr %41, align 4, !tbaa !5
  %432 = mul nsw i32 %430, %431
  %433 = load i32, ptr %43, align 4, !tbaa !5
  %434 = add nsw i32 %432, %433
  store i32 %434, ptr %50, align 4, !tbaa !5
  %435 = load double, ptr %48, align 8, !tbaa !14
  %436 = load i64, ptr %49, align 8, !tbaa !19
  %437 = load i32, ptr %50, align 4, !tbaa !5
  %438 = sext i32 %437 to i64
  %439 = mul i64 %436, %438
  %440 = load i32, ptr %46, align 4, !tbaa !5
  %441 = sext i32 %440 to i64
  %442 = urem i64 %439, %441
  %443 = uitofp i64 %442 to double
  %444 = load double, ptr %47, align 8, !tbaa !14
  %445 = fsub double %443, %444
  %446 = fmul double %435, %445
  %447 = load ptr, ptr %20, align 8, !tbaa !9
  %448 = load i32, ptr %50, align 4, !tbaa !5
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %447, i64 %449
  store double %446, ptr %450, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  br label %451

451:                                              ; preds = %429
  %452 = load i32, ptr %43, align 4, !tbaa !5
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %43, align 4, !tbaa !5
  br label %425, !llvm.loop !21

454:                                              ; preds = %425
  br label %455

455:                                              ; preds = %454
  %456 = load i32, ptr %42, align 4, !tbaa !5
  %457 = add nsw i32 %456, 1
  store i32 %457, ptr %42, align 4, !tbaa !5
  br label %421, !llvm.loop !22

458:                                              ; preds = %421
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  br label %459

459:                                              ; preds = %458, %408
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  br label %460

460:                                              ; preds = %459
  br label %461

461:                                              ; preds = %460
  br label %462

462:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  store double 2.400000e+01, ptr %51, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  %463 = load double, ptr %51, align 8, !tbaa !14
  %464 = call double @llvm.fmuladd.f64(double %463, double 1.000000e+00, double 1.000000e+00)
  store double %464, ptr %52, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  %465 = load i32, ptr %17, align 4, !tbaa !5
  store i32 %465, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  store i32 1, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  %466 = load i32, ptr %17, align 4, !tbaa !5
  store i32 %466, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  store i32 0, ptr %56, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #4
  store i32 0, ptr %57, align 4, !tbaa !5
  %467 = load double, ptr %51, align 8, !tbaa !14
  %468 = fcmp une double 0.000000e+00, %467
  br i1 %468, label %469, label %525

469:                                              ; preds = %462
  store i32 0, ptr %56, align 4, !tbaa !5
  br label %470

470:                                              ; preds = %521, %469
  %471 = load i32, ptr %56, align 4, !tbaa !5
  %472 = icmp slt i32 %471, 1
  br i1 %472, label %473, label %524

473:                                              ; preds = %470
  store i32 0, ptr %57, align 4, !tbaa !5
  br label %474

474:                                              ; preds = %498, %473
  %475 = load i32, ptr %57, align 4, !tbaa !5
  %476 = load i32, ptr %53, align 4, !tbaa !5
  %477 = icmp slt i32 %475, %476
  br i1 %477, label %478, label %501

478:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  %479 = load i32, ptr %56, align 4, !tbaa !5
  %480 = load i32, ptr %55, align 4, !tbaa !5
  %481 = mul nsw i32 %479, %480
  %482 = load i32, ptr %57, align 4, !tbaa !5
  %483 = add nsw i32 %481, %482
  store i32 %483, ptr %58, align 4, !tbaa !5
  %484 = load double, ptr %52, align 8, !tbaa !14
  %485 = load i32, ptr %56, align 4, !tbaa !5
  %486 = sitofp i32 %485 to double
  %487 = load i32, ptr %53, align 4, !tbaa !5
  %488 = sitofp i32 %487 to double
  %489 = call double @llvm.fmuladd.f64(double %486, double %488, double 1.000000e+00)
  %490 = load i32, ptr %57, align 4, !tbaa !5
  %491 = sitofp i32 %490 to double
  %492 = fadd double %489, %491
  %493 = fmul double %484, %492
  %494 = load ptr, ptr %21, align 8, !tbaa !9
  %495 = load i32, ptr %58, align 4, !tbaa !5
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds double, ptr %494, i64 %496
  store double %493, ptr %497, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  br label %498

498:                                              ; preds = %478
  %499 = load i32, ptr %57, align 4, !tbaa !5
  %500 = add nsw i32 %499, 1
  store i32 %500, ptr %57, align 4, !tbaa !5
  br label %474, !llvm.loop !23

501:                                              ; preds = %474
  br label %502

502:                                              ; preds = %517, %501
  %503 = load i32, ptr %57, align 4, !tbaa !5
  %504 = load i32, ptr %55, align 4, !tbaa !5
  %505 = icmp slt i32 %503, %504
  br i1 %505, label %506, label %520

506:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #4
  %507 = load i32, ptr %56, align 4, !tbaa !5
  %508 = load i32, ptr %55, align 4, !tbaa !5
  %509 = mul nsw i32 %507, %508
  %510 = load i32, ptr %57, align 4, !tbaa !5
  %511 = add nsw i32 %509, %510
  store i32 %511, ptr %59, align 4, !tbaa !5
  %512 = load double, ptr %51, align 8, !tbaa !14
  %513 = load ptr, ptr %21, align 8, !tbaa !9
  %514 = load i32, ptr %59, align 4, !tbaa !5
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds double, ptr %513, i64 %515
  store double %512, ptr %516, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  br label %517

517:                                              ; preds = %506
  %518 = load i32, ptr %57, align 4, !tbaa !5
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr %57, align 4, !tbaa !5
  br label %502, !llvm.loop !24

520:                                              ; preds = %502
  br label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %56, align 4, !tbaa !5
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %56, align 4, !tbaa !5
  br label %470, !llvm.loop !25

524:                                              ; preds = %470
  br label %575

525:                                              ; preds = %462
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #4
  %526 = load i32, ptr %55, align 4, !tbaa !5
  %527 = mul nsw i32 1, %526
  store i32 %527, ptr %60, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #4
  %528 = load i32, ptr %60, align 4, !tbaa !5
  %529 = add nsw i32 %528, 1
  %530 = sdiv i32 %529, 2
  %531 = sitofp i32 %530 to double
  store double %531, ptr %61, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #4
  %532 = load double, ptr %61, align 8, !tbaa !14
  %533 = fdiv double 1.000000e+00, %532
  store double %533, ptr %62, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #4
  %534 = load i32, ptr %60, align 4, !tbaa !5
  %535 = sext i32 %534 to i64
  %536 = call i64 @libxsmm_coprime2(i64 noundef %535)
  store i64 %536, ptr %63, align 8, !tbaa !19
  store i32 0, ptr %56, align 4, !tbaa !5
  br label %537

537:                                              ; preds = %571, %525
  %538 = load i32, ptr %56, align 4, !tbaa !5
  %539 = icmp slt i32 %538, 1
  br i1 %539, label %540, label %574

540:                                              ; preds = %537
  store i32 0, ptr %57, align 4, !tbaa !5
  br label %541

541:                                              ; preds = %567, %540
  %542 = load i32, ptr %57, align 4, !tbaa !5
  %543 = load i32, ptr %55, align 4, !tbaa !5
  %544 = icmp slt i32 %542, %543
  br i1 %544, label %545, label %570

545:                                              ; preds = %541
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #4
  %546 = load i32, ptr %56, align 4, !tbaa !5
  %547 = load i32, ptr %55, align 4, !tbaa !5
  %548 = mul nsw i32 %546, %547
  %549 = load i32, ptr %57, align 4, !tbaa !5
  %550 = add nsw i32 %548, %549
  store i32 %550, ptr %64, align 4, !tbaa !5
  %551 = load double, ptr %62, align 8, !tbaa !14
  %552 = load i64, ptr %63, align 8, !tbaa !19
  %553 = load i32, ptr %64, align 4, !tbaa !5
  %554 = sext i32 %553 to i64
  %555 = mul i64 %552, %554
  %556 = load i32, ptr %60, align 4, !tbaa !5
  %557 = sext i32 %556 to i64
  %558 = urem i64 %555, %557
  %559 = uitofp i64 %558 to double
  %560 = load double, ptr %61, align 8, !tbaa !14
  %561 = fsub double %559, %560
  %562 = fmul double %551, %561
  %563 = load ptr, ptr %21, align 8, !tbaa !9
  %564 = load i32, ptr %64, align 4, !tbaa !5
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds double, ptr %563, i64 %565
  store double %562, ptr %566, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #4
  br label %567

567:                                              ; preds = %545
  %568 = load i32, ptr %57, align 4, !tbaa !5
  %569 = add nsw i32 %568, 1
  store i32 %569, ptr %57, align 4, !tbaa !5
  br label %541, !llvm.loop !26

570:                                              ; preds = %541
  br label %571

571:                                              ; preds = %570
  %572 = load i32, ptr %56, align 4, !tbaa !5
  %573 = add nsw i32 %572, 1
  store i32 %573, ptr %56, align 4, !tbaa !5
  br label %537, !llvm.loop !27

574:                                              ; preds = %537
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  br label %575

575:                                              ; preds = %574, %524
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  br label %576

576:                                              ; preds = %575
  br label %577

577:                                              ; preds = %576
  store i32 0, ptr %26, align 4, !tbaa !5
  br label %578

578:                                              ; preds = %1029, %577
  %579 = load i32, ptr %26, align 4, !tbaa !5
  %580 = icmp slt i32 %579, 37
  br i1 %580, label %581, label %584

581:                                              ; preds = %578
  %582 = load i32, ptr %25, align 4, !tbaa !5
  %583 = icmp eq i32 0, %582
  br label %584

584:                                              ; preds = %581, %578
  %585 = phi i1 [ false, %578 ], [ %583, %581 ]
  br i1 %585, label %586, label %1032

586:                                              ; preds = %584
  store i32 0, ptr %27, align 4, !tbaa !5
  br label %587

587:                                              ; preds = %1025, %586
  %588 = load i32, ptr %27, align 4, !tbaa !5
  %589 = icmp slt i32 %588, 5
  br i1 %589, label %590, label %593

590:                                              ; preds = %587
  %591 = load i32, ptr %25, align 4, !tbaa !5
  %592 = icmp eq i32 0, %591
  br label %593

593:                                              ; preds = %590, %587
  %594 = phi i1 [ false, %587 ], [ %592, %590 ]
  br i1 %594, label %595, label %1028

595:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  %596 = load i32, ptr %26, align 4, !tbaa !5
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %597
  %599 = load i32, ptr %598, align 4, !tbaa !5
  store i32 %599, ptr %65, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  %600 = load i32, ptr %26, align 4, !tbaa !5
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds [37 x i32], ptr %3, i64 0, i64 %601
  %603 = load i32, ptr %602, align 4, !tbaa !5
  store i32 %603, ptr %66, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #4
  %604 = load i32, ptr %26, align 4, !tbaa !5
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds [37 x i32], ptr %4, i64 0, i64 %605
  %607 = load i32, ptr %606, align 4, !tbaa !5
  store i32 %607, ptr %67, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #4
  %608 = load i32, ptr %27, align 4, !tbaa !5
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 %609
  %611 = load i8, ptr %610, align 1, !tbaa !28
  %612 = sext i8 %611 to i32
  %613 = icmp eq i32 110, %612
  br i1 %613, label %623, label %614

614:                                              ; preds = %595
  %615 = load i8, ptr @.str.5, align 1, !tbaa !28
  %616 = sext i8 %615 to i32
  %617 = load i32, ptr %27, align 4, !tbaa !5
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 %618
  %620 = load i8, ptr %619, align 1, !tbaa !28
  %621 = sext i8 %620 to i32
  %622 = icmp eq i32 %616, %621
  br label %623

623:                                              ; preds = %614, %595
  %624 = phi i1 [ true, %595 ], [ %622, %614 ]
  %625 = zext i1 %624 to i64
  %626 = select i1 %624, i32 0, i32 1
  %627 = load i32, ptr %27, align 4, !tbaa !5
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 %628
  %630 = load i8, ptr %629, align 1, !tbaa !28
  %631 = sext i8 %630 to i32
  %632 = icmp eq i32 110, %631
  br i1 %632, label %642, label %633

633:                                              ; preds = %623
  %634 = load i8, ptr @.str.5, align 1, !tbaa !28
  %635 = sext i8 %634 to i32
  %636 = load i32, ptr %27, align 4, !tbaa !5
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 %637
  %639 = load i8, ptr %638, align 1, !tbaa !28
  %640 = sext i8 %639 to i32
  %641 = icmp eq i32 %635, %640
  br label %642

642:                                              ; preds = %633, %623
  %643 = phi i1 [ true, %623 ], [ %641, %633 ]
  %644 = zext i1 %643 to i64
  %645 = select i1 %643, i32 0, i32 2
  %646 = or i32 %626, %645
  %647 = load i32, ptr %27, align 4, !tbaa !5
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 %648
  %650 = load double, ptr %649, align 8, !tbaa !14
  %651 = fcmp oeq double %650, 0.000000e+00
  %652 = zext i1 %651 to i64
  %653 = select i1 %651, i32 4, i32 0
  %654 = or i32 %646, %653
  store i32 %654, ptr %68, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #4
  %655 = load i32, ptr %26, align 4, !tbaa !5
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds [37 x double], ptr %8, i64 0, i64 %656
  %658 = load double, ptr %657, align 8, !tbaa !14
  %659 = fcmp oeq double 1.000000e+00, %658
  br i1 %659, label %660, label %674

660:                                              ; preds = %642
  %661 = load i32, ptr %26, align 4, !tbaa !5
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 %662
  %664 = load double, ptr %663, align 8, !tbaa !14
  %665 = fcmp oeq double 1.000000e+00, %664
  br i1 %665, label %672, label %666

666:                                              ; preds = %660
  %667 = load i32, ptr %26, align 4, !tbaa !5
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 %668
  %670 = load double, ptr %669, align 8, !tbaa !14
  %671 = fcmp oeq double 0.000000e+00, %670
  br label %672

672:                                              ; preds = %666, %660
  %673 = phi i1 [ true, %660 ], [ %671, %666 ]
  br label %674

674:                                              ; preds = %672, %642
  %675 = phi i1 [ false, %642 ], [ %673, %672 ]
  %676 = zext i1 %675 to i32
  store i32 %676, ptr %69, align 4, !tbaa !5
  call void @llvm.x86.sse.stmxcsr(ptr %70)
  %677 = load i32, ptr %70, align 4
  %678 = and i32 %677, -64
  %679 = or i32 %678, 0
  store i32 %679, ptr %71, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr %71)
  %680 = load i32, ptr %27, align 4, !tbaa !5
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 %681
  %683 = load i8, ptr %682, align 1, !tbaa !28
  %684 = sext i8 %683 to i32
  %685 = icmp ne i32 78, %684
  br i1 %685, label %686, label %703

686:                                              ; preds = %674
  %687 = load i32, ptr %27, align 4, !tbaa !5
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 %688
  %690 = load i8, ptr %689, align 1, !tbaa !28
  %691 = sext i8 %690 to i32
  %692 = icmp eq i32 78, %691
  br i1 %692, label %693, label %703

693:                                              ; preds = %686
  %694 = load i32, ptr %65, align 4, !tbaa !5
  %695 = load i32, ptr %67, align 4, !tbaa !5
  %696 = icmp slt i32 %694, %695
  br i1 %696, label %697, label %699

697:                                              ; preds = %693
  %698 = load i32, ptr %65, align 4, !tbaa !5
  br label %701

699:                                              ; preds = %693
  %700 = load i32, ptr %67, align 4, !tbaa !5
  br label %701

701:                                              ; preds = %699, %697
  %702 = phi i32 [ %698, %697 ], [ %700, %699 ]
  store i32 %702, ptr %67, align 4, !tbaa !5
  store i32 %702, ptr %65, align 4, !tbaa !5
  br label %762

703:                                              ; preds = %686, %674
  %704 = load i32, ptr %27, align 4, !tbaa !5
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 %705
  %707 = load i8, ptr %706, align 1, !tbaa !28
  %708 = sext i8 %707 to i32
  %709 = icmp eq i32 78, %708
  br i1 %709, label %710, label %727

710:                                              ; preds = %703
  %711 = load i32, ptr %27, align 4, !tbaa !5
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 %712
  %714 = load i8, ptr %713, align 1, !tbaa !28
  %715 = sext i8 %714 to i32
  %716 = icmp ne i32 78, %715
  br i1 %716, label %717, label %727

717:                                              ; preds = %710
  %718 = load i32, ptr %67, align 4, !tbaa !5
  %719 = load i32, ptr %66, align 4, !tbaa !5
  %720 = icmp slt i32 %718, %719
  br i1 %720, label %721, label %723

721:                                              ; preds = %717
  %722 = load i32, ptr %67, align 4, !tbaa !5
  br label %725

723:                                              ; preds = %717
  %724 = load i32, ptr %66, align 4, !tbaa !5
  br label %725

725:                                              ; preds = %723, %721
  %726 = phi i32 [ %722, %721 ], [ %724, %723 ]
  store i32 %726, ptr %66, align 4, !tbaa !5
  store i32 %726, ptr %67, align 4, !tbaa !5
  br label %761

727:                                              ; preds = %710, %703
  %728 = load i32, ptr %27, align 4, !tbaa !5
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 %729
  %731 = load i8, ptr %730, align 1, !tbaa !28
  %732 = sext i8 %731 to i32
  %733 = icmp ne i32 78, %732
  br i1 %733, label %734, label %760

734:                                              ; preds = %727
  %735 = load i32, ptr %27, align 4, !tbaa !5
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 %736
  %738 = load i8, ptr %737, align 1, !tbaa !28
  %739 = sext i8 %738 to i32
  %740 = icmp ne i32 78, %739
  br i1 %740, label %741, label %760

741:                                              ; preds = %734
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #4
  %742 = load i32, ptr %65, align 4, !tbaa !5
  %743 = load i32, ptr %66, align 4, !tbaa !5
  %744 = icmp slt i32 %742, %743
  br i1 %744, label %745, label %747

745:                                              ; preds = %741
  %746 = load i32, ptr %65, align 4, !tbaa !5
  br label %749

747:                                              ; preds = %741
  %748 = load i32, ptr %66, align 4, !tbaa !5
  br label %749

749:                                              ; preds = %747, %745
  %750 = phi i32 [ %746, %745 ], [ %748, %747 ]
  store i32 %750, ptr %72, align 4, !tbaa !5
  %751 = load i32, ptr %72, align 4, !tbaa !5
  %752 = load i32, ptr %67, align 4, !tbaa !5
  %753 = icmp slt i32 %751, %752
  br i1 %753, label %754, label %756

754:                                              ; preds = %749
  %755 = load i32, ptr %72, align 4, !tbaa !5
  br label %758

756:                                              ; preds = %749
  %757 = load i32, ptr %67, align 4, !tbaa !5
  br label %758

758:                                              ; preds = %756, %754
  %759 = phi i32 [ %755, %754 ], [ %757, %756 ]
  store i32 %759, ptr %67, align 4, !tbaa !5
  store i32 %759, ptr %66, align 4, !tbaa !5
  store i32 %759, ptr %65, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #4
  br label %760

760:                                              ; preds = %758, %734, %727
  br label %761

761:                                              ; preds = %760, %725
  br label %762

762:                                              ; preds = %761, %701
  %763 = load i32, ptr %26, align 4, !tbaa !5
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 %764
  %766 = load double, ptr %765, align 8, !tbaa !14
  %767 = fcmp oeq double 0.000000e+00, %766
  br i1 %767, label %768, label %781

768:                                              ; preds = %762
  %769 = load ptr, ptr %24, align 8, !tbaa !9
  %770 = load i32, ptr %18, align 4, !tbaa !5
  %771 = sext i32 %770 to i64
  %772 = mul i64 8, %771
  call void @llvm.memset.p0.i64(ptr align 8 %769, i8 -1, i64 %772, i1 false)
  %773 = load ptr, ptr %22, align 8, !tbaa !9
  %774 = load i32, ptr %18, align 4, !tbaa !5
  %775 = sext i32 %774 to i64
  %776 = mul i64 8, %775
  call void @llvm.memset.p0.i64(ptr align 8 %773, i8 -1, i64 %776, i1 false)
  %777 = load ptr, ptr %23, align 8, !tbaa !9
  %778 = load i32, ptr %18, align 4, !tbaa !5
  %779 = sext i32 %778 to i64
  %780 = mul i64 8, %779
  call void @llvm.memset.p0.i64(ptr align 8 %777, i8 -1, i64 %780, i1 false)
  br label %794

781:                                              ; preds = %762
  %782 = load ptr, ptr %24, align 8, !tbaa !9
  %783 = load i32, ptr %18, align 4, !tbaa !5
  %784 = sext i32 %783 to i64
  %785 = mul i64 8, %784
  call void @llvm.memset.p0.i64(ptr align 8 %782, i8 0, i64 %785, i1 false)
  %786 = load ptr, ptr %22, align 8, !tbaa !9
  %787 = load i32, ptr %18, align 4, !tbaa !5
  %788 = sext i32 %787 to i64
  %789 = mul i64 8, %788
  call void @llvm.memset.p0.i64(ptr align 8 %786, i8 0, i64 %789, i1 false)
  %790 = load ptr, ptr %23, align 8, !tbaa !9
  %791 = load i32, ptr %18, align 4, !tbaa !5
  %792 = sext i32 %791 to i64
  %793 = mul i64 8, %792
  call void @llvm.memset.p0.i64(ptr align 8 %790, i8 0, i64 %793, i1 false)
  br label %794

794:                                              ; preds = %781, %768
  %795 = load i32, ptr %69, align 4, !tbaa !5
  %796 = icmp ne i32 0, %795
  br i1 %796, label %797, label %829

797:                                              ; preds = %794
  %798 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 0
  %799 = load i32, ptr %27, align 4, !tbaa !5
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds i8, ptr %798, i64 %800
  %802 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 0
  %803 = load i32, ptr %27, align 4, !tbaa !5
  %804 = sext i32 %803 to i64
  %805 = getelementptr inbounds i8, ptr %802, i64 %804
  %806 = getelementptr inbounds [37 x double], ptr %8, i64 0, i64 0
  %807 = load i32, ptr %26, align 4, !tbaa !5
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds double, ptr %806, i64 %808
  %810 = load ptr, ptr %20, align 8, !tbaa !9
  %811 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 0
  %812 = load i32, ptr %26, align 4, !tbaa !5
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds i32, ptr %811, i64 %813
  %815 = load ptr, ptr %21, align 8, !tbaa !9
  %816 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 0
  %817 = load i32, ptr %26, align 4, !tbaa !5
  %818 = sext i32 %817 to i64
  %819 = getelementptr inbounds i32, ptr %816, i64 %818
  %820 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 0
  %821 = load i32, ptr %26, align 4, !tbaa !5
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds double, ptr %820, i64 %822
  %824 = load ptr, ptr %22, align 8, !tbaa !9
  %825 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %826 = load i32, ptr %26, align 4, !tbaa !5
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds i32, ptr %825, i64 %827
  call void @libxsmm_dgemm(ptr noundef %801, ptr noundef %805, ptr noundef %65, ptr noundef %66, ptr noundef %67, ptr noundef %809, ptr noundef %810, ptr noundef %814, ptr noundef %815, ptr noundef %819, ptr noundef %823, ptr noundef %824, ptr noundef %828)
  br label %861

829:                                              ; preds = %794
  %830 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 0
  %831 = load i32, ptr %27, align 4, !tbaa !5
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds i8, ptr %830, i64 %832
  %834 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 0
  %835 = load i32, ptr %27, align 4, !tbaa !5
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds i8, ptr %834, i64 %836
  %838 = getelementptr inbounds [37 x double], ptr %8, i64 0, i64 0
  %839 = load i32, ptr %26, align 4, !tbaa !5
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds double, ptr %838, i64 %840
  %842 = load ptr, ptr %20, align 8, !tbaa !9
  %843 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 0
  %844 = load i32, ptr %26, align 4, !tbaa !5
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds i32, ptr %843, i64 %845
  %847 = load ptr, ptr %21, align 8, !tbaa !9
  %848 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 0
  %849 = load i32, ptr %26, align 4, !tbaa !5
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds i32, ptr %848, i64 %850
  %852 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 0
  %853 = load i32, ptr %26, align 4, !tbaa !5
  %854 = sext i32 %853 to i64
  %855 = getelementptr inbounds double, ptr %852, i64 %854
  %856 = load ptr, ptr %22, align 8, !tbaa !9
  %857 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %858 = load i32, ptr %26, align 4, !tbaa !5
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds i32, ptr %857, i64 %859
  call void @libxsmm_dgemm(ptr noundef %833, ptr noundef %837, ptr noundef %65, ptr noundef %66, ptr noundef %67, ptr noundef %841, ptr noundef %842, ptr noundef %846, ptr noundef %847, ptr noundef %851, ptr noundef %855, ptr noundef %856, ptr noundef %860)
  br label %861

861:                                              ; preds = %829, %797
  %862 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 0
  %863 = load i32, ptr %27, align 4, !tbaa !5
  %864 = sext i32 %863 to i64
  %865 = getelementptr inbounds i8, ptr %862, i64 %864
  %866 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 0
  %867 = load i32, ptr %27, align 4, !tbaa !5
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds i8, ptr %866, i64 %868
  %870 = getelementptr inbounds [37 x double], ptr %8, i64 0, i64 0
  %871 = load i32, ptr %26, align 4, !tbaa !5
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds double, ptr %870, i64 %872
  %874 = load ptr, ptr %20, align 8, !tbaa !9
  %875 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 0
  %876 = load i32, ptr %26, align 4, !tbaa !5
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds i32, ptr %875, i64 %877
  %879 = load ptr, ptr %21, align 8, !tbaa !9
  %880 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 0
  %881 = load i32, ptr %26, align 4, !tbaa !5
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds i32, ptr %880, i64 %882
  %884 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 0
  %885 = load i32, ptr %26, align 4, !tbaa !5
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds double, ptr %884, i64 %886
  %888 = load ptr, ptr %23, align 8, !tbaa !9
  %889 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %890 = load i32, ptr %26, align 4, !tbaa !5
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds i32, ptr %889, i64 %891
  call void @libxsmm_dgemm(ptr noundef %865, ptr noundef %869, ptr noundef %65, ptr noundef %66, ptr noundef %67, ptr noundef %873, ptr noundef %874, ptr noundef %878, ptr noundef %879, ptr noundef %883, ptr noundef %887, ptr noundef %888, ptr noundef %892)
  %893 = load i32, ptr %69, align 4, !tbaa !5
  %894 = icmp ne i32 0, %893
  br i1 %894, label %895, label %920

895:                                              ; preds = %861
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #4
  call void @llvm.memset.p0.i64(ptr align 8 %73, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %74) #4
  %896 = load i32, ptr %65, align 4, !tbaa !5
  %897 = load i32, ptr %66, align 4, !tbaa !5
  %898 = load i32, ptr %67, align 4, !tbaa !5
  %899 = load i32, ptr %26, align 4, !tbaa !5
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 %900
  %902 = load i32, ptr %901, align 4, !tbaa !5
  %903 = load i32, ptr %26, align 4, !tbaa !5
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 %904
  %906 = load i32, ptr %905, align 4, !tbaa !5
  %907 = load i32, ptr %26, align 4, !tbaa !5
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 %908
  %910 = load i32, ptr %909, align 4, !tbaa !5
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4 %74, i32 noundef %896, i32 noundef %897, i32 noundef %898, i32 noundef %902, i32 noundef %906, i32 noundef %910, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %911 = load i32, ptr %68, align 4, !tbaa !5
  %912 = call ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8 %74, i32 noundef %911, i32 noundef 0)
  store ptr %912, ptr %73, align 8, !tbaa !28
  %913 = load ptr, ptr %73, align 8, !tbaa !28
  %914 = icmp eq ptr null, %913
  br i1 %914, label %915, label %916

915:                                              ; preds = %895
  store i32 1, ptr %25, align 4, !tbaa !5
  store i32 45, ptr %75, align 4
  br label %917

916:                                              ; preds = %895
  store i32 0, ptr %75, align 4
  br label %917

917:                                              ; preds = %916, %915
  call void @llvm.lifetime.end.p0(i64 40, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  %918 = load i32, ptr %75, align 4
  switch i32 %918, label %1022 [
    i32 0, label %919
  ]

919:                                              ; preds = %917
  br label %920

920:                                              ; preds = %919, %861
  call void @llvm.x86.sse.stmxcsr(ptr %76)
  %921 = load i32, ptr %76, align 4
  %922 = and i32 %921, 63
  %923 = and i32 %922, 1152
  store i32 %923, ptr %31, align 4, !tbaa !5
  %924 = load i32, ptr %31, align 4, !tbaa !5
  %925 = icmp eq i32 0, %924
  %926 = zext i1 %925 to i64
  %927 = select i1 %925, i32 0, i32 1
  store i32 %927, ptr %25, align 4, !tbaa !5
  %928 = load i32, ptr %25, align 4, !tbaa !5
  %929 = icmp ne i32 0, %928
  br i1 %929, label %930, label %931

930:                                              ; preds = %920
  br label %1011

931:                                              ; preds = %920
  call void @llvm.lifetime.start.p0(i64 192, ptr %77) #4
  %932 = call ptr @libxsmm_original_dgemm()
  %933 = getelementptr inbounds [6 x i8], ptr %10, i64 0, i64 0
  %934 = load i32, ptr %27, align 4, !tbaa !5
  %935 = sext i32 %934 to i64
  %936 = getelementptr inbounds i8, ptr %933, i64 %935
  %937 = getelementptr inbounds [6 x i8], ptr %11, i64 0, i64 0
  %938 = load i32, ptr %27, align 4, !tbaa !5
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i8, ptr %937, i64 %939
  %941 = getelementptr inbounds [37 x double], ptr %8, i64 0, i64 0
  %942 = load i32, ptr %26, align 4, !tbaa !5
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds double, ptr %941, i64 %943
  %945 = load ptr, ptr %20, align 8, !tbaa !9
  %946 = getelementptr inbounds [37 x i32], ptr %5, i64 0, i64 0
  %947 = load i32, ptr %26, align 4, !tbaa !5
  %948 = sext i32 %947 to i64
  %949 = getelementptr inbounds i32, ptr %946, i64 %948
  %950 = load ptr, ptr %21, align 8, !tbaa !9
  %951 = getelementptr inbounds [37 x i32], ptr %6, i64 0, i64 0
  %952 = load i32, ptr %26, align 4, !tbaa !5
  %953 = sext i32 %952 to i64
  %954 = getelementptr inbounds i32, ptr %951, i64 %953
  %955 = getelementptr inbounds [37 x double], ptr %9, i64 0, i64 0
  %956 = load i32, ptr %26, align 4, !tbaa !5
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds double, ptr %955, i64 %957
  %959 = load ptr, ptr %24, align 8, !tbaa !9
  %960 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %961 = load i32, ptr %26, align 4, !tbaa !5
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds i32, ptr %960, i64 %962
  call void %932(ptr noundef %936, ptr noundef %940, ptr noundef %65, ptr noundef %66, ptr noundef %67, ptr noundef %944, ptr noundef %945, ptr noundef %949, ptr noundef %950, ptr noundef %954, ptr noundef %958, ptr noundef %959, ptr noundef %963)
  %964 = load i32, ptr %65, align 4, !tbaa !5
  %965 = load i32, ptr %66, align 4, !tbaa !5
  %966 = load ptr, ptr %24, align 8, !tbaa !9
  %967 = load ptr, ptr %22, align 8, !tbaa !9
  %968 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %969 = load i32, ptr %26, align 4, !tbaa !5
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds i32, ptr %968, i64 %970
  %972 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %973 = load i32, ptr %26, align 4, !tbaa !5
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds i32, ptr %972, i64 %974
  %976 = call i32 @libxsmm_matdiff(ptr noundef %77, i32 noundef 0, i32 noundef %964, i32 noundef %965, ptr noundef %966, ptr noundef %967, ptr noundef %971, ptr noundef %975)
  store i32 %976, ptr %25, align 4, !tbaa !5
  %977 = load i32, ptr %25, align 4, !tbaa !5
  %978 = icmp eq i32 0, %977
  br i1 %978, label %979, label %1010

979:                                              ; preds = %931
  %980 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %77, i32 0, i32 4
  %981 = load double, ptr %980, align 8, !tbaa !29
  %982 = fmul double 1.000000e+03, %981
  %983 = fcmp olt double 1.000000e+00, %982
  br i1 %983, label %984, label %985

984:                                              ; preds = %979
  store i32 1, ptr %25, align 4, !tbaa !5
  br label %1009

985:                                              ; preds = %979
  %986 = load i32, ptr %65, align 4, !tbaa !5
  %987 = load i32, ptr %66, align 4, !tbaa !5
  %988 = load ptr, ptr %24, align 8, !tbaa !9
  %989 = load ptr, ptr %23, align 8, !tbaa !9
  %990 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %991 = load i32, ptr %26, align 4, !tbaa !5
  %992 = sext i32 %991 to i64
  %993 = getelementptr inbounds i32, ptr %990, i64 %992
  %994 = getelementptr inbounds [37 x i32], ptr %7, i64 0, i64 0
  %995 = load i32, ptr %26, align 4, !tbaa !5
  %996 = sext i32 %995 to i64
  %997 = getelementptr inbounds i32, ptr %994, i64 %996
  %998 = call i32 @libxsmm_matdiff(ptr noundef %77, i32 noundef 0, i32 noundef %986, i32 noundef %987, ptr noundef %988, ptr noundef %989, ptr noundef %993, ptr noundef %997)
  store i32 %998, ptr %25, align 4, !tbaa !5
  %999 = load i32, ptr %25, align 4, !tbaa !5
  %1000 = icmp eq i32 0, %999
  br i1 %1000, label %1001, label %1008

1001:                                             ; preds = %985
  %1002 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %77, i32 0, i32 4
  %1003 = load double, ptr %1002, align 8, !tbaa !29
  %1004 = fmul double 1.000000e+03, %1003
  %1005 = fcmp olt double 1.000000e+00, %1004
  br i1 %1005, label %1006, label %1007

1006:                                             ; preds = %1001
  store i32 1, ptr %25, align 4, !tbaa !5
  br label %1007

1007:                                             ; preds = %1006, %1001
  br label %1008

1008:                                             ; preds = %1007, %985
  br label %1009

1009:                                             ; preds = %1008, %984
  br label %1010

1010:                                             ; preds = %1009, %931
  call void @llvm.lifetime.end.p0(i64 192, ptr %77) #4
  br label %1011

1011:                                             ; preds = %1010, %930
  %1012 = load ptr, ptr %22, align 8, !tbaa !9
  %1013 = load ptr, ptr %24, align 8, !tbaa !9
  %1014 = load i32, ptr %18, align 4, !tbaa !5
  %1015 = sext i32 %1014 to i64
  %1016 = mul i64 8, %1015
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1012, ptr align 8 %1013, i64 %1016, i1 false)
  %1017 = load ptr, ptr %23, align 8, !tbaa !9
  %1018 = load ptr, ptr %24, align 8, !tbaa !9
  %1019 = load i32, ptr %18, align 4, !tbaa !5
  %1020 = sext i32 %1019 to i64
  %1021 = mul i64 8, %1020
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1017, ptr align 8 %1018, i64 %1021, i1 false)
  store i32 0, ptr %75, align 4
  br label %1022

1022:                                             ; preds = %1011, %917
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  %1023 = load i32, ptr %75, align 4
  switch i32 %1023, label %1047 [
    i32 0, label %1024
    i32 45, label %1028
  ]

1024:                                             ; preds = %1022
  br label %1025

1025:                                             ; preds = %1024
  %1026 = load i32, ptr %27, align 4, !tbaa !5
  %1027 = add nsw i32 %1026, 1
  store i32 %1027, ptr %27, align 4, !tbaa !5
  br label %587, !llvm.loop !31

1028:                                             ; preds = %1022, %593
  br label %1029

1029:                                             ; preds = %1028
  %1030 = load i32, ptr %26, align 4, !tbaa !5
  %1031 = add nsw i32 %1030, 1
  store i32 %1031, ptr %26, align 4, !tbaa !5
  br label %578, !llvm.loop !32

1032:                                             ; preds = %584
  call void @llvm.x86.sse.stmxcsr(ptr %78)
  %1033 = load i32, ptr %78, align 4
  %1034 = and i32 %1033, -8065
  %1035 = load i32, ptr %28, align 4, !tbaa !5
  %1036 = or i32 %1034, %1035
  store i32 %1036, ptr %79, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr %79)
  call void @llvm.x86.sse.stmxcsr(ptr %80)
  %1037 = load i32, ptr %80, align 4
  %1038 = and i32 %1037, -64
  %1039 = or i32 %1038, 0
  store i32 %1039, ptr %81, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr %81)
  %1040 = load ptr, ptr %20, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1040)
  %1041 = load ptr, ptr %21, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1041)
  %1042 = load ptr, ptr %22, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1042)
  %1043 = load ptr, ptr %23, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1043)
  %1044 = load ptr, ptr %24, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1044)
  %1045 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %1045, ptr %1, align 4
  store i32 1, ptr %75, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 6, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 6, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 296, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 296, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr %3) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr %2) #4
  %1046 = load i32, ptr %1, align 4
  ret i32 %1046

1047:                                             ; preds = %1022
  unreachable
}

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

; Function Attrs: nocallback nofree 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: nounwind memory(argmem: write)
declare void @llvm.x86.sse.stmxcsr(ptr) #3

; Function Attrs: nounwind
declare void @llvm.x86.sse.ldmxcsr(ptr) #4

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

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

declare noalias ptr @libxsmm_malloc(i64 noundef) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #7

declare i64 @libxsmm_coprime2(i64 noundef) #6

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

declare void @libxsmm_dgemm(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

declare void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #6

declare ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8, i32 noundef, i32 noundef) #6

declare ptr @libxsmm_original_dgemm() #6

declare i32 @libxsmm_matdiff(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

declare void @libxsmm_free(ptr noundef) #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !15, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = !{!20, !20, i64 0}
!20 = !{!"long", !7, i64 0}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = !{!7, !7, i64 0}
!29 = !{!30, !15, i64 32}
!30 = !{!"libxsmm_matdiff_info", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !15, i64 40, !15, i64 48, !15, i64 56, !15, i64 64, !15, i64 72, !15, i64 80, !15, i64 88, !15, i64 96, !15, i64 104, !15, i64 112, !15, i64 120, !15, i64 128, !15, i64 136, !15, i64 144, !15, i64 152, !15, i64 160, !15, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}


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

%struct.libxsmm_gemm_shape = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_matdiff_info = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32 }

@__const.main.m = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.n = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.k = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.lda = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.ldb = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.ldc = external hidden unnamed_addr constant [37 x i32], align 16
@__const.main.alpha = external hidden unnamed_addr constant [37 x double], align 16
@__const.main.beta = external hidden unnamed_addr constant [37 x double], align 16
@__const.main.transa = external hidden unnamed_addr constant [6 x i8], align 1
@__const.main.transb = external hidden unnamed_addr constant [6 x i8], align 1
@.str = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [62 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [15 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
vector.ph:
  %0 = alloca [37 x i32], align 16
  %1 = alloca [37 x i32], align 16
  %2 = alloca [37 x i32], align 16
  %3 = alloca [37 x double], align 16
  %4 = alloca [37 x double], align 16
  %5 = alloca [6 x i8], align 1
  %6 = alloca [6 x i8], align 1
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %struct.libxsmm_gemm_shape, align 8
  %16 = alloca i32, align 4
  %17 = alloca %struct.libxsmm_matdiff_info, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 148, ptr nonnull %0) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(148) %0, ptr noundef nonnull align 16 dereferenceable(148) @__const.main.lda, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 148, ptr nonnull %1) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(148) %1, ptr noundef nonnull align 16 dereferenceable(148) @__const.main.ldb, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 148, ptr nonnull %2) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(148) %2, ptr noundef nonnull align 16 dereferenceable(148) @__const.main.ldc, i64 148, i1 false)
  call void @llvm.lifetime.start.p0(i64 296, ptr nonnull %3) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(296) %3, ptr noundef nonnull align 16 dereferenceable(296) @__const.main.alpha, i64 296, i1 false)
  call void @llvm.lifetime.start.p0(i64 296, ptr nonnull %4) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(296) %4, ptr noundef nonnull align 16 dereferenceable(296) @__const.main.beta, i64 296, i1 false)
  call void @llvm.lifetime.start.p0(i64 6, ptr nonnull %5) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(6) %5, ptr noundef nonnull align 1 dereferenceable(6) @__const.main.transa, i64 6, i1 false)
  call void @llvm.lifetime.start.p0(i64 6, ptr nonnull %6) #4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(6) %6, ptr noundef nonnull align 1 dereferenceable(6) @__const.main.transb, i64 6, i1 false)
  call void @llvm.x86.sse.stmxcsr(ptr nonnull %7)
  %22 = load i32, ptr %7, align 4
  call void @llvm.x86.sse.stmxcsr(ptr nonnull %8)
  %23 = load i32, ptr %8, align 4
  %24 = and i32 %23, -8065
  %25 = and i32 %22, 6912
  %26 = or disjoint i32 %24, %25
  store i32 %26, ptr %9, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr nonnull %9)
  %wide.load = load <4 x i32>, ptr @__const.main.m, align 16, !tbaa !5
  %wide.load409 = load <4 x i32>, ptr %0, align 16, !tbaa !5
  %27 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409, <4 x i32> %wide.load)
  store <4 x i32> %27, ptr %0, align 16, !tbaa !5
  %wide.load410 = load <4 x i32>, ptr %1, align 16, !tbaa !5
  %wide.load411 = load <4 x i32>, ptr @__const.main.k, align 16, !tbaa !5
  %28 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410, <4 x i32> %wide.load411)
  store <4 x i32> %28, ptr %1, align 16, !tbaa !5
  %wide.load412 = load <4 x i32>, ptr %2, align 16, !tbaa !5
  %29 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412, <4 x i32> %wide.load)
  store <4 x i32> %29, ptr %2, align 16, !tbaa !5
  %wide.load.1 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 16), align 16, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %0, i64 16
  %wide.load409.1 = load <4 x i32>, ptr %30, align 16, !tbaa !5
  %31 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.1, <4 x i32> %wide.load.1)
  store <4 x i32> %31, ptr %30, align 16, !tbaa !5
  %32 = getelementptr inbounds i8, ptr %1, i64 16
  %wide.load410.1 = load <4 x i32>, ptr %32, align 16, !tbaa !5
  %wide.load411.1 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 16), align 16, !tbaa !5
  %33 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.1, <4 x i32> %wide.load411.1)
  store <4 x i32> %33, ptr %32, align 16, !tbaa !5
  %34 = getelementptr inbounds i8, ptr %2, i64 16
  %wide.load412.1 = load <4 x i32>, ptr %34, align 16, !tbaa !5
  %35 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.1, <4 x i32> %wide.load.1)
  store <4 x i32> %35, ptr %34, align 16, !tbaa !5
  %wide.load.2 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 32), align 16, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %0, i64 32
  %wide.load409.2 = load <4 x i32>, ptr %36, align 16, !tbaa !5
  %37 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.2, <4 x i32> %wide.load.2)
  store <4 x i32> %37, ptr %36, align 16, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %1, i64 32
  %wide.load410.2 = load <4 x i32>, ptr %38, align 16, !tbaa !5
  %wide.load411.2 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 32), align 16, !tbaa !5
  %39 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.2, <4 x i32> %wide.load411.2)
  store <4 x i32> %39, ptr %38, align 16, !tbaa !5
  %40 = getelementptr inbounds i8, ptr %2, i64 32
  %wide.load412.2 = load <4 x i32>, ptr %40, align 16, !tbaa !5
  %41 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.2, <4 x i32> %wide.load.2)
  store <4 x i32> %41, ptr %40, align 16, !tbaa !5
  %wide.load.3 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 48), align 16, !tbaa !5
  %42 = getelementptr inbounds i8, ptr %0, i64 48
  %wide.load409.3 = load <4 x i32>, ptr %42, align 16, !tbaa !5
  %43 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.3, <4 x i32> %wide.load.3)
  store <4 x i32> %43, ptr %42, align 16, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %1, i64 48
  %wide.load410.3 = load <4 x i32>, ptr %44, align 16, !tbaa !5
  %wide.load411.3 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 48), align 16, !tbaa !5
  %45 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.3, <4 x i32> %wide.load411.3)
  store <4 x i32> %45, ptr %44, align 16, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %2, i64 48
  %wide.load412.3 = load <4 x i32>, ptr %46, align 16, !tbaa !5
  %47 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.3, <4 x i32> %wide.load.3)
  store <4 x i32> %47, ptr %46, align 16, !tbaa !5
  %wide.load.4 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 64), align 16, !tbaa !5
  %48 = getelementptr inbounds i8, ptr %0, i64 64
  %wide.load409.4 = load <4 x i32>, ptr %48, align 16, !tbaa !5
  %49 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.4, <4 x i32> %wide.load.4)
  store <4 x i32> %49, ptr %48, align 16, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %1, i64 64
  %wide.load410.4 = load <4 x i32>, ptr %50, align 16, !tbaa !5
  %wide.load411.4 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 64), align 16, !tbaa !5
  %51 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.4, <4 x i32> %wide.load411.4)
  store <4 x i32> %51, ptr %50, align 16, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %2, i64 64
  %wide.load412.4 = load <4 x i32>, ptr %52, align 16, !tbaa !5
  %53 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.4, <4 x i32> %wide.load.4)
  store <4 x i32> %53, ptr %52, align 16, !tbaa !5
  %wide.load.5 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 80), align 16, !tbaa !5
  %54 = getelementptr inbounds i8, ptr %0, i64 80
  %wide.load409.5 = load <4 x i32>, ptr %54, align 16, !tbaa !5
  %55 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.5, <4 x i32> %wide.load.5)
  store <4 x i32> %55, ptr %54, align 16, !tbaa !5
  %56 = getelementptr inbounds i8, ptr %1, i64 80
  %wide.load410.5 = load <4 x i32>, ptr %56, align 16, !tbaa !5
  %wide.load411.5 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 80), align 16, !tbaa !5
  %57 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.5, <4 x i32> %wide.load411.5)
  store <4 x i32> %57, ptr %56, align 16, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %2, i64 80
  %wide.load412.5 = load <4 x i32>, ptr %58, align 16, !tbaa !5
  %59 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.5, <4 x i32> %wide.load.5)
  store <4 x i32> %59, ptr %58, align 16, !tbaa !5
  %wide.load.6 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 96), align 16, !tbaa !5
  %60 = getelementptr inbounds i8, ptr %0, i64 96
  %wide.load409.6 = load <4 x i32>, ptr %60, align 16, !tbaa !5
  %61 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.6, <4 x i32> %wide.load.6)
  store <4 x i32> %61, ptr %60, align 16, !tbaa !5
  %62 = getelementptr inbounds i8, ptr %1, i64 96
  %wide.load410.6 = load <4 x i32>, ptr %62, align 16, !tbaa !5
  %wide.load411.6 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 96), align 16, !tbaa !5
  %63 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.6, <4 x i32> %wide.load411.6)
  store <4 x i32> %63, ptr %62, align 16, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %2, i64 96
  %wide.load412.6 = load <4 x i32>, ptr %64, align 16, !tbaa !5
  %65 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.6, <4 x i32> %wide.load.6)
  store <4 x i32> %65, ptr %64, align 16, !tbaa !5
  %wide.load.7 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 112), align 16, !tbaa !5
  %66 = getelementptr inbounds i8, ptr %0, i64 112
  %wide.load409.7 = load <4 x i32>, ptr %66, align 16, !tbaa !5
  %67 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.7, <4 x i32> %wide.load.7)
  store <4 x i32> %67, ptr %66, align 16, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %1, i64 112
  %wide.load410.7 = load <4 x i32>, ptr %68, align 16, !tbaa !5
  %wide.load411.7 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 112), align 16, !tbaa !5
  %69 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.7, <4 x i32> %wide.load411.7)
  store <4 x i32> %69, ptr %68, align 16, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %2, i64 112
  %wide.load412.7 = load <4 x i32>, ptr %70, align 16, !tbaa !5
  %71 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.7, <4 x i32> %wide.load.7)
  store <4 x i32> %71, ptr %70, align 16, !tbaa !5
  %wide.load.8 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 128), align 16, !tbaa !5
  %72 = getelementptr inbounds i8, ptr %0, i64 128
  %wide.load409.8 = load <4 x i32>, ptr %72, align 16, !tbaa !5
  %73 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load409.8, <4 x i32> %wide.load.8)
  store <4 x i32> %73, ptr %72, align 16, !tbaa !5
  %74 = getelementptr inbounds i8, ptr %1, i64 128
  %wide.load410.8 = load <4 x i32>, ptr %74, align 16, !tbaa !5
  %wide.load411.8 = load <4 x i32>, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 128), align 16, !tbaa !5
  %75 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load410.8, <4 x i32> %wide.load411.8)
  store <4 x i32> %75, ptr %74, align 16, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %2, i64 128
  %wide.load412.8 = load <4 x i32>, ptr %76, align 16, !tbaa !5
  %77 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %wide.load412.8, <4 x i32> %wide.load.8)
  store <4 x i32> %77, ptr %76, align 16, !tbaa !5
  %78 = load i32, ptr getelementptr inbounds (i8, ptr @__const.main.m, i64 144), align 16, !tbaa !5
  %79 = getelementptr inbounds i8, ptr %0, i64 144
  %80 = load i32, ptr %79, align 16, !tbaa !5
  %. = call i32 @llvm.smax.i32(i32 %80, i32 %78)
  store i32 %., ptr %79, align 16, !tbaa !5
  %81 = getelementptr inbounds i8, ptr %1, i64 144
  %82 = load i32, ptr %81, align 16, !tbaa !5
  %83 = load i32, ptr getelementptr inbounds (i8, ptr @__const.main.k, i64 144), align 16, !tbaa !5
  %84 = call i32 @llvm.smax.i32(i32 %82, i32 %83)
  store i32 %84, ptr %81, align 16, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %2, i64 144
  %86 = load i32, ptr %85, align 16, !tbaa !5
  %87 = call i32 @llvm.smax.i32(i32 %86, i32 %78)
  store i32 %87, ptr %85, align 16, !tbaa !5
  br label %.preheader341

.preheader341:                                    ; preds = %vector.ph, %99
  %indvars.iv369 = phi i64 [ %indvars.iv.next370, %99 ], [ 0, %vector.ph ]
  %.0275351 = phi i32 [ %105, %99 ], [ 0, %vector.ph ]
  %.0276350 = phi i32 [ %106, %99 ], [ 0, %vector.ph ]
  %.0277349 = phi i32 [ %107, %99 ], [ 0, %vector.ph ]
  %88 = getelementptr inbounds [37 x i32], ptr %0, i64 0, i64 %indvars.iv369
  %89 = load i32, ptr %88, align 4, !tbaa !5
  %90 = getelementptr inbounds [37 x i32], ptr @__const.main.k, i64 0, i64 %indvars.iv369
  %91 = load i32, ptr %90, align 4, !tbaa !5
  %92 = getelementptr inbounds [37 x i32], ptr %1, i64 0, i64 %indvars.iv369
  %93 = load i32, ptr %92, align 4, !tbaa !5
  %94 = getelementptr inbounds [37 x i32], ptr %2, i64 0, i64 %indvars.iv369
  %95 = load i32, ptr %94, align 4, !tbaa !5
  %96 = getelementptr inbounds [37 x i32], ptr @__const.main.m, i64 0, i64 %indvars.iv369
  %97 = load i32, ptr %96, align 4, !tbaa !5
  %.not318 = icmp sgt i32 %97, %89
  %.not319 = icmp sgt i32 %91, %93
  %or.cond321 = select i1 %.not318, i1 true, i1 %.not319
  %.not320 = icmp sgt i32 %97, %95
  %or.cond322 = select i1 %or.cond321, i1 true, i1 %.not320
  br i1 %or.cond322, label %98, label %99

98:                                               ; preds = %.preheader341
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 94, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #9
  unreachable

99:                                               ; preds = %.preheader341
  %100 = getelementptr inbounds [37 x i32], ptr @__const.main.n, i64 0, i64 %indvars.iv369
  %101 = load i32, ptr %100, align 4, !tbaa !5
  %102 = mul nsw i32 %101, %95
  %103 = mul i32 %101, %93
  %104 = mul nsw i32 %91, %89
  %105 = call i32 @llvm.smax.i32(i32 %.0275351, i32 %104)
  %106 = call i32 @llvm.smax.i32(i32 %.0276350, i32 %103)
  %107 = call i32 @llvm.smax.i32(i32 %.0277349, i32 %102)
  %indvars.iv.next370 = add nuw nsw i64 %indvars.iv369, 1
  %exitcond372.not = icmp eq i64 %indvars.iv.next370, 37
  br i1 %exitcond372.not, label %108, label %.preheader341, !llvm.loop !9

108:                                              ; preds = %99
  %109 = zext nneg i32 %105 to i64
  %110 = shl nuw nsw i64 %109, 3
  %111 = call noalias ptr @libxsmm_malloc(i64 noundef %110) #4
  %112 = zext nneg i32 %106 to i64
  %113 = shl nuw nsw i64 %112, 3
  %114 = call noalias ptr @libxsmm_malloc(i64 noundef %113) #4
  %115 = zext nneg i32 %107 to i64
  %116 = shl nuw nsw i64 %115, 3
  %117 = call noalias ptr @libxsmm_malloc(i64 noundef %116) #4
  %118 = call noalias ptr @libxsmm_malloc(i64 noundef %116) #4
  %.not = icmp eq ptr %118, null
  br i1 %.not, label %119, label %120

119:                                              ; preds = %108
  call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 104, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #9
  unreachable

120:                                              ; preds = %108
  %121 = call noalias ptr @libxsmm_malloc(i64 noundef %116) #4
  %.not312 = icmp eq ptr %121, null
  br i1 %.not312, label %122, label %123

122:                                              ; preds = %120
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 108, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #9
  unreachable

123:                                              ; preds = %120
  %124 = icmp ne ptr %111, null
  %125 = icmp ne ptr %114, null
  %or.cond = select i1 %124, i1 %125, i1 false
  %126 = icmp ne ptr %117, null
  %or.cond3 = select i1 %or.cond, i1 %126, i1 false
  br i1 %or.cond3, label %.preheader340, label %137

.preheader340:                                    ; preds = %123
  %127 = icmp sgt i32 %105, 0
  br i1 %127, label %.lr.ph, label %.critedge.preheader

.lr.ph:                                           ; preds = %.preheader340
  %wide.trip.count = zext nneg i32 %105 to i64
  %min.iters.check = icmp ult i32 %105, 4
  br i1 %min.iters.check, label %scalar.ph414.preheader, label %vector.ph415

scalar.ph414.preheader:                           ; preds = %middle.block413, %.lr.ph
  %indvars.iv373.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec, %middle.block413 ]
  br label %scalar.ph414

vector.ph415:                                     ; preds = %.lr.ph
  %n.vec = and i64 %wide.trip.count, 2147483644
  br label %vector.body417

vector.body417:                                   ; preds = %vector.body417, %vector.ph415
  %index418 = phi i64 [ 0, %vector.ph415 ], [ %index.next420, %vector.body417 ]
  %vec.ind = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph415 ], [ %vec.ind.next, %vector.body417 ]
  %step.add = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %128 = uitofp <2 x i32> %vec.ind to <2 x double>
  %129 = uitofp <2 x i32> %step.add to <2 x double>
  %130 = fadd <2 x double> %128, <double 1.000000e+00, double 1.000000e+00>
  %131 = fadd <2 x double> %129, <double 1.000000e+00, double 1.000000e+00>
  %132 = fmul <2 x double> %130, <double 4.300000e+01, double 4.300000e+01>
  %133 = fmul <2 x double> %131, <double 4.300000e+01, double 4.300000e+01>
  %134 = getelementptr inbounds double, ptr %111, i64 %index418
  %135 = getelementptr inbounds i8, ptr %134, i64 16
  store <2 x double> %132, ptr %134, align 8, !tbaa !11
  store <2 x double> %133, ptr %135, align 8, !tbaa !11
  %index.next420 = add nuw i64 %index418, 4
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 4, i32 4>
  %136 = icmp eq i64 %index.next420, %n.vec
  br i1 %136, label %middle.block413, label %vector.body417, !llvm.loop !13

middle.block413:                                  ; preds = %vector.body417
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %.critedge.preheader, label %scalar.ph414.preheader

137:                                              ; preds = %123
  call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 110, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #9
  unreachable

scalar.ph414:                                     ; preds = %scalar.ph414.preheader, %scalar.ph414
  %indvars.iv373 = phi i64 [ %indvars.iv.next374, %scalar.ph414 ], [ %indvars.iv373.ph, %scalar.ph414.preheader ]
  %138 = trunc nuw nsw i64 %indvars.iv373 to i32
  %139 = uitofp nneg i32 %138 to double
  %140 = fadd double %139, 1.000000e+00
  %141 = fmul double %140, 4.300000e+01
  %142 = getelementptr inbounds double, ptr %111, i64 %indvars.iv373
  store double %141, ptr %142, align 8, !tbaa !11
  %indvars.iv.next374 = add nuw nsw i64 %indvars.iv373, 1
  %exitcond376.not = icmp eq i64 %indvars.iv.next374, %wide.trip.count
  br i1 %exitcond376.not, label %.critedge.preheader, label %scalar.ph414, !llvm.loop !16

.critedge.preheader:                              ; preds = %scalar.ph414, %middle.block413, %.preheader340
  %143 = icmp sgt i32 %106, 0
  br i1 %143, label %.lr.ph356, label %.critedge323.preheader

.lr.ph356:                                        ; preds = %.critedge.preheader
  %wide.trip.count385 = zext nneg i32 %106 to i64
  %min.iters.check423 = icmp ult i32 %106, 4
  br i1 %min.iters.check423, label %.critedge.preheader436, label %vector.ph424

vector.ph424:                                     ; preds = %.lr.ph356
  %n.vec426 = and i64 %wide.trip.count385, 2147483644
  br label %vector.body428

vector.body428:                                   ; preds = %vector.body428, %vector.ph424
  %index429 = phi i64 [ 0, %vector.ph424 ], [ %index.next434, %vector.body428 ]
  %vec.ind430 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph424 ], [ %vec.ind.next433, %vector.body428 ]
  %step.add431 = add <2 x i32> %vec.ind430, <i32 2, i32 2>
  %144 = uitofp <2 x i32> %vec.ind430 to <2 x double>
  %145 = uitofp <2 x i32> %step.add431 to <2 x double>
  %146 = fadd <2 x double> %144, <double 1.000000e+00, double 1.000000e+00>
  %147 = fadd <2 x double> %145, <double 1.000000e+00, double 1.000000e+00>
  %148 = fmul <2 x double> %146, <double 2.500000e+01, double 2.500000e+01>
  %149 = fmul <2 x double> %147, <double 2.500000e+01, double 2.500000e+01>
  %150 = getelementptr inbounds double, ptr %114, i64 %index429
  %151 = getelementptr inbounds i8, ptr %150, i64 16
  store <2 x double> %148, ptr %150, align 8, !tbaa !11
  store <2 x double> %149, ptr %151, align 8, !tbaa !11
  %index.next434 = add nuw i64 %index429, 4
  %vec.ind.next433 = add <2 x i32> %vec.ind430, <i32 4, i32 4>
  %152 = icmp eq i64 %index.next434, %n.vec426
  br i1 %152, label %middle.block421, label %vector.body428, !llvm.loop !17

middle.block421:                                  ; preds = %vector.body428
  %cmp.n435 = icmp eq i64 %n.vec426, %wide.trip.count385
  br i1 %cmp.n435, label %.critedge323.preheader, label %.critedge.preheader436

.critedge.preheader436:                           ; preds = %middle.block421, %.lr.ph356
  %indvars.iv382.ph = phi i64 [ 0, %.lr.ph356 ], [ %n.vec426, %middle.block421 ]
  br label %.critedge

.critedge:                                        ; preds = %.critedge.preheader436, %.critedge
  %indvars.iv382 = phi i64 [ %indvars.iv.next383, %.critedge ], [ %indvars.iv382.ph, %.critedge.preheader436 ]
  %153 = trunc nuw nsw i64 %indvars.iv382 to i32
  %154 = uitofp nneg i32 %153 to double
  %155 = fadd double %154, 1.000000e+00
  %156 = fmul double %155, 2.500000e+01
  %157 = getelementptr inbounds double, ptr %114, i64 %indvars.iv382
  store double %156, ptr %157, align 8, !tbaa !11
  %indvars.iv.next383 = add nuw nsw i64 %indvars.iv382, 1
  %exitcond386.not = icmp eq i64 %indvars.iv.next383, %wide.trip.count385
  br i1 %exitcond386.not, label %.critedge323.preheader, label %.critedge, !llvm.loop !18

.critedge323.preheader:                           ; preds = %.critedge, %middle.block421, %.critedge.preheader
  %158 = load i8, ptr @.str.5, align 1
  %159 = getelementptr inbounds i8, ptr %17, i64 32
  br label %.preheader

.preheader:                                       ; preds = %.critedge323.preheader, %.critedge323
  %indvars.iv395 = phi i64 [ 0, %.critedge323.preheader ], [ %indvars.iv.next396, %.critedge323 ]
  %160 = getelementptr inbounds [37 x i32], ptr @__const.main.m, i64 0, i64 %indvars.iv395
  %161 = load i32, ptr %160, align 4, !tbaa !5
  %162 = getelementptr inbounds [37 x i32], ptr @__const.main.n, i64 0, i64 %indvars.iv395
  %163 = load i32, ptr %162, align 4, !tbaa !5
  %164 = getelementptr inbounds [37 x i32], ptr @__const.main.k, i64 0, i64 %indvars.iv395
  %165 = load i32, ptr %164, align 4, !tbaa !5
  %166 = getelementptr inbounds [37 x double], ptr %3, i64 0, i64 %indvars.iv395
  %167 = getelementptr inbounds [37 x double], ptr %4, i64 0, i64 %indvars.iv395
  %168 = getelementptr inbounds i32, ptr %0, i64 %indvars.iv395
  %169 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv395
  %170 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv395
  br label %171

171:                                              ; preds = %.preheader, %.thread328
  %indvars.iv392 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next393, %.thread328 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  store i32 %161, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #4
  store i32 %163, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #4
  store i32 %165, ptr %12, align 4, !tbaa !5
  %172 = getelementptr inbounds [6 x i8], ptr %5, i64 0, i64 %indvars.iv392
  %173 = load i8, ptr %172, align 1, !tbaa !19
  %174 = icmp ne i8 %173, 110
  %175 = icmp ne i8 %158, %173
  %.not337 = select i1 %174, i1 %175, i1 false
  %176 = zext i1 %.not337 to i32
  %177 = getelementptr inbounds [6 x i8], ptr %6, i64 0, i64 %indvars.iv392
  %178 = load i8, ptr %177, align 1, !tbaa !19
  %179 = icmp eq i8 %178, 110
  %180 = icmp eq i8 %158, %178
  %181 = select i1 %179, i1 true, i1 %180
  %182 = select i1 %181, i32 0, i32 2
  %183 = or disjoint i32 %182, %176
  %184 = getelementptr inbounds [37 x double], ptr %4, i64 0, i64 %indvars.iv392
  %185 = load double, ptr %184, align 8, !tbaa !11
  %186 = fcmp oeq double %185, 0.000000e+00
  %187 = select i1 %186, i32 4, i32 0
  %188 = or disjoint i32 %183, %187
  %189 = load double, ptr %166, align 8, !tbaa !11
  %190 = fcmp oeq double %189, 1.000000e+00
  br i1 %190, label %191, label %196

191:                                              ; preds = %171
  %192 = load double, ptr %167, align 8, !tbaa !11
  %193 = fcmp oeq double %192, 1.000000e+00
  br i1 %193, label %196, label %194

194:                                              ; preds = %191
  %195 = fcmp oeq double %192, 0.000000e+00
  br label %196

196:                                              ; preds = %191, %194, %171
  %197 = phi i1 [ false, %171 ], [ true, %191 ], [ %195, %194 ]
  call void @llvm.x86.sse.stmxcsr(ptr nonnull %13)
  %198 = load i32, ptr %13, align 4
  %199 = and i32 %198, -64
  store i32 %199, ptr %14, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr nonnull %14)
  %200 = load i8, ptr %172, align 1, !tbaa !19
  %.not313 = icmp eq i8 %200, 78
  %201 = load i8, ptr %177, align 1, !tbaa !19
  %.not314 = icmp eq i8 %201, 78
  br i1 %.not313, label %207, label %202

202:                                              ; preds = %196
  %203 = load i32, ptr %10, align 4
  br i1 %.not314, label %204, label %212

204:                                              ; preds = %202
  %205 = load i32, ptr %12, align 4
  %206 = call i32 @llvm.smin.i32(i32 %203, i32 %205)
  store i32 %206, ptr %12, align 4, !tbaa !5
  store i32 %206, ptr %10, align 4, !tbaa !5
  br label %.thread326

207:                                              ; preds = %196
  br i1 %.not314, label %.thread326, label %208

208:                                              ; preds = %207
  %209 = load i32, ptr %12, align 4
  %210 = load i32, ptr %11, align 4
  %211 = call i32 @llvm.smin.i32(i32 %209, i32 %210)
  store i32 %211, ptr %11, align 4, !tbaa !5
  store i32 %211, ptr %12, align 4, !tbaa !5
  br label %.thread326

212:                                              ; preds = %202
  %213 = load i32, ptr %11, align 4
  %214 = call i32 @llvm.smin.i32(i32 %203, i32 %213)
  %215 = load i32, ptr %12, align 4
  %216 = call i32 @llvm.smin.i32(i32 %214, i32 %215)
  store i32 %216, ptr %12, align 4, !tbaa !5
  store i32 %216, ptr %11, align 4, !tbaa !5
  store i32 %216, ptr %10, align 4, !tbaa !5
  br label %.thread326

.thread326:                                       ; preds = %207, %208, %212, %204
  %217 = load double, ptr %167, align 8, !tbaa !11
  %218 = fcmp oeq double %217, 0.000000e+00
  br i1 %218, label %219, label %220

219:                                              ; preds = %.thread326
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %121, i8 -1, i64 %116, i1 false)
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %117, i8 -1, i64 %116, i1 false)
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %118, i8 -1, i64 %116, i1 false)
  br label %221

220:                                              ; preds = %.thread326
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %121, i8 0, i64 %116, i1 false)
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %117, i8 0, i64 %116, i1 false)
  call void @llvm.memset.p0.i64(ptr nonnull align 8 %118, i8 0, i64 %116, i1 false)
  br label %221

221:                                              ; preds = %220, %219
  call void @libxsmm_dgemm(ptr noundef nonnull %172, ptr noundef nonnull %177, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %166, ptr noundef nonnull %111, ptr noundef nonnull %168, ptr noundef nonnull %114, ptr noundef nonnull %169, ptr noundef nonnull %167, ptr noundef nonnull %117, ptr noundef nonnull %170) #4
  call void @libxsmm_dgemm(ptr noundef nonnull %172, ptr noundef nonnull %177, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %166, ptr noundef nonnull %111, ptr noundef nonnull %168, ptr noundef nonnull %114, ptr noundef nonnull %169, ptr noundef nonnull %167, ptr noundef nonnull %118, ptr noundef nonnull %170) #4
  br i1 %197, label %222, label %230

222:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %15) #4
  %223 = load i32, ptr %10, align 4, !tbaa !5
  %224 = load i32, ptr %11, align 4, !tbaa !5
  %225 = load i32, ptr %12, align 4, !tbaa !5
  %226 = load i32, ptr %168, align 4, !tbaa !5
  %227 = load i32, ptr %169, align 4, !tbaa !5
  %228 = load i32, ptr %170, align 4, !tbaa !5
  call void @libxsmm_create_gemm_shape(ptr dead_on_unwind nonnull writable sret(%struct.libxsmm_gemm_shape) align 4 %15, i32 noundef %223, i32 noundef %224, i32 noundef %225, i32 noundef %226, i32 noundef %227, i32 noundef %228, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0) #4
  %229 = call ptr @libxsmm_dispatch_gemm(ptr noundef nonnull byval(%struct.libxsmm_gemm_shape) align 8 %15, i32 noundef %188, i32 noundef 0) #4
  %.not317 = icmp eq ptr %229, null
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #4
  br i1 %.not317, label %.critedge323.thread, label %230

230:                                              ; preds = %221, %222
  call void @llvm.x86.sse.stmxcsr(ptr nonnull %16)
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %17) #4
  %231 = call ptr @libxsmm_original_dgemm() #4
  call void %231(ptr noundef nonnull %172, ptr noundef nonnull %177, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %166, ptr noundef nonnull %111, ptr noundef nonnull %168, ptr noundef nonnull %114, ptr noundef nonnull %169, ptr noundef nonnull %167, ptr noundef nonnull %121, ptr noundef nonnull %170) #4
  %232 = load i32, ptr %10, align 4, !tbaa !5
  %233 = load i32, ptr %11, align 4, !tbaa !5
  %234 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %232, i32 noundef %233, ptr noundef nonnull %121, ptr noundef nonnull %117, ptr noundef nonnull %170, ptr noundef nonnull %170) #4
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %.thread328

236:                                              ; preds = %230
  %237 = load double, ptr %159, align 8, !tbaa !20
  %238 = fmul double %237, 1.000000e+03
  %239 = fcmp ogt double %238, 1.000000e+00
  br i1 %239, label %.thread328, label %240

240:                                              ; preds = %236
  %241 = load i32, ptr %10, align 4, !tbaa !5
  %242 = load i32, ptr %11, align 4, !tbaa !5
  %243 = call i32 @libxsmm_matdiff(ptr noundef nonnull %17, i32 noundef 0, i32 noundef %241, i32 noundef %242, ptr noundef nonnull %121, ptr noundef nonnull %118, ptr noundef nonnull %170, ptr noundef nonnull %170) #4
  %244 = icmp eq i32 %243, 0
  br i1 %244, label %245, label %.thread328

245:                                              ; preds = %240
  %246 = load double, ptr %159, align 8, !tbaa !20
  %247 = fmul double %246, 1.000000e+03
  %248 = fcmp ogt double %247, 1.000000e+00
  br i1 %248, label %249, label %.thread328

249:                                              ; preds = %245
  br label %.thread328

.thread328:                                       ; preds = %230, %240, %249, %245, %236
  %.3 = phi i32 [ 1, %249 ], [ 0, %245 ], [ %243, %240 ], [ %234, %230 ], [ 1, %236 ]
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %17) #4
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %117, ptr nonnull align 8 %121, i64 %116, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %118, ptr nonnull align 8 %121, i64 %116, i1 false)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  %indvars.iv.next393 = add nuw nsw i64 %indvars.iv392, 1
  %250 = icmp ult i64 %indvars.iv392, 4
  %251 = icmp eq i32 %.3, 0
  %252 = and i1 %250, %251
  br i1 %252, label %171, label %.critedge323, !llvm.loop !22

.critedge323.thread:                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  br label %.loopexit

.critedge323:                                     ; preds = %.thread328
  %indvars.iv.next396 = add nuw nsw i64 %indvars.iv395, 1
  %253 = icmp ult i64 %indvars.iv395, 36
  %254 = icmp eq i32 %.3, 0
  %255 = and i1 %253, %254
  br i1 %255, label %.preheader, label %.loopexit, !llvm.loop !23

.loopexit:                                        ; preds = %.critedge323, %.critedge323.thread
  %.6402 = phi i32 [ 1, %.critedge323.thread ], [ %.3, %.critedge323 ]
  %256 = and i32 %22, 8064
  call void @llvm.x86.sse.stmxcsr(ptr nonnull %18)
  %257 = load i32, ptr %18, align 4
  %258 = and i32 %257, -8065
  %259 = or disjoint i32 %258, %256
  store i32 %259, ptr %19, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr nonnull %19)
  call void @llvm.x86.sse.stmxcsr(ptr nonnull %20)
  %260 = load i32, ptr %20, align 4
  %261 = and i32 %260, -64
  store i32 %261, ptr %21, align 4
  call void @llvm.x86.sse.ldmxcsr(ptr nonnull %21)
  call void @libxsmm_free(ptr noundef nonnull %111) #4
  call void @libxsmm_free(ptr noundef nonnull %114) #4
  call void @libxsmm_free(ptr noundef nonnull %117) #4
  call void @libxsmm_free(ptr noundef nonnull %118) #4
  call void @libxsmm_free(ptr noundef nonnull %121) #4
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 6, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 296, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 296, ptr nonnull %3) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr nonnull %2) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr nonnull %1) #4
  call void @llvm.lifetime.end.p0(i64 148, ptr nonnull %0) #4
  ret i32 %.6402
}

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

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

; Function Attrs: nounwind memory(argmem: write)
declare void @llvm.x86.sse.stmxcsr(ptr) #3

; Function Attrs: nounwind
declare void @llvm.x86.sse.ldmxcsr(ptr) #4

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

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

declare noalias ptr @libxsmm_malloc(i64 noundef) local_unnamed_addr #6

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

declare void @libxsmm_dgemm(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

declare void @libxsmm_create_gemm_shape(ptr dead_on_unwind writable sret(%struct.libxsmm_gemm_shape) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

declare ptr @libxsmm_dispatch_gemm(ptr noundef byval(%struct.libxsmm_gemm_shape) align 8, i32 noundef, i32 noundef) local_unnamed_addr #6

declare ptr @libxsmm_original_dgemm() local_unnamed_addr #6

declare i32 @libxsmm_matdiff(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #8

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #8

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #8

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !10, !14, !15}
!14 = !{!"llvm.loop.isvectorized", i32 1}
!15 = !{!"llvm.loop.unroll.runtime.disable"}
!16 = distinct !{!16, !10, !15, !14}
!17 = distinct !{!17, !10, !14, !15}
!18 = distinct !{!18, !10, !15, !14}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !12, i64 32}
!21 = !{!"libxsmm_matdiff_info", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}


; Effective O3 passes: ADCEPass,BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass