; LLVM IR from libxsmm/libxsmm :: samples/pyfr (pyfr_driver_asp_reg)

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

%struct.libxsmm_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 }

@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@stderr = external global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [44 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca %struct.libxsmm_matdiff_info, align 8
  %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 i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca i8, align 1
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca i64, align 8
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca ptr, align 8
  %61 = alloca double, align 8
  %62 = alloca double, align 8
  %63 = alloca i32, align 4
  %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 double, align 8
  %72 = alloca double, align 8
  %73 = alloca i64, align 8
  %74 = alloca i32, align 4
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca double, align 8
  %86 = alloca double, align 8
  %87 = alloca i64, align 8
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  store ptr null, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  store ptr null, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  store ptr null, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  store ptr null, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  store ptr null, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  store ptr null, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  store ptr null, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  store ptr null, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  store ptr null, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  store ptr null, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store ptr null, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %91 = call ptr @getenv(ptr noundef @.str) #8
  store ptr %91, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %92 = load ptr, ptr %22, align 8, !tbaa !9
  %93 = icmp eq ptr null, %92
  br i1 %93, label %99, label %94

94:                                               ; preds = %2
  %95 = load ptr, ptr %22, align 8, !tbaa !9
  %96 = load i8, ptr %95, align 1, !tbaa !11
  %97 = sext i8 %96 to i32
  %98 = icmp eq i32 0, %97
  br i1 %98, label %99, label %100

99:                                               ; preds = %94, %2
  br label %103

100:                                              ; preds = %94
  %101 = load ptr, ptr %22, align 8, !tbaa !9
  %102 = call i32 @atoi(ptr noundef %101) #9
  br label %103

103:                                              ; preds = %100, %99
  %104 = phi i32 [ 48, %99 ], [ %102, %100 ]
  store i32 %104, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %105 = call ptr @getenv(ptr noundef @.str.1) #8
  store ptr %105, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %106 = load ptr, ptr %24, align 8, !tbaa !9
  %107 = icmp eq ptr null, %106
  br i1 %107, label %113, label %108

108:                                              ; preds = %103
  %109 = load ptr, ptr %24, align 8, !tbaa !9
  %110 = load i8, ptr %109, align 1, !tbaa !11
  %111 = sext i8 %110 to i32
  %112 = icmp eq i32 0, %111
  br i1 %112, label %113, label %114

113:                                              ; preds = %108, %103
  br label %117

114:                                              ; preds = %108
  %115 = load ptr, ptr %24, align 8, !tbaa !9
  %116 = call i32 @atoi(ptr noundef %115) #9
  br label %117

117:                                              ; preds = %114, %113
  %118 = phi i32 [ 0, %113 ], [ %116, %114 ]
  store i32 %118, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 192, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  store double 1.000000e+00, ptr %40, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  store double 1.000000e+00, ptr %41, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #8
  store i8 78, ptr %42, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  store ptr null, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  store ptr null, ptr %44, align 8, !tbaa !9
  %119 = load i32, ptr %4, align 4, !tbaa !5
  %120 = icmp slt i32 %119, 4
  br i1 %120, label %121, label %124

121:                                              ; preds = %117
  %122 = load ptr, ptr @stderr, align 8, !tbaa !9
  %123 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %122, ptr noundef @.str.2) #8
  call void @exit(i32 noundef -1) #10
  unreachable

124:                                              ; preds = %117
  %125 = load ptr, ptr %5, align 8, !tbaa !9
  %126 = getelementptr inbounds ptr, ptr %125, i64 1
  %127 = load ptr, ptr %126, align 8, !tbaa !9
  store ptr %127, ptr %7, align 8, !tbaa !9
  %128 = load ptr, ptr %5, align 8, !tbaa !9
  %129 = getelementptr inbounds ptr, ptr %128, i64 2
  %130 = load ptr, ptr %129, align 8, !tbaa !9
  %131 = call i32 @atoi(ptr noundef %130) #9
  store i32 %131, ptr %28, align 4, !tbaa !5
  %132 = load i32, ptr %28, align 4, !tbaa !5
  %133 = load i32, ptr %23, align 4, !tbaa !5
  %134 = icmp slt i32 %132, %133
  br i1 %134, label %135, label %137

135:                                              ; preds = %124
  %136 = load i32, ptr %28, align 4, !tbaa !5
  store i32 %136, ptr %23, align 4, !tbaa !5
  br label %137

137:                                              ; preds = %135, %124
  %138 = load ptr, ptr %5, align 8, !tbaa !9
  %139 = getelementptr inbounds ptr, ptr %138, i64 3
  %140 = load ptr, ptr %139, align 8, !tbaa !9
  %141 = call i32 @atoi(ptr noundef %140) #9
  store i32 %141, ptr %34, align 4, !tbaa !5
  %142 = load i32, ptr %4, align 4, !tbaa !5
  %143 = icmp slt i32 4, %142
  br i1 %143, label %144, label %149

144:                                              ; preds = %137
  %145 = load ptr, ptr %5, align 8, !tbaa !9
  %146 = getelementptr inbounds ptr, ptr %145, i64 4
  %147 = load ptr, ptr %146, align 8, !tbaa !9
  %148 = call i32 @atoi(ptr noundef %147) #9
  br label %150

149:                                              ; preds = %137
  br label %150

150:                                              ; preds = %149, %144
  %151 = phi i32 [ %148, %144 ], [ -1, %149 ]
  store i32 %151, ptr %35, align 4, !tbaa !5
  %152 = load ptr, ptr %7, align 8, !tbaa !9
  %153 = call i32 @my_csr_reader(ptr noundef %152, ptr noundef %8, ptr noundef %9, ptr noundef %14, ptr noundef %10, ptr noundef %11, ptr noundef %12)
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %156

155:                                              ; preds = %150
  call void @exit(i32 noundef -1) #10
  unreachable

156:                                              ; preds = %150
  %157 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %157, ptr %27, align 4, !tbaa !5
  %158 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %158, ptr %29, align 4, !tbaa !5
  %159 = load ptr, ptr %7, align 8, !tbaa !9
  %160 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, ptr noundef %159)
  %161 = load i32, ptr %10, align 4, !tbaa !5
  %162 = load i32, ptr %11, align 4, !tbaa !5
  %163 = load i32, ptr %12, align 4, !tbaa !5
  %164 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef %161, i32 noundef %162, i32 noundef %163)
  %165 = load i32, ptr %29, align 4, !tbaa !5
  %166 = sext i32 %165 to i64
  %167 = mul i64 8, %166
  %168 = load i32, ptr %27, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = mul i64 %167, %169
  %171 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %170, i64 noundef 64)
  store ptr %171, ptr %13, align 8, !tbaa !9
  %172 = load i32, ptr %29, align 4, !tbaa !5
  %173 = sext i32 %172 to i64
  %174 = mul i64 8, %173
  %175 = load i32, ptr %28, align 4, !tbaa !5
  %176 = sext i32 %175 to i64
  %177 = mul i64 %174, %176
  %178 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %177, i64 noundef 64)
  store ptr %178, ptr %15, align 8, !tbaa !9
  br label %179

179:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  store double 0.000000e+00, ptr %45, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %180 = load double, ptr %45, align 8, !tbaa !12
  %181 = call double @llvm.fmuladd.f64(double %180, double 1.000000e+00, double 1.000000e+00)
  store double %181, ptr %46, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  %182 = load i32, ptr %29, align 4, !tbaa !5
  store i32 %182, ptr %47, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %183 = load i32, ptr %28, align 4, !tbaa !5
  store i32 %183, ptr %48, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  %184 = load i32, ptr %29, align 4, !tbaa !5
  store i32 %184, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  store i32 0, ptr %50, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  store i32 0, ptr %51, align 4, !tbaa !5
  %185 = load double, ptr %45, align 8, !tbaa !12
  %186 = fcmp une double 0.000000e+00, %185
  br i1 %186, label %187, label %244

187:                                              ; preds = %179
  store i32 0, ptr %50, align 4, !tbaa !5
  br label %188

188:                                              ; preds = %240, %187
  %189 = load i32, ptr %50, align 4, !tbaa !5
  %190 = load i32, ptr %48, align 4, !tbaa !5
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %192, label %243

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

193:                                              ; preds = %217, %192
  %194 = load i32, ptr %51, align 4, !tbaa !5
  %195 = load i32, ptr %47, align 4, !tbaa !5
  %196 = icmp slt i32 %194, %195
  br i1 %196, label %197, label %220

197:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %198 = load i32, ptr %50, align 4, !tbaa !5
  %199 = load i32, ptr %49, align 4, !tbaa !5
  %200 = mul nsw i32 %198, %199
  %201 = load i32, ptr %51, align 4, !tbaa !5
  %202 = add nsw i32 %200, %201
  store i32 %202, ptr %52, align 4, !tbaa !5
  %203 = load double, ptr %46, align 8, !tbaa !12
  %204 = load i32, ptr %50, align 4, !tbaa !5
  %205 = sitofp i32 %204 to double
  %206 = load i32, ptr %47, align 4, !tbaa !5
  %207 = sitofp i32 %206 to double
  %208 = call double @llvm.fmuladd.f64(double %205, double %207, double 1.000000e+00)
  %209 = load i32, ptr %51, align 4, !tbaa !5
  %210 = sitofp i32 %209 to double
  %211 = fadd double %208, %210
  %212 = fmul double %203, %211
  %213 = load ptr, ptr %15, align 8, !tbaa !9
  %214 = load i32, ptr %52, align 4, !tbaa !5
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds double, ptr %213, i64 %215
  store double %212, ptr %216, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %217

217:                                              ; preds = %197
  %218 = load i32, ptr %51, align 4, !tbaa !5
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %51, align 4, !tbaa !5
  br label %193, !llvm.loop !14

220:                                              ; preds = %193
  br label %221

221:                                              ; preds = %236, %220
  %222 = load i32, ptr %51, align 4, !tbaa !5
  %223 = load i32, ptr %49, align 4, !tbaa !5
  %224 = icmp slt i32 %222, %223
  br i1 %224, label %225, label %239

225:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  %226 = load i32, ptr %50, align 4, !tbaa !5
  %227 = load i32, ptr %49, align 4, !tbaa !5
  %228 = mul nsw i32 %226, %227
  %229 = load i32, ptr %51, align 4, !tbaa !5
  %230 = add nsw i32 %228, %229
  store i32 %230, ptr %53, align 4, !tbaa !5
  %231 = load double, ptr %45, align 8, !tbaa !12
  %232 = load ptr, ptr %15, align 8, !tbaa !9
  %233 = load i32, ptr %53, align 4, !tbaa !5
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds double, ptr %232, i64 %234
  store double %231, ptr %235, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %236

236:                                              ; preds = %225
  %237 = load i32, ptr %51, align 4, !tbaa !5
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %51, align 4, !tbaa !5
  br label %221, !llvm.loop !16

239:                                              ; preds = %221
  br label %240

240:                                              ; preds = %239
  %241 = load i32, ptr %50, align 4, !tbaa !5
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %50, align 4, !tbaa !5
  br label %188, !llvm.loop !17

243:                                              ; preds = %188
  br label %296

244:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %245 = load i32, ptr %48, align 4, !tbaa !5
  %246 = load i32, ptr %49, align 4, !tbaa !5
  %247 = mul nsw i32 %245, %246
  store i32 %247, ptr %54, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %248 = load i32, ptr %54, align 4, !tbaa !5
  %249 = add nsw i32 %248, 1
  %250 = sdiv i32 %249, 2
  %251 = sitofp i32 %250 to double
  store double %251, ptr %55, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %252 = load double, ptr %55, align 8, !tbaa !12
  %253 = fdiv double 1.000000e+00, %252
  store double %253, ptr %56, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %254 = load i32, ptr %54, align 4, !tbaa !5
  %255 = sext i32 %254 to i64
  %256 = call i64 @libxsmm_coprime2(i64 noundef %255)
  store i64 %256, ptr %57, align 8, !tbaa !18
  store i32 0, ptr %50, align 4, !tbaa !5
  br label %257

257:                                              ; preds = %292, %244
  %258 = load i32, ptr %50, align 4, !tbaa !5
  %259 = load i32, ptr %48, align 4, !tbaa !5
  %260 = icmp slt i32 %258, %259
  br i1 %260, label %261, label %295

261:                                              ; preds = %257
  store i32 0, ptr %51, align 4, !tbaa !5
  br label %262

262:                                              ; preds = %288, %261
  %263 = load i32, ptr %51, align 4, !tbaa !5
  %264 = load i32, ptr %49, align 4, !tbaa !5
  %265 = icmp slt i32 %263, %264
  br i1 %265, label %266, label %291

266:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %267 = load i32, ptr %50, align 4, !tbaa !5
  %268 = load i32, ptr %49, align 4, !tbaa !5
  %269 = mul nsw i32 %267, %268
  %270 = load i32, ptr %51, align 4, !tbaa !5
  %271 = add nsw i32 %269, %270
  store i32 %271, ptr %58, align 4, !tbaa !5
  %272 = load double, ptr %56, align 8, !tbaa !12
  %273 = load i64, ptr %57, align 8, !tbaa !18
  %274 = load i32, ptr %58, align 4, !tbaa !5
  %275 = sext i32 %274 to i64
  %276 = mul i64 %273, %275
  %277 = load i32, ptr %54, align 4, !tbaa !5
  %278 = sext i32 %277 to i64
  %279 = urem i64 %276, %278
  %280 = uitofp i64 %279 to double
  %281 = load double, ptr %55, align 8, !tbaa !12
  %282 = fsub double %280, %281
  %283 = fmul double %272, %282
  %284 = load ptr, ptr %15, align 8, !tbaa !9
  %285 = load i32, ptr %58, align 4, !tbaa !5
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds double, ptr %284, i64 %286
  store double %283, ptr %287, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %288

288:                                              ; preds = %266
  %289 = load i32, ptr %51, align 4, !tbaa !5
  %290 = add nsw i32 %289, 1
  store i32 %290, ptr %51, align 4, !tbaa !5
  br label %262, !llvm.loop !20

291:                                              ; preds = %262
  br label %292

292:                                              ; preds = %291
  %293 = load i32, ptr %50, align 4, !tbaa !5
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %50, align 4, !tbaa !5
  br label %257, !llvm.loop !21

295:                                              ; preds = %257
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  br label %296

296:                                              ; preds = %295, %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %297

297:                                              ; preds = %296
  br label %298

298:                                              ; preds = %297
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %299

299:                                              ; preds = %310, %298
  %300 = load i32, ptr %30, align 4, !tbaa !5
  %301 = load i32, ptr %29, align 4, !tbaa !5
  %302 = load i32, ptr %27, align 4, !tbaa !5
  %303 = mul nsw i32 %301, %302
  %304 = icmp slt i32 %300, %303
  br i1 %304, label %305, label %313

305:                                              ; preds = %299
  %306 = load ptr, ptr %13, align 8, !tbaa !9
  %307 = load i32, ptr %30, align 4, !tbaa !5
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds double, ptr %306, i64 %308
  store double 0.000000e+00, ptr %309, align 8, !tbaa !12
  br label %310

310:                                              ; preds = %305
  %311 = load i32, ptr %30, align 4, !tbaa !5
  %312 = add nsw i32 %311, 1
  store i32 %312, ptr %30, align 4, !tbaa !5
  br label %299, !llvm.loop !22

313:                                              ; preds = %299
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %314

314:                                              ; preds = %364, %313
  %315 = load i32, ptr %30, align 4, !tbaa !5
  %316 = load i32, ptr %27, align 4, !tbaa !5
  %317 = icmp slt i32 %315, %316
  br i1 %317, label %318, label %367

318:                                              ; preds = %314
  %319 = load ptr, ptr %8, align 8, !tbaa !9
  %320 = load i32, ptr %30, align 4, !tbaa !5
  %321 = add nsw i32 %320, 1
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i32, ptr %319, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !5
  %325 = load ptr, ptr %8, align 8, !tbaa !9
  %326 = load i32, ptr %30, align 4, !tbaa !5
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %325, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !5
  %330 = sub i32 %324, %329
  store i32 %330, ptr %33, align 4, !tbaa !5
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %331

331:                                              ; preds = %360, %318
  %332 = load i32, ptr %32, align 4, !tbaa !5
  %333 = load i32, ptr %33, align 4, !tbaa !5
  %334 = icmp slt i32 %332, %333
  br i1 %334, label %335, label %363

335:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #8
  %336 = load ptr, ptr %8, align 8, !tbaa !9
  %337 = load i32, ptr %30, align 4, !tbaa !5
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i32, ptr %336, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !5
  %341 = load i32, ptr %32, align 4, !tbaa !5
  %342 = add i32 %340, %341
  store i32 %342, ptr %59, align 4, !tbaa !5
  %343 = load ptr, ptr %14, align 8, !tbaa !9
  %344 = load i32, ptr %59, align 4, !tbaa !5
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds double, ptr %343, i64 %345
  %347 = load double, ptr %346, align 8, !tbaa !12
  %348 = load ptr, ptr %13, align 8, !tbaa !9
  %349 = load i32, ptr %30, align 4, !tbaa !5
  %350 = load i32, ptr %29, align 4, !tbaa !5
  %351 = mul nsw i32 %349, %350
  %352 = load ptr, ptr %9, align 8, !tbaa !9
  %353 = load i32, ptr %59, align 4, !tbaa !5
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %352, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !5
  %357 = add i32 %351, %356
  %358 = zext i32 %357 to i64
  %359 = getelementptr inbounds double, ptr %348, i64 %358
  store double %347, ptr %359, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #8
  br label %360

360:                                              ; preds = %335
  %361 = load i32, ptr %32, align 4, !tbaa !5
  %362 = add nsw i32 %361, 1
  store i32 %362, ptr %32, align 4, !tbaa !5
  br label %331, !llvm.loop !23

363:                                              ; preds = %331
  br label %364

364:                                              ; preds = %363
  %365 = load i32, ptr %30, align 4, !tbaa !5
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %30, align 4, !tbaa !5
  br label %314, !llvm.loop !24

367:                                              ; preds = %314
  %368 = load i32, ptr %35, align 4, !tbaa !5
  %369 = icmp sge i32 0, %368
  br i1 %369, label %370, label %591

370:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %371 = call ptr @getenv(ptr noundef @.str.5) #8
  store ptr %371, ptr %60, align 8, !tbaa !9
  %372 = load i32, ptr %27, align 4, !tbaa !5
  %373 = sext i32 %372 to i64
  %374 = mul i64 8, %373
  %375 = load i32, ptr %28, align 4, !tbaa !5
  %376 = sext i32 %375 to i64
  %377 = mul i64 %374, %376
  %378 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %377, i64 noundef 64)
  store ptr %378, ptr %16, align 8, !tbaa !9
  %379 = load i32, ptr %27, align 4, !tbaa !5
  %380 = sext i32 %379 to i64
  %381 = mul i64 8, %380
  %382 = load i32, ptr %28, align 4, !tbaa !5
  %383 = sext i32 %382 to i64
  %384 = mul i64 %381, %383
  %385 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %384, i64 noundef 64)
  store ptr %385, ptr %17, align 8, !tbaa !9
  %386 = load i32, ptr %27, align 4, !tbaa !5
  %387 = sext i32 %386 to i64
  %388 = mul i64 8, %387
  %389 = load i32, ptr %28, align 4, !tbaa !5
  %390 = sext i32 %389 to i64
  %391 = mul i64 %388, %390
  %392 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %391, i64 noundef 64)
  store ptr %392, ptr %18, align 8, !tbaa !9
  %393 = load ptr, ptr %16, align 8, !tbaa !9
  %394 = icmp ne ptr null, %393
  br i1 %394, label %395, label %402

395:                                              ; preds = %370
  %396 = load ptr, ptr %17, align 8, !tbaa !9
  %397 = icmp ne ptr null, %396
  br i1 %397, label %398, label %402

398:                                              ; preds = %395
  %399 = load ptr, ptr %18, align 8, !tbaa !9
  %400 = icmp ne ptr null, %399
  br i1 %400, label %401, label %402

401:                                              ; preds = %398
  br label %403

402:                                              ; preds = %398, %395, %370
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.7, i32 noundef 229, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

403:                                              ; preds = %401
  br label %404

404:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  store double 0.000000e+00, ptr %61, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #8
  %405 = load double, ptr %61, align 8, !tbaa !12
  %406 = call double @llvm.fmuladd.f64(double %405, double 1.000000e+00, double 1.000000e+00)
  store double %406, ptr %62, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %407 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %407, ptr %63, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  %408 = load i32, ptr %28, align 4, !tbaa !5
  store i32 %408, ptr %64, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  %409 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %409, ptr %65, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  store i32 0, ptr %66, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  store i32 0, ptr %67, align 4, !tbaa !5
  %410 = load double, ptr %61, align 8, !tbaa !12
  %411 = fcmp une double 0.000000e+00, %410
  br i1 %411, label %412, label %469

412:                                              ; preds = %404
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %413

413:                                              ; preds = %465, %412
  %414 = load i32, ptr %66, align 4, !tbaa !5
  %415 = load i32, ptr %64, align 4, !tbaa !5
  %416 = icmp slt i32 %414, %415
  br i1 %416, label %417, label %468

417:                                              ; preds = %413
  store i32 0, ptr %67, align 4, !tbaa !5
  br label %418

418:                                              ; preds = %442, %417
  %419 = load i32, ptr %67, align 4, !tbaa !5
  %420 = load i32, ptr %63, align 4, !tbaa !5
  %421 = icmp slt i32 %419, %420
  br i1 %421, label %422, label %445

422:                                              ; preds = %418
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %423 = load i32, ptr %66, align 4, !tbaa !5
  %424 = load i32, ptr %65, align 4, !tbaa !5
  %425 = mul nsw i32 %423, %424
  %426 = load i32, ptr %67, align 4, !tbaa !5
  %427 = add nsw i32 %425, %426
  store i32 %427, ptr %68, align 4, !tbaa !5
  %428 = load double, ptr %62, align 8, !tbaa !12
  %429 = load i32, ptr %66, align 4, !tbaa !5
  %430 = sitofp i32 %429 to double
  %431 = load i32, ptr %63, align 4, !tbaa !5
  %432 = sitofp i32 %431 to double
  %433 = call double @llvm.fmuladd.f64(double %430, double %432, double 1.000000e+00)
  %434 = load i32, ptr %67, align 4, !tbaa !5
  %435 = sitofp i32 %434 to double
  %436 = fadd double %433, %435
  %437 = fmul double %428, %436
  %438 = load ptr, ptr %17, align 8, !tbaa !9
  %439 = load i32, ptr %68, align 4, !tbaa !5
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds double, ptr %438, i64 %440
  store double %437, ptr %441, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %442

442:                                              ; preds = %422
  %443 = load i32, ptr %67, align 4, !tbaa !5
  %444 = add nsw i32 %443, 1
  store i32 %444, ptr %67, align 4, !tbaa !5
  br label %418, !llvm.loop !25

445:                                              ; preds = %418
  br label %446

446:                                              ; preds = %461, %445
  %447 = load i32, ptr %67, align 4, !tbaa !5
  %448 = load i32, ptr %65, align 4, !tbaa !5
  %449 = icmp slt i32 %447, %448
  br i1 %449, label %450, label %464

450:                                              ; preds = %446
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  %451 = load i32, ptr %66, align 4, !tbaa !5
  %452 = load i32, ptr %65, align 4, !tbaa !5
  %453 = mul nsw i32 %451, %452
  %454 = load i32, ptr %67, align 4, !tbaa !5
  %455 = add nsw i32 %453, %454
  store i32 %455, ptr %69, align 4, !tbaa !5
  %456 = load double, ptr %61, align 8, !tbaa !12
  %457 = load ptr, ptr %17, align 8, !tbaa !9
  %458 = load i32, ptr %69, align 4, !tbaa !5
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds double, ptr %457, i64 %459
  store double %456, ptr %460, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br label %461

461:                                              ; preds = %450
  %462 = load i32, ptr %67, align 4, !tbaa !5
  %463 = add nsw i32 %462, 1
  store i32 %463, ptr %67, align 4, !tbaa !5
  br label %446, !llvm.loop !26

464:                                              ; preds = %446
  br label %465

465:                                              ; preds = %464
  %466 = load i32, ptr %66, align 4, !tbaa !5
  %467 = add nsw i32 %466, 1
  store i32 %467, ptr %66, align 4, !tbaa !5
  br label %413, !llvm.loop !27

468:                                              ; preds = %413
  br label %521

469:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  %470 = load i32, ptr %64, align 4, !tbaa !5
  %471 = load i32, ptr %65, align 4, !tbaa !5
  %472 = mul nsw i32 %470, %471
  store i32 %472, ptr %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %473 = load i32, ptr %70, align 4, !tbaa !5
  %474 = add nsw i32 %473, 1
  %475 = sdiv i32 %474, 2
  %476 = sitofp i32 %475 to double
  store double %476, ptr %71, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %477 = load double, ptr %71, align 8, !tbaa !12
  %478 = fdiv double 1.000000e+00, %477
  store double %478, ptr %72, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %479 = load i32, ptr %70, align 4, !tbaa !5
  %480 = sext i32 %479 to i64
  %481 = call i64 @libxsmm_coprime2(i64 noundef %480)
  store i64 %481, ptr %73, align 8, !tbaa !18
  store i32 0, ptr %66, align 4, !tbaa !5
  br label %482

482:                                              ; preds = %517, %469
  %483 = load i32, ptr %66, align 4, !tbaa !5
  %484 = load i32, ptr %64, align 4, !tbaa !5
  %485 = icmp slt i32 %483, %484
  br i1 %485, label %486, label %520

486:                                              ; preds = %482
  store i32 0, ptr %67, align 4, !tbaa !5
  br label %487

487:                                              ; preds = %513, %486
  %488 = load i32, ptr %67, align 4, !tbaa !5
  %489 = load i32, ptr %65, align 4, !tbaa !5
  %490 = icmp slt i32 %488, %489
  br i1 %490, label %491, label %516

491:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #8
  %492 = load i32, ptr %66, align 4, !tbaa !5
  %493 = load i32, ptr %65, align 4, !tbaa !5
  %494 = mul nsw i32 %492, %493
  %495 = load i32, ptr %67, align 4, !tbaa !5
  %496 = add nsw i32 %494, %495
  store i32 %496, ptr %74, align 4, !tbaa !5
  %497 = load double, ptr %72, align 8, !tbaa !12
  %498 = load i64, ptr %73, align 8, !tbaa !18
  %499 = load i32, ptr %74, align 4, !tbaa !5
  %500 = sext i32 %499 to i64
  %501 = mul i64 %498, %500
  %502 = load i32, ptr %70, align 4, !tbaa !5
  %503 = sext i32 %502 to i64
  %504 = urem i64 %501, %503
  %505 = uitofp i64 %504 to double
  %506 = load double, ptr %71, align 8, !tbaa !12
  %507 = fsub double %505, %506
  %508 = fmul double %497, %507
  %509 = load ptr, ptr %17, align 8, !tbaa !9
  %510 = load i32, ptr %74, align 4, !tbaa !5
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds double, ptr %509, i64 %511
  store double %508, ptr %512, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  br label %513

513:                                              ; preds = %491
  %514 = load i32, ptr %67, align 4, !tbaa !5
  %515 = add nsw i32 %514, 1
  store i32 %515, ptr %67, align 4, !tbaa !5
  br label %487, !llvm.loop !28

516:                                              ; preds = %487
  br label %517

517:                                              ; preds = %516
  %518 = load i32, ptr %66, align 4, !tbaa !5
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr %66, align 4, !tbaa !5
  br label %482, !llvm.loop !29

520:                                              ; preds = %482
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  br label %521

521:                                              ; preds = %520, %468
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  br label %522

522:                                              ; preds = %521
  br label %523

523:                                              ; preds = %522
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %524

524:                                              ; preds = %540, %523
  %525 = load i32, ptr %30, align 4, !tbaa !5
  %526 = load i32, ptr %27, align 4, !tbaa !5
  %527 = load i32, ptr %28, align 4, !tbaa !5
  %528 = mul nsw i32 %526, %527
  %529 = icmp slt i32 %525, %528
  br i1 %529, label %530, label %543

530:                                              ; preds = %524
  %531 = load ptr, ptr %17, align 8, !tbaa !9
  %532 = load i32, ptr %30, align 4, !tbaa !5
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds double, ptr %531, i64 %533
  %535 = load double, ptr %534, align 8, !tbaa !12
  %536 = load ptr, ptr %16, align 8, !tbaa !9
  %537 = load i32, ptr %30, align 4, !tbaa !5
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds double, ptr %536, i64 %538
  store double %535, ptr %539, align 8, !tbaa !12
  br label %540

540:                                              ; preds = %530
  %541 = load i32, ptr %30, align 4, !tbaa !5
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %30, align 4, !tbaa !5
  br label %524, !llvm.loop !30

543:                                              ; preds = %524
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %544

544:                                              ; preds = %560, %543
  %545 = load i32, ptr %30, align 4, !tbaa !5
  %546 = load i32, ptr %27, align 4, !tbaa !5
  %547 = load i32, ptr %28, align 4, !tbaa !5
  %548 = mul nsw i32 %546, %547
  %549 = icmp slt i32 %545, %548
  br i1 %549, label %550, label %563

550:                                              ; preds = %544
  %551 = load ptr, ptr %17, align 8, !tbaa !9
  %552 = load i32, ptr %30, align 4, !tbaa !5
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds double, ptr %551, i64 %553
  %555 = load double, ptr %554, align 8, !tbaa !12
  %556 = load ptr, ptr %18, align 8, !tbaa !9
  %557 = load i32, ptr %30, align 4, !tbaa !5
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds double, ptr %556, i64 %558
  store double %555, ptr %559, align 8, !tbaa !12
  br label %560

560:                                              ; preds = %550
  %561 = load i32, ptr %30, align 4, !tbaa !5
  %562 = add nsw i32 %561, 1
  store i32 %562, ptr %30, align 4, !tbaa !5
  br label %544, !llvm.loop !31

563:                                              ; preds = %544
  store double 0.000000e+00, ptr %41, align 8, !tbaa !12
  %564 = load i32, ptr %27, align 4, !tbaa !5
  %565 = load i32, ptr %23, align 4, !tbaa !5
  %566 = load i32, ptr %29, align 4, !tbaa !5
  %567 = load i32, ptr %29, align 4, !tbaa !5
  %568 = load i32, ptr %28, align 4, !tbaa !5
  %569 = load i32, ptr %28, align 4, !tbaa !5
  %570 = load ptr, ptr %13, align 8, !tbaa !9
  %571 = load ptr, ptr %60, align 8, !tbaa !9
  %572 = icmp eq ptr null, %571
  br i1 %572, label %582, label %573

573:                                              ; preds = %563
  %574 = load ptr, ptr %60, align 8, !tbaa !9
  %575 = load i8, ptr %574, align 1, !tbaa !11
  %576 = sext i8 %575 to i32
  %577 = icmp eq i32 0, %576
  br i1 %577, label %582, label %578

578:                                              ; preds = %573
  %579 = load ptr, ptr %60, align 8, !tbaa !9
  %580 = call i32 @atoi(ptr noundef %579) #9
  %581 = icmp ne i32 0, %580
  br label %582

582:                                              ; preds = %578, %573, %563
  %583 = phi i1 [ true, %573 ], [ true, %563 ], [ %581, %578 ]
  %584 = zext i1 %583 to i64
  %585 = select i1 %583, i32 1, i32 0
  %586 = load i32, ptr %25, align 4, !tbaa !5
  %587 = icmp ne i32 %586, 0
  %588 = zext i1 %587 to i64
  %589 = select i1 %587, ptr null, ptr @libxsmm_timer_tick
  %590 = call ptr @libxsmm_fsspmdm_create(i32 noundef 0, i32 noundef %564, i32 noundef %565, i32 noundef %566, i32 noundef %567, i32 noundef %568, i32 noundef %569, ptr noundef %40, ptr noundef %41, ptr noundef %570, i32 noundef %585, ptr noundef %589)
  store ptr %590, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  br label %591

591:                                              ; preds = %582, %367
  %592 = load i32, ptr %35, align 4, !tbaa !5
  %593 = icmp sgt i32 0, %592
  br i1 %593, label %597, label %594

594:                                              ; preds = %591
  %595 = load i32, ptr %35, align 4, !tbaa !5
  %596 = icmp slt i32 0, %595
  br i1 %596, label %597, label %810

597:                                              ; preds = %594, %591
  %598 = load i32, ptr %27, align 4, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = mul i64 8, %599
  %601 = load i32, ptr %28, align 4, !tbaa !5
  %602 = sext i32 %601 to i64
  %603 = mul i64 %600, %602
  %604 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %603, i64 noundef 64)
  store ptr %604, ptr %19, align 8, !tbaa !9
  %605 = load i32, ptr %27, align 4, !tbaa !5
  %606 = sext i32 %605 to i64
  %607 = mul i64 8, %606
  %608 = load i32, ptr %28, align 4, !tbaa !5
  %609 = sext i32 %608 to i64
  %610 = mul i64 %607, %609
  %611 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %610, i64 noundef 64)
  store ptr %611, ptr %20, align 8, !tbaa !9
  %612 = load i32, ptr %27, align 4, !tbaa !5
  %613 = sext i32 %612 to i64
  %614 = mul i64 8, %613
  %615 = load i32, ptr %28, align 4, !tbaa !5
  %616 = sext i32 %615 to i64
  %617 = mul i64 %614, %616
  %618 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %617, i64 noundef 64)
  store ptr %618, ptr %21, align 8, !tbaa !9
  %619 = load ptr, ptr %19, align 8, !tbaa !9
  %620 = icmp ne ptr null, %619
  br i1 %620, label %621, label %628

621:                                              ; preds = %597
  %622 = load ptr, ptr %20, align 8, !tbaa !9
  %623 = icmp ne ptr null, %622
  br i1 %623, label %624, label %628

624:                                              ; preds = %621
  %625 = load ptr, ptr %21, align 8, !tbaa !9
  %626 = icmp ne ptr null, %625
  br i1 %626, label %627, label %628

627:                                              ; preds = %624
  br label %629

628:                                              ; preds = %624, %621, %597
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.7, i32 noundef 251, ptr noundef @__PRETTY_FUNCTION__.main) #10
  unreachable

629:                                              ; preds = %627
  br label %630

630:                                              ; preds = %629
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #8
  store double 0.000000e+00, ptr %75, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  %631 = load double, ptr %75, align 8, !tbaa !12
  %632 = call double @llvm.fmuladd.f64(double %631, double 1.000000e+00, double 1.000000e+00)
  store double %632, ptr %76, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %633 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %633, ptr %77, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #8
  %634 = load i32, ptr %28, align 4, !tbaa !5
  store i32 %634, ptr %78, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  %635 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %635, ptr %79, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #8
  store i32 0, ptr %80, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #8
  store i32 0, ptr %81, align 4, !tbaa !5
  %636 = load double, ptr %75, align 8, !tbaa !12
  %637 = fcmp une double 0.000000e+00, %636
  br i1 %637, label %638, label %695

638:                                              ; preds = %630
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %639

639:                                              ; preds = %691, %638
  %640 = load i32, ptr %80, align 4, !tbaa !5
  %641 = load i32, ptr %78, align 4, !tbaa !5
  %642 = icmp slt i32 %640, %641
  br i1 %642, label %643, label %694

643:                                              ; preds = %639
  store i32 0, ptr %81, align 4, !tbaa !5
  br label %644

644:                                              ; preds = %668, %643
  %645 = load i32, ptr %81, align 4, !tbaa !5
  %646 = load i32, ptr %77, align 4, !tbaa !5
  %647 = icmp slt i32 %645, %646
  br i1 %647, label %648, label %671

648:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  %649 = load i32, ptr %80, align 4, !tbaa !5
  %650 = load i32, ptr %79, align 4, !tbaa !5
  %651 = mul nsw i32 %649, %650
  %652 = load i32, ptr %81, align 4, !tbaa !5
  %653 = add nsw i32 %651, %652
  store i32 %653, ptr %82, align 4, !tbaa !5
  %654 = load double, ptr %76, align 8, !tbaa !12
  %655 = load i32, ptr %80, align 4, !tbaa !5
  %656 = sitofp i32 %655 to double
  %657 = load i32, ptr %77, align 4, !tbaa !5
  %658 = sitofp i32 %657 to double
  %659 = call double @llvm.fmuladd.f64(double %656, double %658, double 1.000000e+00)
  %660 = load i32, ptr %81, align 4, !tbaa !5
  %661 = sitofp i32 %660 to double
  %662 = fadd double %659, %661
  %663 = fmul double %654, %662
  %664 = load ptr, ptr %20, align 8, !tbaa !9
  %665 = load i32, ptr %82, align 4, !tbaa !5
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds double, ptr %664, i64 %666
  store double %663, ptr %667, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  br label %668

668:                                              ; preds = %648
  %669 = load i32, ptr %81, align 4, !tbaa !5
  %670 = add nsw i32 %669, 1
  store i32 %670, ptr %81, align 4, !tbaa !5
  br label %644, !llvm.loop !32

671:                                              ; preds = %644
  br label %672

672:                                              ; preds = %687, %671
  %673 = load i32, ptr %81, align 4, !tbaa !5
  %674 = load i32, ptr %79, align 4, !tbaa !5
  %675 = icmp slt i32 %673, %674
  br i1 %675, label %676, label %690

676:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  %677 = load i32, ptr %80, align 4, !tbaa !5
  %678 = load i32, ptr %79, align 4, !tbaa !5
  %679 = mul nsw i32 %677, %678
  %680 = load i32, ptr %81, align 4, !tbaa !5
  %681 = add nsw i32 %679, %680
  store i32 %681, ptr %83, align 4, !tbaa !5
  %682 = load double, ptr %75, align 8, !tbaa !12
  %683 = load ptr, ptr %20, align 8, !tbaa !9
  %684 = load i32, ptr %83, align 4, !tbaa !5
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds double, ptr %683, i64 %685
  store double %682, ptr %686, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br label %687

687:                                              ; preds = %676
  %688 = load i32, ptr %81, align 4, !tbaa !5
  %689 = add nsw i32 %688, 1
  store i32 %689, ptr %81, align 4, !tbaa !5
  br label %672, !llvm.loop !33

690:                                              ; preds = %672
  br label %691

691:                                              ; preds = %690
  %692 = load i32, ptr %80, align 4, !tbaa !5
  %693 = add nsw i32 %692, 1
  store i32 %693, ptr %80, align 4, !tbaa !5
  br label %639, !llvm.loop !34

694:                                              ; preds = %639
  br label %747

695:                                              ; preds = %630
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  %696 = load i32, ptr %78, align 4, !tbaa !5
  %697 = load i32, ptr %79, align 4, !tbaa !5
  %698 = mul nsw i32 %696, %697
  store i32 %698, ptr %84, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #8
  %699 = load i32, ptr %84, align 4, !tbaa !5
  %700 = add nsw i32 %699, 1
  %701 = sdiv i32 %700, 2
  %702 = sitofp i32 %701 to double
  store double %702, ptr %85, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  %703 = load double, ptr %85, align 8, !tbaa !12
  %704 = fdiv double 1.000000e+00, %703
  store double %704, ptr %86, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #8
  %705 = load i32, ptr %84, align 4, !tbaa !5
  %706 = sext i32 %705 to i64
  %707 = call i64 @libxsmm_coprime2(i64 noundef %706)
  store i64 %707, ptr %87, align 8, !tbaa !18
  store i32 0, ptr %80, align 4, !tbaa !5
  br label %708

708:                                              ; preds = %743, %695
  %709 = load i32, ptr %80, align 4, !tbaa !5
  %710 = load i32, ptr %78, align 4, !tbaa !5
  %711 = icmp slt i32 %709, %710
  br i1 %711, label %712, label %746

712:                                              ; preds = %708
  store i32 0, ptr %81, align 4, !tbaa !5
  br label %713

713:                                              ; preds = %739, %712
  %714 = load i32, ptr %81, align 4, !tbaa !5
  %715 = load i32, ptr %79, align 4, !tbaa !5
  %716 = icmp slt i32 %714, %715
  br i1 %716, label %717, label %742

717:                                              ; preds = %713
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #8
  %718 = load i32, ptr %80, align 4, !tbaa !5
  %719 = load i32, ptr %79, align 4, !tbaa !5
  %720 = mul nsw i32 %718, %719
  %721 = load i32, ptr %81, align 4, !tbaa !5
  %722 = add nsw i32 %720, %721
  store i32 %722, ptr %88, align 4, !tbaa !5
  %723 = load double, ptr %86, align 8, !tbaa !12
  %724 = load i64, ptr %87, align 8, !tbaa !18
  %725 = load i32, ptr %88, align 4, !tbaa !5
  %726 = sext i32 %725 to i64
  %727 = mul i64 %724, %726
  %728 = load i32, ptr %84, align 4, !tbaa !5
  %729 = sext i32 %728 to i64
  %730 = urem i64 %727, %729
  %731 = uitofp i64 %730 to double
  %732 = load double, ptr %85, align 8, !tbaa !12
  %733 = fsub double %731, %732
  %734 = fmul double %723, %733
  %735 = load ptr, ptr %20, align 8, !tbaa !9
  %736 = load i32, ptr %88, align 4, !tbaa !5
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds double, ptr %735, i64 %737
  store double %734, ptr %738, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #8
  br label %739

739:                                              ; preds = %717
  %740 = load i32, ptr %81, align 4, !tbaa !5
  %741 = add nsw i32 %740, 1
  store i32 %741, ptr %81, align 4, !tbaa !5
  br label %713, !llvm.loop !35

742:                                              ; preds = %713
  br label %743

743:                                              ; preds = %742
  %744 = load i32, ptr %80, align 4, !tbaa !5
  %745 = add nsw i32 %744, 1
  store i32 %745, ptr %80, align 4, !tbaa !5
  br label %708, !llvm.loop !36

746:                                              ; preds = %708
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  br label %747

747:                                              ; preds = %746, %694
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  br label %748

748:                                              ; preds = %747
  br label %749

749:                                              ; preds = %748
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %750

750:                                              ; preds = %766, %749
  %751 = load i32, ptr %30, align 4, !tbaa !5
  %752 = load i32, ptr %27, align 4, !tbaa !5
  %753 = load i32, ptr %28, align 4, !tbaa !5
  %754 = mul nsw i32 %752, %753
  %755 = icmp slt i32 %751, %754
  br i1 %755, label %756, label %769

756:                                              ; preds = %750
  %757 = load ptr, ptr %20, align 8, !tbaa !9
  %758 = load i32, ptr %30, align 4, !tbaa !5
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds double, ptr %757, i64 %759
  %761 = load double, ptr %760, align 8, !tbaa !12
  %762 = load ptr, ptr %19, align 8, !tbaa !9
  %763 = load i32, ptr %30, align 4, !tbaa !5
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds double, ptr %762, i64 %764
  store double %761, ptr %765, align 8, !tbaa !12
  br label %766

766:                                              ; preds = %756
  %767 = load i32, ptr %30, align 4, !tbaa !5
  %768 = add nsw i32 %767, 1
  store i32 %768, ptr %30, align 4, !tbaa !5
  br label %750, !llvm.loop !37

769:                                              ; preds = %750
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %770

770:                                              ; preds = %786, %769
  %771 = load i32, ptr %30, align 4, !tbaa !5
  %772 = load i32, ptr %27, align 4, !tbaa !5
  %773 = load i32, ptr %28, align 4, !tbaa !5
  %774 = mul nsw i32 %772, %773
  %775 = icmp slt i32 %771, %774
  br i1 %775, label %776, label %789

776:                                              ; preds = %770
  %777 = load ptr, ptr %20, align 8, !tbaa !9
  %778 = load i32, ptr %30, align 4, !tbaa !5
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds double, ptr %777, i64 %779
  %781 = load double, ptr %780, align 8, !tbaa !12
  %782 = load ptr, ptr %21, align 8, !tbaa !9
  %783 = load i32, ptr %30, align 4, !tbaa !5
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds double, ptr %782, i64 %784
  store double %781, ptr %785, align 8, !tbaa !12
  br label %786

786:                                              ; preds = %776
  %787 = load i32, ptr %30, align 4, !tbaa !5
  %788 = add nsw i32 %787, 1
  store i32 %788, ptr %30, align 4, !tbaa !5
  br label %770, !llvm.loop !38

789:                                              ; preds = %770
  store double 1.000000e+00, ptr %41, align 8, !tbaa !12
  %790 = load i32, ptr %27, align 4, !tbaa !5
  %791 = load i32, ptr %23, align 4, !tbaa !5
  %792 = load i32, ptr %28, align 4, !tbaa !5
  %793 = icmp slt i32 %791, %792
  br i1 %793, label %794, label %796

794:                                              ; preds = %789
  %795 = load i32, ptr %23, align 4, !tbaa !5
  br label %798

796:                                              ; preds = %789
  %797 = load i32, ptr %28, align 4, !tbaa !5
  br label %798

798:                                              ; preds = %796, %794
  %799 = phi i32 [ %795, %794 ], [ %797, %796 ]
  %800 = load i32, ptr %29, align 4, !tbaa !5
  %801 = load i32, ptr %29, align 4, !tbaa !5
  %802 = load i32, ptr %28, align 4, !tbaa !5
  %803 = load i32, ptr %28, align 4, !tbaa !5
  %804 = load ptr, ptr %13, align 8, !tbaa !9
  %805 = load i32, ptr %25, align 4, !tbaa !5
  %806 = icmp ne i32 %805, 0
  %807 = zext i1 %806 to i64
  %808 = select i1 %806, ptr null, ptr @libxsmm_timer_tick
  %809 = call ptr @libxsmm_fsspmdm_create(i32 noundef 0, i32 noundef %790, i32 noundef %799, i32 noundef %800, i32 noundef %801, i32 noundef %802, i32 noundef %803, ptr noundef %40, ptr noundef %41, ptr noundef %804, i32 noundef 0, ptr noundef %808)
  store ptr %809, ptr %44, align 8, !tbaa !9
  br label %810

810:                                              ; preds = %798, %594
  %811 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  %812 = load i32, ptr %35, align 4, !tbaa !5
  %813 = icmp sge i32 0, %812
  br i1 %813, label %814, label %897

814:                                              ; preds = %810
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %815

815:                                              ; preds = %893, %814
  %816 = load i32, ptr %31, align 4, !tbaa !5
  %817 = load i32, ptr %28, align 4, !tbaa !5
  %818 = icmp slt i32 %816, %817
  br i1 %818, label %819, label %896

819:                                              ; preds = %815
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %820

820:                                              ; preds = %889, %819
  %821 = load i32, ptr %30, align 4, !tbaa !5
  %822 = load i32, ptr %27, align 4, !tbaa !5
  %823 = icmp slt i32 %821, %822
  br i1 %823, label %824, label %892

824:                                              ; preds = %820
  %825 = load ptr, ptr %8, align 8, !tbaa !9
  %826 = load i32, ptr %30, align 4, !tbaa !5
  %827 = add nsw i32 %826, 1
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i32, ptr %825, i64 %828
  %830 = load i32, ptr %829, align 4, !tbaa !5
  %831 = load ptr, ptr %8, align 8, !tbaa !9
  %832 = load i32, ptr %30, align 4, !tbaa !5
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds i32, ptr %831, i64 %833
  %835 = load i32, ptr %834, align 4, !tbaa !5
  %836 = sub i32 %830, %835
  store i32 %836, ptr %33, align 4, !tbaa !5
  %837 = load ptr, ptr %17, align 8, !tbaa !9
  %838 = load i32, ptr %28, align 4, !tbaa !5
  %839 = load i32, ptr %30, align 4, !tbaa !5
  %840 = mul nsw i32 %838, %839
  %841 = load i32, ptr %31, align 4, !tbaa !5
  %842 = add nsw i32 %840, %841
  %843 = sext i32 %842 to i64
  %844 = getelementptr inbounds double, ptr %837, i64 %843
  store double 0.000000e+00, ptr %844, align 8, !tbaa !12
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %845

845:                                              ; preds = %885, %824
  %846 = load i32, ptr %32, align 4, !tbaa !5
  %847 = load i32, ptr %33, align 4, !tbaa !5
  %848 = icmp slt i32 %846, %847
  br i1 %848, label %849, label %888

849:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #8
  %850 = load ptr, ptr %8, align 8, !tbaa !9
  %851 = load i32, ptr %30, align 4, !tbaa !5
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds i32, ptr %850, i64 %852
  %854 = load i32, ptr %853, align 4, !tbaa !5
  %855 = load i32, ptr %32, align 4, !tbaa !5
  %856 = add i32 %854, %855
  store i32 %856, ptr %89, align 4, !tbaa !5
  %857 = load ptr, ptr %14, align 8, !tbaa !9
  %858 = load i32, ptr %89, align 4, !tbaa !5
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds double, ptr %857, i64 %859
  %861 = load double, ptr %860, align 8, !tbaa !12
  %862 = load ptr, ptr %15, align 8, !tbaa !9
  %863 = load i32, ptr %28, align 4, !tbaa !5
  %864 = load ptr, ptr %9, align 8, !tbaa !9
  %865 = load i32, ptr %89, align 4, !tbaa !5
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds i32, ptr %864, i64 %866
  %868 = load i32, ptr %867, align 4, !tbaa !5
  %869 = mul i32 %863, %868
  %870 = load i32, ptr %31, align 4, !tbaa !5
  %871 = add i32 %869, %870
  %872 = zext i32 %871 to i64
  %873 = getelementptr inbounds double, ptr %862, i64 %872
  %874 = load double, ptr %873, align 8, !tbaa !12
  %875 = load ptr, ptr %17, align 8, !tbaa !9
  %876 = load i32, ptr %28, align 4, !tbaa !5
  %877 = load i32, ptr %30, align 4, !tbaa !5
  %878 = mul nsw i32 %876, %877
  %879 = load i32, ptr %31, align 4, !tbaa !5
  %880 = add nsw i32 %878, %879
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds double, ptr %875, i64 %881
  %883 = load double, ptr %882, align 8, !tbaa !12
  %884 = call double @llvm.fmuladd.f64(double %861, double %874, double %883)
  store double %884, ptr %882, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #8
  br label %885

885:                                              ; preds = %849
  %886 = load i32, ptr %32, align 4, !tbaa !5
  %887 = add nsw i32 %886, 1
  store i32 %887, ptr %32, align 4, !tbaa !5
  br label %845, !llvm.loop !39

888:                                              ; preds = %845
  br label %889

889:                                              ; preds = %888
  %890 = load i32, ptr %30, align 4, !tbaa !5
  %891 = add nsw i32 %890, 1
  store i32 %891, ptr %30, align 4, !tbaa !5
  br label %820, !llvm.loop !40

892:                                              ; preds = %820
  br label %893

893:                                              ; preds = %892
  %894 = load i32, ptr %31, align 4, !tbaa !5
  %895 = add nsw i32 %894, 1
  store i32 %895, ptr %31, align 4, !tbaa !5
  br label %815, !llvm.loop !41

896:                                              ; preds = %815
  br label %897

897:                                              ; preds = %896, %810
  %898 = load i32, ptr %35, align 4, !tbaa !5
  %899 = icmp sgt i32 0, %898
  br i1 %899, label %903, label %900

900:                                              ; preds = %897
  %901 = load i32, ptr %35, align 4, !tbaa !5
  %902 = icmp slt i32 0, %901
  br i1 %902, label %903, label %978

903:                                              ; preds = %900, %897
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %904

904:                                              ; preds = %974, %903
  %905 = load i32, ptr %31, align 4, !tbaa !5
  %906 = load i32, ptr %28, align 4, !tbaa !5
  %907 = icmp slt i32 %905, %906
  br i1 %907, label %908, label %977

908:                                              ; preds = %904
  store i32 0, ptr %30, align 4, !tbaa !5
  br label %909

909:                                              ; preds = %970, %908
  %910 = load i32, ptr %30, align 4, !tbaa !5
  %911 = load i32, ptr %27, align 4, !tbaa !5
  %912 = icmp slt i32 %910, %911
  br i1 %912, label %913, label %973

913:                                              ; preds = %909
  %914 = load ptr, ptr %8, align 8, !tbaa !9
  %915 = load i32, ptr %30, align 4, !tbaa !5
  %916 = add nsw i32 %915, 1
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds i32, ptr %914, i64 %917
  %919 = load i32, ptr %918, align 4, !tbaa !5
  %920 = load ptr, ptr %8, align 8, !tbaa !9
  %921 = load i32, ptr %30, align 4, !tbaa !5
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds i32, ptr %920, i64 %922
  %924 = load i32, ptr %923, align 4, !tbaa !5
  %925 = sub i32 %919, %924
  store i32 %925, ptr %33, align 4, !tbaa !5
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %926

926:                                              ; preds = %966, %913
  %927 = load i32, ptr %32, align 4, !tbaa !5
  %928 = load i32, ptr %33, align 4, !tbaa !5
  %929 = icmp slt i32 %927, %928
  br i1 %929, label %930, label %969

930:                                              ; preds = %926
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #8
  %931 = load ptr, ptr %8, align 8, !tbaa !9
  %932 = load i32, ptr %30, align 4, !tbaa !5
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds i32, ptr %931, i64 %933
  %935 = load i32, ptr %934, align 4, !tbaa !5
  %936 = load i32, ptr %32, align 4, !tbaa !5
  %937 = add i32 %935, %936
  store i32 %937, ptr %90, align 4, !tbaa !5
  %938 = load ptr, ptr %14, align 8, !tbaa !9
  %939 = load i32, ptr %90, align 4, !tbaa !5
  %940 = sext i32 %939 to i64
  %941 = getelementptr inbounds double, ptr %938, i64 %940
  %942 = load double, ptr %941, align 8, !tbaa !12
  %943 = load ptr, ptr %15, align 8, !tbaa !9
  %944 = load i32, ptr %28, align 4, !tbaa !5
  %945 = load ptr, ptr %9, align 8, !tbaa !9
  %946 = load i32, ptr %90, align 4, !tbaa !5
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds i32, ptr %945, i64 %947
  %949 = load i32, ptr %948, align 4, !tbaa !5
  %950 = mul i32 %944, %949
  %951 = load i32, ptr %31, align 4, !tbaa !5
  %952 = add i32 %950, %951
  %953 = zext i32 %952 to i64
  %954 = getelementptr inbounds double, ptr %943, i64 %953
  %955 = load double, ptr %954, align 8, !tbaa !12
  %956 = load ptr, ptr %20, align 8, !tbaa !9
  %957 = load i32, ptr %28, align 4, !tbaa !5
  %958 = load i32, ptr %30, align 4, !tbaa !5
  %959 = mul nsw i32 %957, %958
  %960 = load i32, ptr %31, align 4, !tbaa !5
  %961 = add nsw i32 %959, %960
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds double, ptr %956, i64 %962
  %964 = load double, ptr %963, align 8, !tbaa !12
  %965 = call double @llvm.fmuladd.f64(double %942, double %955, double %964)
  store double %965, ptr %963, align 8, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #8
  br label %966

966:                                              ; preds = %930
  %967 = load i32, ptr %32, align 4, !tbaa !5
  %968 = add nsw i32 %967, 1
  store i32 %968, ptr %32, align 4, !tbaa !5
  br label %926, !llvm.loop !42

969:                                              ; preds = %926
  br label %970

970:                                              ; preds = %969
  %971 = load i32, ptr %30, align 4, !tbaa !5
  %972 = add nsw i32 %971, 1
  store i32 %972, ptr %30, align 4, !tbaa !5
  br label %909, !llvm.loop !43

973:                                              ; preds = %909
  br label %974

974:                                              ; preds = %973
  %975 = load i32, ptr %31, align 4, !tbaa !5
  %976 = add nsw i32 %975, 1
  store i32 %976, ptr %31, align 4, !tbaa !5
  br label %904, !llvm.loop !44

977:                                              ; preds = %904
  br label %978

978:                                              ; preds = %977, %900
  %979 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %980 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  %981 = load i32, ptr %35, align 4, !tbaa !5
  %982 = icmp sge i32 0, %981
  br i1 %982, label %983, label %1003

983:                                              ; preds = %978
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %984

984:                                              ; preds = %998, %983
  %985 = load i32, ptr %32, align 4, !tbaa !5
  %986 = load i32, ptr %28, align 4, !tbaa !5
  %987 = icmp slt i32 %985, %986
  br i1 %987, label %988, label %1002

988:                                              ; preds = %984
  %989 = load ptr, ptr %43, align 8, !tbaa !9
  %990 = load ptr, ptr %15, align 8, !tbaa !9
  %991 = load i32, ptr %32, align 4, !tbaa !5
  %992 = sext i32 %991 to i64
  %993 = getelementptr inbounds double, ptr %990, i64 %992
  %994 = load ptr, ptr %16, align 8, !tbaa !9
  %995 = load i32, ptr %32, align 4, !tbaa !5
  %996 = sext i32 %995 to i64
  %997 = getelementptr inbounds double, ptr %994, i64 %996
  call void @libxsmm_fsspmdm_execute(ptr noundef %989, ptr noundef %993, ptr noundef %997)
  br label %998

998:                                              ; preds = %988
  %999 = load i32, ptr %23, align 4, !tbaa !5
  %1000 = load i32, ptr %32, align 4, !tbaa !5
  %1001 = add nsw i32 %1000, %999
  store i32 %1001, ptr %32, align 4, !tbaa !5
  br label %984, !llvm.loop !45

1002:                                             ; preds = %984
  br label %1003

1003:                                             ; preds = %1002, %978
  %1004 = load i32, ptr %35, align 4, !tbaa !5
  %1005 = icmp sgt i32 0, %1004
  br i1 %1005, label %1009, label %1006

1006:                                             ; preds = %1003
  %1007 = load i32, ptr %35, align 4, !tbaa !5
  %1008 = icmp slt i32 0, %1007
  br i1 %1008, label %1009, label %1029

1009:                                             ; preds = %1006, %1003
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %1010

1010:                                             ; preds = %1024, %1009
  %1011 = load i32, ptr %32, align 4, !tbaa !5
  %1012 = load i32, ptr %28, align 4, !tbaa !5
  %1013 = icmp slt i32 %1011, %1012
  br i1 %1013, label %1014, label %1028

1014:                                             ; preds = %1010
  %1015 = load ptr, ptr %44, align 8, !tbaa !9
  %1016 = load ptr, ptr %15, align 8, !tbaa !9
  %1017 = load i32, ptr %32, align 4, !tbaa !5
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds double, ptr %1016, i64 %1018
  %1020 = load ptr, ptr %19, align 8, !tbaa !9
  %1021 = load i32, ptr %32, align 4, !tbaa !5
  %1022 = sext i32 %1021 to i64
  %1023 = getelementptr inbounds double, ptr %1020, i64 %1022
  call void @libxsmm_fsspmdm_execute(ptr noundef %1015, ptr noundef %1019, ptr noundef %1023)
  br label %1024

1024:                                             ; preds = %1014
  %1025 = load i32, ptr %23, align 4, !tbaa !5
  %1026 = load i32, ptr %32, align 4, !tbaa !5
  %1027 = add nsw i32 %1026, %1025
  store i32 %1027, ptr %32, align 4, !tbaa !5
  br label %1010, !llvm.loop !46

1028:                                             ; preds = %1010
  br label %1029

1029:                                             ; preds = %1028, %1006
  %1030 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %1031 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  %1032 = load i32, ptr %35, align 4, !tbaa !5
  %1033 = icmp sge i32 0, %1032
  br i1 %1033, label %1034, label %1039

1034:                                             ; preds = %1029
  store double 0.000000e+00, ptr %41, align 8, !tbaa !12
  %1035 = call ptr @libxsmm_original_dgemm()
  %1036 = load ptr, ptr %15, align 8, !tbaa !9
  %1037 = load ptr, ptr %13, align 8, !tbaa !9
  %1038 = load ptr, ptr %18, align 8, !tbaa !9
  call void %1035(ptr noundef %42, ptr noundef %42, ptr noundef %28, ptr noundef %27, ptr noundef %29, ptr noundef %40, ptr noundef %1036, ptr noundef %28, ptr noundef %1037, ptr noundef %29, ptr noundef %41, ptr noundef %1038, ptr noundef %28)
  br label %1039

1039:                                             ; preds = %1034, %1029
  %1040 = load i32, ptr %35, align 4, !tbaa !5
  %1041 = icmp sgt i32 0, %1040
  br i1 %1041, label %1045, label %1042

1042:                                             ; preds = %1039
  %1043 = load i32, ptr %35, align 4, !tbaa !5
  %1044 = icmp slt i32 0, %1043
  br i1 %1044, label %1045, label %1050

1045:                                             ; preds = %1042, %1039
  store double 1.000000e+00, ptr %41, align 8, !tbaa !12
  %1046 = call ptr @libxsmm_original_dgemm()
  %1047 = load ptr, ptr %15, align 8, !tbaa !9
  %1048 = load ptr, ptr %13, align 8, !tbaa !9
  %1049 = load ptr, ptr %21, align 8, !tbaa !9
  call void %1046(ptr noundef %42, ptr noundef %42, ptr noundef %28, ptr noundef %27, ptr noundef %29, ptr noundef %40, ptr noundef %1047, ptr noundef %28, ptr noundef %1048, ptr noundef %29, ptr noundef %41, ptr noundef %1049, ptr noundef %28)
  br label %1050

1050:                                             ; preds = %1045, %1042
  %1051 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %1052 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  %1053 = load i32, ptr %35, align 4, !tbaa !5
  %1054 = icmp sge i32 0, %1053
  br i1 %1054, label %1055, label %1108

1055:                                             ; preds = %1050
  %1056 = load i32, ptr %27, align 4, !tbaa !5
  %1057 = load i32, ptr %28, align 4, !tbaa !5
  %1058 = load ptr, ptr %17, align 8, !tbaa !9
  %1059 = load ptr, ptr %16, align 8, !tbaa !9
  %1060 = call i32 @libxsmm_matdiff(ptr noundef %26, i32 noundef 0, i32 noundef %1056, i32 noundef %1057, ptr noundef %1058, ptr noundef %1059, ptr noundef null, ptr noundef null)
  %1061 = call double @libxsmm_matdiff_epsilon(ptr noundef %26)
  store double %1061, ptr %39, align 8, !tbaa !12
  %1062 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 5
  %1063 = load double, ptr %1062, align 8, !tbaa !47
  %1064 = load double, ptr %39, align 8, !tbaa !12
  %1065 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %1063, double noundef %1064)
  %1066 = load double, ptr %39, align 8, !tbaa !12
  %1067 = fcmp olt double 1.000000e-08, %1066
  br i1 %1067, label %1068, label %1080

1068:                                             ; preds = %1055
  %1069 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 21
  %1070 = load double, ptr %1069, align 8, !tbaa !49
  %1071 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 20
  %1072 = load double, ptr %1071, align 8, !tbaa !50
  %1073 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 22
  %1074 = load i32, ptr %1073, align 8, !tbaa !51
  %1075 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 23
  %1076 = load i32, ptr %1075, align 4, !tbaa !52
  %1077 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %1070, double noundef %1072, i32 noundef %1074, i32 noundef %1076)
  %1078 = load i32, ptr %6, align 4, !tbaa !5
  %1079 = or i32 %1078, 1
  store i32 %1079, ptr %6, align 4, !tbaa !5
  br label %1082

1080:                                             ; preds = %1055
  %1081 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  br label %1082

1082:                                             ; preds = %1080, %1068
  %1083 = load i32, ptr %27, align 4, !tbaa !5
  %1084 = load i32, ptr %28, align 4, !tbaa !5
  %1085 = load ptr, ptr %17, align 8, !tbaa !9
  %1086 = load ptr, ptr %18, align 8, !tbaa !9
  %1087 = call i32 @libxsmm_matdiff(ptr noundef %26, i32 noundef 0, i32 noundef %1083, i32 noundef %1084, ptr noundef %1085, ptr noundef %1086, ptr noundef null, ptr noundef null)
  %1088 = call double @libxsmm_matdiff_epsilon(ptr noundef %26)
  store double %1088, ptr %39, align 8, !tbaa !12
  %1089 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 5
  %1090 = load double, ptr %1089, align 8, !tbaa !47
  %1091 = load double, ptr %39, align 8, !tbaa !12
  %1092 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %1090, double noundef %1091)
  %1093 = load double, ptr %39, align 8, !tbaa !12
  %1094 = fcmp olt double 1.000000e-08, %1093
  br i1 %1094, label %1095, label %1105

1095:                                             ; preds = %1082
  %1096 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 21
  %1097 = load double, ptr %1096, align 8, !tbaa !49
  %1098 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 20
  %1099 = load double, ptr %1098, align 8, !tbaa !50
  %1100 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 22
  %1101 = load i32, ptr %1100, align 8, !tbaa !51
  %1102 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 23
  %1103 = load i32, ptr %1102, align 4, !tbaa !52
  %1104 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %1097, double noundef %1099, i32 noundef %1101, i32 noundef %1103)
  br label %1107

1105:                                             ; preds = %1082
  %1106 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  br label %1107

1107:                                             ; preds = %1105, %1095
  br label %1108

1108:                                             ; preds = %1107, %1050
  %1109 = load i32, ptr %35, align 4, !tbaa !5
  %1110 = icmp sgt i32 0, %1109
  br i1 %1110, label %1114, label %1111

1111:                                             ; preds = %1108
  %1112 = load i32, ptr %35, align 4, !tbaa !5
  %1113 = icmp slt i32 0, %1112
  br i1 %1113, label %1114, label %1167

1114:                                             ; preds = %1111, %1108
  %1115 = load i32, ptr %27, align 4, !tbaa !5
  %1116 = load i32, ptr %28, align 4, !tbaa !5
  %1117 = load ptr, ptr %20, align 8, !tbaa !9
  %1118 = load ptr, ptr %19, align 8, !tbaa !9
  %1119 = call i32 @libxsmm_matdiff(ptr noundef %26, i32 noundef 0, i32 noundef %1115, i32 noundef %1116, ptr noundef %1117, ptr noundef %1118, ptr noundef null, ptr noundef null)
  %1120 = call double @libxsmm_matdiff_epsilon(ptr noundef %26)
  store double %1120, ptr %39, align 8, !tbaa !12
  %1121 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 5
  %1122 = load double, ptr %1121, align 8, !tbaa !47
  %1123 = load double, ptr %39, align 8, !tbaa !12
  %1124 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef %1122, double noundef %1123)
  %1125 = load double, ptr %39, align 8, !tbaa !12
  %1126 = fcmp olt double 1.000000e-08, %1125
  br i1 %1126, label %1127, label %1139

1127:                                             ; preds = %1114
  %1128 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 21
  %1129 = load double, ptr %1128, align 8, !tbaa !49
  %1130 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 20
  %1131 = load double, ptr %1130, align 8, !tbaa !50
  %1132 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 22
  %1133 = load i32, ptr %1132, align 8, !tbaa !51
  %1134 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 23
  %1135 = load i32, ptr %1134, align 4, !tbaa !52
  %1136 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %1129, double noundef %1131, i32 noundef %1133, i32 noundef %1135)
  %1137 = load i32, ptr %6, align 4, !tbaa !5
  %1138 = or i32 %1137, 2
  store i32 %1138, ptr %6, align 4, !tbaa !5
  br label %1141

1139:                                             ; preds = %1114
  %1140 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  br label %1141

1141:                                             ; preds = %1139, %1127
  %1142 = load i32, ptr %27, align 4, !tbaa !5
  %1143 = load i32, ptr %28, align 4, !tbaa !5
  %1144 = load ptr, ptr %20, align 8, !tbaa !9
  %1145 = load ptr, ptr %21, align 8, !tbaa !9
  %1146 = call i32 @libxsmm_matdiff(ptr noundef %26, i32 noundef 0, i32 noundef %1142, i32 noundef %1143, ptr noundef %1144, ptr noundef %1145, ptr noundef null, ptr noundef null)
  %1147 = call double @libxsmm_matdiff_epsilon(ptr noundef %26)
  store double %1147, ptr %39, align 8, !tbaa !12
  %1148 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 5
  %1149 = load double, ptr %1148, align 8, !tbaa !47
  %1150 = load double, ptr %39, align 8, !tbaa !12
  %1151 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, double noundef %1149, double noundef %1150)
  %1152 = load double, ptr %39, align 8, !tbaa !12
  %1153 = fcmp olt double 1.000000e-08, %1152
  br i1 %1153, label %1154, label %1164

1154:                                             ; preds = %1141
  %1155 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 21
  %1156 = load double, ptr %1155, align 8, !tbaa !49
  %1157 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 20
  %1158 = load double, ptr %1157, align 8, !tbaa !50
  %1159 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 22
  %1160 = load i32, ptr %1159, align 8, !tbaa !51
  %1161 = getelementptr inbounds %struct.libxsmm_matdiff_info, ptr %26, i32 0, i32 23
  %1162 = load i32, ptr %1161, align 4, !tbaa !52
  %1163 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %1156, double noundef %1158, i32 noundef %1160, i32 noundef %1162)
  br label %1166

1164:                                             ; preds = %1141
  %1165 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  br label %1166

1166:                                             ; preds = %1164, %1154
  br label %1167

1167:                                             ; preds = %1166, %1111
  %1168 = load i32, ptr %35, align 4, !tbaa !5
  %1169 = icmp sge i32 0, %1168
  br i1 %1169, label %1170, label %1318

1170:                                             ; preds = %1167
  %1171 = call i64 @libxsmm_timer_tick()
  store i64 %1171, ptr %36, align 8, !tbaa !53
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %1172

1172:                                             ; preds = %1196, %1170
  %1173 = load i32, ptr %31, align 4, !tbaa !5
  %1174 = load i32, ptr %34, align 4, !tbaa !5
  %1175 = icmp slt i32 %1173, %1174
  br i1 %1175, label %1176, label %1199

1176:                                             ; preds = %1172
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %1177

1177:                                             ; preds = %1191, %1176
  %1178 = load i32, ptr %32, align 4, !tbaa !5
  %1179 = load i32, ptr %28, align 4, !tbaa !5
  %1180 = icmp slt i32 %1178, %1179
  br i1 %1180, label %1181, label %1195

1181:                                             ; preds = %1177
  %1182 = load ptr, ptr %43, align 8, !tbaa !9
  %1183 = load ptr, ptr %15, align 8, !tbaa !9
  %1184 = load i32, ptr %32, align 4, !tbaa !5
  %1185 = sext i32 %1184 to i64
  %1186 = getelementptr inbounds double, ptr %1183, i64 %1185
  %1187 = load ptr, ptr %16, align 8, !tbaa !9
  %1188 = load i32, ptr %32, align 4, !tbaa !5
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds double, ptr %1187, i64 %1189
  call void @libxsmm_fsspmdm_execute(ptr noundef %1182, ptr noundef %1186, ptr noundef %1190)
  br label %1191

1191:                                             ; preds = %1181
  %1192 = load i32, ptr %23, align 4, !tbaa !5
  %1193 = load i32, ptr %32, align 4, !tbaa !5
  %1194 = add nsw i32 %1193, %1192
  store i32 %1194, ptr %32, align 4, !tbaa !5
  br label %1177, !llvm.loop !55

1195:                                             ; preds = %1177
  br label %1196

1196:                                             ; preds = %1195
  %1197 = load i32, ptr %31, align 4, !tbaa !5
  %1198 = add nsw i32 %1197, 1
  store i32 %1198, ptr %31, align 4, !tbaa !5
  br label %1172, !llvm.loop !56

1199:                                             ; preds = %1172
  %1200 = call i64 @libxsmm_timer_tick()
  store i64 %1200, ptr %37, align 8, !tbaa !53
  %1201 = load i64, ptr %36, align 8, !tbaa !53
  %1202 = load i64, ptr %37, align 8, !tbaa !53
  %1203 = call double @libxsmm_timer_duration(i64 noundef %1201, i64 noundef %1202)
  store double %1203, ptr %38, align 8, !tbaa !12
  %1204 = load i32, ptr %27, align 4, !tbaa !5
  %1205 = load i32, ptr %28, align 4, !tbaa !5
  %1206 = load i32, ptr %29, align 4, !tbaa !5
  %1207 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef %1204, i32 noundef %1205, i32 noundef %1206)
  %1208 = load double, ptr %38, align 8, !tbaa !12
  %1209 = load i32, ptr %34, align 4, !tbaa !5
  %1210 = sitofp i32 %1209 to double
  %1211 = fdiv double %1208, %1210
  %1212 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, double noundef %1211)
  %1213 = load i32, ptr %12, align 4, !tbaa !5
  %1214 = uitofp i32 %1213 to double
  %1215 = fmul double 2.000000e+00, %1214
  %1216 = load i32, ptr %28, align 4, !tbaa !5
  %1217 = sitofp i32 %1216 to double
  %1218 = fmul double %1215, %1217
  %1219 = load i32, ptr %34, align 4, !tbaa !5
  %1220 = sitofp i32 %1219 to double
  %1221 = fmul double %1218, %1220
  %1222 = fmul double %1221, 1.000000e-09
  %1223 = load double, ptr %38, align 8, !tbaa !12
  %1224 = fdiv double %1222, %1223
  %1225 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, double noundef %1224)
  %1226 = load i32, ptr %27, align 4, !tbaa !5
  %1227 = sitofp i32 %1226 to double
  %1228 = fmul double 2.000000e+00, %1227
  %1229 = load i32, ptr %28, align 4, !tbaa !5
  %1230 = sitofp i32 %1229 to double
  %1231 = fmul double %1228, %1230
  %1232 = load i32, ptr %29, align 4, !tbaa !5
  %1233 = sitofp i32 %1232 to double
  %1234 = fmul double %1231, %1233
  %1235 = load i32, ptr %34, align 4, !tbaa !5
  %1236 = sitofp i32 %1235 to double
  %1237 = fmul double %1234, %1236
  %1238 = fmul double %1237, 1.000000e-09
  %1239 = load double, ptr %38, align 8, !tbaa !12
  %1240 = fdiv double %1238, %1239
  %1241 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, double noundef %1240)
  %1242 = load i32, ptr %27, align 4, !tbaa !5
  %1243 = sitofp i32 %1242 to double
  %1244 = load i32, ptr %28, align 4, !tbaa !5
  %1245 = sitofp i32 %1244 to double
  %1246 = load i32, ptr %29, align 4, !tbaa !5
  %1247 = sitofp i32 %1246 to double
  %1248 = load i32, ptr %28, align 4, !tbaa !5
  %1249 = sitofp i32 %1248 to double
  %1250 = fmul double %1247, %1249
  %1251 = call double @llvm.fmuladd.f64(double %1243, double %1245, double %1250)
  %1252 = fmul double 8.000000e+00, %1251
  %1253 = load i32, ptr %34, align 4, !tbaa !5
  %1254 = sitofp i32 %1253 to double
  %1255 = fmul double %1252, %1254
  %1256 = fmul double %1255, 1.000000e-09
  %1257 = load double, ptr %38, align 8, !tbaa !12
  %1258 = fdiv double %1256, %1257
  %1259 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %1258)
  %1260 = call i64 @libxsmm_timer_tick()
  store i64 %1260, ptr %36, align 8, !tbaa !53
  store double 0.000000e+00, ptr %41, align 8, !tbaa !12
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %1261

1261:                                             ; preds = %1270, %1199
  %1262 = load i32, ptr %31, align 4, !tbaa !5
  %1263 = load i32, ptr %34, align 4, !tbaa !5
  %1264 = icmp slt i32 %1262, %1263
  br i1 %1264, label %1265, label %1273

1265:                                             ; preds = %1261
  %1266 = call ptr @libxsmm_original_dgemm()
  %1267 = load ptr, ptr %15, align 8, !tbaa !9
  %1268 = load ptr, ptr %13, align 8, !tbaa !9
  %1269 = load ptr, ptr %18, align 8, !tbaa !9
  call void %1266(ptr noundef %42, ptr noundef %42, ptr noundef %28, ptr noundef %27, ptr noundef %29, ptr noundef %40, ptr noundef %1267, ptr noundef %28, ptr noundef %1268, ptr noundef %29, ptr noundef %41, ptr noundef %1269, ptr noundef %28)
  br label %1270

1270:                                             ; preds = %1265
  %1271 = load i32, ptr %31, align 4, !tbaa !5
  %1272 = add nsw i32 %1271, 1
  store i32 %1272, ptr %31, align 4, !tbaa !5
  br label %1261, !llvm.loop !57

1273:                                             ; preds = %1261
  %1274 = call i64 @libxsmm_timer_tick()
  store i64 %1274, ptr %37, align 8, !tbaa !53
  %1275 = load i64, ptr %36, align 8, !tbaa !53
  %1276 = load i64, ptr %37, align 8, !tbaa !53
  %1277 = call double @libxsmm_timer_duration(i64 noundef %1275, i64 noundef %1276)
  store double %1277, ptr %38, align 8, !tbaa !12
  %1278 = load double, ptr %38, align 8, !tbaa !12
  %1279 = load i32, ptr %34, align 4, !tbaa !5
  %1280 = sitofp i32 %1279 to double
  %1281 = fdiv double %1278, %1280
  %1282 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, double noundef %1281)
  %1283 = load i32, ptr %27, align 4, !tbaa !5
  %1284 = sitofp i32 %1283 to double
  %1285 = fmul double 2.000000e+00, %1284
  %1286 = load i32, ptr %28, align 4, !tbaa !5
  %1287 = sitofp i32 %1286 to double
  %1288 = fmul double %1285, %1287
  %1289 = load i32, ptr %29, align 4, !tbaa !5
  %1290 = sitofp i32 %1289 to double
  %1291 = fmul double %1288, %1290
  %1292 = load i32, ptr %34, align 4, !tbaa !5
  %1293 = sitofp i32 %1292 to double
  %1294 = fmul double %1291, %1293
  %1295 = fmul double %1294, 1.000000e-09
  %1296 = load double, ptr %38, align 8, !tbaa !12
  %1297 = fdiv double %1295, %1296
  %1298 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, double noundef %1297)
  %1299 = load i32, ptr %27, align 4, !tbaa !5
  %1300 = sitofp i32 %1299 to double
  %1301 = fmul double 2.000000e+00, %1300
  %1302 = load i32, ptr %28, align 4, !tbaa !5
  %1303 = sitofp i32 %1302 to double
  %1304 = load i32, ptr %29, align 4, !tbaa !5
  %1305 = sitofp i32 %1304 to double
  %1306 = load i32, ptr %28, align 4, !tbaa !5
  %1307 = sitofp i32 %1306 to double
  %1308 = fmul double %1305, %1307
  %1309 = call double @llvm.fmuladd.f64(double %1301, double %1303, double %1308)
  %1310 = fmul double 8.000000e+00, %1309
  %1311 = load i32, ptr %34, align 4, !tbaa !5
  %1312 = sitofp i32 %1311 to double
  %1313 = fmul double %1310, %1312
  %1314 = fmul double %1313, 1.000000e-09
  %1315 = load double, ptr %38, align 8, !tbaa !12
  %1316 = fdiv double %1314, %1315
  %1317 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, double noundef %1316)
  br label %1318

1318:                                             ; preds = %1273, %1167
  %1319 = load i32, ptr %35, align 4, !tbaa !5
  %1320 = icmp sgt i32 0, %1319
  br i1 %1320, label %1324, label %1321

1321:                                             ; preds = %1318
  %1322 = load i32, ptr %35, align 4, !tbaa !5
  %1323 = icmp slt i32 0, %1322
  br i1 %1323, label %1324, label %1473

1324:                                             ; preds = %1321, %1318
  %1325 = call i64 @libxsmm_timer_tick()
  store i64 %1325, ptr %36, align 8, !tbaa !53
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %1326

1326:                                             ; preds = %1350, %1324
  %1327 = load i32, ptr %31, align 4, !tbaa !5
  %1328 = load i32, ptr %34, align 4, !tbaa !5
  %1329 = icmp slt i32 %1327, %1328
  br i1 %1329, label %1330, label %1353

1330:                                             ; preds = %1326
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %1331

1331:                                             ; preds = %1345, %1330
  %1332 = load i32, ptr %32, align 4, !tbaa !5
  %1333 = load i32, ptr %28, align 4, !tbaa !5
  %1334 = icmp slt i32 %1332, %1333
  br i1 %1334, label %1335, label %1349

1335:                                             ; preds = %1331
  %1336 = load ptr, ptr %44, align 8, !tbaa !9
  %1337 = load ptr, ptr %15, align 8, !tbaa !9
  %1338 = load i32, ptr %32, align 4, !tbaa !5
  %1339 = sext i32 %1338 to i64
  %1340 = getelementptr inbounds double, ptr %1337, i64 %1339
  %1341 = load ptr, ptr %19, align 8, !tbaa !9
  %1342 = load i32, ptr %32, align 4, !tbaa !5
  %1343 = sext i32 %1342 to i64
  %1344 = getelementptr inbounds double, ptr %1341, i64 %1343
  call void @libxsmm_fsspmdm_execute(ptr noundef %1336, ptr noundef %1340, ptr noundef %1344)
  br label %1345

1345:                                             ; preds = %1335
  %1346 = load i32, ptr %23, align 4, !tbaa !5
  %1347 = load i32, ptr %32, align 4, !tbaa !5
  %1348 = add nsw i32 %1347, %1346
  store i32 %1348, ptr %32, align 4, !tbaa !5
  br label %1331, !llvm.loop !58

1349:                                             ; preds = %1331
  br label %1350

1350:                                             ; preds = %1349
  %1351 = load i32, ptr %31, align 4, !tbaa !5
  %1352 = add nsw i32 %1351, 1
  store i32 %1352, ptr %31, align 4, !tbaa !5
  br label %1326, !llvm.loop !59

1353:                                             ; preds = %1326
  %1354 = call i64 @libxsmm_timer_tick()
  store i64 %1354, ptr %37, align 8, !tbaa !53
  %1355 = load i64, ptr %36, align 8, !tbaa !53
  %1356 = load i64, ptr %37, align 8, !tbaa !53
  %1357 = call double @libxsmm_timer_duration(i64 noundef %1355, i64 noundef %1356)
  store double %1357, ptr %38, align 8, !tbaa !12
  %1358 = load i32, ptr %27, align 4, !tbaa !5
  %1359 = load i32, ptr %28, align 4, !tbaa !5
  %1360 = load i32, ptr %29, align 4, !tbaa !5
  %1361 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef %1358, i32 noundef %1359, i32 noundef %1360)
  %1362 = load double, ptr %38, align 8, !tbaa !12
  %1363 = load i32, ptr %34, align 4, !tbaa !5
  %1364 = sitofp i32 %1363 to double
  %1365 = fdiv double %1362, %1364
  %1366 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, double noundef %1365)
  %1367 = load i32, ptr %12, align 4, !tbaa !5
  %1368 = uitofp i32 %1367 to double
  %1369 = fmul double 2.000000e+00, %1368
  %1370 = load i32, ptr %28, align 4, !tbaa !5
  %1371 = sitofp i32 %1370 to double
  %1372 = fmul double %1369, %1371
  %1373 = load i32, ptr %34, align 4, !tbaa !5
  %1374 = sitofp i32 %1373 to double
  %1375 = fmul double %1372, %1374
  %1376 = fmul double %1375, 1.000000e-09
  %1377 = load double, ptr %38, align 8, !tbaa !12
  %1378 = fdiv double %1376, %1377
  %1379 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, double noundef %1378)
  %1380 = load i32, ptr %27, align 4, !tbaa !5
  %1381 = sitofp i32 %1380 to double
  %1382 = fmul double 2.000000e+00, %1381
  %1383 = load i32, ptr %28, align 4, !tbaa !5
  %1384 = sitofp i32 %1383 to double
  %1385 = fmul double %1382, %1384
  %1386 = load i32, ptr %29, align 4, !tbaa !5
  %1387 = sitofp i32 %1386 to double
  %1388 = fmul double %1385, %1387
  %1389 = load i32, ptr %34, align 4, !tbaa !5
  %1390 = sitofp i32 %1389 to double
  %1391 = fmul double %1388, %1390
  %1392 = fmul double %1391, 1.000000e-09
  %1393 = load double, ptr %38, align 8, !tbaa !12
  %1394 = fdiv double %1392, %1393
  %1395 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, double noundef %1394)
  %1396 = load i32, ptr %27, align 4, !tbaa !5
  %1397 = sitofp i32 %1396 to double
  %1398 = fmul double 2.000000e+00, %1397
  %1399 = load i32, ptr %28, align 4, !tbaa !5
  %1400 = sitofp i32 %1399 to double
  %1401 = load i32, ptr %29, align 4, !tbaa !5
  %1402 = sitofp i32 %1401 to double
  %1403 = load i32, ptr %28, align 4, !tbaa !5
  %1404 = sitofp i32 %1403 to double
  %1405 = fmul double %1402, %1404
  %1406 = call double @llvm.fmuladd.f64(double %1398, double %1400, double %1405)
  %1407 = fmul double 8.000000e+00, %1406
  %1408 = load i32, ptr %34, align 4, !tbaa !5
  %1409 = sitofp i32 %1408 to double
  %1410 = fmul double %1407, %1409
  %1411 = fmul double %1410, 1.000000e-09
  %1412 = load double, ptr %38, align 8, !tbaa !12
  %1413 = fdiv double %1411, %1412
  %1414 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %1413)
  %1415 = call i64 @libxsmm_timer_tick()
  store i64 %1415, ptr %36, align 8, !tbaa !53
  store double 1.000000e+00, ptr %41, align 8, !tbaa !12
  store i32 0, ptr %31, align 4, !tbaa !5
  br label %1416

1416:                                             ; preds = %1425, %1353
  %1417 = load i32, ptr %31, align 4, !tbaa !5
  %1418 = load i32, ptr %34, align 4, !tbaa !5
  %1419 = icmp slt i32 %1417, %1418
  br i1 %1419, label %1420, label %1428

1420:                                             ; preds = %1416
  %1421 = call ptr @libxsmm_original_dgemm()
  %1422 = load ptr, ptr %15, align 8, !tbaa !9
  %1423 = load ptr, ptr %13, align 8, !tbaa !9
  %1424 = load ptr, ptr %21, align 8, !tbaa !9
  call void %1421(ptr noundef %42, ptr noundef %42, ptr noundef %28, ptr noundef %27, ptr noundef %29, ptr noundef %40, ptr noundef %1422, ptr noundef %28, ptr noundef %1423, ptr noundef %29, ptr noundef %41, ptr noundef %1424, ptr noundef %28)
  br label %1425

1425:                                             ; preds = %1420
  %1426 = load i32, ptr %31, align 4, !tbaa !5
  %1427 = add nsw i32 %1426, 1
  store i32 %1427, ptr %31, align 4, !tbaa !5
  br label %1416, !llvm.loop !60

1428:                                             ; preds = %1416
  %1429 = call i64 @libxsmm_timer_tick()
  store i64 %1429, ptr %37, align 8, !tbaa !53
  %1430 = load i64, ptr %36, align 8, !tbaa !53
  %1431 = load i64, ptr %37, align 8, !tbaa !53
  %1432 = call double @libxsmm_timer_duration(i64 noundef %1430, i64 noundef %1431)
  store double %1432, ptr %38, align 8, !tbaa !12
  %1433 = load double, ptr %38, align 8, !tbaa !12
  %1434 = load i32, ptr %34, align 4, !tbaa !5
  %1435 = sitofp i32 %1434 to double
  %1436 = fdiv double %1433, %1435
  %1437 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, double noundef %1436)
  %1438 = load i32, ptr %27, align 4, !tbaa !5
  %1439 = sitofp i32 %1438 to double
  %1440 = fmul double 2.000000e+00, %1439
  %1441 = load i32, ptr %28, align 4, !tbaa !5
  %1442 = sitofp i32 %1441 to double
  %1443 = fmul double %1440, %1442
  %1444 = load i32, ptr %29, align 4, !tbaa !5
  %1445 = sitofp i32 %1444 to double
  %1446 = fmul double %1443, %1445
  %1447 = load i32, ptr %34, align 4, !tbaa !5
  %1448 = sitofp i32 %1447 to double
  %1449 = fmul double %1446, %1448
  %1450 = fmul double %1449, 1.000000e-09
  %1451 = load double, ptr %38, align 8, !tbaa !12
  %1452 = fdiv double %1450, %1451
  %1453 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, double noundef %1452)
  %1454 = load i32, ptr %27, align 4, !tbaa !5
  %1455 = sitofp i32 %1454 to double
  %1456 = fmul double 2.000000e+00, %1455
  %1457 = load i32, ptr %28, align 4, !tbaa !5
  %1458 = sitofp i32 %1457 to double
  %1459 = load i32, ptr %29, align 4, !tbaa !5
  %1460 = sitofp i32 %1459 to double
  %1461 = load i32, ptr %28, align 4, !tbaa !5
  %1462 = sitofp i32 %1461 to double
  %1463 = fmul double %1460, %1462
  %1464 = call double @llvm.fmuladd.f64(double %1456, double %1458, double %1463)
  %1465 = fmul double 8.000000e+00, %1464
  %1466 = load i32, ptr %34, align 4, !tbaa !5
  %1467 = sitofp i32 %1466 to double
  %1468 = fmul double %1465, %1467
  %1469 = fmul double %1468, 1.000000e-09
  %1470 = load double, ptr %38, align 8, !tbaa !12
  %1471 = fdiv double %1469, %1470
  %1472 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, double noundef %1471)
  br label %1473

1473:                                             ; preds = %1428, %1321
  %1474 = load ptr, ptr %43, align 8, !tbaa !9
  call void @libxsmm_fsspmdm_destroy(ptr noundef %1474)
  %1475 = load ptr, ptr %44, align 8, !tbaa !9
  call void @libxsmm_fsspmdm_destroy(ptr noundef %1475)
  %1476 = load ptr, ptr %18, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1476)
  %1477 = load ptr, ptr %17, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1477)
  %1478 = load ptr, ptr %16, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1478)
  %1479 = load ptr, ptr %21, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1479)
  %1480 = load ptr, ptr %20, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1480)
  %1481 = load ptr, ptr %19, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1481)
  %1482 = load ptr, ptr %13, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1482)
  %1483 = load ptr, ptr %15, align 8, !tbaa !9
  call void @libxsmm_free(ptr noundef %1483)
  %1484 = load ptr, ptr %8, align 8, !tbaa !9
  call void @free(ptr noundef %1484) #8
  %1485 = load ptr, ptr %9, align 8, !tbaa !9
  call void @free(ptr noundef %1485) #8
  %1486 = load ptr, ptr %14, align 8, !tbaa !9
  call void @free(ptr noundef %1486) #8
  %1487 = load i32, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 192, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  ret i32 %1487
}

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

; Function Attrs: nounwind
declare ptr @getenv(ptr noundef) #2

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #3

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @my_csr_reader(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @printf(ptr noundef, ...) #6

declare noalias ptr @libxsmm_aligned_malloc(i64 noundef, i64 noundef) #6

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

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

declare i64 @libxsmm_coprime2(i64 noundef) #6

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

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

declare i64 @libxsmm_timer_tick() #6

declare void @libxsmm_fsspmdm_execute(ptr noundef, ptr noundef, ptr 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 double @libxsmm_matdiff_epsilon(ptr noundef) #6

declare double @libxsmm_timer_duration(i64 noundef, i64 noundef) #6

declare void @libxsmm_fsspmdm_destroy(ptr noundef) #6

declare void @libxsmm_free(ptr noundef) #6

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint nounwind willreturn memory(read) 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 #4 = { 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 #5 = { inlinehint 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 #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 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { 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 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = !{!19, !19, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = distinct !{!28, !15}
!29 = distinct !{!29, !15}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15}
!33 = distinct !{!33, !15}
!34 = distinct !{!34, !15}
!35 = distinct !{!35, !15}
!36 = distinct !{!36, !15}
!37 = distinct !{!37, !15}
!38 = distinct !{!38, !15}
!39 = distinct !{!39, !15}
!40 = distinct !{!40, !15}
!41 = distinct !{!41, !15}
!42 = distinct !{!42, !15}
!43 = distinct !{!43, !15}
!44 = distinct !{!44, !15}
!45 = distinct !{!45, !15}
!46 = distinct !{!46, !15}
!47 = !{!48, !13, i64 40}
!48 = !{!"libxsmm_matdiff_info", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188}
!49 = !{!48, !13, i64 168}
!50 = !{!48, !13, i64 160}
!51 = !{!48, !6, i64 176}
!52 = !{!48, !6, i64 180}
!53 = !{!54, !54, i64 0}
!54 = !{!"long long", !7, i64 0}
!55 = distinct !{!55, !15}
!56 = distinct !{!56, !15}
!57 = distinct !{!57, !15}
!58 = distinct !{!58, !15}
!59 = distinct !{!59, !15}
!60 = distinct !{!60, !15}


; 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_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 }

@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [44 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 4) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca %struct.libxsmm_matdiff_info, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #13
  store ptr null, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #13
  store ptr null, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #13
  store ptr null, ptr %8, align 8, !tbaa !5
  %16 = tail call ptr @getenv(ptr noundef nonnull @.str) #13
  %17 = icmp eq ptr %16, null
  br i1 %17, label %23, label %18

18:                                               ; preds = %2
  %19 = load i8, ptr %16, align 1, !tbaa !9
  %20 = icmp eq i8 %19, 0
  br i1 %20, label %23, label %21

21:                                               ; preds = %18
  %22 = tail call i32 @atoi(ptr nocapture noundef %16) #14
  br label %23

23:                                               ; preds = %2, %18, %21
  %24 = phi i32 [ %22, %21 ], [ 48, %18 ], [ 48, %2 ]
  %25 = tail call ptr @getenv(ptr noundef nonnull @.str.1) #13
  %26 = icmp eq ptr %25, null
  br i1 %26, label %32, label %27

27:                                               ; preds = %23
  %28 = load i8, ptr %25, align 1, !tbaa !9
  %29 = icmp eq i8 %28, 0
  br i1 %29, label %32, label %30

30:                                               ; preds = %27
  %31 = tail call i32 @atoi(ptr nocapture noundef %25) #14
  br label %32

32:                                               ; preds = %23, %27, %30
  %33 = phi i32 [ %31, %30 ], [ 0, %27 ], [ 0, %23 ]
  call void @llvm.lifetime.start.p0(i64 192, ptr nonnull %9) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #13
  store double 1.000000e+00, ptr %13, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #13
  store double 1.000000e+00, ptr %14, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #13
  store i8 78, ptr %15, align 1, !tbaa !9
  %34 = icmp slt i32 %0, 4
  br i1 %34, label %35, label %38

35:                                               ; preds = %32
  %36 = load ptr, ptr @stderr, align 8, !tbaa !5
  %37 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %36, ptr noundef nonnull @.str.2) #15
  tail call void @exit(i32 noundef -1) #16
  unreachable

38:                                               ; preds = %32
  %39 = getelementptr inbounds i8, ptr %1, i64 8
  %40 = load ptr, ptr %39, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %1, i64 16
  %42 = load ptr, ptr %41, align 8, !tbaa !5
  %43 = tail call i32 @atoi(ptr nocapture noundef %42) #14
  store i32 %43, ptr %11, align 4, !tbaa !12
  %spec.select = tail call i32 @llvm.smin.i32(i32 %43, i32 %24)
  %44 = getelementptr inbounds i8, ptr %1, i64 24
  %45 = load ptr, ptr %44, align 8, !tbaa !5
  %46 = tail call i32 @atoi(ptr nocapture noundef %45) #14
  %.not = icmp eq i32 %0, 4
  br i1 %.not, label %51, label %47

47:                                               ; preds = %38
  %48 = getelementptr inbounds i8, ptr %1, i64 32
  %49 = load ptr, ptr %48, align 8, !tbaa !5
  %50 = tail call i32 @atoi(ptr nocapture noundef %49) #14
  br label %51

51:                                               ; preds = %38, %47
  %52 = phi i32 [ %50, %47 ], [ -1, %38 ]
  %53 = call i32 @my_csr_reader(ptr noundef %40, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %8, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7)
  %.not474 = icmp eq i32 %53, 0
  br i1 %.not474, label %55, label %54

54:                                               ; preds = %51
  call void @exit(i32 noundef -1) #16
  unreachable

55:                                               ; preds = %51
  %56 = load i32, ptr %5, align 4, !tbaa !12
  store i32 %56, ptr %10, align 4, !tbaa !12
  %57 = load i32, ptr %6, align 4, !tbaa !12
  store i32 %57, ptr %12, align 4, !tbaa !12
  %58 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef %40)
  %59 = load i32, ptr %5, align 4, !tbaa !12
  %60 = load i32, ptr %6, align 4, !tbaa !12
  %61 = load i32, ptr %7, align 4, !tbaa !12
  %62 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %59, i32 noundef %60, i32 noundef %61)
  %63 = load i32, ptr %12, align 4, !tbaa !12
  %64 = sext i32 %63 to i64
  %65 = shl nsw i64 %64, 3
  %66 = load i32, ptr %10, align 4, !tbaa !12
  %67 = sext i32 %66 to i64
  %68 = mul i64 %65, %67
  %69 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %68, i64 noundef 64) #13
  %70 = load i32, ptr %12, align 4, !tbaa !12
  %71 = sext i32 %70 to i64
  %72 = shl nsw i64 %71, 3
  %73 = load i32, ptr %11, align 4, !tbaa !12
  %74 = sext i32 %73 to i64
  %75 = mul i64 %72, %74
  %76 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %75, i64 noundef 64) #13
  %77 = load i32, ptr %12, align 4, !tbaa !12
  %78 = load i32, ptr %11, align 4, !tbaa !12
  %79 = mul nsw i32 %78, %77
  %80 = add nsw i32 %79, 1
  %81 = sdiv i32 %80, 2
  %82 = sitofp i32 %81 to double
  %83 = fdiv double 1.000000e+00, %82
  %84 = sext i32 %79 to i64
  %85 = call i64 @libxsmm_coprime2(i64 noundef %84) #13
  %86 = icmp sgt i32 %78, 0
  %87 = icmp sgt i32 %77, 0
  %or.cond764 = and i1 %86, %87
  br i1 %or.cond764, label %.preheader513.us.preheader, label %.preheader512

.preheader513.us.preheader:                       ; preds = %55
  %88 = zext nneg i32 %77 to i64
  %wide.trip.count604 = zext nneg i32 %78 to i64
  %xtraiter = and i64 %88, 1
  %89 = icmp eq i32 %77, 1
  %unroll_iter = and i64 %88, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader513.us

.preheader513.us:                                 ; preds = %.preheader513.us.preheader, %._crit_edge.us
  %indvars.iv601 = phi i64 [ 0, %.preheader513.us.preheader ], [ %indvars.iv.next602, %._crit_edge.us ]
  %90 = mul nuw nsw i64 %indvars.iv601, %88
  br i1 %89, label %._crit_edge.us.unr-lcssa, label %.preheader513.us.new

.preheader513.us.new:                             ; preds = %.preheader513.us, %.preheader513.us.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader513.us.new ], [ 0, %.preheader513.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader513.us.new ], [ 0, %.preheader513.us ]
  %91 = add nuw nsw i64 %indvars.iv, %90
  %92 = mul i64 %85, %91
  %93 = urem i64 %92, %84
  %94 = uitofp i64 %93 to double
  %95 = fsub double %94, %82
  %96 = fmul double %83, %95
  %97 = getelementptr inbounds double, ptr %76, i64 %91
  store double %96, ptr %97, align 8, !tbaa !10
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %98 = add nuw nsw i64 %indvars.iv.next, %90
  %99 = mul i64 %85, %98
  %100 = urem i64 %99, %84
  %101 = uitofp i64 %100 to double
  %102 = fsub double %101, %82
  %103 = fmul double %83, %102
  %104 = getelementptr inbounds double, ptr %76, i64 %98
  store double %103, ptr %104, align 8, !tbaa !10
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.preheader513.us.new, !llvm.loop !14

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

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %105 = add nuw nsw i64 %indvars.iv.unr, %90
  %106 = mul i64 %85, %105
  %107 = urem i64 %106, %84
  %108 = uitofp i64 %107 to double
  %109 = fsub double %108, %82
  %110 = fmul double %83, %109
  %111 = getelementptr inbounds double, ptr %76, i64 %105
  store double %110, ptr %111, align 8, !tbaa !10
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %indvars.iv.next602 = add nuw nsw i64 %indvars.iv601, 1
  %exitcond605.not = icmp eq i64 %indvars.iv.next602, %wide.trip.count604
  br i1 %exitcond605.not, label %.preheader512, label %.preheader513.us, !llvm.loop !16

.preheader512:                                    ; preds = %._crit_edge.us, %55
  %112 = load i32, ptr %12, align 4, !tbaa !12
  %113 = load i32, ptr %10, align 4, !tbaa !12
  %114 = mul nsw i32 %113, %112
  %115 = icmp sgt i32 %114, 0
  br i1 %115, label %.lr.ph.preheader, label %.preheader511

.lr.ph.preheader:                                 ; preds = %.preheader512
  %116 = zext nneg i32 %114 to i64
  %117 = shl nuw nsw i64 %116, 3
  call void @llvm.memset.p0.i64(ptr align 8 %69, i8 0, i64 %117, i1 false), !tbaa !10
  br label %.preheader511

.preheader511:                                    ; preds = %.lr.ph.preheader, %.preheader512
  %118 = icmp sgt i32 %113, 0
  br i1 %118, label %.lr.ph528, label %._crit_edge

.lr.ph528:                                        ; preds = %.preheader511
  %119 = load ptr, ptr %3, align 8, !tbaa !5
  %120 = load ptr, ptr %8, align 8
  %121 = load ptr, ptr %4, align 8
  %wide.trip.count617 = zext nneg i32 %113 to i64
  %.pre = load i32, ptr %119, align 4, !tbaa !12
  br label %132

.loopexit510.loopexit.unr-lcssa:                  ; preds = %141, %.lr.ph526
  %indvars.iv609.unr = phi i64 [ 0, %.lr.ph526 ], [ %indvars.iv.next610.1, %141 ]
  %lcmp.mod773.not = icmp eq i64 %xtraiter772, 0
  br i1 %lcmp.mod773.not, label %.loopexit510, label %.loopexit510.loopexit.epilog-lcssa

.loopexit510.loopexit.epilog-lcssa:               ; preds = %.loopexit510.loopexit.unr-lcssa
  %122 = trunc nuw nsw i64 %indvars.iv609.unr to i32
  %123 = add i32 %133, %122
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds double, ptr %120, i64 %124
  %126 = load double, ptr %125, align 8, !tbaa !10
  %127 = getelementptr inbounds i32, ptr %121, i64 %124
  %128 = load i32, ptr %127, align 4, !tbaa !12
  %129 = add i32 %128, %139
  %130 = zext i32 %129 to i64
  %131 = getelementptr inbounds double, ptr %69, i64 %130
  store double %126, ptr %131, align 8, !tbaa !10
  br label %.loopexit510

.loopexit510:                                     ; preds = %.loopexit510.loopexit.epilog-lcssa, %.loopexit510.loopexit.unr-lcssa, %132
  %exitcond618.not = icmp eq i64 %indvars.iv.next615, %wide.trip.count617
  br i1 %exitcond618.not, label %._crit_edge, label %132, !llvm.loop !17

132:                                              ; preds = %.lr.ph528, %.loopexit510
  %133 = phi i32 [ %.pre, %.lr.ph528 ], [ %135, %.loopexit510 ]
  %indvars.iv614 = phi i64 [ 0, %.lr.ph528 ], [ %indvars.iv.next615, %.loopexit510 ]
  %indvars.iv.next615 = add nuw nsw i64 %indvars.iv614, 1
  %134 = getelementptr inbounds i32, ptr %119, i64 %indvars.iv.next615
  %135 = load i32, ptr %134, align 4, !tbaa !12
  %136 = sub i32 %135, %133
  %137 = icmp sgt i32 %136, 0
  br i1 %137, label %.lr.ph526, label %.loopexit510

.lr.ph526:                                        ; preds = %132
  %wide.trip.count612 = zext nneg i32 %136 to i64
  %138 = trunc i64 %indvars.iv614 to i32
  %139 = mul i32 %112, %138
  %xtraiter772 = and i64 %wide.trip.count612, 1
  %140 = icmp eq i32 %136, 1
  br i1 %140, label %.loopexit510.loopexit.unr-lcssa, label %.lr.ph526.new

.lr.ph526.new:                                    ; preds = %.lr.ph526
  %unroll_iter774 = and i64 %wide.trip.count612, 2147483646
  br label %141

141:                                              ; preds = %141, %.lr.ph526.new
  %indvars.iv609 = phi i64 [ 0, %.lr.ph526.new ], [ %indvars.iv.next610.1, %141 ]
  %niter775 = phi i64 [ 0, %.lr.ph526.new ], [ %niter775.next.1, %141 ]
  %142 = trunc nuw nsw i64 %indvars.iv609 to i32
  %143 = add i32 %133, %142
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds double, ptr %120, i64 %144
  %146 = load double, ptr %145, align 8, !tbaa !10
  %147 = getelementptr inbounds i32, ptr %121, i64 %144
  %148 = load i32, ptr %147, align 4, !tbaa !12
  %149 = add i32 %148, %139
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds double, ptr %69, i64 %150
  store double %146, ptr %151, align 8, !tbaa !10
  %152 = trunc i64 %indvars.iv609 to i32
  %153 = or disjoint i32 %152, 1
  %154 = add i32 %133, %153
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds double, ptr %120, i64 %155
  %157 = load double, ptr %156, align 8, !tbaa !10
  %158 = getelementptr inbounds i32, ptr %121, i64 %155
  %159 = load i32, ptr %158, align 4, !tbaa !12
  %160 = add i32 %159, %139
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds double, ptr %69, i64 %161
  store double %157, ptr %162, align 8, !tbaa !10
  %indvars.iv.next610.1 = add nuw nsw i64 %indvars.iv609, 2
  %niter775.next.1 = add i64 %niter775, 2
  %niter775.ncmp.1 = icmp eq i64 %niter775.next.1, %unroll_iter774
  br i1 %niter775.ncmp.1, label %.loopexit510.loopexit.unr-lcssa, label %141, !llvm.loop !18

._crit_edge:                                      ; preds = %.loopexit510, %.preheader511
  %163 = icmp slt i32 %52, 1
  br i1 %163, label %164, label %.thread

164:                                              ; preds = %._crit_edge
  %165 = call ptr @getenv(ptr noundef nonnull @.str.5) #13
  %166 = sext i32 %113 to i64
  %167 = shl nsw i64 %166, 3
  %168 = load i32, ptr %11, align 4, !tbaa !12
  %169 = sext i32 %168 to i64
  %170 = mul i64 %167, %169
  %171 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %170, i64 noundef 64) #13
  %172 = load i32, ptr %10, align 4, !tbaa !12
  %173 = sext i32 %172 to i64
  %174 = shl nsw i64 %173, 3
  %175 = load i32, ptr %11, align 4, !tbaa !12
  %176 = sext i32 %175 to i64
  %177 = mul i64 %174, %176
  %178 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %177, i64 noundef 64) #13
  %179 = load i32, ptr %10, align 4, !tbaa !12
  %180 = sext i32 %179 to i64
  %181 = shl nsw i64 %180, 3
  %182 = load i32, ptr %11, align 4, !tbaa !12
  %183 = sext i32 %182 to i64
  %184 = mul i64 %181, %183
  %185 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %184, i64 noundef 64) #13
  %186 = icmp ne ptr %171, null
  %187 = icmp ne ptr %178, null
  %or.cond = select i1 %186, i1 %187, i1 false
  %188 = icmp ne ptr %185, null
  %or.cond3 = select i1 %or.cond, i1 %188, i1 false
  br i1 %or.cond3, label %190, label %189

189:                                              ; preds = %164
  call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, i32 noundef 229, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #16
  unreachable

190:                                              ; preds = %164
  %191 = load i32, ptr %10, align 4, !tbaa !12
  %192 = load i32, ptr %11, align 4, !tbaa !12
  %193 = mul nsw i32 %192, %191
  %194 = add nsw i32 %193, 1
  %195 = sdiv i32 %194, 2
  %196 = sitofp i32 %195 to double
  %197 = fdiv double 1.000000e+00, %196
  %198 = sext i32 %193 to i64
  %199 = call i64 @libxsmm_coprime2(i64 noundef %198) #13
  %200 = icmp sgt i32 %192, 0
  %201 = icmp sgt i32 %191, 0
  %or.cond765 = and i1 %200, %201
  br i1 %or.cond765, label %.preheader509.us.preheader, label %.preheader508

.preheader509.us.preheader:                       ; preds = %190
  %202 = zext nneg i32 %191 to i64
  %wide.trip.count627 = zext nneg i32 %192 to i64
  %xtraiter777 = and i64 %202, 1
  %203 = icmp eq i32 %191, 1
  %unroll_iter779 = and i64 %202, 2147483646
  %lcmp.mod778.not = icmp eq i64 %xtraiter777, 0
  br label %.preheader509.us

.preheader509.us:                                 ; preds = %.preheader509.us.preheader, %._crit_edge531.us
  %indvars.iv624 = phi i64 [ 0, %.preheader509.us.preheader ], [ %indvars.iv.next625, %._crit_edge531.us ]
  %204 = mul nuw nsw i64 %indvars.iv624, %202
  br i1 %203, label %._crit_edge531.us.unr-lcssa, label %.preheader509.us.new

.preheader509.us.new:                             ; preds = %.preheader509.us, %.preheader509.us.new
  %indvars.iv619 = phi i64 [ %indvars.iv.next620.1, %.preheader509.us.new ], [ 0, %.preheader509.us ]
  %niter780 = phi i64 [ %niter780.next.1, %.preheader509.us.new ], [ 0, %.preheader509.us ]
  %205 = add nuw nsw i64 %indvars.iv619, %204
  %206 = mul i64 %199, %205
  %207 = urem i64 %206, %198
  %208 = uitofp i64 %207 to double
  %209 = fsub double %208, %196
  %210 = fmul double %197, %209
  %211 = getelementptr inbounds double, ptr %178, i64 %205
  store double %210, ptr %211, align 8, !tbaa !10
  %indvars.iv.next620 = or disjoint i64 %indvars.iv619, 1
  %212 = add nuw nsw i64 %indvars.iv.next620, %204
  %213 = mul i64 %199, %212
  %214 = urem i64 %213, %198
  %215 = uitofp i64 %214 to double
  %216 = fsub double %215, %196
  %217 = fmul double %197, %216
  %218 = getelementptr inbounds double, ptr %178, i64 %212
  store double %217, ptr %218, align 8, !tbaa !10
  %indvars.iv.next620.1 = add nuw nsw i64 %indvars.iv619, 2
  %niter780.next.1 = add i64 %niter780, 2
  %niter780.ncmp.1 = icmp eq i64 %niter780.next.1, %unroll_iter779
  br i1 %niter780.ncmp.1, label %._crit_edge531.us.unr-lcssa, label %.preheader509.us.new, !llvm.loop !19

._crit_edge531.us.unr-lcssa:                      ; preds = %.preheader509.us.new, %.preheader509.us
  %indvars.iv619.unr = phi i64 [ 0, %.preheader509.us ], [ %indvars.iv.next620.1, %.preheader509.us.new ]
  br i1 %lcmp.mod778.not, label %._crit_edge531.us, label %._crit_edge531.us.epilog-lcssa

._crit_edge531.us.epilog-lcssa:                   ; preds = %._crit_edge531.us.unr-lcssa
  %219 = add nuw nsw i64 %indvars.iv619.unr, %204
  %220 = mul i64 %199, %219
  %221 = urem i64 %220, %198
  %222 = uitofp i64 %221 to double
  %223 = fsub double %222, %196
  %224 = fmul double %197, %223
  %225 = getelementptr inbounds double, ptr %178, i64 %219
  store double %224, ptr %225, align 8, !tbaa !10
  br label %._crit_edge531.us

._crit_edge531.us:                                ; preds = %._crit_edge531.us.unr-lcssa, %._crit_edge531.us.epilog-lcssa
  %indvars.iv.next625 = add nuw nsw i64 %indvars.iv624, 1
  %exitcond628.not = icmp eq i64 %indvars.iv.next625, %wide.trip.count627
  br i1 %exitcond628.not, label %.preheader508, label %.preheader509.us, !llvm.loop !20

.preheader508:                                    ; preds = %._crit_edge531.us, %190
  %226 = load i32, ptr %10, align 4, !tbaa !12
  %227 = load i32, ptr %11, align 4, !tbaa !12
  %228 = mul nsw i32 %227, %226
  %229 = icmp sgt i32 %228, 0
  br i1 %229, label %.lr.ph539.preheader, label %._crit_edge540

.lr.ph539.preheader:                              ; preds = %.preheader508
  %230 = zext nneg i32 %228 to i64
  %231 = shl nuw nsw i64 %230, 3
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %171, ptr nonnull align 8 %178, i64 %231, i1 false), !tbaa !10
  %232 = zext nneg i32 %228 to i64
  %233 = shl nuw nsw i64 %232, 3
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %185, ptr nonnull align 8 %178, i64 %233, i1 false), !tbaa !10
  br label %._crit_edge540

._crit_edge540:                                   ; preds = %.preheader508, %.lr.ph539.preheader
  store double 0.000000e+00, ptr %14, align 8, !tbaa !10
  %234 = load i32, ptr %12, align 4, !tbaa !12
  %235 = icmp eq ptr %165, null
  br i1 %235, label %242, label %236

236:                                              ; preds = %._crit_edge540
  %237 = load i8, ptr %165, align 1, !tbaa !9
  %238 = icmp eq i8 %237, 0
  br i1 %238, label %242, label %239

239:                                              ; preds = %236
  %240 = call i32 @atoi(ptr nocapture noundef %165) #14
  %241 = icmp ne i32 %240, 0
  br label %242

242:                                              ; preds = %._crit_edge540, %236, %239
  %243 = phi i1 [ true, %236 ], [ true, %._crit_edge540 ], [ %241, %239 ]
  %244 = zext i1 %243 to i32
  %.not475 = icmp eq i32 %33, 0
  %245 = select i1 %.not475, ptr @libxsmm_timer_tick, ptr null
  %246 = call ptr @libxsmm_fsspmdm_create(i32 noundef 0, i32 noundef %226, i32 noundef %spec.select, i32 noundef %234, i32 noundef %234, i32 noundef %227, i32 noundef %227, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef %69, i32 noundef %244, ptr noundef %245) #13
  %or.cond5.not = icmp eq i32 %52, 0
  br i1 %or.cond5.not, label %.thread701, label %..thread_crit_edge

.thread701:                                       ; preds = %242
  %247 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  br label %.preheader502

..thread_crit_edge:                               ; preds = %242
  %.pre696 = load i32, ptr %10, align 4, !tbaa !12
  br label %.thread

.thread:                                          ; preds = %..thread_crit_edge, %._crit_edge
  %248 = phi i32 [ %.pre696, %..thread_crit_edge ], [ %113, %._crit_edge ]
  %.0409488 = phi ptr [ %171, %..thread_crit_edge ], [ null, %._crit_edge ]
  %.0410486 = phi ptr [ %178, %..thread_crit_edge ], [ null, %._crit_edge ]
  %.0411484 = phi ptr [ %185, %..thread_crit_edge ], [ null, %._crit_edge ]
  %.0438482 = phi ptr [ %246, %..thread_crit_edge ], [ null, %._crit_edge ]
  %249 = sext i32 %248 to i64
  %250 = shl nsw i64 %249, 3
  %251 = load i32, ptr %11, align 4, !tbaa !12
  %252 = sext i32 %251 to i64
  %253 = mul i64 %250, %252
  %254 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %253, i64 noundef 64) #13
  %255 = load i32, ptr %10, align 4, !tbaa !12
  %256 = sext i32 %255 to i64
  %257 = shl nsw i64 %256, 3
  %258 = load i32, ptr %11, align 4, !tbaa !12
  %259 = sext i32 %258 to i64
  %260 = mul i64 %257, %259
  %261 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %260, i64 noundef 64) #13
  %262 = load i32, ptr %10, align 4, !tbaa !12
  %263 = sext i32 %262 to i64
  %264 = shl nsw i64 %263, 3
  %265 = load i32, ptr %11, align 4, !tbaa !12
  %266 = sext i32 %265 to i64
  %267 = mul i64 %264, %266
  %268 = call noalias ptr @libxsmm_aligned_malloc(i64 noundef %267, i64 noundef 64) #13
  %269 = icmp ne ptr %254, null
  %270 = icmp ne ptr %261, null
  %or.cond7 = select i1 %269, i1 %270, i1 false
  %271 = icmp ne ptr %268, null
  %or.cond9 = select i1 %or.cond7, i1 %271, i1 false
  br i1 %or.cond9, label %273, label %272

272:                                              ; preds = %.thread
  call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.7, i32 noundef 251, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #16
  unreachable

273:                                              ; preds = %.thread
  %274 = load i32, ptr %10, align 4, !tbaa !12
  %275 = load i32, ptr %11, align 4, !tbaa !12
  %276 = mul nsw i32 %275, %274
  %277 = add nsw i32 %276, 1
  %278 = sdiv i32 %277, 2
  %279 = sitofp i32 %278 to double
  %280 = fdiv double 1.000000e+00, %279
  %281 = sext i32 %276 to i64
  %282 = call i64 @libxsmm_coprime2(i64 noundef %281) #13
  %283 = icmp sgt i32 %275, 0
  %284 = icmp sgt i32 %274, 0
  %or.cond766 = and i1 %283, %284
  br i1 %or.cond766, label %.preheader506.us.preheader, label %.preheader505

.preheader506.us.preheader:                       ; preds = %273
  %285 = zext nneg i32 %274 to i64
  %wide.trip.count643 = zext nneg i32 %275 to i64
  %xtraiter782 = and i64 %285, 1
  %286 = icmp eq i32 %274, 1
  %unroll_iter784 = and i64 %285, 2147483646
  %lcmp.mod783.not = icmp eq i64 %xtraiter782, 0
  br label %.preheader506.us

.preheader506.us:                                 ; preds = %.preheader506.us.preheader, %._crit_edge543.us
  %indvars.iv640 = phi i64 [ 0, %.preheader506.us.preheader ], [ %indvars.iv.next641, %._crit_edge543.us ]
  %287 = mul nuw nsw i64 %indvars.iv640, %285
  br i1 %286, label %._crit_edge543.us.unr-lcssa, label %.preheader506.us.new

.preheader506.us.new:                             ; preds = %.preheader506.us, %.preheader506.us.new
  %indvars.iv635 = phi i64 [ %indvars.iv.next636.1, %.preheader506.us.new ], [ 0, %.preheader506.us ]
  %niter785 = phi i64 [ %niter785.next.1, %.preheader506.us.new ], [ 0, %.preheader506.us ]
  %288 = add nuw nsw i64 %indvars.iv635, %287
  %289 = mul i64 %282, %288
  %290 = urem i64 %289, %281
  %291 = uitofp i64 %290 to double
  %292 = fsub double %291, %279
  %293 = fmul double %280, %292
  %294 = getelementptr inbounds double, ptr %261, i64 %288
  store double %293, ptr %294, align 8, !tbaa !10
  %indvars.iv.next636 = or disjoint i64 %indvars.iv635, 1
  %295 = add nuw nsw i64 %indvars.iv.next636, %287
  %296 = mul i64 %282, %295
  %297 = urem i64 %296, %281
  %298 = uitofp i64 %297 to double
  %299 = fsub double %298, %279
  %300 = fmul double %280, %299
  %301 = getelementptr inbounds double, ptr %261, i64 %295
  store double %300, ptr %301, align 8, !tbaa !10
  %indvars.iv.next636.1 = add nuw nsw i64 %indvars.iv635, 2
  %niter785.next.1 = add i64 %niter785, 2
  %niter785.ncmp.1 = icmp eq i64 %niter785.next.1, %unroll_iter784
  br i1 %niter785.ncmp.1, label %._crit_edge543.us.unr-lcssa, label %.preheader506.us.new, !llvm.loop !21

._crit_edge543.us.unr-lcssa:                      ; preds = %.preheader506.us.new, %.preheader506.us
  %indvars.iv635.unr = phi i64 [ 0, %.preheader506.us ], [ %indvars.iv.next636.1, %.preheader506.us.new ]
  br i1 %lcmp.mod783.not, label %._crit_edge543.us, label %._crit_edge543.us.epilog-lcssa

._crit_edge543.us.epilog-lcssa:                   ; preds = %._crit_edge543.us.unr-lcssa
  %302 = add nuw nsw i64 %indvars.iv635.unr, %287
  %303 = mul i64 %282, %302
  %304 = urem i64 %303, %281
  %305 = uitofp i64 %304 to double
  %306 = fsub double %305, %279
  %307 = fmul double %280, %306
  %308 = getelementptr inbounds double, ptr %261, i64 %302
  store double %307, ptr %308, align 8, !tbaa !10
  br label %._crit_edge543.us

._crit_edge543.us:                                ; preds = %._crit_edge543.us.unr-lcssa, %._crit_edge543.us.epilog-lcssa
  %indvars.iv.next641 = add nuw nsw i64 %indvars.iv640, 1
  %exitcond644.not = icmp eq i64 %indvars.iv.next641, %wide.trip.count643
  br i1 %exitcond644.not, label %.preheader505, label %.preheader506.us, !llvm.loop !22

.preheader505:                                    ; preds = %._crit_edge543.us, %273
  %309 = load i32, ptr %10, align 4, !tbaa !12
  %310 = load i32, ptr %11, align 4
  %311 = mul nsw i32 %310, %309
  %312 = icmp sgt i32 %311, 0
  br i1 %312, label %.lr.ph551.preheader, label %317

.lr.ph551.preheader:                              ; preds = %.preheader505
  %313 = zext nneg i32 %311 to i64
  %314 = shl nuw nsw i64 %313, 3
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %254, ptr nonnull align 8 %261, i64 %314, i1 false), !tbaa !10
  %315 = zext nneg i32 %311 to i64
  %316 = shl nuw nsw i64 %315, 3
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %268, ptr nonnull align 8 %261, i64 %316, i1 false), !tbaa !10
  br label %317

317:                                              ; preds = %.lr.ph551.preheader, %.preheader505
  store double 1.000000e+00, ptr %14, align 8, !tbaa !10
  %318 = call i32 @llvm.smin.i32(i32 %spec.select, i32 %310)
  %319 = load i32, ptr %12, align 4, !tbaa !12
  %.not476 = icmp eq i32 %33, 0
  %320 = select i1 %.not476, ptr @libxsmm_timer_tick, ptr null
  %321 = call ptr @libxsmm_fsspmdm_create(i32 noundef 0, i32 noundef %309, i32 noundef %318, i32 noundef %319, i32 noundef %319, i32 noundef %310, i32 noundef %310, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef %69, i32 noundef 0, ptr noundef %320) #13
  %322 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  br i1 %163, label %.preheader502, label %.preheader498

.preheader502:                                    ; preds = %.thread701, %317
  %.0412733 = phi ptr [ null, %.thread701 ], [ %254, %317 ]
  %.0413731 = phi ptr [ null, %.thread701 ], [ %261, %317 ]
  %.0419728 = phi ptr [ null, %.thread701 ], [ %268, %317 ]
  %.0439725 = phi ptr [ null, %.thread701 ], [ %321, %317 ]
  %.0438483722 = phi ptr [ %246, %.thread701 ], [ %.0438482, %317 ]
  %.0411485719 = phi ptr [ %185, %.thread701 ], [ %.0411484, %317 ]
  %.0410487717 = phi ptr [ %178, %.thread701 ], [ %.0410486, %317 ]
  %.0409489714 = phi ptr [ %171, %.thread701 ], [ %.0409488, %317 ]
  %or.cond5.not491712 = phi i1 [ true, %.thread701 ], [ false, %317 ]
  %323 = load i32, ptr %11, align 4, !tbaa !12
  %324 = icmp sgt i32 %323, 0
  br i1 %324, label %.preheader501.lr.ph, label %.loopexit503

.preheader501.lr.ph:                              ; preds = %.preheader502
  %325 = load i32, ptr %10, align 4, !tbaa !12
  %326 = icmp sgt i32 %325, 0
  %327 = load ptr, ptr %3, align 8
  br i1 %326, label %.preheader501.us.preheader, label %.loopexit503

.preheader501.us.preheader:                       ; preds = %.preheader501.lr.ph
  %328 = zext nneg i32 %323 to i64
  %.pre697.pre = load i32, ptr %327, align 4, !tbaa !12
  %wide.trip.count659 = zext nneg i32 %325 to i64
  br label %.preheader501.us

.preheader501.us:                                 ; preds = %.preheader501.us.preheader, %._crit_edge558.us
  %indvars.iv661 = phi i64 [ 0, %.preheader501.us.preheader ], [ %indvars.iv.next662, %._crit_edge558.us ]
  %329 = load ptr, ptr %8, align 8
  %330 = load ptr, ptr %4, align 8
  %331 = trunc nuw nsw i64 %indvars.iv661 to i32
  br label %332

332:                                              ; preds = %.preheader501.us, %.loopexit500.us
  %333 = phi i32 [ %.pre697.pre, %.preheader501.us ], [ %335, %.loopexit500.us ]
  %indvars.iv656 = phi i64 [ 0, %.preheader501.us ], [ %indvars.iv.next657, %.loopexit500.us ]
  %indvars.iv.next657 = add nuw nsw i64 %indvars.iv656, 1
  %334 = getelementptr inbounds i32, ptr %327, i64 %indvars.iv.next657
  %335 = load i32, ptr %334, align 4, !tbaa !12
  %336 = sub i32 %335, %333
  %337 = mul nuw nsw i64 %indvars.iv656, %328
  %338 = add nuw nsw i64 %337, %indvars.iv661
  %339 = getelementptr inbounds double, ptr %.0410487717, i64 %338
  store double 0.000000e+00, ptr %339, align 8, !tbaa !10
  %340 = icmp sgt i32 %336, 0
  br i1 %340, label %.lr.ph555.us, label %.loopexit500.us

341:                                              ; preds = %341, %.lr.ph555.us.new
  %indvars.iv651 = phi i64 [ 0, %.lr.ph555.us.new ], [ %indvars.iv.next652.1, %341 ]
  %342 = phi double [ 0.000000e+00, %.lr.ph555.us.new ], [ %369, %341 ]
  %niter790 = phi i64 [ 0, %.lr.ph555.us.new ], [ %niter790.next.1, %341 ]
  %343 = trunc nuw nsw i64 %indvars.iv651 to i32
  %344 = add i32 %333, %343
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds double, ptr %329, i64 %345
  %347 = load double, ptr %346, align 8, !tbaa !10
  %348 = getelementptr inbounds i32, ptr %330, i64 %345
  %349 = load i32, ptr %348, align 4, !tbaa !12
  %350 = mul i32 %349, %323
  %351 = add i32 %350, %331
  %352 = zext i32 %351 to i64
  %353 = getelementptr inbounds double, ptr %76, i64 %352
  %354 = load double, ptr %353, align 8, !tbaa !10
  %355 = call double @llvm.fmuladd.f64(double %347, double %354, double %342)
  store double %355, ptr %339, align 8, !tbaa !10
  %356 = trunc i64 %indvars.iv651 to i32
  %357 = or disjoint i32 %356, 1
  %358 = add i32 %333, %357
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds double, ptr %329, i64 %359
  %361 = load double, ptr %360, align 8, !tbaa !10
  %362 = getelementptr inbounds i32, ptr %330, i64 %359
  %363 = load i32, ptr %362, align 4, !tbaa !12
  %364 = mul i32 %363, %323
  %365 = add i32 %364, %331
  %366 = zext i32 %365 to i64
  %367 = getelementptr inbounds double, ptr %76, i64 %366
  %368 = load double, ptr %367, align 8, !tbaa !10
  %369 = call double @llvm.fmuladd.f64(double %361, double %368, double %355)
  store double %369, ptr %339, align 8, !tbaa !10
  %indvars.iv.next652.1 = add nuw nsw i64 %indvars.iv651, 2
  %niter790.next.1 = add i64 %niter790, 2
  %niter790.ncmp.1 = icmp eq i64 %niter790.next.1, %unroll_iter789
  br i1 %niter790.ncmp.1, label %.loopexit500.us.loopexit.unr-lcssa, label %341, !llvm.loop !23

.loopexit500.us.loopexit.unr-lcssa:               ; preds = %341, %.lr.ph555.us
  %indvars.iv651.unr = phi i64 [ 0, %.lr.ph555.us ], [ %indvars.iv.next652.1, %341 ]
  %.unr = phi double [ 0.000000e+00, %.lr.ph555.us ], [ %369, %341 ]
  %lcmp.mod788.not = icmp eq i64 %xtraiter787, 0
  br i1 %lcmp.mod788.not, label %.loopexit500.us, label %.loopexit500.us.loopexit.epilog-lcssa

.loopexit500.us.loopexit.epilog-lcssa:            ; preds = %.loopexit500.us.loopexit.unr-lcssa
  %370 = trunc nuw nsw i64 %indvars.iv651.unr to i32
  %371 = add i32 %333, %370
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %329, i64 %372
  %374 = load double, ptr %373, align 8, !tbaa !10
  %375 = getelementptr inbounds i32, ptr %330, i64 %372
  %376 = load i32, ptr %375, align 4, !tbaa !12
  %377 = mul i32 %376, %323
  %378 = add i32 %377, %331
  %379 = zext i32 %378 to i64
  %380 = getelementptr inbounds double, ptr %76, i64 %379
  %381 = load double, ptr %380, align 8, !tbaa !10
  %382 = call double @llvm.fmuladd.f64(double %374, double %381, double %.unr)
  store double %382, ptr %339, align 8, !tbaa !10
  br label %.loopexit500.us

.loopexit500.us:                                  ; preds = %.loopexit500.us.loopexit.epilog-lcssa, %.loopexit500.us.loopexit.unr-lcssa, %332
  %exitcond660.not = icmp eq i64 %indvars.iv.next657, %wide.trip.count659
  br i1 %exitcond660.not, label %._crit_edge558.us, label %332, !llvm.loop !24

.lr.ph555.us:                                     ; preds = %332
  %wide.trip.count654 = zext nneg i32 %336 to i64
  %xtraiter787 = and i64 %wide.trip.count654, 1
  %383 = icmp eq i32 %336, 1
  br i1 %383, label %.loopexit500.us.loopexit.unr-lcssa, label %.lr.ph555.us.new

.lr.ph555.us.new:                                 ; preds = %.lr.ph555.us
  %unroll_iter789 = and i64 %wide.trip.count654, 2147483646
  br label %341

._crit_edge558.us:                                ; preds = %.loopexit500.us
  %indvars.iv.next662 = add nuw nsw i64 %indvars.iv661, 1
  %exitcond665.not = icmp eq i64 %indvars.iv.next662, %328
  br i1 %exitcond665.not, label %.loopexit503, label %.preheader501.us, !llvm.loop !25

.loopexit503:                                     ; preds = %._crit_edge558.us, %.preheader501.lr.ph, %.preheader502
  br i1 %or.cond5.not491712, label %.loopexit499, label %.preheader498

.preheader498:                                    ; preds = %317, %.loopexit503
  %.0409489713758 = phi ptr [ %.0409489714, %.loopexit503 ], [ %.0409488, %317 ]
  %.0410487716756 = phi ptr [ %.0410487717, %.loopexit503 ], [ %.0410486, %317 ]
  %.0411485718754 = phi ptr [ %.0411485719, %.loopexit503 ], [ %.0411484, %317 ]
  %.0438483721752 = phi ptr [ %.0438483722, %.loopexit503 ], [ %.0438482, %317 ]
  %.0439724750 = phi ptr [ %.0439725, %.loopexit503 ], [ %321, %317 ]
  %.0419727748 = phi ptr [ %.0419728, %.loopexit503 ], [ %268, %317 ]
  %.0413730746 = phi ptr [ %.0413731, %.loopexit503 ], [ %261, %317 ]
  %.0412732744 = phi ptr [ %.0412733, %.loopexit503 ], [ %254, %317 ]
  %384 = load i32, ptr %11, align 4, !tbaa !12
  %385 = icmp sgt i32 %384, 0
  br i1 %385, label %.preheader497.lr.ph, label %.loopexit499

.preheader497.lr.ph:                              ; preds = %.preheader498
  %386 = load i32, ptr %10, align 4, !tbaa !12
  %387 = icmp sgt i32 %386, 0
  %388 = load ptr, ptr %3, align 8
  %389 = load ptr, ptr %8, align 8
  %390 = load ptr, ptr %4, align 8
  br i1 %387, label %.preheader497.us.preheader, label %.loopexit499

.preheader497.us.preheader:                       ; preds = %.preheader497.lr.ph
  %391 = zext nneg i32 %384 to i64
  %.pre698.pre = load i32, ptr %388, align 4, !tbaa !12
  %wide.trip.count674 = zext nneg i32 %386 to i64
  br label %.preheader497.us

.preheader497.us:                                 ; preds = %.preheader497.us.preheader, %._crit_edge565.us
  %indvars.iv676 = phi i64 [ 0, %.preheader497.us.preheader ], [ %indvars.iv.next677, %._crit_edge565.us ]
  %392 = trunc nuw nsw i64 %indvars.iv676 to i32
  br label %393

393:                                              ; preds = %.preheader497.us, %.loopexit496.us
  %394 = phi i32 [ %.pre698.pre, %.preheader497.us ], [ %396, %.loopexit496.us ]
  %indvars.iv671 = phi i64 [ 0, %.preheader497.us ], [ %indvars.iv.next672, %.loopexit496.us ]
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %395 = getelementptr inbounds i32, ptr %388, i64 %indvars.iv.next672
  %396 = load i32, ptr %395, align 4, !tbaa !12
  %397 = sub i32 %396, %394
  %398 = icmp sgt i32 %397, 0
  br i1 %398, label %.lr.ph562.us, label %.loopexit496.us

399:                                              ; preds = %399, %.lr.ph562.us.new
  %indvars.iv666 = phi i64 [ 0, %.lr.ph562.us.new ], [ %indvars.iv.next667.1, %399 ]
  %400 = phi double [ %.promoted.us567, %.lr.ph562.us.new ], [ %427, %399 ]
  %niter796 = phi i64 [ 0, %.lr.ph562.us.new ], [ %niter796.next.1, %399 ]
  %401 = trunc nuw nsw i64 %indvars.iv666 to i32
  %402 = add i32 %394, %401
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds double, ptr %389, i64 %403
  %405 = load double, ptr %404, align 8, !tbaa !10
  %406 = getelementptr inbounds i32, ptr %390, i64 %403
  %407 = load i32, ptr %406, align 4, !tbaa !12
  %408 = mul i32 %407, %384
  %409 = add i32 %408, %392
  %410 = zext i32 %409 to i64
  %411 = getelementptr inbounds double, ptr %76, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !10
  %413 = call double @llvm.fmuladd.f64(double %405, double %412, double %400)
  store double %413, ptr %443, align 8, !tbaa !10
  %414 = trunc i64 %indvars.iv666 to i32
  %415 = or disjoint i32 %414, 1
  %416 = add i32 %394, %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds double, ptr %389, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !10
  %420 = getelementptr inbounds i32, ptr %390, i64 %417
  %421 = load i32, ptr %420, align 4, !tbaa !12
  %422 = mul i32 %421, %384
  %423 = add i32 %422, %392
  %424 = zext i32 %423 to i64
  %425 = getelementptr inbounds double, ptr %76, i64 %424
  %426 = load double, ptr %425, align 8, !tbaa !10
  %427 = call double @llvm.fmuladd.f64(double %419, double %426, double %413)
  store double %427, ptr %443, align 8, !tbaa !10
  %indvars.iv.next667.1 = add nuw nsw i64 %indvars.iv666, 2
  %niter796.next.1 = add i64 %niter796, 2
  %niter796.ncmp.1 = icmp eq i64 %niter796.next.1, %unroll_iter795
  br i1 %niter796.ncmp.1, label %.loopexit496.us.loopexit.unr-lcssa, label %399, !llvm.loop !26

.loopexit496.us.loopexit.unr-lcssa:               ; preds = %399, %.lr.ph562.us
  %indvars.iv666.unr = phi i64 [ 0, %.lr.ph562.us ], [ %indvars.iv.next667.1, %399 ]
  %.unr793 = phi double [ %.promoted.us567, %.lr.ph562.us ], [ %427, %399 ]
  %lcmp.mod794.not = icmp eq i64 %xtraiter792, 0
  br i1 %lcmp.mod794.not, label %.loopexit496.us, label %.loopexit496.us.loopexit.epilog-lcssa

.loopexit496.us.loopexit.epilog-lcssa:            ; preds = %.loopexit496.us.loopexit.unr-lcssa
  %428 = trunc nuw nsw i64 %indvars.iv666.unr to i32
  %429 = add i32 %394, %428
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds double, ptr %389, i64 %430
  %432 = load double, ptr %431, align 8, !tbaa !10
  %433 = getelementptr inbounds i32, ptr %390, i64 %430
  %434 = load i32, ptr %433, align 4, !tbaa !12
  %435 = mul i32 %434, %384
  %436 = add i32 %435, %392
  %437 = zext i32 %436 to i64
  %438 = getelementptr inbounds double, ptr %76, i64 %437
  %439 = load double, ptr %438, align 8, !tbaa !10
  %440 = call double @llvm.fmuladd.f64(double %432, double %439, double %.unr793)
  store double %440, ptr %443, align 8, !tbaa !10
  br label %.loopexit496.us

.loopexit496.us:                                  ; preds = %.loopexit496.us.loopexit.epilog-lcssa, %.loopexit496.us.loopexit.unr-lcssa, %393
  %exitcond675.not = icmp eq i64 %indvars.iv.next672, %wide.trip.count674
  br i1 %exitcond675.not, label %._crit_edge565.us, label %393, !llvm.loop !27

.lr.ph562.us:                                     ; preds = %393
  %441 = mul nuw nsw i64 %indvars.iv671, %391
  %442 = add nuw nsw i64 %441, %indvars.iv676
  %443 = getelementptr inbounds double, ptr %.0413730746, i64 %442
  %.promoted.us567 = load double, ptr %443, align 8, !tbaa !10
  %wide.trip.count669 = zext nneg i32 %397 to i64
  %xtraiter792 = and i64 %wide.trip.count669, 1
  %444 = icmp eq i32 %397, 1
  br i1 %444, label %.loopexit496.us.loopexit.unr-lcssa, label %.lr.ph562.us.new

.lr.ph562.us.new:                                 ; preds = %.lr.ph562.us
  %unroll_iter795 = and i64 %wide.trip.count669, 2147483646
  br label %399

._crit_edge565.us:                                ; preds = %.loopexit496.us
  %indvars.iv.next677 = add nuw nsw i64 %indvars.iv676, 1
  %exitcond680.not = icmp eq i64 %indvars.iv.next677, %391
  br i1 %exitcond680.not, label %.loopexit499, label %.preheader497.us, !llvm.loop !28

.loopexit499:                                     ; preds = %._crit_edge565.us, %.preheader497.lr.ph, %.preheader498, %.loopexit503
  %or.cond5.not491711761 = phi i1 [ false, %.preheader498 ], [ true, %.loopexit503 ], [ false, %.preheader497.lr.ph ], [ false, %._crit_edge565.us ]
  %.0409489713759 = phi ptr [ %.0409489713758, %.preheader498 ], [ %.0409489714, %.loopexit503 ], [ %.0409489713758, %.preheader497.lr.ph ], [ %.0409489713758, %._crit_edge565.us ]
  %.0410487716757 = phi ptr [ %.0410487716756, %.preheader498 ], [ %.0410487717, %.loopexit503 ], [ %.0410487716756, %.preheader497.lr.ph ], [ %.0410487716756, %._crit_edge565.us ]
  %.0411485718755 = phi ptr [ %.0411485718754, %.preheader498 ], [ %.0411485719, %.loopexit503 ], [ %.0411485718754, %.preheader497.lr.ph ], [ %.0411485718754, %._crit_edge565.us ]
  %.0438483721753 = phi ptr [ %.0438483721752, %.preheader498 ], [ %.0438483722, %.loopexit503 ], [ %.0438483721752, %.preheader497.lr.ph ], [ %.0438483721752, %._crit_edge565.us ]
  %.0439724751 = phi ptr [ %.0439724750, %.preheader498 ], [ %.0439725, %.loopexit503 ], [ %.0439724750, %.preheader497.lr.ph ], [ %.0439724750, %._crit_edge565.us ]
  %.0419727749 = phi ptr [ %.0419727748, %.preheader498 ], [ %.0419728, %.loopexit503 ], [ %.0419727748, %.preheader497.lr.ph ], [ %.0419727748, %._crit_edge565.us ]
  %.0413730747 = phi ptr [ %.0413730746, %.preheader498 ], [ %.0413731, %.loopexit503 ], [ %.0413730746, %.preheader497.lr.ph ], [ %.0413730746, %._crit_edge565.us ]
  %.0412732745 = phi ptr [ %.0412732744, %.preheader498 ], [ %.0412733, %.loopexit503 ], [ %.0412732744, %.preheader497.lr.ph ], [ %.0412732744, %._crit_edge565.us ]
  %445 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %446 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %447 = load i32, ptr %11, align 4
  %448 = icmp sgt i32 %447, 0
  %or.cond591 = select i1 %163, i1 %448, i1 false
  br i1 %or.cond591, label %.lr.ph569.preheader, label %.loopexit495

.lr.ph569.preheader:                              ; preds = %.loopexit499
  %449 = call i32 @llvm.smin.i32(i32 %43, i32 %24)
  %smin = sext i32 %449 to i64
  br label %.lr.ph569

.lr.ph569:                                        ; preds = %.lr.ph569.preheader, %.lr.ph569
  %indvars.iv681 = phi i64 [ 0, %.lr.ph569.preheader ], [ %indvars.iv.next682, %.lr.ph569 ]
  %450 = getelementptr inbounds double, ptr %76, i64 %indvars.iv681
  %451 = getelementptr inbounds double, ptr %.0409489713759, i64 %indvars.iv681
  call void @libxsmm_fsspmdm_execute(ptr noundef %.0438483721753, ptr noundef %450, ptr noundef %451) #13
  %indvars.iv.next682 = add nsw i64 %indvars.iv681, %smin
  %452 = load i32, ptr %11, align 4
  %453 = sext i32 %452 to i64
  %454 = icmp slt i64 %indvars.iv.next682, %453
  br i1 %454, label %.lr.ph569, label %.loopexit495, !llvm.loop !29

.loopexit495:                                     ; preds = %.lr.ph569, %.loopexit499
  %455 = phi i32 [ %447, %.loopexit499 ], [ %452, %.lr.ph569 ]
  %456 = icmp slt i32 %455, 1
  %or.cond593.not = select i1 %or.cond5.not491711761, i1 true, i1 %456
  br i1 %or.cond593.not, label %.loopexit, label %.lr.ph571.preheader

.lr.ph571.preheader:                              ; preds = %.loopexit495
  %457 = call i32 @llvm.smin.i32(i32 %43, i32 %24)
  %smin683 = sext i32 %457 to i64
  br label %.lr.ph571

.lr.ph571:                                        ; preds = %.lr.ph571.preheader, %.lr.ph571
  %indvars.iv684 = phi i64 [ 0, %.lr.ph571.preheader ], [ %indvars.iv.next685, %.lr.ph571 ]
  %458 = getelementptr inbounds double, ptr %76, i64 %indvars.iv684
  %459 = getelementptr inbounds double, ptr %.0412732745, i64 %indvars.iv684
  call void @libxsmm_fsspmdm_execute(ptr noundef %.0439724751, ptr noundef %458, ptr noundef %459) #13
  %indvars.iv.next685 = add nsw i64 %indvars.iv684, %smin683
  %460 = load i32, ptr %11, align 4, !tbaa !12
  %461 = sext i32 %460 to i64
  %462 = icmp slt i64 %indvars.iv.next685, %461
  br i1 %462, label %.lr.ph571, label %.loopexit, !llvm.loop !30

.loopexit:                                        ; preds = %.lr.ph571, %.loopexit495
  %463 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %464 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  br i1 %163, label %465, label %467

465:                                              ; preds = %.loopexit
  store double 0.000000e+00, ptr %14, align 8, !tbaa !10
  %466 = call ptr @libxsmm_original_dgemm() #13
  call void %466(ptr noundef nonnull %15, ptr noundef nonnull %15, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef %76, ptr noundef nonnull %11, ptr noundef %69, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef %.0411485718755, ptr noundef nonnull %11) #13
  br label %467

467:                                              ; preds = %465, %.loopexit
  br i1 %or.cond5.not491711761, label %470, label %468

468:                                              ; preds = %467
  store double 1.000000e+00, ptr %14, align 8, !tbaa !10
  %469 = call ptr @libxsmm_original_dgemm() #13
  call void %469(ptr noundef nonnull %15, ptr noundef nonnull %15, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef %76, ptr noundef nonnull %11, ptr noundef %69, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef %.0419727749, ptr noundef nonnull %11) #13
  br label %470

470:                                              ; preds = %467, %468
  %471 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %472 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  br i1 %163, label %473, label %514

473:                                              ; preds = %470
  %474 = load i32, ptr %10, align 4, !tbaa !12
  %475 = load i32, ptr %11, align 4, !tbaa !12
  %476 = call i32 @libxsmm_matdiff(ptr noundef nonnull %9, i32 noundef 0, i32 noundef %474, i32 noundef %475, ptr noundef %.0410487716757, ptr noundef %.0409489713759, ptr noundef null, ptr noundef null) #13
  %477 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %9) #13
  %478 = getelementptr inbounds i8, ptr %9, i64 40
  %479 = load double, ptr %478, align 8, !tbaa !31
  %480 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %479, double noundef %477)
  %481 = fcmp ogt double %477, 1.000000e-08
  br i1 %481, label %482, label %492

482:                                              ; preds = %473
  %483 = getelementptr inbounds i8, ptr %9, i64 168
  %484 = load double, ptr %483, align 8, !tbaa !33
  %485 = getelementptr inbounds i8, ptr %9, i64 160
  %486 = load double, ptr %485, align 8, !tbaa !34
  %487 = getelementptr inbounds i8, ptr %9, i64 176
  %488 = load i32, ptr %487, align 8, !tbaa !35
  %489 = getelementptr inbounds i8, ptr %9, i64 180
  %490 = load i32, ptr %489, align 4, !tbaa !36
  %491 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %484, double noundef %486, i32 noundef %488, i32 noundef %490)
  br label %494

492:                                              ; preds = %473
  %493 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  br label %494

494:                                              ; preds = %492, %482
  %.0 = phi i32 [ 1, %482 ], [ 0, %492 ]
  %495 = load i32, ptr %10, align 4, !tbaa !12
  %496 = load i32, ptr %11, align 4, !tbaa !12
  %497 = call i32 @libxsmm_matdiff(ptr noundef nonnull %9, i32 noundef 0, i32 noundef %495, i32 noundef %496, ptr noundef %.0410487716757, ptr noundef %.0411485718755, ptr noundef null, ptr noundef null) #13
  %498 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %9) #13
  %499 = load double, ptr %478, align 8, !tbaa !31
  %500 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %499, double noundef %498)
  %501 = fcmp ogt double %498, 1.000000e-08
  br i1 %501, label %502, label %512

502:                                              ; preds = %494
  %503 = getelementptr inbounds i8, ptr %9, i64 168
  %504 = load double, ptr %503, align 8, !tbaa !33
  %505 = getelementptr inbounds i8, ptr %9, i64 160
  %506 = load double, ptr %505, align 8, !tbaa !34
  %507 = getelementptr inbounds i8, ptr %9, i64 176
  %508 = load i32, ptr %507, align 8, !tbaa !35
  %509 = getelementptr inbounds i8, ptr %9, i64 180
  %510 = load i32, ptr %509, align 4, !tbaa !36
  %511 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %504, double noundef %506, i32 noundef %508, i32 noundef %510)
  br label %514

512:                                              ; preds = %494
  %513 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  br label %514

514:                                              ; preds = %502, %512, %470
  %.1 = phi i32 [ %.0, %502 ], [ %.0, %512 ], [ 0, %470 ]
  br i1 %or.cond5.not491711761, label %557, label %515

515:                                              ; preds = %514
  %516 = load i32, ptr %10, align 4, !tbaa !12
  %517 = load i32, ptr %11, align 4, !tbaa !12
  %518 = call i32 @libxsmm_matdiff(ptr noundef nonnull %9, i32 noundef 0, i32 noundef %516, i32 noundef %517, ptr noundef %.0413730747, ptr noundef %.0412732745, ptr noundef null, ptr noundef null) #13
  %519 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %9) #13
  %520 = getelementptr inbounds i8, ptr %9, i64 40
  %521 = load double, ptr %520, align 8, !tbaa !31
  %522 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef %521, double noundef %519)
  %523 = fcmp ogt double %519, 1.000000e-08
  br i1 %523, label %524, label %535

524:                                              ; preds = %515
  %525 = getelementptr inbounds i8, ptr %9, i64 168
  %526 = load double, ptr %525, align 8, !tbaa !33
  %527 = getelementptr inbounds i8, ptr %9, i64 160
  %528 = load double, ptr %527, align 8, !tbaa !34
  %529 = getelementptr inbounds i8, ptr %9, i64 176
  %530 = load i32, ptr %529, align 8, !tbaa !35
  %531 = getelementptr inbounds i8, ptr %9, i64 180
  %532 = load i32, ptr %531, align 4, !tbaa !36
  %533 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %526, double noundef %528, i32 noundef %530, i32 noundef %532)
  %534 = or i32 %.1, 2
  br label %537

535:                                              ; preds = %515
  %536 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  br label %537

537:                                              ; preds = %535, %524
  %.2 = phi i32 [ %534, %524 ], [ %.1, %535 ]
  %538 = load i32, ptr %10, align 4, !tbaa !12
  %539 = load i32, ptr %11, align 4, !tbaa !12
  %540 = call i32 @libxsmm_matdiff(ptr noundef nonnull %9, i32 noundef 0, i32 noundef %538, i32 noundef %539, ptr noundef %.0413730747, ptr noundef %.0419727749, ptr noundef null, ptr noundef null) #13
  %541 = call double @libxsmm_matdiff_epsilon(ptr noundef nonnull %9) #13
  %542 = load double, ptr %520, align 8, !tbaa !31
  %543 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, double noundef %542, double noundef %541)
  %544 = fcmp ogt double %541, 1.000000e-08
  br i1 %544, label %545, label %555

545:                                              ; preds = %537
  %546 = getelementptr inbounds i8, ptr %9, i64 168
  %547 = load double, ptr %546, align 8, !tbaa !33
  %548 = getelementptr inbounds i8, ptr %9, i64 160
  %549 = load double, ptr %548, align 8, !tbaa !34
  %550 = getelementptr inbounds i8, ptr %9, i64 176
  %551 = load i32, ptr %550, align 8, !tbaa !35
  %552 = getelementptr inbounds i8, ptr %9, i64 180
  %553 = load i32, ptr %552, align 4, !tbaa !36
  %554 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %547, double noundef %549, i32 noundef %551, i32 noundef %553)
  br label %557

555:                                              ; preds = %537
  %556 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16)
  br label %557

557:                                              ; preds = %545, %555, %514
  %.3 = phi i32 [ %.2, %545 ], [ %.2, %555 ], [ %.1, %514 ]
  br i1 %163, label %558, label %650

558:                                              ; preds = %557
  %559 = call i64 @libxsmm_timer_tick() #13
  %560 = icmp sgt i32 %46, 0
  br i1 %560, label %.preheader492.preheader, label %._crit_edge576

.preheader492.preheader:                          ; preds = %558
  %561 = call i32 @llvm.smin.i32(i32 %43, i32 %24)
  %smin686 = sext i32 %561 to i64
  %.pre699 = load i32, ptr %11, align 4, !tbaa !12
  br label %.preheader492

.preheader492:                                    ; preds = %.preheader492.preheader, %._crit_edge574
  %562 = phi i32 [ %569, %._crit_edge574 ], [ %.pre699, %.preheader492.preheader ]
  %.2427575 = phi i32 [ %570, %._crit_edge574 ], [ 0, %.preheader492.preheader ]
  %563 = icmp sgt i32 %562, 0
  br i1 %563, label %.lr.ph573, label %._crit_edge574

.lr.ph573:                                        ; preds = %.preheader492, %.lr.ph573
  %indvars.iv687 = phi i64 [ %indvars.iv.next688, %.lr.ph573 ], [ 0, %.preheader492 ]
  %564 = getelementptr inbounds double, ptr %76, i64 %indvars.iv687
  %565 = getelementptr inbounds double, ptr %.0409489713759, i64 %indvars.iv687
  call void @libxsmm_fsspmdm_execute(ptr noundef %.0438483721753, ptr noundef %564, ptr noundef %565) #13
  %indvars.iv.next688 = add nsw i64 %indvars.iv687, %smin686
  %566 = load i32, ptr %11, align 4, !tbaa !12
  %567 = sext i32 %566 to i64
  %568 = icmp slt i64 %indvars.iv.next688, %567
  br i1 %568, label %.lr.ph573, label %._crit_edge574, !llvm.loop !37

._crit_edge574:                                   ; preds = %.lr.ph573, %.preheader492
  %569 = phi i32 [ %562, %.preheader492 ], [ %566, %.lr.ph573 ]
  %570 = add nuw nsw i32 %.2427575, 1
  %exitcond689.not = icmp eq i32 %570, %46
  br i1 %exitcond689.not, label %._crit_edge576, label %.preheader492, !llvm.loop !38

._crit_edge576:                                   ; preds = %._crit_edge574, %558
  %571 = call i64 @libxsmm_timer_tick() #13
  %572 = call double @libxsmm_timer_duration(i64 noundef %559, i64 noundef %571) #13
  %573 = load i32, ptr %10, align 4, !tbaa !12
  %574 = load i32, ptr %11, align 4, !tbaa !12
  %575 = load i32, ptr %12, align 4, !tbaa !12
  %576 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, i32 noundef %573, i32 noundef %574, i32 noundef %575)
  %577 = sitofp i32 %46 to double
  %578 = fdiv double %572, %577
  %579 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, double noundef %578)
  %580 = load i32, ptr %7, align 4, !tbaa !12
  %581 = uitofp i32 %580 to double
  %582 = fmul double %581, 2.000000e+00
  %583 = load i32, ptr %11, align 4, !tbaa !12
  %584 = sitofp i32 %583 to double
  %585 = fmul double %582, %584
  %586 = fmul double %585, %577
  %587 = fmul double %586, 1.000000e-09
  %588 = fdiv double %587, %572
  %589 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %588)
  %590 = load i32, ptr %10, align 4, !tbaa !12
  %591 = sitofp i32 %590 to double
  %592 = fmul double %591, 2.000000e+00
  %593 = load i32, ptr %11, align 4, !tbaa !12
  %594 = sitofp i32 %593 to double
  %595 = fmul double %592, %594
  %596 = load i32, ptr %12, align 4, !tbaa !12
  %597 = sitofp i32 %596 to double
  %598 = fmul double %595, %597
  %599 = fmul double %598, %577
  %600 = fmul double %599, 1.000000e-09
  %601 = fdiv double %600, %572
  %602 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, double noundef %601)
  %603 = load i32, ptr %10, align 4, !tbaa !12
  %604 = sitofp i32 %603 to double
  %605 = load i32, ptr %11, align 4, !tbaa !12
  %606 = sitofp i32 %605 to double
  %607 = load i32, ptr %12, align 4, !tbaa !12
  %608 = sitofp i32 %607 to double
  %609 = fmul double %606, %608
  %610 = call double @llvm.fmuladd.f64(double %604, double %606, double %609)
  %611 = fmul double %610, 8.000000e+00
  %612 = fmul double %611, %577
  %613 = fmul double %612, 1.000000e-09
  %614 = fdiv double %613, %572
  %615 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %614)
  %616 = call i64 @libxsmm_timer_tick() #13
  store double 0.000000e+00, ptr %14, align 8, !tbaa !10
  br i1 %560, label %.lr.ph579, label %._crit_edge580

.lr.ph579:                                        ; preds = %._crit_edge576, %.lr.ph579
  %.3428577 = phi i32 [ %618, %.lr.ph579 ], [ 0, %._crit_edge576 ]
  %617 = call ptr @libxsmm_original_dgemm() #13
  call void %617(ptr noundef nonnull %15, ptr noundef nonnull %15, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef %76, ptr noundef nonnull %11, ptr noundef %69, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef %.0411485718755, ptr noundef nonnull %11) #13
  %618 = add nuw nsw i32 %.3428577, 1
  %exitcond690.not = icmp eq i32 %618, %46
  br i1 %exitcond690.not, label %._crit_edge580, label %.lr.ph579, !llvm.loop !39

._crit_edge580:                                   ; preds = %.lr.ph579, %._crit_edge576
  %619 = call i64 @libxsmm_timer_tick() #13
  %620 = call double @libxsmm_timer_duration(i64 noundef %616, i64 noundef %619) #13
  %621 = fdiv double %620, %577
  %622 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, double noundef %621)
  %623 = load i32, ptr %10, align 4, !tbaa !12
  %624 = sitofp i32 %623 to double
  %625 = fmul double %624, 2.000000e+00
  %626 = load i32, ptr %11, align 4, !tbaa !12
  %627 = sitofp i32 %626 to double
  %628 = fmul double %625, %627
  %629 = load i32, ptr %12, align 4, !tbaa !12
  %630 = sitofp i32 %629 to double
  %631 = fmul double %628, %630
  %632 = fmul double %631, %577
  %633 = fmul double %632, 1.000000e-09
  %634 = fdiv double %633, %620
  %635 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, double noundef %634)
  %636 = load i32, ptr %10, align 4, !tbaa !12
  %637 = sitofp i32 %636 to double
  %638 = fmul double %637, 2.000000e+00
  %639 = load i32, ptr %11, align 4, !tbaa !12
  %640 = sitofp i32 %639 to double
  %641 = load i32, ptr %12, align 4, !tbaa !12
  %642 = sitofp i32 %641 to double
  %643 = fmul double %640, %642
  %644 = call double @llvm.fmuladd.f64(double %638, double %640, double %643)
  %645 = fmul double %644, 8.000000e+00
  %646 = fmul double %645, %577
  %647 = fmul double %646, 1.000000e-09
  %648 = fdiv double %647, %620
  %649 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, double noundef %648)
  br label %650

650:                                              ; preds = %._crit_edge580, %557
  br i1 %or.cond5.not491711761, label %744, label %651

651:                                              ; preds = %650
  %652 = call i64 @libxsmm_timer_tick() #13
  %653 = icmp sgt i32 %46, 0
  br i1 %653, label %.preheader.preheader, label %._crit_edge585

.preheader.preheader:                             ; preds = %651
  %654 = call i32 @llvm.smin.i32(i32 %43, i32 %24)
  %smin691 = sext i32 %654 to i64
  %.pre700 = load i32, ptr %11, align 4, !tbaa !12
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge583
  %655 = phi i32 [ %662, %._crit_edge583 ], [ %.pre700, %.preheader.preheader ]
  %.4429584 = phi i32 [ %663, %._crit_edge583 ], [ 0, %.preheader.preheader ]
  %656 = icmp sgt i32 %655, 0
  br i1 %656, label %.lr.ph582, label %._crit_edge583

.lr.ph582:                                        ; preds = %.preheader, %.lr.ph582
  %indvars.iv692 = phi i64 [ %indvars.iv.next693, %.lr.ph582 ], [ 0, %.preheader ]
  %657 = getelementptr inbounds double, ptr %76, i64 %indvars.iv692
  %658 = getelementptr inbounds double, ptr %.0412732745, i64 %indvars.iv692
  call void @libxsmm_fsspmdm_execute(ptr noundef %.0439724751, ptr noundef %657, ptr noundef %658) #13
  %indvars.iv.next693 = add nsw i64 %indvars.iv692, %smin691
  %659 = load i32, ptr %11, align 4, !tbaa !12
  %660 = sext i32 %659 to i64
  %661 = icmp slt i64 %indvars.iv.next693, %660
  br i1 %661, label %.lr.ph582, label %._crit_edge583, !llvm.loop !40

._crit_edge583:                                   ; preds = %.lr.ph582, %.preheader
  %662 = phi i32 [ %655, %.preheader ], [ %659, %.lr.ph582 ]
  %663 = add nuw nsw i32 %.4429584, 1
  %exitcond694.not = icmp eq i32 %663, %46
  br i1 %exitcond694.not, label %._crit_edge585, label %.preheader, !llvm.loop !41

._crit_edge585:                                   ; preds = %._crit_edge583, %651
  %664 = call i64 @libxsmm_timer_tick() #13
  %665 = call double @libxsmm_timer_duration(i64 noundef %652, i64 noundef %664) #13
  %666 = load i32, ptr %10, align 4, !tbaa !12
  %667 = load i32, ptr %11, align 4, !tbaa !12
  %668 = load i32, ptr %12, align 4, !tbaa !12
  %669 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef %666, i32 noundef %667, i32 noundef %668)
  %670 = sitofp i32 %46 to double
  %671 = fdiv double %665, %670
  %672 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, double noundef %671)
  %673 = load i32, ptr %7, align 4, !tbaa !12
  %674 = uitofp i32 %673 to double
  %675 = fmul double %674, 2.000000e+00
  %676 = load i32, ptr %11, align 4, !tbaa !12
  %677 = sitofp i32 %676 to double
  %678 = fmul double %675, %677
  %679 = fmul double %678, %670
  %680 = fmul double %679, 1.000000e-09
  %681 = fdiv double %680, %665
  %682 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %681)
  %683 = load i32, ptr %10, align 4, !tbaa !12
  %684 = sitofp i32 %683 to double
  %685 = fmul double %684, 2.000000e+00
  %686 = load i32, ptr %11, align 4, !tbaa !12
  %687 = sitofp i32 %686 to double
  %688 = fmul double %685, %687
  %689 = load i32, ptr %12, align 4, !tbaa !12
  %690 = sitofp i32 %689 to double
  %691 = fmul double %688, %690
  %692 = fmul double %691, %670
  %693 = fmul double %692, 1.000000e-09
  %694 = fdiv double %693, %665
  %695 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, double noundef %694)
  %696 = load i32, ptr %10, align 4, !tbaa !12
  %697 = sitofp i32 %696 to double
  %698 = fmul double %697, 2.000000e+00
  %699 = load i32, ptr %11, align 4, !tbaa !12
  %700 = sitofp i32 %699 to double
  %701 = load i32, ptr %12, align 4, !tbaa !12
  %702 = sitofp i32 %701 to double
  %703 = fmul double %700, %702
  %704 = call double @llvm.fmuladd.f64(double %698, double %700, double %703)
  %705 = fmul double %704, 8.000000e+00
  %706 = fmul double %705, %670
  %707 = fmul double %706, 1.000000e-09
  %708 = fdiv double %707, %665
  %709 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %708)
  %710 = call i64 @libxsmm_timer_tick() #13
  store double 1.000000e+00, ptr %14, align 8, !tbaa !10
  br i1 %653, label %.lr.ph588, label %._crit_edge589

.lr.ph588:                                        ; preds = %._crit_edge585, %.lr.ph588
  %.5430586 = phi i32 [ %712, %.lr.ph588 ], [ 0, %._crit_edge585 ]
  %711 = call ptr @libxsmm_original_dgemm() #13
  call void %711(ptr noundef nonnull %15, ptr noundef nonnull %15, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef %76, ptr noundef nonnull %11, ptr noundef %69, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef %.0419727749, ptr noundef nonnull %11) #13
  %712 = add nuw nsw i32 %.5430586, 1
  %exitcond695.not = icmp eq i32 %712, %46
  br i1 %exitcond695.not, label %._crit_edge589, label %.lr.ph588, !llvm.loop !42

._crit_edge589:                                   ; preds = %.lr.ph588, %._crit_edge585
  %713 = call i64 @libxsmm_timer_tick() #13
  %714 = call double @libxsmm_timer_duration(i64 noundef %710, i64 noundef %713) #13
  %715 = fdiv double %714, %670
  %716 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, double noundef %715)
  %717 = load i32, ptr %10, align 4, !tbaa !12
  %718 = sitofp i32 %717 to double
  %719 = fmul double %718, 2.000000e+00
  %720 = load i32, ptr %11, align 4, !tbaa !12
  %721 = sitofp i32 %720 to double
  %722 = fmul double %719, %721
  %723 = load i32, ptr %12, align 4, !tbaa !12
  %724 = sitofp i32 %723 to double
  %725 = fmul double %722, %724
  %726 = fmul double %725, %670
  %727 = fmul double %726, 1.000000e-09
  %728 = fdiv double %727, %714
  %729 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, double noundef %728)
  %730 = load i32, ptr %10, align 4, !tbaa !12
  %731 = sitofp i32 %730 to double
  %732 = fmul double %731, 2.000000e+00
  %733 = load i32, ptr %11, align 4, !tbaa !12
  %734 = sitofp i32 %733 to double
  %735 = load i32, ptr %12, align 4, !tbaa !12
  %736 = sitofp i32 %735 to double
  %737 = fmul double %734, %736
  %738 = call double @llvm.fmuladd.f64(double %732, double %734, double %737)
  %739 = fmul double %738, 8.000000e+00
  %740 = fmul double %739, %670
  %741 = fmul double %740, 1.000000e-09
  %742 = fdiv double %741, %714
  %743 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, double noundef %742)
  br label %744

744:                                              ; preds = %650, %._crit_edge589
  call void @libxsmm_fsspmdm_destroy(ptr noundef %.0438483721753) #13
  call void @libxsmm_fsspmdm_destroy(ptr noundef %.0439724751) #13
  call void @libxsmm_free(ptr noundef %.0411485718755) #13
  call void @libxsmm_free(ptr noundef %.0410487716757) #13
  call void @libxsmm_free(ptr noundef %.0409489713759) #13
  call void @libxsmm_free(ptr noundef %.0419727749) #13
  call void @libxsmm_free(ptr noundef %.0413730747) #13
  call void @libxsmm_free(ptr noundef %.0412732745) #13
  call void @libxsmm_free(ptr noundef %69) #13
  call void @libxsmm_free(ptr noundef %76) #13
  %745 = load ptr, ptr %3, align 8, !tbaa !5
  call void @free(ptr noundef %745) #13
  %746 = load ptr, ptr %4, align 8, !tbaa !5
  call void @free(ptr noundef %746) #13
  %747 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free(ptr noundef %747) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #13
  call void @llvm.lifetime.end.p0(i64 192, ptr nonnull %9) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #13
  ret i32 %.3
}

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

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @my_csr_reader(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #4

declare noalias ptr @libxsmm_aligned_malloc(i64 noundef, i64 noundef) local_unnamed_addr #7

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

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

declare i64 @libxsmm_coprime2(i64 noundef) local_unnamed_addr #7

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

declare ptr @libxsmm_fsspmdm_create(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

declare i64 @libxsmm_timer_tick() #7

declare void @libxsmm_fsspmdm_execute(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

declare ptr @libxsmm_original_dgemm() local_unnamed_addr #7

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

declare double @libxsmm_matdiff_epsilon(ptr noundef) local_unnamed_addr #7

declare double @libxsmm_timer_duration(i64 noundef, i64 noundef) local_unnamed_addr #7

declare void @libxsmm_fsspmdm_destroy(ptr noundef) local_unnamed_addr #7

declare void @libxsmm_free(ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #9

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

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

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

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 = { nofree nounwind memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #4 = { nofree 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 #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 = { inlinehint 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 #7 = { "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 #8 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 #10 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #12 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #13 = { nounwind }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { cold nounwind }
attributes #16 = { noreturn nounwind }

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

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


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