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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ calloc(int, int);
double omp_get_wtime();
int /*<<< orphan*/ printf(char *, int, double);
int main(void) {
  int N = 20000000;
  double t0, t1, tdelta;
  int *a, *b;
  int i;
  a = (int *)calloc(20000000, sizeof(int));
  b = (int *)calloc(20000000, sizeof(int));
#pragma omp parallel
#pragma omp for
  for (i = 0; i < N; i++)
    a[i] = b[i] = 1;
  t0 = omp_get_wtime();
#pragma omp parallel
#pragma omp for schedule(static)
  for (i = 0; i < N; i++)
    a[i] = a[i] + b[i];
  t1 = omp_get_wtime();
  tdelta = t1 - t0;
  printf("Soma de %d numeros e schedule(static) em tempo: %.4f segundos.\n", N,
         tdelta);
  for (i = 0; i < N; i++)
    a[i] = b[i] = 1;
  t0 = omp_get_wtime();
#pragma omp parallel
#pragma omp for schedule(dynamic)
  for (i = 0; i < N; i++)
    a[i] = a[i] + b[i];
  t1 = omp_get_wtime();
  tdelta = t1 - t0;
  printf("Soma de %d numeros e schedule(dynamic) em tempo: %.4f segundos.\n", N,
         tdelta);
  for (i = 0; i < N; i++)
    a[i] = b[i] = 1;
  t0 = omp_get_wtime();
#pragma omp parallel
#pragma omp for schedule(auto)
  for (i = 0; i < N; i++)
    a[i] = a[i] + b[i];
  t1 = omp_get_wtime();
  tdelta = t1 - t0;
  printf("Soma de %d numeros e schedule(auto) em tempo: %.4f segundos.\n", N,
         tdelta);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x1312d00,-0x8(%rbp)
mov    $0x1312d00,%edi
mov    $0x4,%esi
call   1050 <calloc@plt>
mov    %rax,-0x28(%rbp)
mov    $0x1312d00,%edi
mov    $0x4,%esi
call   1050 <calloc@plt>
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11ab <main+0x7b>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1173 <main+0x43>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x10(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11f9 <main+0xc9>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11be <main+0x8e>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%esi
movsd  -0x20(%rbp),%xmm0
lea    0xddd(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1267 <main+0x137>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    122f <main+0xff>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x10(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    12b5 <main+0x185>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    127a <main+0x14a>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%esi
movsd  -0x20(%rbp),%xmm0
lea    0xd61(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1323 <main+0x1f3>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12eb <main+0x1bb>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x10(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1371 <main+0x241>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1336 <main+0x206>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%esi
movsd  -0x20(%rbp),%xmm0
lea    0xce6(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
mov    $0x1312d00,%edi
mov    $0x4,%esi
call   1050 <calloc@plt>
mov    %rax,%rbx
mov    $0x1312d00,%edi
mov    $0x4,%esi
call   1050 <calloc@plt>
mov    %rax,%r14
lea    0x4c4b400(%rax),%r12
lea    0x4c4b400(%rbx),%r15
cmp    %r15,%rax
jae    11e4 <main+0xb4>
cmp    %r12,%rbx
jae    11e4 <main+0xb4>
mov    $0x4,%eax
nopl   0x0(%rax)
movl   $0x1,-0x10(%r14,%rax,4)
movl   $0x1,-0x10(%rbx,%rax,4)
movl   $0x1,-0xc(%r14,%rax,4)
movl   $0x1,-0xc(%rbx,%rax,4)
movl   $0x1,-0x8(%r14,%rax,4)
movl   $0x1,-0x8(%rbx,%rax,4)
movl   $0x1,-0x4(%r14,%rax,4)
movl   $0x1,-0x4(%rbx,%rax,4)
movl   $0x1,(%r14,%rax,4)
movl   $0x1,(%rbx,%rax,4)
add    $0x5,%rax
cmp    $0x1312d04,%rax
jne    1180 <main+0x50>
jmp    1296 <main+0x166>
mov    $0x24,%eax
movdqa 0xe0f(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movdqu %xmm0,-0x90(%r14,%rax,4)
ff ff ff
movdqu %xmm0,-0x80(%r14,%rax,4)
movdqu %xmm0,-0x90(%rbx,%rax,4)
ff ff
movdqu %xmm0,-0x80(%rbx,%rax,4)
movdqu %xmm0,-0x70(%r14,%rax,4)
movdqu %xmm0,-0x60(%r14,%rax,4)
movdqu %xmm0,-0x70(%rbx,%rax,4)
movdqu %xmm0,-0x60(%rbx,%rax,4)
movdqu %xmm0,-0x50(%r14,%rax,4)
movdqu %xmm0,-0x40(%r14,%rax,4)
movdqu %xmm0,-0x50(%rbx,%rax,4)
movdqu %xmm0,-0x40(%rbx,%rax,4)
movdqu %xmm0,-0x30(%r14,%rax,4)
movdqu %xmm0,-0x20(%r14,%rax,4)
movdqu %xmm0,-0x30(%rbx,%rax,4)
movdqu %xmm0,-0x20(%rbx,%rax,4)
movdqu %xmm0,-0x10(%r14,%rax,4)
movdqu %xmm0,(%r14,%rax,4)
movdqu %xmm0,-0x10(%rbx,%rax,4)
movdqu %xmm0,(%rbx,%rax,4)
add    $0x28,%rax
cmp    $0x1312d24,%rax
jne    1200 <main+0xd0>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
cmp    %r12,%rbx
movq   %xmm0,(%rsp)
jae    12f0 <main+0x1c0>
cmp    %r15,%r14
jae    12f0 <main+0x1c0>
mov    $0x3,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0xc(%r14,%rax,4),%ecx
add    %ecx,-0xc(%rbx,%rax,4)
mov    -0x8(%r14,%rax,4),%ecx
add    %ecx,-0x8(%rbx,%rax,4)
mov    -0x4(%r14,%rax,4),%ecx
add    %ecx,-0x4(%rbx,%rax,4)
mov    (%r14,%rax,4),%ecx
add    %ecx,(%rbx,%rax,4)
add    $0x4,%rax
cmp    $0x1312d03,%rax
jne    12c0 <main+0x190>
jmp    1365 <main+0x235>
mov    $0xc,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movdqu -0x30(%r14,%rax,4),%xmm0
movdqu -0x20(%r14,%rax,4),%xmm1
movdqu -0x30(%rbx,%rax,4),%xmm2
paddd  %xmm0,%xmm2
movdqu -0x20(%rbx,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu -0x10(%rbx,%rax,4),%xmm1
movdqu (%rbx,%rax,4),%xmm3
movdqu %xmm2,-0x30(%rbx,%rax,4)
movdqu %xmm0,-0x20(%rbx,%rax,4)
movdqu -0x10(%r14,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu (%r14,%rax,4),%xmm1
paddd  %xmm3,%xmm1
movdqu %xmm0,-0x10(%rbx,%rax,4)
movdqu %xmm1,(%rbx,%rax,4)
add    $0x10,%rax
cmp    $0x1312d0c,%rax
jne    1300 <main+0x1d0>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
subsd  (%rsp),%xmm0
lea    0xc98(%rip),%rdi
mov    $0x1312d00,%esi
call   1040 <printf@plt>
cmp    %r15,%r14
jae    1404 <main+0x2d4>
cmp    %r12,%rbx
jae    1404 <main+0x2d4>
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movl   $0x1,-0x10(%r14,%rax,4)
movl   $0x1,-0x10(%rbx,%rax,4)
movl   $0x1,-0xc(%r14,%rax,4)
movl   $0x1,-0xc(%rbx,%rax,4)
movl   $0x1,-0x8(%r14,%rax,4)
movl   $0x1,-0x8(%rbx,%rax,4)
movl   $0x1,-0x4(%r14,%rax,4)
movl   $0x1,-0x4(%rbx,%rax,4)
movl   $0x1,(%r14,%rax,4)
movl   $0x1,(%rbx,%rax,4)
add    $0x5,%rax
cmp    $0x1312d04,%rax
jne    13a0 <main+0x270>
jmp    14b6 <main+0x386>
mov    $0x24,%eax
movapd 0xbef(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd %xmm0,-0x90(%r14,%rax,4)
ff ff ff
movupd %xmm0,-0x80(%r14,%rax,4)
movupd %xmm0,-0x90(%rbx,%rax,4)
ff ff
movupd %xmm0,-0x80(%rbx,%rax,4)
movupd %xmm0,-0x70(%r14,%rax,4)
movupd %xmm0,-0x60(%r14,%rax,4)
movupd %xmm0,-0x70(%rbx,%rax,4)
movupd %xmm0,-0x60(%rbx,%rax,4)
movupd %xmm0,-0x50(%r14,%rax,4)
movupd %xmm0,-0x40(%r14,%rax,4)
movupd %xmm0,-0x50(%rbx,%rax,4)
movupd %xmm0,-0x40(%rbx,%rax,4)
movupd %xmm0,-0x30(%r14,%rax,4)
movupd %xmm0,-0x20(%r14,%rax,4)
movupd %xmm0,-0x30(%rbx,%rax,4)
movupd %xmm0,-0x20(%rbx,%rax,4)
movupd %xmm0,-0x10(%r14,%rax,4)
movupd %xmm0,(%r14,%rax,4)
movupd %xmm0,-0x10(%rbx,%rax,4)
movupd %xmm0,(%rbx,%rax,4)
add    $0x28,%rax
cmp    $0x1312d24,%rax
jne    1420 <main+0x2f0>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
cmp    %r12,%rbx
movsd  %xmm0,(%rsp)
jae    1510 <main+0x3e0>
cmp    %r15,%r14
jae    1510 <main+0x3e0>
mov    $0x3,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0xc(%r14,%rax,4),%ecx
add    %ecx,-0xc(%rbx,%rax,4)
mov    -0x8(%r14,%rax,4),%ecx
add    %ecx,-0x8(%rbx,%rax,4)
mov    -0x4(%r14,%rax,4),%ecx
add    %ecx,-0x4(%rbx,%rax,4)
mov    (%r14,%rax,4),%ecx
add    %ecx,(%rbx,%rax,4)
add    $0x4,%rax
cmp    $0x1312d03,%rax
jne    14e0 <main+0x3b0>
jmp    1585 <main+0x455>
mov    $0xc,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movdqu -0x30(%r14,%rax,4),%xmm0
movdqu -0x20(%r14,%rax,4),%xmm1
movdqu -0x30(%rbx,%rax,4),%xmm2
paddd  %xmm0,%xmm2
movdqu -0x20(%rbx,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu -0x10(%rbx,%rax,4),%xmm1
movdqu (%rbx,%rax,4),%xmm3
movdqu %xmm2,-0x30(%rbx,%rax,4)
movdqu %xmm0,-0x20(%rbx,%rax,4)
movdqu -0x10(%r14,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu (%r14,%rax,4),%xmm1
paddd  %xmm3,%xmm1
movdqu %xmm0,-0x10(%rbx,%rax,4)
movdqu %xmm1,(%rbx,%rax,4)
add    $0x10,%rax
cmp    $0x1312d0c,%rax
jne    1520 <main+0x3f0>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
subsd  (%rsp),%xmm0
lea    0xab8(%rip),%rdi
mov    $0x1312d00,%esi
call   1040 <printf@plt>
cmp    %r15,%r14
jae    1624 <main+0x4f4>
cmp    %r12,%rbx
jae    1624 <main+0x4f4>
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movl   $0x1,-0x10(%r14,%rax,4)
movl   $0x1,-0x10(%rbx,%rax,4)
movl   $0x1,-0xc(%r14,%rax,4)
movl   $0x1,-0xc(%rbx,%rax,4)
movl   $0x1,-0x8(%r14,%rax,4)
movl   $0x1,-0x8(%rbx,%rax,4)
movl   $0x1,-0x4(%r14,%rax,4)
movl   $0x1,-0x4(%rbx,%rax,4)
movl   $0x1,(%r14,%rax,4)
movl   $0x1,(%rbx,%rax,4)
add    $0x5,%rax
cmp    $0x1312d04,%rax
jne    15c0 <main+0x490>
jmp    16d6 <main+0x5a6>
mov    $0x24,%eax
movapd 0x9cf(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd %xmm0,-0x90(%r14,%rax,4)
ff ff ff
movupd %xmm0,-0x80(%r14,%rax,4)
movupd %xmm0,-0x90(%rbx,%rax,4)
ff ff
movupd %xmm0,-0x80(%rbx,%rax,4)
movupd %xmm0,-0x70(%r14,%rax,4)
movupd %xmm0,-0x60(%r14,%rax,4)
movupd %xmm0,-0x70(%rbx,%rax,4)
movupd %xmm0,-0x60(%rbx,%rax,4)
movupd %xmm0,-0x50(%r14,%rax,4)
movupd %xmm0,-0x40(%r14,%rax,4)
movupd %xmm0,-0x50(%rbx,%rax,4)
movupd %xmm0,-0x40(%rbx,%rax,4)
movupd %xmm0,-0x30(%r14,%rax,4)
movupd %xmm0,-0x20(%r14,%rax,4)
movupd %xmm0,-0x30(%rbx,%rax,4)
movupd %xmm0,-0x20(%rbx,%rax,4)
movupd %xmm0,-0x10(%r14,%rax,4)
movupd %xmm0,(%r14,%rax,4)
movupd %xmm0,-0x10(%rbx,%rax,4)
movupd %xmm0,(%rbx,%rax,4)
add    $0x28,%rax
cmp    $0x1312d24,%rax
jne    1640 <main+0x510>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
cmp    %r12,%rbx
movsd  %xmm0,(%rsp)
jae    1730 <main+0x600>
cmp    %r15,%r14
jae    1730 <main+0x600>
mov    $0x3,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0xc(%r14,%rax,4),%ecx
add    %ecx,-0xc(%rbx,%rax,4)
mov    -0x8(%r14,%rax,4),%ecx
add    %ecx,-0x8(%rbx,%rax,4)
mov    -0x4(%r14,%rax,4),%ecx
add    %ecx,-0x4(%rbx,%rax,4)
mov    (%r14,%rax,4),%ecx
add    %ecx,(%rbx,%rax,4)
add    $0x4,%rax
cmp    $0x1312d03,%rax
jne    1700 <main+0x5d0>
jmp    17a5 <main+0x675>
mov    $0xc,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movdqu -0x30(%r14,%rax,4),%xmm0
movdqu -0x20(%r14,%rax,4),%xmm1
movdqu -0x30(%rbx,%rax,4),%xmm2
paddd  %xmm0,%xmm2
movdqu -0x20(%rbx,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu -0x10(%rbx,%rax,4),%xmm1
movdqu (%rbx,%rax,4),%xmm3
movdqu %xmm2,-0x30(%rbx,%rax,4)
movdqu %xmm0,-0x20(%rbx,%rax,4)
movdqu -0x10(%r14,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu (%r14,%rax,4),%xmm1
paddd  %xmm3,%xmm1
movdqu %xmm0,-0x10(%rbx,%rax,4)
movdqu %xmm1,(%rbx,%rax,4)
add    $0x10,%rax
cmp    $0x1312d0c,%rax
jne    1740 <main+0x610>
xor    %eax,%eax
call   1030 <omp_get_wtime@plt>
subsd  (%rsp),%xmm0
lea    0x8d9(%rip),%rdi
mov    $0x1312d00,%esi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [64 x i8] c"Soma de %d numeros e schedule(static) em tempo: %.4f segundos.\0A\00"
@.str.1 = [65 x i8] c"Soma de %d numeros e schedule(dynamic) em tempo: %.4f segundos.\0A\00"
@.str.2 = [62 x i8] c"Soma de %d numeros e schedule(auto) em tempo: %.4f segundos.\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca i32*
%7 = alloca i32*
%8 = alloca i32
store i32 0, i32* %1
store i32 20000000, i32* %2
%9 = call i64 @calloc(i32 20000000, i32 4)
%10 = inttoptr i64 %9 to i32*
store i32* %10, i32** %6
%11 = call i64 @calloc(i32 20000000, i32 4)
%12 = inttoptr i64 %11 to i32*
store i32* %12, i32** %7
store i32 0, i32* %8
br label %13
13: ; preds = %26, %0
%14 = load i32, i32* %8
%15 = load i32, i32* %2
%16 = icmp slt i32 %14, %15
br i1 %16, label %17, label %29
17: ; preds = %13
%18 = load i32*, i32** %7
%19 = load i32, i32* %8
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds i32, i32* %18, i64 %20
store i32 1, i32* %21
%22 = load i32*, i32** %6
%23 = load i32, i32* %8
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i32, i32* %22, i64 %24
store i32 1, i32* %25
br label %26
26: ; preds = %17
%27 = load i32, i32* %8
%28 = add nsw i32 %27, 1
store i32 %28, i32* %8
br label %13
29: ; preds = %13
%30 = call double (...) @omp_get_wtime()
store double %30, double* %3
store i32 0, i32* %8
br label %31
31: ; preds = %51, %29
%32 = load i32, i32* %8
%33 = load i32, i32* %2
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %54
35: ; preds = %31
%36 = load i32*, i32** %6
%37 = load i32, i32* %8
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i32, i32* %36, i64 %38
%40 = load i32, i32* %39
%41 = load i32*, i32** %7
%42 = load i32, i32* %8
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i32, i32* %41, i64 %43
%45 = load i32, i32* %44
%46 = add nsw i32 %40, %45
%47 = load i32*, i32** %6
%48 = load i32, i32* %8
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds i32, i32* %47, i64 %49
store i32 %46, i32* %50
br label %51
51: ; preds = %35
%52 = load i32, i32* %8
%53 = add nsw i32 %52, 1
store i32 %53, i32* %8
br label %31
54: ; preds = %31
%55 = call double (...) @omp_get_wtime()
store double %55, double* %4
%56 = load double, double* %4
%57 = load double, double* %3
%58 = fsub double %56, %57
store double %58, double* %5
%59 = load i32, i32* %2
%60 = load double, double* %5
%61 = call i32 @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str, i64 0, i64 0), i32 %59, double %60)
store i32 0, i32* %8
br label %62
62: ; preds = %75, %54
%63 = load i32, i32* %8
%64 = load i32, i32* %2
%65 = icmp slt i32 %63, %64
br i1 %65, label %66, label %78
66: ; preds = %62
%67 = load i32*, i32** %7
%68 = load i32, i32* %8
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i32, i32* %67, i64 %69
store i32 1, i32* %70
%71 = load i32*, i32** %6
%72 = load i32, i32* %8
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i32, i32* %71, i64 %73
store i32 1, i32* %74
br label %75
75: ; preds = %66
%76 = load i32, i32* %8
%77 = add nsw i32 %76, 1
store i32 %77, i32* %8
br label %62
78: ; preds = %62
%79 = call double (...) @omp_get_wtime()
store double %79, double* %3
store i32 0, i32* %8
br label %80
80: ; preds = %100, %78
%81 = load i32, i32* %8
%82 = load i32, i32* %2
%83 = icmp slt i32 %81, %82
br i1 %83, label %84, label %103
84: ; preds = %80
%85 = load i32*, i32** %6
%86 = load i32, i32* %8
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i32, i32* %85, i64 %87
%89 = load i32, i32* %88
%90 = load i32*, i32** %7
%91 = load i32, i32* %8
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i32, i32* %90, i64 %92
%94 = load i32, i32* %93
%95 = add nsw i32 %89, %94
%96 = load i32*, i32** %6
%97 = load i32, i32* %8
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds i32, i32* %96, i64 %98
store i32 %95, i32* %99
br label %100
100: ; preds = %84
%101 = load i32, i32* %8
%102 = add nsw i32 %101, 1
store i32 %102, i32* %8
br label %80
103: ; preds = %80
%104 = call double (...) @omp_get_wtime()
store double %104, double* %4
%105 = load double, double* %4
%106 = load double, double* %3
%107 = fsub double %105, %106
store double %107, double* %5
%108 = load i32, i32* %2
%109 = load double, double* %5
%110 = call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.1, i64 0, i64 0), i32 %108, double %109)
store i32 0, i32* %8
br label %111
111: ; preds = %124, %103
%112 = load i32, i32* %8
%113 = load i32, i32* %2
%114 = icmp slt i32 %112, %113
br i1 %114, label %115, label %127
115: ; preds = %111
%116 = load i32*, i32** %7
%117 = load i32, i32* %8
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i32, i32* %116, i64 %118
store i32 1, i32* %119
%120 = load i32*, i32** %6
%121 = load i32, i32* %8
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i32, i32* %120, i64 %122
store i32 1, i32* %123
br label %124
124: ; preds = %115
%125 = load i32, i32* %8
%126 = add nsw i32 %125, 1
store i32 %126, i32* %8
br label %111
127: ; preds = %111
%128 = call double (...) @omp_get_wtime()
store double %128, double* %3
store i32 0, i32* %8
br label %129
129: ; preds = %149, %127
%130 = load i32, i32* %8
%131 = load i32, i32* %2
%132 = icmp slt i32 %130, %131
br i1 %132, label %133, label %152
133: ; preds = %129
%134 = load i32*, i32** %6
%135 = load i32, i32* %8
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds i32, i32* %134, i64 %136
%138 = load i32, i32* %137
%139 = load i32*, i32** %7
%140 = load i32, i32* %8
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds i32, i32* %139, i64 %141
%143 = load i32, i32* %142
%144 = add nsw i32 %138, %143
%145 = load i32*, i32** %6
%146 = load i32, i32* %8
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i32, i32* %145, i64 %147
store i32 %144, i32* %148
br label %149
149: ; preds = %133
%150 = load i32, i32* %8
%151 = add nsw i32 %150, 1
store i32 %151, i32* %8
br label %129
152: ; preds = %129
%153 = call double (...) @omp_get_wtime()
store double %153, double* %4
%154 = load double, double* %4
%155 = load double, double* %3
%156 = fsub double %154, %155
store double %156, double* %5
%157 = load i32, i32* %2
%158 = load double, double* %5
%159 = call i32 @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.2, i64 0, i64 0), i32 %157, double %158)
ret i32 0
}

LLVM IR (-O2):
@.str = [64 x i8] c"Soma de %d numeros e schedule(static) em tempo: %.4f segundos.\0A\00"
@.str.1 = [65 x i8] c"Soma de %d numeros e schedule(dynamic) em tempo: %.4f segundos.\0A\00"
@.str.2 = [62 x i8] c"Soma de %d numeros e schedule(auto) em tempo: %.4f segundos.\0A\00"
define i32 @main() {
%1 = tail call i64 @calloc(i32 20000000, i32 4)
%2 = inttoptr i64 %1 to i32*
%3 = inttoptr i64 %1 to i8*
%4 = tail call i64 @calloc(i32 20000000, i32 4)
%5 = inttoptr i64 %4 to i32*
%6 = inttoptr i64 %4 to i8*
%7 = getelementptr i32, i32* %5, i64 20000000
%8 = bitcast i32* %7 to i8*
%9 = getelementptr i32, i32* %2, i64 20000000
%10 = bitcast i32* %9 to i8*
%11 = icmp ult i8* %6, %10
%12 = icmp ult i8* %3, %8
%13 = and i1 %11, %12
br i1 %13, label %62, label %14
14: ; preds = %0, %14
%15 = phi i64 [ %60, %14 ], [ 0, %0 ]
%16 = getelementptr inbounds i32, i32* %5, i64 %15
%17 = bitcast i32* %16 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %17
%18 = getelementptr inbounds i32, i32* %16, i64 4
%19 = bitcast i32* %18 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %19
%20 = getelementptr inbounds i32, i32* %2, i64 %15
%21 = bitcast i32* %20 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %21
%22 = getelementptr inbounds i32, i32* %20, i64 4
%23 = bitcast i32* %22 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %23
%24 = add nuw nsw i64 %15, 8
%25 = getelementptr inbounds i32, i32* %5, i64 %24
%26 = bitcast i32* %25 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %26
%27 = getelementptr inbounds i32, i32* %25, i64 4
%28 = bitcast i32* %27 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %28
%29 = getelementptr inbounds i32, i32* %2, i64 %24
%30 = bitcast i32* %29 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %30
%31 = getelementptr inbounds i32, i32* %29, i64 4
%32 = bitcast i32* %31 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %32
%33 = add nuw nsw i64 %15, 16
%34 = getelementptr inbounds i32, i32* %5, i64 %33
%35 = bitcast i32* %34 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %35
%36 = getelementptr inbounds i32, i32* %34, i64 4
%37 = bitcast i32* %36 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %37
%38 = getelementptr inbounds i32, i32* %2, i64 %33
%39 = bitcast i32* %38 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %39
%40 = getelementptr inbounds i32, i32* %38, i64 4
%41 = bitcast i32* %40 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %41
%42 = add nuw nsw i64 %15, 24
%43 = getelementptr inbounds i32, i32* %5, i64 %42
%44 = bitcast i32* %43 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %44
%45 = getelementptr inbounds i32, i32* %43, i64 4
%46 = bitcast i32* %45 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %46
%47 = getelementptr inbounds i32, i32* %2, i64 %42
%48 = bitcast i32* %47 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %48
%49 = getelementptr inbounds i32, i32* %47, i64 4
%50 = bitcast i32* %49 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %50
%51 = add nuw nsw i64 %15, 32
%52 = getelementptr inbounds i32, i32* %5, i64 %51
%53 = bitcast i32* %52 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %53
%54 = getelementptr inbounds i32, i32* %52, i64 4
%55 = bitcast i32* %54 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %55
%56 = getelementptr inbounds i32, i32* %2, i64 %51
%57 = bitcast i32* %56 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %57
%58 = getelementptr inbounds i32, i32* %56, i64 4
%59 = bitcast i32* %58 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %59
%60 = add nuw nsw i64 %15, 40
%61 = icmp eq i64 %60, 20000000
br i1 %61, label %80, label %14
62: ; preds = %0, %62
%63 = phi i64 [ %78, %62 ], [ 0, %0 ]
%64 = getelementptr inbounds i32, i32* %5, i64 %63
store i32 1, i32* %64
%65 = getelementptr inbounds i32, i32* %2, i64 %63
store i32 1, i32* %65
%66 = add nuw nsw i64 %63, 1
%67 = getelementptr inbounds i32, i32* %5, i64 %66
store i32 1, i32* %67
%68 = getelementptr inbounds i32, i32* %2, i64 %66
store i32 1, i32* %68
%69 = add nuw nsw i64 %63, 2
%70 = getelementptr inbounds i32, i32* %5, i64 %69
store i32 1, i32* %70
%71 = getelementptr inbounds i32, i32* %2, i64 %69
store i32 1, i32* %71
%72 = add nuw nsw i64 %63, 3
%73 = getelementptr inbounds i32, i32* %5, i64 %72
store i32 1, i32* %73
%74 = getelementptr inbounds i32, i32* %2, i64 %72
store i32 1, i32* %74
%75 = add nuw nsw i64 %63, 4
%76 = getelementptr inbounds i32, i32* %5, i64 %75
store i32 1, i32* %76
%77 = getelementptr inbounds i32, i32* %2, i64 %75
store i32 1, i32* %77
%78 = add nuw nsw i64 %63, 5
%79 = icmp eq i64 %78, 20000000
br i1 %79, label %80, label %62
80: ; preds = %14, %62
%81 = tail call double (...) @omp_get_wtime()
%82 = getelementptr i32, i32* %2, i64 20000000
%83 = bitcast i32* %82 to i8*
%84 = getelementptr i32, i32* %5, i64 20000000
%85 = bitcast i32* %84 to i8*
%86 = icmp ult i8* %3, %85
%87 = icmp ult i8* %6, %83
%88 = and i1 %86, %87
br i1 %88, label %126, label %89
89: ; preds = %80, %89
%90 = phi i64 [ %124, %89 ], [ 0, %80 ]
%91 = getelementptr inbounds i32, i32* %2, i64 %90
%92 = bitcast i32* %91 to <4 x i32>*
%93 = load <4 x i32>, <4 x i32>* %92
%94 = getelementptr inbounds i32, i32* %91, i64 4
%95 = bitcast i32* %94 to <4 x i32>*
%96 = load <4 x i32>, <4 x i32>* %95
%97 = getelementptr inbounds i32, i32* %5, i64 %90
%98 = bitcast i32* %97 to <4 x i32>*
%99 = load <4 x i32>, <4 x i32>* %98
%100 = getelementptr inbounds i32, i32* %97, i64 4
%101 = bitcast i32* %100 to <4 x i32>*
%102 = load <4 x i32>, <4 x i32>* %101
%103 = add nsw <4 x i32> %99, %93
%104 = add nsw <4 x i32> %102, %96
%105 = bitcast i32* %91 to <4 x i32>*
store <4 x i32> %103, <4 x i32>* %105
%106 = bitcast i32* %94 to <4 x i32>*
store <4 x i32> %104, <4 x i32>* %106
%107 = or i64 %90, 8
%108 = getelementptr inbounds i32, i32* %2, i64 %107
%109 = bitcast i32* %108 to <4 x i32>*
%110 = load <4 x i32>, <4 x i32>* %109
%111 = getelementptr inbounds i32, i32* %108, i64 4
%112 = bitcast i32* %111 to <4 x i32>*
%113 = load <4 x i32>, <4 x i32>* %112
%114 = getelementptr inbounds i32, i32* %5, i64 %107
%115 = bitcast i32* %114 to <4 x i32>*
%116 = load <4 x i32>, <4 x i32>* %115
%117 = getelementptr inbounds i32, i32* %114, i64 4
%118 = bitcast i32* %117 to <4 x i32>*
%119 = load <4 x i32>, <4 x i32>* %118
%120 = add nsw <4 x i32> %116, %110
%121 = add nsw <4 x i32> %119, %113
%122 = bitcast i32* %108 to <4 x i32>*
store <4 x i32> %120, <4 x i32>* %122
%123 = bitcast i32* %111 to <4 x i32>*
store <4 x i32> %121, <4 x i32>* %123
%124 = add nuw nsw i64 %90, 16
%125 = icmp eq i64 %124, 20000000
br i1 %125, label %153, label %89
126: ; preds = %80, %126
%127 = phi i64 [ %151, %126 ], [ 0, %80 ]
%128 = getelementptr inbounds i32, i32* %2, i64 %127
%129 = load i32, i32* %128
%130 = getelementptr inbounds i32, i32* %5, i64 %127
%131 = load i32, i32* %130
%132 = add nsw i32 %131, %129
store i32 %132, i32* %128
%133 = or i64 %127, 1
%134 = getelementptr inbounds i32, i32* %2, i64 %133
%135 = load i32, i32* %134
%136 = getelementptr inbounds i32, i32* %5, i64 %133
%137 = load i32, i32* %136
%138 = add nsw i32 %137, %135
store i32 %138, i32* %134
%139 = or i64 %127, 2
%140 = getelementptr inbounds i32, i32* %2, i64 %139
%141 = load i32, i32* %140
%142 = getelementptr inbounds i32, i32* %5, i64 %139
%143 = load i32, i32* %142
%144 = add nsw i32 %143, %141
store i32 %144, i32* %140
%145 = or i64 %127, 3
%146 = getelementptr inbounds i32, i32* %2, i64 %145
%147 = load i32, i32* %146
%148 = getelementptr inbounds i32, i32* %5, i64 %145
%149 = load i32, i32* %148
%150 = add nsw i32 %149, %147
store i32 %150, i32* %146
%151 = add nuw nsw i64 %127, 4
%152 = icmp eq i64 %151, 20000000
br i1 %152, label %153, label %126
153: ; preds = %89, %126
%154 = tail call double (...) @omp_get_wtime()
%155 = fsub double %154, %81
%156 = tail call i32 @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str, i64 0, i64 0), i32 20000000, double %155)
%157 = getelementptr i32, i32* %5, i64 20000000
%158 = bitcast i32* %157 to i8*
%159 = getelementptr i32, i32* %2, i64 20000000
%160 = bitcast i32* %159 to i8*
%161 = icmp ult i8* %6, %160
%162 = icmp ult i8* %3, %158
%163 = and i1 %161, %162
br i1 %163, label %212, label %164
164: ; preds = %153, %164
%165 = phi i64 [ %210, %164 ], [ 0, %153 ]
%166 = getelementptr inbounds i32, i32* %5, i64 %165
%167 = bitcast i32* %166 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %167
%168 = getelementptr inbounds i32, i32* %166, i64 4
%169 = bitcast i32* %168 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %169
%170 = getelementptr inbounds i32, i32* %2, i64 %165
%171 = bitcast i32* %170 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %171
%172 = getelementptr inbounds i32, i32* %170, i64 4
%173 = bitcast i32* %172 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %173
%174 = add nuw nsw i64 %165, 8
%175 = getelementptr inbounds i32, i32* %5, i64 %174
%176 = bitcast i32* %175 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %176
%177 = getelementptr inbounds i32, i32* %175, i64 4
%178 = bitcast i32* %177 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %178
%179 = getelementptr inbounds i32, i32* %2, i64 %174
%180 = bitcast i32* %179 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %180
%181 = getelementptr inbounds i32, i32* %179, i64 4
%182 = bitcast i32* %181 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %182
%183 = add nuw nsw i64 %165, 16
%184 = getelementptr inbounds i32, i32* %5, i64 %183
%185 = bitcast i32* %184 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %185
%186 = getelementptr inbounds i32, i32* %184, i64 4
%187 = bitcast i32* %186 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %187
%188 = getelementptr inbounds i32, i32* %2, i64 %183
%189 = bitcast i32* %188 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %189
%190 = getelementptr inbounds i32, i32* %188, i64 4
%191 = bitcast i32* %190 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %191
%192 = add nuw nsw i64 %165, 24
%193 = getelementptr inbounds i32, i32* %5, i64 %192
%194 = bitcast i32* %193 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %194
%195 = getelementptr inbounds i32, i32* %193, i64 4
%196 = bitcast i32* %195 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %196
%197 = getelementptr inbounds i32, i32* %2, i64 %192
%198 = bitcast i32* %197 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %198
%199 = getelementptr inbounds i32, i32* %197, i64 4
%200 = bitcast i32* %199 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %200
%201 = add nuw nsw i64 %165, 32
%202 = getelementptr inbounds i32, i32* %5, i64 %201
%203 = bitcast i32* %202 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %203
%204 = getelementptr inbounds i32, i32* %202, i64 4
%205 = bitcast i32* %204 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %205
%206 = getelementptr inbounds i32, i32* %2, i64 %201
%207 = bitcast i32* %206 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %207
%208 = getelementptr inbounds i32, i32* %206, i64 4
%209 = bitcast i32* %208 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %209
%210 = add nuw nsw i64 %165, 40
%211 = icmp eq i64 %210, 20000000
br i1 %211, label %230, label %164
212: ; preds = %153, %212
%213 = phi i64 [ %228, %212 ], [ 0, %153 ]
%214 = getelementptr inbounds i32, i32* %5, i64 %213
store i32 1, i32* %214
%215 = getelementptr inbounds i32, i32* %2, i64 %213
store i32 1, i32* %215
%216 = add nuw nsw i64 %213, 1
%217 = getelementptr inbounds i32, i32* %5, i64 %216
store i32 1, i32* %217
%218 = getelementptr inbounds i32, i32* %2, i64 %216
store i32 1, i32* %218
%219 = add nuw nsw i64 %213, 2
%220 = getelementptr inbounds i32, i32* %5, i64 %219
store i32 1, i32* %220
%221 = getelementptr inbounds i32, i32* %2, i64 %219
store i32 1, i32* %221
%222 = add nuw nsw i64 %213, 3
%223 = getelementptr inbounds i32, i32* %5, i64 %222
store i32 1, i32* %223
%224 = getelementptr inbounds i32, i32* %2, i64 %222
store i32 1, i32* %224
%225 = add nuw nsw i64 %213, 4
%226 = getelementptr inbounds i32, i32* %5, i64 %225
store i32 1, i32* %226
%227 = getelementptr inbounds i32, i32* %2, i64 %225
store i32 1, i32* %227
%228 = add nuw nsw i64 %213, 5
%229 = icmp eq i64 %228, 20000000
br i1 %229, label %230, label %212
230: ; preds = %164, %212
%231 = tail call double (...) @omp_get_wtime()
%232 = getelementptr i32, i32* %2, i64 20000000
%233 = bitcast i32* %232 to i8*
%234 = getelementptr i32, i32* %5, i64 20000000
%235 = bitcast i32* %234 to i8*
%236 = icmp ult i8* %3, %235
%237 = icmp ult i8* %6, %233
%238 = and i1 %236, %237
br i1 %238, label %276, label %239
239: ; preds = %230, %239
%240 = phi i64 [ %274, %239 ], [ 0, %230 ]
%241 = getelementptr inbounds i32, i32* %2, i64 %240
%242 = bitcast i32* %241 to <4 x i32>*
%243 = load <4 x i32>, <4 x i32>* %242
%244 = getelementptr inbounds i32, i32* %241, i64 4
%245 = bitcast i32* %244 to <4 x i32>*
%246 = load <4 x i32>, <4 x i32>* %245
%247 = getelementptr inbounds i32, i32* %5, i64 %240
%248 = bitcast i32* %247 to <4 x i32>*
%249 = load <4 x i32>, <4 x i32>* %248
%250 = getelementptr inbounds i32, i32* %247, i64 4
%251 = bitcast i32* %250 to <4 x i32>*
%252 = load <4 x i32>, <4 x i32>* %251
%253 = add nsw <4 x i32> %249, %243
%254 = add nsw <4 x i32> %252, %246
%255 = bitcast i32* %241 to <4 x i32>*
store <4 x i32> %253, <4 x i32>* %255
%256 = bitcast i32* %244 to <4 x i32>*
store <4 x i32> %254, <4 x i32>* %256
%257 = or i64 %240, 8
%258 = getelementptr inbounds i32, i32* %2, i64 %257
%259 = bitcast i32* %258 to <4 x i32>*
%260 = load <4 x i32>, <4 x i32>* %259
%261 = getelementptr inbounds i32, i32* %258, i64 4
%262 = bitcast i32* %261 to <4 x i32>*
%263 = load <4 x i32>, <4 x i32>* %262
%264 = getelementptr inbounds i32, i32* %5, i64 %257
%265 = bitcast i32* %264 to <4 x i32>*
%266 = load <4 x i32>, <4 x i32>* %265
%267 = getelementptr inbounds i32, i32* %264, i64 4
%268 = bitcast i32* %267 to <4 x i32>*
%269 = load <4 x i32>, <4 x i32>* %268
%270 = add nsw <4 x i32> %266, %260
%271 = add nsw <4 x i32> %269, %263
%272 = bitcast i32* %258 to <4 x i32>*
store <4 x i32> %270, <4 x i32>* %272
%273 = bitcast i32* %261 to <4 x i32>*
store <4 x i32> %271, <4 x i32>* %273
%274 = add nuw nsw i64 %240, 16
%275 = icmp eq i64 %274, 20000000
br i1 %275, label %303, label %239
276: ; preds = %230, %276
%277 = phi i64 [ %301, %276 ], [ 0, %230 ]
%278 = getelementptr inbounds i32, i32* %2, i64 %277
%279 = load i32, i32* %278
%280 = getelementptr inbounds i32, i32* %5, i64 %277
%281 = load i32, i32* %280
%282 = add nsw i32 %281, %279
store i32 %282, i32* %278
%283 = or i64 %277, 1
%284 = getelementptr inbounds i32, i32* %2, i64 %283
%285 = load i32, i32* %284
%286 = getelementptr inbounds i32, i32* %5, i64 %283
%287 = load i32, i32* %286
%288 = add nsw i32 %287, %285
store i32 %288, i32* %284
%289 = or i64 %277, 2
%290 = getelementptr inbounds i32, i32* %2, i64 %289
%291 = load i32, i32* %290
%292 = getelementptr inbounds i32, i32* %5, i64 %289
%293 = load i32, i32* %292
%294 = add nsw i32 %293, %291
store i32 %294, i32* %290
%295 = or i64 %277, 3
%296 = getelementptr inbounds i32, i32* %2, i64 %295
%297 = load i32, i32* %296
%298 = getelementptr inbounds i32, i32* %5, i64 %295
%299 = load i32, i32* %298
%300 = add nsw i32 %299, %297
store i32 %300, i32* %296
%301 = add nuw nsw i64 %277, 4
%302 = icmp eq i64 %301, 20000000
br i1 %302, label %303, label %276
303: ; preds = %239, %276
%304 = tail call double (...) @omp_get_wtime()
%305 = fsub double %304, %231
%306 = tail call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.1, i64 0, i64 0), i32 20000000, double %305)
%307 = getelementptr i32, i32* %5, i64 20000000
%308 = bitcast i32* %307 to i8*
%309 = getelementptr i32, i32* %2, i64 20000000
%310 = bitcast i32* %309 to i8*
%311 = icmp ult i8* %6, %310
%312 = icmp ult i8* %3, %308
%313 = and i1 %311, %312
br i1 %313, label %362, label %314
314: ; preds = %303, %314
%315 = phi i64 [ %360, %314 ], [ 0, %303 ]
%316 = getelementptr inbounds i32, i32* %5, i64 %315
%317 = bitcast i32* %316 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %317
%318 = getelementptr inbounds i32, i32* %316, i64 4
%319 = bitcast i32* %318 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %319
%320 = getelementptr inbounds i32, i32* %2, i64 %315
%321 = bitcast i32* %320 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %321
%322 = getelementptr inbounds i32, i32* %320, i64 4
%323 = bitcast i32* %322 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %323
%324 = add nuw nsw i64 %315, 8
%325 = getelementptr inbounds i32, i32* %5, i64 %324
%326 = bitcast i32* %325 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %326
%327 = getelementptr inbounds i32, i32* %325, i64 4
%328 = bitcast i32* %327 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %328
%329 = getelementptr inbounds i32, i32* %2, i64 %324
%330 = bitcast i32* %329 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %330
%331 = getelementptr inbounds i32, i32* %329, i64 4
%332 = bitcast i32* %331 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %332
%333 = add nuw nsw i64 %315, 16
%334 = getelementptr inbounds i32, i32* %5, i64 %333
%335 = bitcast i32* %334 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %335
%336 = getelementptr inbounds i32, i32* %334, i64 4
%337 = bitcast i32* %336 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %337
%338 = getelementptr inbounds i32, i32* %2, i64 %333
%339 = bitcast i32* %338 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %339
%340 = getelementptr inbounds i32, i32* %338, i64 4
%341 = bitcast i32* %340 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %341
%342 = add nuw nsw i64 %315, 24
%343 = getelementptr inbounds i32, i32* %5, i64 %342
%344 = bitcast i32* %343 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %344
%345 = getelementptr inbounds i32, i32* %343, i64 4
%346 = bitcast i32* %345 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %346
%347 = getelementptr inbounds i32, i32* %2, i64 %342
%348 = bitcast i32* %347 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %348
%349 = getelementptr inbounds i32, i32* %347, i64 4
%350 = bitcast i32* %349 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %350
%351 = add nuw nsw i64 %315, 32
%352 = getelementptr inbounds i32, i32* %5, i64 %351
%353 = bitcast i32* %352 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %353
%354 = getelementptr inbounds i32, i32* %352, i64 4
%355 = bitcast i32* %354 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %355
%356 = getelementptr inbounds i32, i32* %2, i64 %351
%357 = bitcast i32* %356 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %357
%358 = getelementptr inbounds i32, i32* %356, i64 4
%359 = bitcast i32* %358 to <4 x i32>*
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %359
%360 = add nuw nsw i64 %315, 40
%361 = icmp eq i64 %360, 20000000
br i1 %361, label %380, label %314
362: ; preds = %303, %362
%363 = phi i64 [ %378, %362 ], [ 0, %303 ]
%364 = getelementptr inbounds i32, i32* %5, i64 %363
store i32 1, i32* %364
%365 = getelementptr inbounds i32, i32* %2, i64 %363
store i32 1, i32* %365
%366 = add nuw nsw i64 %363, 1
%367 = getelementptr inbounds i32, i32* %5, i64 %366
store i32 1, i32* %367
%368 = getelementptr inbounds i32, i32* %2, i64 %366
store i32 1, i32* %368
%369 = add nuw nsw i64 %363, 2
%370 = getelementptr inbounds i32, i32* %5, i64 %369
store i32 1, i32* %370
%371 = getelementptr inbounds i32, i32* %2, i64 %369
store i32 1, i32* %371
%372 = add nuw nsw i64 %363, 3
%373 = getelementptr inbounds i32, i32* %5, i64 %372
store i32 1, i32* %373
%374 = getelementptr inbounds i32, i32* %2, i64 %372
store i32 1, i32* %374
%375 = add nuw nsw i64 %363, 4
%376 = getelementptr inbounds i32, i32* %5, i64 %375
store i32 1, i32* %376
%377 = getelementptr inbounds i32, i32* %2, i64 %375
store i32 1, i32* %377
%378 = add nuw nsw i64 %363, 5
%379 = icmp eq i64 %378, 20000000
br i1 %379, label %380, label %362
380: ; preds = %314, %362
%381 = tail call double (...) @omp_get_wtime()
%382 = getelementptr i32, i32* %2, i64 20000000
%383 = bitcast i32* %382 to i8*
%384 = getelementptr i32, i32* %5, i64 20000000
%385 = bitcast i32* %384 to i8*
%386 = icmp ult i8* %3, %385
%387 = icmp ult i8* %6, %383
%388 = and i1 %386, %387
br i1 %388, label %426, label %389
389: ; preds = %380, %389
%390 = phi i64 [ %424, %389 ], [ 0, %380 ]
%391 = getelementptr inbounds i32, i32* %2, i64 %390
%392 = bitcast i32* %391 to <4 x i32>*
%393 = load <4 x i32>, <4 x i32>* %392
%394 = getelementptr inbounds i32, i32* %391, i64 4
%395 = bitcast i32* %394 to <4 x i32>*
%396 = load <4 x i32>, <4 x i32>* %395
%397 = getelementptr inbounds i32, i32* %5, i64 %390
%398 = bitcast i32* %397 to <4 x i32>*
%399 = load <4 x i32>, <4 x i32>* %398
%400 = getelementptr inbounds i32, i32* %397, i64 4
%401 = bitcast i32* %400 to <4 x i32>*
%402 = load <4 x i32>, <4 x i32>* %401
%403 = add nsw <4 x i32> %399, %393
%404 = add nsw <4 x i32> %402, %396
%405 = bitcast i32* %391 to <4 x i32>*
store <4 x i32> %403, <4 x i32>* %405
%406 = bitcast i32* %394 to <4 x i32>*
store <4 x i32> %404, <4 x i32>* %406
%407 = or i64 %390, 8
%408 = getelementptr inbounds i32, i32* %2, i64 %407
%409 = bitcast i32* %408 to <4 x i32>*
%410 = load <4 x i32>, <4 x i32>* %409
%411 = getelementptr inbounds i32, i32* %408, i64 4
%412 = bitcast i32* %411 to <4 x i32>*
%413 = load <4 x i32>, <4 x i32>* %412
%414 = getelementptr inbounds i32, i32* %5, i64 %407
%415 = bitcast i32* %414 to <4 x i32>*
%416 = load <4 x i32>, <4 x i32>* %415
%417 = getelementptr inbounds i32, i32* %414, i64 4
%418 = bitcast i32* %417 to <4 x i32>*
%419 = load <4 x i32>, <4 x i32>* %418
%420 = add nsw <4 x i32> %416, %410
%421 = add nsw <4 x i32> %419, %413
%422 = bitcast i32* %408 to <4 x i32>*
store <4 x i32> %420, <4 x i32>* %422
%423 = bitcast i32* %411 to <4 x i32>*
store <4 x i32> %421, <4 x i32>* %423
%424 = add nuw nsw i64 %390, 16
%425 = icmp eq i64 %424, 20000000
br i1 %425, label %453, label %389
426: ; preds = %380, %426
%427 = phi i64 [ %451, %426 ], [ 0, %380 ]
%428 = getelementptr inbounds i32, i32* %2, i64 %427
%429 = load i32, i32* %428
%430 = getelementptr inbounds i32, i32* %5, i64 %427
%431 = load i32, i32* %430
%432 = add nsw i32 %431, %429
store i32 %432, i32* %428
%433 = or i64 %427, 1
%434 = getelementptr inbounds i32, i32* %2, i64 %433
%435 = load i32, i32* %434
%436 = getelementptr inbounds i32, i32* %5, i64 %433
%437 = load i32, i32* %436
%438 = add nsw i32 %437, %435
store i32 %438, i32* %434
%439 = or i64 %427, 2
%440 = getelementptr inbounds i32, i32* %2, i64 %439
%441 = load i32, i32* %440
%442 = getelementptr inbounds i32, i32* %5, i64 %439
%443 = load i32, i32* %442
%444 = add nsw i32 %443, %441
store i32 %444, i32* %440
%445 = or i64 %427, 3
%446 = getelementptr inbounds i32, i32* %2, i64 %445
%447 = load i32, i32* %446
%448 = getelementptr inbounds i32, i32* %5, i64 %445
%449 = load i32, i32* %448
%450 = add nsw i32 %449, %447
store i32 %450, i32* %446
%451 = add nuw nsw i64 %427, 4
%452 = icmp eq i64 %451, 20000000
br i1 %452, label %453, label %426
453: ; preds = %389, %426
%454 = tail call double (...) @omp_get_wtime()
%455 = fsub double %454, %381
%456 = tail call i32 @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.2, i64 0, i64 0), i32 20000000, double %455)
ret i32 0
}