#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ mysub(int, double *, double *);
int /*<<< orphan*/ printf(char *, ...);
main() {
  int i, j;
  double alpha, avg, t1, t2, tnotim;
  double x[100], y[100];
  double SuperLU_timer_();
  for (i = 0; i < 100; ++i) {
    x[i] = 1.0 / (double)(i + 1);
    y[i] = (double)(100 - i) / (double)100;
  }
  alpha = 0.315;
  t1 = SuperLU_timer_();
  for (j = 0; j < 10000; ++j) {
    for (i = 0; i < 100; ++i)
      y[i] += alpha * x[i];
    alpha = -alpha;
  }
  t2 = SuperLU_timer_();
  printf("Time for 1,000,000 DAXPY ops  = %10.3g seconds\n", t2 - t1);
  if (t2 - t1 > 0.)
    printf("DAXPY performance rate        = %10.3g mflops\n", 2. / (t2 - t1));
  else
    printf("*** Error:  Time for operations was zero\n");
  tnotim = t2 - t1;
  t1 = SuperLU_timer_();
  for (j = 0; j < 10000; ++j) {
    for (i = 0; i < 100; ++i)
      y[i] += alpha * x[i];
    alpha = -alpha;
    t2 = SuperLU_timer_();
  }
  printf("Including DSECND, time        = %10.3g seconds\n", t2 - t1);
  avg = ((t2 - t1) - tnotim) * 1000. / (double)10000;
  printf("Average time for DSECND       = %10.3g milliseconds\n", avg);
  if (tnotim > 0.)
    printf("Equivalent floating point ops = %10.3g ops\n",
           1000. * avg / tnotim);
  mysub(100, x, y);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x680,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0x64,-0x8(%rbp)
jge    11a9 <main+0x79>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0xec3(%rip),%xmm0
divsd  %xmm1,%xmm0
movslq -0x8(%rbp),%rax
movsd  %xmm0,-0x360(%rbp,%rax,8)
ff ff
mov    $0x64,%eax
sub    -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xe96(%rip),%xmm1
divsd  %xmm1,%xmm0
movslq -0x8(%rbp),%rax
movsd  %xmm0,-0x680(%rbp,%rax,8)
ff ff
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1149 <main+0x19>
movsd  0xe4f(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    $0x0,%al
call   1030 <SuperLU_timer_@plt>
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x2710,-0xc(%rbp)
jge    1254 <main+0x124>
movl   $0x0,-0x8(%rbp)
cmpl   $0x64,-0x8(%rbp)
jge    1225 <main+0xf5>
movsd  -0x18(%rbp),%xmm0
movslq -0x8(%rbp),%rax
movsd  -0x360(%rbp,%rax,8),%xmm2
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x680(%rbp,%rax,8),%xmm1
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x680(%rbp,%rax,8)
ff ff
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11dd <main+0xad>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11c9 <main+0x99>
mov    $0x0,%al
call   1030 <SuperLU_timer_@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
lea    0xdbf(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12b8 <main+0x188>
movsd  -0x30(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
movsd  0xd67(%rip),%xmm0
divsd  %xmm1,%xmm0
lea    0xdb4(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
jmp    12c6 <main+0x196>
lea    0xdd0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    $0x0,%al
call   1030 <SuperLU_timer_@plt>
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x2710,-0xc(%rbp)
jge    137f <main+0x24f>
movl   $0x0,-0x8(%rbp)
cmpl   $0x64,-0x8(%rbp)
jge    1344 <main+0x214>
movsd  -0x18(%rbp),%xmm0
movslq -0x8(%rbp),%rax
movsd  -0x360(%rbp,%rax,8),%xmm2
ff ff
movslq -0x8(%rbp),%rax
movsd  -0x680(%rbp,%rax,8),%xmm1
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x680(%rbp,%rax,8)
ff ff
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12fc <main+0x1cc>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    $0x0,%al
call   1030 <SuperLU_timer_@plt>
movsd  %xmm0,-0x30(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12e8 <main+0x1b8>
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
lea    0xd29(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  0xc6a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc56(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
lea    0xd1a(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1408 <main+0x2d8>
movsd  0xc28(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
lea    0xd1d(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    -0x360(%rbp),%rsi
lea    -0x680(%rbp),%rdx
mov    $0x64,%edi
call   1050 <mysub@plt>
xor    %eax,%eax
add    $0x680,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x670,%rsp
movdqa 0xeb0(%rip),%xmm0
movdqa 0xeb8(%rip),%xmm1
xor    %eax,%eax
pcmpeqd %xmm8,%xmm8
movapd 0xeb8(%rip),%xmm9
movdqa 0xec0(%rip),%xmm4
movapd 0xec8(%rip),%xmm5
movdqa 0xed0(%rip),%xmm6
movdqa 0xed8(%rip),%xmm7
nopl   0x0(%rax,%rax,1)
pshufd $0xe8,%xmm1,%xmm2
psubd  %xmm8,%xmm2
cvtdq2pd %xmm2,%xmm2
movapd %xmm9,%xmm3
divpd  %xmm2,%xmm3
movapd %xmm3,0x350(%rsp,%rax,8)
movdqa %xmm4,%xmm2
psubd  %xmm0,%xmm2
cvtdq2pd %xmm2,%xmm2
divpd  %xmm5,%xmm2
movapd %xmm2,0x30(%rsp,%rax,8)
add    $0x2,%rax
paddq  %xmm6,%xmm1
paddd  %xmm7,%xmm0
cmp    $0x64,%rax
jne    1190 <main+0x50>
xor    %ebx,%ebx
xor    %eax,%eax
call   1030 <SuperLU_timer_@plt>
movq   %xmm0,0x8(%rsp)
movsd  0xe91(%rip),%xmm2
nop
movapd %xmm2,%xmm0
unpcklpd %xmm2,%xmm0
mov    $0x2,%eax
nopl   (%rax)
movapd 0x340(%rsp,%rax,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  0x20(%rsp,%rax,8),%xmm1
movapd %xmm1,0x20(%rsp,%rax,8)
movapd 0x350(%rsp,%rax,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  0x30(%rsp,%rax,8),%xmm1
movapd %xmm1,0x30(%rsp,%rax,8)
add    $0x4,%rax
cmp    $0x66,%rax
jne    1200 <main+0xc0>
xorpd  0xe2c(%rip),%xmm2
add    $0x1,%ebx
cmp    $0x2710,%ebx
jne    11f0 <main+0xb0>
movapd %xmm2,0x10(%rsp)
xor    %eax,%eax
call   1030 <SuperLU_timer_@plt>
subsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
lea    0xe31(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movsd  0x8(%rsp),%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jbe    12a2 <main+0x162>
movsd  0xdfa(%rip),%xmm0
divsd  %xmm1,%xmm0
lea    0xe37(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
jmp    12ae <main+0x16e>
lea    0xee7(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
call   1030 <SuperLU_timer_@plt>
movsd  %xmm0,0x28(%rsp)
xor    %ebx,%ebx
movapd 0x10(%rsp),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movapd %xmm2,%xmm0
unpcklpd %xmm2,%xmm0
mov    $0x2,%eax
nopl   (%rax)
movapd 0x340(%rsp,%rax,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  0x20(%rsp,%rax,8),%xmm1
movapd %xmm1,0x20(%rsp,%rax,8)
movapd 0x350(%rsp,%rax,8),%xmm1
mulpd  %xmm0,%xmm1
addpd  0x30(%rsp,%rax,8),%xmm1
movapd %xmm1,0x30(%rsp,%rax,8)
add    $0x4,%rax
cmp    $0x66,%rax
jne    12e0 <main+0x1a0>
xorpd  0xd4c(%rip),%xmm2
movapd %xmm2,0x10(%rsp)
xor    %eax,%eax
call   1030 <SuperLU_timer_@plt>
movapd 0x10(%rsp),%xmm2
add    $0x1,%ebx
cmp    $0x2710,%ebx
jne    12d0 <main+0x190>
subsd  0x28(%rsp),%xmm0
lea    0xdb0(%rip),%rdi
movsd  %xmm0,0x10(%rsp)
mov    $0x1,%al
call   1050 <printf@plt>
movsd  0x10(%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
mulsd  0xd20(%rip),%xmm0
divsd  0xd20(%rip),%xmm0
lea    0xdb0(%rip),%rdi
movsd  %xmm0,0x10(%rsp)
mov    $0x1,%al
call   1050 <printf@plt>
movsd  0x8(%rsp),%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jbe    13bc <main+0x27c>
movsd  0x10(%rsp),%xmm0
mulsd  0xce6(%rip),%xmm0
divsd  %xmm1,%xmm0
lea    0xdaf(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
lea    0x350(%rsp),%rsi
lea    0x30(%rsp),%rdx
mov    $0x64,%edi
call   1060 <mysub@plt>
xor    %eax,%eax
add    $0x670,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@.str = [48 x i8] c"Time for 1,000,000 DAXPY ops = %10.3g seconds\0A\00"
@.str.1 = [47 x i8] c"DAXPY performance rate = %10.3g mflops\0A\00"
@.str.2 = [42 x i8] c"*** Error: Time for operations was zero\0A\00"
@.str.3 = [48 x i8] c"Including DSECND, time = %10.3g seconds\0A\00"
@.str.4 = [53 x i8] c"Average time for DSECND = %10.3g milliseconds\0A\00"
@.str.5 = [44 x i8] c"Equivalent floating point ops = %10.3g ops\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca [100 x double]
%10 = alloca [100 x double]
store i32 0, i32* %1
store i32 0, i32* %2
br label %11
11: ; preds = %29, %0
%12 = load i32, i32* %2
%13 = icmp slt i32 %12, 100
br i1 %13, label %14, label %32
14: ; preds = %11
%15 = load i32, i32* %2
%16 = add nsw i32 %15, 1
%17 = sitofp i32 %16 to double
%18 = fdiv double 1.000000e+00, %17
%19 = load i32, i32* %2
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %20
store double %18, double* %21
%22 = load i32, i32* %2
%23 = sub nsw i32 100, %22
%24 = sitofp i32 %23 to double
%25 = fdiv double %24, 1.000000e+02
%26 = load i32, i32* %2
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %27
store double %25, double* %28
br label %29
29: ; preds = %14
%30 = load i32, i32* %2
%31 = add nsw i32 %30, 1
store i32 %31, i32* %2
br label %11
32: ; preds = %11
store double 3.150000e-01, double* %4
%33 = call double (...) @SuperLU_timer_()
store double %33, double* %6
store i32 0, i32* %3
br label %34
34: ; preds = %58, %32
%35 = load i32, i32* %3
%36 = icmp slt i32 %35, 10000
br i1 %36, label %37, label %61
37: ; preds = %34
store i32 0, i32* %2
br label %38
38: ; preds = %52, %37
%39 = load i32, i32* %2
%40 = icmp slt i32 %39, 100
br i1 %40, label %41, label %55
41: ; preds = %38
%42 = load double, double* %4
%43 = load i32, i32* %2
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %44
%46 = load double, double* %45
%47 = load i32, i32* %2
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %48
%50 = load double, double* %49
%51 = call double @llvm.fmuladd.f64(double %42, double %46, double %50)
store double %51, double* %49
br label %52
52: ; preds = %41
%53 = load i32, i32* %2
%54 = add nsw i32 %53, 1
store i32 %54, i32* %2
br label %38
55: ; preds = %38
%56 = load double, double* %4
%57 = fneg double %56
store double %57, double* %4
br label %58
58: ; preds = %55
%59 = load i32, i32* %3
%60 = add nsw i32 %59, 1
store i32 %60, i32* %3
br label %34
61: ; preds = %34
%62 = call double (...) @SuperLU_timer_()
store double %62, double* %7
%63 = load double, double* %7
%64 = load double, double* %6
%65 = fsub double %63, %64
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0), double %65)
%67 = load double, double* %7
%68 = load double, double* %6
%69 = fsub double %67, %68
%70 = fcmp ogt double %69, 0.000000e+00
br i1 %70, label %71, label %77
71: ; preds = %61
%72 = load double, double* %7
%73 = load double, double* %6
%74 = fsub double %72, %73
%75 = fdiv double 2.000000e+00, %74
%76 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0), double %75)
br label %79
77: ; preds = %61
%78 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.2, i64 0, i64 0))
br label %79
79: ; preds = %77, %71
%80 = load double, double* %7
%81 = load double, double* %6
%82 = fsub double %80, %81
store double %82, double* %8
%83 = call double (...) @SuperLU_timer_()
store double %83, double* %6
store i32 0, i32* %3
br label %84
84: ; preds = %109, %79
%85 = load i32, i32* %3
%86 = icmp slt i32 %85, 10000
br i1 %86, label %87, label %112
87: ; preds = %84
store i32 0, i32* %2
br label %88
88: ; preds = %102, %87
%89 = load i32, i32* %2
%90 = icmp slt i32 %89, 100
br i1 %90, label %91, label %105
91: ; preds = %88
%92 = load double, double* %4
%93 = load i32, i32* %2
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 %94
%96 = load double, double* %95
%97 = load i32, i32* %2
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 %98
%100 = load double, double* %99
%101 = call double @llvm.fmuladd.f64(double %92, double %96, double %100)
store double %101, double* %99
br label %102
102: ; preds = %91
%103 = load i32, i32* %2
%104 = add nsw i32 %103, 1
store i32 %104, i32* %2
br label %88
105: ; preds = %88
%106 = load double, double* %4
%107 = fneg double %106
store double %107, double* %4
%108 = call double (...) @SuperLU_timer_()
store double %108, double* %7
br label %109
109: ; preds = %105
%110 = load i32, i32* %3
%111 = add nsw i32 %110, 1
store i32 %111, i32* %3
br label %84
112: ; preds = %84
%113 = load double, double* %7
%114 = load double, double* %6
%115 = fsub double %113, %114
%116 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.3, i64 0, i64 0), double %115)
%117 = load double, double* %7
%118 = load double, double* %6
%119 = fsub double %117, %118
%120 = load double, double* %8
%121 = fsub double %119, %120
%122 = fmul double %121, 1.000000e+03
%123 = fdiv double %122, 1.000000e+04
store double %123, double* %5
%124 = load double, double* %5
%125 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.4, i64 0, i64 0), double %124)
%126 = load double, double* %8
%127 = fcmp ogt double %126, 0.000000e+00
br i1 %127, label %128, label %134
128: ; preds = %112
%129 = load double, double* %5
%130 = fmul double 1.000000e+03, %129
%131 = load double, double* %8
%132 = fdiv double %130, %131
%133 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.5, i64 0, i64 0), double %132)
br label %134
134: ; preds = %128, %112
%135 = getelementptr inbounds [100 x double], [100 x double]* %9, i64 0, i64 0
%136 = getelementptr inbounds [100 x double], [100 x double]* %10, i64 0, i64 0
%137 = call i32 @mysub(i32 100, double* %135, double* %136)
ret i32 0
}

LLVM IR (-O2):
@.str = [48 x i8] c"Time for 1,000,000 DAXPY ops = %10.3g seconds\0A\00"
@.str.1 = [47 x i8] c"DAXPY performance rate = %10.3g mflops\0A\00"
@.str.3 = [48 x i8] c"Including DSECND, time = %10.3g seconds\0A\00"
@.str.4 = [53 x i8] c"Average time for DSECND = %10.3g milliseconds\0A\00"
@.str.5 = [44 x i8] c"Equivalent floating point ops = %10.3g ops\0A\00"
@str = [41 x i8] c"*** Error: Time for operations was zero\00"
define i32 @main() {
%1 = alloca [100 x double]
%2 = alloca [100 x double]
%3 = bitcast [100 x double]* %1 to i8*
%4 = bitcast [100 x double]* %2 to i8*
br label %5
5: ; preds = %5, %0
%6 = phi i64 [ 0, %0 ], [ %20, %5 ]
%7 = phi <2 x i64> [ <i64 0, i64 1>, %0 ], [ %21, %5 ]
%8 = phi <2 x i32> [ <i32 0, i32 1>, %0 ], [ %22, %5 ]
%9 = trunc <2 x i64> %7 to <2 x i32>
%10 = add <2 x i32> %9, <i32 1, i32 1>
%11 = sitofp <2 x i32> %10 to <2 x double>
%12 = fdiv <2 x double> <double 1.000000e+00, double 1.000000e+00>, %11
%13 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %6
%14 = bitcast double* %13 to <2 x double>*
store <2 x double> %12, <2 x double>* %14
%15 = sub <2 x i32> <i32 100, i32 100>, %8
%16 = sitofp <2 x i32> %15 to <2 x double>
%17 = fdiv <2 x double> %16, <double 1.000000e+02, double 1.000000e+02>
%18 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %6
%19 = bitcast double* %18 to <2 x double>*
store <2 x double> %17, <2 x double>* %19
%20 = add nuw i64 %6, 2
%21 = add <2 x i64> %7, <i64 2, i64 2>
%22 = add <2 x i32> %8, <i32 2, i32 2>
%23 = icmp eq i64 %20, 100
br i1 %23, label %24, label %5
24: ; preds = %5
%25 = tail call double (...) @SuperLU_timer_()
br label %26
26: ; preds = %52, %24
%27 = phi i32 [ 0, %24 ], [ %54, %52 ]
%28 = phi double [ 3.150000e-01, %24 ], [ %53, %52 ]
%29 = insertelement <2 x double> poison, double %28, i64 0
%30 = shufflevector <2 x double> %29, <2 x double> poison, <2 x i32> zeroinitializer
br label %31
31: ; preds = %31, %26
%32 = phi i64 [ 0, %26 ], [ %50, %31 ]
%33 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %32
%34 = bitcast double* %33 to <2 x double>*
%35 = load <2 x double>, <2 x double>* %34
%36 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %32
%37 = bitcast double* %36 to <2 x double>*
%38 = load <2 x double>, <2 x double>* %37
%39 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %30, <2 x double> %35, <2 x double> %38)
%40 = bitcast double* %36 to <2 x double>*
store <2 x double> %39, <2 x double>* %40
%41 = or i64 %32, 2
%42 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %41
%43 = bitcast double* %42 to <2 x double>*
%44 = load <2 x double>, <2 x double>* %43
%45 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %41
%46 = bitcast double* %45 to <2 x double>*
%47 = load <2 x double>, <2 x double>* %46
%48 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %30, <2 x double> %44, <2 x double> %47)
%49 = bitcast double* %45 to <2 x double>*
store <2 x double> %48, <2 x double>* %49
%50 = add nuw nsw i64 %32, 4
%51 = icmp eq i64 %50, 100
br i1 %51, label %52, label %31
52: ; preds = %31
%53 = fneg double %28
%54 = add nuw nsw i32 %27, 1
%55 = icmp eq i32 %54, 10000
br i1 %55, label %56, label %26
56: ; preds = %52
%57 = tail call double (...) @SuperLU_timer_()
%58 = fsub double %57, %25
%59 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0), double %58)
%60 = fcmp ogt double %58, 0.000000e+00
br i1 %60, label %61, label %64
61: ; preds = %56
%62 = fdiv double 2.000000e+00, %58
%63 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0), double %62)
br label %66
64: ; preds = %56
%65 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str, i64 0, i64 0))
br label %66
66: ; preds = %64, %61
%67 = tail call double (...) @SuperLU_timer_()
br label %68
68: ; preds = %94, %66
%69 = phi i32 [ 0, %66 ], [ %97, %94 ]
%70 = phi double [ %53, %66 ], [ %95, %94 ]
%71 = insertelement <2 x double> poison, double %70, i64 0
%72 = shufflevector <2 x double> %71, <2 x double> poison, <2 x i32> zeroinitializer
br label %73
73: ; preds = %73, %68
%74 = phi i64 [ 0, %68 ], [ %92, %73 ]
%75 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %74
%76 = bitcast double* %75 to <2 x double>*
%77 = load <2 x double>, <2 x double>* %76
%78 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %74
%79 = bitcast double* %78 to <2 x double>*
%80 = load <2 x double>, <2 x double>* %79
%81 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %72, <2 x double> %77, <2 x double> %80)
%82 = bitcast double* %78 to <2 x double>*
store <2 x double> %81, <2 x double>* %82
%83 = or i64 %74, 2
%84 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 %83
%85 = bitcast double* %84 to <2 x double>*
%86 = load <2 x double>, <2 x double>* %85
%87 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 %83
%88 = bitcast double* %87 to <2 x double>*
%89 = load <2 x double>, <2 x double>* %88
%90 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %72, <2 x double> %86, <2 x double> %89)
%91 = bitcast double* %87 to <2 x double>*
store <2 x double> %90, <2 x double>* %91
%92 = add nuw nsw i64 %74, 4
%93 = icmp eq i64 %92, 100
br i1 %93, label %94, label %73
94: ; preds = %73
%95 = fneg double %70
%96 = tail call double (...) @SuperLU_timer_()
%97 = add nuw nsw i32 %69, 1
%98 = icmp eq i32 %97, 10000
br i1 %98, label %99, label %68
99: ; preds = %94
%100 = fsub double %96, %67
%101 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @.str.3, i64 0, i64 0), double %100)
%102 = fsub double %100, %58
%103 = fmul double %102, 1.000000e+03
%104 = fdiv double %103, 1.000000e+04
%105 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([53 x i8], [53 x i8]* @.str.4, i64 0, i64 0), double %104)
br i1 %60, label %106, label %110
106: ; preds = %99
%107 = fmul double %104, 1.000000e+03
%108 = fdiv double %107, %58
%109 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @.str.5, i64 0, i64 0), double %108)
br label %110
110: ; preds = %106, %99
%111 = getelementptr inbounds [100 x double], [100 x double]* %1, i64 0, i64 0
%112 = getelementptr inbounds [100 x double], [100 x double]* %2, i64 0, i64 0
%113 = call i32 @mysub(i32 100, double* %111, double* %112)
ret i32 0
}