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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ abort();
void foo(int n) {
  int a[n], i, err;
  for (i = 0; i < n; i++)
    a[i] = 5 * i;
#pragma omp target map(to : a) map(from : err) private(i)
  {
    err = 0;
    for (i = 0; i < n; i++)
      if (a[i] != 5 * i)
        err = 1;
  }
  if (err)
    abort();
  for (i = 0; i < n; i++)
    a[i] += i;
#pragma omp target map(from : err) private(i)
  {
    err = 0;
    for (i = 0; i < n; i++)
      if (a[i] != 6 * i)
        err = 1;
  }
  if (err)
    abort();
  for (i = 0; i < n; i++)
    a[i] += i;
#pragma omp target firstprivate(a) map(from : err) private(i)
  {
    err = 0;
    for (i = 0; i < n; i++)
      if (a[i] != 7 * i)
        err = 1;
  }
  if (err)
    abort();
}


x86 assembly (clang, -O0):
<foo>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x10(%rbp)
lea    0xf(,%rax,4),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x28(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1172 <foo+0x62>
mov    -0x28(%rbp),%rax
imul   $0x5,-0x1c(%rbp),%edx
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1149 <foo+0x39>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11bd <foo+0xad>
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
imul   $0x5,-0x1c(%rbp),%ecx
cmp    %ecx,%eax
je     11aa <foo+0x9a>
movl   $0x1,-0x20(%rbp)
jmp    11af <foo+0x9f>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1180 <foo+0x70>
cmpl   $0x0,-0x20(%rbp)
je     11ce <foo+0xbe>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1200 <foo+0xf0>
mov    -0x28(%rbp),%rax
mov    -0x1c(%rbp),%edx
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11d5 <foo+0xc5>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    124b <foo+0x13b>
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
imul   $0x6,-0x1c(%rbp),%ecx
cmp    %ecx,%eax
je     1238 <foo+0x128>
movl   $0x1,-0x20(%rbp)
jmp    123d <foo+0x12d>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    120e <foo+0xfe>
cmpl   $0x0,-0x20(%rbp)
je     125c <foo+0x14c>
mov    $0x0,%al
call   1030 <abort@plt>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    128e <foo+0x17e>
mov    -0x28(%rbp),%rax
mov    -0x1c(%rbp),%edx
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1263 <foo+0x153>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    12d9 <foo+0x1c9>
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
imul   $0x7,-0x1c(%rbp),%ecx
cmp    %ecx,%eax
je     12c6 <foo+0x1b6>
movl   $0x1,-0x20(%rbp)
jmp    12cb <foo+0x1bb>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    129c <foo+0x18c>
cmpl   $0x0,-0x20(%rbp)
je     12ea <foo+0x1da>
mov    $0x0,%al
call   1030 <abort@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<foo>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,%r9d
mov    %rsp,%rcx
lea    0xf(,%r9,4),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,%rsp
test   %edi,%edi
jle    19b6 <foo+0x8a6>
cmp    $0x8,%edi
jae    1140 <foo+0x30>
xor    %edx,%edx
jmp    120e <foo+0xfe>
mov    %r9d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     14d2 <foo+0x3c2>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0xe93(%rip),%xmm0
xor    %esi,%esi
movdqa 0xe99(%rip),%xmm1
movdqa 0xea1(%rip),%xmm2
movdqa 0xea9(%rip),%xmm3
nopw   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm4
pslld  $0x2,%xmm4
paddd  %xmm0,%xmm4
movdqa %xmm4,(%rcx,%rsi,4)
paddd  %xmm1,%xmm4
movdqa %xmm4,0x10(%rcx,%rsi,4)
movdqa %xmm0,%xmm4
paddd  %xmm2,%xmm4
movdqa %xmm4,%xmm5
pslld  $0x2,%xmm5
paddd  %xmm4,%xmm5
movdqa %xmm5,0x20(%rcx,%rsi,4)
paddd  %xmm1,%xmm5
movdqa %xmm5,0x30(%rcx,%rsi,4)
add    $0x10,%rsi
paddd  %xmm3,%xmm0
add    $0xfffffffffffffffe,%rax
jne    1190 <foo+0x80>
test   $0x1,%r8b
je     1209 <foo+0xf9>
movdqa %xmm0,%xmm1
pslld  $0x2,%xmm1
paddd  %xmm0,%xmm1
movdqa 0xe16(%rip),%xmm0
paddd  %xmm1,%xmm0
movdqa %xmm1,(%rcx,%rsi,4)
movdqa %xmm0,0x10(%rcx,%rsi,4)
cmp    %r9,%rdx
je     122f <foo+0x11f>
lea    (%rdx,%rdx,4),%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %eax,(%rcx,%rdx,4)
add    $0x1,%rdx
add    $0x5,%eax
cmp    %rdx,%r9
jne    1220 <foo+0x110>
test   %edi,%edi
jle    19b6 <foo+0x8a6>
cmp    $0x8,%edi
jae    1245 <foo+0x135>
xor    %edx,%edx
xor    %eax,%eax
jmp    138d <foo+0x27d>
mov    %r9d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     16af <foo+0x59f>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0xd8e(%rip),%xmm3
pxor   %xmm0,%xmm0
xor    %esi,%esi
movdqa 0xd8f(%rip),%xmm10
movdqa 0xd96(%rip),%xmm8
pcmpeqd %xmm5,%xmm5
movdqa 0xd99(%rip),%xmm9
pxor   %xmm1,%xmm1
nopl   0x0(%rax,%rax,1)
movdqa %xmm3,%xmm7
pslld  $0x2,%xmm7
paddd  %xmm3,%xmm7
movdqa %xmm7,%xmm4
paddd  %xmm10,%xmm4
pcmpeqd (%rcx,%rsi,4),%xmm7
pcmpeqd 0x10(%rcx,%rsi,4),%xmm4
movdqa %xmm3,%xmm6
paddd  %xmm8,%xmm6
movdqa %xmm6,%xmm2
pslld  $0x2,%xmm2
paddd  %xmm6,%xmm2
movdqa %xmm2,%xmm6
paddd  %xmm10,%xmm6
pcmpeqd 0x20(%rcx,%rsi,4),%xmm2
pand   %xmm7,%xmm2
pcmpeqd 0x30(%rcx,%rsi,4),%xmm6
pand   %xmm4,%xmm6
pand   %xmm2,%xmm0
paddd  %xmm2,%xmm0
psubd  %xmm5,%xmm0
pand   %xmm6,%xmm1
paddd  %xmm6,%xmm1
psubd  %xmm5,%xmm1
add    $0x10,%rsi
paddd  %xmm9,%xmm3
add    $0xfffffffffffffffe,%rax
jne    12a0 <foo+0x190>
test   $0x1,%r8b
je     1361 <foo+0x251>
movdqa %xmm3,%xmm2
pslld  $0x2,%xmm2
paddd  %xmm3,%xmm2
movdqa 0xcda(%rip),%xmm3
paddd  %xmm2,%xmm3
pcmpeqd (%rcx,%rsi,4),%xmm2
pcmpeqd 0x10(%rcx,%rsi,4),%xmm3
pand   %xmm2,%xmm0
paddd  %xmm2,%xmm0
pcmpeqd %xmm2,%xmm2
psubd  %xmm2,%xmm0
pand   %xmm3,%xmm1
paddd  %xmm3,%xmm1
psubd  %xmm2,%xmm1
pxor   %xmm2,%xmm2
movdqa %xmm0,%xmm3
pcmpeqd %xmm2,%xmm3
pand   %xmm3,%xmm1
pandn  %xmm0,%xmm3
por    %xmm1,%xmm3
pcmpeqd %xmm2,%xmm3
movmskps %xmm3,%esi
xor    %eax,%eax
cmp    $0xf,%esi
setne  %al
cmp    %r9,%rdx
je     13b3 <foo+0x2a3>
lea    (%rdx,%rdx,4),%esi
mov    $0x1,%r8d
cs nopw 0x0(%rax,%rax,1)
cmp    (%rcx,%rdx,4),%esi
cmovne %r8d,%eax
add    $0x1,%rdx
add    $0x5,%esi
cmp    %rdx,%r9
jne    13a0 <foo+0x290>
test   %eax,%eax
jne    19bb <foo+0x8ab>
test   %edi,%edi
jle    19b6 <foo+0x8a6>
cmp    $0x8,%edi
jae    13cf <foo+0x2bf>
xor    %edx,%edx
jmp    14b0 <foo+0x3a0>
mov    %r9d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     17d2 <foo+0x6c2>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0xc04(%rip),%xmm0
xor    %esi,%esi
movdqa 0xc3a(%rip),%xmm1
movdqa 0xc12(%rip),%xmm2
movdqa 0xc3a(%rip),%xmm3
movdqa 0xc12(%rip),%xmm4
xchg   %ax,%ax
movdqa 0x10(%rcx,%rsi,4),%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm1,%xmm5
movdqa (%rcx,%rsi,4),%xmm6
paddd  %xmm0,%xmm6
movdqa %xmm6,(%rcx,%rsi,4)
movdqa %xmm5,0x10(%rcx,%rsi,4)
movdqa 0x20(%rcx,%rsi,4),%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm2,%xmm5
movdqa 0x30(%rcx,%rsi,4),%xmm6
paddd  %xmm0,%xmm6
paddd  %xmm3,%xmm6
movdqa %xmm5,0x20(%rcx,%rsi,4)
movdqa %xmm6,0x30(%rcx,%rsi,4)
add    $0x10,%rsi
paddd  %xmm4,%xmm0
add    $0xfffffffffffffffe,%rax
jne    1420 <foo+0x310>
test   $0x1,%r8b
je     14a0 <foo+0x390>
movdqa 0x10(%rcx,%rsi,4),%xmm1
paddd  %xmm0,%xmm1
paddd  (%rcx,%rsi,4),%xmm0
paddd  0xbab(%rip),%xmm1
movdqa %xmm0,(%rcx,%rsi,4)
movdqa %xmm1,0x10(%rcx,%rsi,4)
cmp    %r9,%rdx
je     14bc <foo+0x3ac>
cs nopw 0x0(%rax,%rax,1)
nop
add    %edx,(%rcx,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%r9
jne    14b0 <foo+0x3a0>
test   %edi,%edi
jle    19b6 <foo+0x8a6>
cmp    $0x8,%edi
jae    14eb <foo+0x3db>
xor    %edx,%edx
xor    %eax,%eax
jmp    166e <foo+0x55e>
movdqa 0xb26(%rip),%xmm0
xor    %esi,%esi
test   $0x1,%r8b
jne    11e5 <foo+0xd5>
jmp    1209 <foo+0xf9>
mov    %r9d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     18cd <foo+0x7bd>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0xae8(%rip),%xmm2
pxor   %xmm0,%xmm0
xor    %esi,%esi
movdqa 0xb39(%rip),%xmm12
movdqa 0xb40(%rip),%xmm8
movdqa 0xb47(%rip),%xmm9
movdqa 0xb4e(%rip),%xmm10
pcmpeqd %xmm7,%xmm7
movdqa 0xae1(%rip),%xmm11
pxor   %xmm1,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqa %xmm2,%xmm5
pmuludq %xmm12,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm12,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm5
movdqa %xmm5,%xmm6
paddd  %xmm8,%xmm6
movdqa (%rcx,%rsi,4),%xmm4
pcmpeqd %xmm5,%xmm4
pcmpeqd 0x10(%rcx,%rsi,4),%xmm6
movdqa %xmm5,%xmm3
paddd  %xmm9,%xmm3
paddd  %xmm10,%xmm5
pcmpeqd 0x20(%rcx,%rsi,4),%xmm3
pand   %xmm4,%xmm3
pcmpeqd 0x30(%rcx,%rsi,4),%xmm5
pand   %xmm6,%xmm5
pand   %xmm3,%xmm0
paddd  %xmm3,%xmm0
psubd  %xmm7,%xmm0
pand   %xmm5,%xmm1
paddd  %xmm5,%xmm1
psubd  %xmm7,%xmm1
add    $0x10,%rsi
paddd  %xmm11,%xmm2
add    $0xfffffffffffffffe,%rax
jne    1560 <foo+0x450>
test   $0x1,%r8b
je     1642 <foo+0x532>
movdqa 0xa6c(%rip),%xmm3
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm3,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm3,%xmm4
pshufd $0xe8,%xmm4,%xmm3
punpckldq %xmm3,%xmm2
movdqa 0xa59(%rip),%xmm3
paddd  %xmm2,%xmm3
pcmpeqd (%rcx,%rsi,4),%xmm2
pcmpeqd 0x10(%rcx,%rsi,4),%xmm3
pand   %xmm2,%xmm0
paddd  %xmm2,%xmm0
pcmpeqd %xmm2,%xmm2
psubd  %xmm2,%xmm0
pand   %xmm3,%xmm1
paddd  %xmm3,%xmm1
psubd  %xmm2,%xmm1
pxor   %xmm2,%xmm2
movdqa %xmm0,%xmm3
pcmpeqd %xmm2,%xmm3
pand   %xmm3,%xmm1
pandn  %xmm0,%xmm3
por    %xmm1,%xmm3
pcmpeqd %xmm2,%xmm3
movmskps %xmm3,%esi
xor    %eax,%eax
cmp    $0xf,%esi
setne  %al
cmp    %r9,%rdx
je     1693 <foo+0x583>
lea    (%rdx,%rdx,1),%esi
lea    (%rsi,%rsi,2),%esi
mov    $0x1,%r8d
nopw   0x0(%rax,%rax,1)
cmp    (%rcx,%rdx,4),%esi
cmovne %r8d,%eax
add    $0x1,%rdx
add    $0x6,%esi
cmp    %rdx,%r9
jne    1680 <foo+0x570>
test   %eax,%eax
jne    19bb <foo+0x8ab>
test   %edi,%edi
jle    19b6 <foo+0x8a6>
cmp    $0x8,%edi
jae    16d0 <foo+0x5c0>
xor    %edx,%edx
jmp    17b0 <foo+0x6a0>
movdqa 0x949(%rip),%xmm3
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
test   $0x1,%r8b
jne    1321 <foo+0x211>
jmp    1361 <foo+0x251>
mov    %r9d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     18ee <foo+0x7de>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0x903(%rip),%xmm0
xor    %esi,%esi
movdqa 0x939(%rip),%xmm1
movdqa 0x911(%rip),%xmm2
movdqa 0x939(%rip),%xmm3
movdqa 0x911(%rip),%xmm4
nop
movdqa 0x10(%rcx,%rsi,4),%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm1,%xmm5
movdqa (%rcx,%rsi,4),%xmm6
paddd  %xmm0,%xmm6
movdqa %xmm6,(%rcx,%rsi,4)
movdqa %xmm5,0x10(%rcx,%rsi,4)
movdqa 0x20(%rcx,%rsi,4),%xmm5
paddd  %xmm0,%xmm5
paddd  %xmm2,%xmm5
movdqa 0x30(%rcx,%rsi,4),%xmm6
paddd  %xmm0,%xmm6
paddd  %xmm3,%xmm6
movdqa %xmm5,0x20(%rcx,%rsi,4)
movdqa %xmm6,0x30(%rcx,%rsi,4)
add    $0x10,%rsi
paddd  %xmm4,%xmm0
add    $0xfffffffffffffffe,%rax
jne    1720 <foo+0x610>
test   $0x1,%r8b
je     17a0 <foo+0x690>
movdqa 0x10(%rcx,%rsi,4),%xmm1
paddd  %xmm0,%xmm1
paddd  (%rcx,%rsi,4),%xmm0
paddd  0x8ab(%rip),%xmm1
movdqa %xmm0,(%rcx,%rsi,4)
movdqa %xmm1,0x10(%rcx,%rsi,4)
cmp    %r9,%rdx
je     17bc <foo+0x6ac>
cs nopw 0x0(%rax,%rax,1)
nop
add    %edx,(%rcx,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%r9
jne    17b0 <foo+0x6a0>
test   %edi,%edi
jle    19b6 <foo+0x8a6>
cmp    $0x8,%edi
jae    17eb <foo+0x6db>
xor    %edx,%edx
xor    %eax,%eax
jmp    198b <foo+0x87b>
movdqa 0x826(%rip),%xmm0
xor    %esi,%esi
test   $0x1,%r8b
jne    147e <foo+0x36e>
jmp    14a0 <foo+0x390>
mov    %r9d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%rdi
shr    $0x3,%rdi
add    $0x1,%rdi
test   %rax,%rax
je     1907 <foo+0x7f7>
mov    %rdi,%rax
and    $0xfffffffffffffffe,%rax
movdqa 0x7e8(%rip),%xmm3
pxor   %xmm0,%xmm0
xor    %esi,%esi
movdqa 0x879(%rip),%xmm10
movdqa 0x7f0(%rip),%xmm8
pcmpeqd %xmm5,%xmm5
movdqa 0x7f3(%rip),%xmm9
pxor   %xmm1,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movdqa %xmm3,%xmm7
pslld  $0x3,%xmm7
psubd  %xmm3,%xmm7
movdqa %xmm7,%xmm4
paddd  %xmm10,%xmm4
pcmpeqd (%rcx,%rsi,4),%xmm7
pcmpeqd 0x10(%rcx,%rsi,4),%xmm4
movdqa %xmm3,%xmm6
paddd  %xmm8,%xmm6
movdqa %xmm6,%xmm2
pslld  $0x3,%xmm2
psubd  %xmm6,%xmm2
movdqa %xmm2,%xmm6
paddd  %xmm10,%xmm6
pcmpeqd 0x20(%rcx,%rsi,4),%xmm2
pand   %xmm7,%xmm2
pcmpeqd 0x30(%rcx,%rsi,4),%xmm6
pand   %xmm4,%xmm6
pand   %xmm2,%xmm0
paddd  %xmm2,%xmm0
psubd  %xmm5,%xmm0
pand   %xmm6,%xmm1
paddd  %xmm6,%xmm1
psubd  %xmm5,%xmm1
add    $0x10,%rsi
paddd  %xmm9,%xmm3
add    $0xfffffffffffffffe,%rax
jne    1850 <foo+0x740>
jmp    1919 <foo+0x809>
movdqa 0x72b(%rip),%xmm2
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
test   $0x1,%r8b
jne    15ec <foo+0x4dc>
jmp    1642 <foo+0x532>
movdqa 0x70a(%rip),%xmm0
xor    %esi,%esi
test   $0x1,%r8b
jne    177e <foo+0x66e>
jmp    17a0 <foo+0x690>
movdqa 0x6f1(%rip),%xmm3
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
test   $0x1,%dil
je     195f <foo+0x84f>
movdqa %xmm3,%xmm2
pslld  $0x3,%xmm2
psubd  %xmm3,%xmm2
movdqa 0x76c(%rip),%xmm3
paddd  %xmm2,%xmm3
pcmpeqd (%rcx,%rsi,4),%xmm2
pcmpeqd 0x10(%rcx,%rsi,4),%xmm3
pand   %xmm2,%xmm0
paddd  %xmm2,%xmm0
pcmpeqd %xmm2,%xmm2
psubd  %xmm2,%xmm0
pand   %xmm3,%xmm1
paddd  %xmm3,%xmm1
psubd  %xmm2,%xmm1
pxor   %xmm2,%xmm2
movdqa %xmm0,%xmm3
pcmpeqd %xmm2,%xmm3
pand   %xmm3,%xmm1
pandn  %xmm0,%xmm3
por    %xmm1,%xmm3
pcmpeqd %xmm2,%xmm3
movmskps %xmm3,%esi
xor    %eax,%eax
cmp    $0xf,%esi
setne  %al
cmp    %r9,%rdx
je     19b2 <foo+0x8a2>
lea    0x0(,%rdx,8),%esi
sub    %edx,%esi
mov    $0x1,%edi
nopl   0x0(%rax)
cmp    (%rcx,%rdx,4),%esi
cmovne %edi,%eax
add    $0x1,%rdx
add    $0x7,%esi
cmp    %rdx,%r9
jne    19a0 <foo+0x890>
test   %eax,%eax
jne    19bb <foo+0x8ab>
mov    %rbp,%rsp
pop    %rbp
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
define void @foo(i32 %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca i64
%5 = alloca i32
%6 = alloca i32
store i32 %0, i32* %2
%7 = load i32, i32* %2
%8 = zext i32 %7 to i64
%9 = call i8* @llvm.stacksave()
store i8* %9, i8** %3
%10 = alloca i32, i64 %8
store i64 %8, i64* %4
store i32 0, i32* %5
br label %11
11: ; preds = %21, %1
%12 = load i32, i32* %5
%13 = load i32, i32* %2
%14 = icmp slt i32 %12, %13
br i1 %14, label %15, label %24
15: ; preds = %11
%16 = load i32, i32* %5
%17 = mul nsw i32 5, %16
%18 = load i32, i32* %5
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds i32, i32* %10, i64 %19
store i32 %17, i32* %20
br label %21
21: ; preds = %15
%22 = load i32, i32* %5
%23 = add nsw i32 %22, 1
store i32 %23, i32* %5
br label %11
24: ; preds = %11
store i32 0, i32* %6
store i32 0, i32* %5
br label %25
25: ; preds = %39, %24
%26 = load i32, i32* %5
%27 = load i32, i32* %2
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %42
29: ; preds = %25
%30 = load i32, i32* %5
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %10, i64 %31
%33 = load i32, i32* %32
%34 = load i32, i32* %5
%35 = mul nsw i32 5, %34
%36 = icmp ne i32 %33, %35
br i1 %36, label %37, label %38
37: ; preds = %29
store i32 1, i32* %6
br label %38
38: ; preds = %37, %29
br label %39
39: ; preds = %38
%40 = load i32, i32* %5
%41 = add nsw i32 %40, 1
store i32 %41, i32* %5
br label %25
42: ; preds = %25
%43 = load i32, i32* %6
%44 = icmp ne i32 %43, 0
br i1 %44, label %45, label %47
45: ; preds = %42
%46 = call i32 (...) @abort()
unreachable
47: ; preds = %42
store i32 0, i32* %5
br label %48
48: ; preds = %59, %47
%49 = load i32, i32* %5
%50 = load i32, i32* %2
%51 = icmp slt i32 %49, %50
br i1 %51, label %52, label %62
52: ; preds = %48
%53 = load i32, i32* %5
%54 = load i32, i32* %5
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i32, i32* %10, i64 %55
%57 = load i32, i32* %56
%58 = add nsw i32 %57, %53
store i32 %58, i32* %56
br label %59
59: ; preds = %52
%60 = load i32, i32* %5
%61 = add nsw i32 %60, 1
store i32 %61, i32* %5
br label %48
62: ; preds = %48
store i32 0, i32* %6
store i32 0, i32* %5
br label %63
63: ; preds = %77, %62
%64 = load i32, i32* %5
%65 = load i32, i32* %2
%66 = icmp slt i32 %64, %65
br i1 %66, label %67, label %80
67: ; preds = %63
%68 = load i32, i32* %5
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i32, i32* %10, i64 %69
%71 = load i32, i32* %70
%72 = load i32, i32* %5
%73 = mul nsw i32 6, %72
%74 = icmp ne i32 %71, %73
br i1 %74, label %75, label %76
75: ; preds = %67
store i32 1, i32* %6
br label %76
76: ; preds = %75, %67
br label %77
77: ; preds = %76
%78 = load i32, i32* %5
%79 = add nsw i32 %78, 1
store i32 %79, i32* %5
br label %63
80: ; preds = %63
%81 = load i32, i32* %6
%82 = icmp ne i32 %81, 0
br i1 %82, label %83, label %85
83: ; preds = %80
%84 = call i32 (...) @abort()
unreachable
85: ; preds = %80
store i32 0, i32* %5
br label %86
86: ; preds = %97, %85
%87 = load i32, i32* %5
%88 = load i32, i32* %2
%89 = icmp slt i32 %87, %88
br i1 %89, label %90, label %100
90: ; preds = %86
%91 = load i32, i32* %5
%92 = load i32, i32* %5
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i32, i32* %10, i64 %93
%95 = load i32, i32* %94
%96 = add nsw i32 %95, %91
store i32 %96, i32* %94
br label %97
97: ; preds = %90
%98 = load i32, i32* %5
%99 = add nsw i32 %98, 1
store i32 %99, i32* %5
br label %86
100: ; preds = %86
store i32 0, i32* %6
store i32 0, i32* %5
br label %101
101: ; preds = %115, %100
%102 = load i32, i32* %5
%103 = load i32, i32* %2
%104 = icmp slt i32 %102, %103
br i1 %104, label %105, label %118
105: ; preds = %101
%106 = load i32, i32* %5
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i32, i32* %10, i64 %107
%109 = load i32, i32* %108
%110 = load i32, i32* %5
%111 = mul nsw i32 7, %110
%112 = icmp ne i32 %109, %111
br i1 %112, label %113, label %114
113: ; preds = %105
store i32 1, i32* %6
br label %114
114: ; preds = %113, %105
br label %115
115: ; preds = %114
%116 = load i32, i32* %5
%117 = add nsw i32 %116, 1
store i32 %117, i32* %5
br label %101
118: ; preds = %101
%119 = load i32, i32* %6
%120 = icmp ne i32 %119, 0
br i1 %120, label %121, label %123
121: ; preds = %118
%122 = call i32 (...) @abort()
unreachable
123: ; preds = %118
%124 = load i8*, i8** %3
ret void
}

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