int pcif_test(unsigned int base_addr, unsigned int conf_addr,
              unsigned int apb_addr) {
  volatile unsigned int *base = (unsigned int *)base_addr;
  volatile unsigned int *baseio = (unsigned int *)(conf_addr);
  volatile unsigned int *conf = (unsigned int *)(conf_addr + 0x10000);
  volatile unsigned int *apb = (unsigned int *)apb_addr;
  int i, tmp;
  report_device(0x01075000);
  *(conf + 1) = 0x00000146;
  *(conf + 3) = 0x00004000;
  report_subtest(1);
  *(apb) = 0xffffffff;
  *(apb + 1) = 0xffffffff;
  if (*(apb) != 0xf0000000)
    fail(1);
  if (*(apb + 1) != 0xff800000)
    fail(1);
  *(apb) = 0xa0000000;
  *(apb + 1) = 0x80000000;
  if (*(apb) != 0xa0000000)
    fail(2);
  if (*(apb + 1) != 0x80000000)
    fail(2);
  *(apb + 16) = 0xffffffff;
  *(apb + 17) = 0xffffffff;
  *(apb + 18) = 0xffffffff;
  *(apb + 19) = 0xffffffff;
  if (*(apb + 16) != 0xc0000000)
    fail(1);
  if (*(apb + 17) != 0xc0000000)
    fail(1);
  if (*(apb + 18) != 0xc0000000)
    fail(1);
  if (*(apb + 19) != 0xc0000000)
    fail(1);
  *(apb + 16) = 0xc0000000;
  if (*(apb + 16) != 0xc0000000)
    fail(2);
  *(apb + 5) = 0xffffffff;
  if (*(apb + 5) != 0xffff0000)
    fail(1);
  *(apb + 5) = 0x30000000;
  if (*(apb + 5) != 0x30000000)
    fail(2);
  report_subtest(2);
  if (*(conf) != 0x02061ac8)
    fail(1);
  if (*(conf + 1) != 0x04100146)
    fail(1);
  if (*(conf + 2) != 0x0b400000)
    fail(1);
  if (*(conf + 3) != 0x00004000)
    fail(1);
  *(conf + 4) = 0xffffffff;
  *(conf + 5) = 0xffffffff;
  *(conf + 6) = 0xffffffff;
  *(conf + 7) = 0xffffffff;
  if (*(conf + 4) != 0xfffff000)
    fail(2);
  if (*(conf + 5) != 0xf0000000)
    fail(2);
  if (*(conf + 6) != 0xff800000)
    fail(2);
  if (*(conf + 7) != 0x00000000)
    fail(2);
  *(conf + 4) = 0x10000000;
  *(conf + 5) = 0x40000000;
  *(conf + 6) = 0x50000000;
  if (*(conf + 4) != 0x10000000)
    fail(3);
  if (*(conf + 5) != 0x40000000)
    fail(3);
  if (*(conf + 6) != 0x50000000)
    fail(3);
  *(conf + 0x2a00 + 1) = 0x00000146;
  if (*(conf + 0x2a00) != 0x3badaffe)
    fail(4);
  if ((*(apb + 6) & 0x30000000) != 0)
    fail(5);
  *(conf + 0x2a00 + 4) = 0xc0000000;
  *(conf + 0x2a00 + 5) = 0x30000000;
  if (*(conf + 0x2a00 + 4) != 0xc0000000)
    fail(6);
  if (*(conf + 0x2a00 + 5) != 0x30000001)
    fail(6);
  if ((*(apb + 6) & 0x30000000) != 0)
    fail(7);
  tmp = *(conf + 0x2000);
  if ((*(apb + 6) & 0x30000000) != 0x20000000)
    fail(8);
  report_subtest(3);
  for (i = 0; i < 16; i++) {
    *(base + i) = ((i & 0xf) << 28) | ((i & 0xf) << 24) | ((i & 0xf) << 20) |
                  ((i & 0xf) << 16) | ((i & 0xf) << 12) | ((i & 0xf) << 8) |
                  ((i & 0xf) << 4) | ((i & 0xf));
  }
  for (i = 0; i < 16; i++) {
    if (*(base + i) !=
        (((i & 0xf) << 28) | ((i & 0xf) << 24) | ((i & 0xf) << 20) |
         ((i & 0xf) << 16) | ((i & 0xf) << 12) | ((i & 0xf) << 8) |
         ((i & 0xf) << 4) | ((i & 0xf))))
      fail(1);
  }
  report_subtest(4);
  for (i = 0; i < 16; i++) {
    *(baseio + i) = ((i & 0xf) << 28) | ((i & 0xf) << 24) | ((i & 0xf) << 20) |
                    ((i & 0xf) << 16) | ((i & 0xf) << 12) | ((i & 0xf) << 8) |
                    ((i & 0xf) << 4) | ((i & 0xf));
  }
  for (i = 0; i < 16; i++) {
    if (*(baseio + i) !=
        (((i & 0xf) << 28) | ((i & 0xf) << 24) | ((i & 0xf) << 20) |
         ((i & 0xf) << 16) | ((i & 0xf) << 12) | ((i & 0xf) << 8) |
         ((i & 0xf) << 4) | ((i & 0xf))))
      fail(1);
  }
}


x86 assembly (clang, -O0):
<pcif_test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0x8(%rbp),%eax
mov    %rax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
mov    %rax,-0x20(%rbp)
mov    -0xc(%rbp),%eax
add    $0x10000,%eax
mov    %eax,%eax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
mov    %rax,-0x30(%rbp)
mov    $0x1075000,%edi
mov    $0x0,%al
call   1030 <report_device@plt>
mov    -0x28(%rbp),%rax
movl   $0x146,0x4(%rax)
mov    -0x28(%rbp),%rax
movl   $0x4000,0xc(%rax)
mov    $0x1,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
mov    -0x30(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x30(%rbp),%rax
movl   $0xffffffff,0x4(%rax)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
cmp    $0xf0000000,%eax
je     11c4 <pcif_test+0x94>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%eax
cmp    $0xff800000,%eax
je     11e2 <pcif_test+0xb2>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
movl   $0xa0000000,(%rax)
mov    -0x30(%rbp),%rax
movl   $0x80000000,0x4(%rax)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
cmp    $0xa0000000,%eax
je     1214 <pcif_test+0xe4>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
mov    0x4(%rax),%eax
cmp    $0x80000000,%eax
je     1232 <pcif_test+0x102>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
movl   $0xffffffff,0x40(%rax)
mov    -0x30(%rbp),%rax
movl   $0xffffffff,0x44(%rax)
mov    -0x30(%rbp),%rax
movl   $0xffffffff,0x48(%rax)
mov    -0x30(%rbp),%rax
movl   $0xffffffff,0x4c(%rax)
mov    -0x30(%rbp),%rax
mov    0x40(%rax),%eax
cmp    $0xc0000000,%eax
je     127c <pcif_test+0x14c>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
mov    0x44(%rax),%eax
cmp    $0xc0000000,%eax
je     129a <pcif_test+0x16a>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
mov    0x48(%rax),%eax
cmp    $0xc0000000,%eax
je     12b8 <pcif_test+0x188>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
mov    0x4c(%rax),%eax
cmp    $0xc0000000,%eax
je     12d6 <pcif_test+0x1a6>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
movl   $0xc0000000,0x40(%rax)
mov    -0x30(%rbp),%rax
mov    0x40(%rax),%eax
cmp    $0xc0000000,%eax
je     12ff <pcif_test+0x1cf>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
movl   $0xffffffff,0x14(%rax)
mov    -0x30(%rbp),%rax
mov    0x14(%rax),%eax
cmp    $0xffff0000,%eax
je     1328 <pcif_test+0x1f8>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
movl   $0x30000000,0x14(%rax)
mov    -0x30(%rbp),%rax
mov    0x14(%rax),%eax
cmp    $0x30000000,%eax
je     1351 <pcif_test+0x221>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    $0x2,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
cmp    $0x2061ac8,%eax
je     137a <pcif_test+0x24a>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
cmp    $0x4100146,%eax
je     1398 <pcif_test+0x268>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
cmp    $0xb400000,%eax
je     13b6 <pcif_test+0x286>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0xc(%rax),%eax
cmp    $0x4000,%eax
je     13d4 <pcif_test+0x2a4>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
movl   $0xffffffff,0x10(%rax)
mov    -0x28(%rbp),%rax
movl   $0xffffffff,0x14(%rax)
mov    -0x28(%rbp),%rax
movl   $0xffffffff,0x18(%rax)
mov    -0x28(%rbp),%rax
movl   $0xffffffff,0x1c(%rax)
mov    -0x28(%rbp),%rax
mov    0x10(%rax),%eax
cmp    $0xfffff000,%eax
je     141e <pcif_test+0x2ee>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x14(%rax),%eax
cmp    $0xf0000000,%eax
je     143c <pcif_test+0x30c>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%eax
cmp    $0xff800000,%eax
je     145a <pcif_test+0x32a>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x1c(%rax),%eax
cmp    $0x0,%eax
je     1476 <pcif_test+0x346>
mov    $0x2,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
movl   $0x10000000,0x10(%rax)
mov    -0x28(%rbp),%rax
movl   $0x40000000,0x14(%rax)
mov    -0x28(%rbp),%rax
movl   $0x50000000,0x18(%rax)
mov    -0x28(%rbp),%rax
mov    0x10(%rax),%eax
cmp    $0x10000000,%eax
je     14b5 <pcif_test+0x385>
mov    $0x3,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x14(%rax),%eax
cmp    $0x40000000,%eax
je     14d3 <pcif_test+0x3a3>
mov    $0x3,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%eax
cmp    $0x50000000,%eax
je     14f1 <pcif_test+0x3c1>
mov    $0x3,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
movl   $0x146,0xa804(%rax)
mov    -0x28(%rbp),%rax
mov    0xa800(%rax),%eax
cmp    $0x3badaffe,%eax
je     1520 <pcif_test+0x3f0>
mov    $0x4,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
mov    0x18(%rax),%eax
and    $0x30000000,%eax
cmp    $0x0,%eax
je     1541 <pcif_test+0x411>
mov    $0x5,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
movl   $0xc0000000,0xa810(%rax)
mov    -0x28(%rbp),%rax
movl   $0x30000000,0xa814(%rax)
mov    -0x28(%rbp),%rax
mov    0xa810(%rax),%eax
cmp    $0xc0000000,%eax
je     157e <pcif_test+0x44e>
mov    $0x6,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0xa814(%rax),%eax
cmp    $0x30000001,%eax
je     159f <pcif_test+0x46f>
mov    $0x6,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x30(%rbp),%rax
mov    0x18(%rax),%eax
and    $0x30000000,%eax
cmp    $0x0,%eax
je     15c0 <pcif_test+0x490>
mov    $0x7,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    -0x28(%rbp),%rax
mov    0x8000(%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
mov    0x18(%rax),%eax
and    $0x30000000,%eax
cmp    $0x20000000,%eax
je     15f0 <pcif_test+0x4c0>
mov    $0x8,%edi
mov    $0x0,%al
call   1050 <fail@plt>
mov    $0x3,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
movl   $0x0,-0x34(%rbp)
cmpl   $0x10,-0x34(%rbp)
jge    1679 <pcif_test+0x549>
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x1c,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x18,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x14,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x10,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0xc,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x8,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x4,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
or     %eax,%edx
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1603 <pcif_test+0x4d3>
movl   $0x0,-0x34(%rbp)
cmpl   $0x10,-0x34(%rbp)
jge    170f <pcif_test+0x5df>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x34(%rbp),%ecx
and    $0xf,%ecx
shl    $0x1c,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x18,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x14,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x10,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0xc,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x8,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x4,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
or     %edx,%ecx
cmp    %ecx,%eax
je     16fc <pcif_test+0x5cc>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
jmp    1701 <pcif_test+0x5d1>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1680 <pcif_test+0x550>
mov    $0x4,%edi
mov    $0x0,%al
call   1040 <report_subtest@plt>
movl   $0x0,-0x34(%rbp)
cmpl   $0x10,-0x34(%rbp)
jge    1798 <pcif_test+0x668>
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x1c,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x18,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x14,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x10,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0xc,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x8,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
shl    $0x4,%eax
or     %eax,%edx
mov    -0x34(%rbp),%eax
and    $0xf,%eax
or     %eax,%edx
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1722 <pcif_test+0x5f2>
movl   $0x0,-0x34(%rbp)
cmpl   $0x10,-0x34(%rbp)
jge    182e <pcif_test+0x6fe>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x34(%rbp),%ecx
and    $0xf,%ecx
shl    $0x1c,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x18,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x14,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x10,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0xc,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x8,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
shl    $0x4,%edx
or     %edx,%ecx
mov    -0x34(%rbp),%edx
and    $0xf,%edx
or     %edx,%ecx
cmp    %ecx,%eax
je     181b <pcif_test+0x6eb>
mov    $0x1,%edi
mov    $0x0,%al
call   1050 <fail@plt>
jmp    1820 <pcif_test+0x6f0>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    179f <pcif_test+0x66f>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pcif_test>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %esi,%ebx
mov    %edi,%r14d
lea    0x10000(%rbx),%r13d
mov    %edx,%r12d
mov    $0x1075000,%edi
xor    %eax,%eax
call   1030 <report_device@plt>
movl   $0x146,0x4(%r13)
movl   $0x4000,0xc(%r13)
mov    $0x1,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
movl   $0xffffffff,(%r12)
ff
movl   $0xffffffff,0x4(%r12)
ff ff
mov    (%r12),%eax
cmp    $0xf0000000,%eax
je     119d <pcif_test+0x6d>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x4(%r12),%eax
cmp    $0xff800000,%eax
je     11b5 <pcif_test+0x85>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0xa0000000,(%r12)
a0
movl   $0x80000000,0x4(%r12)
mov    (%r12),%eax
cmp    $0xa0000000,%eax
je     11dd <pcif_test+0xad>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x4(%r12),%eax
cmp    $0x80000000,%eax
je     11f5 <pcif_test+0xc5>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0xffffffff,0x40(%r12)
ff ff
movl   $0xffffffff,0x44(%r12)
ff ff
movl   $0xffffffff,0x48(%r12)
ff ff
movl   $0xffffffff,0x4c(%r12)
ff ff
mov    0x40(%r12),%eax
cmp    $0xc0000000,%eax
je     1231 <pcif_test+0x101>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x44(%r12),%eax
cmp    $0xc0000000,%eax
je     1249 <pcif_test+0x119>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x48(%r12),%eax
cmp    $0xc0000000,%eax
je     1261 <pcif_test+0x131>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x4c(%r12),%eax
cmp    $0xc0000000,%eax
je     1279 <pcif_test+0x149>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0xc0000000,0x40(%r12)
mov    0x40(%r12),%eax
cmp    $0xc0000000,%eax
je     129a <pcif_test+0x16a>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0xffffffff,0x14(%r12)
ff ff
mov    0x14(%r12),%eax
cmp    $0xffff0000,%eax
je     12bb <pcif_test+0x18b>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0x30000000,0x14(%r12)
mov    0x14(%r12),%eax
cmp    $0x30000000,%eax
je     12dc <pcif_test+0x1ac>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    $0x2,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
mov    0x0(%r13),%eax
cmp    $0x2061ac8,%eax
je     12ff <pcif_test+0x1cf>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x4(%r13),%eax
cmp    $0x4100146,%eax
je     1316 <pcif_test+0x1e6>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x8(%r13),%eax
cmp    $0xb400000,%eax
je     132d <pcif_test+0x1fd>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0xc(%r13),%eax
cmp    $0x4000,%eax
je     1344 <pcif_test+0x214>
mov    $0x1,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0xffffffff,0x10(%r13)
ff
movl   $0xffffffff,0x14(%r13)
ff
movl   $0xffffffff,0x18(%r13)
ff
movl   $0xffffffff,0x1c(%r13)
ff
mov    0x10(%r13),%eax
cmp    $0xfffff000,%eax
je     137b <pcif_test+0x24b>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x14(%r13),%eax
cmp    $0xf0000000,%eax
je     1392 <pcif_test+0x262>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x18(%r13),%eax
cmp    $0xff800000,%eax
je     13a9 <pcif_test+0x279>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
cmpl   $0x0,0x1c(%r13)
je     13bc <pcif_test+0x28c>
mov    $0x2,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0x10000000,0x10(%r13)
10
movl   $0x40000000,0x14(%r13)
40
movl   $0x50000000,0x18(%r13)
50
mov    0x10(%r13),%eax
cmp    $0x10000000,%eax
je     13eb <pcif_test+0x2bb>
mov    $0x3,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x14(%r13),%eax
cmp    $0x40000000,%eax
je     1402 <pcif_test+0x2d2>
mov    $0x3,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0x18(%r13),%eax
cmp    $0x50000000,%eax
je     1419 <pcif_test+0x2e9>
mov    $0x3,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0x146,0xa804(%r13)
mov    0xa800(%r13),%eax
cmp    $0x3badaffe,%eax
je     143e <pcif_test+0x30e>
mov    $0x4,%edi
xor    %eax,%eax
call   1050 <fail@plt>
testl  $0x30000000,0x18(%r12)
je     1455 <pcif_test+0x325>
mov    $0x5,%edi
xor    %eax,%eax
call   1050 <fail@plt>
movl   $0xc0000000,0xa810(%r13)
movl   $0x30000000,0xa814(%r13)
mov    0xa810(%r13),%eax
cmp    $0xc0000000,%eax
je     1485 <pcif_test+0x355>
mov    $0x6,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    0xa814(%r13),%eax
cmp    $0x30000001,%eax
je     149f <pcif_test+0x36f>
mov    $0x6,%edi
xor    %eax,%eax
call   1050 <fail@plt>
testl  $0x30000000,0x18(%r12)
je     14b6 <pcif_test+0x386>
mov    $0x7,%edi
xor    %eax,%eax
call   1050 <fail@plt>
mov    %r14d,%eax
mov    %rax,0x8(%rsp)
mov    %ebx,%eax
mov    %rax,0x10(%rsp)
mov    0x8000(%r13),%eax
mov    $0x30000000,%eax
and    0x18(%r12),%eax
cmp    $0x20000000,%eax
je     14e9 <pcif_test+0x3b9>
mov    $0x8,%edi
xor    %eax,%eax
call   1050 <fail@plt>
xor    %r14d,%r14d
mov    $0x3,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
xor    %r8d,%r8d
xor    %r9d,%r9d
xor    %edx,%edx
xor    %esi,%esi
xor    %edi,%edi
xor    %ebp,%ebp
xor    %ebx,%ebx
mov    0x8(%rsp),%r10
nopl   (%rax)
mov    %ebx,%eax
or     %r14d,%eax
mov    %r8d,%ecx
or     %r9d,%ecx
or     %eax,%ecx
mov    %edx,%eax
or     %esi,%eax
or     %edi,%eax
or     %ecx,%eax
or     %ebp,%eax
mov    %eax,(%r10,%rbx,4)
add    $0x1,%rbx
add    $0x10,%ebp
add    $0x100,%edi
add    $0x1000,%esi
add    $0x10000,%edx
add    $0x100000,%r9d
add    $0x10000000,%r8d
add    $0x1000000,%r14d
cmp    $0x10,%rbx
jne    1510 <pcif_test+0x3e0>
xor    %esi,%esi
xor    %edi,%edi
xor    %ebp,%ebp
xor    %ebx,%ebx
xor    %r14d,%r14d
xor    %r15d,%r15d
xor    %r12d,%r12d
xor    %r13d,%r13d
jmp    15b4 <pcif_test+0x484>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r13
add    $0x10,%r12d
add    $0x100,%r15d
add    $0x1000,%r14d
add    $0x10000,%ebx
add    $0x100000,%ebp
add    $0x10000000,%edi
add    $0x1000000,%esi
cmp    $0x10,%r13
je     15f5 <pcif_test+0x4c5>
mov    (%r10,%r13,4),%eax
mov    %r13d,%ecx
or     %esi,%ecx
mov    %edi,%edx
or     %ebp,%edx
or     %ecx,%edx
mov    %ebx,%ecx
or     %r14d,%ecx
or     %r15d,%ecx
or     %edx,%ecx
or     %r12d,%ecx
cmp    %ecx,%eax
je     1580 <pcif_test+0x450>
mov    %edi,(%rsp)
mov    $0x1,%edi
xor    %eax,%eax
mov    %esi,0x4(%rsp)
call   1050 <fail@plt>
mov    (%rsp),%edi
mov    0x4(%rsp),%esi
mov    0x8(%rsp),%r10
jmp    1580 <pcif_test+0x450>
xor    %r14d,%r14d
mov    $0x4,%edi
xor    %eax,%eax
call   1040 <report_subtest@plt>
xor    %r8d,%r8d
xor    %r9d,%r9d
xor    %edx,%edx
xor    %esi,%esi
xor    %edi,%edi
xor    %ebp,%ebp
xor    %ebx,%ebx
mov    0x10(%rsp),%r10
nopl   0x0(%rax)
mov    %ebx,%eax
or     %r14d,%eax
mov    %r8d,%ecx
or     %r9d,%ecx
or     %eax,%ecx
mov    %edx,%eax
or     %esi,%eax
or     %edi,%eax
or     %ecx,%eax
or     %ebp,%eax
mov    %eax,(%r10,%rbx,4)
add    $0x1,%rbx
add    $0x10,%ebp
add    $0x100,%edi
add    $0x1000,%esi
add    $0x10000,%edx
add    $0x100000,%r9d
add    $0x10000000,%r8d
add    $0x1000000,%r14d
cmp    $0x10,%rbx
jne    1620 <pcif_test+0x4f0>
xor    %esi,%esi
xor    %edi,%edi
xor    %r14d,%r14d
xor    %r13d,%r13d
xor    %ebx,%ebx
xor    %ebp,%ebp
xor    %r15d,%r15d
xor    %r12d,%r12d
jmp    16c4 <pcif_test+0x594>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r12
add    $0x10,%r15d
add    $0x100,%ebp
add    $0x1000,%ebx
add    $0x10000,%r13d
add    $0x100000,%r14d
add    $0x10000000,%edi
add    $0x1000000,%esi
cmp    $0x10,%r12
je     1705 <pcif_test+0x5d5>
mov    (%r10,%r12,4),%eax
mov    %r12d,%ecx
or     %esi,%ecx
mov    %edi,%edx
or     %r14d,%edx
or     %ecx,%edx
mov    %r13d,%ecx
or     %ebx,%ecx
or     %ebp,%ecx
or     %edx,%ecx
or     %r15d,%ecx
cmp    %ecx,%eax
je     1690 <pcif_test+0x560>
mov    %edi,(%rsp)
mov    $0x1,%edi
xor    %eax,%eax
mov    %esi,0x4(%rsp)
call   1050 <fail@plt>
mov    (%rsp),%edi
mov    0x4(%rsp),%esi
mov    0x10(%rsp),%r10
jmp    1690 <pcif_test+0x560>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @pcif_test(i32 %0, i32 %1, i32 %2) {
%4 = zext i32 %0 to i64
%5 = inttoptr i64 %4 to i32*
%6 = zext i32 %1 to i64
%7 = inttoptr i64 %6 to i32*
%8 = add i32 %1, 65536
%9 = zext i32 %8 to i64
%10 = inttoptr i64 %9 to i32*
%11 = zext i32 %2 to i64
%12 = inttoptr i64 %11 to i32*
%13 = tail call i32 (i32, ...) bitcast (i32 (...)* @report_device to i32 (i32, ...)*)(i32 17256448)
%14 = getelementptr inbounds i32, i32* %10, i64 1
store volatile i32 326, i32* %14
%15 = getelementptr inbounds i32, i32* %10, i64 3
store volatile i32 16384, i32* %15
%16 = tail call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 1)
store volatile i32 -1, i32* %12
%17 = getelementptr inbounds i32, i32* %12, i64 1
store volatile i32 -1, i32* %17
%18 = load volatile i32, i32* %12
%19 = icmp eq i32 %18, -268435456
br i1 %19, label %22, label %20
20: ; preds = %3
%21 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %22
22: ; preds = %20, %3
%23 = load volatile i32, i32* %17
%24 = icmp eq i32 %23, -8388608
br i1 %24, label %27, label %25
25: ; preds = %22
%26 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %27
27: ; preds = %25, %22
store volatile i32 -1610612736, i32* %12
store volatile i32 -2147483648, i32* %17
%28 = load volatile i32, i32* %12
%29 = icmp eq i32 %28, -1610612736
br i1 %29, label %32, label %30
30: ; preds = %27
%31 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %32
32: ; preds = %30, %27
%33 = load volatile i32, i32* %17
%34 = icmp eq i32 %33, -2147483648
br i1 %34, label %37, label %35
35: ; preds = %32
%36 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %37
37: ; preds = %35, %32
%38 = getelementptr inbounds i32, i32* %12, i64 16
store volatile i32 -1, i32* %38
%39 = getelementptr inbounds i32, i32* %12, i64 17
store volatile i32 -1, i32* %39
%40 = getelementptr inbounds i32, i32* %12, i64 18
store volatile i32 -1, i32* %40
%41 = getelementptr inbounds i32, i32* %12, i64 19
store volatile i32 -1, i32* %41
%42 = load volatile i32, i32* %38
%43 = icmp eq i32 %42, -1073741824
br i1 %43, label %46, label %44
44: ; preds = %37
%45 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %46
46: ; preds = %44, %37
%47 = load volatile i32, i32* %39
%48 = icmp eq i32 %47, -1073741824
br i1 %48, label %51, label %49
49: ; preds = %46
%50 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %51
51: ; preds = %49, %46
%52 = load volatile i32, i32* %40
%53 = icmp eq i32 %52, -1073741824
br i1 %53, label %56, label %54
54: ; preds = %51
%55 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %56
56: ; preds = %54, %51
%57 = load volatile i32, i32* %41
%58 = icmp eq i32 %57, -1073741824
br i1 %58, label %61, label %59
59: ; preds = %56
%60 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %61
61: ; preds = %59, %56
store volatile i32 -1073741824, i32* %38
%62 = load volatile i32, i32* %38
%63 = icmp eq i32 %62, -1073741824
br i1 %63, label %66, label %64
64: ; preds = %61
%65 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %66
66: ; preds = %64, %61
%67 = getelementptr inbounds i32, i32* %12, i64 5
store volatile i32 -1, i32* %67
%68 = load volatile i32, i32* %67
%69 = icmp eq i32 %68, -65536
br i1 %69, label %72, label %70
70: ; preds = %66
%71 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %72
72: ; preds = %70, %66
store volatile i32 805306368, i32* %67
%73 = load volatile i32, i32* %67
%74 = icmp eq i32 %73, 805306368
br i1 %74, label %77, label %75
75: ; preds = %72
%76 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %77
77: ; preds = %75, %72
%78 = tail call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 2)
%79 = load volatile i32, i32* %10
%80 = icmp eq i32 %79, 33954504
br i1 %80, label %83, label %81
81: ; preds = %77
%82 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %83
83: ; preds = %81, %77
%84 = load volatile i32, i32* %14
%85 = icmp eq i32 %84, 68157766
br i1 %85, label %88, label %86
86: ; preds = %83
%87 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %88
88: ; preds = %86, %83
%89 = getelementptr inbounds i32, i32* %10, i64 2
%90 = load volatile i32, i32* %89
%91 = icmp eq i32 %90, 188743680
br i1 %91, label %94, label %92
92: ; preds = %88
%93 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %94
94: ; preds = %92, %88
%95 = load volatile i32, i32* %15
%96 = icmp eq i32 %95, 16384
br i1 %96, label %99, label %97
97: ; preds = %94
%98 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %99
99: ; preds = %97, %94
%100 = getelementptr inbounds i32, i32* %10, i64 4
store volatile i32 -1, i32* %100
%101 = getelementptr inbounds i32, i32* %10, i64 5
store volatile i32 -1, i32* %101
%102 = getelementptr inbounds i32, i32* %10, i64 6
store volatile i32 -1, i32* %102
%103 = getelementptr inbounds i32, i32* %10, i64 7
store volatile i32 -1, i32* %103
%104 = load volatile i32, i32* %100
%105 = icmp eq i32 %104, -4096
br i1 %105, label %108, label %106
106: ; preds = %99
%107 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %108
108: ; preds = %106, %99
%109 = load volatile i32, i32* %101
%110 = icmp eq i32 %109, -268435456
br i1 %110, label %113, label %111
111: ; preds = %108
%112 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %113
113: ; preds = %111, %108
%114 = load volatile i32, i32* %102
%115 = icmp eq i32 %114, -8388608
br i1 %115, label %118, label %116
116: ; preds = %113
%117 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %118
118: ; preds = %116, %113
%119 = load volatile i32, i32* %103
%120 = icmp eq i32 %119, 0
br i1 %120, label %123, label %121
121: ; preds = %118
%122 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 2)
br label %123
123: ; preds = %121, %118
store volatile i32 268435456, i32* %100
store volatile i32 1073741824, i32* %101
store volatile i32 1342177280, i32* %102
%124 = load volatile i32, i32* %100
%125 = icmp eq i32 %124, 268435456
br i1 %125, label %128, label %126
126: ; preds = %123
%127 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 3)
br label %128
128: ; preds = %126, %123
%129 = load volatile i32, i32* %101
%130 = icmp eq i32 %129, 1073741824
br i1 %130, label %133, label %131
131: ; preds = %128
%132 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 3)
br label %133
133: ; preds = %131, %128
%134 = load volatile i32, i32* %102
%135 = icmp eq i32 %134, 1342177280
br i1 %135, label %138, label %136
136: ; preds = %133
%137 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 3)
br label %138
138: ; preds = %136, %133
%139 = getelementptr inbounds i32, i32* %10, i64 10752
%140 = getelementptr inbounds i32, i32* %10, i64 10753
store volatile i32 326, i32* %140
%141 = load volatile i32, i32* %139
%142 = icmp eq i32 %141, 1001238526
br i1 %142, label %145, label %143
143: ; preds = %138
%144 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 4)
br label %145
145: ; preds = %143, %138
%146 = getelementptr inbounds i32, i32* %12, i64 6
%147 = load volatile i32, i32* %146
%148 = and i32 %147, 805306368
%149 = icmp eq i32 %148, 0
br i1 %149, label %152, label %150
150: ; preds = %145
%151 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 5)
br label %152
152: ; preds = %150, %145
%153 = getelementptr inbounds i32, i32* %10, i64 10756
store volatile i32 -1073741824, i32* %153
%154 = getelementptr inbounds i32, i32* %10, i64 10757
store volatile i32 805306368, i32* %154
%155 = load volatile i32, i32* %153
%156 = icmp eq i32 %155, -1073741824
br i1 %156, label %159, label %157
157: ; preds = %152
%158 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 6)
br label %159
159: ; preds = %157, %152
%160 = load volatile i32, i32* %154
%161 = icmp eq i32 %160, 805306369
br i1 %161, label %164, label %162
162: ; preds = %159
%163 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 6)
br label %164
164: ; preds = %162, %159
%165 = load volatile i32, i32* %146
%166 = and i32 %165, 805306368
%167 = icmp eq i32 %166, 0
br i1 %167, label %170, label %168
168: ; preds = %164
%169 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 7)
br label %170
170: ; preds = %168, %164
%171 = getelementptr inbounds i32, i32* %10, i64 8192
%172 = load volatile i32, i32* %171
%173 = load volatile i32, i32* %146
%174 = and i32 %173, 805306368
%175 = icmp eq i32 %174, 536870912
br i1 %175, label %178, label %176
176: ; preds = %170
%177 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 8)
br label %178
178: ; preds = %176, %170
%179 = tail call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 3)
br label %180
180: ; preds = %178, %180
%181 = phi i64 [ 0, %178 ], [ %204, %180 ]
%182 = trunc i64 %181 to i32
%183 = shl nuw nsw i32 %182, 24
%184 = or i32 %183, %182
%185 = trunc i64 %181 to i32
%186 = shl i32 %185, 28
%187 = or i32 %184, %186
%188 = trunc i64 %181 to i32
%189 = shl i32 %188, 20
%190 = or i32 %187, %189
%191 = trunc i64 %181 to i32
%192 = shl i32 %191, 16
%193 = or i32 %190, %192
%194 = trunc i64 %181 to i32
%195 = shl i32 %194, 12
%196 = or i32 %193, %195
%197 = trunc i64 %181 to i32
%198 = shl i32 %197, 8
%199 = or i32 %196, %198
%200 = trunc i64 %181 to i32
%201 = shl i32 %200, 4
%202 = or i32 %199, %201
%203 = getelementptr inbounds i32, i32* %5, i64 %181
store volatile i32 %202, i32* %203
%204 = add nuw nsw i64 %181, 1
%205 = icmp eq i64 %204, 16
br i1 %205, label %206, label %180
206: ; preds = %180, %234
%207 = phi i64 [ %235, %234 ], [ 0, %180 ]
%208 = trunc i64 %207 to i32
%209 = getelementptr inbounds i32, i32* %5, i64 %207
%210 = load volatile i32, i32* %209
%211 = shl nuw nsw i32 %208, 24
%212 = or i32 %211, %208
%213 = trunc i64 %207 to i32
%214 = shl i32 %213, 28
%215 = or i32 %212, %214
%216 = trunc i64 %207 to i32
%217 = shl i32 %216, 20
%218 = or i32 %215, %217
%219 = trunc i64 %207 to i32
%220 = shl i32 %219, 16
%221 = or i32 %218, %220
%222 = trunc i64 %207 to i32
%223 = shl i32 %222, 12
%224 = or i32 %221, %223
%225 = trunc i64 %207 to i32
%226 = shl i32 %225, 8
%227 = or i32 %224, %226
%228 = trunc i64 %207 to i32
%229 = shl i32 %228, 4
%230 = or i32 %227, %229
%231 = icmp eq i32 %210, %230
br i1 %231, label %234, label %232
232: ; preds = %206
%233 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %234
234: ; preds = %206, %232
%235 = add nuw nsw i64 %207, 1
%236 = icmp eq i64 %235, 16
br i1 %236, label %237, label %206
237: ; preds = %234
%238 = tail call i32 (i32, ...) bitcast (i32 (...)* @report_subtest to i32 (i32, ...)*)(i32 4)
br label %239
239: ; preds = %237, %239
%240 = phi i64 [ 0, %237 ], [ %263, %239 ]
%241 = trunc i64 %240 to i32
%242 = shl nuw nsw i32 %241, 24
%243 = or i32 %242, %241
%244 = trunc i64 %240 to i32
%245 = shl i32 %244, 28
%246 = or i32 %243, %245
%247 = trunc i64 %240 to i32
%248 = shl i32 %247, 20
%249 = or i32 %246, %248
%250 = trunc i64 %240 to i32
%251 = shl i32 %250, 16
%252 = or i32 %249, %251
%253 = trunc i64 %240 to i32
%254 = shl i32 %253, 12
%255 = or i32 %252, %254
%256 = trunc i64 %240 to i32
%257 = shl i32 %256, 8
%258 = or i32 %255, %257
%259 = trunc i64 %240 to i32
%260 = shl i32 %259, 4
%261 = or i32 %258, %260
%262 = getelementptr inbounds i32, i32* %7, i64 %240
store volatile i32 %261, i32* %262
%263 = add nuw nsw i64 %240, 1
%264 = icmp eq i64 %263, 16
br i1 %264, label %265, label %239
265: ; preds = %239, %293
%266 = phi i64 [ %294, %293 ], [ 0, %239 ]
%267 = trunc i64 %266 to i32
%268 = getelementptr inbounds i32, i32* %7, i64 %266
%269 = load volatile i32, i32* %268
%270 = shl nuw nsw i32 %267, 24
%271 = or i32 %270, %267
%272 = trunc i64 %266 to i32
%273 = shl i32 %272, 28
%274 = or i32 %271, %273
%275 = trunc i64 %266 to i32
%276 = shl i32 %275, 20
%277 = or i32 %274, %276
%278 = trunc i64 %266 to i32
%279 = shl i32 %278, 16
%280 = or i32 %277, %279
%281 = trunc i64 %266 to i32
%282 = shl i32 %281, 12
%283 = or i32 %280, %282
%284 = trunc i64 %266 to i32
%285 = shl i32 %284, 8
%286 = or i32 %283, %285
%287 = trunc i64 %266 to i32
%288 = shl i32 %287, 4
%289 = or i32 %286, %288
%290 = icmp eq i32 %269, %289
br i1 %290, label %293, label %291
291: ; preds = %265
%292 = tail call i32 (i32, ...) bitcast (i32 (...)* @fail to i32 (i32, ...)*)(i32 1)
br label %293
293: ; preds = %265, %291
%294 = add nuw nsw i64 %266, 1
%295 = icmp eq i64 %294, 16
br i1 %295, label %296, label %265
296: ; preds = %293
ret i32 undef
}