#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 c1, c2;
  int i, j;
  for (c1 = 1; c1 <= 4; c1++) {
    for (c2 = 5; c2 <= M - 10; c2++) {
      {
        hash(1);
        hash(c1);
        hash(c2);
      };
    }
  }
  for (c1 = 5; c1 <= ((M - 10) < (9) ? (M - 10) : (9)); c1++) {
    for (c2 = -c1 + 1; c2 <= 4; c2++) {
      i = c1 + c2;
      {
        hash(2);
        hash(c1 + c2);
        hash(c1);
      };
    }
    for (c2 = 5; c2 <= M - 10; c2++) {
      {
        hash(1);
        hash(c1);
        hash(c2);
      };
      i = c1 + c2;
      {
        hash(2);
        hash(c1 + c2);
        hash(c1);
      };
    }
    for (c2 = M - 9; c2 <= -c1 + M; c2++) {
      i = c1 + c2;
      {
        hash(2);
        hash(c1 + c2);
        hash(c1);
      };
    }
  }
  if (M >= 20) {
    for (c2 = -9; c2 <= 4; c2++) {
      i = c2 + 10;
      {
        hash(2);
        hash(c2 + 10);
        hash(10);
      };
    }
    for (c2 = 5; c2 <= M - 10; c2++) {
      {
        hash(1);
        hash(10);
        hash(c2);
      };
      i = c2 + 10;
      {
        hash(2);
        hash(c2 + 10);
        hash(10);
      };
    }
  }
  for (c1 = 11; c1 <= M - 10; c1++) {
    for (c2 = -c1 + 1; c2 <= 4; c2++) {
      i = c1 + c2;
      {
        hash(2);
        hash(c1 + c2);
        hash(c1);
      };
    }
    for (c2 = 5; c2 <= -c1 + M; c2++) {
      {
        hash(1);
        hash(c1);
        hash(c2);
      };
      i = c1 + c2;
      {
        hash(2);
        hash(c1 + c2);
        hash(c1);
      };
    }
    for (c2 = -c1 + M + 1; c2 <= M - 10; c2++) {
      {
        hash(1);
        hash(c1);
        hash(c2);
      };
    }
  }
  for (c1 = M - 9; c1 <= M; c1++) {
    for (c2 = 5; c2 <= M - 10; c2++) {
      {
        hash(1);
        hash(c1);
        hash(c2);
      };
    }
  }
}


x86 assembly (clang, -O0):
<test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
cmpl   $0x4,-0x8(%rbp)
jg     117f <test+0x6f>
movl   $0x5,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0xa,%ecx
cmp    %ecx,%eax
jg     116c <test+0x5c>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1133 <test+0x23>
jmp    1171 <test+0x61>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1122 <test+0x12>
movl   $0x5,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
sub    $0xa,%eax
cmp    $0x9,%eax
jge    11a9 <test+0x99>
mov    -0x4(%rbp),%eax
sub    $0xa,%eax
mov    %eax,-0x1c(%rbp)
jmp    11b6 <test+0xa6>
mov    $0x9,%eax
mov    %eax,-0x1c(%rbp)
jmp    11b6 <test+0xa6>
mov    -0x18(%rbp),%eax
mov    -0x1c(%rbp),%ecx
cmp    %ecx,%eax
jg     12d6 <test+0x1c6>
xor    %eax,%eax
sub    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jg     120d <test+0xfd>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
add    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11cf <test+0xbf>
movl   $0x5,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0xa,%ecx
cmp    %ecx,%eax
jg     1273 <test+0x163>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
add    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1214 <test+0x104>
mov    -0x4(%rbp),%eax
sub    $0x9,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
xor    %ecx,%ecx
sub    -0x8(%rbp),%ecx
add    -0x4(%rbp),%ecx
cmp    %ecx,%eax
jg     12c3 <test+0x1b3>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
add    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    127c <test+0x16c>
jmp    12c8 <test+0x1b8>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1186 <test+0x76>
cmpl   $0x14,-0x4(%rbp)
jl     1396 <test+0x286>
movl   $0xfffffff7,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jg     1327 <test+0x217>
mov    -0xc(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x10(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
add    $0xa,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12e7 <test+0x1d7>
movl   $0x5,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0xa,%ecx
cmp    %ecx,%eax
jg     1391 <test+0x281>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x10(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
add    $0xa,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    132e <test+0x21e>
jmp    1396 <test+0x286>
movl   $0xb,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0xa,%ecx
cmp    %ecx,%eax
jg     14b9 <test+0x3a9>
xor    %eax,%eax
sub    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jg     13f7 <test+0x2e7>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
add    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13b9 <test+0x2a9>
movl   $0x5,-0xc(%rbp)
mov    -0xc(%rbp),%eax
xor    %ecx,%ecx
sub    -0x8(%rbp),%ecx
add    -0x4(%rbp),%ecx
cmp    %ecx,%eax
jg     145f <test+0x34f>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
add    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13fe <test+0x2ee>
xor    %eax,%eax
sub    -0x8(%rbp),%eax
add    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0xa,%ecx
cmp    %ecx,%eax
jg     14a6 <test+0x396>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    146d <test+0x35d>
jmp    14ab <test+0x39b>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    139d <test+0x28d>
mov    -0x4(%rbp),%eax
sub    $0x9,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1521 <test+0x411>
movl   $0x5,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0xa,%ecx
cmp    %ecx,%eax
jg     150e <test+0x3fe>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    -0x8(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%edi
call   1030 <hash@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    14d5 <test+0x3c5>
jmp    1513 <test+0x403>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14c2 <test+0x3b2>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %edi,%r14d
cmp    $0xf,%edi
jl     1216 <test+0x106>
mov    $0xe,%ebp
nop
lea    -0x9(%rbp),%ebx
mov    $0x1,%edi
call   1030 <hash@plt>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
cmp    %ebp,%r14d
jne    1130 <test+0x20>
cmp    $0xf,%r14d
jl     1216 <test+0x106>
mov    $0xe,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
lea    -0x9(%rbp),%ebx
mov    $0x1,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
cmp    %ebp,%r14d
jne    1170 <test+0x60>
cmp    $0xf,%r14d
jl     1216 <test+0x106>
mov    $0xe,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    -0x9(%rbp),%ebx
mov    $0x1,%edi
call   1030 <hash@plt>
mov    $0x3,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
cmp    %ebp,%r14d
jne    11b0 <test+0xa0>
cmp    $0xf,%r14d
jl     1216 <test+0x106>
mov    $0xe,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    -0x9(%rbp),%ebx
mov    $0x1,%edi
call   1030 <hash@plt>
mov    $0x4,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
cmp    %ebp,%r14d
jne    11f0 <test+0xe0>
lea    -0x9(%r14),%eax
mov    %rax,0x28(%rsp)
lea    -0xa(%r14),%eax
cmp    $0x9,%eax
mov    $0x9,%ecx
mov    %eax,0x1c(%rsp)
cmovl  %eax,%ecx
mov    %ecx,0xc(%rsp)
cmp    $0x5,%ecx
mov    %r14,0x10(%rsp)
jge    14b5 <test+0x3a5>
cmp    $0x14,%r14d
mov    0x28(%rsp),%r12
jl     144d <test+0x33d>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x1,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x3,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x4,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x5,%r15d
mov    $0x5,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x6,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x7,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x8,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0x9,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0xb,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0xc,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0xd,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    $0xe,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
nopl   (%rax)
mov    $0x1,%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
mov    %r15d,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
lea    0xa(%r15),%edi
call   1030 <hash@plt>
mov    $0xa,%edi
call   1030 <hash@plt>
add    $0x1,%r15d
cmp    %r12d,%r15d
jne    1400 <test+0x2f0>
cmpl   $0x15,0x10(%rsp)
jge    15d7 <test+0x4c7>
mov    0x10(%rsp),%r14
jmp    146d <test+0x35d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    0x1(%r12),%eax
cmp    %r14d,%r12d
mov    %eax,%r12d
jge    14a6 <test+0x396>
cmp    $0xf,%r14d
jl     1460 <test+0x350>
mov    $0xe,%ebp
nopl   0x0(%rax,%rax,1)
lea    -0x9(%rbp),%ebx
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %r12d,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
cmp    %ebp,%r14d
jne    1480 <test+0x370>
jmp    1460 <test+0x350>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    -0x4(%r14),%eax
mov    %rax,0x20(%rsp)
lea    -0xe(%r14),%r13d
mov    $0x5,%ebp
mov    $0xfffffff7,%r15d
mov    $0xa,%r12d
movl   $0x0,0x8(%rsp)
jmp    1501 <test+0x3f1>
nopl   (%rax)
lea    0x1(%rbp),%eax
add    $0xffffffff,%r15d
add    $0x1,%r12d
addl   $0x1,0x8(%rsp)
cmp    0xc(%rsp),%ebp
mov    %eax,%ebp
mov    0x10(%rsp),%r14
je     1244 <test+0x134>
mov    $0x1,%ebx
cs nopw 0x0(%rax,%rax,1)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
lea    (%r15,%rbx,1),%eax
add    $0x1,%eax
mov    %ebx,%ecx
add    $0x1,%ecx
mov    %ecx,%ebx
cmp    $0x1,%eax
jne    1510 <test+0x400>
cmp    $0xf,%r14d
jl     158f <test+0x47f>
xor    %r14d,%r14d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    0x5(%r14),%ebx
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
lea    (%r12,%r14,1),%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
add    $0x1,%r14d
cmp    %r14d,%r13d
jne    1550 <test+0x440>
mov    0x10(%rsp),%rax
sub    %ebp,%eax
cmp    %eax,0x28(%rsp)
mov    0x20(%rsp),%r14
jg     14e0 <test+0x3d0>
mov    0x8(%rsp),%eax
mov    %eax,%ebx
nopl   0x0(%rax,%rax,1)
mov    $0x2,%edi
call   1030 <hash@plt>
lea    (%r14,%rbx,1),%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
add    $0x1,%ebx
cmp    $0x5,%ebx
jne    15b0 <test+0x4a0>
jmp    14e0 <test+0x3d0>
mov    0x10(%rsp),%rax
neg    %eax
mov    %rax,0x30(%rsp)
mov    $0xb,%r15d
mov    $0xfffffff1,%r13d
movl   $0x10,0x20(%rsp)
movl   $0x1,0x8(%rsp)
mov    0x1c(%rsp),%eax
mov    %eax,%r14d
jmp    1638 <test+0x528>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r15d
add    $0xffffffff,%r14d
add    $0xffffffff,%r13d
addl   $0x1,0x20(%rsp)
add    $0x1,%r12d
mov    %r12d,0x8(%rsp)
mov    0x28(%rsp),%r12
cmp    %r12d,%r15d
je     144d <test+0x33d>
mov    $0x1,%ebx
nopl   (%rax)
mov    $0x2,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
mov    %r15d,%edi
call   1030 <hash@plt>
lea    (%rbx,%r13,1),%eax
add    $0x1,%eax
mov    %ebx,%ecx
add    $0x1,%ecx
mov    %ecx,%ebx
cmp    $0x1,%eax
jne    1640 <test+0x530>
mov    0x10(%rsp),%rax
sub    %r15d,%eax
mov    %eax,0xc(%rsp)
cmp    $0x5,%eax
mov    0x30(%rsp),%r12
jl     16d8 <test+0x5c8>
mov    $0x5,%ebx
mov    0x20(%rsp),%eax
mov    %eax,%ebp
nopl   (%rax)
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %r15d,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
mov    $0x2,%edi
call   1030 <hash@plt>
mov    %ebp,%edi
call   1030 <hash@plt>
mov    %r15d,%edi
call   1030 <hash@plt>
add    $0x1,%ebx
lea    (%r12,%rbp,1),%eax
add    $0x1,%eax
mov    %ebp,%ecx
add    $0x1,%ecx
mov    %ecx,%ebp
cmp    $0x1,%eax
jne    1690 <test+0x580>
mov    0xc(%rsp),%eax
cmp    0x1c(%rsp),%eax
mov    0x8(%rsp),%r12d
jge    1610 <test+0x500>
xor    %ebp,%ebp
nopl   (%rax)
lea    (%r14,%rbp,1),%ebx
mov    $0x1,%edi
call   1030 <hash@plt>
mov    %r15d,%edi
call   1030 <hash@plt>
mov    %ebx,%edi
call   1030 <hash@plt>
add    $0x1,%ebp
cmp    %ebp,%r12d
jne    16f0 <test+0x5e0>
jmp    1610 <test+0x500>

LLVM IR (-O0):
define void @test(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 %0, i32* %2
store i32 1, i32* %3
br label %7
7: ; preds = %26, %1
%8 = load i32, i32* %3
%9 = icmp sle i32 %8, 4
br i1 %9, label %10, label %29
10: ; preds = %7
store i32 5, i32* %4
br label %11
11: ; preds = %22, %10
%12 = load i32, i32* %4
%13 = load i32, i32* %2
%14 = sub nsw i32 %13, 10
%15 = icmp sle i32 %12, %14
br i1 %15, label %16, label %25
16: ; preds = %11
%17 = call i32 @hash(i32 1)
%18 = load i32, i32* %3
%19 = call i32 @hash(i32 %18)
%20 = load i32, i32* %4
%21 = call i32 @hash(i32 %20)
br label %22
22: ; preds = %16
%23 = load i32, i32* %4
%24 = add nsw i32 %23, 1
store i32 %24, i32* %4
br label %11
25: ; preds = %11
br label %26
26: ; preds = %25
%27 = load i32, i32* %3
%28 = add nsw i32 %27, 1
store i32 %28, i32* %3
br label %7
29: ; preds = %7
store i32 5, i32* %3
br label %30
30: ; preds = %113, %29
%31 = load i32, i32* %3
%32 = load i32, i32* %2
%33 = sub nsw i32 %32, 10
%34 = icmp slt i32 %33, 9
br i1 %34, label %35, label %38
35: ; preds = %30
%36 = load i32, i32* %2
%37 = sub nsw i32 %36, 10
br label %39
38: ; preds = %30
br label %39
39: ; preds = %38, %35
%40 = phi i32 [ %37, %35 ], [ 9, %38 ]
%41 = icmp sle i32 %31, %40
br i1 %41, label %42, label %116
42: ; preds = %39
%43 = load i32, i32* %3
%44 = sub nsw i32 0, %43
%45 = add nsw i32 %44, 1
store i32 %45, i32* %4
br label %46
46: ; preds = %60, %42
%47 = load i32, i32* %4
%48 = icmp sle i32 %47, 4
br i1 %48, label %49, label %63
49: ; preds = %46
%50 = load i32, i32* %3
%51 = load i32, i32* %4
%52 = add nsw i32 %50, %51
store i32 %52, i32* %5
%53 = call i32 @hash(i32 2)
%54 = load i32, i32* %3
%55 = load i32, i32* %4
%56 = add nsw i32 %54, %55
%57 = call i32 @hash(i32 %56)
%58 = load i32, i32* %3
%59 = call i32 @hash(i32 %58)
br label %60
60: ; preds = %49
%61 = load i32, i32* %4
%62 = add nsw i32 %61, 1
store i32 %62, i32* %4
br label %46
63: ; preds = %46
store i32 5, i32* %4
br label %64
64: ; preds = %85, %63
%65 = load i32, i32* %4
%66 = load i32, i32* %2
%67 = sub nsw i32 %66, 10
%68 = icmp sle i32 %65, %67
br i1 %68, label %69, label %88
69: ; preds = %64
%70 = call i32 @hash(i32 1)
%71 = load i32, i32* %3
%72 = call i32 @hash(i32 %71)
%73 = load i32, i32* %4
%74 = call i32 @hash(i32 %73)
%75 = load i32, i32* %3
%76 = load i32, i32* %4
%77 = add nsw i32 %75, %76
store i32 %77, i32* %5
%78 = call i32 @hash(i32 2)
%79 = load i32, i32* %3
%80 = load i32, i32* %4
%81 = add nsw i32 %79, %80
%82 = call i32 @hash(i32 %81)
%83 = load i32, i32* %3
%84 = call i32 @hash(i32 %83)
br label %85
85: ; preds = %69
%86 = load i32, i32* %4
%87 = add nsw i32 %86, 1
store i32 %87, i32* %4
br label %64
88: ; preds = %64
%89 = load i32, i32* %2
%90 = sub nsw i32 %89, 9
store i32 %90, i32* %4
br label %91
91: ; preds = %109, %88
%92 = load i32, i32* %4
%93 = load i32, i32* %3
%94 = sub nsw i32 0, %93
%95 = load i32, i32* %2
%96 = add nsw i32 %94, %95
%97 = icmp sle i32 %92, %96
br i1 %97, label %98, label %112
98: ; preds = %91
%99 = load i32, i32* %3
%100 = load i32, i32* %4
%101 = add nsw i32 %99, %100
store i32 %101, i32* %5
%102 = call i32 @hash(i32 2)
%103 = load i32, i32* %3
%104 = load i32, i32* %4
%105 = add nsw i32 %103, %104
%106 = call i32 @hash(i32 %105)
%107 = load i32, i32* %3
%108 = call i32 @hash(i32 %107)
br label %109
109: ; preds = %98
%110 = load i32, i32* %4
%111 = add nsw i32 %110, 1
store i32 %111, i32* %4
br label %91
112: ; preds = %91
br label %113
113: ; preds = %112
%114 = load i32, i32* %3
%115 = add nsw i32 %114, 1
store i32 %115, i32* %3
br label %30
116: ; preds = %39
%117 = load i32, i32* %2
%118 = icmp sge i32 %117, 20
br i1 %118, label %119, label %156
119: ; preds = %116
store i32 -9, i32* %4
br label %120
120: ; preds = %131, %119
%121 = load i32, i32* %4
%122 = icmp sle i32 %121, 4
br i1 %122, label %123, label %134
123: ; preds = %120
%124 = load i32, i32* %4
%125 = add nsw i32 %124, 10
store i32 %125, i32* %5
%126 = call i32 @hash(i32 2)
%127 = load i32, i32* %4
%128 = add nsw i32 %127, 10
%129 = call i32 @hash(i32 %128)
%130 = call i32 @hash(i32 10)
br label %131
131: ; preds = %123
%132 = load i32, i32* %4
%133 = add nsw i32 %132, 1
store i32 %133, i32* %4
br label %120
134: ; preds = %120
store i32 5, i32* %4
br label %135
135: ; preds = %152, %134
%136 = load i32, i32* %4
%137 = load i32, i32* %2
%138 = sub nsw i32 %137, 10
%139 = icmp sle i32 %136, %138
br i1 %139, label %140, label %155
140: ; preds = %135
%141 = call i32 @hash(i32 1)
%142 = call i32 @hash(i32 10)
%143 = load i32, i32* %4
%144 = call i32 @hash(i32 %143)
%145 = load i32, i32* %4
%146 = add nsw i32 %145, 10
store i32 %146, i32* %5
%147 = call i32 @hash(i32 2)
%148 = load i32, i32* %4
%149 = add nsw i32 %148, 10
%150 = call i32 @hash(i32 %149)
%151 = call i32 @hash(i32 10)
br label %152
152: ; preds = %140
%153 = load i32, i32* %4
%154 = add nsw i32 %153, 1
store i32 %154, i32* %4
br label %135
155: ; preds = %135
br label %156
156: ; preds = %155, %116
store i32 11, i32* %3
br label %157
157: ; preds = %231, %156
%158 = load i32, i32* %3
%159 = load i32, i32* %2
%160 = sub nsw i32 %159, 10
%161 = icmp sle i32 %158, %160
br i1 %161, label %162, label %234
162: ; preds = %157
%163 = load i32, i32* %3
%164 = sub nsw i32 0, %163
%165 = add nsw i32 %164, 1
store i32 %165, i32* %4
br label %166
166: ; preds = %180, %162
%167 = load i32, i32* %4
%168 = icmp sle i32 %167, 4
br i1 %168, label %169, label %183
169: ; preds = %166
%170 = load i32, i32* %3
%171 = load i32, i32* %4
%172 = add nsw i32 %170, %171
store i32 %172, i32* %5
%173 = call i32 @hash(i32 2)
%174 = load i32, i32* %3
%175 = load i32, i32* %4
%176 = add nsw i32 %174, %175
%177 = call i32 @hash(i32 %176)
%178 = load i32, i32* %3
%179 = call i32 @hash(i32 %178)
br label %180
180: ; preds = %169
%181 = load i32, i32* %4
%182 = add nsw i32 %181, 1
store i32 %182, i32* %4
br label %166
183: ; preds = %166
store i32 5, i32* %4
br label %184
184: ; preds = %207, %183
%185 = load i32, i32* %4
%186 = load i32, i32* %3
%187 = sub nsw i32 0, %186
%188 = load i32, i32* %2
%189 = add nsw i32 %187, %188
%190 = icmp sle i32 %185, %189
br i1 %190, label %191, label %210
191: ; preds = %184
%192 = call i32 @hash(i32 1)
%193 = load i32, i32* %3
%194 = call i32 @hash(i32 %193)
%195 = load i32, i32* %4
%196 = call i32 @hash(i32 %195)
%197 = load i32, i32* %3
%198 = load i32, i32* %4
%199 = add nsw i32 %197, %198
store i32 %199, i32* %5
%200 = call i32 @hash(i32 2)
%201 = load i32, i32* %3
%202 = load i32, i32* %4
%203 = add nsw i32 %201, %202
%204 = call i32 @hash(i32 %203)
%205 = load i32, i32* %3
%206 = call i32 @hash(i32 %205)
br label %207
207: ; preds = %191
%208 = load i32, i32* %4
%209 = add nsw i32 %208, 1
store i32 %209, i32* %4
br label %184
210: ; preds = %184
%211 = load i32, i32* %3
%212 = sub nsw i32 0, %211
%213 = load i32, i32* %2
%214 = add nsw i32 %212, %213
%215 = add nsw i32 %214, 1
store i32 %215, i32* %4
br label %216
216: ; preds = %227, %210
%217 = load i32, i32* %4
%218 = load i32, i32* %2
%219 = sub nsw i32 %218, 10
%220 = icmp sle i32 %217, %219
br i1 %220, label %221, label %230
221: ; preds = %216
%222 = call i32 @hash(i32 1)
%223 = load i32, i32* %3
%224 = call i32 @hash(i32 %223)
%225 = load i32, i32* %4
%226 = call i32 @hash(i32 %225)
br label %227
227: ; preds = %221
%228 = load i32, i32* %4
%229 = add nsw i32 %228, 1
store i32 %229, i32* %4
br label %216
230: ; preds = %216
br label %231
231: ; preds = %230
%232 = load i32, i32* %3
%233 = add nsw i32 %232, 1
store i32 %233, i32* %3
br label %157
234: ; preds = %157
%235 = load i32, i32* %2
%236 = sub nsw i32 %235, 9
store i32 %236, i32* %3
br label %237
237: ; preds = %257, %234
%238 = load i32, i32* %3
%239 = load i32, i32* %2
%240 = icmp sle i32 %238, %239
br i1 %240, label %241, label %260
241: ; preds = %237
store i32 5, i32* %4
br label %242
242: ; preds = %253, %241
%243 = load i32, i32* %4
%244 = load i32, i32* %2
%245 = sub nsw i32 %244, 10
%246 = icmp sle i32 %243, %245
br i1 %246, label %247, label %256
247: ; preds = %242
%248 = call i32 @hash(i32 1)
%249 = load i32, i32* %3
%250 = call i32 @hash(i32 %249)
%251 = load i32, i32* %4
%252 = call i32 @hash(i32 %251)
br label %253
253: ; preds = %247
%254 = load i32, i32* %4
%255 = add nsw i32 %254, 1
store i32 %255, i32* %4
br label %242
256: ; preds = %242
br label %257
257: ; preds = %256
%258 = load i32, i32* %3
%259 = add nsw i32 %258, 1
store i32 %259, i32* %3
br label %237
260: ; preds = %237
ret void
}

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