double *vectores(double *arr, int row, int col, int c_actual) {
  int i, j, k;
  int sum_prod_c = 0;
  int sum_prod_p = 0;
  int sum_prod_v = 0;
  double beta = 0;
  double mu, sigma, v_1, acumula;
  int vectorc[4] = {0, 0, 0, 0};
  double vector[4] = {0, 0, 0, 0};
  for (i = 0; i < row - c_actual; i++) {
    vectorc[i] = *(arr + ((i + c_actual) * col) + c_actual);
    sum_prod_c += vectorc[i] * vectorc[i];
    if (i > 0)
      sum_prod_p += vectorc[i] * vectorc[i];
    if (i == 0)
      vector[i] = 1;
    else
      vector[i] = vectorc[i];
    printf(" Vector completo: %d \n", vectorc[i]);
    printf(" Vector V : %f \n", vector[i]);
  }
  mu = sqrt(sum_prod_c);
  sigma = sum_prod_p;
  printf(" MU: %f \n", mu);
  printf(" sigma: %f \n\n", sigma);
  if (sigma == 0 && vectorc[0] >= 0)
    beta = 0;
  else if (sigma == 0 && vectorc[0] < 0)
    beta = -2;
  else if (vectorc[0] <= 0)
    v_1 = vectorc[1] - mu;
  else
    v_1 = -sigma / (vectorc[0] + mu);
  beta = 2 * pow(v_1, 2) / (sigma + pow(v_1, 2));
  for (i = 0; i < row - c_actual; i++) {
    vector[i] = vector[i] / v_1;
    sum_prod_v += vector[i] * vector[i];
    printf(" Vector V de householder : %f \n", vector[i]);
  }
  printf(" \n Beta: %f \n\n", beta);
  printf(" \n V_1: %f \n\n", v_1);
  double I_Bvvt[4][4] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
  for (i = 0; i < row - c_actual; i++) {
    for (j = 0; j < row - c_actual; j++) {
      if (i != j)
        I_Bvvt[i][j] = -1 * (beta * vector[i] * vector[j]);
      else
        I_Bvvt[i][j] = 1 - (beta * vector[i] * vector[j]);
    }
  }
  show((double *)I_Bvvt, 4, 4);
  for (i = 0; i < 4; i++) {
    for (j = 0; j < col; j++) {
      for (k = 0; k < 4; k++) {
        acumula += ((I_Bvvt[j][k]) * (*(arr + ((i + k) * col) + k)));
        printf("acumula : %f\n", acumula);
      }
      *(arr + ((j + col) * k) + col) = acumula;
      acumula = 0;
    }
    *(arr + ((i + c_actual) * col) + c_actual);
    acumula = 0;
    printf("acumula total: %f\n", acumula);
  }
  printf("acaboooooo \n");
  printf("Nuevo Arreglo \n");
  show((double *)arr, 4, 3);
}


x86 assembly (clang, -O0):
<vectores>:
push   %rbp
mov    %rsp,%rbp
sub    $0x120,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
lea    -0x70(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1040 <memset@plt>
lea    -0x90(%rbp),%rdi
xor    %esi,%esi
mov    $0x20,%edx
call   1040 <memset@plt>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
cmp    %ecx,%eax
jge    129b <vectores+0x14b>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    -0x1c(%rbp),%ecx
imul   -0x18(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
cvttsd2si (%rax,%rcx,8),%ecx
movslq -0x20(%rbp),%rax
mov    %ecx,-0x70(%rbp,%rax,4)
movslq -0x20(%rbp),%rax
mov    -0x70(%rbp,%rax,4),%eax
movslq -0x20(%rbp),%rcx
imul   -0x70(%rbp,%rcx,4),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x20(%rbp)
jle    1221 <vectores+0xd1>
movslq -0x20(%rbp),%rax
mov    -0x70(%rbp,%rax,4),%eax
movslq -0x20(%rbp),%rcx
imul   -0x70(%rbp,%rcx,4),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x20(%rbp)
jne    1245 <vectores+0xf5>
movslq -0x20(%rbp),%rax
movsd  0xdd9(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp,%rax,8)
ff ff
jmp    125c <vectores+0x10c>
movslq -0x20(%rbp),%rax
cvtsi2sdl -0x70(%rbp,%rax,4),%xmm0
movslq -0x20(%rbp),%rax
movsd  %xmm0,-0x90(%rbp,%rax,8)
ff ff
movslq -0x20(%rbp),%rax
mov    -0x70(%rbp,%rax,4),%esi
lea    0xdb5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movslq -0x20(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
lea    0xdb1(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11af <vectores+0x5f>
cvtsi2sdl -0x2c(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdl -0x30(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
lea    0xd88(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x50(%rbp),%xmm0
lea    0xd7f(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1309 <vectores+0x1b9>
jp     1309 <vectores+0x1b9>
cmpl   $0x0,-0x70(%rbp)
jl     1309 <vectores+0x1b9>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1394 <vectores+0x244>
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    133d <vectores+0x1ed>
jp     133d <vectores+0x1ed>
cmpl   $0x0,-0x70(%rbp)
jge    133d <vectores+0x1ed>
movsd  0xccd(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    138f <vectores+0x23f>
cmpl   $0x0,-0x70(%rbp)
jg     135b <vectores+0x20b>
cvtsi2sdl -0x6c(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    138a <vectores+0x23a>
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
cvtsi2sdl -0x70(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    138f <vectores+0x23f>
jmp    1394 <vectores+0x244>
movsd  -0x58(%rbp),%xmm0
movsd  0xc67(%rip),%xmm1
call   1060 <pow@plt>
movaps %xmm0,%xmm1
movsd  0xc57(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  0xc31(%rip),%xmm1
call   1060 <pow@plt>
movsd  -0x120(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x118(%rbp),%xmm0
ff
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
cmp    %ecx,%eax
jge    148a <vectores+0x33a>
movslq -0x20(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
divsd  -0x58(%rbp),%xmm0
movslq -0x20(%rbp),%rax
movsd  %xmm0,-0x90(%rbp,%rax,8)
ff ff
movslq -0x20(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
movslq -0x20(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm2
ff ff
cvtsi2sdl -0x34(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x34(%rbp)
movslq -0x20(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
lea    0xbeb(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1403 <vectores+0x2b3>
movsd  -0x40(%rbp),%xmm0
lea    0xbea(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x58(%rbp),%xmm0
lea    0xbe6(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
lea    -0x110(%rbp),%rdi
xor    %esi,%esi
mov    $0x80,%edx
call   1040 <memset@plt>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
cmp    %ecx,%eax
jge    15d1 <vectores+0x481>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
cmp    %ecx,%eax
jge    15be <vectores+0x46e>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     154a <vectores+0x3fa>
movsd  -0x40(%rbp),%xmm1
movslq -0x20(%rbp),%rax
mulsd  -0x90(%rbp,%rax,8),%xmm1
ff ff
movslq -0x24(%rbp),%rax
mulsd  -0x90(%rbp,%rax,8),%xmm1
ff ff
movsd  0xaf2(%rip),%xmm0
mulsd  %xmm1,%xmm0
movslq -0x20(%rbp),%rcx
lea    -0x110(%rbp),%rax
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    15ab <vectores+0x45b>
movsd  -0x40(%rbp),%xmm0
movslq -0x20(%rbp),%rax
mulsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
movslq -0x24(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm1
ff ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xa84(%rip),%xmm1
addsd  %xmm1,%xmm0
movslq -0x20(%rbp),%rcx
lea    -0x110(%rbp),%rax
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    15b0 <vectores+0x460>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    14e2 <vectores+0x392>
jmp    15c3 <vectores+0x473>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    14ca <vectores+0x37a>
lea    -0x110(%rbp),%rdi
mov    $0x4,%edx
mov    %edx,%esi
mov    $0x0,%al
call   1050 <show@plt>
movl   $0x0,-0x20(%rbp)
cmpl   $0x4,-0x20(%rbp)
jge    16ef <vectores+0x59f>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    16c6 <vectores+0x576>
movl   $0x0,-0x28(%rbp)
cmpl   $0x4,-0x28(%rbp)
jge    168a <vectores+0x53a>
movslq -0x24(%rbp),%rcx
lea    -0x110(%rbp),%rax
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    -0x28(%rbp),%ecx
imul   -0x18(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
lea    0xa28(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1611 <vectores+0x4c1>
movsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    -0x18(%rbp),%ecx
imul   -0x28(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    15fe <vectores+0x4ae>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
lea    0x9d1(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    15ed <vectores+0x49d>
lea    0x9c8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x9c7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%rdi
mov    $0x4,%esi
mov    $0x3,%edx
mov    $0x0,%al
call   1050 <show@plt>
mov    -0x8(%rbp),%rax
add    $0x120,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<vectores>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x118,%rsp
xorps  %xmm0,%xmm0
movaps %xmm0,0x70(%rsp)
movaps %xmm0,0x60(%rsp)
movaps %xmm0,0x50(%rsp)
sub    %ecx,%esi
xorpd  %xmm1,%xmm1
mov    %edx,0x44(%rsp)
movslq %edx,%r13
mov    %esi,%r14d
test   %esi,%esi
mov    %rdi,0x38(%rsp)
mov    %r13,0x48(%rsp)
mov    %esi,0x18(%rsp)
jle    1284 <vectores+0x144>
mov    %rdi,%r12
movslq %ecx,%rcx
mov    %rcx,%rax
imul   %r13,%rax
lea    (%rdi,%rax,8),%rax
mov    %rcx,(%rsp)
cvttsd2si (%rax,%rcx,8),%ecx
mov    %ecx,0x70(%rsp)
mov    %ecx,%ebp
imul   %ecx,%ebp
movabs $0x3ff0000000000000,%rax
mov    %rax,0x50(%rsp)
lea    0xe5e(%rip),%rdi
mov    %esi,%ebx
xor    %r15d,%r15d
mov    %ecx,0x20(%rsp)
mov    %ecx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xe5c(%rip),%rdi
movsd  0xe1d(%rip),%xmm0
movsd  %xmm0,0x30(%rsp)
mov    $0x1,%al
call   1040 <printf@plt>
cmp    $0x1,%ebx
je     127a <vectores+0x13a>
mov    (%rsp),%rcx
lea    0x1(%rcx),%rax
imul   %r13,%rax
add    %rcx,%rax
lea    (%r12,%rax,8),%rbx
lea    0x0(,%r13,8),%r13
mov    $0x1,%r12d
xor    %r15d,%r15d
nopl   (%rax)
movsd  (%rbx),%xmm0
cvttsd2si %xmm0,%esi
mov    %esi,0x70(%rsp,%r12,4)
mov    %esi,%eax
imul   %esi,%eax
add    %eax,%ebp
cvttpd2dq %xmm0,%xmm0
add    %eax,%r15d
cvtdq2pd %xmm0,%xmm0
movaps %xmm0,(%rsp)
movlps %xmm0,0x50(%rsp,%r12,8)
lea    0xdd0(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xdd9(%rip),%rdi
movaps (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
add    $0x1,%r12
add    %r13,%rbx
cmp    %r12,%r14
jne    1220 <vectores+0xe0>
mov    0x48(%rsp),%r13
mov    0x20(%rsp),%ebx
xorpd  %xmm1,%xmm1
jmp    1294 <vectores+0x154>
xor    %ebx,%ebx
xorps  %xmm0,%xmm0
movsd  %xmm0,0x30(%rsp)
xor    %ebp,%ebp
xor    %r15d,%r15d
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
ucomisd %xmm1,%xmm0
jb     12a7 <vectores+0x167>
sqrtsd %xmm0,%xmm0
jmp    12ac <vectores+0x16c>
call   1060 <sqrt@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %r15d,%xmm1
movapd %xmm1,(%rsp)
lea    0xd88(%rip),%rdi
movsd  %xmm0,0x20(%rsp)
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xd7e(%rip),%rdi
movapd (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
test   %r15d,%r15d
je     1316 <vectores+0x1d6>
test   %ebx,%ebx
jle    1318 <vectores+0x1d8>
movapd 0xd1f(%rip),%xmm1
movapd (%rsp),%xmm2
xorpd  %xmm2,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  0x20(%rsp),%xmm3
addsd  %xmm0,%xmm3
divsd  %xmm3,%xmm1
mov    0x18(%rsp),%r15d
jmp    1331 <vectores+0x1f1>
jmp    1327 <vectores+0x1e7>
xorps  %xmm1,%xmm1
cvtsi2sdl 0x74(%rsp),%xmm1
subsd  0x20(%rsp),%xmm1
mov    0x18(%rsp),%r15d
movapd (%rsp),%xmm2
movapd %xmm1,(%rsp)
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
addsd  %xmm0,%xmm1
addsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
movapd %xmm1,0x20(%rsp)
test   %r15d,%r15d
jle    13b4 <vectores+0x274>
movsd  0x30(%rsp),%xmm0
divsd  (%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
lea    0xcef(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
cmp    $0x1,%r15d
je     13b4 <vectores+0x274>
mov    $0x1,%ebx
lea    0xcd6(%rip),%rbp
nopw   0x0(%rax,%rax,1)
movsd  0x50(%rsp,%rbx,8),%xmm0
divsd  (%rsp),%xmm0
movsd  %xmm0,0x50(%rsp,%rbx,8)
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
add    $0x1,%rbx
cmp    %rbx,%r14
jne    1390 <vectores+0x250>
lea    0xcc5(%rip),%rdi
movaps 0x20(%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xcc1(%rip),%rdi
movapd (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
movapd 0x20(%rsp),%xmm4
xorpd  %xmm0,%xmm0
movapd %xmm0,0x100(%rsp)
movapd %xmm0,0xf0(%rsp)
movapd %xmm0,0xe0(%rsp)
movapd %xmm0,0xd0(%rsp)
movapd %xmm0,0xc0(%rsp)
movapd %xmm0,0xb0(%rsp)
movapd %xmm0,0xa0(%rsp)
movapd %xmm0,0x90(%rsp)
test   %r15d,%r15d
jle    14a3 <vectores+0x363>
xorpd  0xbd7(%rip),%xmm4
lea    0x90(%rsp),%rax
xor    %ecx,%ecx
movsd  0xbb5(%rip),%xmm0
jmp    145d <vectores+0x31d>
nopl   (%rax)
add    $0x1,%rcx
add    $0x20,%rax
cmp    %r14,%rcx
je     14a3 <vectores+0x363>
movsd  0x50(%rsp,%rcx,8),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm4,%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
xor    %edx,%edx
jmp    148e <vectores+0x34e>
nopw   0x0(%rax,%rax,1)
movsd  %xmm3,(%rax,%rdx,8)
add    $0x1,%rdx
cmp    %rdx,%r14
je     1450 <vectores+0x310>
movapd %xmm1,%xmm3
cmp    %rdx,%rcx
je     1480 <vectores+0x340>
movsd  0x50(%rsp,%rdx,8),%xmm3
mulsd  %xmm2,%xmm3
jmp    1480 <vectores+0x340>
xor    %r15d,%r15d
lea    0x90(%rsp),%rdi
mov    $0x4,%esi
mov    $0x4,%edx
xor    %eax,%eax
call   1050 <show@plt>
mov    %r13d,%r12d
lea    0x0(,%r13,4),%rax
add    %r13,%rax
mov    0x38(%rsp),%rcx
lea    (%rcx,%rax,8),%r14
shl    $0x5,%r12
lea    0xbbc(%rip),%rbp
jmp    1513 <vectores+0x3d3>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r15
mov    %r15,%rbx
xorpd  %xmm0,%xmm0
lea    0xba9(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
cmp    $0x4,%rbx
je     1632 <vectores+0x4f2>
cmpl   $0x0,0x44(%rsp)
jle    14f0 <vectores+0x3b0>
mov    %r15,%rax
imul   %r13,%rax
mov    %rax,0x20(%rsp)
lea    0x1(%r15),%rax
mov    %rax,0x88(%rsp)
imul   %r13,%rax
mov    %rax,0x18(%rsp)
lea    0x2(%r15),%rax
imul   %r13,%rax
mov    %rax,0x30(%rsp)
add    $0x3,%r15
imul   %r13,%r15
xor    %r13d,%r13d
mov    %r15,%rbx
mov    0x38(%rsp),%r15
nopl   0x0(%rax,%rax,1)
movsd  0x90(%rsp,%r13,1),%xmm0
mov    0x20(%rsp),%rax
mulsd  (%r15,%rax,8),%xmm0
addsd  0xa8b(%rip),%xmm0
movsd  %xmm0,(%rsp)
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x98(%rsp,%r13,1),%xmm0
mov    0x18(%rsp),%rax
mulsd  0x8(%r15,%rax,8),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0xa0(%rsp,%r13,1),%xmm0
mov    0x30(%rsp),%rax
mulsd  0x10(%r15,%rax,8),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0xa8(%rsp,%r13,1),%xmm0
mulsd  0x18(%r15,%rbx,8),%xmm0
addsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
movsd  %xmm0,(%r14,%r13,1)
add    $0x20,%r13
cmp    %r13,%r12
jne    1560 <vectores+0x420>
mov    0x88(%rsp),%rbx
mov    %rbx,%r15
mov    0x48(%rsp),%r13
jmp    14f7 <vectores+0x3b7>
lea    0xa85(%rip),%rdi
call   1030 <puts@plt>
lea    0xa85(%rip),%rdi
call   1030 <puts@plt>
mov    0x38(%rsp),%rdi
mov    $0x4,%esi
mov    $0x3,%edx
xor    %eax,%eax
call   1050 <show@plt>
add    $0x118,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [23 x i8] c" Vector completo: %d \0A\00"
@.str.1 = [17 x i8] c" Vector V : %f \0A\00"
@.str.2 = [10 x i8] c" MU: %f \0A\00"
@.str.3 = [14 x i8] c" sigma: %f \0A\0A\00"
@.str.4 = [32 x i8] c" Vector V de householder : %f \0A\00"
@.str.5 = [15 x i8] c" \0A Beta: %f \0A\0A\00"
@.str.6 = [14 x i8] c" \0A V_1: %f \0A\0A\00"
@.str.7 = [14 x i8] c"acumula : %f\0A\00"
@.str.8 = [19 x i8] c"acumula total: %f\0A\00"
@.str.9 = [13 x i8] c"acaboooooo \0A\00"
@.str.10 = [16 x i8] c"Nuevo Arreglo \0A\00"
define double* @vectores(double* %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca double*
%6 = alloca double*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca [4 x i32]
%22 = alloca [4 x double]
%23 = alloca [4 x [4 x double]]
store double* %0, double** %6
store i32 %1, i32* %7
store i32 %2, i32* %8
store i32 %3, i32* %9
store i32 0, i32* %13
store i32 0, i32* %14
store i32 0, i32* %15
store double 0.000000e+00, double* %16
%24 = bitcast [4 x i32]* %21 to i8*
%25 = bitcast [4 x double]* %22 to i8*
store i32 0, i32* %10
br label %26
26: ; preds = %101, %4
%27 = load i32, i32* %10
%28 = load i32, i32* %7
%29 = load i32, i32* %9
%30 = sub nsw i32 %28, %29
%31 = icmp slt i32 %27, %30
br i1 %31, label %32, label %104
32: ; preds = %26
%33 = load double*, double** %6
%34 = load i32, i32* %10
%35 = load i32, i32* %9
%36 = add nsw i32 %34, %35
%37 = load i32, i32* %8
%38 = mul nsw i32 %36, %37
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds double, double* %33, i64 %39
%41 = load i32, i32* %9
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %40, i64 %42
%44 = load double, double* %43
%45 = fptosi double %44 to i32
%46 = load i32, i32* %10
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 %47
store i32 %45, i32* %48
%49 = load i32, i32* %10
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 %50
%52 = load i32, i32* %51
%53 = load i32, i32* %10
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 %54
%56 = load i32, i32* %55
%57 = mul nsw i32 %52, %56
%58 = load i32, i32* %13
%59 = add nsw i32 %58, %57
store i32 %59, i32* %13
%60 = load i32, i32* %10
%61 = icmp sgt i32 %60, 0
br i1 %61, label %62, label %74
62: ; preds = %32
%63 = load i32, i32* %10
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 %64
%66 = load i32, i32* %65
%67 = load i32, i32* %10
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 %68
%70 = load i32, i32* %69
%71 = mul nsw i32 %66, %70
%72 = load i32, i32* %14
%73 = add nsw i32 %72, %71
store i32 %73, i32* %14
br label %74
74: ; preds = %62, %32
%75 = load i32, i32* %10
%76 = icmp eq i32 %75, 0
br i1 %76, label %77, label %81
77: ; preds = %74
%78 = load i32, i32* %10
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %79
store double 1.000000e+00, double* %80
br label %90
81: ; preds = %74
%82 = load i32, i32* %10
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 %83
%85 = load i32, i32* %84
%86 = sitofp i32 %85 to double
%87 = load i32, i32* %10
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %88
store double %86, double* %89
br label %90
90: ; preds = %81, %77
%91 = load i32, i32* %10
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 %92
%94 = load i32, i32* %93
%95 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0), i32 %94)
%96 = load i32, i32* %10
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %97
%99 = load double, double* %98
%100 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), double %99)
br label %101
101: ; preds = %90
%102 = load i32, i32* %10
%103 = add nsw i32 %102, 1
store i32 %103, i32* %10
br label %26
104: ; preds = %26
%105 = load i32, i32* %13
%106 = sitofp i32 %105 to double
%107 = call double @sqrt(double %106)
store double %107, double* %17
%108 = load i32, i32* %14
%109 = sitofp i32 %108 to double
store double %109, double* %18
%110 = load double, double* %17
%111 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0), double %110)
%112 = load double, double* %18
%113 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.3, i64 0, i64 0), double %112)
%114 = load double, double* %18
%115 = fcmp oeq double %114, 0.000000e+00
br i1 %115, label %116, label %121
116: ; preds = %104
%117 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 0
%118 = load i32, i32* %117
%119 = icmp sge i32 %118, 0
br i1 %119, label %120, label %121
120: ; preds = %116
store double 0.000000e+00, double* %16
br label %150
121: ; preds = %116, %104
%122 = load double, double* %18
%123 = fcmp oeq double %122, 0.000000e+00
br i1 %123, label %124, label %129
124: ; preds = %121
%125 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 0
%126 = load i32, i32* %125
%127 = icmp slt i32 %126, 0
br i1 %127, label %128, label %129
128: ; preds = %124
store double -2.000000e+00, double* %16
br label %149
129: ; preds = %124, %121
%130 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 0
%131 = load i32, i32* %130
%132 = icmp sle i32 %131, 0
br i1 %132, label %133, label %139
133: ; preds = %129
%134 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 1
%135 = load i32, i32* %134
%136 = sitofp i32 %135 to double
%137 = load double, double* %17
%138 = fsub double %136, %137
store double %138, double* %19
br label %148
139: ; preds = %129
%140 = load double, double* %18
%141 = fneg double %140
%142 = getelementptr inbounds [4 x i32], [4 x i32]* %21, i64 0, i64 0
%143 = load i32, i32* %142
%144 = sitofp i32 %143 to double
%145 = load double, double* %17
%146 = fadd double %144, %145
%147 = fdiv double %141, %146
store double %147, double* %19
br label %148
148: ; preds = %139, %133
br label %149
149: ; preds = %148, %128
br label %150
150: ; preds = %149, %120
%151 = load double, double* %19
%152 = call double @pow(double %151, double 2.000000e+00)
%153 = fmul double 2.000000e+00, %152
%154 = load double, double* %18
%155 = load double, double* %19
%156 = call double @pow(double %155, double 2.000000e+00)
%157 = fadd double %154, %156
%158 = fdiv double %153, %157
store double %158, double* %16
store i32 0, i32* %10
br label %159
159: ; preds = %192, %150
%160 = load i32, i32* %10
%161 = load i32, i32* %7
%162 = load i32, i32* %9
%163 = sub nsw i32 %161, %162
%164 = icmp slt i32 %160, %163
br i1 %164, label %165, label %195
165: ; preds = %159
%166 = load i32, i32* %10
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %167
%169 = load double, double* %168
%170 = load double, double* %19
%171 = fdiv double %169, %170
%172 = load i32, i32* %10
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %173
store double %171, double* %174
%175 = load i32, i32* %10
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %176
%178 = load double, double* %177
%179 = load i32, i32* %10
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %180
%182 = load double, double* %181
%183 = load i32, i32* %15
%184 = sitofp i32 %183 to double
%185 = call double @llvm.fmuladd.f64(double %178, double %182, double %184)
%186 = fptosi double %185 to i32
store i32 %186, i32* %15
%187 = load i32, i32* %10
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %188
%190 = load double, double* %189
%191 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.4, i64 0, i64 0), double %190)
br label %192
192: ; preds = %165
%193 = load i32, i32* %10
%194 = add nsw i32 %193, 1
store i32 %194, i32* %10
br label %159
195: ; preds = %159
%196 = load double, double* %16
%197 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.5, i64 0, i64 0), double %196)
%198 = load double, double* %19
%199 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.6, i64 0, i64 0), double %198)
%200 = bitcast [4 x [4 x double]]* %23 to i8*
store i32 0, i32* %10
br label %201
201: ; preds = %261, %195
%202 = load i32, i32* %10
%203 = load i32, i32* %7
%204 = load i32, i32* %9
%205 = sub nsw i32 %203, %204
%206 = icmp slt i32 %202, %205
br i1 %206, label %207, label %264
207: ; preds = %201
store i32 0, i32* %11
br label %208
208: ; preds = %257, %207
%209 = load i32, i32* %11
%210 = load i32, i32* %7
%211 = load i32, i32* %9
%212 = sub nsw i32 %210, %211
%213 = icmp slt i32 %209, %212
br i1 %213, label %214, label %260
214: ; preds = %208
%215 = load i32, i32* %10
%216 = load i32, i32* %11
%217 = icmp ne i32 %215, %216
br i1 %217, label %218, label %237
218: ; preds = %214
%219 = load double, double* %16
%220 = load i32, i32* %10
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %221
%223 = load double, double* %222
%224 = fmul double %219, %223
%225 = load i32, i32* %11
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %226
%228 = load double, double* %227
%229 = fmul double %224, %228
%230 = fmul double -1.000000e+00, %229
%231 = load i32, i32* %10
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %23, i64 0, i64 %232
%234 = load i32, i32* %11
%235 = sext i32 %234 to i64
%236 = getelementptr inbounds [4 x double], [4 x double]* %233, i64 0, i64 %235
store double %230, double* %236
br label %256
237: ; preds = %214
%238 = load double, double* %16
%239 = load i32, i32* %10
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %240
%242 = load double, double* %241
%243 = fmul double %238, %242
%244 = load i32, i32* %11
%245 = sext i32 %244 to i64
%246 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 %245
%247 = load double, double* %246
%248 = fneg double %243
%249 = call double @llvm.fmuladd.f64(double %248, double %247, double 1.000000e+00)
%250 = load i32, i32* %10
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %23, i64 0, i64 %251
%253 = load i32, i32* %11
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds [4 x double], [4 x double]* %252, i64 0, i64 %254
store double %249, double* %255
br label %256
256: ; preds = %237, %218
br label %257
257: ; preds = %256
%258 = load i32, i32* %11
%259 = add nsw i32 %258, 1
store i32 %259, i32* %11
br label %208
260: ; preds = %208
br label %261
261: ; preds = %260
%262 = load i32, i32* %10
%263 = add nsw i32 %262, 1
store i32 %263, i32* %10
br label %201
264: ; preds = %201
%265 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %23, i64 0, i64 0
%266 = bitcast [4 x double]* %265 to double*
%267 = call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @show to i32 (double*, i32, i32, ...)*)(double* %266, i32 4, i32 4)
store i32 0, i32* %10
br label %268
268: ; preds = %338, %264
%269 = load i32, i32* %10
%270 = icmp slt i32 %269, 4
br i1 %270, label %271, label %341
271: ; preds = %268
store i32 0, i32* %11
br label %272
272: ; preds = %320, %271
%273 = load i32, i32* %11
%274 = load i32, i32* %8
%275 = icmp slt i32 %273, %274
br i1 %275, label %276, label %323
276: ; preds = %272
store i32 0, i32* %12
br label %277
277: ; preds = %304, %276
%278 = load i32, i32* %12
%279 = icmp slt i32 %278, 4
br i1 %279, label %280, label %307
280: ; preds = %277
%281 = load i32, i32* %11
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %23, i64 0, i64 %282
%284 = load i32, i32* %12
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds [4 x double], [4 x double]* %283, i64 0, i64 %285
%287 = load double, double* %286
%288 = load double*, double** %6
%289 = load i32, i32* %10
%290 = load i32, i32* %12
%291 = add nsw i32 %289, %290
%292 = load i32, i32* %8
%293 = mul nsw i32 %291, %292
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds double, double* %288, i64 %294
%296 = load i32, i32* %12
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds double, double* %295, i64 %297
%299 = load double, double* %298
%300 = load double, double* %20
%301 = call double @llvm.fmuladd.f64(double %287, double %299, double %300)
store double %301, double* %20
%302 = load double, double* %20
%303 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i64 0, i64 0), double %302)
br label %304
304: ; preds = %280
%305 = load i32, i32* %12
%306 = add nsw i32 %305, 1
store i32 %306, i32* %12
br label %277
307: ; preds = %277
%308 = load double, double* %20
%309 = load double*, double** %6
%310 = load i32, i32* %11
%311 = load i32, i32* %8
%312 = add nsw i32 %310, %311
%313 = load i32, i32* %12
%314 = mul nsw i32 %312, %313
%315 = sext i32 %314 to i64
%316 = getelementptr inbounds double, double* %309, i64 %315
%317 = load i32, i32* %8
%318 = sext i32 %317 to i64
%319 = getelementptr inbounds double, double* %316, i64 %318
store double %308, double* %319
store double 0.000000e+00, double* %20
br label %320
320: ; preds = %307
%321 = load i32, i32* %11
%322 = add nsw i32 %321, 1
store i32 %322, i32* %11
br label %272
323: ; preds = %272
%324 = load double*, double** %6
%325 = load i32, i32* %10
%326 = load i32, i32* %9
%327 = add nsw i32 %325, %326
%328 = load i32, i32* %8
%329 = mul nsw i32 %327, %328
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds double, double* %324, i64 %330
%332 = load i32, i32* %9
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds double, double* %331, i64 %333
%335 = load double, double* %334
store double 0.000000e+00, double* %20
%336 = load double, double* %20
%337 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.8, i64 0, i64 0), double %336)
br label %338
338: ; preds = %323
%339 = load i32, i32* %10
%340 = add nsw i32 %339, 1
store i32 %340, i32* %10
br label %268
341: ; preds = %268
%342 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
%343 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.10, i64 0, i64 0))
%344 = load double*, double** %6
%345 = call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @show to i32 (double*, i32, i32, ...)*)(double* %344, i32 4, i32 3)
%346 = load double*, double** %5
ret double* %346
}

LLVM IR (-O2):
@.str = [23 x i8] c" Vector completo: %d \0A\00"
@.str.1 = [17 x i8] c" Vector V : %f \0A\00"
@.str.2 = [10 x i8] c" MU: %f \0A\00"
@.str.3 = [14 x i8] c" sigma: %f \0A\0A\00"
@.str.4 = [32 x i8] c" Vector V de householder : %f \0A\00"
@.str.5 = [15 x i8] c" \0A Beta: %f \0A\0A\00"
@.str.6 = [14 x i8] c" \0A V_1: %f \0A\0A\00"
@.str.7 = [14 x i8] c"acumula : %f\0A\00"
@.str.8 = [19 x i8] c"acumula total: %f\0A\00"
@str = [12 x i8] c"acaboooooo \00"
@str.11 = [15 x i8] c"Nuevo Arreglo \00"
define double* @vectores(double* %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca [4 x i32]
%6 = alloca [4 x double]
%7 = alloca [4 x [4 x double]]
%8 = bitcast [4 x i32]* %5 to i8*
%9 = bitcast [4 x double]* %6 to i8*
%10 = sub i32 %1, %3
%11 = icmp sgt i32 %10, 0
br i1 %11, label %12, label %48
12: ; preds = %4
%13 = sext i32 %3 to i64
%14 = sext i32 %2 to i64
%15 = zext i32 %10 to i64
%16 = mul nsw i64 %13, %14
%17 = getelementptr inbounds double, double* %0, i64 %16
%18 = getelementptr inbounds double, double* %17, i64 %13
%19 = load double, double* %18
%20 = fptosi double %19 to i32
%21 = getelementptr inbounds [4 x i32], [4 x i32]* %5, i64 0, i64 0
store i32 %20, i32* %21
%22 = mul nsw i32 %20, %20
%23 = getelementptr inbounds [4 x double], [4 x double]* %6, i64 0, i64 0
store double 1.000000e+00, double* %23
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0), i32 %20)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), double 1.000000e+00)
%26 = icmp eq i32 %10, 1
br i1 %26, label %48, label %27
27: ; preds = %12
%28 = getelementptr inbounds double, double* %0, i64 %13
br label %29
29: ; preds = %27, %29
%30 = phi i64 [ 1, %27 ], [ %46, %29 ]
%31 = phi i32 [ 0, %27 ], [ %41, %29 ]
%32 = phi i32 [ %22, %27 ], [ %40, %29 ]
%33 = add nsw i64 %30, %13
%34 = mul nsw i64 %33, %14
%35 = getelementptr inbounds double, double* %28, i64 %34
%36 = load double, double* %35
%37 = fptosi double %36 to i32
%38 = getelementptr inbounds [4 x i32], [4 x i32]* %5, i64 0, i64 %30
store i32 %37, i32* %38
%39 = mul nsw i32 %37, %37
%40 = add nuw nsw i32 %39, %32
%41 = add nuw nsw i32 %39, %31
%42 = sitofp i32 %37 to double
%43 = getelementptr inbounds [4 x double], [4 x double]* %6, i64 0, i64 %30
store double %42, double* %43
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0), i32 %37)
%45 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.1, i64 0, i64 0), double %42)
%46 = add nuw nsw i64 %30, 1
%47 = icmp eq i64 %46, %15
br i1 %47, label %48, label %29
48: ; preds = %29, %12, %4
%49 = phi double [ 0.000000e+00, %4 ], [ 1.000000e+00, %12 ], [ 1.000000e+00, %29 ]
%50 = phi i32 [ 0, %4 ], [ %20, %12 ], [ %20, %29 ]
%51 = phi i32 [ 0, %4 ], [ %22, %12 ], [ %40, %29 ]
%52 = phi i32 [ 0, %4 ], [ 0, %12 ], [ %41, %29 ]
%53 = sitofp i32 %51 to double
%54 = tail call double @sqrt(double %53)
%55 = sitofp i32 %52 to double
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0), double %54)
%57 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.3, i64 0, i64 0), double %55)
%58 = icmp eq i32 %52, 0
br i1 %58, label %71, label %59
59: ; preds = %48
%60 = icmp slt i32 %50, 1
br i1 %60, label %61, label %66
61: ; preds = %59
%62 = getelementptr inbounds [4 x i32], [4 x i32]* %5, i64 0, i64 1
%63 = load i32, i32* %62
%64 = sitofp i32 %63 to double
%65 = fsub double %64, %54
br label %71
66: ; preds = %59
%67 = fneg double %55
%68 = sitofp i32 %50 to double
%69 = fadd double %54, %68
%70 = fdiv double %67, %69
br label %71
71: ; preds = %48, %66, %61
%72 = phi double [ %65, %61 ], [ %70, %66 ], [ undef, %48 ]
%73 = fmul double %72, %72
%74 = fmul double %73, 2.000000e+00
%75 = fadd double %73, %55
%76 = fdiv double %74, %75
br i1 %11, label %77, label %92
77: ; preds = %71
%78 = zext i32 %10 to i64
%79 = getelementptr inbounds [4 x double], [4 x double]* %6, i64 0, i64 0
%80 = fdiv double %49, %72
store double %80, double* %79
%81 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.4, i64 0, i64 0), double %80)
%82 = icmp eq i32 %10, 1
br i1 %82, label %92, label %83
83: ; preds = %77, %83
%84 = phi i64 [ %90, %83 ], [ 1, %77 ]
%85 = getelementptr inbounds [4 x double], [4 x double]* %6, i64 0, i64 %84
%86 = load double, double* %85
%87 = getelementptr inbounds [4 x double], [4 x double]* %6, i64 0, i64 %84
%88 = fdiv double %86, %72
store double %88, double* %87
%89 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.4, i64 0, i64 0), double %88)
%90 = add nuw nsw i64 %84, 1
%91 = icmp eq i64 %90, %78
br i1 %91, label %92, label %83
92: ; preds = %83, %77, %71
%93 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.5, i64 0, i64 0), double %76)
%94 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.6, i64 0, i64 0), double %72)
%95 = bitcast [4 x [4 x double]]* %7 to i8*
br i1 %11, label %96, label %121
96: ; preds = %92
%97 = fneg double %76
%98 = zext i32 %10 to i64
br label %99
99: ; preds = %118, %96
%100 = phi i64 [ 0, %96 ], [ %119, %118 ]
%101 = getelementptr inbounds [4 x double], [4 x double]* %6, i64 0, i64 %100
%102 = load double, double* %101
%103 = fmul double %102, %97
%104 = fmul double %102, %97
%105 = tail call double @llvm.fmuladd.f64(double %104, double %102, double 1.000000e+00)
br label %106
106: ; preds = %99, %113
%107 = phi i64 [ 0, %99 ], [ %116, %113 ]
%108 = icmp eq i64 %100, %107
br i1 %108, label %113, label %109
109: ; preds = %106
%110 = getelementptr inbounds [4 x double], [4 x double]* %6, i64 0, i64 %107
%111 = load double, double* %110
%112 = fmul double %103, %111
br label %113
113: ; preds = %106, %109
%114 = phi double [ %112, %109 ], [ %105, %106 ]
%115 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %7, i64 0, i64 %100, i64 %107
store double %114, double* %115
%116 = add nuw nsw i64 %107, 1
%117 = icmp eq i64 %116, %98
br i1 %117, label %118, label %106
118: ; preds = %113
%119 = add nuw nsw i64 %100, 1
%120 = icmp eq i64 %119, %98
br i1 %120, label %121, label %99
121: ; preds = %118, %92
%122 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %7, i64 0, i64 0, i64 0
%123 = call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @show to i32 (double*, i32, i32, ...)*)(double* %122, i32 4, i32 4)
%124 = icmp sgt i32 %2, 0
%125 = sext i32 %2 to i64
%126 = zext i32 %2 to i64
%127 = getelementptr inbounds double, double* %0, i64 1
%128 = getelementptr inbounds double, double* %0, i64 2
%129 = getelementptr inbounds double, double* %0, i64 3
%130 = getelementptr inbounds double, double* %0, i64 %125
br label %131
131: ; preds = %121, %174
%132 = phi i64 [ 0, %121 ], [ %175, %174 ]
br i1 %124, label %135, label %133
133: ; preds = %131
%134 = add nuw nsw i64 %132, 1
br label %174
135: ; preds = %131
%136 = mul nsw i64 %132, %125
%137 = getelementptr inbounds double, double* %0, i64 %136
%138 = add nuw nsw i64 %132, 1
%139 = mul nsw i64 %138, %125
%140 = getelementptr inbounds double, double* %127, i64 %139
%141 = add nuw nsw i64 %132, 2
%142 = mul nsw i64 %141, %125
%143 = getelementptr inbounds double, double* %128, i64 %142
%144 = add nuw nsw i64 %132, 3
%145 = mul nsw i64 %144, %125
%146 = getelementptr inbounds double, double* %129, i64 %145
br label %147
147: ; preds = %135, %147
%148 = phi i64 [ 0, %135 ], [ %172, %147 ]
%149 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %7, i64 0, i64 %148, i64 0
%150 = load double, double* %149
%151 = load double, double* %137
%152 = call double @llvm.fmuladd.f64(double %150, double %151, double 0.000000e+00)
%153 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i64 0, i64 0), double %152)
%154 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %7, i64 0, i64 %148, i64 1
%155 = load double, double* %154
%156 = load double, double* %140
%157 = call double @llvm.fmuladd.f64(double %155, double %156, double %152)
%158 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i64 0, i64 0), double %157)
%159 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %7, i64 0, i64 %148, i64 2
%160 = load double, double* %159
%161 = load double, double* %143
%162 = call double @llvm.fmuladd.f64(double %160, double %161, double %157)
%163 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i64 0, i64 0), double %162)
%164 = getelementptr inbounds [4 x [4 x double]], [4 x [4 x double]]* %7, i64 0, i64 %148, i64 3
%165 = load double, double* %164
%166 = load double, double* %146
%167 = call double @llvm.fmuladd.f64(double %165, double %166, double %162)
%168 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i64 0, i64 0), double %167)
%169 = add nsw i64 %148, %125
%170 = shl nsw i64 %169, 2
%171 = getelementptr inbounds double, double* %130, i64 %170
store double %167, double* %171
%172 = add nuw nsw i64 %148, 1
%173 = icmp eq i64 %172, %126
br i1 %173, label %174, label %147
174: ; preds = %147, %133
%175 = phi i64 [ %134, %133 ], [ %138, %147 ]
%176 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.8, i64 0, i64 0), double 0.000000e+00)
%177 = icmp eq i64 %175, 4
br i1 %177, label %178, label %131
178: ; preds = %174
%179 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str, i64 0, i64 0))
%180 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.11, i64 0, i64 0))
%181 = call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @show to i32 (double*, i32, i32, ...)*)(double* %0, i32 4, i32 3)
ret double* undef
}