; LLVM IR from EntityFX/anybench :: src/benchmarks/generic/linpack (linpack)

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

@runSecs = external dso_local global double, align 8
@main.aa = external hidden global [40000 x double], align 16
@main.a = external hidden global [40200 x double], align 16
@main.b = external hidden global [200 x double], align 16
@main.x = external hidden global [200 x double], align 16
@main.ipvt = external hidden global [200 x i32], align 16
@main.n = external hidden global i32, align 4
@main.i = external hidden global i32, align 4
@main.j = external hidden global i32, align 4
@main.ntimes = external hidden global i32, align 4
@main.info = external hidden global i32, align 4
@main.lda = external hidden global i32, align 4
@main.ldaa = external hidden global i32, align 4
@.str = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@stdout = external global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@secs = external global double, align 8
@atime = external hidden global [9 x [15 x double]], align 16
@.str.12 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [17 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 double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca [5 x [20 x i8]], align 16
  %28 = alloca [5 x [20 x i8]], align 16
  %29 = alloca [5 x [20 x i8]], align 16
  %30 = alloca i32, align 4
  %31 = 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 8, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 100, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 100, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 100, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 1, ptr %31, align 4, !tbaa !5
  %32 = getelementptr inbounds [5 x [20 x i8]], ptr %28, i64 0, i64 0
  %33 = getelementptr inbounds [20 x i8], ptr %32, i64 0, i64 0
  %34 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %33, ptr noundef @.str) #5
  %35 = getelementptr inbounds [5 x [20 x i8]], ptr %28, i64 0, i64 1
  %36 = getelementptr inbounds [20 x i8], ptr %35, i64 0, i64 0
  %37 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %36, ptr noundef @.str.1) #5
  %38 = getelementptr inbounds [5 x [20 x i8]], ptr %28, i64 0, i64 2
  %39 = getelementptr inbounds [20 x i8], ptr %38, i64 0, i64 0
  %40 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %39, ptr noundef @.str.2) #5
  %41 = getelementptr inbounds [5 x [20 x i8]], ptr %28, i64 0, i64 3
  %42 = getelementptr inbounds [20 x i8], ptr %41, i64 0, i64 0
  %43 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %42, ptr noundef @.str.3) #5
  %44 = getelementptr inbounds [5 x [20 x i8]], ptr %28, i64 0, i64 4
  %45 = getelementptr inbounds [20 x i8], ptr %44, i64 0, i64 0
  %46 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %45, ptr noundef @.str.4) #5
  store i32 201, ptr @main.lda, align 4, !tbaa !5
  store i32 200, ptr @main.ldaa, align 4, !tbaa !5
  store double 5.600000e-02, ptr %6, align 8, !tbaa !11
  store i32 100, ptr @main.n, align 4, !tbaa !5
  %47 = load ptr, ptr @stdout, align 8, !tbaa !9
  %48 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %47, ptr noundef @.str.5) #5
  %49 = load ptr, ptr @stdout, align 8, !tbaa !9
  %50 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %49, ptr noundef @.str.6, ptr noundef @.str.7) #5
  %51 = load ptr, ptr @stdout, align 8, !tbaa !9
  %52 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %51, ptr noundef @.str.6, ptr noundef @.str.8) #5
  %53 = load ptr, ptr @stdout, align 8, !tbaa !9
  %54 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %53, ptr noundef @.str.9) #5
  %55 = load ptr, ptr @stdout, align 8, !tbaa !9
  %56 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %55, ptr noundef @.str.10, ptr noundef @.str.11) #5
  %57 = load i32, ptr @main.n, align 4, !tbaa !5
  %58 = load i32, ptr @main.n, align 4, !tbaa !5
  %59 = mul nsw i32 %57, %58
  %60 = load i32, ptr @main.n, align 4, !tbaa !5
  %61 = mul nsw i32 %59, %60
  %62 = sitofp i32 %61 to double
  %63 = fmul double 2.000000e+00, %62
  %64 = fdiv double %63, 3.000000e+00
  %65 = load i32, ptr @main.n, align 4, !tbaa !5
  %66 = load i32, ptr @main.n, align 4, !tbaa !5
  %67 = mul nsw i32 %65, %66
  %68 = sitofp i32 %67 to double
  %69 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %68, double %64)
  store double %69, ptr %7, align 8, !tbaa !11
  %70 = load i32, ptr @main.lda, align 4, !tbaa !5
  %71 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef @main.a, i32 noundef %70, i32 noundef %71, ptr noundef @main.b, ptr noundef %9)
  call void (...) @start_time()
  %72 = load i32, ptr @main.lda, align 4, !tbaa !5
  %73 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef @main.a, i32 noundef %72, i32 noundef %73, ptr noundef @main.ipvt, ptr noundef @main.info)
  call void (...) @end_time()
  %74 = load double, ptr @secs, align 8, !tbaa !11
  store double %74, ptr @atime, align 16, !tbaa !11
  call void (...) @start_time()
  %75 = load i32, ptr @main.lda, align 4, !tbaa !5
  %76 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgesl(ptr noundef @main.a, i32 noundef %75, i32 noundef %76, ptr noundef @main.ipvt, ptr noundef @main.b, i32 noundef 0)
  call void (...) @end_time()
  %77 = load double, ptr @secs, align 8, !tbaa !11
  store double %77, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 1), align 8, !tbaa !11
  %78 = load double, ptr @atime, align 16, !tbaa !11
  %79 = load double, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 1), align 8, !tbaa !11
  %80 = fadd double %78, %79
  store double %80, ptr %8, align 8, !tbaa !11
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %81

81:                                               ; preds = %93, %2
  %82 = load i32, ptr @main.i, align 4, !tbaa !5
  %83 = load i32, ptr @main.n, align 4, !tbaa !5
  %84 = icmp slt i32 %82, %83
  br i1 %84, label %85, label %96

85:                                               ; preds = %81
  %86 = load i32, ptr @main.i, align 4, !tbaa !5
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %87
  %89 = load double, ptr %88, align 8, !tbaa !11
  %90 = load i32, ptr @main.i, align 4, !tbaa !5
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %91
  store double %89, ptr %92, align 8, !tbaa !11
  br label %93

93:                                               ; preds = %85
  %94 = load i32, ptr @main.i, align 4, !tbaa !5
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr @main.i, align 4, !tbaa !5
  br label %81, !llvm.loop !13

96:                                               ; preds = %81
  %97 = load i32, ptr @main.lda, align 4, !tbaa !5
  %98 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef @main.a, i32 noundef %97, i32 noundef %98, ptr noundef @main.b, ptr noundef %9)
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %99

99:                                               ; preds = %112, %96
  %100 = load i32, ptr @main.i, align 4, !tbaa !5
  %101 = load i32, ptr @main.n, align 4, !tbaa !5
  %102 = icmp slt i32 %100, %101
  br i1 %102, label %103, label %115

103:                                              ; preds = %99
  %104 = load i32, ptr @main.i, align 4, !tbaa !5
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %105
  %107 = load double, ptr %106, align 8, !tbaa !11
  %108 = fneg double %107
  %109 = load i32, ptr @main.i, align 4, !tbaa !5
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %110
  store double %108, ptr %111, align 8, !tbaa !11
  br label %112

112:                                              ; preds = %103
  %113 = load i32, ptr @main.i, align 4, !tbaa !5
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr @main.i, align 4, !tbaa !5
  br label %99, !llvm.loop !15

115:                                              ; preds = %99
  %116 = load i32, ptr @main.n, align 4, !tbaa !5
  %117 = load i32, ptr @main.n, align 4, !tbaa !5
  %118 = load i32, ptr @main.lda, align 4, !tbaa !5
  call void @dmxpy(i32 noundef %116, ptr noundef @main.b, i32 noundef %117, i32 noundef %118, ptr noundef @main.x, ptr noundef @main.a)
  store double 0.000000e+00, ptr %11, align 8, !tbaa !11
  store double 0.000000e+00, ptr %10, align 8, !tbaa !11
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %119

119:                                              ; preds = %158, %115
  %120 = load i32, ptr @main.i, align 4, !tbaa !5
  %121 = load i32, ptr @main.n, align 4, !tbaa !5
  %122 = icmp slt i32 %120, %121
  br i1 %122, label %123, label %161

123:                                              ; preds = %119
  %124 = load double, ptr %11, align 8, !tbaa !11
  %125 = load i32, ptr @main.i, align 4, !tbaa !5
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %126
  %128 = load double, ptr %127, align 8, !tbaa !11
  %129 = call double @llvm.fabs.f64(double %128)
  %130 = fcmp ogt double %124, %129
  br i1 %130, label %131, label %133

131:                                              ; preds = %123
  %132 = load double, ptr %11, align 8, !tbaa !11
  br label %139

133:                                              ; preds = %123
  %134 = load i32, ptr @main.i, align 4, !tbaa !5
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %135
  %137 = load double, ptr %136, align 8, !tbaa !11
  %138 = call double @llvm.fabs.f64(double %137)
  br label %139

139:                                              ; preds = %133, %131
  %140 = phi double [ %132, %131 ], [ %138, %133 ]
  store double %140, ptr %11, align 8, !tbaa !11
  %141 = load double, ptr %10, align 8, !tbaa !11
  %142 = load i32, ptr @main.i, align 4, !tbaa !5
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %143
  %145 = load double, ptr %144, align 8, !tbaa !11
  %146 = call double @llvm.fabs.f64(double %145)
  %147 = fcmp ogt double %141, %146
  br i1 %147, label %148, label %150

148:                                              ; preds = %139
  %149 = load double, ptr %10, align 8, !tbaa !11
  br label %156

150:                                              ; preds = %139
  %151 = load i32, ptr @main.i, align 4, !tbaa !5
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !11
  %155 = call double @llvm.fabs.f64(double %154)
  br label %156

156:                                              ; preds = %150, %148
  %157 = phi double [ %149, %148 ], [ %155, %150 ]
  store double %157, ptr %10, align 8, !tbaa !11
  br label %158

158:                                              ; preds = %156
  %159 = load i32, ptr @main.i, align 4, !tbaa !5
  %160 = add nsw i32 %159, 1
  store i32 %160, ptr @main.i, align 4, !tbaa !5
  br label %119, !llvm.loop !16

161:                                              ; preds = %119
  %162 = call double @epslon(double noundef 1.000000e+00)
  store double %162, ptr %13, align 8, !tbaa !11
  %163 = load double, ptr %11, align 8, !tbaa !11
  %164 = load i32, ptr @main.n, align 4, !tbaa !5
  %165 = sitofp i32 %164 to double
  %166 = load double, ptr %9, align 8, !tbaa !11
  %167 = fmul double %165, %166
  %168 = load double, ptr %10, align 8, !tbaa !11
  %169 = fmul double %167, %168
  %170 = load double, ptr %13, align 8, !tbaa !11
  %171 = fmul double %169, %170
  %172 = fdiv double %163, %171
  store double %172, ptr %12, align 8, !tbaa !11
  %173 = load double, ptr %13, align 8, !tbaa !11
  store double %173, ptr %15, align 8, !tbaa !11
  %174 = load double, ptr @main.x, align 16, !tbaa !11
  %175 = fsub double %174, 1.000000e+00
  store double %175, ptr %16, align 8, !tbaa !11
  %176 = load i32, ptr @main.n, align 4, !tbaa !5
  %177 = sub nsw i32 %176, 1
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %178
  %180 = load double, ptr %179, align 8, !tbaa !11
  %181 = fsub double %180, 1.000000e+00
  store double %181, ptr %17, align 8, !tbaa !11
  %182 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  %183 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  %184 = load double, ptr %12, align 8, !tbaa !11
  %185 = load double, ptr %11, align 8, !tbaa !11
  %186 = load double, ptr %15, align 8, !tbaa !11
  %187 = load double, ptr %16, align 8, !tbaa !11
  %188 = load double, ptr %17, align 8, !tbaa !11
  %189 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %184, double noundef %185, double noundef %186, double noundef %187, double noundef %188)
  %190 = load ptr, ptr @stdout, align 8, !tbaa !9
  %191 = load i32, ptr @main.n, align 4, !tbaa !5
  %192 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %190, ptr noundef @.str.15, i32 noundef %191) #5
  %193 = load ptr, ptr @stdout, align 8, !tbaa !9
  %194 = load i32, ptr @main.lda, align 4, !tbaa !5
  %195 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef @.str.16, i32 noundef %194) #5
  %196 = load ptr, ptr @stdout, align 8, !tbaa !9
  %197 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef @.str.17) #5
  %198 = load ptr, ptr @stdout, align 8, !tbaa !9
  %199 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %198, ptr noundef @.str.18) #5
  %200 = load double, ptr %8, align 8, !tbaa !11
  store double %200, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 2), align 16, !tbaa !11
  %201 = load double, ptr %8, align 8, !tbaa !11
  %202 = fcmp ogt double %201, 0.000000e+00
  br i1 %202, label %203, label %210

203:                                              ; preds = %161
  %204 = load double, ptr %7, align 8, !tbaa !11
  %205 = load double, ptr %8, align 8, !tbaa !11
  %206 = fmul double 1.000000e+06, %205
  %207 = fdiv double %204, %206
  store double %207, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), align 8, !tbaa !11
  %208 = load double, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), align 8, !tbaa !11
  %209 = fdiv double 2.000000e+00, %208
  store double %209, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 4), align 16, !tbaa !11
  br label %211

210:                                              ; preds = %161
  store double 0.000000e+00, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), align 8, !tbaa !11
  store double 0.000000e+00, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 4), align 16, !tbaa !11
  br label %211

211:                                              ; preds = %210, %203
  %212 = load double, ptr %8, align 8, !tbaa !11
  %213 = load double, ptr %6, align 8, !tbaa !11
  %214 = fdiv double %212, %213
  store double %214, ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 5), align 8, !tbaa !11
  call void @print_time(i32 noundef 0)
  %215 = load ptr, ptr @stdout, align 8, !tbaa !9
  %216 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %215, ptr noundef @.str.19) #5
  store i32 -20, ptr %20, align 4, !tbaa !5
  store i32 10, ptr %21, align 4, !tbaa !5
  br label %217

217:                                              ; preds = %254, %211
  call void (...) @start_time()
  %218 = load i32, ptr %20, align 4, !tbaa !5
  %219 = add nsw i32 %218, 1
  store i32 %219, ptr %20, align 4, !tbaa !5
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %220

220:                                              ; preds = %227, %217
  %221 = load i32, ptr @main.i, align 4, !tbaa !5
  %222 = load i32, ptr %21, align 4, !tbaa !5
  %223 = icmp slt i32 %221, %222
  br i1 %223, label %224, label %230

224:                                              ; preds = %220
  %225 = load i32, ptr @main.lda, align 4, !tbaa !5
  %226 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef @main.a, i32 noundef %225, i32 noundef %226, ptr noundef @main.b, ptr noundef %9)
  br label %227

227:                                              ; preds = %224
  %228 = load i32, ptr @main.i, align 4, !tbaa !5
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr @main.i, align 4, !tbaa !5
  br label %220, !llvm.loop !17

230:                                              ; preds = %220
  call void (...) @end_time()
  %231 = load double, ptr @secs, align 8, !tbaa !11
  store double %231, ptr %22, align 8, !tbaa !11
  %232 = load ptr, ptr @stdout, align 8, !tbaa !9
  %233 = load i32, ptr %21, align 4, !tbaa !5
  %234 = load double, ptr %22, align 8, !tbaa !11
  %235 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %232, ptr noundef @.str.20, i32 noundef %233, double noundef %234) #5
  %236 = load double, ptr %22, align 8, !tbaa !11
  %237 = load double, ptr @runSecs, align 8, !tbaa !11
  %238 = fcmp ogt double %236, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %230
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %240

240:                                              ; preds = %239, %230
  %241 = load i32, ptr %20, align 4, !tbaa !5
  %242 = icmp slt i32 %241, 0
  br i1 %242, label %243, label %253

243:                                              ; preds = %240
  %244 = load double, ptr %22, align 8, !tbaa !11
  %245 = fcmp olt double %244, 1.000000e-01
  br i1 %245, label %246, label %249

246:                                              ; preds = %243
  %247 = load i32, ptr %21, align 4, !tbaa !5
  %248 = mul nsw i32 %247, 10
  store i32 %248, ptr %21, align 4, !tbaa !5
  br label %252

249:                                              ; preds = %243
  %250 = load i32, ptr %21, align 4, !tbaa !5
  %251 = mul nsw i32 %250, 2
  store i32 %251, ptr %21, align 4, !tbaa !5
  br label %252

252:                                              ; preds = %249, %246
  br label %253

253:                                              ; preds = %252, %240
  br label %254

254:                                              ; preds = %253
  %255 = load i32, ptr %20, align 4, !tbaa !5
  %256 = icmp slt i32 %255, 0
  br i1 %256, label %217, label %257, !llvm.loop !18

257:                                              ; preds = %254
  %258 = load double, ptr %22, align 8, !tbaa !11
  %259 = load i32, ptr %21, align 4, !tbaa !5
  %260 = sitofp i32 %259 to double
  %261 = fdiv double %258, %260
  store double %261, ptr %22, align 8, !tbaa !11
  %262 = load ptr, ptr @stdout, align 8, !tbaa !9
  %263 = load double, ptr %22, align 8, !tbaa !11
  %264 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %262, ptr noundef @.str.21, double noundef %263) #5
  %265 = load ptr, ptr @stdout, align 8, !tbaa !9
  %266 = load double, ptr @runSecs, align 8, !tbaa !11
  %267 = fptosi double %266 to i32
  %268 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %265, ptr noundef @.str.22, i32 noundef %267) #5
  store i32 -20, ptr %20, align 4, !tbaa !5
  store i32 10, ptr @main.ntimes, align 4, !tbaa !5
  br label %269

269:                                              ; preds = %308, %257
  call void (...) @start_time()
  %270 = load i32, ptr %20, align 4, !tbaa !5
  %271 = add nsw i32 %270, 1
  store i32 %271, ptr %20, align 4, !tbaa !5
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %281, %269
  %273 = load i32, ptr @main.i, align 4, !tbaa !5
  %274 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %275 = icmp slt i32 %273, %274
  br i1 %275, label %276, label %284

276:                                              ; preds = %272
  %277 = load i32, ptr @main.lda, align 4, !tbaa !5
  %278 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef @main.a, i32 noundef %277, i32 noundef %278, ptr noundef @main.b, ptr noundef %9)
  %279 = load i32, ptr @main.lda, align 4, !tbaa !5
  %280 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef @main.a, i32 noundef %279, i32 noundef %280, ptr noundef @main.ipvt, ptr noundef @main.info)
  br label %281

281:                                              ; preds = %276
  %282 = load i32, ptr @main.i, align 4, !tbaa !5
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr @main.i, align 4, !tbaa !5
  br label %272, !llvm.loop !19

284:                                              ; preds = %272
  call void (...) @end_time()
  %285 = load double, ptr @secs, align 8, !tbaa !11
  store double %285, ptr %24, align 8, !tbaa !11
  %286 = load ptr, ptr @stdout, align 8, !tbaa !9
  %287 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %288 = load double, ptr %24, align 8, !tbaa !11
  %289 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %286, ptr noundef @.str.20, i32 noundef %287, double noundef %288) #5
  %290 = load double, ptr %24, align 8, !tbaa !11
  %291 = load double, ptr @runSecs, align 8, !tbaa !11
  %292 = fcmp ogt double %290, %291
  br i1 %292, label %293, label %294

293:                                              ; preds = %284
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %294

294:                                              ; preds = %293, %284
  %295 = load i32, ptr %20, align 4, !tbaa !5
  %296 = icmp slt i32 %295, 0
  br i1 %296, label %297, label %307

297:                                              ; preds = %294
  %298 = load double, ptr %24, align 8, !tbaa !11
  %299 = fcmp olt double %298, 1.000000e-01
  br i1 %299, label %300, label %303

300:                                              ; preds = %297
  %301 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %302 = mul nsw i32 %301, 10
  store i32 %302, ptr @main.ntimes, align 4, !tbaa !5
  br label %306

303:                                              ; preds = %297
  %304 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %305 = mul nsw i32 %304, 2
  store i32 %305, ptr @main.ntimes, align 4, !tbaa !5
  br label %306

306:                                              ; preds = %303, %300
  br label %307

307:                                              ; preds = %306, %294
  br label %308

308:                                              ; preds = %307
  %309 = load i32, ptr %20, align 4, !tbaa !5
  %310 = icmp slt i32 %309, 0
  br i1 %310, label %269, label %311, !llvm.loop !20

311:                                              ; preds = %308
  %312 = load double, ptr @runSecs, align 8, !tbaa !11
  %313 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %314 = sitofp i32 %313 to double
  %315 = fmul double %312, %314
  %316 = load double, ptr %24, align 8, !tbaa !11
  %317 = fdiv double %315, %316
  %318 = fptosi double %317 to i32
  store i32 %318, ptr @main.ntimes, align 4, !tbaa !5
  %319 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %320 = icmp eq i32 %319, 0
  br i1 %320, label %321, label %322

321:                                              ; preds = %311
  store i32 1, ptr @main.ntimes, align 4, !tbaa !5
  br label %322

322:                                              ; preds = %321, %311
  %323 = load ptr, ptr @stdout, align 8, !tbaa !9
  %324 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %325 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %323, ptr noundef @.str.23, i32 noundef %324) #5
  %326 = load ptr, ptr @stdout, align 8, !tbaa !9
  %327 = load i32, ptr @main.lda, align 4, !tbaa !5
  %328 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %326, ptr noundef @.str.24, i32 noundef %327) #5
  %329 = load ptr, ptr @stdout, align 8, !tbaa !9
  %330 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %329, ptr noundef @.str.17) #5
  %331 = load ptr, ptr @stdout, align 8, !tbaa !9
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef @.str.18) #5
  %333 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %334 = sitofp i32 %333 to double
  %335 = load double, ptr %22, align 8, !tbaa !11
  %336 = fmul double %334, %335
  store double %336, ptr %14, align 8, !tbaa !11
  store double 0.000000e+00, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 6), align 8, !tbaa !11
  store i32 1, ptr @main.j, align 4, !tbaa !5
  br label %337

337:                                              ; preds = %422, %322
  %338 = load i32, ptr @main.j, align 4, !tbaa !5
  %339 = icmp slt i32 %338, 6
  br i1 %339, label %340, label %425

340:                                              ; preds = %337
  call void (...) @start_time()
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %341

341:                                              ; preds = %350, %340
  %342 = load i32, ptr @main.i, align 4, !tbaa !5
  %343 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %344 = icmp slt i32 %342, %343
  br i1 %344, label %345, label %353

345:                                              ; preds = %341
  %346 = load i32, ptr @main.lda, align 4, !tbaa !5
  %347 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef @main.a, i32 noundef %346, i32 noundef %347, ptr noundef @main.b, ptr noundef %9)
  %348 = load i32, ptr @main.lda, align 4, !tbaa !5
  %349 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef @main.a, i32 noundef %348, i32 noundef %349, ptr noundef @main.ipvt, ptr noundef @main.info)
  br label %350

350:                                              ; preds = %345
  %351 = load i32, ptr @main.i, align 4, !tbaa !5
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr @main.i, align 4, !tbaa !5
  br label %341, !llvm.loop !21

353:                                              ; preds = %341
  call void (...) @end_time()
  %354 = load double, ptr @secs, align 8, !tbaa !11
  %355 = load double, ptr %14, align 8, !tbaa !11
  %356 = fsub double %354, %355
  %357 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %358 = sitofp i32 %357 to double
  %359 = fdiv double %356, %358
  %360 = load i32, ptr @main.j, align 4, !tbaa !5
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %361
  store double %359, ptr %362, align 8, !tbaa !11
  call void (...) @start_time()
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %363

363:                                              ; preds = %370, %353
  %364 = load i32, ptr @main.i, align 4, !tbaa !5
  %365 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %366 = icmp slt i32 %364, %365
  br i1 %366, label %367, label %373

367:                                              ; preds = %363
  %368 = load i32, ptr @main.lda, align 4, !tbaa !5
  %369 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgesl(ptr noundef @main.a, i32 noundef %368, i32 noundef %369, ptr noundef @main.ipvt, ptr noundef @main.b, i32 noundef 0)
  br label %370

370:                                              ; preds = %367
  %371 = load i32, ptr @main.i, align 4, !tbaa !5
  %372 = add nsw i32 %371, 1
  store i32 %372, ptr @main.i, align 4, !tbaa !5
  br label %363, !llvm.loop !22

373:                                              ; preds = %363
  call void (...) @end_time()
  %374 = load double, ptr @secs, align 8, !tbaa !11
  %375 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %376 = sitofp i32 %375 to double
  %377 = fdiv double %374, %376
  %378 = load i32, ptr @main.j, align 4, !tbaa !5
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 1), i64 0, i64 %379
  store double %377, ptr %380, align 8, !tbaa !11
  %381 = load i32, ptr @main.j, align 4, !tbaa !5
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %382
  %384 = load double, ptr %383, align 8, !tbaa !11
  %385 = load i32, ptr @main.j, align 4, !tbaa !5
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 1), i64 0, i64 %386
  %388 = load double, ptr %387, align 8, !tbaa !11
  %389 = fadd double %384, %388
  store double %389, ptr %8, align 8, !tbaa !11
  %390 = load double, ptr %8, align 8, !tbaa !11
  %391 = load i32, ptr @main.j, align 4, !tbaa !5
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 2), i64 0, i64 %392
  store double %390, ptr %393, align 8, !tbaa !11
  %394 = load double, ptr %7, align 8, !tbaa !11
  %395 = load double, ptr %8, align 8, !tbaa !11
  %396 = fmul double 1.000000e+06, %395
  %397 = fdiv double %394, %396
  %398 = load i32, ptr @main.j, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %399
  store double %397, ptr %400, align 8, !tbaa !11
  %401 = load i32, ptr @main.j, align 4, !tbaa !5
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %402
  %404 = load double, ptr %403, align 8, !tbaa !11
  %405 = fdiv double 2.000000e+00, %404
  %406 = load i32, ptr @main.j, align 4, !tbaa !5
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 4), i64 0, i64 %407
  store double %405, ptr %408, align 8, !tbaa !11
  %409 = load double, ptr %8, align 8, !tbaa !11
  %410 = load double, ptr %6, align 8, !tbaa !11
  %411 = fdiv double %409, %410
  %412 = load i32, ptr @main.j, align 4, !tbaa !5
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 5), i64 0, i64 %413
  store double %411, ptr %414, align 8, !tbaa !11
  %415 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 6), align 8, !tbaa !11
  %416 = load i32, ptr @main.j, align 4, !tbaa !5
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !11
  %420 = fadd double %415, %419
  store double %420, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 6), align 8, !tbaa !11
  %421 = load i32, ptr @main.j, align 4, !tbaa !5
  call void @print_time(i32 noundef %421)
  br label %422

422:                                              ; preds = %373
  %423 = load i32, ptr @main.j, align 4, !tbaa !5
  %424 = add nsw i32 %423, 1
  store i32 %424, ptr @main.j, align 4, !tbaa !5
  br label %337, !llvm.loop !23

425:                                              ; preds = %337
  %426 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 6), align 8, !tbaa !11
  %427 = fdiv double %426, 5.000000e+00
  store double %427, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 6), align 8, !tbaa !11
  %428 = load ptr, ptr @stdout, align 8, !tbaa !9
  %429 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 6), align 8, !tbaa !11
  %430 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %428, ptr noundef @.str.25, double noundef %429) #5
  %431 = load ptr, ptr @stdout, align 8, !tbaa !9
  %432 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %431, ptr noundef @.str.26) #5
  call void (...) @start_time()
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %433

433:                                              ; preds = %440, %425
  %434 = load i32, ptr @main.i, align 4, !tbaa !5
  %435 = load i32, ptr %21, align 4, !tbaa !5
  %436 = icmp slt i32 %434, %435
  br i1 %436, label %437, label %443

437:                                              ; preds = %433
  %438 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %439 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef @main.aa, i32 noundef %438, i32 noundef %439, ptr noundef @main.b, ptr noundef %9)
  br label %440

440:                                              ; preds = %437
  %441 = load i32, ptr @main.i, align 4, !tbaa !5
  %442 = add nsw i32 %441, 1
  store i32 %442, ptr @main.i, align 4, !tbaa !5
  br label %433, !llvm.loop !24

443:                                              ; preds = %433
  call void (...) @end_time()
  %444 = load double, ptr @secs, align 8, !tbaa !11
  store double %444, ptr %23, align 8, !tbaa !11
  %445 = load double, ptr %23, align 8, !tbaa !11
  %446 = load i32, ptr %21, align 4, !tbaa !5
  %447 = sitofp i32 %446 to double
  %448 = fdiv double %445, %447
  store double %448, ptr %23, align 8, !tbaa !11
  %449 = load ptr, ptr @stdout, align 8, !tbaa !9
  %450 = load double, ptr %23, align 8, !tbaa !11
  %451 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %449, ptr noundef @.str.21, double noundef %450) #5
  %452 = load ptr, ptr @stdout, align 8, !tbaa !9
  %453 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %454 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %452, ptr noundef @.str.24, i32 noundef %453) #5
  %455 = load ptr, ptr @stdout, align 8, !tbaa !9
  %456 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %455, ptr noundef @.str.17) #5
  %457 = load ptr, ptr @stdout, align 8, !tbaa !9
  %458 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %457, ptr noundef @.str.18) #5
  %459 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %460 = sitofp i32 %459 to double
  %461 = load double, ptr %23, align 8, !tbaa !11
  %462 = fmul double %460, %461
  store double %462, ptr %14, align 8, !tbaa !11
  store double 0.000000e+00, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  store i32 7, ptr @main.j, align 4, !tbaa !5
  br label %463

463:                                              ; preds = %548, %443
  %464 = load i32, ptr @main.j, align 4, !tbaa !5
  %465 = icmp slt i32 %464, 12
  br i1 %465, label %466, label %551

466:                                              ; preds = %463
  call void (...) @start_time()
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %467

467:                                              ; preds = %476, %466
  %468 = load i32, ptr @main.i, align 4, !tbaa !5
  %469 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %470 = icmp slt i32 %468, %469
  br i1 %470, label %471, label %479

471:                                              ; preds = %467
  %472 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %473 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef @main.aa, i32 noundef %472, i32 noundef %473, ptr noundef @main.b, ptr noundef %9)
  %474 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %475 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef @main.aa, i32 noundef %474, i32 noundef %475, ptr noundef @main.ipvt, ptr noundef @main.info)
  br label %476

476:                                              ; preds = %471
  %477 = load i32, ptr @main.i, align 4, !tbaa !5
  %478 = add nsw i32 %477, 1
  store i32 %478, ptr @main.i, align 4, !tbaa !5
  br label %467, !llvm.loop !25

479:                                              ; preds = %467
  call void (...) @end_time()
  %480 = load double, ptr @secs, align 8, !tbaa !11
  %481 = load double, ptr %14, align 8, !tbaa !11
  %482 = fsub double %480, %481
  %483 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %484 = sitofp i32 %483 to double
  %485 = fdiv double %482, %484
  %486 = load i32, ptr @main.j, align 4, !tbaa !5
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %487
  store double %485, ptr %488, align 8, !tbaa !11
  call void (...) @start_time()
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br label %489

489:                                              ; preds = %496, %479
  %490 = load i32, ptr @main.i, align 4, !tbaa !5
  %491 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %492 = icmp slt i32 %490, %491
  br i1 %492, label %493, label %499

493:                                              ; preds = %489
  %494 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %495 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgesl(ptr noundef @main.aa, i32 noundef %494, i32 noundef %495, ptr noundef @main.ipvt, ptr noundef @main.b, i32 noundef 0)
  br label %496

496:                                              ; preds = %493
  %497 = load i32, ptr @main.i, align 4, !tbaa !5
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr @main.i, align 4, !tbaa !5
  br label %489, !llvm.loop !26

499:                                              ; preds = %489
  call void (...) @end_time()
  %500 = load double, ptr @secs, align 8, !tbaa !11
  %501 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %502 = sitofp i32 %501 to double
  %503 = fdiv double %500, %502
  %504 = load i32, ptr @main.j, align 4, !tbaa !5
  %505 = sext i32 %504 to i64
  %506 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 1), i64 0, i64 %505
  store double %503, ptr %506, align 8, !tbaa !11
  %507 = load i32, ptr @main.j, align 4, !tbaa !5
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %508
  %510 = load double, ptr %509, align 8, !tbaa !11
  %511 = load i32, ptr @main.j, align 4, !tbaa !5
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 1), i64 0, i64 %512
  %514 = load double, ptr %513, align 8, !tbaa !11
  %515 = fadd double %510, %514
  store double %515, ptr %8, align 8, !tbaa !11
  %516 = load double, ptr %8, align 8, !tbaa !11
  %517 = load i32, ptr @main.j, align 4, !tbaa !5
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 2), i64 0, i64 %518
  store double %516, ptr %519, align 8, !tbaa !11
  %520 = load double, ptr %7, align 8, !tbaa !11
  %521 = load double, ptr %8, align 8, !tbaa !11
  %522 = fmul double 1.000000e+06, %521
  %523 = fdiv double %520, %522
  %524 = load i32, ptr @main.j, align 4, !tbaa !5
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %525
  store double %523, ptr %526, align 8, !tbaa !11
  %527 = load i32, ptr @main.j, align 4, !tbaa !5
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %528
  %530 = load double, ptr %529, align 8, !tbaa !11
  %531 = fdiv double 2.000000e+00, %530
  %532 = load i32, ptr @main.j, align 4, !tbaa !5
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 4), i64 0, i64 %533
  store double %531, ptr %534, align 8, !tbaa !11
  %535 = load double, ptr %8, align 8, !tbaa !11
  %536 = load double, ptr %6, align 8, !tbaa !11
  %537 = fdiv double %535, %536
  %538 = load i32, ptr @main.j, align 4, !tbaa !5
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 5), i64 0, i64 %539
  store double %537, ptr %540, align 8, !tbaa !11
  %541 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  %542 = load i32, ptr @main.j, align 4, !tbaa !5
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %543
  %545 = load double, ptr %544, align 8, !tbaa !11
  %546 = fadd double %541, %545
  store double %546, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  %547 = load i32, ptr @main.j, align 4, !tbaa !5
  call void @print_time(i32 noundef %547)
  br label %548

548:                                              ; preds = %499
  %549 = load i32, ptr @main.j, align 4, !tbaa !5
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr @main.j, align 4, !tbaa !5
  br label %463, !llvm.loop !27

551:                                              ; preds = %463
  %552 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  %553 = fdiv double %552, 5.000000e+00
  store double %553, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  %554 = load ptr, ptr @stdout, align 8, !tbaa !9
  %555 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  %556 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %554, ptr noundef @.str.27, double noundef %555) #5
  %557 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 6), align 8, !tbaa !11
  store double %557, ptr %18, align 8, !tbaa !11
  %558 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  %559 = load double, ptr %18, align 8, !tbaa !11
  %560 = fcmp olt double %558, %559
  br i1 %560, label %561, label %563

561:                                              ; preds = %551
  %562 = load double, ptr getelementptr inbounds ([15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 12), align 8, !tbaa !11
  store double %562, ptr %18, align 8, !tbaa !11
  br label %563

563:                                              ; preds = %561, %551
  %564 = load ptr, ptr @stdout, align 8, !tbaa !9
  %565 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %564, ptr noundef @.str.28) #5
  %566 = load ptr, ptr @stdout, align 8, !tbaa !9
  %567 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %566, ptr noundef @.str.6, ptr noundef @.str.7) #5
  %568 = load ptr, ptr @stdout, align 8, !tbaa !9
  %569 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %568, ptr noundef @.str.6, ptr noundef @.str.8) #5
  %570 = load ptr, ptr @stdout, align 8, !tbaa !9
  %571 = load double, ptr %18, align 8, !tbaa !11
  %572 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %570, ptr noundef @.str.29, double noundef %571) #5
  call void (...) @local_time()
  store double 0.000000e+00, ptr %25, align 8, !tbaa !11
  store i32 1, ptr @main.i, align 4, !tbaa !5
  br label %573

573:                                              ; preds = %589, %563
  %574 = load i32, ptr @main.i, align 4, !tbaa !5
  %575 = icmp slt i32 %574, 6
  br i1 %575, label %576, label %592

576:                                              ; preds = %573
  %577 = load i32, ptr @main.i, align 4, !tbaa !5
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %578
  %580 = load double, ptr %579, align 8, !tbaa !11
  %581 = load double, ptr %25, align 8, !tbaa !11
  %582 = fcmp ogt double %580, %581
  br i1 %582, label %583, label %588

583:                                              ; preds = %576
  %584 = load i32, ptr @main.i, align 4, !tbaa !5
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %585
  %587 = load double, ptr %586, align 8, !tbaa !11
  store double %587, ptr %25, align 8, !tbaa !11
  br label %588

588:                                              ; preds = %583, %576
  br label %589

589:                                              ; preds = %588
  %590 = load i32, ptr @main.i, align 4, !tbaa !5
  %591 = add nsw i32 %590, 1
  store i32 %591, ptr @main.i, align 4, !tbaa !5
  br label %573, !llvm.loop !28

592:                                              ; preds = %573
  store double 0.000000e+00, ptr %26, align 8, !tbaa !11
  store i32 7, ptr @main.i, align 4, !tbaa !5
  br label %593

593:                                              ; preds = %609, %592
  %594 = load i32, ptr @main.i, align 4, !tbaa !5
  %595 = icmp slt i32 %594, 12
  br i1 %595, label %596, label %612

596:                                              ; preds = %593
  %597 = load i32, ptr @main.i, align 4, !tbaa !5
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %598
  %600 = load double, ptr %599, align 8, !tbaa !11
  %601 = load double, ptr %26, align 8, !tbaa !11
  %602 = fcmp ogt double %600, %601
  br i1 %602, label %603, label %608

603:                                              ; preds = %596
  %604 = load i32, ptr @main.i, align 4, !tbaa !5
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds [15 x double], ptr getelementptr inbounds ([9 x [15 x double]], ptr @atime, i64 0, i64 3), i64 0, i64 %605
  %607 = load double, ptr %606, align 8, !tbaa !11
  store double %607, ptr %26, align 8, !tbaa !11
  br label %608

608:                                              ; preds = %603, %596
  br label %609

609:                                              ; preds = %608
  %610 = load i32, ptr @main.i, align 4, !tbaa !5
  %611 = add nsw i32 %610, 1
  store i32 %611, ptr @main.i, align 4, !tbaa !5
  br label %593, !llvm.loop !29

612:                                              ; preds = %593
  %613 = load double, ptr %25, align 8, !tbaa !11
  %614 = load double, ptr %26, align 8, !tbaa !11
  %615 = fcmp olt double %613, %614
  br i1 %615, label %616, label %618

616:                                              ; preds = %612
  %617 = load double, ptr %25, align 8, !tbaa !11
  store double %617, ptr %26, align 8, !tbaa !11
  br label %618

618:                                              ; preds = %616, %612
  %619 = getelementptr inbounds [5 x [20 x i8]], ptr %27, i64 0, i64 0
  %620 = getelementptr inbounds [20 x i8], ptr %619, i64 0, i64 0
  %621 = load double, ptr %12, align 8, !tbaa !11
  %622 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %620, ptr noundef @.str.30, double noundef %621) #5
  %623 = getelementptr inbounds [5 x [20 x i8]], ptr %27, i64 0, i64 1
  %624 = getelementptr inbounds [20 x i8], ptr %623, i64 0, i64 0
  %625 = load double, ptr %11, align 8, !tbaa !11
  %626 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %624, ptr noundef @.str.31, double noundef %625) #5
  %627 = getelementptr inbounds [5 x [20 x i8]], ptr %27, i64 0, i64 2
  %628 = getelementptr inbounds [20 x i8], ptr %627, i64 0, i64 0
  %629 = load double, ptr %15, align 8, !tbaa !11
  %630 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %628, ptr noundef @.str.31, double noundef %629) #5
  %631 = getelementptr inbounds [5 x [20 x i8]], ptr %27, i64 0, i64 3
  %632 = getelementptr inbounds [20 x i8], ptr %631, i64 0, i64 0
  %633 = load double, ptr %16, align 8, !tbaa !11
  %634 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %632, ptr noundef @.str.31, double noundef %633) #5
  %635 = getelementptr inbounds [5 x [20 x i8]], ptr %27, i64 0, i64 4
  %636 = getelementptr inbounds [20 x i8], ptr %635, i64 0, i64 0
  %637 = load double, ptr %17, align 8, !tbaa !11
  %638 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %636, ptr noundef @.str.31, double noundef %637) #5
  %639 = getelementptr inbounds [5 x [20 x i8]], ptr %29, i64 0, i64 0
  %640 = getelementptr inbounds [20 x i8], ptr %639, i64 0, i64 0
  %641 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %640, ptr noundef @.str.32) #5
  %642 = getelementptr inbounds [5 x [20 x i8]], ptr %29, i64 0, i64 1
  %643 = getelementptr inbounds [20 x i8], ptr %642, i64 0, i64 0
  %644 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %643, ptr noundef @.str.33) #5
  %645 = getelementptr inbounds [5 x [20 x i8]], ptr %29, i64 0, i64 2
  %646 = getelementptr inbounds [20 x i8], ptr %645, i64 0, i64 0
  %647 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %646, ptr noundef @.str.34) #5
  %648 = getelementptr inbounds [5 x [20 x i8]], ptr %29, i64 0, i64 3
  %649 = getelementptr inbounds [20 x i8], ptr %648, i64 0, i64 0
  %650 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %649, ptr noundef @.str.35) #5
  %651 = getelementptr inbounds [5 x [20 x i8]], ptr %29, i64 0, i64 4
  %652 = getelementptr inbounds [20 x i8], ptr %651, i64 0, i64 0
  %653 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %652, ptr noundef @.str.36) #5
  %654 = call i64 @strtol(ptr noundef @.str.37, ptr noundef null, i32 noundef 10) #5
  %655 = icmp eq i64 %654, 0
  br i1 %655, label %656, label %660

656:                                              ; preds = %618
  %657 = getelementptr inbounds [5 x [20 x i8]], ptr %28, i64 0, i64 2
  %658 = getelementptr inbounds [20 x i8], ptr %657, i64 0, i64 0
  %659 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %658, ptr noundef @.str.38) #5
  br label %660

660:                                              ; preds = %656, %618
  %661 = call i32 (ptr, ...) @printf(ptr noundef @.str.28)
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 100, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 100, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 100, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  %662 = load i32, ptr %3, align 4
  ret i32 %662
}

; 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 i32 @sprintf(ptr noundef, ptr noundef, ...) #2

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

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

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

declare void @start_time(...) #4

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

declare void @end_time(...) #4

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local double @epslon(double noundef) #0

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

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

declare void @local_time(...) #4

; Function Attrs: nounwind
declare i64 @strtol(ptr noundef, ptr noundef, i32 noundef) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}


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

@runSecs = external dso_local local_unnamed_addr global double, align 8
@main.aa = external hidden global [40000 x double], align 16
@main.a = external hidden global [40200 x double], align 16
@main.b = external hidden global [200 x double], align 16
@main.x = external hidden global [200 x double], align 16
@main.ipvt = external hidden global [200 x i32], align 16
@main.n = external hidden local_unnamed_addr global i32, align 4
@main.i = external hidden local_unnamed_addr global i32, align 4
@main.j = external hidden local_unnamed_addr global i32, align 4
@main.ntimes = external hidden local_unnamed_addr global i32, align 4
@main.info = external hidden global i32, align 4
@main.lda = external hidden local_unnamed_addr global i32, align 4
@main.ldaa = external hidden local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [17 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@secs = external local_unnamed_addr global double, align 8
@atime = external hidden local_unnamed_addr global [9 x [15 x double]], align 16
@.str.12 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [17 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #0 {
  %3 = alloca double, align 8
  %4 = alloca [5 x [20 x i8]], align 16
  %5 = alloca [5 x [20 x i8]], align 16
  %6 = alloca [5 x [20 x i8]], align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  call void @llvm.lifetime.start.p0(i64 100, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 100, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 100, ptr nonnull %6) #8
  %7 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str) #8
  %8 = getelementptr inbounds i8, ptr %5, i64 20
  %9 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %8, ptr noundef nonnull dereferenceable(1) @.str.1) #8
  %10 = getelementptr inbounds i8, ptr %5, i64 40
  %11 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %10, ptr noundef nonnull dereferenceable(1) @.str.2) #8
  %12 = getelementptr inbounds i8, ptr %5, i64 60
  %13 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %12, ptr noundef nonnull dereferenceable(1) @.str.3) #8
  %14 = getelementptr inbounds i8, ptr %5, i64 80
  %15 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %14, ptr noundef nonnull dereferenceable(1) @.str.4) #8
  store i32 201, ptr @main.lda, align 4, !tbaa !5
  store i32 200, ptr @main.ldaa, align 4, !tbaa !5
  store i32 100, ptr @main.n, align 4, !tbaa !5
  %16 = load ptr, ptr @stdout, align 8, !tbaa !9
  %17 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %16, ptr noundef nonnull @.str.5) #8
  %18 = load ptr, ptr @stdout, align 8, !tbaa !9
  %19 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %18, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7) #8
  %20 = load ptr, ptr @stdout, align 8, !tbaa !9
  %21 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.8) #8
  %22 = load ptr, ptr @stdout, align 8, !tbaa !9
  %23 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %22, ptr noundef nonnull @.str.9) #8
  %24 = load ptr, ptr @stdout, align 8, !tbaa !9
  %25 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %24, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11) #8
  %26 = load i32, ptr @main.n, align 4, !tbaa !5
  %27 = mul nsw i32 %26, %26
  %28 = mul nsw i32 %27, %26
  %29 = sitofp i32 %28 to double
  %30 = fmul double %29, 2.000000e+00
  %31 = fdiv double %30, 3.000000e+00
  %32 = uitofp nneg i32 %27 to double
  %33 = tail call double @llvm.fmuladd.f64(double %32, double 2.000000e+00, double %31)
  %34 = load i32, ptr @main.lda, align 4, !tbaa !5
  call void @matgen(ptr noundef nonnull @main.a, i32 noundef %34, i32 noundef %26, ptr noundef nonnull @main.b, ptr noundef nonnull %3)
  call void (...) @start_time() #8
  %35 = load i32, ptr @main.lda, align 4, !tbaa !5
  %36 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef nonnull @main.a, i32 noundef %35, i32 noundef %36, ptr noundef nonnull @main.ipvt, ptr noundef nonnull @main.info)
  call void (...) @end_time() #8
  %37 = load double, ptr @secs, align 8, !tbaa !11
  store double %37, ptr @atime, align 16, !tbaa !11
  call void (...) @start_time() #8
  %38 = load i32, ptr @main.lda, align 4, !tbaa !5
  %39 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgesl(ptr noundef nonnull @main.a, i32 noundef %38, i32 noundef %39, ptr noundef nonnull @main.ipvt, ptr noundef nonnull @main.b, i32 noundef 0)
  call void (...) @end_time() #8
  %40 = load double, ptr @secs, align 8, !tbaa !11
  store double %40, ptr getelementptr inbounds (i8, ptr @atime, i64 120), align 8, !tbaa !11
  %41 = load double, ptr @atime, align 16, !tbaa !11
  %42 = fadd double %40, %41
  %43 = load i32, ptr @main.n, align 4, !tbaa !5
  %44 = icmp sgt i32 %43, 0
  br i1 %44, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %2
  %45 = zext nneg i32 %43 to i64
  %46 = shl nuw nsw i64 %45, 3
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 @main.x, ptr nonnull align 16 @main.b, i64 %46, i1 false), !tbaa !11
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %2
  %storemerge.lcssa = phi i32 [ 0, %2 ], [ %43, %.lr.ph.preheader ]
  store i32 %storemerge.lcssa, ptr @main.i, align 4, !tbaa !5
  %47 = load i32, ptr @main.lda, align 4, !tbaa !5
  call void @matgen(ptr noundef nonnull @main.a, i32 noundef %47, i32 noundef %43, ptr noundef nonnull @main.b, ptr noundef nonnull %3)
  %48 = load i32, ptr @main.n, align 4, !tbaa !5
  %49 = icmp sgt i32 %48, 0
  br i1 %49, label %.lr.ph118.preheader, label %._crit_edge119

.lr.ph118.preheader:                              ; preds = %._crit_edge
  %wide.trip.count166 = zext nneg i32 %48 to i64
  %min.iters.check = icmp ult i32 %48, 4
  br i1 %min.iters.check, label %.lr.ph118.preheader193, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph118.preheader
  %n.vec = and i64 %wide.trip.count166, 2147483644
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %50 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %index
  %51 = getelementptr inbounds i8, ptr %50, i64 16
  %wide.load = load <2 x double>, ptr %50, align 16, !tbaa !11
  %wide.load188 = load <2 x double>, ptr %51, align 16, !tbaa !11
  %52 = fneg <2 x double> %wide.load
  %53 = fneg <2 x double> %wide.load188
  store <2 x double> %52, ptr %50, align 16, !tbaa !11
  store <2 x double> %53, ptr %51, align 16, !tbaa !11
  %index.next = add nuw i64 %index, 4
  %54 = icmp eq i64 %index.next, %n.vec
  br i1 %54, label %middle.block, label %vector.body, !llvm.loop !13

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count166
  br i1 %cmp.n, label %._crit_edge119, label %.lr.ph118.preheader193

.lr.ph118.preheader193:                           ; preds = %middle.block, %.lr.ph118.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph118.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph118

.lr.ph118:                                        ; preds = %.lr.ph118.preheader193, %.lr.ph118
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph118 ], [ %indvars.iv.ph, %.lr.ph118.preheader193 ]
  %55 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %indvars.iv
  %56 = load double, ptr %55, align 8, !tbaa !11
  %57 = fneg double %56
  store double %57, ptr %55, align 8, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count166
  br i1 %exitcond.not, label %._crit_edge119, label %.lr.ph118, !llvm.loop !17

._crit_edge119:                                   ; preds = %.lr.ph118, %middle.block, %._crit_edge
  %storemerge92.lcssa = phi i32 [ 0, %._crit_edge ], [ %48, %middle.block ], [ %48, %.lr.ph118 ]
  store i32 %storemerge92.lcssa, ptr @main.i, align 4, !tbaa !5
  %58 = load i32, ptr @main.lda, align 4, !tbaa !5
  call void @dmxpy(i32 noundef %48, ptr noundef nonnull @main.b, i32 noundef %48, i32 noundef %58, ptr noundef nonnull @main.x, ptr noundef nonnull @main.a)
  %59 = load i32, ptr @main.n, align 4, !tbaa !5
  %60 = icmp sgt i32 %59, 0
  br i1 %60, label %.lr.ph126.preheader, label %._crit_edge127

.lr.ph126.preheader:                              ; preds = %._crit_edge119
  %wide.trip.count170 = zext nneg i32 %59 to i64
  %xtraiter = and i64 %wide.trip.count170, 1
  %61 = icmp eq i32 %59, 1
  br i1 %61, label %._crit_edge127.loopexit.unr-lcssa, label %.lr.ph126.preheader.new

.lr.ph126.preheader.new:                          ; preds = %.lr.ph126.preheader
  %unroll_iter = and i64 %wide.trip.count170, 2147483646
  br label %.lr.ph126

.lr.ph126:                                        ; preds = %.lr.ph126, %.lr.ph126.preheader.new
  %indvars.iv167 = phi i64 [ 0, %.lr.ph126.preheader.new ], [ %indvars.iv.next168.1, %.lr.ph126 ]
  %62 = phi <2 x double> [ zeroinitializer, %.lr.ph126.preheader.new ], [ %80, %.lr.ph126 ]
  %niter = phi i64 [ 0, %.lr.ph126.preheader.new ], [ %niter.next.1, %.lr.ph126 ]
  %63 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %indvars.iv167
  %64 = load double, ptr %63, align 16, !tbaa !11
  %65 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %indvars.iv167
  %66 = load double, ptr %65, align 16, !tbaa !11
  %67 = insertelement <2 x double> poison, double %66, i64 0
  %68 = insertelement <2 x double> %67, double %64, i64 1
  %69 = call <2 x double> @llvm.fabs.v2f64(<2 x double> %68)
  %70 = fcmp ogt <2 x double> %62, %69
  %71 = select <2 x i1> %70, <2 x double> %62, <2 x double> %69
  %indvars.iv.next168 = or disjoint i64 %indvars.iv167, 1
  %72 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %indvars.iv.next168
  %73 = load double, ptr %72, align 8, !tbaa !11
  %74 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %indvars.iv.next168
  %75 = load double, ptr %74, align 8, !tbaa !11
  %76 = insertelement <2 x double> poison, double %75, i64 0
  %77 = insertelement <2 x double> %76, double %73, i64 1
  %78 = call <2 x double> @llvm.fabs.v2f64(<2 x double> %77)
  %79 = fcmp ogt <2 x double> %71, %78
  %80 = select <2 x i1> %79, <2 x double> %71, <2 x double> %78
  %indvars.iv.next168.1 = add nuw nsw i64 %indvars.iv167, 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_edge127.loopexit.unr-lcssa, label %.lr.ph126, !llvm.loop !18

._crit_edge127.loopexit.unr-lcssa:                ; preds = %.lr.ph126, %.lr.ph126.preheader
  %.lcssa192.ph = phi <2 x double> [ poison, %.lr.ph126.preheader ], [ %80, %.lr.ph126 ]
  %indvars.iv167.unr = phi i64 [ 0, %.lr.ph126.preheader ], [ %indvars.iv.next168.1, %.lr.ph126 ]
  %.unr = phi <2 x double> [ zeroinitializer, %.lr.ph126.preheader ], [ %80, %.lr.ph126 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge127, label %.lr.ph126.epil

.lr.ph126.epil:                                   ; preds = %._crit_edge127.loopexit.unr-lcssa
  %81 = getelementptr inbounds [200 x double], ptr @main.b, i64 0, i64 %indvars.iv167.unr
  %82 = load double, ptr %81, align 8, !tbaa !11
  %83 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %indvars.iv167.unr
  %84 = load double, ptr %83, align 8, !tbaa !11
  %85 = insertelement <2 x double> poison, double %84, i64 0
  %86 = insertelement <2 x double> %85, double %82, i64 1
  %87 = call <2 x double> @llvm.fabs.v2f64(<2 x double> %86)
  %88 = fcmp ogt <2 x double> %.unr, %87
  %89 = select <2 x i1> %88, <2 x double> %.unr, <2 x double> %87
  br label %._crit_edge127

._crit_edge127:                                   ; preds = %.lr.ph126.epil, %._crit_edge127.loopexit.unr-lcssa, %._crit_edge119
  %storemerge93.lcssa = phi i32 [ 0, %._crit_edge119 ], [ %59, %._crit_edge127.loopexit.unr-lcssa ], [ %59, %.lr.ph126.epil ]
  %90 = phi <2 x double> [ zeroinitializer, %._crit_edge119 ], [ %.lcssa192.ph, %._crit_edge127.loopexit.unr-lcssa ], [ %89, %.lr.ph126.epil ]
  store i32 %storemerge93.lcssa, ptr @main.i, align 4, !tbaa !5
  %91 = call double @epslon(double noundef 1.000000e+00)
  %92 = load i32, ptr @main.n, align 4, !tbaa !5
  %93 = sitofp i32 %92 to double
  %94 = load double, ptr %3, align 8, !tbaa !11
  %95 = fmul double %94, %93
  %96 = extractelement <2 x double> %90, i64 0
  %97 = fmul double %96, %95
  %98 = fmul double %91, %97
  %99 = extractelement <2 x double> %90, i64 1
  %100 = fdiv double %99, %98
  %101 = load double, ptr @main.x, align 16, !tbaa !11
  %102 = fadd double %101, -1.000000e+00
  %103 = add nsw i32 %92, -1
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds [200 x double], ptr @main.x, i64 0, i64 %104
  %106 = load double, ptr %105, align 8, !tbaa !11
  %107 = fadd double %106, -1.000000e+00
  %108 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %109 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  %110 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %100, double noundef %99, double noundef %91, double noundef %102, double noundef %107)
  %111 = load ptr, ptr @stdout, align 8, !tbaa !9
  %112 = load i32, ptr @main.n, align 4, !tbaa !5
  %113 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %111, ptr noundef nonnull @.str.15, i32 noundef %112) #8
  %114 = load ptr, ptr @stdout, align 8, !tbaa !9
  %115 = load i32, ptr @main.lda, align 4, !tbaa !5
  %116 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %114, ptr noundef nonnull @.str.16, i32 noundef %115) #8
  %117 = load ptr, ptr @stdout, align 8, !tbaa !9
  %118 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %117, ptr noundef nonnull @.str.17) #8
  %119 = load ptr, ptr @stdout, align 8, !tbaa !9
  %120 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %119, ptr noundef nonnull @.str.18) #8
  store double %42, ptr getelementptr inbounds (i8, ptr @atime, i64 240), align 16, !tbaa !11
  %121 = fcmp ogt double %42, 0.000000e+00
  %122 = fmul double %42, 1.000000e+06
  %123 = fdiv double %33, %122
  %124 = fdiv double 2.000000e+00, %123
  %.sink = select i1 %121, double %123, double 0.000000e+00
  %storemerge94 = select i1 %121, double %124, double 0.000000e+00
  store double %.sink, ptr getelementptr inbounds (i8, ptr @atime, i64 360), align 8
  store double %storemerge94, ptr getelementptr inbounds (i8, ptr @atime, i64 480), align 16, !tbaa !11
  %125 = fdiv double %42, 5.600000e-02
  store double %125, ptr getelementptr inbounds (i8, ptr @atime, i64 600), align 8, !tbaa !11
  call void @print_time(i32 noundef 0)
  %126 = load ptr, ptr @stdout, align 8, !tbaa !9
  %127 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %126, ptr noundef nonnull @.str.19) #8
  br label %128

128:                                              ; preds = %143, %._crit_edge127
  %.075 = phi i32 [ -20, %._crit_edge127 ], [ %129, %143 ]
  %.073 = phi i32 [ 10, %._crit_edge127 ], [ %.174, %143 ]
  call void (...) @start_time() #8
  %129 = add nsw i32 %.075, 1
  store i32 0, ptr @main.i, align 4, !tbaa !5
  %130 = icmp sgt i32 %.073, 0
  br i1 %130, label %.lr.ph132, label %._crit_edge133

.lr.ph132:                                        ; preds = %128, %.lr.ph132
  %131 = load i32, ptr @main.lda, align 4, !tbaa !5
  %132 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef nonnull @main.a, i32 noundef %131, i32 noundef %132, ptr noundef nonnull @main.b, ptr noundef nonnull %3)
  %133 = load i32, ptr @main.i, align 4, !tbaa !5
  %134 = add nsw i32 %133, 1
  store i32 %134, ptr @main.i, align 4, !tbaa !5
  %135 = icmp slt i32 %134, %.073
  br i1 %135, label %.lr.ph132, label %._crit_edge133, !llvm.loop !19

._crit_edge133:                                   ; preds = %.lr.ph132, %128
  call void (...) @end_time() #8
  %136 = load double, ptr @secs, align 8, !tbaa !11
  %137 = load ptr, ptr @stdout, align 8, !tbaa !9
  %138 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %137, ptr noundef nonnull @.str.20, i32 noundef %.073, double noundef %136) #8
  %139 = load double, ptr @runSecs, align 8, !tbaa !11
  %140 = fcmp ule double %136, %139
  %141 = icmp slt i32 %.075, -1
  %142 = select i1 %140, i1 %141, i1 false
  br i1 %142, label %143, label %147

143:                                              ; preds = %._crit_edge133
  %144 = fcmp olt double %136, 1.000000e-01
  %145 = mul nsw i32 %.073, 10
  %146 = shl nsw i32 %.073, 1
  %.174 = select i1 %144, i32 %145, i32 %146
  br label %128, !llvm.loop !20

147:                                              ; preds = %._crit_edge133
  %148 = sitofp i32 %.073 to double
  %149 = fdiv double %136, %148
  %150 = load ptr, ptr @stdout, align 8, !tbaa !9
  %151 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %150, ptr noundef nonnull @.str.21, double noundef %149) #8
  %152 = load ptr, ptr @stdout, align 8, !tbaa !9
  %153 = load double, ptr @runSecs, align 8, !tbaa !11
  %154 = fptosi double %153 to i32
  %155 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %152, ptr noundef nonnull @.str.22, i32 noundef %154) #8
  br label %156

156:                                              ; preds = %176, %147
  %storemerge109 = phi i32 [ 10, %147 ], [ %storemerge108, %176 ]
  %.2 = phi i32 [ -20, %147 ], [ %157, %176 ]
  store i32 %storemerge109, ptr @main.ntimes, align 4, !tbaa !5
  call void (...) @start_time() #8
  %157 = add nsw i32 %.2, 1
  store i32 0, ptr @main.i, align 4, !tbaa !5
  %158 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %159 = icmp sgt i32 %158, 0
  br i1 %159, label %.lr.ph135, label %._crit_edge136

.lr.ph135:                                        ; preds = %156, %.lr.ph135
  %160 = load i32, ptr @main.lda, align 4, !tbaa !5
  %161 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef nonnull @main.a, i32 noundef %160, i32 noundef %161, ptr noundef nonnull @main.b, ptr noundef nonnull %3)
  %162 = load i32, ptr @main.lda, align 4, !tbaa !5
  %163 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef nonnull @main.a, i32 noundef %162, i32 noundef %163, ptr noundef nonnull @main.ipvt, ptr noundef nonnull @main.info)
  %164 = load i32, ptr @main.i, align 4, !tbaa !5
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr @main.i, align 4, !tbaa !5
  %166 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %167 = icmp slt i32 %165, %166
  br i1 %167, label %.lr.ph135, label %._crit_edge136, !llvm.loop !21

._crit_edge136:                                   ; preds = %.lr.ph135, %156
  call void (...) @end_time() #8
  %168 = load double, ptr @secs, align 8, !tbaa !11
  %169 = load ptr, ptr @stdout, align 8, !tbaa !9
  %170 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %171 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %169, ptr noundef nonnull @.str.20, i32 noundef %170, double noundef %168) #8
  %172 = load double, ptr @runSecs, align 8, !tbaa !11
  %173 = fcmp ule double %168, %172
  %174 = icmp slt i32 %.2, -1
  %175 = select i1 %173, i1 %174, i1 false
  br i1 %175, label %176, label %.critedge

176:                                              ; preds = %._crit_edge136
  %177 = fcmp olt double %168, 1.000000e-01
  %178 = load i32, ptr @main.ntimes, align 4
  %179 = shl nsw i32 %178, 1
  %180 = mul nsw i32 %178, 10
  %storemerge108 = select i1 %177, i32 %180, i32 %179
  br label %156, !llvm.loop !22

.critedge:                                        ; preds = %._crit_edge136
  %181 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %182 = sitofp i32 %181 to double
  %183 = fmul double %172, %182
  %184 = fdiv double %183, %168
  %185 = fptosi double %184 to i32
  %spec.store.select = call i32 @llvm.umax.i32(i32 %185, i32 1)
  store i32 %spec.store.select, ptr @main.ntimes, align 4
  %186 = load ptr, ptr @stdout, align 8, !tbaa !9
  %187 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %186, ptr noundef nonnull @.str.23, i32 noundef %spec.store.select) #8
  %188 = load ptr, ptr @stdout, align 8, !tbaa !9
  %189 = load i32, ptr @main.lda, align 4, !tbaa !5
  %190 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %188, ptr noundef nonnull @.str.24, i32 noundef %189) #8
  %191 = load ptr, ptr @stdout, align 8, !tbaa !9
  %192 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %191, ptr noundef nonnull @.str.17) #8
  %193 = load ptr, ptr @stdout, align 8, !tbaa !9
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef nonnull @.str.18) #8
  %195 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %196 = sitofp i32 %195 to double
  %197 = fmul double %149, %196
  store double 0.000000e+00, ptr getelementptr inbounds (i8, ptr @atime, i64 408), align 8, !tbaa !11
  store i32 1, ptr @main.j, align 4, !tbaa !5
  br label %198

198:                                              ; preds = %.critedge, %._crit_edge142
  call void (...) @start_time() #8
  store i32 0, ptr @main.i, align 4, !tbaa !5
  %199 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %200 = icmp sgt i32 %199, 0
  br i1 %200, label %.lr.ph138, label %._crit_edge139

.lr.ph138:                                        ; preds = %198, %.lr.ph138
  %201 = load i32, ptr @main.lda, align 4, !tbaa !5
  %202 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef nonnull @main.a, i32 noundef %201, i32 noundef %202, ptr noundef nonnull @main.b, ptr noundef nonnull %3)
  %203 = load i32, ptr @main.lda, align 4, !tbaa !5
  %204 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef nonnull @main.a, i32 noundef %203, i32 noundef %204, ptr noundef nonnull @main.ipvt, ptr noundef nonnull @main.info)
  %205 = load i32, ptr @main.i, align 4, !tbaa !5
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr @main.i, align 4, !tbaa !5
  %207 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %208 = icmp slt i32 %206, %207
  br i1 %208, label %.lr.ph138, label %._crit_edge139, !llvm.loop !23

._crit_edge139:                                   ; preds = %.lr.ph138, %198
  call void (...) @end_time() #8
  %209 = load double, ptr @secs, align 8, !tbaa !11
  %210 = fsub double %209, %197
  %211 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %212 = sitofp i32 %211 to double
  %213 = fdiv double %210, %212
  %214 = load i32, ptr @main.j, align 4, !tbaa !5
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %215
  store double %213, ptr %216, align 8, !tbaa !11
  call void (...) @start_time() #8
  store i32 0, ptr @main.i, align 4, !tbaa !5
  %217 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %218 = icmp sgt i32 %217, 0
  br i1 %218, label %.lr.ph141, label %._crit_edge142

.lr.ph141:                                        ; preds = %._crit_edge139, %.lr.ph141
  %219 = load i32, ptr @main.lda, align 4, !tbaa !5
  %220 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgesl(ptr noundef nonnull @main.a, i32 noundef %219, i32 noundef %220, ptr noundef nonnull @main.ipvt, ptr noundef nonnull @main.b, i32 noundef 0)
  %221 = load i32, ptr @main.i, align 4, !tbaa !5
  %222 = add nsw i32 %221, 1
  store i32 %222, ptr @main.i, align 4, !tbaa !5
  %223 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %224 = icmp slt i32 %222, %223
  br i1 %224, label %.lr.ph141, label %._crit_edge142, !llvm.loop !24

._crit_edge142:                                   ; preds = %.lr.ph141, %._crit_edge139
  call void (...) @end_time() #8
  %225 = load double, ptr @secs, align 8, !tbaa !11
  %226 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %227 = sitofp i32 %226 to double
  %228 = fdiv double %225, %227
  %229 = load i32, ptr @main.j, align 4, !tbaa !5
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 120), i64 0, i64 %230
  store double %228, ptr %231, align 8, !tbaa !11
  %232 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %230
  %233 = load double, ptr %232, align 8, !tbaa !11
  %234 = fadd double %228, %233
  %235 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 240), i64 0, i64 %230
  store double %234, ptr %235, align 8, !tbaa !11
  %236 = fmul double %234, 1.000000e+06
  %237 = fdiv double %33, %236
  %238 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 360), i64 0, i64 %230
  store double %237, ptr %238, align 8, !tbaa !11
  %239 = fdiv double 2.000000e+00, %237
  %240 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 480), i64 0, i64 %230
  store double %239, ptr %240, align 8, !tbaa !11
  %241 = fdiv double %234, 5.600000e-02
  %242 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 600), i64 0, i64 %230
  store double %241, ptr %242, align 8, !tbaa !11
  %243 = load double, ptr getelementptr inbounds (i8, ptr @atime, i64 408), align 8, !tbaa !11
  %244 = fadd double %237, %243
  store double %244, ptr getelementptr inbounds (i8, ptr @atime, i64 408), align 8, !tbaa !11
  call void @print_time(i32 noundef %229)
  %245 = load i32, ptr @main.j, align 4, !tbaa !5
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr @main.j, align 4, !tbaa !5
  %247 = icmp slt i32 %245, 5
  br i1 %247, label %198, label %248, !llvm.loop !25

248:                                              ; preds = %._crit_edge142
  %249 = load double, ptr getelementptr inbounds (i8, ptr @atime, i64 408), align 8, !tbaa !11
  %250 = fdiv double %249, 5.000000e+00
  store double %250, ptr getelementptr inbounds (i8, ptr @atime, i64 408), align 8, !tbaa !11
  %251 = load ptr, ptr @stdout, align 8, !tbaa !9
  %252 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %251, ptr noundef nonnull @.str.25, double noundef %250) #8
  %253 = load ptr, ptr @stdout, align 8, !tbaa !9
  %254 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %253, ptr noundef nonnull @.str.26) #8
  call void (...) @start_time() #8
  store i32 0, ptr @main.i, align 4, !tbaa !5
  br i1 %130, label %.lr.ph144, label %._crit_edge145

.lr.ph144:                                        ; preds = %248, %.lr.ph144
  %255 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %256 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef nonnull @main.aa, i32 noundef %255, i32 noundef %256, ptr noundef nonnull @main.b, ptr noundef nonnull %3)
  %257 = load i32, ptr @main.i, align 4, !tbaa !5
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr @main.i, align 4, !tbaa !5
  %259 = icmp slt i32 %258, %.073
  br i1 %259, label %.lr.ph144, label %._crit_edge145, !llvm.loop !26

._crit_edge145:                                   ; preds = %.lr.ph144, %248
  call void (...) @end_time() #8
  %260 = load double, ptr @secs, align 8, !tbaa !11
  %261 = fdiv double %260, %148
  %262 = load ptr, ptr @stdout, align 8, !tbaa !9
  %263 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %262, ptr noundef nonnull @.str.21, double noundef %261) #8
  %264 = load ptr, ptr @stdout, align 8, !tbaa !9
  %265 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %266 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %264, ptr noundef nonnull @.str.24, i32 noundef %265) #8
  %267 = load ptr, ptr @stdout, align 8, !tbaa !9
  %268 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %267, ptr noundef nonnull @.str.17) #8
  %269 = load ptr, ptr @stdout, align 8, !tbaa !9
  %270 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %269, ptr noundef nonnull @.str.18) #8
  %271 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %272 = sitofp i32 %271 to double
  %273 = fmul double %261, %272
  store double 0.000000e+00, ptr getelementptr inbounds (i8, ptr @atime, i64 456), align 8, !tbaa !11
  store i32 7, ptr @main.j, align 4, !tbaa !5
  br label %274

274:                                              ; preds = %._crit_edge145, %._crit_edge151
  call void (...) @start_time() #8
  store i32 0, ptr @main.i, align 4, !tbaa !5
  %275 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %276 = icmp sgt i32 %275, 0
  br i1 %276, label %.lr.ph147, label %._crit_edge148

.lr.ph147:                                        ; preds = %274, %.lr.ph147
  %277 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %278 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @matgen(ptr noundef nonnull @main.aa, i32 noundef %277, i32 noundef %278, ptr noundef nonnull @main.b, ptr noundef nonnull %3)
  %279 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %280 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgefa(ptr noundef nonnull @main.aa, i32 noundef %279, i32 noundef %280, ptr noundef nonnull @main.ipvt, ptr noundef nonnull @main.info)
  %281 = load i32, ptr @main.i, align 4, !tbaa !5
  %282 = add nsw i32 %281, 1
  store i32 %282, ptr @main.i, align 4, !tbaa !5
  %283 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %284 = icmp slt i32 %282, %283
  br i1 %284, label %.lr.ph147, label %._crit_edge148, !llvm.loop !27

._crit_edge148:                                   ; preds = %.lr.ph147, %274
  call void (...) @end_time() #8
  %285 = load double, ptr @secs, align 8, !tbaa !11
  %286 = fsub double %285, %273
  %287 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %288 = sitofp i32 %287 to double
  %289 = fdiv double %286, %288
  %290 = load i32, ptr @main.j, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %291
  store double %289, ptr %292, align 8, !tbaa !11
  call void (...) @start_time() #8
  store i32 0, ptr @main.i, align 4, !tbaa !5
  %293 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %294 = icmp sgt i32 %293, 0
  br i1 %294, label %.lr.ph150, label %._crit_edge151

.lr.ph150:                                        ; preds = %._crit_edge148, %.lr.ph150
  %295 = load i32, ptr @main.ldaa, align 4, !tbaa !5
  %296 = load i32, ptr @main.n, align 4, !tbaa !5
  call void @dgesl(ptr noundef nonnull @main.aa, i32 noundef %295, i32 noundef %296, ptr noundef nonnull @main.ipvt, ptr noundef nonnull @main.b, i32 noundef 0)
  %297 = load i32, ptr @main.i, align 4, !tbaa !5
  %298 = add nsw i32 %297, 1
  store i32 %298, ptr @main.i, align 4, !tbaa !5
  %299 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %300 = icmp slt i32 %298, %299
  br i1 %300, label %.lr.ph150, label %._crit_edge151, !llvm.loop !28

._crit_edge151:                                   ; preds = %.lr.ph150, %._crit_edge148
  call void (...) @end_time() #8
  %301 = load double, ptr @secs, align 8, !tbaa !11
  %302 = load i32, ptr @main.ntimes, align 4, !tbaa !5
  %303 = sitofp i32 %302 to double
  %304 = fdiv double %301, %303
  %305 = load i32, ptr @main.j, align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 120), i64 0, i64 %306
  store double %304, ptr %307, align 8, !tbaa !11
  %308 = getelementptr inbounds [15 x double], ptr @atime, i64 0, i64 %306
  %309 = load double, ptr %308, align 8, !tbaa !11
  %310 = fadd double %304, %309
  %311 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 240), i64 0, i64 %306
  store double %310, ptr %311, align 8, !tbaa !11
  %312 = fmul double %310, 1.000000e+06
  %313 = fdiv double %33, %312
  %314 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 360), i64 0, i64 %306
  store double %313, ptr %314, align 8, !tbaa !11
  %315 = fdiv double 2.000000e+00, %313
  %316 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 480), i64 0, i64 %306
  store double %315, ptr %316, align 8, !tbaa !11
  %317 = fdiv double %310, 5.600000e-02
  %318 = getelementptr inbounds [15 x double], ptr getelementptr inbounds (i8, ptr @atime, i64 600), i64 0, i64 %306
  store double %317, ptr %318, align 8, !tbaa !11
  %319 = load double, ptr getelementptr inbounds (i8, ptr @atime, i64 456), align 8, !tbaa !11
  %320 = fadd double %313, %319
  store double %320, ptr getelementptr inbounds (i8, ptr @atime, i64 456), align 8, !tbaa !11
  call void @print_time(i32 noundef %305)
  %321 = load i32, ptr @main.j, align 4, !tbaa !5
  %322 = add nsw i32 %321, 1
  store i32 %322, ptr @main.j, align 4, !tbaa !5
  %323 = icmp slt i32 %321, 11
  br i1 %323, label %274, label %.preheader, !llvm.loop !29

.preheader:                                       ; preds = %._crit_edge151
  %324 = load double, ptr getelementptr inbounds (i8, ptr @atime, i64 456), align 8, !tbaa !11
  %325 = fdiv double %324, 5.000000e+00
  store double %325, ptr getelementptr inbounds (i8, ptr @atime, i64 456), align 8, !tbaa !11
  %326 = load ptr, ptr @stdout, align 8, !tbaa !9
  %327 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %326, ptr noundef nonnull @.str.27, double noundef %325) #8
  %328 = load double, ptr getelementptr inbounds (i8, ptr @atime, i64 408), align 8, !tbaa !11
  %329 = load double, ptr getelementptr inbounds (i8, ptr @atime, i64 456), align 8, !tbaa !11
  %330 = fcmp olt double %329, %328
  %.077 = select i1 %330, double %329, double %328
  %331 = load ptr, ptr @stdout, align 8, !tbaa !9
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef nonnull @.str.28) #8
  %333 = load ptr, ptr @stdout, align 8, !tbaa !9
  %334 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %333, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7) #8
  %335 = load ptr, ptr @stdout, align 8, !tbaa !9
  %336 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %335, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.8) #8
  %337 = load ptr, ptr @stdout, align 8, !tbaa !9
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %337, ptr noundef nonnull @.str.29, double noundef %.077) #8
  call void (...) @local_time() #8
  store i32 12, ptr @main.i, align 4, !tbaa !5
  %339 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %4, ptr noundef nonnull dereferenceable(1) @.str.30, double noundef %100) #8
  %340 = getelementptr inbounds i8, ptr %4, i64 20
  %341 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %340, ptr noundef nonnull dereferenceable(1) @.str.31, double noundef %99) #8
  %342 = getelementptr inbounds i8, ptr %4, i64 40
  %343 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %342, ptr noundef nonnull dereferenceable(1) @.str.31, double noundef %91) #8
  %344 = getelementptr inbounds i8, ptr %4, i64 60
  %345 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %344, ptr noundef nonnull dereferenceable(1) @.str.31, double noundef %102) #8
  %346 = getelementptr inbounds i8, ptr %4, i64 80
  %347 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %346, ptr noundef nonnull dereferenceable(1) @.str.31, double noundef %107) #8
  %348 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.32) #8
  %349 = getelementptr inbounds i8, ptr %6, i64 20
  %350 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %349, ptr noundef nonnull dereferenceable(1) @.str.33) #8
  %351 = getelementptr inbounds i8, ptr %6, i64 40
  %352 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %351, ptr noundef nonnull dereferenceable(1) @.str.34) #8
  %353 = getelementptr inbounds i8, ptr %6, i64 60
  %354 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %353, ptr noundef nonnull dereferenceable(1) @.str.35) #8
  %355 = getelementptr inbounds i8, ptr %6, i64 80
  %356 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %355, ptr noundef nonnull dereferenceable(1) @.str.36) #8
  %357 = call i64 @strtol(ptr nocapture noundef nonnull @.str.37, ptr noundef null, i32 noundef 10) #8
  %358 = icmp eq i64 %357, 0
  br i1 %358, label %359, label %361

359:                                              ; preds = %.preheader
  %360 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %10, ptr noundef nonnull dereferenceable(1) @.str.38) #8
  br label %361

361:                                              ; preds = %359, %.preheader
  %362 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28)
  call void @llvm.lifetime.end.p0(i64 100, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 100, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 100, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  ret i32 0
}

; 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
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

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

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

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

declare void @start_time(...) local_unnamed_addr #4

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

declare void @end_time(...) local_unnamed_addr #4

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

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

; Function Attrs: nounwind uwtable
declare dso_local double @epslon(double noundef) local_unnamed_addr #0

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

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

declare void @local_time(...) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn
declare i64 @strtol(ptr noundef readonly, ptr nocapture noundef, i32 noundef) local_unnamed_addr #5

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fabs.v2f64(<2 x double>) #6

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { 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 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14, !15, !16}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !14, !16, !15}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass