void f1(int x) {
  int i = 0, j = 0;
#pragma omp for
  for (i = 0; i < 16; i++)
    ;
#pragma omp for
  for (i = 0; 16 > i; i++)
    ;
#pragma omp for
  for (i = 0; i < 16; i = i + 2)
    ;
#pragma omp for
  for (i = 0; i < 16; i = 2 + i)
    ;
#pragma omp for
  for (i = i; i < 16; i++)
    ;
#pragma omp for
  for (i = 2 * (i & x); i < 16; i++)
    ;
#pragma omp for
  for (i = bar(i); i < 16; i++)
    ;
#pragma omp for
  for (i = baz(&i); i < 16; i++)
    ;
#pragma omp for
  for (i = 5; i < 2 * i + 17; i++)
    ;
#pragma omp for
  for (i = 5; 2 * i + 17 > i; i++)
    ;
#pragma omp for
  for (i = 5; bar(i) > i; i++)
    ;
#pragma omp for
  for (i = 5; i <= baz(&i); i++)
    ;
#pragma omp for
  for (i = 5; i <= i; i++)
    ;
#pragma omp for
  for (i = 5; i < 16; i += i)
    ;
#pragma omp for
  for (i = 5; i < 16; i = i + 2 * i)
    ;
#pragma omp for
  for (i = 5; i < 16; i = i + i)
    ;
#pragma omp for
  for (i = 5; i < 16; i = i + bar(i))
    ;
#pragma omp for
  for (i = 5; i < 16; i = baz(&i) + i)
    ;
#pragma omp for
  for (i = 5; i < 16; i += bar(i))
    ;
#pragma omp for
  for (i = 5; i < 16; i += baz(&i))
    ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = 0; j < 16; j += 2)
      ;
#pragma omp for collapse(2)
  for (i = j; i < 16; i = i + 2)
    for (j = 0; j < 16; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = i; j < 16; j += 2)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = i + 3; j < 16; j += 2)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = baz(&i); j < 16; j += 2)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = 16; j > (i & x); j--)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = 0; j < i; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = 0; j < i + 4; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < j + 4; i++)
    for (j = 0; j < 16; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < j; i++)
    for (j = 0; j < 16; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < bar(j); i++)
    for (j = 0; j < 16; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = 0; j < baz(&i); j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i += j)
    for (j = 0; j < 16; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = 0; j < 16; j += i)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i = j + i)
    for (j = 0; j < 16; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = 0; j < 16; j = j + i)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i = bar(j) + i)
    for (j = 0; j < 16; j++)
      ;
#pragma omp for collapse(2)
  for (i = 0; i < 16; i++)
    for (j = 0; j < 16; j = j + baz(&i))
      ;
}


x86 assembly (clang, -O0):
<f1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    115d <f1+0x3d>
jmp    114f <f1+0x2f>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1140 <f1+0x20>
movl   $0x0,-0x8(%rbp)
mov    $0x10,%eax
cmp    -0x8(%rbp),%eax
jle    1185 <f1+0x65>
jmp    1177 <f1+0x57>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1164 <f1+0x44>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    11a9 <f1+0x89>
jmp    119b <f1+0x7b>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    118c <f1+0x6c>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    11cd <f1+0xad>
jmp    11bf <f1+0x9f>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    11b0 <f1+0x90>
mov    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    11f0 <f1+0xd0>
jmp    11e2 <f1+0xc2>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11d3 <f1+0xb3>
mov    -0x8(%rbp),%eax
and    -0x4(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1219 <f1+0xf9>
jmp    120b <f1+0xeb>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11fc <f1+0xdc>
mov    -0x8(%rbp),%edi
mov    $0x0,%al
call   1040 <bar@plt>
mov    %eax,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1243 <f1+0x123>
jmp    1235 <f1+0x115>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1226 <f1+0x106>
lea    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <baz@plt>
mov    %eax,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    126e <f1+0x14e>
jmp    1260 <f1+0x140>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1251 <f1+0x131>
movl   $0x5,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x8(%rbp),%ecx
shl    $0x1,%ecx
add    $0x11,%ecx
cmp    %ecx,%eax
jge    129c <f1+0x17c>
jmp    128e <f1+0x16e>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1275 <f1+0x155>
movl   $0x5,-0x8(%rbp)
mov    -0x8(%rbp),%eax
shl    $0x1,%eax
add    $0x11,%eax
cmp    -0x8(%rbp),%eax
jle    12c8 <f1+0x1a8>
jmp    12ba <f1+0x19a>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12a3 <f1+0x183>
movl   $0x5,-0x8(%rbp)
mov    -0x8(%rbp),%edi
mov    $0x0,%al
call   1040 <bar@plt>
cmp    -0x8(%rbp),%eax
jle    12f5 <f1+0x1d5>
jmp    12e7 <f1+0x1c7>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12cf <f1+0x1af>
movl   $0x5,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x10(%rbp)
lea    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <baz@plt>
mov    %eax,%ecx
mov    -0x10(%rbp),%eax
cmp    %ecx,%eax
jg     132d <f1+0x20d>
jmp    131f <f1+0x1ff>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12fc <f1+0x1dc>
movl   $0x5,-0x8(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x8(%rbp),%eax
jg     1353 <f1+0x233>
jmp    1345 <f1+0x225>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1334 <f1+0x214>
movl   $0x5,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1377 <f1+0x257>
jmp    1369 <f1+0x249>
mov    -0x8(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    135a <f1+0x23a>
movl   $0x5,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    13a0 <f1+0x280>
jmp    138d <f1+0x26d>
mov    -0x8(%rbp),%eax
mov    -0x8(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x8(%rbp)
jmp    137e <f1+0x25e>
movl   $0x5,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    13c4 <f1+0x2a4>
jmp    13b6 <f1+0x296>
mov    -0x8(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    13a7 <f1+0x287>
movl   $0x5,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    13f9 <f1+0x2d9>
jmp    13da <f1+0x2ba>
mov    -0x8(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%edi
mov    $0x0,%al
call   1040 <bar@plt>
mov    %eax,%ecx
mov    -0x14(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x8(%rbp)
jmp    13cb <f1+0x2ab>
movl   $0x5,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1425 <f1+0x305>
jmp    140f <f1+0x2ef>
lea    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <baz@plt>
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    1400 <f1+0x2e0>
movl   $0x5,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1450 <f1+0x330>
jmp    143b <f1+0x31b>
mov    -0x8(%rbp),%edi
mov    $0x0,%al
call   1040 <bar@plt>
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    142c <f1+0x30c>
movl   $0x5,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    147c <f1+0x35c>
jmp    1466 <f1+0x346>
lea    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <baz@plt>
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    1457 <f1+0x337>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    14c4 <f1+0x3a4>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    14b1 <f1+0x391>
jmp    14a3 <f1+0x383>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    1494 <f1+0x374>
jmp    14b6 <f1+0x396>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    1483 <f1+0x363>
mov    -0xc(%rbp),%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    150b <f1+0x3eb>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    14f8 <f1+0x3d8>
jmp    14ea <f1+0x3ca>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    14db <f1+0x3bb>
jmp    14fd <f1+0x3dd>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    14ca <f1+0x3aa>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1552 <f1+0x432>
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    153f <f1+0x41f>
jmp    1531 <f1+0x411>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    1522 <f1+0x402>
jmp    1544 <f1+0x424>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    1512 <f1+0x3f2>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    159c <f1+0x47c>
mov    -0x8(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    1589 <f1+0x469>
jmp    157b <f1+0x45b>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    156c <f1+0x44c>
jmp    158e <f1+0x46e>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    1559 <f1+0x439>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    15eb <f1+0x4cb>
lea    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <baz@plt>
mov    %eax,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    15d8 <f1+0x4b8>
jmp    15ca <f1+0x4aa>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    15bb <f1+0x49b>
jmp    15dd <f1+0x4bd>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    15a3 <f1+0x483>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    163a <f1+0x51a>
movl   $0x10,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x8(%rbp),%ecx
and    -0x4(%rbp),%ecx
cmp    %ecx,%eax
jle    1627 <f1+0x507>
jmp    1619 <f1+0x4f9>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    1603 <f1+0x4e3>
jmp    162c <f1+0x50c>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    15f2 <f1+0x4d2>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1684 <f1+0x564>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1671 <f1+0x551>
jmp    1663 <f1+0x543>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1652 <f1+0x532>
jmp    1676 <f1+0x556>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1641 <f1+0x521>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    16d3 <f1+0x5b3>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x8(%rbp),%ecx
add    $0x4,%ecx
cmp    %ecx,%eax
jge    16c0 <f1+0x5a0>
jmp    16b2 <f1+0x592>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    169c <f1+0x57c>
jmp    16c5 <f1+0x5a5>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    168b <f1+0x56b>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    $0x4,%ecx
cmp    %ecx,%eax
jge    1722 <f1+0x602>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    170f <f1+0x5ef>
jmp    1701 <f1+0x5e1>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    16f2 <f1+0x5d2>
jmp    1714 <f1+0x5f4>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    16da <f1+0x5ba>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    176c <f1+0x64c>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    1759 <f1+0x639>
jmp    174b <f1+0x62b>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    173c <f1+0x61c>
jmp    175e <f1+0x63e>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1729 <f1+0x609>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0xc(%rbp),%edi
mov    $0x0,%al
call   1040 <bar@plt>
mov    %eax,%ecx
mov    -0x18(%rbp),%eax
cmp    %ecx,%eax
jge    17c7 <f1+0x6a7>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    17b4 <f1+0x694>
jmp    17a6 <f1+0x686>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1797 <f1+0x677>
jmp    17b9 <f1+0x699>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1773 <f1+0x653>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1823 <f1+0x703>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x1c(%rbp)
lea    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <baz@plt>
mov    %eax,%ecx
mov    -0x1c(%rbp),%eax
cmp    %ecx,%eax
jge    1810 <f1+0x6f0>
jmp    1802 <f1+0x6e2>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    17df <f1+0x6bf>
jmp    1815 <f1+0x6f5>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    17ce <f1+0x6ae>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    186b <f1+0x74b>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    1858 <f1+0x738>
jmp    184a <f1+0x72a>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    183b <f1+0x71b>
jmp    185d <f1+0x73d>
mov    -0xc(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    182a <f1+0x70a>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    18b3 <f1+0x793>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    18a0 <f1+0x780>
jmp    1892 <f1+0x772>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1883 <f1+0x763>
jmp    18a5 <f1+0x785>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1872 <f1+0x752>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    18fb <f1+0x7db>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    18e8 <f1+0x7c8>
jmp    18da <f1+0x7ba>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    18cb <f1+0x7ab>
jmp    18ed <f1+0x7cd>
mov    -0xc(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    18ba <f1+0x79a>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1943 <f1+0x823>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    1930 <f1+0x810>
jmp    1922 <f1+0x802>
mov    -0xc(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1913 <f1+0x7f3>
jmp    1935 <f1+0x815>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1902 <f1+0x7e2>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    1992 <f1+0x872>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    1978 <f1+0x858>
jmp    196a <f1+0x84a>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    195b <f1+0x83b>
jmp    197d <f1+0x85d>
mov    -0xc(%rbp),%edi
mov    $0x0,%al
call   1040 <bar@plt>
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    194a <f1+0x82a>
movl   $0x0,-0x8(%rbp)
cmpl   $0x10,-0x8(%rbp)
jge    19ec <f1+0x8cc>
movl   $0x0,-0xc(%rbp)
cmpl   $0x10,-0xc(%rbp)
jge    19d9 <f1+0x8b9>
jmp    19b9 <f1+0x899>
mov    -0xc(%rbp),%eax
mov    %eax,-0x20(%rbp)
lea    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <baz@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0xc(%rbp)
jmp    19aa <f1+0x88a>
jmp    19de <f1+0x8be>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1999 <f1+0x879>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<f1>:
push   %rbx
sub    $0x10,%rsp
add    %edi,%edi
and    $0x20,%edi
cmp    $0x11,%edi
mov    $0x10,%ebx
cmovb  %ebx,%edi
xor    %eax,%eax
call   1040 <bar@plt>
cmp    $0x11,%eax
cmovge %eax,%ebx
mov    %ebx,0xc(%rsp)
lea    0xc(%rsp),%rdi
xor    %eax,%eax
call   1030 <baz@plt>
mov    $0x5,%edi
nopw   0x0(%rax,%rax,1)
mov    %edi,0xc(%rsp)
xor    %eax,%eax
call   1040 <bar@plt>
mov    0xc(%rsp),%ecx
lea    0x1(%rcx),%edi
cmp    %ecx,%eax
jg     1160 <f1+0x40>
movl   $0x5,0xc(%rsp)
lea    0xc(%rsp),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <baz@plt>
nopl   (%rax)
addl   $0x1,0xc(%rsp)
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <baz@plt>
jmp    1190 <f1+0x70>

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

LLVM IR (-O2):
define void @f1(i32 %0) {
%2 = alloca i32
%3 = bitcast i32* %2 to i8*
%4 = shl i32 %0, 1
%5 = and i32 %4, 32
%6 = call i32 @llvm.umax.i32(i32 %5, i32 16)
%7 = tail call i32 (i32, ...) bitcast (i32 (...)* @bar to i32 (i32, ...)*)(i32 %6)
%8 = call i32 @llvm.smax.i32(i32 %7, i32 16)
store i32 %8, i32* %2
%9 = call i32 (i32*, ...) bitcast (i32 (...)* @baz to i32 (i32*, ...)*)(i32* %2)
br label %10
10: ; preds = %1, %10
%11 = phi i32 [ %15, %10 ], [ 5, %1 ]
store i32 %11, i32* %2
%12 = call i32 (i32, ...) bitcast (i32 (...)* @bar to i32 (i32, ...)*)(i32 %11)
%13 = load i32, i32* %2
%14 = icmp sgt i32 %12, %13
%15 = add nsw i32 %13, 1
br i1 %14, label %10, label %16
16: ; preds = %10
store i32 5, i32* %2
%17 = call i32 (i32*, ...) bitcast (i32 (...)* @baz to i32 (i32*, ...)*)(i32* %2)
%18 = icmp sgt i32 %17, 4
br label %19
19: ; preds = %16, %19
%20 = load i32, i32* %2
%21 = add nsw i32 %20, 1
store i32 %21, i32* %2
%22 = call i32 (i32*, ...) bitcast (i32 (...)* @baz to i32 (i32*, ...)*)(i32* %2)
%23 = icmp slt i32 %20, %22
br label %19
}