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

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ omp_sched_t;

/* Variables and functions */
int atoi(char *);
int /*<<< orphan*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
scalar_t__ malloc(int);
double omp_get_wtime();
int /*<<< orphan*/ printf(char *, double, ...);
int /*<<< orphan*/ stderr;
main(int argc, char **argv) {
  int N = atoi(argv[1]);
  int i, j, k;
  omp_sched_t kind;
  int modifier;
  double start = 0, end = 0, elapsed = 0;
  double **a;
  a = (double **)malloc(N * sizeof(double *));
  for (i = 0; i < N; i++)
    a[i] = (double *)malloc(N * sizeof(double));
  double **b;
  b = (double **)malloc(N * sizeof(double *));
  for (i = 0; i < N; i++)
    b[i] = (double *)malloc(N * sizeof(double));
  double **tras;
  tras = (double **)malloc(N * sizeof(double *));
  for (i = 0; i < N; i++)
    tras[i] = (double *)malloc(N * sizeof(double));
  double **resultado;
  resultado = (double **)malloc(N * sizeof(double *));
  for (i = 0; i < N; i++)
    resultado[i] = (double *)malloc(N * sizeof(double));
  if (argc < 2) {
    fprintf(stderr, "Faltan argumentos\n");
    exit(-1);
  }
  for (i = 0; i < N; ++i)
    for (j = 0; j < N; ++j) {
      resultado[i][j] = 0;
      a[i][j] = j + 1;
      b[i][j] = j + 1;
    }
  start = omp_get_wtime();
  for (i = 0; i < N; ++i)
    for (j = 0; j < N; ++j)
      tras[i][j] = b[j][i];
  for (i = 0; i < N; ++i) {
    for (j = 0; j < N; ++j)
      for (k = 0; k < N; ++k)
        resultado[i][j] += a[i][k] * tras[j][k];
  }
  end = omp_get_wtime();
  elapsed = end - start;
  printf("resultado[0][0] = %g\n", resultado[0][0]);
  printf("resultado[N-1][N-1] = %g\n", resultado[N - 1][N - 1]);
  printf("Tiempo(seg.):%11.9f\t / Tamaño Matrices:%u\n", elapsed, N);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
call   1070 <atoi@plt>
mov    %eax,-0x14(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11f0 <main+0x90>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,%rdx
mov    -0x48(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11b8 <main+0x58>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,-0x50(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1242 <main+0xe2>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,%rdx
mov    -0x50(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    120a <main+0xaa>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1294 <main+0x134>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,%rdx
mov    -0x58(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    125c <main+0xfc>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12e6 <main+0x186>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1060 <malloc@plt>
mov    %rax,%rdx
mov    -0x60(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12ae <main+0x14e>
cmpl   $0x2,-0x8(%rbp)
jge    130f <main+0x1af>
mov    0x2ce9(%rip),%rax
mov    (%rax),%edi
lea    0xd00(%rip),%rsi
call   1050 <fprintf@plt>
mov    $0xffffffff,%edi
call   1080 <exit@plt>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    13ac <main+0x24c>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1399 <main+0x239>
mov    -0x60(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x48(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x50(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1329 <main+0x1c9>
jmp    139e <main+0x23e>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1316 <main+0x1b6>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1429 <main+0x2c9>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1416 <main+0x2b6>
mov    -0x50(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    13d2 <main+0x272>
jmp    141b <main+0x2bb>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    13bf <main+0x25f>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14e2 <main+0x382>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14cf <main+0x36f>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14bc <main+0x35c>
mov    -0x48(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x60(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1456 <main+0x2f6>
jmp    14c1 <main+0x361>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1443 <main+0x2e3>
jmp    14d4 <main+0x374>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1430 <main+0x2d0>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x60(%rbp),%rax
mov    (%rax),%rax
movsd  (%rax),%xmm0
lea    0xb04(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0x60(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xaed(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  -0x40(%rbp),%xmm0
mov    -0x14(%rbp),%esi
lea    0xaf1(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %edi,(%rsp)
mov    0x8(%rsi),%rdi
call   1070 <atoi@plt>
mov    %eax,%ebx
lea    0x0(,%rbx,8),%r12d
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %ebx,%r14d
mov    %rbx,0x8(%rsp)
test   %ebx,%ebx
mov    %rax,0x18(%rsp)
jle    125a <main+0xfa>
mov    %rax,%rbp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,0x0(%rbp,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%r14
jne    11b0 <main+0x50>
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,%r15
cmpl   $0x0,0x8(%rsp)
jle    1265 <main+0x105>
xor    %ebp,%ebp
xchg   %ax,%ax
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,(%r15,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    11e0 <main+0x80>
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,%r13
cmpl   $0x0,0x8(%rsp)
jle    1270 <main+0x110>
xor    %ebp,%ebp
nopl   0x0(%rax)
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,0x0(%r13,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1210 <main+0xb0>
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,%rbx
cmpl   $0x0,0x8(%rsp)
jle    1255 <main+0xf5>
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,(%rbx,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1240 <main+0xe0>
mov    (%rsp),%ebp
jmp    127e <main+0x11e>
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,%r15
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,%r13
mov    (%rsp),%ebp
mov    %r12d,%edi
call   1060 <malloc@plt>
mov    %rax,%rbx
cmp    $0x2,%ebp
jl     165d <main+0x4fd>
cmpl   $0x0,0x8(%rsp)
mov    %rbx,0x10(%rsp)
jle    15dc <main+0x47c>
lea    -0x1(%r14),%r12
mov    %r14d,%eax
and    $0xfffffffc,%eax
mov    %rax,0x20(%rsp)
lea    0x0(,%r14,8),%r9
and    $0xffffffffffffffe0,%r9
xor    %edx,%edx
movdqa 0xd44(%rip),%xmm0
xorpd  %xmm1,%xmm1
pcmpeqd %xmm2,%xmm2
movdqa 0xd44(%rip),%xmm3
movdqa 0xd4c(%rip),%xmm4
jmp    12ed <main+0x18d>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    %r14,%rdx
je     1459 <main+0x2f9>
mov    (%rbx,%rdx,8),%rsi
mov    0x18(%rsp),%rax
mov    (%rax,%rdx,8),%rdi
mov    (%r15,%rdx,8),%rax
cmpl   $0x4,0x8(%rsp)
jae    1310 <main+0x1b0>
xor    %ecx,%ecx
jmp    13d0 <main+0x270>
nopl   0x0(%rax)
lea    (%rsi,%r14,8),%rbp
lea    (%rdi,%r14,8),%r11
lea    (%rax,%r14,8),%rcx
cmp    %r11,%rsi
setb   (%rsp)
cmp    %rbp,%rdi
setb   %bl
cmp    %rcx,%rsi
setb   %r8b
cmp    %rbp,%rax
setb   %bpl
cmp    %rcx,%rdi
setb   %r10b
cmp    %r11,%rax
setb   %r11b
test   %bl,(%rsp)
jne    13c6 <main+0x266>
and    %bpl,%r8b
jne    13c6 <main+0x266>
mov    $0x0,%ecx
and    %r11b,%r10b
mov    0x10(%rsp),%rbx
jne    13d0 <main+0x270>
xor    %ecx,%ecx
movdqa %xmm0,%xmm5
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd %xmm1,(%rsi,%rcx,1)
pshufd $0xe8,%xmm5,%xmm6
movdqa %xmm6,%xmm7
psubd  %xmm2,%xmm7
paddd  %xmm3,%xmm6
cvtdq2pd %xmm7,%xmm7
cvtdq2pd %xmm6,%xmm6
movupd %xmm1,0x10(%rsi,%rcx,1)
movups %xmm7,(%rdi,%rcx,1)
movups %xmm6,0x10(%rdi,%rcx,1)
movups %xmm7,(%rax,%rcx,1)
movups %xmm6,0x10(%rax,%rcx,1)
paddq  %xmm4,%xmm5
add    $0x20,%rcx
cmp    %rcx,%r9
jne    1370 <main+0x210>
mov    0x20(%rsp),%rbp
mov    %rbp,%rcx
cmp    %r14,%rbp
je     12e0 <main+0x180>
jmp    13d0 <main+0x270>
xor    %ecx,%ecx
mov    0x10(%rsp),%rbx
nopl   (%rax)
mov    %rcx,%rbp
test   $0x1,%r14b
je     13f9 <main+0x299>
movq   $0x0,(%rsi,%rcx,8)
mov    %rcx,%rbp
or     $0x1,%rbp
xorps  %xmm5,%xmm5
cvtsi2sd %ebp,%xmm5
movsd  %xmm5,(%rdi,%rcx,8)
movsd  %xmm5,(%rax,%rcx,8)
cmp    %rcx,%r12
je     12e0 <main+0x180>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movq   $0x0,(%rsi,%rbp,8)
lea    0x1(%rbp),%ecx
xorps  %xmm5,%xmm5
cvtsi2sd %ecx,%xmm5
movsd  %xmm5,(%rdi,%rbp,8)
movsd  %xmm5,(%rax,%rbp,8)
lea    0x2(%rbp),%rcx
xorps  %xmm5,%xmm5
cvtsi2sd %ecx,%xmm5
movq   $0x0,0x8(%rsi,%rbp,8)
movsd  %xmm5,0x8(%rdi,%rbp,8)
movsd  %xmm5,0x8(%rax,%rbp,8)
mov    %rcx,%rbp
cmp    %rcx,%r14
jne    1410 <main+0x2b0>
jmp    12e0 <main+0x180>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
cmpl   $0x0,0x8(%rsp)
movq   %xmm0,(%rsp)
jle    15e8 <main+0x488>
mov    %r14d,%eax
and    $0x3,%eax
mov    %r14d,%ecx
and    $0xfffffffc,%ecx
xor    %edx,%edx
mov    0x10(%rsp),%r9
jmp    149d <main+0x33d>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rdx
cmp    %r14,%rdx
je     152c <main+0x3cc>
mov    0x0(%r13,%rdx,8),%rsi
xor    %edi,%edi
cmp    $0x3,%r12
jb     14fb <main+0x39b>
nopw   0x0(%rax,%rax,1)
mov    (%r15,%rdi,8),%rbp
movsd  0x0(%rbp,%rdx,8),%xmm1
movsd  %xmm1,(%rsi,%rdi,8)
mov    0x8(%r15,%rdi,8),%rbp
movsd  0x0(%rbp,%rdx,8),%xmm1
movsd  %xmm1,0x8(%rsi,%rdi,8)
mov    0x10(%r15,%rdi,8),%rbp
movsd  0x0(%rbp,%rdx,8),%xmm1
movsd  %xmm1,0x10(%rsi,%rdi,8)
mov    0x18(%r15,%rdi,8),%rbp
movsd  0x0(%rbp,%rdx,8),%xmm1
movsd  %xmm1,0x18(%rsi,%rdi,8)
add    $0x4,%rdi
cmp    %rdi,%rcx
jne    14b0 <main+0x350>
test   %rax,%rax
je     1490 <main+0x330>
lea    (%rsi,%rdi,8),%rsi
lea    (%r15,%rdi,8),%rdi
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rbp,8),%rbx
movsd  (%rbx,%rdx,8),%xmm1
movsd  %xmm1,(%rsi,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%rax
jne    1510 <main+0x3b0>
jmp    1490 <main+0x330>
cmpl   $0x0,0x8(%rsp)
jle    15e8 <main+0x488>
mov    %r14d,%eax
and    $0xfffffffe,%eax
xor    %r8d,%r8d
mov    0x18(%rsp),%rbp
jmp    155d <main+0x3fd>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r8
cmp    %r14,%r8
je     15e8 <main+0x488>
mov    0x0(%rbp,%r8,8),%rdx
mov    (%r9,%r8,8),%rsi
xor    %edi,%edi
jmp    1579 <main+0x419>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rdi
cmp    %r14,%rdi
je     1550 <main+0x3f0>
mov    0x0(%r13,%rdi,8),%rbx
movsd  (%rsi,%rdi,8),%xmm0
xor    %ecx,%ecx
test   %r12,%r12
je     15c1 <main+0x461>
nopw   0x0(%rax,%rax,1)
movsd  (%rdx,%rcx,8),%xmm1
mulsd  (%rbx,%rcx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi,%rdi,8)
movsd  0x8(%rdx,%rcx,8),%xmm0
mulsd  0x8(%rbx,%rcx,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rsi,%rdi,8)
add    $0x2,%rcx
cmp    %rcx,%rax
jne    1590 <main+0x430>
test   $0x1,%r14b
je     1570 <main+0x410>
movsd  (%rdx,%rcx,8),%xmm1
mulsd  (%rbx,%rcx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi,%rdi,8)
jmp    1570 <main+0x410>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
movq   %xmm0,(%rsp)
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
subsd  (%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
mov    0x10(%rsp),%rbp
mov    0x0(%rbp),%rax
movsd  (%rax),%xmm0
lea    0xa35(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%rsp),%rbx
movslq %ebx,%rax
mov    -0x8(%rbp,%rax,8),%rcx
movsd  -0x8(%rcx,%rax,8),%xmm0
lea    0xa2a(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xa36(%rip),%rdi
movsd  0x18(%rsp),%xmm0
mov    %ebx,%esi
mov    $0x1,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x297c(%rip),%rax
mov    (%rax),%edi
lea    0x9c3(%rip),%rsi
call   1050 <fprintf@plt>
mov    $0xffffffff,%edi
call   1080 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [19 x i8] c"Faltan argumentos\0A\00"
@.str.1 = [22 x i8] c"resultado[0][0] = %g\0A\00"
@.str.2 = [26 x i8] c"resultado[N-1][N-1] = %g\0A\00"
@.str.3 = [44 x i8] c"Tiempo(seg.):%11.9f\09 / Tama\C3\B1o Matrices:%u\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double**
%16 = alloca double**
%17 = alloca double**
%18 = alloca double**
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%19 = load i8**, i8*** %5
%20 = getelementptr inbounds i8*, i8** %19, i64 1
%21 = load i8*, i8** %20
%22 = call i32 @atoi(i8* %21)
store i32 %22, i32* %6
store double 0.000000e+00, double* %12
store double 0.000000e+00, double* %13
store double 0.000000e+00, double* %14
%23 = load i32, i32* %6
%24 = sext i32 %23 to i64
%25 = mul i64 %24, 8
%26 = trunc i64 %25 to i32
%27 = call i64 @malloc(i32 %26)
%28 = inttoptr i64 %27 to double**
store double** %28, double*** %15
store i32 0, i32* %7
br label %29
29: ; preds = %44, %2
%30 = load i32, i32* %7
%31 = load i32, i32* %6
%32 = icmp slt i32 %30, %31
br i1 %32, label %33, label %47
33: ; preds = %29
%34 = load i32, i32* %6
%35 = sext i32 %34 to i64
%36 = mul i64 %35, 8
%37 = trunc i64 %36 to i32
%38 = call i64 @malloc(i32 %37)
%39 = inttoptr i64 %38 to double*
%40 = load double**, double*** %15
%41 = load i32, i32* %7
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double*, double** %40, i64 %42
store double* %39, double** %43
br label %44
44: ; preds = %33
%45 = load i32, i32* %7
%46 = add nsw i32 %45, 1
store i32 %46, i32* %7
br label %29
47: ; preds = %29
%48 = load i32, i32* %6
%49 = sext i32 %48 to i64
%50 = mul i64 %49, 8
%51 = trunc i64 %50 to i32
%52 = call i64 @malloc(i32 %51)
%53 = inttoptr i64 %52 to double**
store double** %53, double*** %16
store i32 0, i32* %7
br label %54
54: ; preds = %69, %47
%55 = load i32, i32* %7
%56 = load i32, i32* %6
%57 = icmp slt i32 %55, %56
br i1 %57, label %58, label %72
58: ; preds = %54
%59 = load i32, i32* %6
%60 = sext i32 %59 to i64
%61 = mul i64 %60, 8
%62 = trunc i64 %61 to i32
%63 = call i64 @malloc(i32 %62)
%64 = inttoptr i64 %63 to double*
%65 = load double**, double*** %16
%66 = load i32, i32* %7
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds double*, double** %65, i64 %67
store double* %64, double** %68
br label %69
69: ; preds = %58
%70 = load i32, i32* %7
%71 = add nsw i32 %70, 1
store i32 %71, i32* %7
br label %54
72: ; preds = %54
%73 = load i32, i32* %6
%74 = sext i32 %73 to i64
%75 = mul i64 %74, 8
%76 = trunc i64 %75 to i32
%77 = call i64 @malloc(i32 %76)
%78 = inttoptr i64 %77 to double**
store double** %78, double*** %17
store i32 0, i32* %7
br label %79
79: ; preds = %94, %72
%80 = load i32, i32* %7
%81 = load i32, i32* %6
%82 = icmp slt i32 %80, %81
br i1 %82, label %83, label %97
83: ; preds = %79
%84 = load i32, i32* %6
%85 = sext i32 %84 to i64
%86 = mul i64 %85, 8
%87 = trunc i64 %86 to i32
%88 = call i64 @malloc(i32 %87)
%89 = inttoptr i64 %88 to double*
%90 = load double**, double*** %17
%91 = load i32, i32* %7
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds double*, double** %90, i64 %92
store double* %89, double** %93
br label %94
94: ; preds = %83
%95 = load i32, i32* %7
%96 = add nsw i32 %95, 1
store i32 %96, i32* %7
br label %79
97: ; preds = %79
%98 = load i32, i32* %6
%99 = sext i32 %98 to i64
%100 = mul i64 %99, 8
%101 = trunc i64 %100 to i32
%102 = call i64 @malloc(i32 %101)
%103 = inttoptr i64 %102 to double**
store double** %103, double*** %18
store i32 0, i32* %7
br label %104
104: ; preds = %119, %97
%105 = load i32, i32* %7
%106 = load i32, i32* %6
%107 = icmp slt i32 %105, %106
br i1 %107, label %108, label %122
108: ; preds = %104
%109 = load i32, i32* %6
%110 = sext i32 %109 to i64
%111 = mul i64 %110, 8
%112 = trunc i64 %111 to i32
%113 = call i64 @malloc(i32 %112)
%114 = inttoptr i64 %113 to double*
%115 = load double**, double*** %18
%116 = load i32, i32* %7
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds double*, double** %115, i64 %117
store double* %114, double** %118
br label %119
119: ; preds = %108
%120 = load i32, i32* %7
%121 = add nsw i32 %120, 1
store i32 %121, i32* %7
br label %104
122: ; preds = %104
%123 = load i32, i32* %4
%124 = icmp slt i32 %123, 2
br i1 %124, label %125, label %129
125: ; preds = %122
%126 = load i32, i32* @stderr
%127 = call i32 @fprintf(i32 %126, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0))
%128 = call i32 @exit(i32 -1)
unreachable
129: ; preds = %122
store i32 0, i32* %7
br label %130
130: ; preds = %174, %129
%131 = load i32, i32* %7
%132 = load i32, i32* %6
%133 = icmp slt i32 %131, %132
br i1 %133, label %134, label %177
134: ; preds = %130
store i32 0, i32* %8
br label %135
135: ; preds = %170, %134
%136 = load i32, i32* %8
%137 = load i32, i32* %6
%138 = icmp slt i32 %136, %137
br i1 %138, label %139, label %173
139: ; preds = %135
%140 = load double**, double*** %18
%141 = load i32, i32* %7
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds double*, double** %140, i64 %142
%144 = load double*, double** %143
%145 = load i32, i32* %8
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds double, double* %144, i64 %146
store double 0.000000e+00, double* %147
%148 = load i32, i32* %8
%149 = add nsw i32 %148, 1
%150 = sitofp i32 %149 to double
%151 = load double**, double*** %15
%152 = load i32, i32* %7
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds double*, double** %151, i64 %153
%155 = load double*, double** %154
%156 = load i32, i32* %8
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds double, double* %155, i64 %157
store double %150, double* %158
%159 = load i32, i32* %8
%160 = add nsw i32 %159, 1
%161 = sitofp i32 %160 to double
%162 = load double**, double*** %16
%163 = load i32, i32* %7
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds double*, double** %162, i64 %164
%166 = load double*, double** %165
%167 = load i32, i32* %8
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds double, double* %166, i64 %168
store double %161, double* %169
br label %170
170: ; preds = %139
%171 = load i32, i32* %8
%172 = add nsw i32 %171, 1
store i32 %172, i32* %8
br label %135
173: ; preds = %135
br label %174
174: ; preds = %173
%175 = load i32, i32* %7
%176 = add nsw i32 %175, 1
store i32 %176, i32* %7
br label %130
177: ; preds = %130
%178 = call double (...) @omp_get_wtime()
store double %178, double* %12
store i32 0, i32* %7
br label %179
179: ; preds = %210, %177
%180 = load i32, i32* %7
%181 = load i32, i32* %6
%182 = icmp slt i32 %180, %181
br i1 %182, label %183, label %213
183: ; preds = %179
store i32 0, i32* %8
br label %184
184: ; preds = %206, %183
%185 = load i32, i32* %8
%186 = load i32, i32* %6
%187 = icmp slt i32 %185, %186
br i1 %187, label %188, label %209
188: ; preds = %184
%189 = load double**, double*** %16
%190 = load i32, i32* %8
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds double*, double** %189, i64 %191
%193 = load double*, double** %192
%194 = load i32, i32* %7
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds double, double* %193, i64 %195
%197 = load double, double* %196
%198 = load double**, double*** %17
%199 = load i32, i32* %7
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds double*, double** %198, i64 %200
%202 = load double*, double** %201
%203 = load i32, i32* %8
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds double, double* %202, i64 %204
store double %197, double* %205
br label %206
206: ; preds = %188
%207 = load i32, i32* %8
%208 = add nsw i32 %207, 1
store i32 %208, i32* %8
br label %184
209: ; preds = %184
br label %210
210: ; preds = %209
%211 = load i32, i32* %7
%212 = add nsw i32 %211, 1
store i32 %212, i32* %7
br label %179
213: ; preds = %179
store i32 0, i32* %7
br label %214
214: ; preds = %265, %213
%215 = load i32, i32* %7
%216 = load i32, i32* %6
%217 = icmp slt i32 %215, %216
br i1 %217, label %218, label %268
218: ; preds = %214
store i32 0, i32* %8
br label %219
219: ; preds = %261, %218
%220 = load i32, i32* %8
%221 = load i32, i32* %6
%222 = icmp slt i32 %220, %221
br i1 %222, label %223, label %264
223: ; preds = %219
store i32 0, i32* %9
br label %224
224: ; preds = %257, %223
%225 = load i32, i32* %9
%226 = load i32, i32* %6
%227 = icmp slt i32 %225, %226
br i1 %227, label %228, label %260
228: ; preds = %224
%229 = load double**, double*** %15
%230 = load i32, i32* %7
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds double*, double** %229, i64 %231
%233 = load double*, double** %232
%234 = load i32, i32* %9
%235 = sext i32 %234 to i64
%236 = getelementptr inbounds double, double* %233, i64 %235
%237 = load double, double* %236
%238 = load double**, double*** %17
%239 = load i32, i32* %8
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds double*, double** %238, i64 %240
%242 = load double*, double** %241
%243 = load i32, i32* %9
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds double, double* %242, i64 %244
%246 = load double, double* %245
%247 = load double**, double*** %18
%248 = load i32, i32* %7
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds double*, double** %247, i64 %249
%251 = load double*, double** %250
%252 = load i32, i32* %8
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds double, double* %251, i64 %253
%255 = load double, double* %254
%256 = call double @llvm.fmuladd.f64(double %237, double %246, double %255)
store double %256, double* %254
br label %257
257: ; preds = %228
%258 = load i32, i32* %9
%259 = add nsw i32 %258, 1
store i32 %259, i32* %9
br label %224
260: ; preds = %224
br label %261
261: ; preds = %260
%262 = load i32, i32* %8
%263 = add nsw i32 %262, 1
store i32 %263, i32* %8
br label %219
264: ; preds = %219
br label %265
265: ; preds = %264
%266 = load i32, i32* %7
%267 = add nsw i32 %266, 1
store i32 %267, i32* %7
br label %214
268: ; preds = %214
%269 = call double (...) @omp_get_wtime()
store double %269, double* %13
%270 = load double, double* %13
%271 = load double, double* %12
%272 = fsub double %270, %271
store double %272, double* %14
%273 = load double**, double*** %18
%274 = getelementptr inbounds double*, double** %273, i64 0
%275 = load double*, double** %274
%276 = getelementptr inbounds double, double* %275, i64 0
%277 = load double, double* %276
%278 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.1, i64 0, i64 0), double %277)
%279 = load double**, double*** %18
%280 = load i32, i32* %6
%281 = sub nsw i32 %280, 1
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds double*, double** %279, i64 %282
%284 = load double*, double** %283
%285 = load i32, i32* %6
%286 = sub nsw i32 %285, 1
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds double, double* %284, i64 %287
%289 = load double, double* %288
%290 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.2, i64 0, i64 0), double %289)
%291 = load double, double* %14
%292 = load i32, i32* %6
%293 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.3, i64 0, i64 0), double %291, i32 %292)
%294 = load i32, i32* %3
ret i32 %294
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [19 x i8] c"Faltan argumentos\0A\00"
@.str.1 = [22 x i8] c"resultado[0][0] = %g\0A\00"
@.str.2 = [26 x i8] c"resultado[N-1][N-1] = %g\0A\00"
@.str.3 = [44 x i8] c"Tiempo(seg.):%11.9f\09 / Tama\C3\B1o Matrices:%u\0A\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = getelementptr inbounds i8*, i8** %1, i64 1
%4 = load i8*, i8** %3
%5 = tail call i32 @atoi(i8* %4)
%6 = shl i32 %5, 3
%7 = tail call i64 @malloc(i32 %6)
%8 = inttoptr i64 %7 to double**
%9 = icmp sgt i32 %5, 0
br i1 %9, label %13, label %10
10: ; preds = %2
%11 = tail call i64 @malloc(i32 %6)
%12 = inttoptr i64 %11 to double**
br label %34
13: ; preds = %2
%14 = zext i32 %5 to i64
br label %15
15: ; preds = %13, %15
%16 = phi i64 [ 0, %13 ], [ %20, %15 ]
%17 = tail call i64 @malloc(i32 %6)
%18 = inttoptr i64 %17 to double*
%19 = getelementptr inbounds double*, double** %8, i64 %16
store double* %18, double** %19
%20 = add nuw nsw i64 %16, 1
%21 = icmp eq i64 %20, %14
br i1 %21, label %22, label %15
22: ; preds = %15
%23 = tail call i64 @malloc(i32 %6)
%24 = inttoptr i64 %23 to double**
br i1 %9, label %25, label %34
25: ; preds = %22
%26 = zext i32 %5 to i64
br label %27
27: ; preds = %25, %27
%28 = phi i64 [ 0, %25 ], [ %32, %27 ]
%29 = tail call i64 @malloc(i32 %6)
%30 = inttoptr i64 %29 to double*
%31 = getelementptr inbounds double*, double** %24, i64 %28
store double* %30, double** %31
%32 = add nuw nsw i64 %28, 1
%33 = icmp eq i64 %32, %26
br i1 %33, label %38, label %27
34: ; preds = %10, %22
%35 = phi double** [ %24, %22 ], [ %12, %10 ]
%36 = tail call i64 @malloc(i32 %6)
%37 = inttoptr i64 %36 to double**
br label %50
38: ; preds = %27
%39 = tail call i64 @malloc(i32 %6)
%40 = inttoptr i64 %39 to double**
br i1 %9, label %41, label %50
41: ; preds = %38
%42 = zext i32 %5 to i64
br label %43
43: ; preds = %41, %43
%44 = phi i64 [ 0, %41 ], [ %48, %43 ]
%45 = tail call i64 @malloc(i32 %6)
%46 = inttoptr i64 %45 to double*
%47 = getelementptr inbounds double*, double** %40, i64 %44
store double* %46, double** %47
%48 = add nuw nsw i64 %44, 1
%49 = icmp eq i64 %48, %42
br i1 %49, label %55, label %43
50: ; preds = %34, %38
%51 = phi double** [ %40, %38 ], [ %37, %34 ]
%52 = phi double** [ %24, %38 ], [ %35, %34 ]
%53 = tail call i64 @malloc(i32 %6)
%54 = inttoptr i64 %53 to double**
br label %67
55: ; preds = %43
%56 = tail call i64 @malloc(i32 %6)
%57 = inttoptr i64 %56 to double**
br i1 %9, label %58, label %67
58: ; preds = %55
%59 = zext i32 %5 to i64
br label %60
60: ; preds = %58, %60
%61 = phi i64 [ 0, %58 ], [ %65, %60 ]
%62 = tail call i64 @malloc(i32 %6)
%63 = inttoptr i64 %62 to double*
%64 = getelementptr inbounds double*, double** %57, i64 %61
store double* %63, double** %64
%65 = add nuw nsw i64 %61, 1
%66 = icmp eq i64 %65, %59
br i1 %66, label %67, label %60
67: ; preds = %60, %50, %55
%68 = phi double** [ %54, %50 ], [ %57, %55 ], [ %57, %60 ]
%69 = phi double** [ %52, %50 ], [ %24, %55 ], [ %24, %60 ]
%70 = phi double** [ %51, %50 ], [ %40, %55 ], [ %40, %60 ]
%71 = icmp slt i32 %0, 2
br i1 %71, label %83, label %72
72: ; preds = %67
br i1 %9, label %75, label %73
73: ; preds = %72
%74 = tail call double (...) @omp_get_wtime()
br label %274
75: ; preds = %72
%76 = zext i32 %5 to i64
%77 = add nsw i64 %76, -1
%78 = icmp ult i32 %5, 4
%79 = and i64 %76, 4294967292
%80 = icmp eq i64 %79, %76
%81 = and i64 %76, 1
%82 = icmp eq i64 %81, 0
br label %87
83: ; preds = %67
%84 = load i32, i32* @stderr
%85 = tail call i32 @fprintf(i32 %84, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0))
%86 = tail call i32 @exit(i32 -1)
unreachable
87: ; preds = %162, %75
%88 = phi i64 [ 0, %75 ], [ %163, %162 ]
%89 = getelementptr inbounds double*, double** %68, i64 %88
%90 = load double*, double** %89
%91 = getelementptr inbounds double*, double** %8, i64 %88
%92 = load double*, double** %91
%93 = getelementptr inbounds double*, double** %69, i64 %88
%94 = load double*, double** %93
br i1 %78, label %135, label %95
95: ; preds = %87
%96 = getelementptr double, double* %90, i64 %76
%97 = getelementptr double, double* %92, i64 %76
%98 = getelementptr double, double* %94, i64 %76
%99 = icmp ult double* %90, %97
%100 = icmp ult double* %92, %96
%101 = and i1 %99, %100
%102 = icmp ult double* %90, %98
%103 = icmp ult double* %94, %96
%104 = and i1 %102, %103
%105 = or i1 %101, %104
%106 = icmp ult double* %92, %98
%107 = icmp ult double* %94, %97
%108 = and i1 %106, %107
%109 = or i1 %105, %108
br i1 %109, label %135, label %110
110: ; preds = %95, %110
%111 = phi i64 [ %131, %110 ], [ 0, %95 ]
%112 = phi <2 x i64> [ %132, %110 ], [ <i64 0, i64 1>, %95 ]
%113 = getelementptr inbounds double, double* %90, i64 %111
%114 = bitcast double* %113 to <2 x double>*
store <2 x double> zeroinitializer, <2 x double>* %114
%115 = getelementptr inbounds double, double* %113, i64 2
%116 = bitcast double* %115 to <2 x double>*
store <2 x double> zeroinitializer, <2 x double>* %116
%117 = trunc <2 x i64> %112 to <2 x i32>
%118 = add <2 x i32> %117, <i32 1, i32 1>
%119 = trunc <2 x i64> %112 to <2 x i32>
%120 = add <2 x i32> %119, <i32 3, i32 3>
%121 = sitofp <2 x i32> %118 to <2 x double>
%122 = sitofp <2 x i32> %120 to <2 x double>
%123 = getelementptr inbounds double, double* %92, i64 %111
%124 = bitcast double* %123 to <2 x double>*
store <2 x double> %121, <2 x double>* %124
%125 = getelementptr inbounds double, double* %123, i64 2
%126 = bitcast double* %125 to <2 x double>*
store <2 x double> %122, <2 x double>* %126
%127 = getelementptr inbounds double, double* %94, i64 %111
%128 = bitcast double* %127 to <2 x double>*
store <2 x double> %121, <2 x double>* %128
%129 = getelementptr inbounds double, double* %127, i64 2
%130 = bitcast double* %129 to <2 x double>*
store <2 x double> %122, <2 x double>* %130
%131 = add nuw i64 %111, 4
%132 = add <2 x i64> %112, <i64 4, i64 4>
%133 = icmp eq i64 %131, %79
br i1 %133, label %134, label %110
134: ; preds = %110
br i1 %80, label %162, label %135
135: ; preds = %95, %87, %134
%136 = phi i64 [ 0, %95 ], [ 0, %87 ], [ %79, %134 ]
br i1 %82, label %144, label %137
137: ; preds = %135
%138 = getelementptr inbounds double, double* %90, i64 %136
store double 0.000000e+00, double* %138
%139 = or i64 %136, 1
%140 = trunc i64 %139 to i32
%141 = sitofp i32 %140 to double
%142 = getelementptr inbounds double, double* %92, i64 %136
store double %141, double* %142
%143 = getelementptr inbounds double, double* %94, i64 %136
store double %141, double* %143
br label %144
144: ; preds = %137, %135
%145 = phi i64 [ %136, %135 ], [ %139, %137 ]
%146 = icmp eq i64 %77, %136
br i1 %146, label %162, label %147
147: ; preds = %144, %147
%148 = phi i64 [ %156, %147 ], [ %145, %144 ]
%149 = getelementptr inbounds double, double* %90, i64 %148
store double 0.000000e+00, double* %149
%150 = add nuw nsw i64 %148, 1
%151 = trunc i64 %150 to i32
%152 = sitofp i32 %151 to double
%153 = getelementptr inbounds double, double* %92, i64 %148
store double %152, double* %153
%154 = getelementptr inbounds double, double* %94, i64 %148
store double %152, double* %154
%155 = getelementptr inbounds double, double* %90, i64 %150
store double 0.000000e+00, double* %155
%156 = add nuw nsw i64 %148, 2
%157 = trunc i64 %156 to i32
%158 = sitofp i32 %157 to double
%159 = getelementptr inbounds double, double* %92, i64 %150
store double %158, double* %159
%160 = getelementptr inbounds double, double* %94, i64 %150
store double %158, double* %160
%161 = icmp eq i64 %156, %76
br i1 %161, label %162, label %147
162: ; preds = %144, %147, %134
%163 = add nuw nsw i64 %88, 1
%164 = icmp eq i64 %163, %76
br i1 %164, label %165, label %87
165: ; preds = %162
%166 = tail call double (...) @omp_get_wtime()
br i1 %9, label %167, label %274
167: ; preds = %165
%168 = zext i32 %5 to i64
%169 = and i64 %76, 3
%170 = icmp ult i64 %77, 3
%171 = and i64 %76, 4294967292
%172 = icmp eq i64 %169, 0
br label %173
173: ; preds = %226, %167
%174 = phi i64 [ 0, %167 ], [ %227, %226 ]
%175 = getelementptr inbounds double*, double** %70, i64 %174
%176 = load double*, double** %175
br i1 %170, label %213, label %184
177: ; preds = %226
br i1 %9, label %178, label %274
178: ; preds = %177
%179 = zext i32 %5 to i64
%180 = and i64 %76, 1
%181 = icmp eq i64 %77, 0
%182 = and i64 %76, 4294967294
%183 = icmp eq i64 %180, 0
br label %229
184: ; preds = %173, %184
%185 = phi i64 [ %210, %184 ], [ 0, %173 ]
%186 = phi i64 [ %211, %184 ], [ 0, %173 ]
%187 = getelementptr inbounds double*, double** %69, i64 %185
%188 = load double*, double** %187
%189 = getelementptr inbounds double, double* %188, i64 %174
%190 = load double, double* %189
%191 = getelementptr inbounds double, double* %176, i64 %185
store double %190, double* %191
%192 = or i64 %185, 1
%193 = getelementptr inbounds double*, double** %69, i64 %192
%194 = load double*, double** %193
%195 = getelementptr inbounds double, double* %194, i64 %174
%196 = load double, double* %195
%197 = getelementptr inbounds double, double* %176, i64 %192
store double %196, double* %197
%198 = or i64 %185, 2
%199 = getelementptr inbounds double*, double** %69, i64 %198
%200 = load double*, double** %199
%201 = getelementptr inbounds double, double* %200, i64 %174
%202 = load double, double* %201
%203 = getelementptr inbounds double, double* %176, i64 %198
store double %202, double* %203
%204 = or i64 %185, 3
%205 = getelementptr inbounds double*, double** %69, i64 %204
%206 = load double*, double** %205
%207 = getelementptr inbounds double, double* %206, i64 %174
%208 = load double, double* %207
%209 = getelementptr inbounds double, double* %176, i64 %204
store double %208, double* %209
%210 = add nuw nsw i64 %185, 4
%211 = add i64 %186, 4
%212 = icmp eq i64 %211, %171
br i1 %212, label %213, label %184
213: ; preds = %184, %173
%214 = phi i64 [ 0, %173 ], [ %210, %184 ]
br i1 %172, label %226, label %215
215: ; preds = %213, %215
%216 = phi i64 [ %223, %215 ], [ %214, %213 ]
%217 = phi i64 [ %224, %215 ], [ 0, %213 ]
%218 = getelementptr inbounds double*, double** %69, i64 %216
%219 = load double*, double** %218
%220 = getelementptr inbounds double, double* %219, i64 %174
%221 = load double, double* %220
%222 = getelementptr inbounds double, double* %176, i64 %216
store double %221, double* %222
%223 = add nuw nsw i64 %216, 1
%224 = add i64 %217, 1
%225 = icmp eq i64 %224, %169
br i1 %225, label %226, label %215
226: ; preds = %215, %213
%227 = add nuw nsw i64 %174, 1
%228 = icmp eq i64 %227, %168
br i1 %228, label %177, label %173
229: ; preds = %271, %178
%230 = phi i64 [ 0, %178 ], [ %272, %271 ]
%231 = getelementptr inbounds double*, double** %8, i64 %230
%232 = getelementptr inbounds double*, double** %68, i64 %230
%233 = load double*, double** %231
%234 = load double*, double** %232
br label %235
235: ; preds = %268, %229
%236 = phi i64 [ 0, %229 ], [ %269, %268 ]
%237 = getelementptr inbounds double*, double** %70, i64 %236
%238 = load double*, double** %237
%239 = getelementptr inbounds double, double* %234, i64 %236
%240 = load double, double* %239
br i1 %181, label %259, label %241
241: ; preds = %235, %241
%242 = phi double [ %255, %241 ], [ %240, %235 ]
%243 = phi i64 [ %256, %241 ], [ 0, %235 ]
%244 = phi i64 [ %257, %241 ], [ 0, %235 ]
%245 = getelementptr inbounds double, double* %233, i64 %243
%246 = load double, double* %245
%247 = getelementptr inbounds double, double* %238, i64 %243
%248 = load double, double* %247
%249 = tail call double @llvm.fmuladd.f64(double %246, double %248, double %242)
store double %249, double* %239
%250 = or i64 %243, 1
%251 = getelementptr inbounds double, double* %233, i64 %250
%252 = load double, double* %251
%253 = getelementptr inbounds double, double* %238, i64 %250
%254 = load double, double* %253
%255 = tail call double @llvm.fmuladd.f64(double %252, double %254, double %249)
store double %255, double* %239
%256 = add nuw nsw i64 %243, 2
%257 = add i64 %244, 2
%258 = icmp eq i64 %257, %182
br i1 %258, label %259, label %241
259: ; preds = %241, %235
%260 = phi double [ %240, %235 ], [ %255, %241 ]
%261 = phi i64 [ 0, %235 ], [ %256, %241 ]
br i1 %183, label %268, label %262
262: ; preds = %259
%263 = getelementptr inbounds double, double* %233, i64 %261
%264 = load double, double* %263
%265 = getelementptr inbounds double, double* %238, i64 %261
%266 = load double, double* %265
%267 = tail call double @llvm.fmuladd.f64(double %264, double %266, double %260)
store double %267, double* %239
br label %268
268: ; preds = %259, %262
%269 = add nuw nsw i64 %236, 1
%270 = icmp eq i64 %269, %179
br i1 %270, label %271, label %235
271: ; preds = %268
%272 = add nuw nsw i64 %230, 1
%273 = icmp eq i64 %272, %179
br i1 %273, label %274, label %229
274: ; preds = %271, %165, %73, %177
%275 = phi double [ %166, %177 ], [ %166, %165 ], [ %74, %73 ], [ %166, %271 ]
%276 = tail call double (...) @omp_get_wtime()
%277 = fsub double %276, %275
%278 = load double*, double** %68
%279 = load double, double* %278
%280 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.1, i64 0, i64 0), double %279)
%281 = add nsw i32 %5, -1
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds double*, double** %68, i64 %282
%284 = load double*, double** %283
%285 = getelementptr inbounds double, double* %284, i64 %282
%286 = load double, double* %285
%287 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.2, i64 0, i64 0), double %286)
%288 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.3, i64 0, i64 0), double %277, i32 %5)
ret i32 0
}