#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*/ hash(int);
void test(int M) {
  int c2, c4, c6;
  int i, j, k;
  for (c2 = 2; c2 <= ((3) < (3 * M - 4) ? (3) : (3 * M - 4)); c2++) {
    if ((c2 + 1) % 3 == 0) {
      i = (c2 + 1) / 3;
      {
        hash(1);
        hash((c2 + 1) / 3);
      };
    }
    for (c4 = (((c2 + 4) < 0) ? -((-(c2 + 4)) / (3))
                              : ((c2 + 4) + (3) - 1) / (3));
         c4 <= ((c2) < (M) ? (c2) : (M)); c4++) {
      if ((c2 + c4) % 2 == 0) {
        i = (c2 - c4 + 2) / 2;
        {
          hash(2);
          hash((c2 - c4 + 2) / 2);
          hash(c4);
        };
      }
    }
  }
  for (c2 = 4; c2 <= 3 * M - 4; c2++) {
    if ((c2 + 1) % 3 == 0) {
      i = (c2 + 1) / 3;
      {
        hash(1);
        hash((c2 + 1) / 3);
      };
    }
    for (c4 = (((c2 + 2) < 0) ? -((-(c2 + 2)) / (3))
                              : ((c2 + 2) + (3) - 1) / (3));
         c4 <= ((c2 - 2) < (M) ? (c2 - 2) : (M)); c4++) {
      for (c6 = (((c2 - c4 + 2) < 0) ? -((-(c2 - c4 + 2)) / (2))
                                     : ((c2 - c4 + 2) + (2) - 1) / (2));
           c6 <= ((c2 - c4) < (c4) ? (c2 - c4) : (c4)); c6++) {
        i = c2 - c4 - c6 + 1;
        {
          hash(3);
          hash(c2 - c4 - c6 + 1);
          hash(c4);
          hash(c6);
        };
      }
    }
    for (c4 = (((c2 + 4) < 0) ? -((-(c2 + 4)) / (3))
                              : ((c2 + 4) + (3) - 1) / (3));
         c4 <= ((M) < (c2) ? (M) : (c2)); c4++) {
      if ((c2 + c4) % 2 == 0) {
        i = (c2 - c4 + 2) / 2;
        {
          hash(2);
          hash((c2 - c4 + 2) / 2);
          hash(c4);
        };
      }
    }
  }
  for (c2 = ((2) > (3 * M - 3) ? (2) : (3 * M - 3));
       c2 <= ((3) < (3 * M - 2) ? (3) : (3 * M - 2)); c2++) {
    if ((c2 + 1) % 3 == 0) {
      i = (c2 + 1) / 3;
      {
        hash(1);
        hash((c2 + 1) / 3);
      };
    }
  }
  for (c2 = ((3 * M - 3) > (4) ? (3 * M - 3) : (4)); c2 <= 3 * M - 2; c2++) {
    if ((c2 + 1) % 3 == 0) {
      i = (c2 + 1) / 3;
      {
        hash(1);
        hash((c2 + 1) / 3);
      };
    }
    for (c4 = (((c2 + 2) < 0) ? -((-(c2 + 2)) / (3))
                              : ((c2 + 2) + (3) - 1) / (3));
         c4 <= ((M) < (c2 - 2) ? (M) : (c2 - 2)); c4++) {
      for (c6 = (((c2 - c4 + 2) < 0) ? -((-(c2 - c4 + 2)) / (2))
                                     : ((c2 - c4 + 2) + (2) - 1) / (2));
           c6 <= ((c2 - c4) < (c4) ? (c2 - c4) : (c4)); c6++) {
        i = c2 - c4 - c6 + 1;
        {
          hash(3);
          hash(c2 - c4 - c6 + 1);
          hash(c4);
          hash(c6);
        };
      }
    }
  }
  if (M >= 1) {
    c2 = 3 * M - 1;
    {
      hash(1);
      hash(M);
    };
  }
}


x86 assembly (clang, -O0):
<test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %edi,-0x4(%rbp)
movl   $0x2,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x20(%rbp)
imul   $0x3,-0x4(%rbp),%ecx
sub    $0x4,%ecx
mov    $0x3,%eax
cmp    %ecx,%eax
jge    114c <test+0x3c>
mov    $0x3,%eax
mov    %eax,-0x24(%rbp)
jmp    1156 <test+0x46>
imul   $0x3,-0x4(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x24(%rbp),%ecx
cmp    %ecx,%eax
jg     12a3 <test+0x193>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    11ab <test+0x9b>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    $0x4,%eax
cmp    $0x0,%eax
jge    11da <test+0xca>
mov    -0x8(%rbp),%ecx
add    $0x4,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x28(%rbp)
jmp    11f1 <test+0xe1>
mov    -0x8(%rbp),%eax
add    $0x4,%eax
add    $0x3,%eax
sub    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1214 <test+0x104>
mov    -0x8(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    121a <test+0x10a>
mov    -0x4(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
cmp    %ecx,%eax
jg     1290 <test+0x180>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    127d <test+0x16d>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
jmp    1282 <test+0x172>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11f7 <test+0xe7>
jmp    1295 <test+0x185>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1125 <test+0x15>
movl   $0x4,-0x8(%rbp)
mov    -0x8(%rbp),%eax
imul   $0x3,-0x4(%rbp),%ecx
sub    $0x4,%ecx
cmp    %ecx,%eax
jg     1565 <test+0x455>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1303 <test+0x1f3>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
cmp    $0x0,%eax
jge    1332 <test+0x222>
mov    -0x8(%rbp),%ecx
add    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    1349 <test+0x239>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
add    $0x3,%eax
sub    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x2,%eax
cmp    -0x4(%rbp),%eax
jge    1372 <test+0x262>
mov    -0x8(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x3c(%rbp)
jmp    1378 <test+0x268>
mov    -0x4(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x3c(%rbp),%ecx
cmp    %ecx,%eax
jg     146d <test+0x35d>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
cmp    $0x0,%eax
jge    13bb <test+0x2ab>
mov    -0x8(%rbp),%ecx
sub    -0xc(%rbp),%ecx
add    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x40(%rbp)
jmp    13d5 <test+0x2c5>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
add    $0x2,%eax
sub    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    13fe <test+0x2ee>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    1404 <test+0x2f4>
mov    -0xc(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x44(%rbp),%eax
mov    -0x48(%rbp),%ecx
cmp    %ecx,%eax
jg     145a <test+0x34a>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    $0x3,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
sub    -0xc(%rbp),%edi
sub    -0x10(%rbp),%edi
add    $0x1,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x10(%rbp),%edi
call   1030 <hash@plt>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    13db <test+0x2cb>
jmp    145f <test+0x34f>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    134f <test+0x23f>
mov    -0x8(%rbp),%eax
add    $0x4,%eax
cmp    $0x0,%eax
jge    149c <test+0x38c>
mov    -0x8(%rbp),%ecx
add    $0x4,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x4c(%rbp)
jmp    14b3 <test+0x3a3>
mov    -0x8(%rbp),%eax
add    $0x4,%eax
add    $0x3,%eax
sub    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    14d6 <test+0x3c6>
mov    -0x4(%rbp),%eax
mov    %eax,-0x54(%rbp)
jmp    14dc <test+0x3cc>
mov    -0x8(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x54(%rbp),%ecx
cmp    %ecx,%eax
jg     1552 <test+0x442>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    153f <test+0x42f>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
jmp    1544 <test+0x434>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    14b9 <test+0x3a9>
jmp    1557 <test+0x447>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12aa <test+0x19a>
imul   $0x3,-0x4(%rbp),%ecx
sub    $0x3,%ecx
mov    $0x2,%eax
cmp    %ecx,%eax
jle    1586 <test+0x476>
mov    $0x2,%eax
mov    %eax,-0x58(%rbp)
jmp    1590 <test+0x480>
imul   $0x3,-0x4(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x5c(%rbp)
imul   $0x3,-0x4(%rbp),%ecx
sub    $0x2,%ecx
mov    $0x3,%eax
cmp    %ecx,%eax
jge    15bd <test+0x4ad>
mov    $0x3,%eax
mov    %eax,-0x60(%rbp)
jmp    15c7 <test+0x4b7>
imul   $0x3,-0x4(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x60(%rbp)
mov    -0x5c(%rbp),%eax
mov    -0x60(%rbp),%ecx
cmp    %ecx,%eax
jg     162f <test+0x51f>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    161c <test+0x50c>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <hash@plt>
jmp    1621 <test+0x511>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1596 <test+0x486>
imul   $0x3,-0x4(%rbp),%eax
sub    $0x3,%eax
cmp    $0x4,%eax
jle    164e <test+0x53e>
imul   $0x3,-0x4(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x64(%rbp)
jmp    165b <test+0x54b>
mov    $0x4,%eax
mov    %eax,-0x64(%rbp)
jmp    165b <test+0x54b>
mov    -0x64(%rbp),%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
imul   $0x3,-0x4(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jg     1839 <test+0x729>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    16ba <test+0x5aa>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x14(%rbp)
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
cmp    $0x0,%eax
jge    16e9 <test+0x5d9>
mov    -0x8(%rbp),%ecx
add    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x68(%rbp)
jmp    1700 <test+0x5f0>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
add    $0x3,%eax
sub    $0x1,%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x4(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jge    1728 <test+0x618>
mov    -0x4(%rbp),%eax
mov    %eax,-0x70(%rbp)
jmp    1731 <test+0x621>
mov    -0x8(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x70(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x70(%rbp),%ecx
cmp    %ecx,%eax
jg     1826 <test+0x716>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
cmp    $0x0,%eax
jge    1774 <test+0x664>
mov    -0x8(%rbp),%ecx
sub    -0xc(%rbp),%ecx
add    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x74(%rbp)
jmp    178e <test+0x67e>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
add    $0x2,%eax
add    $0x2,%eax
sub    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    17b7 <test+0x6a7>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
mov    %eax,-0x7c(%rbp)
jmp    17bd <test+0x6ad>
mov    -0xc(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x78(%rbp),%eax
mov    -0x7c(%rbp),%ecx
cmp    %ecx,%eax
jg     1813 <test+0x703>
mov    -0x8(%rbp),%eax
sub    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    $0x3,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
sub    -0xc(%rbp),%edi
sub    -0x10(%rbp),%edi
add    $0x1,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x10(%rbp),%edi
call   1030 <hash@plt>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1794 <test+0x684>
jmp    1818 <test+0x708>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1706 <test+0x5f6>
jmp    182b <test+0x71b>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1661 <test+0x551>
cmpl   $0x1,-0x4(%rbp)
jl     185f <test+0x74f>
imul   $0x3,-0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x4(%rbp),%edi
call   1030 <hash@plt>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rdi,0x30(%rsp)
lea    (%rdi,%rdi,2),%eax
cmp    $0x7,%eax
mov    $0x7,%ecx
mov    %rax,0x20(%rsp)
cmovl  %eax,%ecx
mov    %ecx,0xc(%rsp)
cmp    $0x6,%ecx
jge    11c6 <test+0xb6>
cmpl   $0x8,0x20(%rsp)
mov    0x30(%rsp),%r12
jge    12a5 <test+0x195>
mov    0x20(%rsp),%rax
lea    -0x3(%rax),%r15d
cmp    $0x3,%r15d
mov    $0x2,%ebp
cmovge %r15d,%ebp
lea    -0x2(%rax),%r14d
cmp    $0x3,%r14d
mov    $0x3,%r12d
cmovl  %r14d,%r12d
cmp    %r12d,%ebp
jle    14c0 <test+0x3b0>
cmp    $0x5,%r15d
mov    $0x4,%ecx
cmovge %r15d,%ecx
cmp    %r14d,%ecx
jle    1505 <test+0x3f5>
mov    0x30(%rsp),%rbx
test   %ebx,%ebx
jle    1670 <test+0x560>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <hash@plt>
addl   $0xfffffffd,0xc(%rsp)
mov    $0x2,%r13d
mov    $0x4,%r12d
mov    $0x8,%r15d
jmp    11f8 <test+0xe8>
nop
add    $0x1,%r12d
add    $0x1,%r15d
mov    0x18(%rsp),%r13
cmp    0xc(%rsp),%r13d
je     1143 <test+0x33>
lea    0x1(%r13),%ebx
imul   $0xaaaaaaab,%ebx,%eax
cmp    $0x55555555,%eax
ja     122a <test+0x11a>
mov    %rbx,%rbp
mov    $0xaaaaaaab,%eax
imul   %rax,%rbp
shr    $0x21,%rbp
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
mov    %rbx,0x18(%rsp)
lea    0x6(%r13),%ebx
mov    $0xaaaaaaab,%eax
imul   %rax,%rbx
shr    $0x21,%rbx
mov    0x30(%rsp),%rax
cmp    %eax,%r13d
mov    %eax,%r14d
cmovl  %r13d,%r14d
cmp    %r14d,%ebx
jg     11e0 <test+0xd0>
mov    %r15d,%eax
mov    $0xaaaaaaab,%ecx
imul   %rcx,%rax
shr    $0x21,%rax
mov    %r12d,%ebp
sub    %eax,%ebp
jmp    1281 <test+0x171>
nopl   0x0(%rax,%rax,1)
lea    0x1(%rbx),%eax
add    $0xffffffff,%ebp
cmp    %r14d,%ebx
mov    %eax,%ebx
jge    11e0 <test+0xd0>
lea    (%rbx,%r13,1),%eax
test   $0x1,%al
jne    1270 <test+0x160>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
shr    %edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
jmp    1270 <test+0x160>
mov    $0x4,%ecx
mov    $0x8,%eax
mov    %rax,0x28(%rsp)
movl   $0x5,0x3c(%rsp)
mov    $0x6,%r15d
mov    $0xa,%r13d
jmp    12f9 <test+0x1e9>
nopw   0x0(%rax,%rax,1)
mov    0x28(%rsp),%rcx
lea    0x1(%rcx),%eax
addl   $0x1,0x3c(%rsp)
add    $0x1,%r15d
add    $0x1,%r13d
cmp    0x20(%rsp),%ecx
mov    %rax,0x28(%rsp)
mov    0x40(%rsp),%rcx
je     1153 <test+0x43>
mov    %r13d,0x10(%rsp)
mov    %r15d,0x14(%rsp)
mov    %ecx,%edx
lea    0x1(%rdx),%ebx
imul   $0xaaaaaaab,%ebx,%eax
cmp    $0x55555555,%eax
mov    %rdx,0x18(%rsp)
ja     1340 <test+0x230>
mov    %rbx,%rbp
mov    $0xaaaaaaab,%eax
imul   %rax,%rbp
shr    $0x21,%rbp
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
mov    0x18(%rsp),%rdx
mov    %rbx,0x40(%rsp)
lea    0x4(%rdx),%r15d
mov    $0xaaaaaaab,%eax
imul   %rax,%r15
shr    $0x21,%r15
lea    -0x2(%rdx),%eax
cmp    %r12d,%eax
cmovge %r12d,%eax
mov    %eax,0xc(%rsp)
cmp    %eax,%r15d
jle    1400 <test+0x2f0>
lea    0x6(%rdx),%ebx
mov    $0xaaaaaaab,%eax
imul   %rax,%rbx
shr    $0x21,%rbx
mov    0x30(%rsp),%r12
cmp    %r12d,%edx
mov    %edx,%r14d
cmovg  %r12d,%r14d
cmp    %r14d,%ebx
mov    0x14(%rsp),%r15d
mov    0x10(%rsp),%r13d
jg     12d0 <test+0x1c0>
mov    %r13d,%eax
mov    $0xaaaaaaab,%ecx
imul   %rcx,%rax
shr    $0x21,%rax
mov    %r15d,%ebp
sub    %eax,%ebp
jmp    13d1 <test+0x2c1>
cs nopw 0x0(%rax,%rax,1)
lea    0x1(%rbx),%eax
add    $0xffffffff,%ebp
cmp    %r14d,%ebx
mov    %eax,%ebx
jge    12d0 <test+0x1c0>
lea    (%rdx,%rbx,1),%eax
test   $0x1,%al
jne    13c0 <test+0x2b0>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
shr    $0x1f,%edi
add    %ebp,%edi
sar    %edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
mov    0x18(%rsp),%rdx
jmp    13c0 <test+0x2b0>
xchg   %ax,%ax
mov    0x28(%rsp),%eax
mov    $0xaaaaaaab,%ecx
imul   %rcx,%rax
shr    $0x21,%rax
mov    0x3c(%rsp),%r12d
sub    %eax,%r12d
mov    %edx,%r14d
sub    %eax,%r14d
jmp    144f <test+0x33f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    0x1(%r15),%eax
add    $0xffffffff,%r14d
add    $0xffffffff,%r12d
cmp    0xc(%rsp),%r15d
mov    %eax,%r15d
mov    0x18(%rsp),%rdx
jge    136d <test+0x25d>
cmp    %r14d,%r15d
mov    %r14d,%r13d
cmovl  %r15d,%r13d
mov    %edx,%eax
sub    %r15d,%eax
cmp    $0xfffffffd,%eax
jg     1470 <test+0x360>
mov    $0xfffffffe,%ebp
sub    %eax,%ebp
shr    %ebp
neg    %ebp
jmp    1475 <test+0x365>
lea    0x3(%rax),%ebp
shr    %ebp
cmp    %r15d,%eax
cmovge %r15d,%eax
cmp    %eax,%ebp
jg     1430 <test+0x320>
add    $0x1,%r13d
mov    %r12d,%ebx
sub    %ebp,%ebx
nopl   0x0(%rax)
mov    $0x3,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
mov    %r15d,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
add    $0xffffffff,%ebx
cmp    %ebp,%r13d
jne    1490 <test+0x380>
jmp    1430 <test+0x320>
add    $0x1,%ebp
mov    $0xaaaaaaab,%r13d
jmp    14e1 <test+0x3d1>
nopl   0x0(%rax,%rax,1)
lea    0x1(%rbp),%eax
add    $0xffffffff,%ebp
cmp    %r12d,%ebp
mov    %eax,%ebp
jge    1184 <test+0x74>
mov    %ebp,%ebx
imul   %r13,%rbx
shr    $0x21,%rbx
lea    (%rbx,%rbx,2),%eax
cmp    %ebp,%eax
jne    14d0 <test+0x3c0>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
jmp    14d0 <test+0x3c0>
lea    0x4(%rcx),%eax
mov    %eax,0x14(%rsp)
mov    0x20(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x20(%rsp)
lea    0x1(%rcx),%eax
mov    %eax,0x10(%rsp)
jmp    1549 <test+0x439>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addl   $0x1,0x14(%rsp)
addl   $0x1,0x10(%rsp)
mov    0x28(%rsp),%rcx
cmp    0x20(%rsp),%ecx
je     119a <test+0x8a>
mov    %ecx,%edx
lea    0x1(%rdx),%ebx
imul   $0xaaaaaaab,%ebx,%eax
cmp    $0x55555555,%eax
mov    0x30(%rsp),%r14
mov    %rdx,0x18(%rsp)
ja     158b <test+0x47b>
mov    %rbx,%rbp
mov    $0xaaaaaaab,%eax
imul   %rax,%rbp
shr    $0x21,%rbp
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
mov    0x18(%rsp),%rdx
mov    %rbx,0x28(%rsp)
lea    0x4(%rdx),%r15d
mov    $0xaaaaaaab,%eax
imul   %rax,%r15
shr    $0x21,%r15
lea    -0x2(%rdx),%eax
cmp    %r14d,%eax
cmovg  %r14d,%eax
mov    %eax,0xc(%rsp)
cmp    %eax,%r15d
jg     1530 <test+0x420>
mov    0x14(%rsp),%eax
mov    $0xaaaaaaab,%ecx
imul   %rcx,%rax
shr    $0x21,%rax
mov    0x10(%rsp),%r13d
sub    %eax,%r13d
mov    %edx,%r12d
sub    %eax,%r12d
jmp    15ff <test+0x4ef>
nopl   0x0(%rax)
lea    0x1(%r15),%eax
add    $0xffffffff,%r12d
add    $0xffffffff,%r13d
cmp    0xc(%rsp),%r15d
mov    %eax,%r15d
mov    0x18(%rsp),%rdx
jge    1530 <test+0x420>
cmp    %r12d,%r15d
mov    %r12d,%r14d
cmovl  %r15d,%r14d
mov    %edx,%eax
sub    %r15d,%eax
cmp    $0xfffffffd,%eax
jg     1620 <test+0x510>
mov    $0xfffffffe,%ebp
sub    %eax,%ebp
shr    %ebp
neg    %ebp
jmp    1625 <test+0x515>
lea    0x3(%rax),%ebp
shr    %ebp
cmp    %r15d,%eax
cmovge %r15d,%eax
cmp    %eax,%ebp
jg     15e0 <test+0x4d0>
add    $0x1,%r14d
mov    %r13d,%ebx
sub    %ebp,%ebx
nopl   0x0(%rax)
mov    $0x3,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
mov    %r15d,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
add    $0xffffffff,%ebx
cmp    %ebp,%r14d
jne    1640 <test+0x530>
jmp    15e0 <test+0x4d0>
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @test(i32 %0) {
%2 = mul i32 %0, 3
%3 = icmp slt i32 %2, 7
%4 = select i1 %3, i32 %2, i32 7
%5 = icmp slt i32 %4, 6
br i1 %5, label %10, label %6
6: ; preds = %1
%7 = add nsw i32 %4, -3
br label %12
8: ; preds = %40, %21
%9 = icmp eq i32 %14, %7
br i1 %9, label %10, label %12
10: ; preds = %8, %1
%11 = icmp slt i32 %2, 8
br i1 %11, label %120, label %46
12: ; preds = %6, %8
%13 = phi i32 [ %14, %8 ], [ 2, %6 ]
%14 = add nuw nsw i32 %13, 1
%15 = urem i32 %14, 3
%16 = udiv i32 %14, 3
%17 = icmp eq i32 %15, 0
br i1 %17, label %18, label %21
18: ; preds = %12
%19 = tail call i32 @hash(i32 1)
%20 = tail call i32 @hash(i32 %16)
br label %21
21: ; preds = %18, %12
%22 = add nuw nsw i32 %13, 6
%23 = udiv i32 %22, 3
%24 = icmp slt i32 %13, %0
%25 = select i1 %24, i32 %13, i32 %0
%26 = icmp sgt i32 %23, %25
br i1 %26, label %8, label %27
27: ; preds = %21
%28 = add nuw nsw i32 %13, 2
br label %29
29: ; preds = %27, %40
%30 = phi i32 [ %23, %27 ], [ %41, %40 ]
%31 = add nuw nsw i32 %30, %13
%32 = and i32 %31, 1
%33 = icmp eq i32 %32, 0
br i1 %33, label %34, label %40
34: ; preds = %29
%35 = sub nsw i32 %28, %30
%36 = tail call i32 @hash(i32 2)
%37 = lshr i32 %35, 1
%38 = tail call i32 @hash(i32 %37)
%39 = tail call i32 @hash(i32 %30)
br label %40
40: ; preds = %29, %34
%41 = add nuw nsw i32 %30, 1
%42 = icmp slt i32 %30, %25
br i1 %42, label %29, label %8
43: ; preds = %117, %98
%44 = add nuw i32 %47, 1
%45 = icmp eq i32 %47, %2
br i1 %45, label %120, label %46
46: ; preds = %10, %43
%47 = phi i32 [ %44, %43 ], [ 8, %10 ]
%48 = phi i32 [ %51, %43 ], [ 4, %10 ]
%49 = udiv i32 %47, 3
%50 = sub nsw i32 %48, %49
%51 = add nuw nsw i32 %48, 1
%52 = urem i32 %51, 3
%53 = udiv i32 %51, 3
%54 = icmp eq i32 %52, 0
br i1 %54, label %55, label %58
55: ; preds = %46
%56 = tail call i32 @hash(i32 1)
%57 = tail call i32 @hash(i32 %53)
br label %58
58: ; preds = %55, %46
%59 = add nuw nsw i32 %48, 4
%60 = udiv i32 %59, 3
%61 = add nsw i32 %48, -2
%62 = icmp slt i32 %61, %0
%63 = select i1 %62, i32 %61, i32 %0
%64 = icmp sgt i32 %60, %63
br i1 %64, label %98, label %65
65: ; preds = %58, %94
%66 = phi i32 [ %97, %94 ], [ %50, %58 ]
%67 = phi i32 [ %95, %94 ], [ %60, %58 ]
%68 = call i32 @llvm.smin.i32(i32 %67, i32 %66)
%69 = sub nsw i32 %48, %67
%70 = icmp slt i32 %69, -2
br i1 %70, label %71, label %75
71: ; preds = %65
%72 = sub nuw nsw i32 -2, %69
%73 = lshr i32 %72, 1
%74 = sub nsw i32 0, %73
br label %78
75: ; preds = %65
%76 = add nsw i32 %69, 3
%77 = lshr i32 %76, 1
br label %78
78: ; preds = %75, %71
%79 = phi i32 [ %74, %71 ], [ %77, %75 ]
%80 = icmp slt i32 %69, %67
%81 = select i1 %80, i32 %69, i32 %67
%82 = icmp sgt i32 %79, %81
br i1 %82, label %94, label %83
83: ; preds = %78
%84 = add i32 %69, 1
br label %85
85: ; preds = %83, %85
%86 = phi i32 [ %79, %83 ], [ %92, %85 ]
%87 = tail call i32 @hash(i32 3)
%88 = sub i32 %84, %86
%89 = tail call i32 @hash(i32 %88)
%90 = tail call i32 @hash(i32 %67)
%91 = tail call i32 @hash(i32 %86)
%92 = add i32 %86, 1
%93 = icmp eq i32 %86, %68
br i1 %93, label %94, label %85
94: ; preds = %85, %78
%95 = add nuw nsw i32 %67, 1
%96 = icmp slt i32 %67, %63
%97 = add i32 %66, -1
br i1 %96, label %65, label %98
98: ; preds = %94, %58
%99 = add nuw nsw i32 %48, 6
%100 = udiv i32 %99, 3
%101 = icmp sgt i32 %48, %0
%102 = select i1 %101, i32 %0, i32 %48
%103 = icmp sgt i32 %100, %102
br i1 %103, label %43, label %104
104: ; preds = %98
%105 = add nuw i32 %48, 2
br label %106
106: ; preds = %104, %117
%107 = phi i32 [ %100, %104 ], [ %118, %117 ]
%108 = add nuw nsw i32 %107, %48
%109 = and i32 %108, 1
%110 = icmp eq i32 %109, 0
br i1 %110, label %111, label %117
111: ; preds = %106
%112 = sub i32 %105, %107
%113 = tail call i32 @hash(i32 2)
%114 = sdiv i32 %112, 2
%115 = tail call i32 @hash(i32 %114)
%116 = tail call i32 @hash(i32 %107)
br label %117
117: ; preds = %106, %111
%118 = add nuw nsw i32 %107, 1
%119 = icmp slt i32 %107, %102
br i1 %119, label %106, label %43
120: ; preds = %43, %10
%121 = add nsw i32 %2, -3
%122 = icmp sgt i32 %121, 2
%123 = select i1 %122, i32 %121, i32 2
%124 = add nsw i32 %2, -2
%125 = icmp slt i32 %124, 3
%126 = select i1 %125, i32 %124, i32 3
%127 = icmp sgt i32 %123, %126
br i1 %127, label %139, label %128
128: ; preds = %120, %137
%129 = phi i32 [ %130, %137 ], [ %123, %120 ]
%130 = add nuw nsw i32 %129, 1
%131 = urem i32 %130, 3
%132 = udiv i32 %130, 3
%133 = icmp eq i32 %131, 0
br i1 %133, label %134, label %137
134: ; preds = %128
%135 = tail call i32 @hash(i32 1)
%136 = tail call i32 @hash(i32 %132)
br label %137
137: ; preds = %128, %134
%138 = icmp slt i32 %129, %126
br i1 %138, label %128, label %139
139: ; preds = %137, %120
%140 = icmp sgt i32 %121, 4
%141 = select i1 %140, i32 %121, i32 4
%142 = icmp sgt i32 %141, %124
br i1 %142, label %201, label %143
143: ; preds = %139
%144 = add nuw i32 %141, 4
%145 = add i32 %2, -1
br label %149
146: ; preds = %197, %161
%147 = add nuw i32 %150, 1
%148 = icmp eq i32 %154, %145
br i1 %148, label %201, label %149
149: ; preds = %143, %146
%150 = phi i32 [ %144, %143 ], [ %147, %146 ]
%151 = phi i32 [ %141, %143 ], [ %154, %146 ]
%152 = udiv i32 %150, 3
%153 = sub i32 %151, %152
%154 = add nuw i32 %151, 1
%155 = urem i32 %154, 3
%156 = udiv i32 %154, 3
%157 = icmp eq i32 %155, 0
br i1 %157, label %158, label %161
158: ; preds = %149
%159 = tail call i32 @hash(i32 1)
%160 = tail call i32 @hash(i32 %156)
br label %161
161: ; preds = %158, %149
%162 = add nuw nsw i32 %151, 4
%163 = udiv i32 %162, 3
%164 = add nsw i32 %151, -2
%165 = icmp sgt i32 %164, %0
%166 = select i1 %165, i32 %0, i32 %164
%167 = icmp sgt i32 %163, %166
br i1 %167, label %146, label %168
168: ; preds = %161, %197
%169 = phi i32 [ %200, %197 ], [ %153, %161 ]
%170 = phi i32 [ %198, %197 ], [ %163, %161 ]
%171 = call i32 @llvm.smin.i32(i32 %170, i32 %169)
%172 = sub nsw i32 %151, %170
%173 = icmp slt i32 %172, -2
br i1 %173, label %174, label %178
174: ; preds = %168
%175 = sub nuw nsw i32 -2, %172
%176 = lshr i32 %175, 1
%177 = sub nsw i32 0, %176
br label %181
178: ; preds = %168
%179 = add nsw i32 %172, 3
%180 = lshr i32 %179, 1
br label %181
181: ; preds = %178, %174
%182 = phi i32 [ %177, %174 ], [ %180, %178 ]
%183 = icmp slt i32 %172, %170
%184 = select i1 %183, i32 %172, i32 %170
%185 = icmp sgt i32 %182, %184
br i1 %185, label %197, label %186
186: ; preds = %181
%187 = add i32 %172, 1
br label %188
188: ; preds = %186, %188
%189 = phi i32 [ %182, %186 ], [ %195, %188 ]
%190 = tail call i32 @hash(i32 3)
%191 = sub i32 %187, %189
%192 = tail call i32 @hash(i32 %191)
%193 = tail call i32 @hash(i32 %170)
%194 = tail call i32 @hash(i32 %189)
%195 = add i32 %189, 1
%196 = icmp eq i32 %189, %171
br i1 %196, label %197, label %188
197: ; preds = %188, %181
%198 = add nuw nsw i32 %170, 1
%199 = icmp slt i32 %170, %166
%200 = add i32 %169, -1
br i1 %199, label %168, label %146
201: ; preds = %146, %139
%202 = icmp sgt i32 %0, 0
br i1 %202, label %203, label %206
203: ; preds = %201
%204 = tail call i32 @hash(i32 1)
%205 = tail call i32 @hash(i32 %0)
br label %206
206: ; preds = %203, %201
ret void
}