int main() {
  int n = 8, m = 8, k = 8, nhrs = 8, lda = 8, ldb = 8, ldc = 8, info;
  char *transa = "N";
  char *transb = "N";
  double alpha = 1.0, beta = 0.0;
  int ipiv[8];
  double x[8];
  double x7[8];
  double B[64];
  double B2[64];
  double I1[64];
  double I2[64];
  int i, j;
  int incx = 1;
  int incy = 1;
  printf("---------------------------PART I-------------------------  \n\n");
  for (i = 0; i < 8; i++) {
    x[i] = 0.0 + 1.0 * (i / 7.0);
    x7[i] = pow(x[i], 7);
  }
  for (i = 0; i < 8; i++) {
    for (j = 0; j < 8; j++) {
      B[8 * i + j] = pow(x[i], j);
      B2[8 * i + j] = pow(x[i], j);
      if (i == j) {
        I1[8 * i + j] = 1.0;
        I2[8 * i + j] = 1.0;
      } else {
        I1[8 * i + j] = 0.0;
        I2[8 * i + j] = 0.0;
      }
    }
  }
  printf("B: \n");
  print_matrix(B2);
  dgesv(&n, &nhrs, B2, &lda, ipiv, I1, &ldb, &info);
  if (info != 0) {
    printf("U(%i, %i) = 0 & B is singular\n", info, info);
    printf("Error!\n");
    return -1;
  }
  printf("\nInverse of B: \n");
  print_matrix(I1);
  dgemm(transa, transb, &m, &n, &k, &alpha, I1, &lda, B, &ldb, &beta, I2, &ldc);
  printf("\n B * (Inverse of B) : \n");
  print_matrix(I2);
  printf("---------------------------PART II-------------------------  \n\n");
  double w1[8] = {0};
  double b1[8];
  double nValue1 = 0;
  double aValue1;
  for (i = 0; i < 8; i++) {
    b1[i] = pow(0.5, i);
  }
  dgemv(transa, &m, &n, &alpha, I1, &lda, b1, &incx, &beta, w1, &incy);
  printf("w:\n");
  print_vector(w1);
  for (i = 0; i < 8; i++) {
    nValue1 = nValue1 + x7[i] * w1[i];
  }
  aValue1 = pow(0.5, 7);
  printf("\nNumerical Result : %.12e\n", nValue1);
  printf("Analytical Result: %.12e\n", aValue1);
  printf("Absolute Err : %.12e\n\n", fabs(nValue1 - aValue1));
  printf("---------------------------PART III-------------------------  \n\n");
  double w2[8] = {0};
  double b2[8];
  double nValue2 = 0;
  double aValue2;
  b2[0] = 0;
  for (i = 1; i < 8; i++) {
    b2[i] = (double)i * pow(0.5, i - 1);
  }
  dgemv(transa, &m, &n, &alpha, I1, &lda, b2, &incx, &beta, w2, &incy);
  printf("w:\n");
  print_vector(w2);
  for (i = 0; i < 8; i++) {
    nValue2 = nValue2 + x7[i] * w2[i];
  }
  aValue2 = 7.0 * pow(0.5, 6);
  printf("\nNumerical Result : %.12e\n", nValue2);
  printf("Analytical Result: %.12e\n", aValue2);
  printf("Absolute Err : %.12e\n\n", fabs(nValue2 - aValue2));
  printf("---------------------------PART IV-------------------------  \n\n");
  double w3[8] = {0};
  double b3[8];
  double nValue3 = 0;
  double aValue3;
  b3[0] = 0;
  b3[1] = 0;
  for (i = 2; i < 8; i++) {
    b3[i] = (i - 1) * i * pow(0.5, i - 2);
  }
  dgemv(transa, &m, &n, &alpha, I1, &lda, b3, &incx, &beta, w3, &incy);
  printf("w:\n");
  print_vector(w3);
  for (i = 0; i < 8; i++) {
    nValue3 = nValue3 + x7[i] * w3[i];
  }
  aValue3 = 42 * pow(0.5, 5);
  printf("\nNumerical Result : %.12e\n", nValue3);
  printf("Analytical Result: %.12e\n", aValue3);
  printf("Absolute Err : %.12e\n\n", fabs(nValue3 - aValue3));
  printf("---------------------------PART V-------------------------  \n\n");
  double w4[8] = {0};
  double b4[8];
  double nValue4 = 0;
  double aValue4;
  for (i = 0; i < 8; i++) {
    b4[i] = pow(0.5, i + 1) / (i + 1);
  }
  dgemv(transa, &m, &n, &alpha, I1, &lda, b4, &incx, &beta, w4, &incy);
  printf("w:\n");
  print_vector(w4);
  for (i = 0; i < 8; i++) {
    nValue4 = nValue4 + x7[i] * w4[i];
  }
  aValue4 = pow(0.5, 8) / 8.0;
  printf("\nNumerical Result : %.12e\n", nValue4);
  printf("Analytical Result: %.12e\n", aValue4);
  printf("Absolute Err : %.12f\e\n", fabs(nValue4 - aValue4));
  return -1;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0xb90,%rsp
movl   $0x0,-0x24(%rbp)
movl   $0x8,-0x28(%rbp)
movl   $0x8,-0x2c(%rbp)
movl   $0x8,-0x30(%rbp)
movl   $0x8,-0x34(%rbp)
movl   $0x8,-0x38(%rbp)
movl   $0x8,-0x3c(%rbp)
movl   $0x8,-0x40(%rbp)
lea    0xe7f(%rip),%rax
mov    %rax,-0x50(%rbp)
lea    0xe74(%rip),%rax
mov    %rax,-0x58(%rbp)
movsd  0xe18(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x1,-0x91c(%rbp)
movl   $0x1,-0x920(%rbp)
lea    0xe42(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    129a <main+0x11a>
cvtsi2sdl -0x914(%rbp),%xmm0
ff
movsd  0xdd2(%rip),%xmm1
divsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
addsd  %xmm1,%xmm0
movslq -0x914(%rbp),%rax
movsd  %xmm0,-0xd0(%rbp,%rax,8)
ff ff
movslq -0x914(%rbp),%rax
movsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
movsd  0xd9f(%rip),%xmm1
call   1090 <pow@plt>
movslq -0x914(%rbp),%rax
movsd  %xmm0,-0x110(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    1221 <main+0xa1>
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    13fd <main+0x27d>
movl   $0x0,-0x918(%rbp)
cmpl   $0x8,-0x918(%rbp)
jge    13e4 <main+0x264>
movslq -0x914(%rbp),%rax
movsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
cvtsi2sdl -0x918(%rbp),%xmm1
ff
call   1090 <pow@plt>
mov    -0x914(%rbp),%eax
shl    $0x3,%eax
add    -0x918(%rbp),%eax
cltq
movsd  %xmm0,-0x310(%rbp,%rax,8)
ff ff
movslq -0x914(%rbp),%rax
movsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
cvtsi2sdl -0x918(%rbp),%xmm1
ff
call   1090 <pow@plt>
mov    -0x914(%rbp),%eax
shl    $0x3,%eax
add    -0x918(%rbp),%eax
cltq
movsd  %xmm0,-0x510(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
cmp    -0x918(%rbp),%eax
jne    1391 <main+0x211>
mov    -0x914(%rbp),%eax
shl    $0x3,%eax
add    -0x918(%rbp),%eax
cltq
movsd  0xc9f(%rip),%xmm0
movsd  %xmm0,-0x710(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
shl    $0x3,%eax
add    -0x918(%rbp),%eax
cltq
movsd  0xc7d(%rip),%xmm0
movsd  %xmm0,-0x910(%rbp,%rax,8)
ff ff
jmp    13cb <main+0x24b>
mov    -0x914(%rbp),%eax
shl    $0x3,%eax
add    -0x918(%rbp),%eax
cltq
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x710(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
shl    $0x3,%eax
add    -0x918(%rbp),%eax
cltq
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x910(%rbp,%rax,8)
ff ff
jmp    13d0 <main+0x250>
mov    -0x918(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x918(%rbp)
jmp    12bb <main+0x13b>
jmp    13e9 <main+0x269>
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    12a4 <main+0x124>
lea    0xcc0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x510(%rbp),%rdi
mov    $0x0,%al
call   10a0 <print_matrix@plt>
lea    -0x510(%rbp),%rdx
lea    -0x90(%rbp),%r8
lea    -0x710(%rbp),%r9
lea    -0x28(%rbp),%rdi
lea    -0x34(%rbp),%rsi
lea    -0x38(%rbp),%rcx
lea    -0x3c(%rbp),%r10
lea    -0x44(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
mov    $0x0,%al
call   1060 <dgesv@plt>
cmpl   $0x0,-0x44(%rbp)
je     148a <main+0x30a>
mov    -0x44(%rbp),%esi
mov    -0x44(%rbp),%edx
lea    0xc28(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xc39(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0xffffffff,-0x24(%rbp)
jmp    1d00 <main+0xb80>
lea    0xc27(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x710(%rbp),%rdi
mov    $0x0,%al
call   10a0 <print_matrix@plt>
mov    -0x50(%rbp),%rdi
mov    -0x58(%rbp),%rsi
lea    -0x710(%rbp),%r12
lea    -0x310(%rbp),%r14
lea    -0x910(%rbp),%r10
lea    -0x2c(%rbp),%rdx
lea    -0x28(%rbp),%rcx
lea    -0x30(%rbp),%r8
lea    -0x60(%rbp),%r9
lea    -0x38(%rbp),%r15
lea    -0x3c(%rbp),%rbx
lea    -0x68(%rbp),%r11
lea    -0x40(%rbp),%rax
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %rax,0x30(%rsp)
mov    $0x0,%al
call   1040 <dgemm@plt>
lea    0xbb6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x910(%rbp),%rdi
mov    $0x0,%al
call   10a0 <print_matrix@plt>
lea    0xbb3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x960(%rbp),%rdi
xor    %esi,%esi
mov    $0x40,%edx
call   1050 <memset@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x9a8(%rbp)
ff
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    15a4 <main+0x424>
cvtsi2sdl -0x914(%rbp),%xmm1
ff
movsd  0xa8d(%rip),%xmm0
call   1090 <pow@plt>
movslq -0x914(%rbp),%rax
movsd  %xmm0,-0x9a0(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    155e <main+0x3de>
mov    -0x50(%rbp),%rdi
lea    -0x710(%rbp),%r8
lea    -0x9a0(%rbp),%r14
lea    -0x960(%rbp),%r10
lea    -0x2c(%rbp),%rsi
lea    -0x28(%rbp),%rdx
lea    -0x60(%rbp),%rcx
lea    -0x38(%rbp),%r9
lea    -0x91c(%rbp),%rbx
lea    -0x68(%rbp),%r11
lea    -0x920(%rbp),%rax
mov    %r14,(%rsp)
mov    %rbx,0x8(%rsp)
mov    %r11,0x10(%rsp)
mov    %r10,0x18(%rsp)
mov    %rax,0x20(%rsp)
mov    $0x0,%al
call   1080 <dgemv@plt>
lea    0xb1d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x960(%rbp),%rdi
mov    $0x0,%al
call   1070 <print_vector@plt>
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    167d <main+0x4fd>
movsd  -0x9a8(%rbp),%xmm1
ff
movslq -0x914(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
movslq -0x914(%rbp),%rax
movsd  -0x960(%rbp,%rax,8),%xmm2
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x9a8(%rbp)
ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    1624 <main+0x4a4>
movsd  0x983(%rip),%xmm0
movsd  0x983(%rip),%xmm1
call   1090 <pow@plt>
movsd  %xmm0,-0x9b0(%rbp)
ff
movsd  -0x9a8(%rbp),%xmm0
ff
lea    0xa7d(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x9b0(%rbp),%xmm0
ff
lea    0xa82(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x9a8(%rbp),%xmm0
ff
subsd  -0x9b0(%rbp),%xmm0
ff
movaps 0x963(%rip),%xmm1
pand   %xmm1,%xmm0
lea    0xa73(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xa7c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x9f0(%rbp),%rdi
xor    %esi,%esi
mov    $0x40,%edx
call   1050 <memset@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa38(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa30(%rbp)
ff
movl   $0x1,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    179a <main+0x61a>
cvtsi2sdl -0x914(%rbp),%xmm0
ff
movsd  %xmm0,-0xb68(%rbp)
ff
mov    -0x914(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0x8a6(%rip),%xmm0
call   1090 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xb68(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movslq -0x914(%rbp),%rax
movsd  %xmm0,-0xa30(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    1730 <main+0x5b0>
mov    -0x50(%rbp),%rdi
lea    -0x710(%rbp),%r8
lea    -0xa30(%rbp),%r14
lea    -0x9f0(%rbp),%r10
lea    -0x2c(%rbp),%rsi
lea    -0x28(%rbp),%rdx
lea    -0x60(%rbp),%rcx
lea    -0x38(%rbp),%r9
lea    -0x91c(%rbp),%rbx
lea    -0x68(%rbp),%r11
lea    -0x920(%rbp),%rax
mov    %r14,(%rsp)
mov    %rbx,0x8(%rsp)
mov    %r11,0x10(%rsp)
mov    %r10,0x18(%rsp)
mov    %rax,0x20(%rsp)
mov    $0x0,%al
call   1080 <dgemv@plt>
lea    0x927(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x9f0(%rbp),%rdi
mov    $0x0,%al
call   1070 <print_vector@plt>
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    1873 <main+0x6f3>
movsd  -0xa38(%rbp),%xmm1
ff
movslq -0x914(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
movslq -0x914(%rbp),%rax
movsd  -0x9f0(%rbp,%rax,8),%xmm2
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa38(%rbp)
ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    181a <main+0x69a>
movsd  0x78d(%rip),%xmm0
movsd  0x795(%rip),%xmm1
call   1090 <pow@plt>
movaps %xmm0,%xmm1
movsd  0x77d(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa40(%rbp)
ff
movsd  -0xa38(%rbp),%xmm0
ff
lea    0x878(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xa40(%rbp),%xmm0
ff
lea    0x87d(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xa38(%rbp),%xmm0
ff
subsd  -0xa40(%rbp),%xmm0
ff
movaps 0x75e(%rip),%xmm1
pand   %xmm1,%xmm0
lea    0x86e(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x8b8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xa80(%rbp),%rdi
xor    %esi,%esi
mov    $0x40,%edx
call   1050 <memset@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xac8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xac0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xab8(%rbp)
ff
movl   $0x2,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    19b6 <main+0x836>
mov    -0x914(%rbp),%eax
sub    $0x1,%eax
imul   -0x914(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb70(%rbp)
ff
mov    -0x914(%rbp),%eax
sub    $0x2,%eax
cvtsi2sd %eax,%xmm1
movsd  0x68a(%rip),%xmm0
call   1090 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xb70(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movslq -0x914(%rbp),%rax
movsd  %xmm0,-0xac0(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    1940 <main+0x7c0>
mov    -0x50(%rbp),%rdi
lea    -0x710(%rbp),%r8
lea    -0xac0(%rbp),%r14
lea    -0xa80(%rbp),%r10
lea    -0x2c(%rbp),%rsi
lea    -0x28(%rbp),%rdx
lea    -0x60(%rbp),%rcx
lea    -0x38(%rbp),%r9
lea    -0x91c(%rbp),%rbx
lea    -0x68(%rbp),%r11
lea    -0x920(%rbp),%rax
mov    %r14,(%rsp)
mov    %rbx,0x8(%rsp)
mov    %r11,0x10(%rsp)
mov    %r10,0x18(%rsp)
mov    %rax,0x20(%rsp)
mov    $0x0,%al
call   1080 <dgemv@plt>
lea    0x70b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xa80(%rbp),%rdi
mov    $0x0,%al
call   1070 <print_vector@plt>
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    1a8f <main+0x90f>
movsd  -0xac8(%rbp),%xmm1
ff
movslq -0x914(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
movslq -0x914(%rbp),%rax
movsd  -0xa80(%rbp,%rax,8),%xmm2
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xac8(%rbp)
ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    1a36 <main+0x8b6>
movsd  0x571(%rip),%xmm0
movsd  0x589(%rip),%xmm1
call   1090 <pow@plt>
movaps %xmm0,%xmm1
movsd  0x571(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xad0(%rbp)
ff
movsd  -0xac8(%rbp),%xmm0
ff
lea    0x65c(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xad0(%rbp),%xmm0
ff
lea    0x661(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xac8(%rbp),%xmm0
ff
subsd  -0xad0(%rbp),%xmm0
ff
movaps 0x542(%rip),%xmm1
pand   %xmm1,%xmm0
lea    0x652(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
lea    0x6dc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xb10(%rbp),%rdi
xor    %esi,%esi
mov    $0x40,%edx
call   1050 <memset@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb58(%rbp)
ff
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    1ba2 <main+0xa22>
mov    -0x914(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0x4a0(%rip),%xmm0
call   1090 <pow@plt>
mov    -0x914(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movslq -0x914(%rbp),%rax
movsd  %xmm0,-0xb50(%rbp,%rax,8)
ff ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    1b46 <main+0x9c6>
mov    -0x50(%rbp),%rdi
lea    -0x710(%rbp),%r8
lea    -0xb50(%rbp),%r14
lea    -0xb10(%rbp),%r10
lea    -0x2c(%rbp),%rsi
lea    -0x28(%rbp),%rdx
lea    -0x60(%rbp),%rcx
lea    -0x38(%rbp),%r9
lea    -0x91c(%rbp),%rbx
lea    -0x68(%rbp),%r11
lea    -0x920(%rbp),%rax
mov    %r14,(%rsp)
mov    %rbx,0x8(%rsp)
mov    %r11,0x10(%rsp)
mov    %r10,0x18(%rsp)
mov    %rax,0x20(%rsp)
mov    $0x0,%al
call   1080 <dgemv@plt>
lea    0x51f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xb10(%rbp),%rdi
mov    $0x0,%al
call   1070 <print_vector@plt>
movl   $0x0,-0x914(%rbp)
cmpl   $0x8,-0x914(%rbp)
jge    1c7b <main+0xafb>
movsd  -0xb58(%rbp),%xmm1
ff
movslq -0x914(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
movslq -0x914(%rbp),%rax
movsd  -0xb10(%rbp,%rax,8),%xmm2
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb58(%rbp)
ff
mov    -0x914(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x914(%rbp)
jmp    1c22 <main+0xaa2>
movsd  0x385(%rip),%xmm0
movsd  0x3a5(%rip),%xmm1
call   1090 <pow@plt>
movsd  0x398(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb60(%rbp)
ff
movsd  -0xb58(%rbp),%xmm0
ff
lea    0x473(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xb60(%rbp),%xmm0
ff
lea    0x478(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xb58(%rbp),%xmm0
ff
subsd  -0xb60(%rbp),%xmm0
ff
movaps 0x359(%rip),%xmm1
pand   %xmm1,%xmm0
lea    0x540(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0xffffffff,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0xb90,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xac8,%rsp
movl   $0x8,0xc(%rsp)
movl   $0x8,0x2c(%rsp)
movl   $0x8,0x5c(%rsp)
movl   $0x8,0x58(%rsp)
movl   $0x8,0x28(%rsp)
movl   $0x8,0x54(%rsp)
movl   $0x8,0x50(%rsp)
movabs $0x3ff0000000000000,%rbx
mov    %rbx,0x38(%rsp)
movq   $0x0,0x40(%rsp)
movl   $0x1,0x34(%rsp)
movl   $0x1,0x30(%rsp)
lea    0xfac(%rip),%rdi
call   1030 <puts@plt>
xorps  %xmm0,%xmm0
movhps 0xde9(%rip),%xmm0
movaps %xmm0,0x260(%rsp)
movaps 0xeca(%rip),%xmm0
movaps %xmm0,0x270(%rsp)
movaps 0xecb(%rip),%xmm0
movaps %xmm0,0x280(%rsp)
movapd 0xecb(%rip),%xmm0
movapd %xmm0,0x290(%rsp)
xorpd  %xmm1,%xmm1
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %rbx,0x8c0(%rsp,%rbp,8)
mov    %rbx,0x6c0(%rsp,%rbp,8)
test   %rbp,%rbp
movsd  %xmm1,0x10(%rsp)
je     12d0 <main+0x140>
movq   $0x0,0x2c0(%rsp,%rbp,8)
movq   $0x0,0x4c0(%rsp,%rbp,8)
movsd  %xmm1,0x8c8(%rsp,%rbp,8)
movsd  %xmm1,0x6c8(%rsp,%rbp,8)
movsd  0xd5b(%rip),%xmm0
cmp    $0x8,%rbp
je     12b7 <main+0x127>
xorpd  %xmm0,%xmm0
lea    0x1(%rbp),%rax
movsd  0x10(%rsp),%xmm1
jmp    12fb <main+0x16b>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rbx,0x2c0(%rsp,%rbp,8)
mov    %rbx,0x4c0(%rsp,%rbp,8)
movsd  %xmm1,0x8c8(%rsp,%rbp,8)
movsd  %xmm1,0x6c8(%rsp,%rbp,8)
xorpd  %xmm0,%xmm0
mov    $0x1,%eax
movsd  %xmm0,0x2c0(%rsp,%rax,8)
movsd  %xmm0,0x4c0(%rsp,%rax,8)
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x8d0(%rsp,%rbp,8)
movsd  %xmm0,0x6d0(%rsp,%rbp,8)
movsd  0xcd9(%rip),%xmm0
cmp    $0x10,%rbp
je     1338 <main+0x1a8>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2d0(%rsp,%rbp,8)
movsd  %xmm0,0x4d0(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xcb8(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x8d8(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xc9c(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x6d8(%rsp,%rbp,8)
movsd  0xc7e(%rip),%xmm0
cmp    $0x18,%rbp
je     1393 <main+0x203>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2d8(%rsp,%rbp,8)
movsd  %xmm0,0x4d8(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xc65(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x8e0(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xc49(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x6e0(%rsp,%rbp,8)
movsd  0xc23(%rip),%xmm0
cmp    $0x20,%rbp
je     13ee <main+0x25e>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2e0(%rsp,%rbp,8)
movsd  %xmm0,0x4e0(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xc12(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x8e8(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xbf6(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x6e8(%rsp,%rbp,8)
movsd  0xbc8(%rip),%xmm0
cmp    $0x28,%rbp
je     1449 <main+0x2b9>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2e8(%rsp,%rbp,8)
movsd  %xmm0,0x4e8(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xbbf(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x8f0(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xba3(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x6f0(%rsp,%rbp,8)
movsd  0xb6d(%rip),%xmm0
cmp    $0x30,%rbp
je     14a4 <main+0x314>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2f0(%rsp,%rbp,8)
movsd  %xmm0,0x4f0(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xb6c(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x8f8(%rsp,%rbp,8)
movsd  0x10(%rsp),%xmm0
movsd  0xb50(%rip),%xmm1
call   10a0 <pow@plt>
movsd  %xmm0,0x6f8(%rsp,%rbp,8)
cmp    $0x38,%rbp
je     151e <main+0x38e>
movq   $0x0,0x2f8(%rsp,%rbp,8)
movq   $0x0,0x4f8(%rsp,%rbp,8)
movsd  0x268(%rsp,%rbp,1),%xmm1
add    $0x8,%rbp
jmp    1260 <main+0xd0>
mov    %rbx,0x2f8(%rsp,%rbp,8)
mov    %rbx,0x4f8(%rsp,%rbp,8)
lea    0xcc9(%rip),%rdi
call   1030 <puts@plt>
lea    0x6c0(%rsp),%rbp
mov    %rbp,%rdi
xor    %eax,%eax
call   10b0 <print_matrix@plt>
lea    0x4c(%rsp),%r10
lea    0x54(%rsp),%r12
lea    0xc(%rsp),%rdi
lea    0x58(%rsp),%rsi
lea    0x28(%rsp),%r14
lea    0x2a0(%rsp),%r8
lea    0x2c0(%rsp),%r15
mov    %rbp,%rdx
mov    %r14,%rcx
mov    %r15,%r9
xor    %eax,%eax
push   %r10
push   %r12
call   1070 <dgesv@plt>
add    $0x10,%rsp
mov    0x4c(%rsp),%edx
test   %edx,%edx
je     15b6 <main+0x426>
lea    0xb96(%rip),%rdi
mov    %edx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd6d(%rip),%rdi
call   1030 <puts@plt>
jmp    1fc0 <main+0xe30>
lea    0xc35(%rip),%rdi
call   1030 <puts@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   10b0 <print_matrix@plt>
sub    $0x8,%rsp
lea    0x58(%rsp),%r10
lea    0x4c8(%rsp),%r13
lea    0x48(%rsp),%rbp
lea    0x8c8(%rsp),%r11
lea    0xb3f(%rip),%rdi
lea    0x34(%rsp),%rdx
lea    0x14(%rsp),%rcx
lea    0x64(%rsp),%r8
lea    0x40(%rsp),%r9
mov    %rdi,%rsi
mov    $0x0,%eax
push   %r10
push   %r13
push   %rbp
push   %r12
push   %r11
push   %r14
push   %r15
call   1060 <dgemm@plt>
add    $0x40,%rsp
lea    0xbd8(%rip),%rdi
call   1030 <puts@plt>
mov    %r13,%rdi
xor    %eax,%eax
call   10b0 <print_matrix@plt>
lea    0xbda(%rip),%rdi
call   1030 <puts@plt>
xorpd  %xmm0,%xmm0
movapd %xmm0,0x150(%rsp)
movapd %xmm0,0x140(%rsp)
movapd %xmm0,0x130(%rsp)
movapd %xmm0,0x120(%rsp)
movsd  0x9c3(%rip),%xmm0
call   1050 <exp2@plt>
mov    %rbx,0x1e0(%rsp)
movsd  0x9b6(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fe0000000000000,%rax
mov    %rax,0x1e8(%rsp)
movsd  0x99f(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fd0000000000000,%rax
mov    %rax,0x1f0(%rsp)
movsd  0x988(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fc0000000000000,%rax
mov    %rax,0x1f8(%rsp)
movsd  0x971(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fb0000000000000,%rax
mov    %rax,0x200(%rsp)
movsd  0x95a(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fa0000000000000,%rax
mov    %rax,0x208(%rsp)
movsd  0x943(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3f90000000000000,%rax
mov    %rax,0x210(%rsp)
movsd  0x92c(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3f80000000000000,%rax
mov    %rax,0x218(%rsp)
sub    $0x8,%rsp
lea    0x38(%rsp),%rbp
lea    0x128(%rsp),%r13
lea    0x3c(%rsp),%r11
lea    0x1e8(%rsp),%r10
lea    0x9b0(%rip),%rdi
lea    0x34(%rsp),%rsi
lea    0x14(%rsp),%r12
mov    %r12,%rdx
lea    0x40(%rsp),%rcx
mov    %r15,%r8
mov    %r14,%r9
mov    $0x0,%eax
push   %rbp
push   %r13
lea    0x58(%rsp),%rbp
push   %rbp
push   %r11
push   %r10
call   1090 <dgemv@plt>
add    $0x30,%rsp
lea    0xb5c(%rip),%rdi
call   1030 <puts@plt>
mov    %r13,%rdi
xor    %eax,%eax
call   1080 <print_vector@plt>
xorpd  %xmm1,%xmm1
movsd  0x120(%rsp),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
movsd  0x128(%rsp),%xmm1
mulsd  0x889(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0x130(%rsp),%xmm0
mulsd  0x87c(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0x138(%rsp),%xmm1
mulsd  0x86f(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0x140(%rsp),%xmm0
mulsd  0x862(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0x148(%rsp),%xmm1
mulsd  0x855(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0x851(%rip),%xmm2
movsd  0x150(%rsp),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  0x158(%rsp),%xmm0
movapd %xmm0,0x10(%rsp)
lea    0x8db(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x8e8(%rip),%rdi
movsd  0x81c(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
movapd 0x10(%rsp),%xmm0
addsd  0x80f(%rip),%xmm0
andpd  0x877(%rip),%xmm0
lea    0x8d6(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x99b(%rip),%rdi
call   1030 <puts@plt>
xorpd  %xmm0,%xmm0
movapd %xmm0,0x110(%rsp)
movapd %xmm0,0x100(%rsp)
movapd %xmm0,0xf0(%rsp)
movapd %xmm0,0xe0(%rsp)
movq   $0x0,0x1a0(%rsp)
movsd  0x739(%rip),%xmm0
call   1050 <exp2@plt>
mov    %rbx,0x1a8(%rsp)
movsd  0x72c(%rip),%xmm0
call   1050 <exp2@plt>
mov    %rbx,0x1b0(%rsp)
movsd  0x71f(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fe8000000000000,%rax
mov    %rax,0x1b8(%rsp)
movsd  0x708(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fe0000000000000,%rax
mov    %rax,0x1c0(%rsp)
movsd  0x6f1(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fd4000000000000,%rax
mov    %rax,0x1c8(%rsp)
movsd  0x6da(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fc8000000000000,%rax
mov    %rax,0x1d0(%rsp)
movsd  0x6c3(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fbc000000000000,%rax
mov    %rax,0x1d8(%rsp)
sub    $0x8,%rsp
lea    0xe8(%rsp),%r13
lea    0x1a8(%rsp),%rbp
lea    0x759(%rip),%rdi
lea    0x34(%rsp),%r14
mov    %r14,%rsi
mov    %r12,%rdx
lea    0x40(%rsp),%rcx
mov    %r15,%r8
lea    0x30(%rsp),%r9
xor    %eax,%eax
lea    0x38(%rsp),%rbx
push   %rbx
push   %r13
lea    0x58(%rsp),%rbx
push   %rbx
lea    0x54(%rsp),%r12
push   %r12
push   %rbp
call   1090 <dgemv@plt>
add    $0x30,%rsp
lea    0x8ff(%rip),%rdi
call   1030 <puts@plt>
mov    %r13,%rdi
xor    %eax,%eax
call   1080 <print_vector@plt>
movsd  0xe0(%rsp),%xmm0
xorpd  %xmm1,%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe8(%rsp),%xmm1
mulsd  0x62c(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xf0(%rsp),%xmm0
mulsd  0x61f(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0xf8(%rsp),%xmm1
mulsd  0x612(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0x100(%rsp),%xmm0
mulsd  0x605(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0x108(%rsp),%xmm1
mulsd  0x5f8(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0x110(%rsp),%xmm2
movsd  0x5eb(%rip),%xmm0
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
addsd  0x118(%rsp),%xmm2
movapd %xmm2,0x10(%rsp)
lea    0x67e(%rip),%r13
mov    %r13,%rdi
movapd %xmm2,%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x5cf(%rip),%xmm0
lea    0x67c(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movapd 0x10(%rsp),%xmm0
addsd  0x5bb(%rip),%xmm0
andpd  0x613(%rip),%xmm0
lea    0x672(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x777(%rip),%rdi
call   1030 <puts@plt>
xorpd  %xmm0,%xmm0
movapd %xmm0,0xd0(%rsp)
movapd %xmm0,0xc0(%rsp)
movapd %xmm0,0xb0(%rsp)
movapd %xmm0,0xa0(%rsp)
movapd %xmm0,0x220(%rsp)
movsd  0x4d8(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x4000000000000000,%rax
mov    %rax,0x230(%rsp)
movsd  0x4c1(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x4008000000000000,%rbx
mov    %rbx,0x238(%rsp)
movsd  0x4aa(%rip),%xmm0
call   1050 <exp2@plt>
mov    %rbx,0x240(%rsp)
movsd  0x49d(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x4004000000000000,%rax
mov    %rax,0x248(%rsp)
movsd  0x486(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3ffe000000000000,%rax
mov    %rax,0x250(%rsp)
movsd  0x46f(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3ff5000000000000,%rax
mov    %rax,0x258(%rsp)
sub    $0x8,%rsp
lea    0xa8(%rsp),%rbp
lea    0x228(%rsp),%r10
lea    0x50d(%rip),%rdi
mov    %r14,%rsi
lea    0x14(%rsp),%rdx
lea    0x40(%rsp),%rcx
mov    %r15,%r8
lea    0x30(%rsp),%r9
xor    %eax,%eax
lea    0x38(%rsp),%rbx
push   %rbx
push   %rbp
lea    0x58(%rsp),%r15
push   %r15
push   %r12
push   %r10
call   1090 <dgemv@plt>
add    $0x30,%rsp
lea    0x6ba(%rip),%r14
mov    %r14,%rdi
call   1030 <puts@plt>
mov    %rbp,%rdi
xor    %eax,%eax
call   1080 <print_vector@plt>
movsd  0xa0(%rsp),%xmm0
xorpd  %xmm1,%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
movsd  0xa8(%rsp),%xmm1
mulsd  0x3e4(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xb0(%rsp),%xmm0
mulsd  0x3d7(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0xb8(%rsp),%xmm1
mulsd  0x3ca(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xc0(%rsp),%xmm0
mulsd  0x3bd(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  0xc8(%rsp),%xmm1
mulsd  0x3b0(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xd0(%rsp),%xmm2
movsd  0x3a3(%rip),%xmm0
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
addsd  0xd8(%rsp),%xmm2
movapd %xmm2,0x10(%rsp)
mov    %r13,%rdi
movapd %xmm2,%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x39e(%rip),%xmm0
lea    0x43b(%rip),%rdi
mov    %rdi,%r12
mov    $0x1,%al
call   1040 <printf@plt>
movapd 0x10(%rsp),%xmm0
addsd  0x387(%rip),%xmm0
andpd  0x3cf(%rip),%xmm0
lea    0x42e(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x572(%rip),%rdi
call   1030 <puts@plt>
xorpd  %xmm0,%xmm0
movapd %xmm0,0x90(%rsp)
movapd %xmm0,0x80(%rsp)
movapd %xmm0,0x70(%rsp)
movapd %xmm0,0x60(%rsp)
movsd  0x2ab(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fe0000000000000,%rax
mov    %rax,0x160(%rsp)
movsd  0x294(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fc0000000000000,%rax
mov    %rax,0x168(%rsp)
movsd  0x27d(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3fa5555555555555,%rax
55 a5 3f
mov    %rax,0x170(%rsp)
movsd  0x266(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3f90000000000000,%rax
mov    %rax,0x178(%rsp)
movsd  0x24f(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3f7999999999999a,%rax
99 79 3f
mov    %rax,0x180(%rsp)
movsd  0x238(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3f65555555555555,%rax
55 65 3f
mov    %rax,0x188(%rsp)
movsd  0x221(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3f52492492492492,%rax
49 52 3f
mov    %rax,0x190(%rsp)
movsd  0x26a(%rip),%xmm0
call   1050 <exp2@plt>
movabs $0x3f40000000000000,%rax
mov    %rax,0x198(%rsp)
sub    $0x8,%rsp
lea    0x68(%rsp),%rbp
lea    0x168(%rsp),%r10
lea    0x293(%rip),%rdi
lea    0x34(%rsp),%rsi
lea    0x14(%rsp),%rdx
lea    0x40(%rsp),%rcx
lea    0x2c8(%rsp),%r8
lea    0x30(%rsp),%r9
xor    %eax,%eax
push   %rbx
push   %rbp
push   %r15
lea    0x54(%rsp),%rbx
push   %rbx
push   %r10
call   1090 <dgemv@plt>
add    $0x30,%rsp
mov    %r14,%rdi
call   1030 <puts@plt>
mov    %rbp,%rdi
xor    %eax,%eax
call   1080 <print_vector@plt>
movsd  0x60(%rsp),%xmm0
xorpd  %xmm1,%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
movsd  0x17c(%rip),%xmm1
mulsd  0x68(%rsp),%xmm1
movsd  0x176(%rip),%xmm2
mulsd  0x70(%rsp),%xmm2
addsd  %xmm0,%xmm1
addsd  %xmm1,%xmm2
movsd  0x168(%rip),%xmm0
mulsd  0x78(%rsp),%xmm0
addsd  %xmm2,%xmm0
movapd %xmm0,%xmm1
movsd  0x15a(%rip),%xmm0
mulsd  0x80(%rsp),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
movsd  0x149(%rip),%xmm2
mulsd  0x88(%rsp),%xmm2
movsd  0x140(%rip),%xmm0
mulsd  0x90(%rsp),%xmm0
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm0
addsd  0x98(%rsp),%xmm0
movapd %xmm0,0x10(%rsp)
mov    %r13,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x14e(%rip),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movapd 0x10(%rsp),%xmm0
addsd  0x13e(%rip),%xmm0
andpd  0x16e(%rip),%xmm0
lea    0x1e4(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    $0xffffffff,%eax
add    $0xac8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [2 x i8] c"N\00"
@.str.1 = [63 x i8] c"---------------------------PART I------------------------- \0A\0A\00"
@.str.2 = [5 x i8] c"B: \0A\00"
@.str.3 = [31 x i8] c"U(%i, %i) = 0 & B is singular\0A\00"
@.str.4 = [8 x i8] c"Error!\0A\00"
@.str.5 = [17 x i8] c"\0AInverse of B: \0A\00"
@.str.6 = [25 x i8] c"\0A B * (Inverse of B) : \0A\00"
@.str.7 = [64 x i8] c"---------------------------PART II------------------------- \0A\0A\00"
@.str.8 = [4 x i8] c"w:\0A\00"
@.str.9 = [27 x i8] c"\0ANumerical Result : %.12e\0A\00"
@.str.10 = [26 x i8] c"Analytical Result: %.12e\0A\00"
@.str.11 = [23 x i8] c"Absolute Err : %.12e\0A\0A\00"
@.str.12 = [65 x i8] c"---------------------------PART III------------------------- \0A\0A\00"
@.str.13 = [64 x i8] c"---------------------------PART IV------------------------- \0A\0A\00"
@.str.14 = [63 x i8] c"---------------------------PART V------------------------- \0A\0A\00"
@.str.15 = [23 x i8] c"Absolute Err : %.12f\1B\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca double
%13 = alloca double
%14 = alloca [8 x i32]
%15 = alloca [8 x double]
%16 = alloca [8 x double]
%17 = alloca [64 x double]
%18 = alloca [64 x double]
%19 = alloca [64 x double]
%20 = alloca [64 x double]
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca [8 x double]
%26 = alloca [8 x double]
%27 = alloca double
%28 = alloca double
%29 = alloca [8 x double]
%30 = alloca [8 x double]
%31 = alloca double
%32 = alloca double
%33 = alloca [8 x double]
%34 = alloca [8 x double]
%35 = alloca double
%36 = alloca double
%37 = alloca [8 x double]
%38 = alloca [8 x double]
%39 = alloca double
%40 = alloca double
store i32 0, i32* %1
store i32 8, i32* %2
store i32 8, i32* %3
store i32 8, i32* %4
store i32 8, i32* %5
store i32 8, i32* %6
store i32 8, i32* %7
store i32 8, i32* %8
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8** %10
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8** %11
store double 1.000000e+00, double* %12
store double 0.000000e+00, double* %13
store i32 1, i32* %23
store i32 1, i32* %24
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %21
br label %42
42: ; preds = %61, %0
%43 = load i32, i32* %21
%44 = icmp slt i32 %43, 8
br i1 %44, label %45, label %64
45: ; preds = %42
%46 = load i32, i32* %21
%47 = sitofp i32 %46 to double
%48 = fdiv double %47, 7.000000e+00
%49 = call double @llvm.fmuladd.f64(double 1.000000e+00, double %48, double 0.000000e+00)
%50 = load i32, i32* %21
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds [8 x double], [8 x double]* %15, i64 0, i64 %51
store double %49, double* %52
%53 = load i32, i32* %21
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [8 x double], [8 x double]* %15, i64 0, i64 %54
%56 = load double, double* %55
%57 = call double @pow(double %56, double 7.000000e+00)
%58 = load i32, i32* %21
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds [8 x double], [8 x double]* %16, i64 0, i64 %59
store double %57, double* %60
br label %61
61: ; preds = %45
%62 = load i32, i32* %21
%63 = add nsw i32 %62, 1
store i32 %63, i32* %21
br label %42
64: ; preds = %42
store i32 0, i32* %21
br label %65
65: ; preds = %133, %64
%66 = load i32, i32* %21
%67 = icmp slt i32 %66, 8
br i1 %67, label %68, label %136
68: ; preds = %65
store i32 0, i32* %22
br label %69
69: ; preds = %129, %68
%70 = load i32, i32* %22
%71 = icmp slt i32 %70, 8
br i1 %71, label %72, label %132
72: ; preds = %69
%73 = load i32, i32* %21
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [8 x double], [8 x double]* %15, i64 0, i64 %74
%76 = load double, double* %75
%77 = load i32, i32* %22
%78 = sitofp i32 %77 to double
%79 = call double @pow(double %76, double %78)
%80 = load i32, i32* %21
%81 = mul nsw i32 8, %80
%82 = load i32, i32* %22
%83 = add nsw i32 %81, %82
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [64 x double], [64 x double]* %17, i64 0, i64 %84
store double %79, double* %85
%86 = load i32, i32* %21
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [8 x double], [8 x double]* %15, i64 0, i64 %87
%89 = load double, double* %88
%90 = load i32, i32* %22
%91 = sitofp i32 %90 to double
%92 = call double @pow(double %89, double %91)
%93 = load i32, i32* %21
%94 = mul nsw i32 8, %93
%95 = load i32, i32* %22
%96 = add nsw i32 %94, %95
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [64 x double], [64 x double]* %18, i64 0, i64 %97
store double %92, double* %98
%99 = load i32, i32* %21
%100 = load i32, i32* %22
%101 = icmp eq i32 %99, %100
br i1 %101, label %102, label %115
102: ; preds = %72
%103 = load i32, i32* %21
%104 = mul nsw i32 8, %103
%105 = load i32, i32* %22
%106 = add nsw i32 %104, %105
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 %107
store double 1.000000e+00, double* %108
%109 = load i32, i32* %21
%110 = mul nsw i32 8, %109
%111 = load i32, i32* %22
%112 = add nsw i32 %110, %111
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds [64 x double], [64 x double]* %20, i64 0, i64 %113
store double 1.000000e+00, double* %114
br label %128
115: ; preds = %72
%116 = load i32, i32* %21
%117 = mul nsw i32 8, %116
%118 = load i32, i32* %22
%119 = add nsw i32 %117, %118
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 %120
store double 0.000000e+00, double* %121
%122 = load i32, i32* %21
%123 = mul nsw i32 8, %122
%124 = load i32, i32* %22
%125 = add nsw i32 %123, %124
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds [64 x double], [64 x double]* %20, i64 0, i64 %126
store double 0.000000e+00, double* %127
br label %128
128: ; preds = %115, %102
br label %129
129: ; preds = %128
%130 = load i32, i32* %22
%131 = add nsw i32 %130, 1
store i32 %131, i32* %22
br label %69
132: ; preds = %69
br label %133
133: ; preds = %132
%134 = load i32, i32* %21
%135 = add nsw i32 %134, 1
store i32 %135, i32* %21
br label %65
136: ; preds = %65
%137 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%138 = getelementptr inbounds [64 x double], [64 x double]* %18, i64 0, i64 0
%139 = call i32 (double*, ...) bitcast (i32 (...)* @print_matrix to i32 (double*, ...)*)(double* %138)
%140 = getelementptr inbounds [64 x double], [64 x double]* %18, i64 0, i64 0
%141 = getelementptr inbounds [8 x i32], [8 x i32]* %14, i64 0, i64 0
%142 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 0
%143 = call i32 (i32*, i32*, double*, i32*, i32*, double*, i32*, i32*, ...) bitcast (i32 (...)* @dgesv to i32 (i32*, i32*, double*, i32*, i32*, double*, i32*, i32*, ...)*)(i32* %2, i32* %5, double* %140, i32* %6, i32* %141, double* %142, i32* %7, i32* %9)
%144 = load i32, i32* %9
%145 = icmp ne i32 %144, 0
br i1 %145, label %146, label %151
146: ; preds = %136
%147 = load i32, i32* %9
%148 = load i32, i32* %9
%149 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.3, i64 0, i64 0), i32 %147, i32 %148)
%150 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
store i32 -1, i32* %1
br label %394
151: ; preds = %136
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.5, i64 0, i64 0))
%153 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 0
%154 = call i32 (double*, ...) bitcast (i32 (...)* @print_matrix to i32 (double*, ...)*)(double* %153)
%155 = load i8*, i8** %10
%156 = load i8*, i8** %11
%157 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 0
%158 = getelementptr inbounds [64 x double], [64 x double]* %17, i64 0, i64 0
%159 = getelementptr inbounds [64 x double], [64 x double]* %20, i64 0, i64 0
%160 = call i32 (i8*, i8*, i32*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemm to i32 (i8*, i8*, i32*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* %155, i8* %156, i32* %3, i32* %2, i32* %4, double* %12, double* %157, i32* %6, double* %158, i32* %7, double* %13, double* %159, i32* %8)
%161 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
%162 = getelementptr inbounds [64 x double], [64 x double]* %20, i64 0, i64 0
%163 = call i32 (double*, ...) bitcast (i32 (...)* @print_matrix to i32 (double*, ...)*)(double* %162)
%164 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.7, i64 0, i64 0))
%165 = bitcast [8 x double]* %25 to i8*
store double 0.000000e+00, double* %27
store i32 0, i32* %21
br label %166
166: ; preds = %176, %151
%167 = load i32, i32* %21
%168 = icmp slt i32 %167, 8
br i1 %168, label %169, label %179
169: ; preds = %166
%170 = load i32, i32* %21
%171 = sitofp i32 %170 to double
%172 = call double @pow(double 5.000000e-01, double %171)
%173 = load i32, i32* %21
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 %174
store double %172, double* %175
br label %176
176: ; preds = %169
%177 = load i32, i32* %21
%178 = add nsw i32 %177, 1
store i32 %178, i32* %21
br label %166
179: ; preds = %166
%180 = load i8*, i8** %10
%181 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 0
%182 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 0
%183 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 0
%184 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* %180, i32* %3, i32* %2, double* %12, double* %181, i32* %6, double* %182, i32* %23, double* %13, double* %183, i32* %24)
%185 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0))
%186 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 0
%187 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %186)
store i32 0, i32* %21
br label %188
188: ; preds = %202, %179
%189 = load i32, i32* %21
%190 = icmp slt i32 %189, 8
br i1 %190, label %191, label %205
191: ; preds = %188
%192 = load double, double* %27
%193 = load i32, i32* %21
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds [8 x double], [8 x double]* %16, i64 0, i64 %194
%196 = load double, double* %195
%197 = load i32, i32* %21
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 %198
%200 = load double, double* %199
%201 = call double @llvm.fmuladd.f64(double %196, double %200, double %192)
store double %201, double* %27
br label %202
202: ; preds = %191
%203 = load i32, i32* %21
%204 = add nsw i32 %203, 1
store i32 %204, i32* %21
br label %188
205: ; preds = %188
%206 = call double @pow(double 5.000000e-01, double 7.000000e+00)
store double %206, double* %28
%207 = load double, double* %27
%208 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %207)
%209 = load double, double* %28
%210 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double %209)
%211 = load double, double* %27
%212 = load double, double* %28
%213 = fsub double %211, %212
%214 = call double @llvm.fabs.f64(double %213)
%215 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.11, i64 0, i64 0), double %214)
%216 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i64 0, i64 0))
%217 = bitcast [8 x double]* %29 to i8*
store double 0.000000e+00, double* %31
%218 = getelementptr inbounds [8 x double], [8 x double]* %30, i64 0, i64 0
store double 0.000000e+00, double* %218
store i32 1, i32* %21
br label %219
219: ; preds = %233, %205
%220 = load i32, i32* %21
%221 = icmp slt i32 %220, 8
br i1 %221, label %222, label %236
222: ; preds = %219
%223 = load i32, i32* %21
%224 = sitofp i32 %223 to double
%225 = load i32, i32* %21
%226 = sub nsw i32 %225, 1
%227 = sitofp i32 %226 to double
%228 = call double @pow(double 5.000000e-01, double %227)
%229 = fmul double %224, %228
%230 = load i32, i32* %21
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds [8 x double], [8 x double]* %30, i64 0, i64 %231
store double %229, double* %232
br label %233
233: ; preds = %222
%234 = load i32, i32* %21
%235 = add nsw i32 %234, 1
store i32 %235, i32* %21
br label %219
236: ; preds = %219
%237 = load i8*, i8** %10
%238 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 0
%239 = getelementptr inbounds [8 x double], [8 x double]* %30, i64 0, i64 0
%240 = getelementptr inbounds [8 x double], [8 x double]* %29, i64 0, i64 0
%241 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* %237, i32* %3, i32* %2, double* %12, double* %238, i32* %6, double* %239, i32* %23, double* %13, double* %240, i32* %24)
%242 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0))
%243 = getelementptr inbounds [8 x double], [8 x double]* %29, i64 0, i64 0
%244 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %243)
store i32 0, i32* %21
br label %245
245: ; preds = %259, %236
%246 = load i32, i32* %21
%247 = icmp slt i32 %246, 8
br i1 %247, label %248, label %262
248: ; preds = %245
%249 = load double, double* %31
%250 = load i32, i32* %21
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds [8 x double], [8 x double]* %16, i64 0, i64 %251
%253 = load double, double* %252
%254 = load i32, i32* %21
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds [8 x double], [8 x double]* %29, i64 0, i64 %255
%257 = load double, double* %256
%258 = call double @llvm.fmuladd.f64(double %253, double %257, double %249)
store double %258, double* %31
br label %259
259: ; preds = %248
%260 = load i32, i32* %21
%261 = add nsw i32 %260, 1
store i32 %261, i32* %21
br label %245
262: ; preds = %245
%263 = call double @pow(double 5.000000e-01, double 6.000000e+00)
%264 = fmul double 7.000000e+00, %263
store double %264, double* %32
%265 = load double, double* %31
%266 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %265)
%267 = load double, double* %32
%268 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double %267)
%269 = load double, double* %31
%270 = load double, double* %32
%271 = fsub double %269, %270
%272 = call double @llvm.fabs.f64(double %271)
%273 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.11, i64 0, i64 0), double %272)
%274 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.13, i64 0, i64 0))
%275 = bitcast [8 x double]* %33 to i8*
store double 0.000000e+00, double* %35
%276 = getelementptr inbounds [8 x double], [8 x double]* %34, i64 0, i64 0
store double 0.000000e+00, double* %276
%277 = getelementptr inbounds [8 x double], [8 x double]* %34, i64 0, i64 1
store double 0.000000e+00, double* %277
store i32 2, i32* %21
br label %278
278: ; preds = %295, %262
%279 = load i32, i32* %21
%280 = icmp slt i32 %279, 8
br i1 %280, label %281, label %298
281: ; preds = %278
%282 = load i32, i32* %21
%283 = sub nsw i32 %282, 1
%284 = load i32, i32* %21
%285 = mul nsw i32 %283, %284
%286 = sitofp i32 %285 to double
%287 = load i32, i32* %21
%288 = sub nsw i32 %287, 2
%289 = sitofp i32 %288 to double
%290 = call double @pow(double 5.000000e-01, double %289)
%291 = fmul double %286, %290
%292 = load i32, i32* %21
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds [8 x double], [8 x double]* %34, i64 0, i64 %293
store double %291, double* %294
br label %295
295: ; preds = %281
%296 = load i32, i32* %21
%297 = add nsw i32 %296, 1
store i32 %297, i32* %21
br label %278
298: ; preds = %278
%299 = load i8*, i8** %10
%300 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 0
%301 = getelementptr inbounds [8 x double], [8 x double]* %34, i64 0, i64 0
%302 = getelementptr inbounds [8 x double], [8 x double]* %33, i64 0, i64 0
%303 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* %299, i32* %3, i32* %2, double* %12, double* %300, i32* %6, double* %301, i32* %23, double* %13, double* %302, i32* %24)
%304 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0))
%305 = getelementptr inbounds [8 x double], [8 x double]* %33, i64 0, i64 0
%306 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %305)
store i32 0, i32* %21
br label %307
307: ; preds = %321, %298
%308 = load i32, i32* %21
%309 = icmp slt i32 %308, 8
br i1 %309, label %310, label %324
310: ; preds = %307
%311 = load double, double* %35
%312 = load i32, i32* %21
%313 = sext i32 %312 to i64
%314 = getelementptr inbounds [8 x double], [8 x double]* %16, i64 0, i64 %313
%315 = load double, double* %314
%316 = load i32, i32* %21
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds [8 x double], [8 x double]* %33, i64 0, i64 %317
%319 = load double, double* %318
%320 = call double @llvm.fmuladd.f64(double %315, double %319, double %311)
store double %320, double* %35
br label %321
321: ; preds = %310
%322 = load i32, i32* %21
%323 = add nsw i32 %322, 1
store i32 %323, i32* %21
br label %307
324: ; preds = %307
%325 = call double @pow(double 5.000000e-01, double 5.000000e+00)
%326 = fmul double 4.200000e+01, %325
store double %326, double* %36
%327 = load double, double* %35
%328 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %327)
%329 = load double, double* %36
%330 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double %329)
%331 = load double, double* %35
%332 = load double, double* %36
%333 = fsub double %331, %332
%334 = call double @llvm.fabs.f64(double %333)
%335 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.11, i64 0, i64 0), double %334)
%336 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.14, i64 0, i64 0))
%337 = bitcast [8 x double]* %37 to i8*
store double 0.000000e+00, double* %39
store i32 0, i32* %21
br label %338
338: ; preds = %353, %324
%339 = load i32, i32* %21
%340 = icmp slt i32 %339, 8
br i1 %340, label %341, label %356
341: ; preds = %338
%342 = load i32, i32* %21
%343 = add nsw i32 %342, 1
%344 = sitofp i32 %343 to double
%345 = call double @pow(double 5.000000e-01, double %344)
%346 = load i32, i32* %21
%347 = add nsw i32 %346, 1
%348 = sitofp i32 %347 to double
%349 = fdiv double %345, %348
%350 = load i32, i32* %21
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds [8 x double], [8 x double]* %38, i64 0, i64 %351
store double %349, double* %352
br label %353
353: ; preds = %341
%354 = load i32, i32* %21
%355 = add nsw i32 %354, 1
store i32 %355, i32* %21
br label %338
356: ; preds = %338
%357 = load i8*, i8** %10
%358 = getelementptr inbounds [64 x double], [64 x double]* %19, i64 0, i64 0
%359 = getelementptr inbounds [8 x double], [8 x double]* %38, i64 0, i64 0
%360 = getelementptr inbounds [8 x double], [8 x double]* %37, i64 0, i64 0
%361 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* %357, i32* %3, i32* %2, double* %12, double* %358, i32* %6, double* %359, i32* %23, double* %13, double* %360, i32* %24)
%362 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0))
%363 = getelementptr inbounds [8 x double], [8 x double]* %37, i64 0, i64 0
%364 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %363)
store i32 0, i32* %21
br label %365
365: ; preds = %379, %356
%366 = load i32, i32* %21
%367 = icmp slt i32 %366, 8
br i1 %367, label %368, label %382
368: ; preds = %365
%369 = load double, double* %39
%370 = load i32, i32* %21
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds [8 x double], [8 x double]* %16, i64 0, i64 %371
%373 = load double, double* %372
%374 = load i32, i32* %21
%375 = sext i32 %374 to i64
%376 = getelementptr inbounds [8 x double], [8 x double]* %37, i64 0, i64 %375
%377 = load double, double* %376
%378 = call double @llvm.fmuladd.f64(double %373, double %377, double %369)
store double %378, double* %39
br label %379
379: ; preds = %368
%380 = load i32, i32* %21
%381 = add nsw i32 %380, 1
store i32 %381, i32* %21
br label %365
382: ; preds = %365
%383 = call double @pow(double 5.000000e-01, double 8.000000e+00)
%384 = fdiv double %383, 8.000000e+00
store double %384, double* %40
%385 = load double, double* %39
%386 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %385)
%387 = load double, double* %40
%388 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double %387)
%389 = load double, double* %39
%390 = load double, double* %40
%391 = fsub double %389, %390
%392 = call double @llvm.fabs.f64(double %391)
%393 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.15, i64 0, i64 0), double %392)
store i32 -1, i32* %1
br label %394
394: ; preds = %382, %146
%395 = load i32, i32* %1
ret i32 %395
}

LLVM IR (-O2):
@.str = [2 x i8] c"N\00"
@.str.3 = [31 x i8] c"U(%i, %i) = 0 & B is singular\0A\00"
@.str.9 = [27 x i8] c"\0ANumerical Result : %.12e\0A\00"
@.str.10 = [26 x i8] c"Analytical Result: %.12e\0A\00"
@.str.11 = [23 x i8] c"Absolute Err : %.12e\0A\0A\00"
@.str.15 = [23 x i8] c"Absolute Err : %.12f\1B\0A\00"
@str = [62 x i8] c"---------------------------PART I------------------------- \0A\00"
@str.16 = [4 x i8] c"B: \00"
@str.17 = [16 x i8] c"\0AInverse of B: \00"
@str.18 = [24 x i8] c"\0A B * (Inverse of B) : \00"
@str.19 = [63 x i8] c"---------------------------PART II------------------------- \0A\00"
@str.21 = [64 x i8] c"---------------------------PART III------------------------- \0A\00"
@str.23 = [63 x i8] c"---------------------------PART IV------------------------- \0A\00"
@str.25 = [62 x i8] c"---------------------------PART V------------------------- \0A\00"
@str.26 = [3 x i8] c"w:\00"
@str.27 = [7 x i8] c"Error!\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca double
%10 = alloca double
%11 = alloca [8 x i32]
%12 = alloca [8 x double]
%13 = alloca [64 x double]
%14 = alloca [64 x double]
%15 = alloca [64 x double]
%16 = alloca [64 x double]
%17 = alloca i32
%18 = alloca i32
%19 = alloca [8 x double]
%20 = alloca [8 x double]
%21 = alloca [8 x double]
%22 = alloca [8 x double]
%23 = alloca [8 x double]
%24 = alloca [8 x double]
%25 = alloca [8 x double]
%26 = alloca [8 x double]
%27 = bitcast i32* %1 to i8*
store i32 8, i32* %1
%28 = bitcast i32* %2 to i8*
store i32 8, i32* %2
%29 = bitcast i32* %3 to i8*
store i32 8, i32* %3
%30 = bitcast i32* %4 to i8*
store i32 8, i32* %4
%31 = bitcast i32* %5 to i8*
store i32 8, i32* %5
%32 = bitcast i32* %6 to i8*
store i32 8, i32* %6
%33 = bitcast i32* %7 to i8*
store i32 8, i32* %7
%34 = bitcast i32* %8 to i8*
%35 = bitcast double* %9 to i8*
store double 1.000000e+00, double* %9
%36 = bitcast double* %10 to i8*
store double 0.000000e+00, double* %10
%37 = bitcast [8 x i32]* %11 to i8*
%38 = bitcast [8 x double]* %12 to i8*
%39 = bitcast [64 x double]* %13 to i8*
%40 = bitcast [64 x double]* %14 to i8*
%41 = bitcast [64 x double]* %15 to i8*
%42 = bitcast [64 x double]* %16 to i8*
%43 = bitcast i32* %17 to i8*
store i32 1, i32* %17
%44 = bitcast i32* %18 to i8*
store i32 1, i32* %18
%45 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str, i64 0, i64 0))
%46 = bitcast [8 x double]* %12 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 0x3FC2492492492492>, <2 x double>* %46
%47 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 2
%48 = bitcast double* %47 to <2 x double>*
store <2 x double> <double 0x3FD2492492492492, double 0x3FDB6DB6DB6DB6DB>, <2 x double>* %48
%49 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 4
%50 = bitcast double* %49 to <2 x double>*
store <2 x double> <double 0x3FE2492492492492, double 0x3FE6DB6DB6DB6DB7>, <2 x double>* %50
%51 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 6
%52 = bitcast double* %51 to <2 x double>*
store <2 x double> <double 0x3FEB6DB6DB6DB6DB, double 1.000000e+00>, <2 x double>* %52
br label %53
53: ; preds = %130, %0
%54 = phi double [ 0.000000e+00, %0 ], [ %134, %130 ]
%55 = phi i64 [ 0, %0 ], [ %132, %130 ]
%56 = shl nsw i64 %55, 3
%57 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %56
store double 1.000000e+00, double* %57
%58 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %56
store double 1.000000e+00, double* %58
%59 = icmp eq i64 %55, 0
%60 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %56
br i1 %59, label %61, label %66
61: ; preds = %53
store double 1.000000e+00, double* %60
%62 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %56
store double 1.000000e+00, double* %62
%63 = or i64 %56, 1
%64 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %63
store double %54, double* %64
%65 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %63
store double %54, double* %65
br label %73
66: ; preds = %53
store double 0.000000e+00, double* %60
%67 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %56
store double 0.000000e+00, double* %67
%68 = or i64 %56, 1
%69 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %68
store double %54, double* %69
%70 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %68
store double %54, double* %70
%71 = icmp eq i64 %55, 1
%72 = select i1 %71, double 1.000000e+00, double 0.000000e+00
br label %73
73: ; preds = %66, %61
%74 = phi i64 [ 1, %61 ], [ %68, %66 ]
%75 = phi double [ 0.000000e+00, %61 ], [ %72, %66 ]
%76 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %74
store double %75, double* %76
%77 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %74
store double %75, double* %77
%78 = fmul double %54, %54
%79 = or i64 %56, 2
%80 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %79
store double %78, double* %80
%81 = fmul double %54, %54
%82 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %79
store double %81, double* %82
%83 = icmp eq i64 %55, 2
%84 = select i1 %83, double 1.000000e+00, double 0.000000e+00
%85 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %79
store double %84, double* %85
%86 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %79
store double %84, double* %86
%87 = tail call double @pow(double %54, double 3.000000e+00)
%88 = or i64 %56, 3
%89 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %88
store double %87, double* %89
%90 = tail call double @pow(double %54, double 3.000000e+00)
%91 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %88
store double %90, double* %91
%92 = icmp eq i64 %55, 3
%93 = select i1 %92, double 1.000000e+00, double 0.000000e+00
%94 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %88
store double %93, double* %94
%95 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %88
store double %93, double* %95
%96 = tail call double @pow(double %54, double 4.000000e+00)
%97 = or i64 %56, 4
%98 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %97
store double %96, double* %98
%99 = tail call double @pow(double %54, double 4.000000e+00)
%100 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %97
store double %99, double* %100
%101 = icmp eq i64 %55, 4
%102 = select i1 %101, double 1.000000e+00, double 0.000000e+00
%103 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %97
store double %102, double* %103
%104 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %97
store double %102, double* %104
%105 = tail call double @pow(double %54, double 5.000000e+00)
%106 = or i64 %56, 5
%107 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %106
store double %105, double* %107
%108 = tail call double @pow(double %54, double 5.000000e+00)
%109 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %106
store double %108, double* %109
%110 = icmp eq i64 %55, 5
%111 = select i1 %110, double 1.000000e+00, double 0.000000e+00
%112 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %106
store double %111, double* %112
%113 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %106
store double %111, double* %113
%114 = tail call double @pow(double %54, double 6.000000e+00)
%115 = or i64 %56, 6
%116 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %115
store double %114, double* %116
%117 = tail call double @pow(double %54, double 6.000000e+00)
%118 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %115
store double %117, double* %118
%119 = icmp eq i64 %55, 6
%120 = select i1 %119, double 1.000000e+00, double 0.000000e+00
%121 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %115
store double %120, double* %121
%122 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %115
store double %120, double* %122
%123 = tail call double @pow(double %54, double 7.000000e+00)
%124 = or i64 %56, 7
%125 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 %124
store double %123, double* %125
%126 = tail call double @pow(double %54, double 7.000000e+00)
%127 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 %124
store double %126, double* %127
%128 = icmp eq i64 %55, 7
%129 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 %124
br i1 %128, label %135, label %130
130: ; preds = %73
store double 0.000000e+00, double* %129
%131 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %124
store double 0.000000e+00, double* %131
%132 = add nuw nsw i64 %55, 1
%133 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 %132
%134 = load double, double* %133
br label %53
135: ; preds = %73
store double 1.000000e+00, double* %129
%136 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 %124
store double 1.000000e+00, double* %136
%137 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @str.16, i64 0, i64 0))
%138 = getelementptr inbounds [64 x double], [64 x double]* %14, i64 0, i64 0
%139 = call i32 (double*, ...) bitcast (i32 (...)* @print_matrix to i32 (double*, ...)*)(double* %138)
%140 = getelementptr inbounds [8 x i32], [8 x i32]* %11, i64 0, i64 0
%141 = getelementptr inbounds [64 x double], [64 x double]* %15, i64 0, i64 0
%142 = call i32 (i32*, i32*, double*, i32*, i32*, double*, i32*, i32*, ...) bitcast (i32 (...)* @dgesv to i32 (i32*, i32*, double*, i32*, i32*, double*, i32*, i32*, ...)*)(i32* %1, i32* %4, double* %138, i32* %5, i32* %140, double* %141, i32* %6, i32* %8)
%143 = load i32, i32* %8
%144 = icmp eq i32 %143, 0
br i1 %144, label %148, label %145
145: ; preds = %135
%146 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.3, i64 0, i64 0), i32 %143, i32 %143)
%147 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.27, i64 0, i64 0))
br label %357
148: ; preds = %135
%149 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.17, i64 0, i64 0))
%150 = call i32 (double*, ...) bitcast (i32 (...)* @print_matrix to i32 (double*, ...)*)(double* %141)
%151 = getelementptr inbounds [64 x double], [64 x double]* %13, i64 0, i64 0
%152 = getelementptr inbounds [64 x double], [64 x double]* %16, i64 0, i64 0
%153 = call i32 (i8*, i8*, i32*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemm to i32 (i8*, i8*, i32*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %1, i32* %3, double* %9, double* %141, i32* %5, double* %151, i32* %6, double* %10, double* %152, i32* %7)
%154 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str.18, i64 0, i64 0))
%155 = call i32 (double*, ...) bitcast (i32 (...)* @print_matrix to i32 (double*, ...)*)(double* %152)
%156 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.19, i64 0, i64 0))
%157 = bitcast [8 x double]* %19 to i8*
%158 = bitcast [8 x double]* %20 to i8*
%159 = call double @exp2(double -0.000000e+00)
%160 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 0
store double 1.000000e+00, double* %160
%161 = call double @exp2(double -1.000000e+00)
%162 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 1
store double 5.000000e-01, double* %162
%163 = call double @exp2(double -2.000000e+00)
%164 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 2
store double 2.500000e-01, double* %164
%165 = call double @exp2(double -3.000000e+00)
%166 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 3
store double 1.250000e-01, double* %166
%167 = call double @exp2(double -4.000000e+00)
%168 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 4
store double 6.250000e-02, double* %168
%169 = call double @exp2(double -5.000000e+00)
%170 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 5
store double 3.125000e-02, double* %170
%171 = call double @exp2(double -6.000000e+00)
%172 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 6
store double 1.562500e-02, double* %172
%173 = call double @exp2(double -7.000000e+00)
%174 = getelementptr inbounds [8 x double], [8 x double]* %20, i64 0, i64 7
store double 7.812500e-03, double* %174
%175 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 0
%176 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %1, double* %9, double* %141, i32* %5, double* %160, i32* %17, double* %10, double* %175, i32* %18)
%177 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.26, i64 0, i64 0))
%178 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %175)
%179 = load double, double* %175
%180 = call double @llvm.fmuladd.f64(double %179, double 0.000000e+00, double 0.000000e+00)
%181 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 1
%182 = load double, double* %181
%183 = call double @llvm.fmuladd.f64(double %182, double 0x3EB45F3B3BB08298, double %180)
%184 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 2
%185 = load double, double* %184
%186 = call double @llvm.fmuladd.f64(double %185, double 0x3F245F3B3BB08298, double %183)
%187 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 3
%188 = load double, double* %187
%189 = call double @llvm.fmuladd.f64(double %188, double 0x3F65C131E0DD9D75, double %186)
%190 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 4
%191 = load double, double* %190
%192 = call double @llvm.fmuladd.f64(double %191, double 0x3F945F3B3BB08298, double %189)
%193 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 5
%194 = load double, double* %193
%195 = call double @llvm.fmuladd.f64(double %194, double 0x3FB8490A4F86C9A2, double %192)
%196 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 6
%197 = load double, double* %196
%198 = call double @llvm.fmuladd.f64(double %197, double 0x3FD5C131E0DD9D75, double %195)
%199 = getelementptr inbounds [8 x double], [8 x double]* %19, i64 0, i64 7
%200 = load double, double* %199
%201 = fadd double %200, %198
%202 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %201)
%203 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double 7.812500e-03)
%204 = fadd double %201, -7.812500e-03
%205 = call double @llvm.fabs.f64(double %204)
%206 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.11, i64 0, i64 0), double %205)
%207 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.21, i64 0, i64 0))
%208 = bitcast [8 x double]* %21 to i8*
%209 = bitcast [8 x double]* %22 to i8*
%210 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 0
store double 0.000000e+00, double* %210
%211 = call double @exp2(double -0.000000e+00)
%212 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 1
store double 1.000000e+00, double* %212
%213 = call double @exp2(double -1.000000e+00)
%214 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 2
store double 1.000000e+00, double* %214
%215 = call double @exp2(double -2.000000e+00)
%216 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 3
store double 7.500000e-01, double* %216
%217 = call double @exp2(double -3.000000e+00)
%218 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 4
store double 5.000000e-01, double* %218
%219 = call double @exp2(double -4.000000e+00)
%220 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 5
store double 3.125000e-01, double* %220
%221 = call double @exp2(double -5.000000e+00)
%222 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 6
store double 1.875000e-01, double* %222
%223 = call double @exp2(double -6.000000e+00)
%224 = getelementptr inbounds [8 x double], [8 x double]* %22, i64 0, i64 7
store double 1.093750e-01, double* %224
%225 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 0
%226 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %1, double* %9, double* %141, i32* %5, double* %210, i32* %17, double* %10, double* %225, i32* %18)
%227 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.26, i64 0, i64 0))
%228 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %225)
%229 = load double, double* %225
%230 = call double @llvm.fmuladd.f64(double %229, double 0.000000e+00, double 0.000000e+00)
%231 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 1
%232 = load double, double* %231
%233 = call double @llvm.fmuladd.f64(double %232, double 0x3EB45F3B3BB08298, double %230)
%234 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 2
%235 = load double, double* %234
%236 = call double @llvm.fmuladd.f64(double %235, double 0x3F245F3B3BB08298, double %233)
%237 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 3
%238 = load double, double* %237
%239 = call double @llvm.fmuladd.f64(double %238, double 0x3F65C131E0DD9D75, double %236)
%240 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 4
%241 = load double, double* %240
%242 = call double @llvm.fmuladd.f64(double %241, double 0x3F945F3B3BB08298, double %239)
%243 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 5
%244 = load double, double* %243
%245 = call double @llvm.fmuladd.f64(double %244, double 0x3FB8490A4F86C9A2, double %242)
%246 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 6
%247 = load double, double* %246
%248 = call double @llvm.fmuladd.f64(double %247, double 0x3FD5C131E0DD9D75, double %245)
%249 = getelementptr inbounds [8 x double], [8 x double]* %21, i64 0, i64 7
%250 = load double, double* %249
%251 = fadd double %250, %248
%252 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %251)
%253 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double 1.093750e-01)
%254 = fadd double %251, -1.093750e-01
%255 = call double @llvm.fabs.f64(double %254)
%256 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.11, i64 0, i64 0), double %255)
%257 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.23, i64 0, i64 0))
%258 = bitcast [8 x double]* %23 to i8*
%259 = bitcast [8 x double]* %24 to i8*
%260 = getelementptr inbounds [8 x double], [8 x double]* %24, i64 0, i64 0
%261 = bitcast [8 x double]* %24 to i8*
%262 = call double @exp2(double -0.000000e+00)
%263 = getelementptr inbounds [8 x double], [8 x double]* %24, i64 0, i64 2
store double 2.000000e+00, double* %263
%264 = call double @exp2(double -1.000000e+00)
%265 = getelementptr inbounds [8 x double], [8 x double]* %24, i64 0, i64 3
store double 3.000000e+00, double* %265
%266 = call double @exp2(double -2.000000e+00)
%267 = getelementptr inbounds [8 x double], [8 x double]* %24, i64 0, i64 4
store double 3.000000e+00, double* %267
%268 = call double @exp2(double -3.000000e+00)
%269 = getelementptr inbounds [8 x double], [8 x double]* %24, i64 0, i64 5
store double 2.500000e+00, double* %269
%270 = call double @exp2(double -4.000000e+00)
%271 = getelementptr inbounds [8 x double], [8 x double]* %24, i64 0, i64 6
store double 1.875000e+00, double* %271
%272 = call double @exp2(double -5.000000e+00)
%273 = getelementptr inbounds [8 x double], [8 x double]* %24, i64 0, i64 7
store double 1.312500e+00, double* %273
%274 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 0
%275 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %1, double* %9, double* %141, i32* %5, double* %260, i32* %17, double* %10, double* %274, i32* %18)
%276 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.26, i64 0, i64 0))
%277 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %274)
%278 = load double, double* %274
%279 = call double @llvm.fmuladd.f64(double %278, double 0.000000e+00, double 0.000000e+00)
%280 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 1
%281 = load double, double* %280
%282 = call double @llvm.fmuladd.f64(double %281, double 0x3EB45F3B3BB08298, double %279)
%283 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 2
%284 = load double, double* %283
%285 = call double @llvm.fmuladd.f64(double %284, double 0x3F245F3B3BB08298, double %282)
%286 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 3
%287 = load double, double* %286
%288 = call double @llvm.fmuladd.f64(double %287, double 0x3F65C131E0DD9D75, double %285)
%289 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 4
%290 = load double, double* %289
%291 = call double @llvm.fmuladd.f64(double %290, double 0x3F945F3B3BB08298, double %288)
%292 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 5
%293 = load double, double* %292
%294 = call double @llvm.fmuladd.f64(double %293, double 0x3FB8490A4F86C9A2, double %291)
%295 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 6
%296 = load double, double* %295
%297 = call double @llvm.fmuladd.f64(double %296, double 0x3FD5C131E0DD9D75, double %294)
%298 = getelementptr inbounds [8 x double], [8 x double]* %23, i64 0, i64 7
%299 = load double, double* %298
%300 = fadd double %299, %297
%301 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %300)
%302 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double 1.312500e+00)
%303 = fadd double %300, -1.312500e+00
%304 = call double @llvm.fabs.f64(double %303)
%305 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.11, i64 0, i64 0), double %304)
%306 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str.25, i64 0, i64 0))
%307 = bitcast [8 x double]* %25 to i8*
%308 = bitcast [8 x double]* %26 to i8*
%309 = call double @exp2(double -1.000000e+00)
%310 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 0
store double 5.000000e-01, double* %310
%311 = call double @exp2(double -2.000000e+00)
%312 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 1
store double 1.250000e-01, double* %312
%313 = call double @exp2(double -3.000000e+00)
%314 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 2
store double 0x3FA5555555555555, double* %314
%315 = call double @exp2(double -4.000000e+00)
%316 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 3
store double 1.562500e-02, double* %316
%317 = call double @exp2(double -5.000000e+00)
%318 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 4
store double 6.250000e-03, double* %318
%319 = call double @exp2(double -6.000000e+00)
%320 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 5
store double 0x3F65555555555555, double* %320
%321 = call double @exp2(double -7.000000e+00)
%322 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 6
store double 0x3F52492492492492, double* %322
%323 = call double @exp2(double -8.000000e+00)
%324 = getelementptr inbounds [8 x double], [8 x double]* %26, i64 0, i64 7
store double 0x3F40000000000000, double* %324
%325 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 0
%326 = call i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...) bitcast (i32 (...)* @dgemv to i32 (i8*, i32*, i32*, double*, double*, i32*, double*, i32*, double*, double*, i32*, ...)*)(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %1, double* %9, double* %141, i32* %5, double* %310, i32* %17, double* %10, double* %325, i32* %18)
%327 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.26, i64 0, i64 0))
%328 = call i32 (double*, ...) bitcast (i32 (...)* @print_vector to i32 (double*, ...)*)(double* %325)
%329 = load double, double* %325
%330 = call double @llvm.fmuladd.f64(double %329, double 0.000000e+00, double 0.000000e+00)
%331 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 1
%332 = load double, double* %331
%333 = call double @llvm.fmuladd.f64(double %332, double 0x3EB45F3B3BB08298, double %330)
%334 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 2
%335 = load double, double* %334
%336 = call double @llvm.fmuladd.f64(double %335, double 0x3F245F3B3BB08298, double %333)
%337 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 3
%338 = load double, double* %337
%339 = call double @llvm.fmuladd.f64(double %338, double 0x3F65C131E0DD9D75, double %336)
%340 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 4
%341 = load double, double* %340
%342 = call double @llvm.fmuladd.f64(double %341, double 0x3F945F3B3BB08298, double %339)
%343 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 5
%344 = load double, double* %343
%345 = call double @llvm.fmuladd.f64(double %344, double 0x3FB8490A4F86C9A2, double %342)
%346 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 6
%347 = load double, double* %346
%348 = call double @llvm.fmuladd.f64(double %347, double 0x3FD5C131E0DD9D75, double %345)
%349 = getelementptr inbounds [8 x double], [8 x double]* %25, i64 0, i64 7
%350 = load double, double* %349
%351 = fadd double %350, %348
%352 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0), double %351)
%353 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0), double 0x3F40000000000000)
%354 = fadd double %351, 0xBF40000000000000
%355 = call double @llvm.fabs.f64(double %354)
%356 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.15, i64 0, i64 0), double %355)
br label %357
357: ; preds = %148, %145
ret i32 -1
}