void test(int M) {
  int c1, c2, c3, c4;
  int i, j, k, l;
  if (M >= 3) {
    for (c1 = -1; c1 <= ((2) < ((((M + 2) < 0) ? -((-(M + 2) + (4) - 1) / (4))
                                               : (M + 2) / (4)))
                             ? (2)
                             : ((((M + 2) < 0) ? -((-(M + 2) + (4) - 1) / (4))
                                               : (M + 2) / (4))));
         c1++) {
      for (c2 = (((((2 * c1 - M + 1) < 0)
                       ? -((-(2 * c1 - M + 1)) / (4))
                       : ((2 * c1 - M + 1) + (4) - 1) / (4))) >
                         ((((4 * c1 - M - 2) < 0)
                               ? -((-(4 * c1 - M - 2)) / (4))
                               : ((4 * c1 - M - 2) + (4) - 1) / (4)))
                     ? ((((2 * c1 - M + 1) < 0)
                             ? -((-(2 * c1 - M + 1)) / (4))
                             : ((2 * c1 - M + 1) + (4) - 1) / (4)))
                     : ((((4 * c1 - M - 2) < 0)
                             ? -((-(4 * c1 - M - 2)) / (4))
                             : ((4 * c1 - M - 2) + (4) - 1) / (4))));
           c2 <=
           ((0) < ((((c1) < 0) ? -((-(c1) + (2) - 1) / (2)) : (c1) / (2)))
                ? (0)
                : ((((c1) < 0) ? -((-(c1) + (2) - 1) / (2)) : (c1) / (2))));
           c2++) {
        for (c3 = ((((-4 * c2 - 2) > (4 * c2 + 3) ? (-4 * c2 - 2)
                                                  : (4 * c2 + 3))) >
                           (4 * c1 - 4 * c2 + 1)
                       ? (((-4 * c2 - 2) > (4 * c2 + 3) ? (-4 * c2 - 2)
                                                        : (4 * c2 + 3)))
                       : (4 * c1 - 4 * c2 + 1));
             c3 <=
             ((((((M + 3) < (-4 * c2 + 9) ? (M + 3) : (-4 * c2 + 9))) <
                        (4 * c2 + 2 * M)
                    ? (((M + 3) < (-4 * c2 + 9) ? (M + 3) : (-4 * c2 + 9)))
                    : (4 * c2 + 2 * M))) < (4 * c1 - 4 * c2 + 4)
                  ? (((((M + 3) < (-4 * c2 + 9) ? (M + 3) : (-4 * c2 + 9))) <
                              (4 * c2 + 2 * M)
                          ? (((M + 3) < (-4 * c2 + 9) ? (M + 3)
                                                      : (-4 * c2 + 9)))
                          : (4 * c2 + 2 * M)))
                  : (4 * c1 - 4 * c2 + 4));
             c3++) {
          for (c4 = ((3 * c3 -
                      4 * (((c3 + M + 1) < 0)
                               ? -((-(c3 + M + 1) + (2) - 1) / (2))
                               : (c3 + M + 1) / (2)) +
                      6) > (4 * c2 - c3 -
                            4 * (((-c3 + 1) < 0)
                                     ? -((-(-c3 + 1) + (4) - 1) / (4))
                                     : (-c3 + 1) / (4)) +
                            2)
                         ? (3 * c3 -
                            4 * (((c3 + M + 1) < 0)
                                     ? -((-(c3 + M + 1) + (2) - 1) / (2))
                                     : (c3 + M + 1) / (2)) +
                            6)
                         : (4 * c2 - c3 -
                            4 * (((-c3 + 1) < 0)
                                     ? -((-(-c3 + 1) + (4) - 1) / (4))
                                     : (-c3 + 1) / (4)) +
                            2));
               c4 <=
               ((((4 * c2 + 4) < (-c3 + 10) ? (4 * c2 + 4) : (-c3 + 10))) <
                        (c3 - 2)
                    ? (((4 * c2 + 4) < (-c3 + 10) ? (4 * c2 + 4) : (-c3 + 10)))
                    : (c3 - 2));
               c4 += 4) {
            if ((c2 <= (((c4 - 1) < 0) ? -((-(c4 - 1) + (4) - 1) / (4))
                                       : (c4 - 1) / (4))) &&
                (c2 >= (((c4 - 4) < 0) ? -((-(c4 - 4)) / (4))
                                       : ((c4 - 4) + (4) - 1) / (4)))) {
              {
                hash(1);
                hash(c1 - c2);
                hash(c2);
                hash((c3 + c4 - 2) / 4);
                hash((c3 - c4) / 2);
              };
            }
          }
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<test>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    %edi,-0x4(%rbp)
cmpl   $0x3,-0x4(%rbp)
jl     1aa3 <test+0x993>
movl   $0xffffffff,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x4(%rbp),%eax
add    $0x2,%eax
cmp    $0x0,%eax
jge    116a <test+0x5a>
mov    -0x4(%rbp),%ecx
add    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x2c(%rbp)
jmp    117b <test+0x6b>
mov    -0x4(%rbp),%eax
add    $0x2,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    $0x2,%eax
cmp    %ecx,%eax
jge    1198 <test+0x88>
mov    $0x2,%eax
mov    %eax,-0x30(%rbp)
jmp    11e4 <test+0xd4>
mov    -0x4(%rbp),%eax
add    $0x2,%eax
cmp    $0x0,%eax
jge    11cd <test+0xbd>
mov    -0x4(%rbp),%ecx
add    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
jmp    11de <test+0xce>
mov    -0x4(%rbp),%eax
add    $0x2,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x30(%rbp),%ecx
cmp    %ecx,%eax
jg     1a9e <test+0x98e>
mov    -0x8(%rbp),%eax
shl    $0x1,%eax
sub    -0x4(%rbp),%eax
add    $0x1,%eax
cmp    $0x0,%eax
jge    122d <test+0x11d>
mov    -0x8(%rbp),%ecx
shl    $0x1,%ecx
sub    -0x4(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x38(%rbp)
jmp    124a <test+0x13a>
mov    -0x8(%rbp),%eax
shl    $0x1,%eax
sub    -0x4(%rbp),%eax
add    $0x1,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x2,%eax
sub    -0x4(%rbp),%eax
sub    $0x2,%eax
cmp    $0x0,%eax
jge    128b <test+0x17b>
mov    -0x8(%rbp),%ecx
shl    $0x2,%ecx
sub    -0x4(%rbp),%ecx
sub    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x40(%rbp)
jmp    12a8 <test+0x198>
mov    -0x8(%rbp),%eax
shl    $0x2,%eax
sub    -0x4(%rbp),%eax
sub    $0x2,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
mov    -0x40(%rbp),%ecx
cmp    %ecx,%eax
jle    1319 <test+0x209>
mov    -0x8(%rbp),%eax
shl    $0x1,%eax
sub    -0x4(%rbp),%eax
add    $0x1,%eax
cmp    $0x0,%eax
jge    12f1 <test+0x1e1>
mov    -0x8(%rbp),%ecx
shl    $0x1,%ecx
sub    -0x4(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x44(%rbp)
jmp    130e <test+0x1fe>
mov    -0x8(%rbp),%eax
shl    $0x1,%eax
sub    -0x4(%rbp),%eax
add    $0x1,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    1377 <test+0x267>
mov    -0x8(%rbp),%eax
shl    $0x2,%eax
sub    -0x4(%rbp),%eax
sub    $0x2,%eax
cmp    $0x0,%eax
jge    1354 <test+0x244>
mov    -0x8(%rbp),%ecx
shl    $0x2,%ecx
sub    -0x4(%rbp),%ecx
sub    $0x2,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x4c(%rbp)
jmp    1371 <test+0x261>
mov    -0x8(%rbp),%eax
shl    $0x2,%eax
sub    -0x4(%rbp),%eax
sub    $0x2,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x50(%rbp)
cmpl   $0x0,-0x8(%rbp)
jge    13ae <test+0x29e>
xor    %eax,%eax
sub    -0x8(%rbp),%eax
add    $0x2,%eax
sub    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
jmp    13bc <test+0x2ac>
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jge    13d3 <test+0x2c3>
xor    %eax,%eax
mov    %eax,-0x58(%rbp)
jmp    1412 <test+0x302>
cmpl   $0x0,-0x8(%rbp)
jge    13fe <test+0x2ee>
xor    %eax,%eax
sub    -0x8(%rbp),%eax
add    $0x2,%eax
sub    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x5c(%rbp)
jmp    140c <test+0x2fc>
mov    -0x8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x58(%rbp),%ecx
cmp    %ecx,%eax
jg     1a8b <test+0x97b>
imul   $0xfffffffc,-0xc(%rbp),%eax
sub    $0x2,%eax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
cmp    %ecx,%eax
jle    144d <test+0x33d>
imul   $0xfffffffc,-0xc(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x60(%rbp)
jmp    1459 <test+0x349>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
add    $0x3,%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    -0x8(%rbp),%ecx
shl    $0x2,%ecx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
sub    %edx,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jle    14b9 <test+0x3a9>
imul   $0xfffffffc,-0xc(%rbp),%eax
sub    $0x2,%eax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
cmp    %ecx,%eax
jle    14a2 <test+0x392>
imul   $0xfffffffc,-0xc(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x64(%rbp)
jmp    14ae <test+0x39e>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
add    $0x3,%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x68(%rbp)
jmp    14cd <test+0x3bd>
mov    -0x8(%rbp),%eax
shl    $0x2,%eax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
sub    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x4(%rbp),%eax
add    $0x3,%eax
imul   $0xfffffffc,-0xc(%rbp),%ecx
add    $0x9,%ecx
cmp    %ecx,%eax
jge    14ff <test+0x3ef>
mov    -0x4(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x70(%rbp)
jmp    150c <test+0x3fc>
imul   $0xfffffffc,-0xc(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
cmp    %ecx,%eax
jge    1563 <test+0x453>
mov    -0x4(%rbp),%eax
add    $0x3,%eax
imul   $0xfffffffc,-0xc(%rbp),%ecx
add    $0x9,%ecx
cmp    %ecx,%eax
jge    154b <test+0x43b>
mov    -0x4(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x74(%rbp)
jmp    1558 <test+0x448>
imul   $0xfffffffc,-0xc(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0x78(%rbp)
jmp    1574 <test+0x464>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%eax
mov    -0x8(%rbp),%ecx
shl    $0x2,%ecx
mov    -0xc(%rbp),%edx
shl    $0x2,%edx
sub    %edx,%ecx
add    $0x4,%ecx
cmp    %ecx,%eax
jge    1642 <test+0x532>
mov    -0x4(%rbp),%eax
add    $0x3,%eax
imul   $0xfffffffc,-0xc(%rbp),%ecx
add    $0x9,%ecx
cmp    %ecx,%eax
jge    15b6 <test+0x4a6>
mov    -0x4(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x7c(%rbp)
jmp    15c3 <test+0x4b3>
imul   $0xfffffffc,-0xc(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
cmp    %ecx,%eax
jge    161d <test+0x50d>
mov    -0x4(%rbp),%eax
add    $0x3,%eax
imul   $0xfffffffc,-0xc(%rbp),%ecx
add    $0x9,%ecx
cmp    %ecx,%eax
jge    1602 <test+0x4f2>
mov    -0x4(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x80(%rbp)
jmp    160f <test+0x4ff>
imul   $0xfffffffc,-0xc(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
mov    %eax,-0x84(%rbp)
jmp    1631 <test+0x521>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    %eax,-0x88(%rbp)
jmp    1659 <test+0x549>
mov    -0x8(%rbp),%eax
shl    $0x2,%eax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
sub    %ecx,%eax
add    $0x4,%eax
mov    %eax,-0x88(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x88(%rbp),%ecx
cmp    %ecx,%eax
jg     1a78 <test+0x968>
imul   $0x3,-0x10(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x10(%rbp),%eax
add    -0x4(%rbp),%eax
add    $0x1,%eax
cmp    $0x0,%eax
jge    16b2 <test+0x5a2>
mov    -0x10(%rbp),%ecx
add    -0x4(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
add    $0x2,%eax
sub    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x90(%rbp)
jmp    16c9 <test+0x5b9>
mov    -0x10(%rbp),%eax
add    -0x4(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x90(%rbp)
mov    -0x8c(%rbp),%eax
mov    -0x90(%rbp),%ecx
shl    $0x2,%ecx
sub    %ecx,%eax
add    $0x6,%eax
mov    %eax,-0x98(%rbp)
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0x94(%rbp)
xor    %eax,%eax
sub    -0x10(%rbp),%eax
add    $0x1,%eax
cmp    $0x0,%eax
jge    172e <test+0x61e>
xor    %ecx,%ecx
sub    -0x10(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x9c(%rbp)
jmp    1744 <test+0x634>
xor    %eax,%eax
sub    -0x10(%rbp),%eax
add    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x9c(%rbp)
mov    -0x98(%rbp),%eax
mov    -0x94(%rbp),%ecx
mov    -0x9c(%rbp),%edx
shl    $0x2,%edx
sub    %edx,%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jle    17e4 <test+0x6d4>
imul   $0x3,-0x10(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    -0x10(%rbp),%eax
add    -0x4(%rbp),%eax
add    $0x1,%eax
cmp    $0x0,%eax
jge    17ae <test+0x69e>
mov    -0x10(%rbp),%ecx
add    -0x4(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
add    $0x2,%eax
sub    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0xa4(%rbp)
jmp    17c5 <test+0x6b5>
mov    -0x10(%rbp),%eax
add    -0x4(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0xa4(%rbp)
mov    -0xa0(%rbp),%eax
mov    -0xa4(%rbp),%ecx
shl    $0x2,%ecx
sub    %ecx,%eax
add    $0x6,%eax
mov    %eax,-0xa8(%rbp)
jmp    185f <test+0x74f>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0xac(%rbp)
xor    %eax,%eax
sub    -0x10(%rbp),%eax
add    $0x1,%eax
cmp    $0x0,%eax
jge    182f <test+0x71f>
xor    %ecx,%ecx
sub    -0x10(%rbp),%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0xb0(%rbp)
jmp    1845 <test+0x735>
xor    %eax,%eax
sub    -0x10(%rbp),%eax
add    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0xb0(%rbp)
mov    -0xac(%rbp),%eax
mov    -0xb0(%rbp),%ecx
shl    $0x2,%ecx
sub    %ecx,%eax
add    $0x2,%eax
mov    %eax,-0xa8(%rbp)
mov    -0xa8(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0xb4(%rbp)
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
add    $0x4,%eax
xor    %ecx,%ecx
sub    -0x10(%rbp),%ecx
add    $0xa,%ecx
cmp    %ecx,%eax
jge    189e <test+0x78e>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
add    $0x4,%eax
mov    %eax,-0xb8(%rbp)
jmp    18ac <test+0x79c>
xor    %eax,%eax
sub    -0x10(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0xb8(%rbp)
mov    -0xb8(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jge    190c <test+0x7fc>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
add    $0x4,%eax
xor    %ecx,%ecx
sub    -0x10(%rbp),%ecx
add    $0xa,%ecx
cmp    %ecx,%eax
jge    18ed <test+0x7dd>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
add    $0x4,%eax
mov    %eax,-0xbc(%rbp)
jmp    18fb <test+0x7eb>
xor    %eax,%eax
sub    -0x10(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0xbc(%rbp)
mov    -0xbc(%rbp),%eax
mov    %eax,-0xc0(%rbp)
jmp    1918 <test+0x808>
mov    -0x10(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0xc0(%rbp)
mov    -0xb4(%rbp),%eax
mov    -0xc0(%rbp),%ecx
cmp    %ecx,%eax
jg     1a65 <test+0x955>
mov    -0xc(%rbp),%eax
mov    %eax,-0xc4(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jge    196d <test+0x85d>
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0xc8(%rbp)
jmp    1981 <test+0x871>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0xc8(%rbp)
mov    -0xc4(%rbp),%eax
mov    -0xc8(%rbp),%ecx
cmp    %ecx,%eax
jg     1a52 <test+0x942>
mov    -0xc(%rbp),%eax
mov    %eax,-0xcc(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x4,%eax
cmp    $0x0,%eax
jge    19d0 <test+0x8c0>
mov    -0x14(%rbp),%ecx
sub    $0x4,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0xd0(%rbp)
jmp    19ea <test+0x8da>
mov    -0x14(%rbp),%eax
sub    $0x4,%eax
add    $0x4,%eax
sub    $0x1,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0xd0(%rbp)
mov    -0xcc(%rbp),%eax
mov    -0xd0(%rbp),%ecx
cmp    %ecx,%eax
jl     1a52 <test+0x942>
mov    $0x1,%edi
mov    $0x0,%al
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
sub    -0xc(%rbp),%edi
mov    $0x0,%al
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
mov    $0x0,%al
call   1030 <hash@plt>
mov    -0x10(%rbp),%eax
add    -0x14(%rbp),%eax
sub    $0x2,%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
mov    $0x0,%al
call   1030 <hash@plt>
mov    -0x10(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
mov    $0x0,%al
call   1030 <hash@plt>
jmp    1a57 <test+0x947>
mov    -0x14(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x14(%rbp)
jmp    1868 <test+0x758>
jmp    1a6a <test+0x95a>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    14d3 <test+0x3c3>
jmp    1a7d <test+0x96d>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    137d <test+0x26d>
jmp    1a90 <test+0x980>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    112f <test+0x1f>
jmp    1aa3 <test+0x993>
add    $0xd0,%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,0x8(%rsp)
cmp    $0x3,%edi
jl     14ac <test+0x39c>
mov    0x8(%rsp),%rcx
lea    0x2(%rcx),%edx
shr    $0x2,%edx
lea    -0xa(%rcx),%eax
cmp    $0xfffffff4,%eax
mov    $0x2,%eax
cmovb  %eax,%edx
mov    %edx,0x14(%rsp)
lea    0x3(%rcx),%eax
mov    %eax,0x18(%rsp)
lea    (%rcx,%rcx,1),%eax
mov    %rax,0x40(%rsp)
mov    $0xffffffff,%edi
jmp    1174 <test+0x64>
nop
mov    0x30(%rsp),%rcx
lea    0x1(%rcx),%eax
cmp    0x14(%rsp),%ecx
mov    %eax,%edi
je     14ac <test+0x39c>
lea    (%rdi,%rdi,1),%eax
sub    0x8(%rsp),%eax
cmp    $0xfffffffe,%eax
jg     11a0 <test+0x90>
mov    %eax,%edx
not    %edx
lea    0x3(%rdx),%ecx
test   %edx,%edx
cmovns %edx,%ecx
sar    $0x2,%ecx
neg    %ecx
jmp    11a6 <test+0x96>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x4(%rax),%ecx
shr    $0x2,%ecx
lea    0x0(,%rdi,4),%edx
mov    %edx,0x20(%rsp)
sub    0x8(%rsp),%edx
cmp    $0x1,%edx
jg     11e0 <test+0xd0>
mov    $0x2,%esi
sub    %edx,%esi
mov    $0x5,%ebx
sub    %edx,%ebx
test   %esi,%esi
cmovns %esi,%ebx
sar    $0x2,%ebx
neg    %ebx
cmp    %ebx,%ecx
jg     11ec <test+0xdc>
jmp    1218 <test+0x108>
nopl   0x0(%rax,%rax,1)
add    $0x1,%edx
shr    $0x2,%edx
mov    %edx,%ebx
cmp    %edx,%ecx
jle    1218 <test+0x108>
cmp    $0xfffffffe,%eax
jg     1210 <test+0x100>
not    %eax
lea    0x3(%rax),%ebx
test   %eax,%eax
cmovns %eax,%ebx
sar    $0x2,%ebx
neg    %ebx
jmp    1218 <test+0x108>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x4,%eax
shr    $0x2,%eax
mov    %eax,%ebx
mov    %edi,%edx
shr    %edx
xor    %eax,%eax
cmp    $0x2,%edi
cmovae %eax,%edx
jg     1238 <test+0x128>
mov    $0x1,%ecx
sub    %edi,%ecx
mov    %ecx,%eax
shr    $0x1f,%eax
add    %ecx,%eax
sar    %eax
neg    %eax
mov    %rdi,0x30(%rsp)
test   %edi,%edi
cmovs  %eax,%edx
cmp    %edx,%ebx
jg     1160 <test+0x50>
mov    %edx,0x1c(%rsp)
jmp    1261 <test+0x151>
lea    0x1(%rbx),%eax
mov    0x1c(%rsp),%edx
cmp    %edx,%ebx
mov    %eax,%ebx
jge    1160 <test+0x50>
lea    0x0(,%rbx,4),%edx
mov    %edx,%eax
xor    $0xfffffffe,%eax
lea    0x3(,%rbx,4),%ecx
cmp    %ecx,%eax
cmovle %ecx,%eax
mov    0x20(%rsp),%esi
sub    %edx,%esi
mov    %esi,%r12d
or     $0x1,%r12d
cmp    %r12d,%eax
cmovg  %eax,%r12d
mov    $0x9,%eax
mov    %rdx,0x38(%rsp)
sub    %edx,%eax
mov    0x18(%rsp),%ecx
cmp    %eax,%ecx
cmovl  %ecx,%eax
mov    0x40(%rsp),%rcx
lea    (%rcx,%rbx,4),%ecx
cmp    %ecx,%eax
cmovge %ecx,%eax
add    $0x4,%esi
cmp    %esi,%eax
cmovl  %eax,%esi
mov    %esi,0x28(%rsp)
cmp    %esi,%r12d
jg     1250 <test+0x140>
mov    0x38(%rsp),%rax
add    $0x4,%eax
mov    %eax,0x24(%rsp)
mov    0x30(%rsp),%rax
sub    %ebx,%eax
mov    %eax,0x2c(%rsp)
jmp    12f3 <test+0x1e3>
nopl   0x0(%rax)
lea    0x1(%r12),%eax
cmp    0x28(%rsp),%r12d
mov    %eax,%r12d
jge    1250 <test+0x140>
mov    0x8(%rsp),%rax
lea    (%r12,%rax,1),%ecx
add    %r12d,%eax
add    $0x1,%eax
cmp    $0xfffffffe,%ecx
jg     1320 <test+0x210>
mov    %ecx,%esi
neg    %esi
shr    $0x1f,%esi
sub    %ecx,%esi
sar    %esi
jmp    1326 <test+0x216>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %eax,%esi
shr    %esi
neg    %esi
lea    (%r12,%r12,2),%r8d
lea    (%r8,%rsi,4),%ebp
mov    0x38(%rsp),%rsi
sub    %r12d,%esi
mov    $0x1,%edi
sub    %r12d,%edi
js     1360 <test+0x250>
and    $0xfffffffc,%edi
mov    %esi,%edx
sub    %edi,%edx
add    $0x4,%ebp
cmp    %edx,%ebp
jg     137c <test+0x26c>
neg    %edi
jmp    1390 <test+0x280>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    0x2(%r12),%edx
lea    0x5(%r12),%edi
test   %edx,%edx
cmovns %edx,%edi
and    $0xfffffffc,%edi
lea    (%rdi,%rsi,1),%edx
add    $0x4,%ebp
cmp    %edx,%ebp
jle    1390 <test+0x280>
cmp    $0xfffffffe,%ecx
jg     13a0 <test+0x290>
mov    %ecx,%eax
neg    %eax
shr    $0x1f,%eax
sub    %ecx,%eax
sar    %eax
jmp    13a4 <test+0x294>
xchg   %ax,%ax
lea    (%rsi,%rdi,1),%r14d
add    $0x2,%r14d
jmp    13ac <test+0x29c>
nopw   0x0(%rax,%rax,1)
shr    %eax
neg    %eax
lea    (%r8,%rax,4),%r14d
add    $0x6,%r14d
mov    $0xa,%r15d
sub    %r12d,%r15d
mov    0x24(%rsp),%eax
cmp    %r15d,%eax
cmovl  %eax,%r15d
lea    -0x2(%r12),%eax
cmp    %eax,%r15d
cmovge %eax,%r15d
cmp    %r15d,%r14d
jg     12e0 <test+0x1d0>
mov    %r12d,%r13d
sub    %r14d,%r13d
mov    $0x4,%ebp
sub    %r14d,%ebp
jmp    1453 <test+0x343>
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0x1,%edi
xor    %eax,%eax
call   1030 <hash@plt>
mov    0x2c(%rsp),%edi
xor    %eax,%eax
call   1030 <hash@plt>
mov    %ebx,%edi
xor    %eax,%eax
call   1030 <hash@plt>
lea    (%r12,%r14,1),%eax
add    $0xfffffffe,%eax
lea    (%r12,%r14,1),%edi
add    $0x1,%edi
test   %eax,%eax
cmovns %eax,%edi
sar    $0x2,%edi
xor    %eax,%eax
call   1030 <hash@plt>
mov    %r13d,%edi
shr    $0x1f,%edi
add    %r13d,%edi
sar    %edi
xor    %eax,%eax
call   1030 <hash@plt>
add    $0x4,%r14d
add    $0xfffffffc,%r13d
add    $0xfffffffc,%ebp
cmp    %r15d,%r14d
jg     12e0 <test+0x1d0>
lea    -0x1(%r14),%eax
test   %r14d,%r14d
jle    1470 <test+0x360>
mov    %eax,%ecx
shr    $0x2,%ecx
cmp    %ecx,%ebx
jg     143f <test+0x32f>
jmp    1481 <test+0x371>
nopw   0x0(%rax,%rax,1)
lea    0x3(%rbp),%ecx
test   %ebp,%ebp
cmovns %ebp,%ecx
sar    $0x2,%ecx
neg    %ecx
cmp    %ecx,%ebx
jg     143f <test+0x32f>
cmp    $0x3,%r14d
jg     14a0 <test+0x390>
lea    0x3(%rbp),%eax
test   %ebp,%ebp
cmovns %ebp,%eax
sar    $0x2,%eax
neg    %eax
cmp    %eax,%ebx
jl     143f <test+0x32f>
jmp    13f0 <test+0x2e0>
nopl   (%rax)
shr    $0x2,%eax
cmp    %eax,%ebx
jl     143f <test+0x32f>
jmp    13f0 <test+0x2e0>
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
%9 = alloca i32
%10 = alloca i32
store i32 %0, i32* %2
%11 = load i32, i32* %2
%12 = icmp sge i32 %11, 3
br i1 %12, label %13, label %602
13: ; preds = %1
store i32 -1, i32* %3
br label %14
14: ; preds = %598, %13
%15 = load i32, i32* %3
%16 = load i32, i32* %2
%17 = add nsw i32 %16, 2
%18 = icmp slt i32 %17, 0
br i1 %18, label %19, label %27
19: ; preds = %14
%20 = load i32, i32* %2
%21 = add nsw i32 %20, 2
%22 = sub nsw i32 0, %21
%23 = add nsw i32 %22, 4
%24 = sub nsw i32 %23, 1
%25 = sdiv i32 %24, 4
%26 = sub nsw i32 0, %25
br label %31
27: ; preds = %14
%28 = load i32, i32* %2
%29 = add nsw i32 %28, 2
%30 = sdiv i32 %29, 4
br label %31
31: ; preds = %27, %19
%32 = phi i32 [ %26, %19 ], [ %30, %27 ]
%33 = icmp slt i32 2, %32
br i1 %33, label %34, label %35
34: ; preds = %31
br label %53
35: ; preds = %31
%36 = load i32, i32* %2
%37 = add nsw i32 %36, 2
%38 = icmp slt i32 %37, 0
br i1 %38, label %39, label %47
39: ; preds = %35
%40 = load i32, i32* %2
%41 = add nsw i32 %40, 2
%42 = sub nsw i32 0, %41
%43 = add nsw i32 %42, 4
%44 = sub nsw i32 %43, 1
%45 = sdiv i32 %44, 4
%46 = sub nsw i32 0, %45
br label %51
47: ; preds = %35
%48 = load i32, i32* %2
%49 = add nsw i32 %48, 2
%50 = sdiv i32 %49, 4
br label %51
51: ; preds = %47, %39
%52 = phi i32 [ %46, %39 ], [ %50, %47 ]
br label %53
53: ; preds = %51, %34
%54 = phi i32 [ 2, %34 ], [ %52, %51 ]
%55 = icmp sle i32 %15, %54
br i1 %55, label %56, label %601
56: ; preds = %53
%57 = load i32, i32* %3
%58 = mul nsw i32 2, %57
%59 = load i32, i32* %2
%60 = sub nsw i32 %58, %59
%61 = add nsw i32 %60, 1
%62 = icmp slt i32 %61, 0
br i1 %62, label %63, label %72
63: ; preds = %56
%64 = load i32, i32* %3
%65 = mul nsw i32 2, %64
%66 = load i32, i32* %2
%67 = sub nsw i32 %65, %66
%68 = add nsw i32 %67, 1
%69 = sub nsw i32 0, %68
%70 = sdiv i32 %69, 4
%71 = sub nsw i32 0, %70
br label %81
72: ; preds = %56
%73 = load i32, i32* %3
%74 = mul nsw i32 2, %73
%75 = load i32, i32* %2
%76 = sub nsw i32 %74, %75
%77 = add nsw i32 %76, 1
%78 = add nsw i32 %77, 4
%79 = sub nsw i32 %78, 1
%80 = sdiv i32 %79, 4
br label %81
81: ; preds = %72, %63
%82 = phi i32 [ %71, %63 ], [ %80, %72 ]
%83 = load i32, i32* %3
%84 = mul nsw i32 4, %83
%85 = load i32, i32* %2
%86 = sub nsw i32 %84, %85
%87 = sub nsw i32 %86, 2
%88 = icmp slt i32 %87, 0
br i1 %88, label %89, label %98
89: ; preds = %81
%90 = load i32, i32* %3
%91 = mul nsw i32 4, %90
%92 = load i32, i32* %2
%93 = sub nsw i32 %91, %92
%94 = sub nsw i32 %93, 2
%95 = sub nsw i32 0, %94
%96 = sdiv i32 %95, 4
%97 = sub nsw i32 0, %96
br label %107
98: ; preds = %81
%99 = load i32, i32* %3
%100 = mul nsw i32 4, %99
%101 = load i32, i32* %2
%102 = sub nsw i32 %100, %101
%103 = sub nsw i32 %102, 2
%104 = add nsw i32 %103, 4
%105 = sub nsw i32 %104, 1
%106 = sdiv i32 %105, 4
br label %107
107: ; preds = %98, %89
%108 = phi i32 [ %97, %89 ], [ %106, %98 ]
%109 = icmp sgt i32 %82, %108
br i1 %109, label %110, label %137
110: ; preds = %107
%111 = load i32, i32* %3
%112 = mul nsw i32 2, %111
%113 = load i32, i32* %2
%114 = sub nsw i32 %112, %113
%115 = add nsw i32 %114, 1
%116 = icmp slt i32 %115, 0
br i1 %116, label %117, label %126
117: ; preds = %110
%118 = load i32, i32* %3
%119 = mul nsw i32 2, %118
%120 = load i32, i32* %2
%121 = sub nsw i32 %119, %120
%122 = add nsw i32 %121, 1
%123 = sub nsw i32 0, %122
%124 = sdiv i32 %123, 4
%125 = sub nsw i32 0, %124
br label %135
126: ; preds = %110
%127 = load i32, i32* %3
%128 = mul nsw i32 2, %127
%129 = load i32, i32* %2
%130 = sub nsw i32 %128, %129
%131 = add nsw i32 %130, 1
%132 = add nsw i32 %131, 4
%133 = sub nsw i32 %132, 1
%134 = sdiv i32 %133, 4
br label %135
135: ; preds = %126, %117
%136 = phi i32 [ %125, %117 ], [ %134, %126 ]
br label %164
137: ; preds = %107
%138 = load i32, i32* %3
%139 = mul nsw i32 4, %138
%140 = load i32, i32* %2
%141 = sub nsw i32 %139, %140
%142 = sub nsw i32 %141, 2
%143 = icmp slt i32 %142, 0
br i1 %143, label %144, label %153
144: ; preds = %137
%145 = load i32, i32* %3
%146 = mul nsw i32 4, %145
%147 = load i32, i32* %2
%148 = sub nsw i32 %146, %147
%149 = sub nsw i32 %148, 2
%150 = sub nsw i32 0, %149
%151 = sdiv i32 %150, 4
%152 = sub nsw i32 0, %151
br label %162
153: ; preds = %137
%154 = load i32, i32* %3
%155 = mul nsw i32 4, %154
%156 = load i32, i32* %2
%157 = sub nsw i32 %155, %156
%158 = sub nsw i32 %157, 2
%159 = add nsw i32 %158, 4
%160 = sub nsw i32 %159, 1
%161 = sdiv i32 %160, 4
br label %162
162: ; preds = %153, %144
%163 = phi i32 [ %152, %144 ], [ %161, %153 ]
br label %164
164: ; preds = %162, %135
%165 = phi i32 [ %136, %135 ], [ %163, %162 ]
store i32 %165, i32* %4
br label %166
166: ; preds = %594, %164
%167 = load i32, i32* %4
%168 = load i32, i32* %3
%169 = icmp slt i32 %168, 0
br i1 %169, label %170, label %177
170: ; preds = %166
%171 = load i32, i32* %3
%172 = sub nsw i32 0, %171
%173 = add nsw i32 %172, 2
%174 = sub nsw i32 %173, 1
%175 = sdiv i32 %174, 2
%176 = sub nsw i32 0, %175
br label %180
177: ; preds = %166
%178 = load i32, i32* %3
%179 = sdiv i32 %178, 2
br label %180
180: ; preds = %177, %170
%181 = phi i32 [ %176, %170 ], [ %179, %177 ]
%182 = icmp slt i32 0, %181
br i1 %182, label %183, label %184
183: ; preds = %180
br label %199
184: ; preds = %180
%185 = load i32, i32* %3
%186 = icmp slt i32 %185, 0
br i1 %186, label %187, label %194
187: ; preds = %184
%188 = load i32, i32* %3
%189 = sub nsw i32 0, %188
%190 = add nsw i32 %189, 2
%191 = sub nsw i32 %190, 1
%192 = sdiv i32 %191, 2
%193 = sub nsw i32 0, %192
br label %197
194: ; preds = %184
%195 = load i32, i32* %3
%196 = sdiv i32 %195, 2
br label %197
197: ; preds = %194, %187
%198 = phi i32 [ %193, %187 ], [ %196, %194 ]
br label %199
199: ; preds = %197, %183
%200 = phi i32 [ 0, %183 ], [ %198, %197 ]
%201 = icmp sle i32 %167, %200
br i1 %201, label %202, label %597
202: ; preds = %199
%203 = load i32, i32* %4
%204 = mul nsw i32 -4, %203
%205 = sub nsw i32 %204, 2
%206 = load i32, i32* %4
%207 = mul nsw i32 4, %206
%208 = add nsw i32 %207, 3
%209 = icmp sgt i32 %205, %208
br i1 %209, label %210, label %214
210: ; preds = %202
%211 = load i32, i32* %4
%212 = mul nsw i32 -4, %211
%213 = sub nsw i32 %212, 2
br label %218
214: ; preds = %202
%215 = load i32, i32* %4
%216 = mul nsw i32 4, %215
%217 = add nsw i32 %216, 3
br label %218
218: ; preds = %214, %210
%219 = phi i32 [ %213, %210 ], [ %217, %214 ]
%220 = load i32, i32* %3
%221 = mul nsw i32 4, %220
%222 = load i32, i32* %4
%223 = mul nsw i32 4, %222
%224 = sub nsw i32 %221, %223
%225 = add nsw i32 %224, 1
%226 = icmp sgt i32 %219, %225
br i1 %226, label %227, label %245
227: ; preds = %218
%228 = load i32, i32* %4
%229 = mul nsw i32 -4, %228
%230 = sub nsw i32 %229, 2
%231 = load i32, i32* %4
%232 = mul nsw i32 4, %231
%233 = add nsw i32 %232, 3
%234 = icmp sgt i32 %230, %233
br i1 %234, label %235, label %239
235: ; preds = %227
%236 = load i32, i32* %4
%237 = mul nsw i32 -4, %236
%238 = sub nsw i32 %237, 2
br label %243
239: ; preds = %227
%240 = load i32, i32* %4
%241 = mul nsw i32 4, %240
%242 = add nsw i32 %241, 3
br label %243
243: ; preds = %239, %235
%244 = phi i32 [ %238, %235 ], [ %242, %239 ]
br label %252
245: ; preds = %218
%246 = load i32, i32* %3
%247 = mul nsw i32 4, %246
%248 = load i32, i32* %4
%249 = mul nsw i32 4, %248
%250 = sub nsw i32 %247, %249
%251 = add nsw i32 %250, 1
br label %252
252: ; preds = %245, %243
%253 = phi i32 [ %244, %243 ], [ %251, %245 ]
store i32 %253, i32* %5
br label %254
254: ; preds = %590, %252
%255 = load i32, i32* %5
%256 = load i32, i32* %2
%257 = add nsw i32 %256, 3
%258 = load i32, i32* %4
%259 = mul nsw i32 -4, %258
%260 = add nsw i32 %259, 9
%261 = icmp slt i32 %257, %260
br i1 %261, label %262, label %265
262: ; preds = %254
%263 = load i32, i32* %2
%264 = add nsw i32 %263, 3
br label %269
265: ; preds = %254
%266 = load i32, i32* %4
%267 = mul nsw i32 -4, %266
%268 = add nsw i32 %267, 9
br label %269
269: ; preds = %265, %262
%270 = phi i32 [ %264, %262 ], [ %268, %265 ]
%271 = load i32, i32* %4
%272 = mul nsw i32 4, %271
%273 = load i32, i32* %2
%274 = mul nsw i32 2, %273
%275 = add nsw i32 %272, %274
%276 = icmp slt i32 %270, %275
br i1 %276, label %277, label %293
277: ; preds = %269
%278 = load i32, i32* %2
%279 = add nsw i32 %278, 3
%280 = load i32, i32* %4
%281 = mul nsw i32 -4, %280
%282 = add nsw i32 %281, 9
%283 = icmp slt i32 %279, %282
br i1 %283, label %284, label %287
284: ; preds = %277
%285 = load i32, i32* %2
%286 = add nsw i32 %285, 3
br label %291
287: ; preds = %277
%288 = load i32, i32* %4
%289 = mul nsw i32 -4, %288
%290 = add nsw i32 %289, 9
br label %291
291: ; preds = %287, %284
%292 = phi i32 [ %286, %284 ], [ %290, %287 ]
br label %299
293: ; preds = %269
%294 = load i32, i32* %4
%295 = mul nsw i32 4, %294
%296 = load i32, i32* %2
%297 = mul nsw i32 2, %296
%298 = add nsw i32 %295, %297
br label %299
299: ; preds = %293, %291
%300 = phi i32 [ %292, %291 ], [ %298, %293 ]
%301 = load i32, i32* %3
%302 = mul nsw i32 4, %301
%303 = load i32, i32* %4
%304 = mul nsw i32 4, %303
%305 = sub nsw i32 %302, %304
%306 = add nsw i32 %305, 4
%307 = icmp slt i32 %300, %306
br i1 %307, label %308, label %354
308: ; preds = %299
%309 = load i32, i32* %2
%310 = add nsw i32 %309, 3
%311 = load i32, i32* %4
%312 = mul nsw i32 -4, %311
%313 = add nsw i32 %312, 9
%314 = icmp slt i32 %310, %313
br i1 %314, label %315, label %318
315: ; preds = %308
%316 = load i32, i32* %2
%317 = add nsw i32 %316, 3
br label %322
318: ; preds = %308
%319 = load i32, i32* %4
%320 = mul nsw i32 -4, %319
%321 = add nsw i32 %320, 9
br label %322
322: ; preds = %318, %315
%323 = phi i32 [ %317, %315 ], [ %321, %318 ]
%324 = load i32, i32* %4
%325 = mul nsw i32 4, %324
%326 = load i32, i32* %2
%327 = mul nsw i32 2, %326
%328 = add nsw i32 %325, %327
%329 = icmp slt i32 %323, %328
br i1 %329, label %330, label %346
330: ; preds = %322
%331 = load i32, i32* %2
%332 = add nsw i32 %331, 3
%333 = load i32, i32* %4
%334 = mul nsw i32 -4, %333
%335 = add nsw i32 %334, 9
%336 = icmp slt i32 %332, %335
br i1 %336, label %337, label %340
337: ; preds = %330
%338 = load i32, i32* %2
%339 = add nsw i32 %338, 3
br label %344
340: ; preds = %330
%341 = load i32, i32* %4
%342 = mul nsw i32 -4, %341
%343 = add nsw i32 %342, 9
br label %344
344: ; preds = %340, %337
%345 = phi i32 [ %339, %337 ], [ %343, %340 ]
br label %352
346: ; preds = %322
%347 = load i32, i32* %4
%348 = mul nsw i32 4, %347
%349 = load i32, i32* %2
%350 = mul nsw i32 2, %349
%351 = add nsw i32 %348, %350
br label %352
352: ; preds = %346, %344
%353 = phi i32 [ %345, %344 ], [ %351, %346 ]
br label %361
354: ; preds = %299
%355 = load i32, i32* %3
%356 = mul nsw i32 4, %355
%357 = load i32, i32* %4
%358 = mul nsw i32 4, %357
%359 = sub nsw i32 %356, %358
%360 = add nsw i32 %359, 4
br label %361
361: ; preds = %354, %352
%362 = phi i32 [ %353, %352 ], [ %360, %354 ]
%363 = icmp sle i32 %255, %362
br i1 %363, label %364, label %593
364: ; preds = %361
%365 = load i32, i32* %5
%366 = mul nsw i32 3, %365
%367 = load i32, i32* %5
%368 = load i32, i32* %2
%369 = add nsw i32 %367, %368
%370 = add nsw i32 %369, 1
%371 = icmp slt i32 %370, 0
br i1 %371, label %372, label %382
372: ; preds = %364
%373 = load i32, i32* %5
%374 = load i32, i32* %2
%375 = add nsw i32 %373, %374
%376 = add nsw i32 %375, 1
%377 = sub nsw i32 0, %376
%378 = add nsw i32 %377, 2
%379 = sub nsw i32 %378, 1
%380 = sdiv i32 %379, 2
%381 = sub nsw i32 0, %380
br label %388
382: ; preds = %364
%383 = load i32, i32* %5
%384 = load i32, i32* %2
%385 = add nsw i32 %383, %384
%386 = add nsw i32 %385, 1
%387 = sdiv i32 %386, 2
br label %388
388: ; preds = %382, %372
%389 = phi i32 [ %381, %372 ], [ %387, %382 ]
%390 = mul nsw i32 4, %389
%391 = sub nsw i32 %366, %390
%392 = add nsw i32 %391, 6
%393 = load i32, i32* %4
%394 = mul nsw i32 4, %393
%395 = load i32, i32* %5
%396 = sub nsw i32 %394, %395
%397 = load i32, i32* %5
%398 = sub nsw i32 0, %397
%399 = add nsw i32 %398, 1
%400 = icmp slt i32 %399, 0
br i1 %400, label %401, label %410
401: ; preds = %388
%402 = load i32, i32* %5
%403 = sub nsw i32 0, %402
%404 = add nsw i32 %403, 1
%405 = sub nsw i32 0, %404
%406 = add nsw i32 %405, 4
%407 = sub nsw i32 %406, 1
%408 = sdiv i32 %407, 4
%409 = sub nsw i32 0, %408
br label %415
410: ; preds = %388
%411 = load i32, i32* %5
%412 = sub nsw i32 0, %411
%413 = add nsw i32 %412, 1
%414 = sdiv i32 %413, 4
br label %415
415: ; preds = %410, %401
%416 = phi i32 [ %409, %401 ], [ %414, %410 ]
%417 = mul nsw i32 4, %416
%418 = sub nsw i32 %396, %417
%419 = add nsw i32 %418, 2
%420 = icmp sgt i32 %392, %419
br i1 %420, label %421, label %450
421: ; preds = %415
%422 = load i32, i32* %5
%423 = mul nsw i32 3, %422
%424 = load i32, i32* %5
%425 = load i32, i32* %2
%426 = add nsw i32 %424, %425
%427 = add nsw i32 %426, 1
%428 = icmp slt i32 %427, 0
br i1 %428, label %429, label %439
429: ; preds = %421
%430 = load i32, i32* %5
%431 = load i32, i32* %2
%432 = add nsw i32 %430, %431
%433 = add nsw i32 %432, 1
%434 = sub nsw i32 0, %433
%435 = add nsw i32 %434, 2
%436 = sub nsw i32 %435, 1
%437 = sdiv i32 %436, 2
%438 = sub nsw i32 0, %437
br label %445
439: ; preds = %421
%440 = load i32, i32* %5
%441 = load i32, i32* %2
%442 = add nsw i32 %440, %441
%443 = add nsw i32 %442, 1
%444 = sdiv i32 %443, 2
br label %445
445: ; preds = %439, %429
%446 = phi i32 [ %438, %429 ], [ %444, %439 ]
%447 = mul nsw i32 4, %446
%448 = sub nsw i32 %423, %447
%449 = add nsw i32 %448, 6
br label %478
450: ; preds = %415
%451 = load i32, i32* %4
%452 = mul nsw i32 4, %451
%453 = load i32, i32* %5
%454 = sub nsw i32 %452, %453
%455 = load i32, i32* %5
%456 = sub nsw i32 0, %455
%457 = add nsw i32 %456, 1
%458 = icmp slt i32 %457, 0
br i1 %458, label %459, label %468
459: ; preds = %450
%460 = load i32, i32* %5
%461 = sub nsw i32 0, %460
%462 = add nsw i32 %461, 1
%463 = sub nsw i32 0, %462
%464 = add nsw i32 %463, 4
%465 = sub nsw i32 %464, 1
%466 = sdiv i32 %465, 4
%467 = sub nsw i32 0, %466
br label %473
468: ; preds = %450
%469 = load i32, i32* %5
%470 = sub nsw i32 0, %469
%471 = add nsw i32 %470, 1
%472 = sdiv i32 %471, 4
br label %473
473: ; preds = %468, %459
%474 = phi i32 [ %467, %459 ], [ %472, %468 ]
%475 = mul nsw i32 4, %474
%476 = sub nsw i32 %454, %475
%477 = add nsw i32 %476, 2
br label %478
478: ; preds = %473, %445
%479 = phi i32 [ %449, %445 ], [ %477, %473 ]
store i32 %479, i32* %6
br label %480
480: ; preds = %586, %478
%481 = load i32, i32* %6
%482 = load i32, i32* %4
%483 = mul nsw i32 4, %482
%484 = add nsw i32 %483, 4
%485 = load i32, i32* %5
%486 = sub nsw i32 0, %485
%487 = add nsw i32 %486, 10
%488 = icmp slt i32 %484, %487
br i1 %488, label %489, label %493
489: ; preds = %480
%490 = load i32, i32* %4
%491 = mul nsw i32 4, %490
%492 = add nsw i32 %491, 4
br label %497
493: ; preds = %480
%494 = load i32, i32* %5
%495 = sub nsw i32 0, %494
%496 = add nsw i32 %495, 10
br label %497
497: ; preds = %493, %489
%498 = phi i32 [ %492, %489 ], [ %496, %493 ]
%499 = load i32, i32* %5
%500 = sub nsw i32 %499, 2
%501 = icmp slt i32 %498, %500
br i1 %501, label %502, label %520
502: ; preds = %497
%503 = load i32, i32* %4
%504 = mul nsw i32 4, %503
%505 = add nsw i32 %504, 4
%506 = load i32, i32* %5
%507 = sub nsw i32 0, %506
%508 = add nsw i32 %507, 10
%509 = icmp slt i32 %505, %508
br i1 %509, label %510, label %514
510: ; preds = %502
%511 = load i32, i32* %4
%512 = mul nsw i32 4, %511
%513 = add nsw i32 %512, 4
br label %518
514: ; preds = %502
%515 = load i32, i32* %5
%516 = sub nsw i32 0, %515
%517 = add nsw i32 %516, 10
br label %518
518: ; preds = %514, %510
%519 = phi i32 [ %513, %510 ], [ %517, %514 ]
br label %523
520: ; preds = %497
%521 = load i32, i32* %5
%522 = sub nsw i32 %521, 2
br label %523
523: ; preds = %520, %518
%524 = phi i32 [ %519, %518 ], [ %522, %520 ]
%525 = icmp sle i32 %481, %524
br i1 %525, label %526, label %589
526: ; preds = %523
%527 = load i32, i32* %4
%528 = load i32, i32* %6
%529 = sub nsw i32 %528, 1
%530 = icmp slt i32 %529, 0
br i1 %530, label %531, label %539
531: ; preds = %526
%532 = load i32, i32* %6
%533 = sub nsw i32 %532, 1
%534 = sub nsw i32 0, %533
%535 = add nsw i32 %534, 4
%536 = sub nsw i32 %535, 1
%537 = sdiv i32 %536, 4
%538 = sub nsw i32 0, %537
br label %543
539: ; preds = %526
%540 = load i32, i32* %6
%541 = sub nsw i32 %540, 1
%542 = sdiv i32 %541, 4
br label %543
543: ; preds = %539, %531
%544 = phi i32 [ %538, %531 ], [ %542, %539 ]
%545 = icmp sle i32 %527, %544
br i1 %545, label %546, label %585
546: ; preds = %543
%547 = load i32, i32* %4
%548 = load i32, i32* %6
%549 = sub nsw i32 %548, 4
%550 = icmp slt i32 %549, 0
br i1 %550, label %551, label %557
551: ; preds = %546
%552 = load i32, i32* %6
%553 = sub nsw i32 %552, 4
%554 = sub nsw i32 0, %553
%555 = sdiv i32 %554, 4
%556 = sub nsw i32 0, %555
br label %563
557: ; preds = %546
%558 = load i32, i32* %6
%559 = sub nsw i32 %558, 4
%560 = add nsw i32 %559, 4
%561 = sub nsw i32 %560, 1
%562 = sdiv i32 %561, 4
br label %563
563: ; preds = %557, %551
%564 = phi i32 [ %556, %551 ], [ %562, %557 ]
%565 = icmp sge i32 %547, %564
br i1 %565, label %566, label %585
566: ; preds = %563
%567 = call i32 (i32, ...) bitcast (i32 (...)* @hash to i32 (i32, ...)*)(i32 1)
%568 = load i32, i32* %3
%569 = load i32, i32* %4
%570 = sub nsw i32 %568, %569
%571 = call i32 (i32, ...) bitcast (i32 (...)* @hash to i32 (i32, ...)*)(i32 %570)
%572 = load i32, i32* %4
%573 = call i32 (i32, ...) bitcast (i32 (...)* @hash to i32 (i32, ...)*)(i32 %572)
%574 = load i32, i32* %5
%575 = load i32, i32* %6
%576 = add nsw i32 %574, %575
%577 = sub nsw i32 %576, 2
%578 = sdiv i32 %577, 4
%579 = call i32 (i32, ...) bitcast (i32 (...)* @hash to i32 (i32, ...)*)(i32 %578)
%580 = load i32, i32* %5
%581 = load i32, i32* %6
%582 = sub nsw i32 %580, %581
%583 = sdiv i32 %582, 2
%584 = call i32 (i32, ...) bitcast (i32 (...)* @hash to i32 (i32, ...)*)(i32 %583)
br label %585
585: ; preds = %566, %563, %543
br label %586
586: ; preds = %585
%587 = load i32, i32* %6
%588 = add nsw i32 %587, 4
store i32 %588, i32* %6
br label %480
589: ; preds = %523
br label %590
590: ; preds = %589
%591 = load i32, i32* %5
%592 = add nsw i32 %591, 1
store i32 %592, i32* %5
br label %254
593: ; preds = %361
br label %594
594: ; preds = %593
%595 = load i32, i32* %4
%596 = add nsw i32 %595, 1
store i32 %596, i32* %4
br label %166
597: ; preds = %199
br label %598
598: ; preds = %597
%599 = load i32, i32* %3
%600 = add nsw i32 %599, 1
store i32 %600, i32* %3
br label %14
601: ; preds = %53
br label %602
602: ; preds = %601, %1
ret void
}

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