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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ abort();
void test_reductions(void) {
  const int n = 10;
  int i;
  int array[n];
  for (i = 0; i < n; i++)
    array[i] = i + 1;
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) copy(res)

#pragma acc loop gang reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_workers(nw) copy(res)

#pragma acc loop worker reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel vector_length(vl) copy(res)

#pragma acc loop vector reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(+ : res)
    for (i = 0; i < n; i++)
      res = res + (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres + (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (1);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(* : res)
    for (i = 0; i < n; i++)
      res = res * (array[i]);
    vres = (1);
    for (i = 0; i < n; i++)
      vres = vres * (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (-1);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(& : res)
    for (i = 0; i < n; i++)
      res = res & (array[i]);
    vres = (-1);
    for (i = 0; i < n; i++)
      vres = vres & (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(| : res)
    for (i = 0; i < n; i++)
      res = res | (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres | (array[i]);
    if (res != vres)
      abort();
  };
  {
    int res, vres;
    res = (0);
#pragma acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(res)

#pragma acc loop gang worker vector reduction(^ : res)
    for (i = 0; i < n; i++)
      res = res ^ (array[i]);
    vres = (0);
    for (i = 0; i < n; i++)
      vres = vres ^ (array[i]);
    if (res != vres)
      abort();
  };
}


x86 assembly (clang, -O0):
<test_reductions>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
movl   $0xa,-0x4(%rbp)
mov    %rsp,%rax
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1159 <test_reductions+0x49>
mov    -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq -0x8(%rbp),%rax
mov    %ecx,-0xe0(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1130 <test_reductions+0x20>
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1190 <test_reductions+0x80>
mov    -0x14(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1167 <test_reductions+0x57>
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    11c7 <test_reductions+0xb7>
mov    -0x18(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    119e <test_reductions+0x8e>
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     11da <test_reductions+0xca>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x1,-0x1c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1212 <test_reductions+0x102>
mov    -0x1c(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11e8 <test_reductions+0xd8>
movl   $0x1,-0x20(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    124a <test_reductions+0x13a>
mov    -0x20(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
ff
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1220 <test_reductions+0x110>
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
je     125d <test_reductions+0x14d>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0xffffffff,-0x24(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1294 <test_reductions+0x184>
mov    -0x24(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    126b <test_reductions+0x15b>
movl   $0xffffffff,-0x28(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    12cb <test_reductions+0x1bb>
mov    -0x28(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12a2 <test_reductions+0x192>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     12de <test_reductions+0x1ce>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1315 <test_reductions+0x205>
mov    -0x2c(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12ec <test_reductions+0x1dc>
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    134c <test_reductions+0x23c>
mov    -0x30(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1323 <test_reductions+0x213>
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
je     135f <test_reductions+0x24f>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1396 <test_reductions+0x286>
mov    -0x34(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    136d <test_reductions+0x25d>
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    13cd <test_reductions+0x2bd>
mov    -0x38(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13a4 <test_reductions+0x294>
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
je     13e0 <test_reductions+0x2d0>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1417 <test_reductions+0x307>
mov    -0x3c(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13ee <test_reductions+0x2de>
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    144e <test_reductions+0x33e>
mov    -0x40(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1425 <test_reductions+0x315>
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
je     1461 <test_reductions+0x351>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x1,-0x44(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1499 <test_reductions+0x389>
mov    -0x44(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
ff
mov    %eax,-0x44(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    146f <test_reductions+0x35f>
movl   $0x1,-0x48(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    14d1 <test_reductions+0x3c1>
mov    -0x48(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
ff
mov    %eax,-0x48(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14a7 <test_reductions+0x397>
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
je     14e4 <test_reductions+0x3d4>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0xffffffff,-0x4c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    151b <test_reductions+0x40b>
mov    -0x4c(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14f2 <test_reductions+0x3e2>
movl   $0xffffffff,-0x50(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1552 <test_reductions+0x442>
mov    -0x50(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1529 <test_reductions+0x419>
mov    -0x4c(%rbp),%eax
cmp    -0x50(%rbp),%eax
je     1565 <test_reductions+0x455>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x54(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    159c <test_reductions+0x48c>
mov    -0x54(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x54(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1573 <test_reductions+0x463>
movl   $0x0,-0x58(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    15d3 <test_reductions+0x4c3>
mov    -0x58(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x58(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    15aa <test_reductions+0x49a>
mov    -0x54(%rbp),%eax
cmp    -0x58(%rbp),%eax
je     15e6 <test_reductions+0x4d6>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x5c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    161d <test_reductions+0x50d>
mov    -0x5c(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    15f4 <test_reductions+0x4e4>
movl   $0x0,-0x60(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1654 <test_reductions+0x544>
mov    -0x60(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x60(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    162b <test_reductions+0x51b>
mov    -0x5c(%rbp),%eax
cmp    -0x60(%rbp),%eax
je     1667 <test_reductions+0x557>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    169e <test_reductions+0x58e>
mov    -0x64(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x64(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1675 <test_reductions+0x565>
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    16d5 <test_reductions+0x5c5>
mov    -0x68(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x68(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    16ac <test_reductions+0x59c>
mov    -0x64(%rbp),%eax
cmp    -0x68(%rbp),%eax
je     16e8 <test_reductions+0x5d8>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x1,-0x6c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1720 <test_reductions+0x610>
mov    -0x6c(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
ff
mov    %eax,-0x6c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    16f6 <test_reductions+0x5e6>
movl   $0x1,-0x70(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1758 <test_reductions+0x648>
mov    -0x70(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
ff
mov    %eax,-0x70(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    172e <test_reductions+0x61e>
mov    -0x6c(%rbp),%eax
cmp    -0x70(%rbp),%eax
je     176b <test_reductions+0x65b>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0xffffffff,-0x74(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    17a2 <test_reductions+0x692>
mov    -0x74(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x74(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1779 <test_reductions+0x669>
movl   $0xffffffff,-0x78(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    17d9 <test_reductions+0x6c9>
mov    -0x78(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x78(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    17b0 <test_reductions+0x6a0>
mov    -0x74(%rbp),%eax
cmp    -0x78(%rbp),%eax
je     17ec <test_reductions+0x6dc>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x7c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1823 <test_reductions+0x713>
mov    -0x7c(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    17fa <test_reductions+0x6ea>
movl   $0x0,-0x80(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    185a <test_reductions+0x74a>
mov    -0x80(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x80(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1831 <test_reductions+0x721>
mov    -0x7c(%rbp),%eax
cmp    -0x80(%rbp),%eax
je     186d <test_reductions+0x75d>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x84(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    18ad <test_reductions+0x79d>
mov    -0x84(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x84(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    187e <test_reductions+0x76e>
movl   $0x0,-0x88(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    18ed <test_reductions+0x7dd>
mov    -0x88(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x88(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    18be <test_reductions+0x7ae>
mov    -0x84(%rbp),%eax
cmp    -0x88(%rbp),%eax
je     1906 <test_reductions+0x7f6>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x8c(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1946 <test_reductions+0x836>
mov    -0x8c(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1917 <test_reductions+0x807>
movl   $0x0,-0x90(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1986 <test_reductions+0x876>
mov    -0x90(%rbp),%eax
movslq -0x8(%rbp),%rcx
add    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x90(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1957 <test_reductions+0x847>
mov    -0x8c(%rbp),%eax
cmp    -0x90(%rbp),%eax
je     199f <test_reductions+0x88f>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x1,-0x94(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    19e0 <test_reductions+0x8d0>
mov    -0x94(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
ff
mov    %eax,-0x94(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    19b0 <test_reductions+0x8a0>
movl   $0x1,-0x98(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1a21 <test_reductions+0x911>
mov    -0x98(%rbp),%eax
movslq -0x8(%rbp),%rcx
imul   -0xe0(%rbp,%rcx,4),%eax
ff
mov    %eax,-0x98(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    19f1 <test_reductions+0x8e1>
mov    -0x94(%rbp),%eax
cmp    -0x98(%rbp),%eax
je     1a3a <test_reductions+0x92a>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0xffffffff,-0x9c(%rbp)
ff ff ff
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1a7a <test_reductions+0x96a>
mov    -0x9c(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1a4b <test_reductions+0x93b>
movl   $0xffffffff,-0xa0(%rbp)
ff ff ff
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1aba <test_reductions+0x9aa>
mov    -0xa0(%rbp),%eax
movslq -0x8(%rbp),%rcx
and    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0xa0(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1a8b <test_reductions+0x97b>
mov    -0x9c(%rbp),%eax
cmp    -0xa0(%rbp),%eax
je     1ad3 <test_reductions+0x9c3>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0xa4(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1b13 <test_reductions+0xa03>
mov    -0xa4(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0xa4(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1ae4 <test_reductions+0x9d4>
movl   $0x0,-0xa8(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1b53 <test_reductions+0xa43>
mov    -0xa8(%rbp),%eax
movslq -0x8(%rbp),%rcx
or     -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0xa8(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1b24 <test_reductions+0xa14>
mov    -0xa4(%rbp),%eax
cmp    -0xa8(%rbp),%eax
je     1b6c <test_reductions+0xa5c>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0xac(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1bac <test_reductions+0xa9c>
mov    -0xac(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0xac(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1b7d <test_reductions+0xa6d>
movl   $0x0,-0xb0(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    1bec <test_reductions+0xadc>
mov    -0xb0(%rbp),%eax
movslq -0x8(%rbp),%rcx
xor    -0xe0(%rbp,%rcx,4),%eax
mov    %eax,-0xb0(%rbp)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1bbd <test_reductions+0xaad>
mov    -0xac(%rbp),%eax
cmp    -0xb0(%rbp),%eax
je     1c05 <test_reductions+0xaf5>
mov    $0x0,%al
call   1030 <abort@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rsp
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_reductions>:
ret

LLVM IR (-O0):
define void @test_reductions() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%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 i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
store i32 10, i32* %1
%44 = call i8* @llvm.stacksave()
store i8* %44, i8** %3
%45 = alloca i32, i64 10
store i32 0, i32* %2
br label %46
46: ; preds = %55, %0
%47 = load i32, i32* %2
%48 = icmp slt i32 %47, 10
br i1 %48, label %49, label %58
49: ; preds = %46
%50 = load i32, i32* %2
%51 = add nsw i32 %50, 1
%52 = load i32, i32* %2
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i32, i32* %45, i64 %53
store i32 %51, i32* %54
br label %55
55: ; preds = %49
%56 = load i32, i32* %2
%57 = add nsw i32 %56, 1
store i32 %57, i32* %2
br label %46
58: ; preds = %46
store i32 0, i32* %4
store i32 0, i32* %2
br label %59
59: ; preds = %69, %58
%60 = load i32, i32* %2
%61 = icmp slt i32 %60, 10
br i1 %61, label %62, label %72
62: ; preds = %59
%63 = load i32, i32* %4
%64 = load i32, i32* %2
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i32, i32* %45, i64 %65
%67 = load i32, i32* %66
%68 = add nsw i32 %63, %67
store i32 %68, i32* %4
br label %69
69: ; preds = %62
%70 = load i32, i32* %2
%71 = add nsw i32 %70, 1
store i32 %71, i32* %2
br label %59
72: ; preds = %59
store i32 0, i32* %5
store i32 0, i32* %2
br label %73
73: ; preds = %83, %72
%74 = load i32, i32* %2
%75 = icmp slt i32 %74, 10
br i1 %75, label %76, label %86
76: ; preds = %73
%77 = load i32, i32* %5
%78 = load i32, i32* %2
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i32, i32* %45, i64 %79
%81 = load i32, i32* %80
%82 = add nsw i32 %77, %81
store i32 %82, i32* %5
br label %83
83: ; preds = %76
%84 = load i32, i32* %2
%85 = add nsw i32 %84, 1
store i32 %85, i32* %2
br label %73
86: ; preds = %73
%87 = load i32, i32* %4
%88 = load i32, i32* %5
%89 = icmp ne i32 %87, %88
br i1 %89, label %90, label %92
90: ; preds = %86
%91 = call i32 (...) @abort()
unreachable
92: ; preds = %86
store i32 1, i32* %6
store i32 0, i32* %2
br label %93
93: ; preds = %103, %92
%94 = load i32, i32* %2
%95 = icmp slt i32 %94, 10
br i1 %95, label %96, label %106
96: ; preds = %93
%97 = load i32, i32* %6
%98 = load i32, i32* %2
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i32, i32* %45, i64 %99
%101 = load i32, i32* %100
%102 = mul nsw i32 %97, %101
store i32 %102, i32* %6
br label %103
103: ; preds = %96
%104 = load i32, i32* %2
%105 = add nsw i32 %104, 1
store i32 %105, i32* %2
br label %93
106: ; preds = %93
store i32 1, i32* %7
store i32 0, i32* %2
br label %107
107: ; preds = %117, %106
%108 = load i32, i32* %2
%109 = icmp slt i32 %108, 10
br i1 %109, label %110, label %120
110: ; preds = %107
%111 = load i32, i32* %7
%112 = load i32, i32* %2
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i32, i32* %45, i64 %113
%115 = load i32, i32* %114
%116 = mul nsw i32 %111, %115
store i32 %116, i32* %7
br label %117
117: ; preds = %110
%118 = load i32, i32* %2
%119 = add nsw i32 %118, 1
store i32 %119, i32* %2
br label %107
120: ; preds = %107
%121 = load i32, i32* %6
%122 = load i32, i32* %7
%123 = icmp ne i32 %121, %122
br i1 %123, label %124, label %126
124: ; preds = %120
%125 = call i32 (...) @abort()
unreachable
126: ; preds = %120
store i32 -1, i32* %8
store i32 0, i32* %2
br label %127
127: ; preds = %137, %126
%128 = load i32, i32* %2
%129 = icmp slt i32 %128, 10
br i1 %129, label %130, label %140
130: ; preds = %127
%131 = load i32, i32* %8
%132 = load i32, i32* %2
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i32, i32* %45, i64 %133
%135 = load i32, i32* %134
%136 = and i32 %131, %135
store i32 %136, i32* %8
br label %137
137: ; preds = %130
%138 = load i32, i32* %2
%139 = add nsw i32 %138, 1
store i32 %139, i32* %2
br label %127
140: ; preds = %127
store i32 -1, i32* %9
store i32 0, i32* %2
br label %141
141: ; preds = %151, %140
%142 = load i32, i32* %2
%143 = icmp slt i32 %142, 10
br i1 %143, label %144, label %154
144: ; preds = %141
%145 = load i32, i32* %9
%146 = load i32, i32* %2
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i32, i32* %45, i64 %147
%149 = load i32, i32* %148
%150 = and i32 %145, %149
store i32 %150, i32* %9
br label %151
151: ; preds = %144
%152 = load i32, i32* %2
%153 = add nsw i32 %152, 1
store i32 %153, i32* %2
br label %141
154: ; preds = %141
%155 = load i32, i32* %8
%156 = load i32, i32* %9
%157 = icmp ne i32 %155, %156
br i1 %157, label %158, label %160
158: ; preds = %154
%159 = call i32 (...) @abort()
unreachable
160: ; preds = %154
store i32 0, i32* %10
store i32 0, i32* %2
br label %161
161: ; preds = %171, %160
%162 = load i32, i32* %2
%163 = icmp slt i32 %162, 10
br i1 %163, label %164, label %174
164: ; preds = %161
%165 = load i32, i32* %10
%166 = load i32, i32* %2
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds i32, i32* %45, i64 %167
%169 = load i32, i32* %168
%170 = or i32 %165, %169
store i32 %170, i32* %10
br label %171
171: ; preds = %164
%172 = load i32, i32* %2
%173 = add nsw i32 %172, 1
store i32 %173, i32* %2
br label %161
174: ; preds = %161
store i32 0, i32* %11
store i32 0, i32* %2
br label %175
175: ; preds = %185, %174
%176 = load i32, i32* %2
%177 = icmp slt i32 %176, 10
br i1 %177, label %178, label %188
178: ; preds = %175
%179 = load i32, i32* %11
%180 = load i32, i32* %2
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds i32, i32* %45, i64 %181
%183 = load i32, i32* %182
%184 = or i32 %179, %183
store i32 %184, i32* %11
br label %185
185: ; preds = %178
%186 = load i32, i32* %2
%187 = add nsw i32 %186, 1
store i32 %187, i32* %2
br label %175
188: ; preds = %175
%189 = load i32, i32* %10
%190 = load i32, i32* %11
%191 = icmp ne i32 %189, %190
br i1 %191, label %192, label %194
192: ; preds = %188
%193 = call i32 (...) @abort()
unreachable
194: ; preds = %188
store i32 0, i32* %12
store i32 0, i32* %2
br label %195
195: ; preds = %205, %194
%196 = load i32, i32* %2
%197 = icmp slt i32 %196, 10
br i1 %197, label %198, label %208
198: ; preds = %195
%199 = load i32, i32* %12
%200 = load i32, i32* %2
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds i32, i32* %45, i64 %201
%203 = load i32, i32* %202
%204 = xor i32 %199, %203
store i32 %204, i32* %12
br label %205
205: ; preds = %198
%206 = load i32, i32* %2
%207 = add nsw i32 %206, 1
store i32 %207, i32* %2
br label %195
208: ; preds = %195
store i32 0, i32* %13
store i32 0, i32* %2
br label %209
209: ; preds = %219, %208
%210 = load i32, i32* %2
%211 = icmp slt i32 %210, 10
br i1 %211, label %212, label %222
212: ; preds = %209
%213 = load i32, i32* %13
%214 = load i32, i32* %2
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds i32, i32* %45, i64 %215
%217 = load i32, i32* %216
%218 = xor i32 %213, %217
store i32 %218, i32* %13
br label %219
219: ; preds = %212
%220 = load i32, i32* %2
%221 = add nsw i32 %220, 1
store i32 %221, i32* %2
br label %209
222: ; preds = %209
%223 = load i32, i32* %12
%224 = load i32, i32* %13
%225 = icmp ne i32 %223, %224
br i1 %225, label %226, label %228
226: ; preds = %222
%227 = call i32 (...) @abort()
unreachable
228: ; preds = %222
store i32 0, i32* %14
store i32 0, i32* %2
br label %229
229: ; preds = %239, %228
%230 = load i32, i32* %2
%231 = icmp slt i32 %230, 10
br i1 %231, label %232, label %242
232: ; preds = %229
%233 = load i32, i32* %14
%234 = load i32, i32* %2
%235 = sext i32 %234 to i64
%236 = getelementptr inbounds i32, i32* %45, i64 %235
%237 = load i32, i32* %236
%238 = add nsw i32 %233, %237
store i32 %238, i32* %14
br label %239
239: ; preds = %232
%240 = load i32, i32* %2
%241 = add nsw i32 %240, 1
store i32 %241, i32* %2
br label %229
242: ; preds = %229
store i32 0, i32* %15
store i32 0, i32* %2
br label %243
243: ; preds = %253, %242
%244 = load i32, i32* %2
%245 = icmp slt i32 %244, 10
br i1 %245, label %246, label %256
246: ; preds = %243
%247 = load i32, i32* %15
%248 = load i32, i32* %2
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds i32, i32* %45, i64 %249
%251 = load i32, i32* %250
%252 = add nsw i32 %247, %251
store i32 %252, i32* %15
br label %253
253: ; preds = %246
%254 = load i32, i32* %2
%255 = add nsw i32 %254, 1
store i32 %255, i32* %2
br label %243
256: ; preds = %243
%257 = load i32, i32* %14
%258 = load i32, i32* %15
%259 = icmp ne i32 %257, %258
br i1 %259, label %260, label %262
260: ; preds = %256
%261 = call i32 (...) @abort()
unreachable
262: ; preds = %256
store i32 1, i32* %16
store i32 0, i32* %2
br label %263
263: ; preds = %273, %262
%264 = load i32, i32* %2
%265 = icmp slt i32 %264, 10
br i1 %265, label %266, label %276
266: ; preds = %263
%267 = load i32, i32* %16
%268 = load i32, i32* %2
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds i32, i32* %45, i64 %269
%271 = load i32, i32* %270
%272 = mul nsw i32 %267, %271
store i32 %272, i32* %16
br label %273
273: ; preds = %266
%274 = load i32, i32* %2
%275 = add nsw i32 %274, 1
store i32 %275, i32* %2
br label %263
276: ; preds = %263
store i32 1, i32* %17
store i32 0, i32* %2
br label %277
277: ; preds = %287, %276
%278 = load i32, i32* %2
%279 = icmp slt i32 %278, 10
br i1 %279, label %280, label %290
280: ; preds = %277
%281 = load i32, i32* %17
%282 = load i32, i32* %2
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds i32, i32* %45, i64 %283
%285 = load i32, i32* %284
%286 = mul nsw i32 %281, %285
store i32 %286, i32* %17
br label %287
287: ; preds = %280
%288 = load i32, i32* %2
%289 = add nsw i32 %288, 1
store i32 %289, i32* %2
br label %277
290: ; preds = %277
%291 = load i32, i32* %16
%292 = load i32, i32* %17
%293 = icmp ne i32 %291, %292
br i1 %293, label %294, label %296
294: ; preds = %290
%295 = call i32 (...) @abort()
unreachable
296: ; preds = %290
store i32 -1, i32* %18
store i32 0, i32* %2
br label %297
297: ; preds = %307, %296
%298 = load i32, i32* %2
%299 = icmp slt i32 %298, 10
br i1 %299, label %300, label %310
300: ; preds = %297
%301 = load i32, i32* %18
%302 = load i32, i32* %2
%303 = sext i32 %302 to i64
%304 = getelementptr inbounds i32, i32* %45, i64 %303
%305 = load i32, i32* %304
%306 = and i32 %301, %305
store i32 %306, i32* %18
br label %307
307: ; preds = %300
%308 = load i32, i32* %2
%309 = add nsw i32 %308, 1
store i32 %309, i32* %2
br label %297
310: ; preds = %297
store i32 -1, i32* %19
store i32 0, i32* %2
br label %311
311: ; preds = %321, %310
%312 = load i32, i32* %2
%313 = icmp slt i32 %312, 10
br i1 %313, label %314, label %324
314: ; preds = %311
%315 = load i32, i32* %19
%316 = load i32, i32* %2
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds i32, i32* %45, i64 %317
%319 = load i32, i32* %318
%320 = and i32 %315, %319
store i32 %320, i32* %19
br label %321
321: ; preds = %314
%322 = load i32, i32* %2
%323 = add nsw i32 %322, 1
store i32 %323, i32* %2
br label %311
324: ; preds = %311
%325 = load i32, i32* %18
%326 = load i32, i32* %19
%327 = icmp ne i32 %325, %326
br i1 %327, label %328, label %330
328: ; preds = %324
%329 = call i32 (...) @abort()
unreachable
330: ; preds = %324
store i32 0, i32* %20
store i32 0, i32* %2
br label %331
331: ; preds = %341, %330
%332 = load i32, i32* %2
%333 = icmp slt i32 %332, 10
br i1 %333, label %334, label %344
334: ; preds = %331
%335 = load i32, i32* %20
%336 = load i32, i32* %2
%337 = sext i32 %336 to i64
%338 = getelementptr inbounds i32, i32* %45, i64 %337
%339 = load i32, i32* %338
%340 = or i32 %335, %339
store i32 %340, i32* %20
br label %341
341: ; preds = %334
%342 = load i32, i32* %2
%343 = add nsw i32 %342, 1
store i32 %343, i32* %2
br label %331
344: ; preds = %331
store i32 0, i32* %21
store i32 0, i32* %2
br label %345
345: ; preds = %355, %344
%346 = load i32, i32* %2
%347 = icmp slt i32 %346, 10
br i1 %347, label %348, label %358
348: ; preds = %345
%349 = load i32, i32* %21
%350 = load i32, i32* %2
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds i32, i32* %45, i64 %351
%353 = load i32, i32* %352
%354 = or i32 %349, %353
store i32 %354, i32* %21
br label %355
355: ; preds = %348
%356 = load i32, i32* %2
%357 = add nsw i32 %356, 1
store i32 %357, i32* %2
br label %345
358: ; preds = %345
%359 = load i32, i32* %20
%360 = load i32, i32* %21
%361 = icmp ne i32 %359, %360
br i1 %361, label %362, label %364
362: ; preds = %358
%363 = call i32 (...) @abort()
unreachable
364: ; preds = %358
store i32 0, i32* %22
store i32 0, i32* %2
br label %365
365: ; preds = %375, %364
%366 = load i32, i32* %2
%367 = icmp slt i32 %366, 10
br i1 %367, label %368, label %378
368: ; preds = %365
%369 = load i32, i32* %22
%370 = load i32, i32* %2
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds i32, i32* %45, i64 %371
%373 = load i32, i32* %372
%374 = xor i32 %369, %373
store i32 %374, i32* %22
br label %375
375: ; preds = %368
%376 = load i32, i32* %2
%377 = add nsw i32 %376, 1
store i32 %377, i32* %2
br label %365
378: ; preds = %365
store i32 0, i32* %23
store i32 0, i32* %2
br label %379
379: ; preds = %389, %378
%380 = load i32, i32* %2
%381 = icmp slt i32 %380, 10
br i1 %381, label %382, label %392
382: ; preds = %379
%383 = load i32, i32* %23
%384 = load i32, i32* %2
%385 = sext i32 %384 to i64
%386 = getelementptr inbounds i32, i32* %45, i64 %385
%387 = load i32, i32* %386
%388 = xor i32 %383, %387
store i32 %388, i32* %23
br label %389
389: ; preds = %382
%390 = load i32, i32* %2
%391 = add nsw i32 %390, 1
store i32 %391, i32* %2
br label %379
392: ; preds = %379
%393 = load i32, i32* %22
%394 = load i32, i32* %23
%395 = icmp ne i32 %393, %394
br i1 %395, label %396, label %398
396: ; preds = %392
%397 = call i32 (...) @abort()
unreachable
398: ; preds = %392
store i32 0, i32* %24
store i32 0, i32* %2
br label %399
399: ; preds = %409, %398
%400 = load i32, i32* %2
%401 = icmp slt i32 %400, 10
br i1 %401, label %402, label %412
402: ; preds = %399
%403 = load i32, i32* %24
%404 = load i32, i32* %2
%405 = sext i32 %404 to i64
%406 = getelementptr inbounds i32, i32* %45, i64 %405
%407 = load i32, i32* %406
%408 = add nsw i32 %403, %407
store i32 %408, i32* %24
br label %409
409: ; preds = %402
%410 = load i32, i32* %2
%411 = add nsw i32 %410, 1
store i32 %411, i32* %2
br label %399
412: ; preds = %399
store i32 0, i32* %25
store i32 0, i32* %2
br label %413
413: ; preds = %423, %412
%414 = load i32, i32* %2
%415 = icmp slt i32 %414, 10
br i1 %415, label %416, label %426
416: ; preds = %413
%417 = load i32, i32* %25
%418 = load i32, i32* %2
%419 = sext i32 %418 to i64
%420 = getelementptr inbounds i32, i32* %45, i64 %419
%421 = load i32, i32* %420
%422 = add nsw i32 %417, %421
store i32 %422, i32* %25
br label %423
423: ; preds = %416
%424 = load i32, i32* %2
%425 = add nsw i32 %424, 1
store i32 %425, i32* %2
br label %413
426: ; preds = %413
%427 = load i32, i32* %24
%428 = load i32, i32* %25
%429 = icmp ne i32 %427, %428
br i1 %429, label %430, label %432
430: ; preds = %426
%431 = call i32 (...) @abort()
unreachable
432: ; preds = %426
store i32 1, i32* %26
store i32 0, i32* %2
br label %433
433: ; preds = %443, %432
%434 = load i32, i32* %2
%435 = icmp slt i32 %434, 10
br i1 %435, label %436, label %446
436: ; preds = %433
%437 = load i32, i32* %26
%438 = load i32, i32* %2
%439 = sext i32 %438 to i64
%440 = getelementptr inbounds i32, i32* %45, i64 %439
%441 = load i32, i32* %440
%442 = mul nsw i32 %437, %441
store i32 %442, i32* %26
br label %443
443: ; preds = %436
%444 = load i32, i32* %2
%445 = add nsw i32 %444, 1
store i32 %445, i32* %2
br label %433
446: ; preds = %433
store i32 1, i32* %27
store i32 0, i32* %2
br label %447
447: ; preds = %457, %446
%448 = load i32, i32* %2
%449 = icmp slt i32 %448, 10
br i1 %449, label %450, label %460
450: ; preds = %447
%451 = load i32, i32* %27
%452 = load i32, i32* %2
%453 = sext i32 %452 to i64
%454 = getelementptr inbounds i32, i32* %45, i64 %453
%455 = load i32, i32* %454
%456 = mul nsw i32 %451, %455
store i32 %456, i32* %27
br label %457
457: ; preds = %450
%458 = load i32, i32* %2
%459 = add nsw i32 %458, 1
store i32 %459, i32* %2
br label %447
460: ; preds = %447
%461 = load i32, i32* %26
%462 = load i32, i32* %27
%463 = icmp ne i32 %461, %462
br i1 %463, label %464, label %466
464: ; preds = %460
%465 = call i32 (...) @abort()
unreachable
466: ; preds = %460
store i32 -1, i32* %28
store i32 0, i32* %2
br label %467
467: ; preds = %477, %466
%468 = load i32, i32* %2
%469 = icmp slt i32 %468, 10
br i1 %469, label %470, label %480
470: ; preds = %467
%471 = load i32, i32* %28
%472 = load i32, i32* %2
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds i32, i32* %45, i64 %473
%475 = load i32, i32* %474
%476 = and i32 %471, %475
store i32 %476, i32* %28
br label %477
477: ; preds = %470
%478 = load i32, i32* %2
%479 = add nsw i32 %478, 1
store i32 %479, i32* %2
br label %467
480: ; preds = %467
store i32 -1, i32* %29
store i32 0, i32* %2
br label %481
481: ; preds = %491, %480
%482 = load i32, i32* %2
%483 = icmp slt i32 %482, 10
br i1 %483, label %484, label %494
484: ; preds = %481
%485 = load i32, i32* %29
%486 = load i32, i32* %2
%487 = sext i32 %486 to i64
%488 = getelementptr inbounds i32, i32* %45, i64 %487
%489 = load i32, i32* %488
%490 = and i32 %485, %489
store i32 %490, i32* %29
br label %491
491: ; preds = %484
%492 = load i32, i32* %2
%493 = add nsw i32 %492, 1
store i32 %493, i32* %2
br label %481
494: ; preds = %481
%495 = load i32, i32* %28
%496 = load i32, i32* %29
%497 = icmp ne i32 %495, %496
br i1 %497, label %498, label %500
498: ; preds = %494
%499 = call i32 (...) @abort()
unreachable
500: ; preds = %494
store i32 0, i32* %30
store i32 0, i32* %2
br label %501
501: ; preds = %511, %500
%502 = load i32, i32* %2
%503 = icmp slt i32 %502, 10
br i1 %503, label %504, label %514
504: ; preds = %501
%505 = load i32, i32* %30
%506 = load i32, i32* %2
%507 = sext i32 %506 to i64
%508 = getelementptr inbounds i32, i32* %45, i64 %507
%509 = load i32, i32* %508
%510 = or i32 %505, %509
store i32 %510, i32* %30
br label %511
511: ; preds = %504
%512 = load i32, i32* %2
%513 = add nsw i32 %512, 1
store i32 %513, i32* %2
br label %501
514: ; preds = %501
store i32 0, i32* %31
store i32 0, i32* %2
br label %515
515: ; preds = %525, %514
%516 = load i32, i32* %2
%517 = icmp slt i32 %516, 10
br i1 %517, label %518, label %528
518: ; preds = %515
%519 = load i32, i32* %31
%520 = load i32, i32* %2
%521 = sext i32 %520 to i64
%522 = getelementptr inbounds i32, i32* %45, i64 %521
%523 = load i32, i32* %522
%524 = or i32 %519, %523
store i32 %524, i32* %31
br label %525
525: ; preds = %518
%526 = load i32, i32* %2
%527 = add nsw i32 %526, 1
store i32 %527, i32* %2
br label %515
528: ; preds = %515
%529 = load i32, i32* %30
%530 = load i32, i32* %31
%531 = icmp ne i32 %529, %530
br i1 %531, label %532, label %534
532: ; preds = %528
%533 = call i32 (...) @abort()
unreachable
534: ; preds = %528
store i32 0, i32* %32
store i32 0, i32* %2
br label %535
535: ; preds = %545, %534
%536 = load i32, i32* %2
%537 = icmp slt i32 %536, 10
br i1 %537, label %538, label %548
538: ; preds = %535
%539 = load i32, i32* %32
%540 = load i32, i32* %2
%541 = sext i32 %540 to i64
%542 = getelementptr inbounds i32, i32* %45, i64 %541
%543 = load i32, i32* %542
%544 = xor i32 %539, %543
store i32 %544, i32* %32
br label %545
545: ; preds = %538
%546 = load i32, i32* %2
%547 = add nsw i32 %546, 1
store i32 %547, i32* %2
br label %535
548: ; preds = %535
store i32 0, i32* %33
store i32 0, i32* %2
br label %549
549: ; preds = %559, %548
%550 = load i32, i32* %2
%551 = icmp slt i32 %550, 10
br i1 %551, label %552, label %562
552: ; preds = %549
%553 = load i32, i32* %33
%554 = load i32, i32* %2
%555 = sext i32 %554 to i64
%556 = getelementptr inbounds i32, i32* %45, i64 %555
%557 = load i32, i32* %556
%558 = xor i32 %553, %557
store i32 %558, i32* %33
br label %559
559: ; preds = %552
%560 = load i32, i32* %2
%561 = add nsw i32 %560, 1
store i32 %561, i32* %2
br label %549
562: ; preds = %549
%563 = load i32, i32* %32
%564 = load i32, i32* %33
%565 = icmp ne i32 %563, %564
br i1 %565, label %566, label %568
566: ; preds = %562
%567 = call i32 (...) @abort()
unreachable
568: ; preds = %562
store i32 0, i32* %34
store i32 0, i32* %2
br label %569
569: ; preds = %579, %568
%570 = load i32, i32* %2
%571 = icmp slt i32 %570, 10
br i1 %571, label %572, label %582
572: ; preds = %569
%573 = load i32, i32* %34
%574 = load i32, i32* %2
%575 = sext i32 %574 to i64
%576 = getelementptr inbounds i32, i32* %45, i64 %575
%577 = load i32, i32* %576
%578 = add nsw i32 %573, %577
store i32 %578, i32* %34
br label %579
579: ; preds = %572
%580 = load i32, i32* %2
%581 = add nsw i32 %580, 1
store i32 %581, i32* %2
br label %569
582: ; preds = %569
store i32 0, i32* %35
store i32 0, i32* %2
br label %583
583: ; preds = %593, %582
%584 = load i32, i32* %2
%585 = icmp slt i32 %584, 10
br i1 %585, label %586, label %596
586: ; preds = %583
%587 = load i32, i32* %35
%588 = load i32, i32* %2
%589 = sext i32 %588 to i64
%590 = getelementptr inbounds i32, i32* %45, i64 %589
%591 = load i32, i32* %590
%592 = add nsw i32 %587, %591
store i32 %592, i32* %35
br label %593
593: ; preds = %586
%594 = load i32, i32* %2
%595 = add nsw i32 %594, 1
store i32 %595, i32* %2
br label %583
596: ; preds = %583
%597 = load i32, i32* %34
%598 = load i32, i32* %35
%599 = icmp ne i32 %597, %598
br i1 %599, label %600, label %602
600: ; preds = %596
%601 = call i32 (...) @abort()
unreachable
602: ; preds = %596
store i32 1, i32* %36
store i32 0, i32* %2
br label %603
603: ; preds = %613, %602
%604 = load i32, i32* %2
%605 = icmp slt i32 %604, 10
br i1 %605, label %606, label %616
606: ; preds = %603
%607 = load i32, i32* %36
%608 = load i32, i32* %2
%609 = sext i32 %608 to i64
%610 = getelementptr inbounds i32, i32* %45, i64 %609
%611 = load i32, i32* %610
%612 = mul nsw i32 %607, %611
store i32 %612, i32* %36
br label %613
613: ; preds = %606
%614 = load i32, i32* %2
%615 = add nsw i32 %614, 1
store i32 %615, i32* %2
br label %603
616: ; preds = %603
store i32 1, i32* %37
store i32 0, i32* %2
br label %617
617: ; preds = %627, %616
%618 = load i32, i32* %2
%619 = icmp slt i32 %618, 10
br i1 %619, label %620, label %630
620: ; preds = %617
%621 = load i32, i32* %37
%622 = load i32, i32* %2
%623 = sext i32 %622 to i64
%624 = getelementptr inbounds i32, i32* %45, i64 %623
%625 = load i32, i32* %624
%626 = mul nsw i32 %621, %625
store i32 %626, i32* %37
br label %627
627: ; preds = %620
%628 = load i32, i32* %2
%629 = add nsw i32 %628, 1
store i32 %629, i32* %2
br label %617
630: ; preds = %617
%631 = load i32, i32* %36
%632 = load i32, i32* %37
%633 = icmp ne i32 %631, %632
br i1 %633, label %634, label %636
634: ; preds = %630
%635 = call i32 (...) @abort()
unreachable
636: ; preds = %630
store i32 -1, i32* %38
store i32 0, i32* %2
br label %637
637: ; preds = %647, %636
%638 = load i32, i32* %2
%639 = icmp slt i32 %638, 10
br i1 %639, label %640, label %650
640: ; preds = %637
%641 = load i32, i32* %38
%642 = load i32, i32* %2
%643 = sext i32 %642 to i64
%644 = getelementptr inbounds i32, i32* %45, i64 %643
%645 = load i32, i32* %644
%646 = and i32 %641, %645
store i32 %646, i32* %38
br label %647
647: ; preds = %640
%648 = load i32, i32* %2
%649 = add nsw i32 %648, 1
store i32 %649, i32* %2
br label %637
650: ; preds = %637
store i32 -1, i32* %39
store i32 0, i32* %2
br label %651
651: ; preds = %661, %650
%652 = load i32, i32* %2
%653 = icmp slt i32 %652, 10
br i1 %653, label %654, label %664
654: ; preds = %651
%655 = load i32, i32* %39
%656 = load i32, i32* %2
%657 = sext i32 %656 to i64
%658 = getelementptr inbounds i32, i32* %45, i64 %657
%659 = load i32, i32* %658
%660 = and i32 %655, %659
store i32 %660, i32* %39
br label %661
661: ; preds = %654
%662 = load i32, i32* %2
%663 = add nsw i32 %662, 1
store i32 %663, i32* %2
br label %651
664: ; preds = %651
%665 = load i32, i32* %38
%666 = load i32, i32* %39
%667 = icmp ne i32 %665, %666
br i1 %667, label %668, label %670
668: ; preds = %664
%669 = call i32 (...) @abort()
unreachable
670: ; preds = %664
store i32 0, i32* %40
store i32 0, i32* %2
br label %671
671: ; preds = %681, %670
%672 = load i32, i32* %2
%673 = icmp slt i32 %672, 10
br i1 %673, label %674, label %684
674: ; preds = %671
%675 = load i32, i32* %40
%676 = load i32, i32* %2
%677 = sext i32 %676 to i64
%678 = getelementptr inbounds i32, i32* %45, i64 %677
%679 = load i32, i32* %678
%680 = or i32 %675, %679
store i32 %680, i32* %40
br label %681
681: ; preds = %674
%682 = load i32, i32* %2
%683 = add nsw i32 %682, 1
store i32 %683, i32* %2
br label %671
684: ; preds = %671
store i32 0, i32* %41
store i32 0, i32* %2
br label %685
685: ; preds = %695, %684
%686 = load i32, i32* %2
%687 = icmp slt i32 %686, 10
br i1 %687, label %688, label %698
688: ; preds = %685
%689 = load i32, i32* %41
%690 = load i32, i32* %2
%691 = sext i32 %690 to i64
%692 = getelementptr inbounds i32, i32* %45, i64 %691
%693 = load i32, i32* %692
%694 = or i32 %689, %693
store i32 %694, i32* %41
br label %695
695: ; preds = %688
%696 = load i32, i32* %2
%697 = add nsw i32 %696, 1
store i32 %697, i32* %2
br label %685
698: ; preds = %685
%699 = load i32, i32* %40
%700 = load i32, i32* %41
%701 = icmp ne i32 %699, %700
br i1 %701, label %702, label %704
702: ; preds = %698
%703 = call i32 (...) @abort()
unreachable
704: ; preds = %698
store i32 0, i32* %42
store i32 0, i32* %2
br label %705
705: ; preds = %715, %704
%706 = load i32, i32* %2
%707 = icmp slt i32 %706, 10
br i1 %707, label %708, label %718
708: ; preds = %705
%709 = load i32, i32* %42
%710 = load i32, i32* %2
%711 = sext i32 %710 to i64
%712 = getelementptr inbounds i32, i32* %45, i64 %711
%713 = load i32, i32* %712
%714 = xor i32 %709, %713
store i32 %714, i32* %42
br label %715
715: ; preds = %708
%716 = load i32, i32* %2
%717 = add nsw i32 %716, 1
store i32 %717, i32* %2
br label %705
718: ; preds = %705
store i32 0, i32* %43
store i32 0, i32* %2
br label %719
719: ; preds = %729, %718
%720 = load i32, i32* %2
%721 = icmp slt i32 %720, 10
br i1 %721, label %722, label %732
722: ; preds = %719
%723 = load i32, i32* %43
%724 = load i32, i32* %2
%725 = sext i32 %724 to i64
%726 = getelementptr inbounds i32, i32* %45, i64 %725
%727 = load i32, i32* %726
%728 = xor i32 %723, %727
store i32 %728, i32* %43
br label %729
729: ; preds = %722
%730 = load i32, i32* %2
%731 = add nsw i32 %730, 1
store i32 %731, i32* %2
br label %719
732: ; preds = %719
%733 = load i32, i32* %42
%734 = load i32, i32* %43
%735 = icmp ne i32 %733, %734
br i1 %735, label %736, label %738
736: ; preds = %732
%737 = call i32 (...) @abort()
unreachable
738: ; preds = %732
%739 = load i8*, i8** %3
ret void
}

LLVM IR (-O2):
define void @test_reductions() {
ret void
}