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

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

%struct.Parameters = type { i64, i64, i64, double, [3 x [25 x double]], [3 x [25 x i64]], [3 x [25 x double]], [3 x [25 x double]], [3 x [25 x double]], [25 x i64], [3 x [25 x i64]], [3 x [25 x i64]], double, double, double, i64, i64, i64, [3 x [25 x i64]], i64, i64, i64, i64, i64, i64, double, i64 }

@runSecs = external dso_local global double, align 8
@reliability = external dso_local global i32, align 4
@nsRes = external dso_local global i32, align 4
@compareFail = external dso_local global i32, align 4
@__const.main.mul = external hidden unnamed_addr constant [3 x i64], align 16
@__const.main.weight = external hidden unnamed_addr constant [3 x double], align 16
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [33 x i8], align 1
@as2 = external dso_local global %struct.Parameters, align 8
@runRel = external dso_local global i32, align 4
@secs = external global double, align 8
@.str.5 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [39 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 i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca [3 x i64], align 16
  %15 = alloca [3 x double], align 16
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca [4 x double], align 16
  %19 = alloca [4 x double], align 16
  %20 = alloca [4 x double], align 16
  %21 = alloca [4 x double], align 16
  %22 = alloca [4 x double], align 16
  %23 = alloca [4 x i64], align 16
  %24 = alloca [9 x [80 x i8]], align 16
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = 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) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  store double 1.000000e+00, ptr %9, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %14, ptr align 16 @__const.main.mul, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %15, ptr align 16 @__const.main.weight, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 720, ptr %24) #7
  call void @llvm.memset.p0.i64(ptr align 16 %24, i8 0, i64 720, i1 false)
  %28 = getelementptr inbounds <{ [80 x i8], [8 x [80 x i8]] }>, ptr %24, i32 0, i32 0
  %29 = getelementptr inbounds [80 x i8], ptr %28, i32 0, i32 0
  store i8 32, ptr %29, align 16
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 1, ptr %27, align 4, !tbaa !5
  %30 = load i32, ptr %4, align 4, !tbaa !5
  %31 = icmp sgt i32 %30, 1
  br i1 %31, label %32, label %42

32:                                               ; preds = %2
  %33 = load ptr, ptr %5, align 8, !tbaa !9
  %34 = getelementptr inbounds ptr, ptr %33, i64 1
  %35 = load ptr, ptr %34, align 8, !tbaa !9
  %36 = getelementptr inbounds i8, ptr %35, i64 0
  %37 = load i8, ptr %36, align 1, !tbaa !13
  %38 = sext i8 %37 to i32
  switch i32 %38, label %41 [
    i32 78, label %39
    i32 110, label %40
  ]

39:                                               ; preds = %32
  store i32 0, ptr %27, align 4, !tbaa !5
  br label %41

40:                                               ; preds = %32
  store i32 0, ptr %27, align 4, !tbaa !5
  br label %41

41:                                               ; preds = %40, %39, %32
  br label %42

42:                                               ; preds = %41, %2
  %43 = load i32, ptr %4, align 4, !tbaa !5
  %44 = icmp sgt i32 %43, 2
  br i1 %44, label %45, label %60

45:                                               ; preds = %42
  %46 = load ptr, ptr %5, align 8, !tbaa !9
  %47 = getelementptr inbounds ptr, ptr %46, i64 2
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  %49 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %48, ptr noundef @.str, ptr noundef %25) #7
  %50 = load i32, ptr %25, align 4, !tbaa !5
  %51 = icmp sgt i32 %50, 0
  br i1 %51, label %52, label %59

52:                                               ; preds = %45
  %53 = load i32, ptr %25, align 4, !tbaa !5
  %54 = sitofp i32 %53 to double
  store double %54, ptr @runSecs, align 8, !tbaa !11
  store i32 1, ptr @reliability, align 4, !tbaa !5
  %55 = load double, ptr @runSecs, align 8, !tbaa !11
  %56 = fcmp ogt double %55, 6.000000e+01
  br i1 %56, label %57, label %58

57:                                               ; preds = %52
  store double 6.000000e+01, ptr @runSecs, align 8, !tbaa !11
  br label %58

58:                                               ; preds = %57, %52
  br label %59

59:                                               ; preds = %58, %45
  br label %60

60:                                               ; preds = %59, %42
  %61 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  %62 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.3)
  call void (...) @local_time()
  %63 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  store i64 -20, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  store i64 1, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 18), align 8, !tbaa !17
  store i64 1000, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  store i64 0, ptr %17, align 8, !tbaa !17
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  store i32 0, ptr @runRel, align 4, !tbaa !5
  br label %64

64:                                               ; preds = %97, %60
  call void (...) @start_time()
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 15), align 8, !tbaa !20
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 16), align 8, !tbaa !21
  %65 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %66 = add nsw i64 %65, 1
  store i64 %66, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  br label %67

67:                                               ; preds = %69, %64
  %68 = call i64 @endloop(i64 noundef 0)
  br label %69

69:                                               ; preds = %67
  %70 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 15), align 8, !tbaa !20
  %71 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  %72 = icmp slt i64 %70, %71
  br i1 %72, label %67, label %73, !llvm.loop !22

73:                                               ; preds = %69
  call void (...) @end_time()
  %74 = load double, ptr @secs, align 8, !tbaa !11
  store double %74, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 14), align 8, !tbaa !24
  %75 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  %76 = load double, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 14), align 8, !tbaa !24
  %77 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i64 noundef %75, double noundef %76)
  %78 = load double, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 14), align 8, !tbaa !24
  %79 = fcmp ogt double %78, 2.000000e-01
  br i1 %79, label %80, label %81

80:                                               ; preds = %73
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  br label %81

81:                                               ; preds = %80, %73
  %82 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %83 = icmp slt i64 %82, 0
  br i1 %83, label %84, label %96

84:                                               ; preds = %81
  %85 = load double, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 14), align 8, !tbaa !24
  %86 = load double, ptr @runSecs, align 8, !tbaa !11
  %87 = fdiv double %86, 5.000000e+01
  %88 = fcmp olt double %85, %87
  br i1 %88, label %89, label %92

89:                                               ; preds = %84
  %90 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  %91 = mul nsw i64 %90, 10
  store i64 %91, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  br label %95

92:                                               ; preds = %84
  %93 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  %94 = mul nsw i64 %93, 2
  store i64 %94, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  br label %95

95:                                               ; preds = %92, %89
  br label %96

96:                                               ; preds = %95, %81
  br label %97

97:                                               ; preds = %96
  %98 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %99 = icmp slt i64 %98, 0
  br i1 %99, label %64, label %100, !llvm.loop !25

100:                                              ; preds = %97
  %101 = load double, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 14), align 8, !tbaa !24
  %102 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 1), align 8, !tbaa !18
  %103 = sitofp i64 %102 to double
  %104 = fdiv double %101, %103
  store double %104, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 14), align 8, !tbaa !24
  %105 = load double, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 14), align 8, !tbaa !24
  %106 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, double noundef %105)
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  br label %107

107:                                              ; preds = %417, %100
  %108 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %109 = icmp slt i64 %108, 3
  br i1 %109, label %110, label %420

110:                                              ; preds = %107
  %111 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %112 = getelementptr inbounds [3 x i64], ptr %14, i64 0, i64 %111
  %113 = load i64, ptr %112, align 8, !tbaa !17
  %114 = mul nsw i64 200, %113
  store i64 %114, ptr %13, align 8, !tbaa !17
  store i64 -20, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %115 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %116 = getelementptr inbounds [3 x i64], ptr %14, i64 0, i64 %115
  %117 = load i64, ptr %116, align 8, !tbaa !17
  %118 = mul nsw i64 2, %117
  store i64 %118, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  store i32 0, ptr @runRel, align 4, !tbaa !5
  store i64 1, ptr %11, align 8, !tbaa !17
  br label %119

119:                                              ; preds = %127, %110
  %120 = load i64, ptr %11, align 8, !tbaa !17
  %121 = icmp slt i64 %120, 25
  br i1 %121, label %122, label %130

122:                                              ; preds = %119
  %123 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %124 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 18), i64 0, i64 %123
  %125 = load i64, ptr %11, align 8, !tbaa !17
  %126 = getelementptr inbounds [25 x i64], ptr %124, i64 0, i64 %125
  store i64 1, ptr %126, align 8, !tbaa !17
  br label %127

127:                                              ; preds = %122
  %128 = load i64, ptr %11, align 8, !tbaa !17
  %129 = add nsw i64 %128, 1
  store i64 %129, ptr %11, align 8, !tbaa !17
  br label %119, !llvm.loop !27

130:                                              ; preds = %119
  %131 = load i32, ptr @reliability, align 4, !tbaa !5
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %133, label %134

133:                                              ; preds = %130
  call void (...) @local_time()
  br label %134

134:                                              ; preds = %133, %130
  %135 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %136 = add nsw i64 %135, 1
  %137 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i64 noundef %136)
  br label %138

138:                                              ; preds = %202, %134
  %139 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %140 = add nsw i64 %139, 1
  store i64 %140, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %141 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  %142 = mul nsw i64 %141, 2
  store i64 %142, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 16), align 8, !tbaa !21
  store i64 1, ptr %11, align 8, !tbaa !17
  br label %143

143:                                              ; preds = %151, %138
  %144 = load i64, ptr %11, align 8, !tbaa !17
  %145 = icmp slt i64 %144, 25
  br i1 %145, label %146, label %154

146:                                              ; preds = %143
  %147 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %148 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 6), i64 0, i64 %147
  %149 = load i64, ptr %11, align 8, !tbaa !17
  %150 = getelementptr inbounds [25 x double], ptr %148, i64 0, i64 %149
  store double 0.000000e+00, ptr %150, align 8, !tbaa !11
  br label %151

151:                                              ; preds = %146
  %152 = load i64, ptr %11, align 8, !tbaa !17
  %153 = add nsw i64 %152, 1
  store i64 %153, ptr %11, align 8, !tbaa !17
  br label %143, !llvm.loop !28

154:                                              ; preds = %143
  call void (...) @start_time()
  call void @kernels()
  call void (...) @end_time()
  %155 = load double, ptr @secs, align 8, !tbaa !11
  store double %155, ptr %6, align 8, !tbaa !11
  store double 1.000000e+00, ptr %7, align 8, !tbaa !11
  store i64 1, ptr %11, align 8, !tbaa !17
  br label %156

156:                                              ; preds = %182, %154
  %157 = load i64, ptr %11, align 8, !tbaa !17
  %158 = icmp slt i64 %157, 25
  br i1 %158, label %159, label %185

159:                                              ; preds = %156
  %160 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %161 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 6), i64 0, i64 %160
  %162 = load i64, ptr %11, align 8, !tbaa !17
  %163 = getelementptr inbounds [25 x double], ptr %161, i64 0, i64 %162
  %164 = load double, ptr %163, align 8, !tbaa !11
  %165 = fcmp olt double %164, 1.000000e-03
  br i1 %165, label %166, label %181

166:                                              ; preds = %159
  store double 0.000000e+00, ptr %7, align 8, !tbaa !11
  %167 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %168 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 6), i64 0, i64 %167
  %169 = load i64, ptr %11, align 8, !tbaa !17
  %170 = getelementptr inbounds [25 x double], ptr %168, i64 0, i64 %169
  store double 8.000000e-04, ptr %170, align 8, !tbaa !11
  %171 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %172 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 18), i64 0, i64 %171
  %173 = load i64, ptr %11, align 8, !tbaa !17
  %174 = getelementptr inbounds [25 x i64], ptr %172, i64 0, i64 %173
  %175 = load i64, ptr %174, align 8, !tbaa !17
  %176 = mul nsw i64 %175, 2
  %177 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %178 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 18), i64 0, i64 %177
  %179 = load i64, ptr %11, align 8, !tbaa !17
  %180 = getelementptr inbounds [25 x i64], ptr %178, i64 0, i64 %179
  store i64 %176, ptr %180, align 8, !tbaa !17
  br label %181

181:                                              ; preds = %166, %159
  br label %182

182:                                              ; preds = %181
  %183 = load i64, ptr %11, align 8, !tbaa !17
  %184 = add nsw i64 %183, 1
  store i64 %184, ptr %11, align 8, !tbaa !17
  br label %156, !llvm.loop !29

185:                                              ; preds = %156
  %186 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  %187 = load double, ptr %6, align 8, !tbaa !11
  %188 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i64 noundef %186, double noundef %187)
  %189 = load double, ptr %7, align 8, !tbaa !11
  %190 = fcmp ogt double %189, 0.000000e+00
  br i1 %190, label %191, label %192

191:                                              ; preds = %185
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  br label %201

192:                                              ; preds = %185
  %193 = load double, ptr %6, align 8, !tbaa !11
  %194 = load double, ptr @runSecs, align 8, !tbaa !11
  %195 = fdiv double %194, 5.000000e+00
  %196 = fcmp olt double %193, %195
  br i1 %196, label %197, label %200

197:                                              ; preds = %192
  %198 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  %199 = mul nsw i64 %198, 2
  store i64 %199, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  br label %200

200:                                              ; preds = %197, %192
  br label %201

201:                                              ; preds = %200, %191
  br label %202

202:                                              ; preds = %201
  %203 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %204 = icmp slt i64 %203, 0
  br i1 %204, label %138, label %205, !llvm.loop !30

205:                                              ; preds = %202
  %206 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  %207 = sitofp i64 %206 to double
  %208 = load i64, ptr %13, align 8, !tbaa !17
  %209 = sitofp i64 %208 to double
  %210 = fdiv double %207, %209
  store double %210, ptr %8, align 8, !tbaa !11
  store i64 1, ptr %11, align 8, !tbaa !17
  br label %211

211:                                              ; preds = %241, %205
  %212 = load i64, ptr %11, align 8, !tbaa !17
  %213 = icmp slt i64 %212, 25
  br i1 %213, label %214, label %244

214:                                              ; preds = %211
  %215 = load double, ptr @runSecs, align 8, !tbaa !11
  %216 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %217 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 6), i64 0, i64 %216
  %218 = load i64, ptr %11, align 8, !tbaa !17
  %219 = getelementptr inbounds [25 x double], ptr %217, i64 0, i64 %218
  %220 = load double, ptr %219, align 8, !tbaa !11
  %221 = fdiv double %215, %220
  %222 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %223 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 18), i64 0, i64 %222
  %224 = load i64, ptr %11, align 8, !tbaa !17
  %225 = getelementptr inbounds [25 x i64], ptr %223, i64 0, i64 %224
  %226 = load i64, ptr %225, align 8, !tbaa !17
  %227 = sitofp i64 %226 to double
  %228 = fmul double %221, %227
  %229 = load double, ptr %8, align 8, !tbaa !11
  %230 = fmul double %228, %229
  %231 = fptosi double %230 to i64
  %232 = add nsw i64 %231, 1
  %233 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %234 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 18), i64 0, i64 %233
  %235 = load i64, ptr %11, align 8, !tbaa !17
  %236 = getelementptr inbounds [25 x i64], ptr %234, i64 0, i64 %235
  store i64 %232, ptr %236, align 8, !tbaa !17
  %237 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %238 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 6), i64 0, i64 %237
  %239 = load i64, ptr %11, align 8, !tbaa !17
  %240 = getelementptr inbounds [25 x double], ptr %238, i64 0, i64 %239
  store double 0.000000e+00, ptr %240, align 8, !tbaa !11
  br label %241

241:                                              ; preds = %214
  %242 = load i64, ptr %11, align 8, !tbaa !17
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %11, align 8, !tbaa !17
  br label %211, !llvm.loop !31

244:                                              ; preds = %211
  %245 = load i64, ptr %13, align 8, !tbaa !17
  store i64 %245, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 2), align 8, !tbaa !26
  %246 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %247 = getelementptr inbounds [3 x i64], ptr %14, i64 0, i64 %246
  %248 = load i64, ptr %247, align 8, !tbaa !17
  %249 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i64 noundef %248)
  %250 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %251 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  %252 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  store i64 1, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 16), align 8, !tbaa !21
  %253 = load i32, ptr @reliability, align 4, !tbaa !5
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %255, label %256

255:                                              ; preds = %244
  store i32 1, ptr @runRel, align 4, !tbaa !5
  br label %256

256:                                              ; preds = %255, %244
  call void @kernels()
  %257 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %258 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 %257
  store double 0.000000e+00, ptr %258, align 8, !tbaa !11
  %259 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %260 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %259
  %261 = getelementptr inbounds [25 x double], ptr %260, i64 0, i64 1
  %262 = load double, ptr %261, align 8, !tbaa !11
  %263 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %264 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 %263
  store double %262, ptr %264, align 8, !tbaa !11
  %265 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %266 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 %265
  store double 0.000000e+00, ptr %266, align 8, !tbaa !11
  %267 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %268 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 %267
  store double 0.000000e+00, ptr %268, align 8, !tbaa !11
  %269 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %270 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 %269
  store double 0.000000e+00, ptr %270, align 8, !tbaa !11
  %271 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %272 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 %271
  store i64 0, ptr %272, align 8, !tbaa !17
  store i64 1, ptr %12, align 8, !tbaa !17
  br label %273

273:                                              ; preds = %359, %256
  %274 = load i64, ptr %12, align 8, !tbaa !17
  %275 = icmp sle i64 %274, 24
  br i1 %275, label %276, label %362

276:                                              ; preds = %273
  %277 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %278 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 %277
  %279 = load double, ptr %278, align 8, !tbaa !11
  %280 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %281 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %280
  %282 = load i64, ptr %12, align 8, !tbaa !17
  %283 = getelementptr inbounds [25 x double], ptr %281, i64 0, i64 %282
  %284 = load double, ptr %283, align 8, !tbaa !11
  %285 = fadd double %279, %284
  %286 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %287 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 %286
  store double %285, ptr %287, align 8, !tbaa !11
  %288 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %289 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 %288
  %290 = load double, ptr %289, align 8, !tbaa !11
  %291 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %292 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %291
  %293 = load i64, ptr %12, align 8, !tbaa !17
  %294 = getelementptr inbounds [25 x double], ptr %292, i64 0, i64 %293
  %295 = load double, ptr %294, align 8, !tbaa !11
  %296 = fdiv double 1.000000e+00, %295
  %297 = fadd double %290, %296
  %298 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %299 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 %298
  store double %297, ptr %299, align 8, !tbaa !11
  %300 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %301 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !11
  %303 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %304 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %303
  %305 = load i64, ptr %12, align 8, !tbaa !17
  %306 = getelementptr inbounds [25 x double], ptr %304, i64 0, i64 %305
  %307 = load double, ptr %306, align 8, !tbaa !11
  %308 = call double @log(double noundef %307) #7
  %309 = fadd double %302, %308
  %310 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %311 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 %310
  store double %309, ptr %311, align 8, !tbaa !11
  %312 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %313 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 %312
  %314 = load i64, ptr %313, align 8, !tbaa !17
  %315 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %316 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 11), i64 0, i64 %315
  %317 = load i64, ptr %12, align 8, !tbaa !17
  %318 = getelementptr inbounds [25 x i64], ptr %316, i64 0, i64 %317
  %319 = load i64, ptr %318, align 8, !tbaa !17
  %320 = add nsw i64 %314, %319
  %321 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %322 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 %321
  store i64 %320, ptr %322, align 8, !tbaa !17
  %323 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %324 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %323
  %325 = load i64, ptr %12, align 8, !tbaa !17
  %326 = getelementptr inbounds [25 x double], ptr %324, i64 0, i64 %325
  %327 = load double, ptr %326, align 8, !tbaa !11
  %328 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %329 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 %328
  %330 = load double, ptr %329, align 8, !tbaa !11
  %331 = fcmp olt double %327, %330
  br i1 %331, label %332, label %340

332:                                              ; preds = %276
  %333 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %334 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %333
  %335 = load i64, ptr %12, align 8, !tbaa !17
  %336 = getelementptr inbounds [25 x double], ptr %334, i64 0, i64 %335
  %337 = load double, ptr %336, align 8, !tbaa !11
  %338 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %339 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 %338
  store double %337, ptr %339, align 8, !tbaa !11
  br label %340

340:                                              ; preds = %332, %276
  %341 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %342 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %341
  %343 = load i64, ptr %12, align 8, !tbaa !17
  %344 = getelementptr inbounds [25 x double], ptr %342, i64 0, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !11
  %346 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %347 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 %346
  %348 = load double, ptr %347, align 8, !tbaa !11
  %349 = fcmp ogt double %345, %348
  br i1 %349, label %350, label %358

350:                                              ; preds = %340
  %351 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %352 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %351
  %353 = load i64, ptr %12, align 8, !tbaa !17
  %354 = getelementptr inbounds [25 x double], ptr %352, i64 0, i64 %353
  %355 = load double, ptr %354, align 8, !tbaa !11
  %356 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %357 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 %356
  store double %355, ptr %357, align 8, !tbaa !11
  br label %358

358:                                              ; preds = %350, %340
  br label %359

359:                                              ; preds = %358
  %360 = load i64, ptr %12, align 8, !tbaa !17
  %361 = add nsw i64 %360, 1
  store i64 %361, ptr %12, align 8, !tbaa !17
  br label %273, !llvm.loop !32

362:                                              ; preds = %273
  %363 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %364 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 %363
  %365 = load double, ptr %364, align 8, !tbaa !11
  %366 = fdiv double %365, 2.400000e+01
  %367 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %368 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 %367
  store double %366, ptr %368, align 8, !tbaa !11
  %369 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %370 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !11
  %372 = fdiv double 2.400000e+01, %371
  %373 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %374 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 %373
  store double %372, ptr %374, align 8, !tbaa !11
  %375 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %376 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 %375
  %377 = load double, ptr %376, align 8, !tbaa !11
  %378 = fdiv double %377, 2.400000e+01
  %379 = call double @exp(double noundef %378) #7
  %380 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %381 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 %380
  store double %379, ptr %381, align 8, !tbaa !11
  %382 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %383 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 %382
  %384 = load i64, ptr %383, align 8, !tbaa !17
  %385 = sdiv i64 %384, 24
  %386 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %387 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 %386
  store i64 %385, ptr %387, align 8, !tbaa !17
  %388 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 17), align 8, !tbaa !14
  %389 = icmp sgt i64 %388, 0
  br i1 %389, label %390, label %416

390:                                              ; preds = %362
  %391 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  %392 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %393 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 %392
  %394 = load double, ptr %393, align 8, !tbaa !11
  %395 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %394)
  %396 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %397 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 %396
  %398 = load double, ptr %397, align 8, !tbaa !11
  %399 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %398)
  %400 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %401 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 %400
  %402 = load double, ptr %401, align 8, !tbaa !11
  %403 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %402)
  %404 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %405 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 %404
  %406 = load double, ptr %405, align 8, !tbaa !11
  %407 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %406)
  %408 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %409 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 %408
  %410 = load double, ptr %409, align 8, !tbaa !11
  %411 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef %410)
  %412 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %413 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 %412
  %414 = load i64, ptr %413, align 8, !tbaa !17
  %415 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i64 noundef %414)
  br label %416

416:                                              ; preds = %390, %362
  br label %417

417:                                              ; preds = %416
  %418 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %419 = add nsw i64 %418, 1
  store i64 %419, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  br label %107, !llvm.loop !33

420:                                              ; preds = %107
  %421 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 3
  store double 0.000000e+00, ptr %421, align 8, !tbaa !11
  %422 = load double, ptr getelementptr inbounds ([25 x double], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 1), align 8, !tbaa !11
  %423 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 3
  store double %422, ptr %423, align 8, !tbaa !11
  %424 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 3
  store double 0.000000e+00, ptr %424, align 8, !tbaa !11
  %425 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 3
  store double 0.000000e+00, ptr %425, align 8, !tbaa !11
  %426 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 3
  store double 0.000000e+00, ptr %426, align 8, !tbaa !11
  %427 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 3
  store i64 0, ptr %427, align 8, !tbaa !17
  store double 0.000000e+00, ptr %10, align 8, !tbaa !11
  store i64 0, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  br label %428

428:                                              ; preds = %529, %420
  %429 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %430 = icmp slt i64 %429, 3
  br i1 %430, label %431, label %532

431:                                              ; preds = %428
  store i64 1, ptr %12, align 8, !tbaa !17
  br label %432

432:                                              ; preds = %520, %431
  %433 = load i64, ptr %12, align 8, !tbaa !17
  %434 = icmp sle i64 %433, 24
  br i1 %434, label %435, label %523

435:                                              ; preds = %432
  %436 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 3
  %437 = load double, ptr %436, align 8, !tbaa !11
  %438 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %439 = getelementptr inbounds [3 x double], ptr %15, i64 0, i64 %438
  %440 = load double, ptr %439, align 8, !tbaa !11
  %441 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %442 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %441
  %443 = load i64, ptr %12, align 8, !tbaa !17
  %444 = getelementptr inbounds [25 x double], ptr %442, i64 0, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !11
  %446 = call double @llvm.fmuladd.f64(double %440, double %445, double %437)
  %447 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 3
  store double %446, ptr %447, align 8, !tbaa !11
  %448 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 3
  %449 = load double, ptr %448, align 8, !tbaa !11
  %450 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %451 = getelementptr inbounds [3 x double], ptr %15, i64 0, i64 %450
  %452 = load double, ptr %451, align 8, !tbaa !11
  %453 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %454 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %453
  %455 = load i64, ptr %12, align 8, !tbaa !17
  %456 = getelementptr inbounds [25 x double], ptr %454, i64 0, i64 %455
  %457 = load double, ptr %456, align 8, !tbaa !11
  %458 = fdiv double %452, %457
  %459 = fadd double %449, %458
  %460 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 3
  store double %459, ptr %460, align 8, !tbaa !11
  %461 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 3
  %462 = load double, ptr %461, align 8, !tbaa !11
  %463 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %464 = getelementptr inbounds [3 x double], ptr %15, i64 0, i64 %463
  %465 = load double, ptr %464, align 8, !tbaa !11
  %466 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %467 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %466
  %468 = load i64, ptr %12, align 8, !tbaa !17
  %469 = getelementptr inbounds [25 x double], ptr %467, i64 0, i64 %468
  %470 = load double, ptr %469, align 8, !tbaa !11
  %471 = call double @log(double noundef %470) #7
  %472 = call double @llvm.fmuladd.f64(double %465, double %471, double %462)
  %473 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 3
  store double %472, ptr %473, align 8, !tbaa !11
  %474 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 3
  %475 = load i64, ptr %474, align 8, !tbaa !17
  %476 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %477 = getelementptr inbounds [3 x double], ptr %15, i64 0, i64 %476
  %478 = load double, ptr %477, align 8, !tbaa !11
  %479 = fptosi double %478 to i64
  %480 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %481 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 11), i64 0, i64 %480
  %482 = load i64, ptr %12, align 8, !tbaa !17
  %483 = getelementptr inbounds [25 x i64], ptr %481, i64 0, i64 %482
  %484 = load i64, ptr %483, align 8, !tbaa !17
  %485 = mul nsw i64 %479, %484
  %486 = add nsw i64 %475, %485
  %487 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 3
  store i64 %486, ptr %487, align 8, !tbaa !17
  %488 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %489 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %488
  %490 = load i64, ptr %12, align 8, !tbaa !17
  %491 = getelementptr inbounds [25 x double], ptr %489, i64 0, i64 %490
  %492 = load double, ptr %491, align 8, !tbaa !11
  %493 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 3
  %494 = load double, ptr %493, align 8, !tbaa !11
  %495 = fcmp olt double %492, %494
  br i1 %495, label %496, label %503

496:                                              ; preds = %435
  %497 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %498 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %497
  %499 = load i64, ptr %12, align 8, !tbaa !17
  %500 = getelementptr inbounds [25 x double], ptr %498, i64 0, i64 %499
  %501 = load double, ptr %500, align 8, !tbaa !11
  %502 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 3
  store double %501, ptr %502, align 8, !tbaa !11
  br label %503

503:                                              ; preds = %496, %435
  %504 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %505 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %504
  %506 = load i64, ptr %12, align 8, !tbaa !17
  %507 = getelementptr inbounds [25 x double], ptr %505, i64 0, i64 %506
  %508 = load double, ptr %507, align 8, !tbaa !11
  %509 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 3
  %510 = load double, ptr %509, align 8, !tbaa !11
  %511 = fcmp ogt double %508, %510
  br i1 %511, label %512, label %519

512:                                              ; preds = %503
  %513 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %514 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 7), i64 0, i64 %513
  %515 = load i64, ptr %12, align 8, !tbaa !17
  %516 = getelementptr inbounds [25 x double], ptr %514, i64 0, i64 %515
  %517 = load double, ptr %516, align 8, !tbaa !11
  %518 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 3
  store double %517, ptr %518, align 8, !tbaa !11
  br label %519

519:                                              ; preds = %512, %503
  br label %520

520:                                              ; preds = %519
  %521 = load i64, ptr %12, align 8, !tbaa !17
  %522 = add nsw i64 %521, 1
  store i64 %522, ptr %12, align 8, !tbaa !17
  br label %432, !llvm.loop !34

523:                                              ; preds = %432
  %524 = load double, ptr %10, align 8, !tbaa !11
  %525 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %526 = getelementptr inbounds [3 x double], ptr %15, i64 0, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !11
  %528 = fadd double %524, %527
  store double %528, ptr %10, align 8, !tbaa !11
  br label %529

529:                                              ; preds = %523
  %530 = load i64, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  %531 = add nsw i64 %530, 1
  store i64 %531, ptr getelementptr inbounds (%struct.Parameters, ptr @as2, i32 0, i32 23), align 8, !tbaa !19
  br label %428, !llvm.loop !35

532:                                              ; preds = %428
  %533 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 3
  %534 = load double, ptr %533, align 8, !tbaa !11
  %535 = load double, ptr %10, align 8, !tbaa !11
  %536 = fmul double 2.400000e+01, %535
  %537 = fdiv double %534, %536
  %538 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 3
  store double %537, ptr %538, align 8, !tbaa !11
  %539 = load double, ptr %10, align 8, !tbaa !11
  %540 = fmul double 2.400000e+01, %539
  %541 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 3
  %542 = load double, ptr %541, align 8, !tbaa !11
  %543 = fdiv double %540, %542
  %544 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 3
  store double %543, ptr %544, align 8, !tbaa !11
  %545 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 3
  %546 = load double, ptr %545, align 8, !tbaa !11
  %547 = load double, ptr %10, align 8, !tbaa !11
  %548 = fmul double 2.400000e+01, %547
  %549 = fdiv double %546, %548
  %550 = call double @exp(double noundef %549) #7
  %551 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 3
  store double %550, ptr %551, align 8, !tbaa !11
  %552 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 3
  %553 = load i64, ptr %552, align 8, !tbaa !17
  %554 = sitofp i64 %553 to double
  %555 = load double, ptr %10, align 8, !tbaa !11
  %556 = fmul double 2.400000e+01, %555
  %557 = fdiv double %554, %556
  %558 = fptosi double %557 to i64
  %559 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 3
  store i64 %558, ptr %559, align 8, !tbaa !17
  %560 = call i32 (ptr, ...) @printf(ptr noundef @.str.20)
  %561 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  %562 = call i32 (ptr, ...) @printf(ptr noundef @.str.22)
  %563 = call i32 (ptr, ...) @printf(ptr noundef @.str.23)
  %564 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 3
  %565 = load double, ptr %564, align 8, !tbaa !11
  %566 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %565)
  %567 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 3
  %568 = load double, ptr %567, align 8, !tbaa !11
  %569 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %568)
  %570 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 3
  %571 = load double, ptr %570, align 8, !tbaa !11
  %572 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %571)
  %573 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 3
  %574 = load double, ptr %573, align 8, !tbaa !11
  %575 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %574)
  %576 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 3
  %577 = load double, ptr %576, align 8, !tbaa !11
  %578 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef %577)
  %579 = getelementptr inbounds [4 x i64], ptr %23, i64 0, i64 3
  %580 = load i64, ptr %579, align 8, !tbaa !17
  %581 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i64 noundef %580)
  %582 = load i32, ptr @reliability, align 4, !tbaa !5
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %584, label %598

584:                                              ; preds = %532
  %585 = load i32, ptr @compareFail, align 4, !tbaa !5
  %586 = icmp ne i32 %585, 0
  br i1 %586, label %595, label %587

587:                                              ; preds = %584
  %588 = load i32, ptr @nsRes, align 4, !tbaa !5
  %589 = icmp ne i32 %588, 0
  br i1 %589, label %590, label %592

590:                                              ; preds = %587
  %591 = call i32 (ptr, ...) @printf(ptr noundef @.str.24)
  br label %594

592:                                              ; preds = %587
  %593 = call i32 (ptr, ...) @printf(ptr noundef @.str.25)
  br label %594

594:                                              ; preds = %592, %590
  br label %597

595:                                              ; preds = %584
  %596 = call i32 (ptr, ...) @printf(ptr noundef @.str.26)
  br label %597

597:                                              ; preds = %595, %594
  br label %598

598:                                              ; preds = %597, %532
  %599 = load i32, ptr @reliability, align 4, !tbaa !5
  %600 = icmp ne i32 %599, 0
  br i1 %600, label %604, label %601

601:                                              ; preds = %598
  %602 = load i64, ptr %17, align 8, !tbaa !17
  %603 = trunc i64 %602 to i32
  call void @checkOut(i32 noundef %603)
  br label %604

604:                                              ; preds = %601, %598
  %605 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 720, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  ret i32 0
}

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

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

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

; Function Attrs: nounwind
declare i32 @__isoc99_sscanf(ptr noundef, ptr noundef, ...) #4

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

declare void @local_time(...) #5

declare void @start_time(...) #5

; Function Attrs: nounwind uwtable
declare dso_local i64 @endloop(i64 noundef) #0

declare void @end_time(...) #5

; Function Attrs: nounwind
declare double @log(double noundef) #4

; Function Attrs: nounwind
declare double @exp(double noundef) #4

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @kernels() #0

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 = { 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 = !{!7, !7, i64 0}
!14 = !{!15, !16, i64 4472}
!15 = !{!"Parameters", !16, i64 0, !16, i64 8, !16, i64 16, !12, i64 24, !7, i64 32, !7, i64 632, !7, i64 1232, !7, i64 1832, !7, i64 2432, !7, i64 3032, !7, i64 3232, !7, i64 3832, !12, i64 4432, !12, i64 4440, !12, i64 4448, !16, i64 4456, !16, i64 4464, !16, i64 4472, !7, i64 4480, !16, i64 5080, !16, i64 5088, !16, i64 5096, !16, i64 5104, !16, i64 5112, !16, i64 5120, !12, i64 5128, !16, i64 5136}
!16 = !{!"long", !7, i64 0}
!17 = !{!16, !16, i64 0}
!18 = !{!15, !16, i64 8}
!19 = !{!15, !16, i64 5112}
!20 = !{!15, !16, i64 4456}
!21 = !{!15, !16, i64 4464}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!15, !12, i64 4448}
!25 = distinct !{!25, !23}
!26 = !{!15, !16, i64 16}
!27 = distinct !{!27, !23}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}


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

%struct.Parameters = type { i64, i64, i64, double, [3 x [25 x double]], [3 x [25 x i64]], [3 x [25 x double]], [3 x [25 x double]], [3 x [25 x double]], [25 x i64], [3 x [25 x i64]], [3 x [25 x i64]], double, double, double, i64, i64, i64, [3 x [25 x i64]], i64, i64, i64, i64, i64, i64, double, i64 }

@runSecs = external dso_local local_unnamed_addr global double, align 8
@reliability = external dso_local local_unnamed_addr global i32, align 4
@nsRes = external dso_local local_unnamed_addr global i32, align 4
@compareFail = external dso_local local_unnamed_addr global i32, align 4
@__const.main.mul = external hidden unnamed_addr constant [3 x i64], align 16
@__const.main.weight = external hidden unnamed_addr constant [3 x double], align 16
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [33 x i8], align 1
@as2 = external dso_local local_unnamed_addr global %struct.Parameters, align 8
@runRel = external dso_local local_unnamed_addr global i32, align 4
@secs = external local_unnamed_addr global double, align 8
@.str.5 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [39 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca [4 x double], align 16
  %4 = alloca [4 x double], align 16
  %5 = alloca [4 x double], align 16
  %6 = alloca [4 x double], align 16
  %7 = alloca [4 x double], align 16
  %8 = alloca [4 x i64], align 16
  %9 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  %10 = icmp sgt i32 %0, 2
  br i1 %10, label %11, label %21

11:                                               ; preds = %2
  %12 = getelementptr inbounds i8, ptr %1, i64 16
  %13 = load ptr, ptr %12, align 8, !tbaa !5
  %14 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %13, ptr noundef nonnull @.str, ptr noundef nonnull %9) #7
  %15 = load i32, ptr %9, align 4, !tbaa !9
  %16 = icmp sgt i32 %15, 0
  br i1 %16, label %17, label %21

17:                                               ; preds = %11
  %18 = uitofp nneg i32 %15 to double
  store double %18, ptr @runSecs, align 8, !tbaa !11
  store i32 1, ptr @reliability, align 4, !tbaa !9
  %19 = icmp ugt i32 %15, 60
  br i1 %19, label %20, label %21

20:                                               ; preds = %17
  store double 6.000000e+01, ptr @runSecs, align 8, !tbaa !11
  br label %21

21:                                               ; preds = %11, %20, %17, %2
  %22 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  %23 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef nonnull @.str.3)
  call void (...) @local_time() #7
  %24 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  store i64 -20, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  store i64 1, ptr getelementptr inbounds (i8, ptr @as2, i64 4480), align 8, !tbaa !16
  store i64 1000, ptr getelementptr inbounds (i8, ptr @as2, i64 8), align 8, !tbaa !17
  store i64 0, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  store i32 0, ptr @runRel, align 4, !tbaa !9
  br label %25

25:                                               ; preds = %41, %21
  call void (...) @start_time() #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) getelementptr inbounds (i8, ptr @as2, i64 4456), i8 0, i64 16, i1 false)
  %26 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  %27 = add nsw i64 %26, 1
  store i64 %27, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  br label %28

28:                                               ; preds = %28, %25
  %29 = call i64 @endloop(i64 noundef 0)
  %30 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 4456), align 8, !tbaa !19
  %31 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 8), align 8, !tbaa !17
  %32 = icmp slt i64 %30, %31
  br i1 %32, label %28, label %33, !llvm.loop !20

33:                                               ; preds = %28
  call void (...) @end_time() #7
  %34 = load double, ptr @secs, align 8, !tbaa !11
  store double %34, ptr getelementptr inbounds (i8, ptr @as2, i64 4448), align 8, !tbaa !22
  %35 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 8), align 8, !tbaa !17
  %36 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i64 noundef %35, double noundef %34)
  %37 = load double, ptr getelementptr inbounds (i8, ptr @as2, i64 4448), align 8, !tbaa !22
  %38 = fcmp ogt double %37, 2.000000e-01
  br i1 %38, label %.thread, label %39

.thread:                                          ; preds = %33
  store i64 0, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  br label %.loopexit79

39:                                               ; preds = %33
  %.pr = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  %40 = icmp slt i64 %.pr, 0
  br i1 %40, label %41, label %.loopexit79

41:                                               ; preds = %39
  %42 = load double, ptr @runSecs, align 8, !tbaa !11
  %43 = fdiv double %42, 5.000000e+01
  %44 = fcmp olt double %37, %43
  %45 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 8), align 8, !tbaa !17
  %46 = shl nsw i64 %45, 1
  %47 = mul nsw i64 %45, 10
  %storemerge78 = select i1 %44, i64 %47, i64 %46
  store i64 %storemerge78, ptr getelementptr inbounds (i8, ptr @as2, i64 8), align 8, !tbaa !17
  br label %25

.loopexit79:                                      ; preds = %39, %.thread
  %48 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 8), align 8, !tbaa !17
  %49 = sitofp i64 %48 to double
  %50 = fdiv double %37, %49
  store double %50, ptr getelementptr inbounds (i8, ptr @as2, i64 4448), align 8, !tbaa !22
  %51 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, double noundef %50)
  store i64 0, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  br label %52

52:                                               ; preds = %.loopexit79, %237
  %53 = phi i64 [ 0, %.loopexit79 ], [ %239, %237 ]
  %54 = getelementptr inbounds [3 x i64], ptr @__const.main.mul, i64 0, i64 %53
  %55 = load i64, ptr %54, align 8, !tbaa !16
  store i64 -20, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  %56 = shl nsw i64 %55, 1
  store i64 %56, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  store i32 0, ptr @runRel, align 4, !tbaa !9
  %57 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %53, i64 1
  store i64 1, ptr %57, align 8, !tbaa !16
  %58 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %53, i64 2
  store i64 1, ptr %58, align 8, !tbaa !16
  %59 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %53, i64 3
  store i64 1, ptr %59, align 8, !tbaa !16
  %60 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %53, i64 4
  store i64 1, ptr %60, align 8, !tbaa !16
  %61 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %62 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 5
  store i64 1, ptr %62, align 8, !tbaa !16
  %63 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 6
  store i64 1, ptr %63, align 8, !tbaa !16
  %64 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 7
  store i64 1, ptr %64, align 8, !tbaa !16
  %65 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 8
  store i64 1, ptr %65, align 8, !tbaa !16
  %66 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 9
  store i64 1, ptr %66, align 8, !tbaa !16
  %67 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 10
  store i64 1, ptr %67, align 8, !tbaa !16
  %68 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 11
  store i64 1, ptr %68, align 8, !tbaa !16
  %69 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 12
  store i64 1, ptr %69, align 8, !tbaa !16
  %70 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 13
  store i64 1, ptr %70, align 8, !tbaa !16
  %71 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 14
  store i64 1, ptr %71, align 8, !tbaa !16
  %72 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 15
  store i64 1, ptr %72, align 8, !tbaa !16
  %73 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 16
  store i64 1, ptr %73, align 8, !tbaa !16
  %74 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 17
  store i64 1, ptr %74, align 8, !tbaa !16
  %75 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 18
  store i64 1, ptr %75, align 8, !tbaa !16
  %76 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 19
  store i64 1, ptr %76, align 8, !tbaa !16
  %77 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 20
  store i64 1, ptr %77, align 8, !tbaa !16
  %78 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 21
  store i64 1, ptr %78, align 8, !tbaa !16
  %79 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 22
  store i64 1, ptr %79, align 8, !tbaa !16
  %80 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 23
  store i64 1, ptr %80, align 8, !tbaa !16
  %81 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %61, i64 24
  store i64 1, ptr %81, align 8, !tbaa !16
  %82 = mul nsw i64 %55, 200
  %83 = load i32, ptr @reliability, align 4, !tbaa !9
  %.not68 = icmp eq i32 %83, 0
  br i1 %.not68, label %85, label %84

84:                                               ; preds = %52
  call void (...) @local_time() #7
  %.pre = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  br label %85

85:                                               ; preds = %84, %52
  %86 = phi i64 [ %.pre, %84 ], [ %61, %52 ]
  %87 = add nsw i64 %86, 1
  %88 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i64 noundef %87)
  %.pre129 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  br label %89

89:                                               ; preds = %120, %85
  %90 = phi i64 [ %.pr72, %120 ], [ %.pre129, %85 ]
  %91 = add nsw i64 %90, 1
  store i64 %91, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  %92 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  %93 = shl nsw i64 %92, 1
  store i64 %93, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  store i64 0, ptr getelementptr inbounds (i8, ptr @as2, i64 4464), align 8, !tbaa !24
  %94 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %95 = mul nsw i64 %94, 200
  %scevgep = getelementptr i8, ptr getelementptr inbounds (i8, ptr @as2, i64 1240), i64 %95
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(192) %scevgep, i8 0, i64 192, i1 false), !tbaa !11
  call void (...) @start_time() #7
  call void @kernels()
  call void (...) @end_time() #7
  %96 = load double, ptr @secs, align 8, !tbaa !11
  %.pre131 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  br label %97

97:                                               ; preds = %89, %106
  %98 = phi i64 [ %.pre131, %89 ], [ %107, %106 ]
  %.084 = phi double [ 1.000000e+00, %89 ], [ %.1, %106 ]
  %.283 = phi i64 [ 1, %89 ], [ %108, %106 ]
  %99 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1232), i64 0, i64 %98, i64 %.283
  %100 = load double, ptr %99, align 8, !tbaa !11
  %101 = fcmp olt double %100, 1.000000e-03
  br i1 %101, label %102, label %106

102:                                              ; preds = %97
  store double 8.000000e-04, ptr %99, align 8, !tbaa !11
  %103 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %98, i64 %.283
  %104 = load i64, ptr %103, align 8, !tbaa !16
  %105 = shl nsw i64 %104, 1
  store i64 %105, ptr %103, align 8, !tbaa !16
  %.pre130 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  br label %106

106:                                              ; preds = %97, %102
  %107 = phi i64 [ %.pre130, %102 ], [ %98, %97 ]
  %.1 = phi double [ 0.000000e+00, %102 ], [ %.084, %97 ]
  %108 = add nuw nsw i64 %.283, 1
  %exitcond.not = icmp eq i64 %108, 25
  br i1 %exitcond.not, label %109, label %97, !llvm.loop !25

109:                                              ; preds = %106
  %110 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  %111 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i64 noundef %110, double noundef %96)
  %112 = fcmp ogt double %.1, 0.000000e+00
  br i1 %112, label %.thread73, label %113

.thread73:                                        ; preds = %109
  store i64 0, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  %.pre132 = load double, ptr @runSecs, align 8, !tbaa !11
  br label %.loopexit

113:                                              ; preds = %109
  %114 = load double, ptr @runSecs, align 8, !tbaa !11
  %115 = fdiv double %114, 5.000000e+00
  %116 = fcmp olt double %96, %115
  br i1 %116, label %117, label %120

117:                                              ; preds = %113
  %118 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  %119 = shl nsw i64 %118, 1
  store i64 %119, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  br label %120

120:                                              ; preds = %117, %113
  %.pr72 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  %121 = icmp slt i64 %.pr72, 0
  br i1 %121, label %89, label %.loopexit, !llvm.loop !26

.loopexit:                                        ; preds = %120, %.thread73
  %122 = phi double [ %.pre132, %.thread73 ], [ %114, %120 ]
  %123 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  %124 = sitofp i64 %123 to double
  %125 = sitofp i64 %82 to double
  %126 = fdiv double %124, %125
  %.pre133 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  br label %127

127:                                              ; preds = %.loopexit, %127
  %128 = phi i64 [ %.pre133, %.loopexit ], [ %139, %127 ]
  %.385 = phi i64 [ 1, %.loopexit ], [ %141, %127 ]
  %129 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1232), i64 0, i64 %128, i64 %.385
  %130 = load double, ptr %129, align 8, !tbaa !11
  %131 = fdiv double %122, %130
  %132 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 4480), i64 0, i64 %128, i64 %.385
  %133 = load i64, ptr %132, align 8, !tbaa !16
  %134 = sitofp i64 %133 to double
  %135 = fmul double %131, %134
  %136 = fmul double %126, %135
  %137 = fptosi double %136 to i64
  %138 = add nsw i64 %137, 1
  store i64 %138, ptr %132, align 8, !tbaa !16
  %139 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %140 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1232), i64 0, i64 %139, i64 %.385
  store double 0.000000e+00, ptr %140, align 8, !tbaa !11
  %141 = add nuw nsw i64 %.385, 1
  %exitcond126.not = icmp eq i64 %141, 25
  br i1 %exitcond126.not, label %142, label %127, !llvm.loop !27

142:                                              ; preds = %127
  store i64 %82, ptr getelementptr inbounds (i8, ptr @as2, i64 16), align 8, !tbaa !23
  %143 = getelementptr inbounds [3 x i64], ptr @__const.main.mul, i64 0, i64 %139
  %144 = load i64, ptr %143, align 8, !tbaa !16
  %145 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i64 noundef %144)
  %146 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %147 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %148 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  store i64 1, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  store i64 0, ptr getelementptr inbounds (i8, ptr @as2, i64 4464), align 8, !tbaa !24
  %149 = load i32, ptr @reliability, align 4, !tbaa !9
  %.not69 = icmp eq i32 %149, 0
  br i1 %.not69, label %151, label %150

150:                                              ; preds = %142
  store i32 1, ptr @runRel, align 4, !tbaa !9
  br label %151

151:                                              ; preds = %150, %142
  call void @kernels()
  %152 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %153 = getelementptr inbounds [4 x double], ptr %3, i64 0, i64 %152
  store double 0.000000e+00, ptr %153, align 8, !tbaa !11
  %154 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1832), i64 0, i64 %152, i64 1
  %155 = load double, ptr %154, align 8, !tbaa !11
  %156 = getelementptr inbounds [4 x double], ptr %4, i64 0, i64 %152
  store double %155, ptr %156, align 8, !tbaa !11
  %157 = getelementptr inbounds [4 x double], ptr %5, i64 0, i64 %152
  store double 0.000000e+00, ptr %157, align 8, !tbaa !11
  %158 = getelementptr inbounds [4 x double], ptr %6, i64 0, i64 %152
  store double 0.000000e+00, ptr %158, align 8, !tbaa !11
  %159 = getelementptr inbounds [4 x double], ptr %7, i64 0, i64 %152
  store double 0.000000e+00, ptr %159, align 8, !tbaa !11
  %160 = getelementptr inbounds [4 x i64], ptr %8, i64 0, i64 %152
  store i64 0, ptr %160, align 8, !tbaa !16
  br label %161

161:                                              ; preds = %151, %193
  %162 = phi double [ 0.000000e+00, %151 ], [ %174, %193 ]
  %163 = phi i64 [ %152, %151 ], [ %175, %193 ]
  %.05686 = phi i64 [ 1, %151 ], [ %194, %193 ]
  %164 = getelementptr inbounds [4 x double], ptr %5, i64 0, i64 %163
  %165 = load double, ptr %164, align 8, !tbaa !11
  %166 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1832), i64 0, i64 %163, i64 %.05686
  %167 = load double, ptr %166, align 8, !tbaa !11
  %168 = fadd double %165, %167
  store double %168, ptr %164, align 8, !tbaa !11
  %169 = getelementptr inbounds [4 x double], ptr %6, i64 0, i64 %163
  %170 = load double, ptr %169, align 8, !tbaa !11
  %171 = fdiv double 1.000000e+00, %167
  %172 = fadd double %171, %170
  store double %172, ptr %169, align 8, !tbaa !11
  %173 = call double @log(double noundef %167) #7
  %174 = fadd double %162, %173
  %175 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %176 = getelementptr inbounds [4 x double], ptr %7, i64 0, i64 %175
  store double %174, ptr %176, align 8, !tbaa !11
  %177 = getelementptr inbounds [4 x i64], ptr %8, i64 0, i64 %175
  %178 = load i64, ptr %177, align 8, !tbaa !16
  %179 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 3832), i64 0, i64 %175, i64 %.05686
  %180 = load i64, ptr %179, align 8, !tbaa !16
  %181 = add nsw i64 %180, %178
  store i64 %181, ptr %177, align 8, !tbaa !16
  %182 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1832), i64 0, i64 %175, i64 %.05686
  %183 = load double, ptr %182, align 8, !tbaa !11
  %184 = getelementptr inbounds [4 x double], ptr %4, i64 0, i64 %175
  %185 = load double, ptr %184, align 8, !tbaa !11
  %186 = fcmp olt double %183, %185
  br i1 %186, label %187, label %188

187:                                              ; preds = %161
  store double %183, ptr %184, align 8, !tbaa !11
  br label %188

188:                                              ; preds = %187, %161
  %189 = getelementptr inbounds [4 x double], ptr %3, i64 0, i64 %175
  %190 = load double, ptr %189, align 8, !tbaa !11
  %191 = fcmp ogt double %183, %190
  br i1 %191, label %192, label %193

192:                                              ; preds = %188
  store double %183, ptr %189, align 8, !tbaa !11
  br label %193

193:                                              ; preds = %188, %192
  %194 = add nuw nsw i64 %.05686, 1
  %exitcond127.not = icmp eq i64 %194, 25
  br i1 %exitcond127.not, label %195, label %161, !llvm.loop !28

195:                                              ; preds = %193
  %196 = getelementptr inbounds [4 x double], ptr %5, i64 0, i64 %175
  %197 = load double, ptr %196, align 8, !tbaa !11
  %198 = fdiv double %197, 2.400000e+01
  store double %198, ptr %196, align 8, !tbaa !11
  %199 = getelementptr inbounds [4 x double], ptr %6, i64 0, i64 %175
  %200 = load double, ptr %199, align 8, !tbaa !11
  %201 = fdiv double 2.400000e+01, %200
  store double %201, ptr %199, align 8, !tbaa !11
  %202 = fdiv double %174, 2.400000e+01
  %203 = call double @exp(double noundef %202) #7
  %204 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %205 = getelementptr inbounds [4 x double], ptr %7, i64 0, i64 %204
  store double %203, ptr %205, align 8, !tbaa !11
  %206 = getelementptr inbounds [4 x i64], ptr %8, i64 0, i64 %204
  %207 = load i64, ptr %206, align 8, !tbaa !16
  %208 = sdiv i64 %207, 24
  store i64 %208, ptr %206, align 8, !tbaa !16
  %209 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 4472), align 8, !tbaa !13
  %210 = icmp sgt i64 %209, 0
  br i1 %210, label %211, label %237

211:                                              ; preds = %195
  %212 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  %213 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %214 = getelementptr inbounds [4 x double], ptr %3, i64 0, i64 %213
  %215 = load double, ptr %214, align 8, !tbaa !11
  %216 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %215)
  %217 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %218 = getelementptr inbounds [4 x double], ptr %5, i64 0, i64 %217
  %219 = load double, ptr %218, align 8, !tbaa !11
  %220 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %219)
  %221 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %222 = getelementptr inbounds [4 x double], ptr %7, i64 0, i64 %221
  %223 = load double, ptr %222, align 8, !tbaa !11
  %224 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %223)
  %225 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %226 = getelementptr inbounds [4 x double], ptr %6, i64 0, i64 %225
  %227 = load double, ptr %226, align 8, !tbaa !11
  %228 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %227)
  %229 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %230 = getelementptr inbounds [4 x double], ptr %4, i64 0, i64 %229
  %231 = load double, ptr %230, align 8, !tbaa !11
  %232 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef %231)
  %233 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %234 = getelementptr inbounds [4 x i64], ptr %8, i64 0, i64 %233
  %235 = load i64, ptr %234, align 8, !tbaa !16
  %236 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i64 noundef %235)
  %.pre134 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  br label %237

237:                                              ; preds = %195, %211
  %238 = phi i64 [ %204, %195 ], [ %.pre134, %211 ]
  %239 = add nsw i64 %238, 1
  store i64 %239, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %240 = icmp slt i64 %238, 2
  br i1 %240, label %52, label %241, !llvm.loop !29

241:                                              ; preds = %237
  %242 = load double, ptr getelementptr inbounds (i8, ptr @as2, i64 1840), align 8, !tbaa !11
  store i64 0, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  br label %.preheader

.preheader:                                       ; preds = %241, %278
  %243 = phi i64 [ 0, %241 ], [ %280, %278 ]
  %.053117 = phi double [ 0.000000e+00, %241 ], [ %279, %278 ]
  %.lcssa90102115 = phi double [ 0.000000e+00, %241 ], [ %256, %278 ]
  %.lcssa94106113 = phi i64 [ 0, %241 ], [ %270, %278 ]
  %.lcssa96108112 = phi double [ %242, %241 ], [ %274, %278 ]
  %.lcssa98110111 = phi double [ 0.000000e+00, %241 ], [ %276, %278 ]
  %244 = phi <2 x double> [ zeroinitializer, %241 ], [ %262, %278 ]
  %.phi.trans.insert = getelementptr inbounds [3 x double], ptr @__const.main.weight, i64 0, i64 %243
  %.pre135 = load double, ptr %.phi.trans.insert, align 8, !tbaa !11
  br label %245

245:                                              ; preds = %.preheader, %245
  %246 = phi double [ %.pre135, %.preheader ], [ %265, %245 ]
  %247 = phi i64 [ %243, %.preheader ], [ %263, %245 ]
  %.15799 = phi i64 [ 1, %.preheader ], [ %277, %245 ]
  %248 = phi double [ %.lcssa90102115, %.preheader ], [ %256, %245 ]
  %249 = phi i64 [ %.lcssa94106113, %.preheader ], [ %270, %245 ]
  %250 = phi double [ %.lcssa96108112, %.preheader ], [ %274, %245 ]
  %251 = phi double [ %.lcssa98110111, %.preheader ], [ %276, %245 ]
  %252 = phi <2 x double> [ %244, %.preheader ], [ %262, %245 ]
  %253 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1832), i64 0, i64 %247, i64 %.15799
  %254 = load double, ptr %253, align 8, !tbaa !11
  %255 = fdiv double %246, %254
  %256 = fadd double %255, %248
  %257 = call double @log(double noundef %254) #7
  %258 = insertelement <2 x double> poison, double %246, i64 0
  %259 = shufflevector <2 x double> %258, <2 x double> poison, <2 x i32> zeroinitializer
  %260 = insertelement <2 x double> poison, double %254, i64 0
  %261 = insertelement <2 x double> %260, double %257, i64 1
  %262 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %259, <2 x double> %261, <2 x double> %252)
  %263 = load i64, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %264 = getelementptr inbounds [3 x double], ptr @__const.main.weight, i64 0, i64 %263
  %265 = load double, ptr %264, align 8, !tbaa !11
  %266 = fptosi double %265 to i64
  %267 = getelementptr inbounds [3 x [25 x i64]], ptr getelementptr inbounds (i8, ptr @as2, i64 3832), i64 0, i64 %263, i64 %.15799
  %268 = load i64, ptr %267, align 8, !tbaa !16
  %269 = mul nsw i64 %268, %266
  %270 = add nsw i64 %269, %249
  %271 = getelementptr inbounds [3 x [25 x double]], ptr getelementptr inbounds (i8, ptr @as2, i64 1832), i64 0, i64 %263, i64 %.15799
  %272 = load double, ptr %271, align 8, !tbaa !11
  %273 = fcmp olt double %272, %250
  %274 = select i1 %273, double %272, double %250
  %275 = fcmp ogt double %272, %251
  %276 = select i1 %275, double %272, double %251
  %277 = add nuw nsw i64 %.15799, 1
  %exitcond128.not = icmp eq i64 %277, 25
  br i1 %exitcond128.not, label %278, label %245, !llvm.loop !30

278:                                              ; preds = %245
  %279 = fadd double %.053117, %265
  %280 = add nsw i64 %263, 1
  store i64 %280, ptr getelementptr inbounds (i8, ptr @as2, i64 5112), align 8, !tbaa !18
  %281 = icmp slt i64 %263, 2
  br i1 %281, label %.preheader, label %282, !llvm.loop !31

282:                                              ; preds = %278
  %283 = fmul double %279, 2.400000e+01
  %284 = extractelement <2 x double> %262, i64 0
  %285 = fdiv double %284, %283
  %286 = fdiv double %283, %256
  %287 = extractelement <2 x double> %262, i64 1
  %288 = fdiv double %287, %283
  %289 = call double @exp(double noundef %288) #7
  %290 = sitofp i64 %270 to double
  %291 = fdiv double %290, %283
  %292 = fptosi double %291 to i64
  %293 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20)
  %294 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  %295 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22)
  %296 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23)
  %297 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %276)
  %298 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %285)
  %299 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, double noundef %289)
  %300 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %286)
  %301 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef %274)
  %302 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i64 noundef %292)
  %303 = load i32, ptr @reliability, align 4, !tbaa !9
  %.not = icmp eq i32 %303, 0
  br i1 %.not, label %.thread76, label %304

304:                                              ; preds = %282
  %305 = load i32, ptr @compareFail, align 4, !tbaa !9
  %.not65 = icmp eq i32 %305, 0
  %306 = load i32, ptr @nsRes, align 4
  %.not66 = icmp eq i32 %306, 0
  %.str.25..str.24 = select i1 %.not66, ptr @.str.25, ptr @.str.24
  %.str.26.sink = select i1 %.not65, ptr %.str.25..str.24, ptr @.str.26
  %307 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.26.sink)
  %.pr75 = load i32, ptr @reliability, align 4, !tbaa !9
  %.not67 = icmp eq i32 %.pr75, 0
  br i1 %.not67, label %.thread76, label %308

.thread76:                                        ; preds = %282, %304
  call void @checkOut(i32 noundef 0)
  br label %308

308:                                              ; preds = %.thread76, %304
  %309 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #7
  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: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @endloop(i64 noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @log(double noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @exp(double noundef) local_unnamed_addr #5

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @kernels() local_unnamed_addr #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 #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 memory(write) "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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !15, i64 4472}
!14 = !{!"Parameters", !15, i64 0, !15, i64 8, !15, i64 16, !12, i64 24, !7, i64 32, !7, i64 632, !7, i64 1232, !7, i64 1832, !7, i64 2432, !7, i64 3032, !7, i64 3232, !7, i64 3832, !12, i64 4432, !12, i64 4440, !12, i64 4448, !15, i64 4456, !15, i64 4464, !15, i64 4472, !7, i64 4480, !15, i64 5080, !15, i64 5088, !15, i64 5096, !15, i64 5104, !15, i64 5112, !15, i64 5120, !12, i64 5128, !15, i64 5136}
!15 = !{!"long", !7, i64 0}
!16 = !{!15, !15, i64 0}
!17 = !{!14, !15, i64 8}
!18 = !{!14, !15, i64 5112}
!19 = !{!14, !15, i64 4456}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!14, !12, i64 4448}
!23 = !{!14, !15, i64 16}
!24 = !{!14, !15, i64 4464}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !21}
!31 = distinct !{!31, !21}


; Effective O3 passes: BDCEPass,DSEPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass