int main() {
  int N = random();
  p("types_compatible_p"
    "(int, float)",
    __builtin_types_compatible_p(int, float));
  p("choose_expr"
    "(0, 10, 20)",
    __builtin_choose_expr(0, 10, 20));
  p("constant_p"
    "(sizeof(10))",
    __builtin_constant_p(sizeof(10)));
  p("expect"
    "(N == 12, 0)",
    __builtin_expect(N == 12, 0));
  p("prefetch"
    "(&N)",
    (__builtin_prefetch(&N), 0));
  p("prefetch"
    "(&N, 1)",
    (__builtin_prefetch(&N, 1), 0));
  p("prefetch"
    "(&N, 1, 0)",
    (__builtin_prefetch(&N, 1, 0), 0));
  q("huge_val"
    "()",
    __builtin_huge_val());
  q("huge_valf"
    "()",
    __builtin_huge_valf());
  q("huge_vall"
    "()",
    __builtin_huge_vall());
  q("inf"
    "()",
    __builtin_inf());
  q("inff"
    "()",
    __builtin_inff());
  q("infl"
    "()",
    __builtin_infl());
  q("nan"
    "(\"\")",
    __builtin_nan(""));
  q("nanf"
    "(\"\")",
    __builtin_nanf(""));
  q("nanl"
    "(\"\")",
    __builtin_nanl(""));
  q("nans"
    "(\"\")",
    __builtin_nans(""));
  q("nan"
    "(\"10\")",
    __builtin_nan("10"));
  q("nanf"
    "(\"10\")",
    __builtin_nanf("10"));
  q("nanl"
    "(\"10\")",
    __builtin_nanl("10"));
  q("nans"
    "(\"10\")",
    __builtin_nans("10"));
  p("isgreater"
    "(1., 2.)",
    __builtin_isgreater(1., 2.));
  p("isgreaterequal"
    "(1., 2.)",
    __builtin_isgreaterequal(1., 2.));
  p("isless"
    "(1., 2.)",
    __builtin_isless(1., 2.));
  p("islessequal"
    "(1., 2.)",
    __builtin_islessequal(1., 2.));
  p("islessgreater"
    "(1., 2.)",
    __builtin_islessgreater(1., 2.));
  p("isunordered"
    "(1., 2.)",
    __builtin_isunordered(1., 2.));
  p("isnan"
    "(1.)",
    __builtin_isnan(1.));
  p("abs"
    "(N)",
    __builtin_abs(N));
  p("clz"
    "(N)",
    __builtin_clz(N));
  p("clzl"
    "(N)",
    __builtin_clzl(N));
  p("clzll"
    "(N)",
    __builtin_clzll(N));
  p("ctz"
    "(N)",
    __builtin_ctz(N));
  p("ctzl"
    "(N)",
    __builtin_ctzl(N));
  p("ctzll"
    "(N)",
    __builtin_ctzll(N));
  p("ffs"
    "(N)",
    __builtin_ffs(N));
  p("ffsl"
    "(N)",
    __builtin_ffsl(N));
  p("ffsll"
    "(N)",
    __builtin_ffsll(N));
  p("parity"
    "(N)",
    __builtin_parity(N));
  p("parityl"
    "(N)",
    __builtin_parityl(N));
  p("parityll"
    "(N)",
    __builtin_parityll(N));
  p("popcount"
    "(N)",
    __builtin_popcount(N));
  p("popcountl"
    "(N)",
    __builtin_popcountl(N));
  p("popcountll"
    "(N)",
    __builtin_popcountll(N));
  q("powi"
    "(1.2f, N)",
    __builtin_powi(1.2f, N));
  q("powif"
    "(1.2f, N)",
    __builtin_powif(1.2f, N));
  q("powil"
    "(1.2f, N)",
    __builtin_powil(1.2f, N));
  int a, b, n = random();
  char s0[10], s1[] = "Hello";
  p("strcat"
    "(s0, s1)",
    (__builtin_strcat(s0, s1), 0));
  p("strcmp"
    "(s0, s1)",
    (__builtin_strcmp(s0, s1), 0));
  p("strncat"
    "(s0, s1, n)",
    (__builtin_strncat(s0, s1, n), 0));
  p("strchr"
    "(s0, s1[0])",
    (__builtin_strchr(s0, s1[0]), 0));
  p("strrchr"
    "(s0, s1[0])",
    (__builtin_strrchr(s0, s1[0]), 0));
  p("strcpy"
    "(s0, s1)",
    (__builtin_strcpy(s0, s1), 0));
  p("strncpy"
    "(s0, s1, n)",
    (__builtin_strncpy(s0, s1, n), 0));
  p("__memset_chk"
    "(s0, 0, sizeof s0, n)",
    (__builtin___memset_chk(s0, 0, sizeof s0, n), 0));
  p("__memcpy_chk"
    "(s0, s1, sizeof s0, n)",
    (__builtin___memcpy_chk(s0, s1, sizeof s0, n), 0));
  p("__memmove_chk"
    "(s0, s1, sizeof s0, n)",
    (__builtin___memmove_chk(s0, s1, sizeof s0, n), 0));
  p("__mempcpy_chk"
    "(s0, s1, sizeof s0, n)",
    (__builtin___mempcpy_chk(s0, s1, sizeof s0, n), 0));
  p("__strncpy_chk"
    "(s0, s1, sizeof s0, n)",
    (__builtin___strncpy_chk(s0, s1, sizeof s0, n), 0));
  p("__strcpy_chk"
    "(s0, s1, n)",
    (__builtin___strcpy_chk(s0, s1, n), 0));
  s0[0] = 0;
  p("__strcat_chk"
    "(s0, s1, n)",
    (__builtin___strcat_chk(s0, s1, n), 0));
  p("object_size"
    "(s0, 0)",
    __builtin_object_size(s0, 0));
  p("object_size"
    "(s0, 1)",
    __builtin_object_size(s0, 1));
  p("object_size"
    "(s0, 2)",
    __builtin_object_size(s0, 2));
  p("object_size"
    "(s0, 3)",
    __builtin_object_size(s0, 3));
  p("bswap32"
    "(N)",
    __builtin_bswap32(N));
  p("bswap64"
    "(N)",
    __builtin_bswap64(N));
  p("trap"
    "()",
    (__builtin_trap(), 0));
  r("extract_return_addr"
    "(&N)",
    __builtin_extract_return_addr(&N));
  p("signbit"
    "(1.0)",
    __builtin_signbit(1.0));
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   10f0 <random@plt>
mov    %eax,-0x8(%rbp)
lea    0xe20(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xe2f(%rip),%rdi
mov    $0x14,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xe33(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <p@plt>
cmpl   $0xc,-0x8(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
movslq %eax,%rsi
lea    0xe28(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x8(%rbp),%rax
prefetcht0 (%rax)
lea    0xe26(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x8(%rbp),%rax
prefetcht0 (%rax)
lea    0xe1c(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x8(%rbp),%rax
prefetchnta (%rax)
lea    0xe15(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xe18(%rip),%rdi
movsd  0xd60(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xe0d(%rip),%rdi
movsd  0xd4a(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
mov    %rsp,%rax
flds   0xd02(%rip)
fstpt  (%rax)
lea    0xdf8(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
lea    0xdf6(%rip),%rdi
movsd  0xd1b(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xde6(%rip),%rdi
movsd  0xd05(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
mov    %rsp,%rax
flds   0xcbd(%rip)
fstpt  (%rax)
lea    0xdcc(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
lea    0xdc5(%rip),%rdi
movsd  0xcce(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xdb7(%rip),%rdi
movsd  0xcb8(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
mov    %rsp,%rax
flds   0xc74(%rip)
fstpt  (%rax)
lea    0xd9f(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
lea    0xd9a(%rip),%rdi
movsd  0xc81(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xd8d(%rip),%rdi
movsd  0xc63(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xd81(%rip),%rdi
movsd  0xc45(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
mov    %rsp,%rax
fldt   0xc65(%rip)
fstpt  (%rax)
lea    0xd6b(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
lea    0xd68(%rip),%rdi
movsd  0xc0e(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xd5d(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd5f(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd66(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd62(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd63(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd66(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd6a(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%esi
xor    %eax,%eax
sub    %esi,%eax
cmp    $0x0,%esi
cmovl  %eax,%esi
lea    0xd57(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%eax
bsr    %eax,%esi
xor    $0x1f,%esi
lea    0xd47(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsr    %rax,%rax
xor    $0x3f,%rax
mov    %eax,%esi
lea    0xd32(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsr    %rax,%rax
xor    $0x3f,%rax
mov    %eax,%esi
lea    0xd1e(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%eax
bsf    %eax,%esi
lea    0xd13(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsf    %rax,%rax
mov    %eax,%esi
lea    0xd02(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsf    %rax,%rax
mov    %eax,%esi
lea    0xcf2(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%ecx
bsf    %ecx,%esi
add    $0x1,%esi
xor    %eax,%eax
cmp    $0x0,%ecx
cmove  %eax,%esi
lea    0xcdc(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rdx
bsf    %rdx,%rax
add    $0x1,%rax
xor    %ecx,%ecx
cmp    $0x0,%rdx
cmove  %rcx,%rax
mov    %eax,%esi
lea    0xcbd(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rdx
bsf    %rdx,%rax
add    $0x1,%rax
xor    %ecx,%ecx
cmp    $0x0,%rdx
cmove  %rcx,%rax
mov    %eax,%esi
lea    0xc9f(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%ecx
mov    %ecx,%eax
shr    %eax
and    $0x55555555,%eax
sub    %eax,%ecx
mov    %ecx,%eax
and    $0x33333333,%eax
shr    $0x2,%ecx
and    $0x33333333,%ecx
add    %ecx,%eax
mov    %eax,%ecx
shr    $0x4,%ecx
add    %ecx,%eax
and    $0xf0f0f0f,%eax
imul   $0x1010101,%eax,%esi
shr    $0x18,%esi
and    $0x1,%esi
lea    0xc62(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rcx
mov    %rcx,%rax
shr    %rax
movabs $0x5555555555555555,%rdx
55 55 55
and    %rdx,%rax
sub    %rax,%rcx
movabs $0x3333333333333333,%rdx
33 33 33
mov    %rcx,%rax
and    %rdx,%rax
shr    $0x2,%rcx
and    %rdx,%rcx
add    %rcx,%rax
mov    %rax,%rcx
shr    $0x4,%rcx
add    %rcx,%rax
movabs $0xf0f0f0f0f0f0f0f,%rcx
0f 0f 0f
and    %rcx,%rax
movabs $0x101010101010101,%rcx
01 01 01
imul   %rcx,%rax
shr    $0x38,%rax
and    $0x1,%rax
mov    %eax,%esi
lea    0xbfb(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rcx
mov    %rcx,%rax
shr    %rax
movabs $0x5555555555555555,%rdx
55 55 55
and    %rdx,%rax
sub    %rax,%rcx
movabs $0x3333333333333333,%rdx
33 33 33
mov    %rcx,%rax
and    %rdx,%rax
shr    $0x2,%rcx
and    %rdx,%rcx
add    %rcx,%rax
mov    %rax,%rcx
shr    $0x4,%rcx
add    %rcx,%rax
movabs $0xf0f0f0f0f0f0f0f,%rcx
0f 0f 0f
and    %rcx,%rax
movabs $0x101010101010101,%rcx
01 01 01
imul   %rcx,%rax
shr    $0x38,%rax
and    $0x1,%rax
mov    %eax,%esi
lea    0xb95(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%ecx
mov    %ecx,%eax
shr    %eax
and    $0x55555555,%eax
sub    %eax,%ecx
mov    %ecx,%eax
and    $0x33333333,%eax
shr    $0x2,%ecx
and    $0x33333333,%ecx
add    %ecx,%eax
mov    %eax,%ecx
shr    $0x4,%ecx
add    %ecx,%eax
and    $0xf0f0f0f,%eax
imul   $0x1010101,%eax,%esi
shr    $0x18,%esi
lea    0xb5e(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rcx
mov    %rcx,%rax
shr    %rax
movabs $0x5555555555555555,%rdx
55 55 55
and    %rdx,%rax
sub    %rax,%rcx
movabs $0x3333333333333333,%rdx
33 33 33
mov    %rcx,%rax
and    %rdx,%rax
shr    $0x2,%rcx
and    %rdx,%rcx
add    %rcx,%rax
mov    %rax,%rcx
shr    $0x4,%rcx
add    %rcx,%rax
movabs $0xf0f0f0f0f0f0f0f,%rcx
0f 0f 0f
and    %rcx,%rax
movabs $0x101010101010101,%rcx
01 01 01
imul   %rcx,%rax
shr    $0x38,%rax
mov    %eax,%esi
lea    0xafd(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rcx
mov    %rcx,%rax
shr    %rax
movabs $0x5555555555555555,%rdx
55 55 55
and    %rdx,%rax
sub    %rax,%rcx
movabs $0x3333333333333333,%rdx
33 33 33
mov    %rcx,%rax
and    %rdx,%rax
shr    $0x2,%rcx
and    %rdx,%rcx
add    %rcx,%rax
mov    %rax,%rcx
shr    $0x4,%rcx
add    %rcx,%rax
movabs $0xf0f0f0f0f0f0f0f,%rcx
0f 0f 0f
and    %rcx,%rax
movabs $0x101010101010101,%rcx
01 01 01
imul   %rcx,%rax
shr    $0x38,%rax
mov    %eax,%esi
lea    0xa9d(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%edi
movsd  0x81d(%rip),%xmm0
call   1b50 <__powidf2>
lea    0xa8d(%rip),%rdi
mov    $0x1,%al
call   1110 <q@plt>
mov    -0x8(%rbp),%edi
movss  0x7ef(%rip),%xmm0
call   1b00 <__powisf2>
cvtss2sd %xmm0,%xmm0
lea    0xa79(%rip),%rdi
mov    $0x1,%al
call   1110 <q@plt>
mov    -0x8(%rbp),%edi
mov    %rsp,%rax
flds   0x7cc(%rip)
fstpt  (%rax)
call   1ba0 <__powixf2>
mov    %rsp,%rax
fstpt  (%rax)
lea    0xa62(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
mov    $0x0,%al
call   10f0 <random@plt>
mov    %eax,-0x14(%rbp)
mov    0xa5a(%rip),%eax
mov    %eax,-0x24(%rbp)
mov    0xa54(%rip),%ax
mov    %ax,-0x20(%rbp)
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
call   1130 <strcat@plt>
lea    0xa3e(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
call   10c0 <strcmp@plt>
lea    0xa30(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rdx
call   10b0 <strncat@plt>
lea    0xa1e(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
movsbl -0x24(%rbp),%esi
call   1090 <strchr@plt>
lea    0xa14(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
movsbl -0x24(%rbp),%esi
call   10a0 <strrchr@plt>
lea    0xa09(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
call   1060 <strcpy@plt>
lea    0x9ff(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rdx
call   1050 <strncpy@plt>
lea    0x9ed(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
movslq -0x14(%rbp),%rcx
xor    %esi,%esi
mov    $0xa,%edx
call   1140 <__memset_chk@plt>
lea    0x9dc(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rcx
mov    $0xa,%edx
call   10e0 <__memcpy_chk@plt>
lea    0x9d8(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rcx
mov    $0xa,%edx
call   10d0 <__memmove_chk@plt>
lea    0x9d5(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rcx
mov    $0xa,%edx
call   1040 <__mempcpy_chk@plt>
lea    0x9d3(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rcx
mov    $0xa,%edx
call   1100 <__strncpy_chk@plt>
lea    0x9d1(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rdx
call   1120 <__strcpy_chk@plt>
lea    0x9d4(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
movb   $0x0,-0x1e(%rbp)
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
movslq -0x14(%rbp),%rdx
call   1030 <__strcat_chk@plt>
lea    0x9c7(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9cf(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9cf(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9cf(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9cf(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%esi
bswap  %esi
lea    0x9ca(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rsi
bswap  %rsi
lea    0x9c0(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
ud2
lea    0x9bb(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x8(%rbp),%rsi
lea    0x9ae(%rip),%rdi
mov    $0x0,%al
call   1070 <r@plt>
lea    0x9b8(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x38,%rsp
xor    %eax,%eax
call   10b0 <random@plt>
mov    %eax,%ebx
mov    %eax,0x18(%rsp)
lea    0xe62(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xe71(%rip),%rdi
mov    $0x14,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xe75(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1070 <p@plt>
xor    %esi,%esi
cmp    $0xc,%ebx
sete   %sil
lea    0xe70(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
prefetcht0 0x18(%rsp)
lea    0xe70(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
prefetcht0 0x18(%rsp)
lea    0xe68(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
prefetchnta 0x18(%rsp)
lea    0xe63(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xe66(%rip),%rdi
movsd  0xd6e(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xe5b(%rip),%rdi
movsd  0xd58(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
flds   0xd83(%rip)
fld    %st(0)
fstpt  0x24(%rsp)
fstpt  (%rsp)
lea    0xe42(%rip),%rdi
xor    %eax,%eax
call   10d0 <q@plt>
lea    0xe40(%rip),%rdi
movsd  0xd25(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xe30(%rip),%rdi
movsd  0xd0f(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
fldt   0x24(%rsp)
fstpt  (%rsp)
lea    0xe1a(%rip),%rdi
xor    %eax,%eax
call   10d0 <q@plt>
lea    0xe13(%rip),%rdi
movsd  0xcec(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xe05(%rip),%rdi
movsd  0xcd6(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
flds   0xcfd(%rip)
fstpt  (%rsp)
lea    0xdef(%rip),%rdi
xor    %eax,%eax
call   10d0 <q@plt>
lea    0xdea(%rip),%rdi
movsd  0xcb1(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xddd(%rip),%rdi
movsd  0xca3(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xdd1(%rip),%rdi
movsd  0xc95(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
fldt   0xcb8(%rip)
fstpt  (%rsp)
lea    0xdbd(%rip),%rdi
xor    %eax,%eax
call   10d0 <q@plt>
lea    0xdba(%rip),%rdi
movsd  0xc70(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xdaf(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdb1(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdb8(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdb4(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdb5(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdb8(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdbc(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    %ebx,%esi
neg    %esi
cmovs  %ebx,%esi
lea    0xdaf(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
bsr    %ebx,%esi
xor    $0x1f,%esi
lea    0xda2(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
movslq %ebx,%r14
bsr    %r14,%rbx
xor    $0x3f,%ebx
lea    0xd91(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd89(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
bsf    %r14d,%ebx
lea    0xd7e(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd75(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd6d(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
test   %r14d,%r14d
mov    $0xffffffff,%ebp
cmovne %ebx,%ebp
add    $0x1,%ebp
lea    0xd58(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd4f(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd47(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    %r14d,%eax
shr    %eax
and    $0x55555555,%eax
mov    %r14d,%ecx
sub    %eax,%ecx
mov    %ecx,%eax
and    $0x33333333,%eax
shr    $0x2,%ecx
and    $0x33333333,%ecx
add    %eax,%ecx
mov    %ecx,%eax
shr    $0x4,%eax
add    %ecx,%eax
and    $0xf0f0f0f,%eax
imul   $0x1010101,%eax,%r15d
shr    $0x18,%r15d
mov    %r15d,%esi
and    $0x1,%esi
lea    0xd02(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
mov    %r14,%rax
shr    %rax
movabs $0x5555555555555555,%rcx
55 55 55
and    %rax,%rcx
mov    %r14,%rax
sub    %rcx,%rax
movabs $0x3333333333333333,%rcx
33 33 33
mov    %rax,%rdx
and    %rcx,%rdx
shr    $0x2,%rax
and    %rcx,%rax
add    %rdx,%rax
mov    %rax,%rcx
shr    $0x4,%rcx
add    %rax,%rcx
movabs $0xf0f0f0f0f0f0f0f,%rax
0f 0f 0f
and    %rcx,%rax
movabs $0x101010101010101,%rbx
01 01 01
imul   %rax,%rbx
shr    $0x38,%rbx
mov    %ebx,%ebp
and    $0x1,%ebp
lea    0xc9d(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc98(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc94(%rip),%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc8f(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc8c(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
movsd  0xa2d(%rip),%xmm0
mov    %r14d,%edi
call   18e0 <__powidf2>
lea    0xc7a(%rip),%rdi
mov    $0x1,%al
call   10d0 <q@plt>
movss  0xa1f(%rip),%xmm0
mov    %r14d,%edi
call   1890 <__powisf2>
cvtss2sd %xmm0,%xmm0
lea    0xc66(%rip),%rdi
mov    $0x1,%al
call   10d0 <q@plt>
flds   0x9ff(%rip)
fstpt  (%rsp)
mov    %r14d,%edi
call   1930 <__powixf2>
fstpt  (%rsp)
lea    0xc53(%rip),%rdi
xor    %eax,%eax
call   10d0 <q@plt>
xor    %eax,%eax
call   10b0 <random@plt>
mov    %eax,%ebx
movw   $0x6f,0x20(%rsp)
movl   $0x6c6c6548,0x1c(%rsp)
6c
lea    0x2e(%rsp),%r15
lea    0x1c(%rsp),%r14
mov    %r15,%rdi
mov    %r14,%rsi
call   10f0 <strcat@plt>
lea    0xc2d(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc2c(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
movslq %ebx,%rbx
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
call   1080 <strncat@plt>
lea    0xc1a(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc1d(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc1f(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    %r15,%rdi
mov    %r14,%rsi
call   1060 <strcpy@plt>
lea    0xc17(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
call   1050 <strncpy@plt>
lea    0xc08(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    $0xa,%edx
mov    %r15,%rdi
xor    %esi,%esi
mov    %rbx,%rcx
call   1100 <__memset_chk@plt>
lea    0xbf9(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    $0xa,%edx
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rcx
call   10a0 <__memcpy_chk@plt>
lea    0xbf8(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    $0xa,%edx
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rcx
call   1090 <__memmove_chk@plt>
lea    0xbf8(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    $0xa,%edx
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rcx
call   1040 <__mempcpy_chk@plt>
lea    0xbf9(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    $0xa,%edx
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rcx
call   10c0 <__strncpy_chk@plt>
lea    0xbfa(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
call   10e0 <__strcpy_chk@plt>
lea    0xc00(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
movb   $0x0,0x2e(%rsp)
mov    %r15,%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
call   1030 <__strcat_chk@plt>
lea    0xbf5(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xbfd(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xbfd(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xbfd(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xbfd(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
movslq 0x18(%rsp),%rbx
mov    %ebx,%esi
bswap  %esi
lea    0xbf4(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
bswap  %rbx
lea    0xbee(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1070 <p@plt>
ud2
nopl   0x0(%rax)

LLVM IR (-O0):
@.str = [31 x i8] c"types_compatible_p(int, float)\00"
@.str.1 = [23 x i8] c"choose_expr(0, 10, 20)\00"
@.str.2 = [23 x i8] c"constant_p(sizeof(10))\00"
@.str.3 = [19 x i8] c"expect(N == 12, 0)\00"
@.str.4 = [13 x i8] c"prefetch(&N)\00"
@.str.5 = [16 x i8] c"prefetch(&N, 1)\00"
@.str.6 = [19 x i8] c"prefetch(&N, 1, 0)\00"
@.str.7 = [11 x i8] c"huge_val()\00"
@.str.8 = [12 x i8] c"huge_valf()\00"
@.str.9 = [12 x i8] c"huge_vall()\00"
@.str.10 = [6 x i8] c"inf()\00"
@.str.11 = [7 x i8] c"inff()\00"
@.str.12 = [7 x i8] c"infl()\00"
@.str.13 = [8 x i8] c"nan(\22\22)\00"
@.str.14 = [9 x i8] c"nanf(\22\22)\00"
@.str.15 = [9 x i8] c"nanl(\22\22)\00"
@.str.16 = [9 x i8] c"nans(\22\22)\00"
@.str.17 = [10 x i8] c"nan(\2210\22)\00"
@.str.18 = [11 x i8] c"nanf(\2210\22)\00"
@.str.19 = [11 x i8] c"nanl(\2210\22)\00"
@.str.20 = [11 x i8] c"nans(\2210\22)\00"
@.str.21 = [18 x i8] c"isgreater(1., 2.)\00"
@.str.22 = [23 x i8] c"isgreaterequal(1., 2.)\00"
@.str.23 = [15 x i8] c"isless(1., 2.)\00"
@.str.24 = [20 x i8] c"islessequal(1., 2.)\00"
@.str.25 = [22 x i8] c"islessgreater(1., 2.)\00"
@.str.26 = [20 x i8] c"isunordered(1., 2.)\00"
@.str.27 = [10 x i8] c"isnan(1.)\00"
@.str.28 = [7 x i8] c"abs(N)\00"
@.str.29 = [7 x i8] c"clz(N)\00"
@.str.30 = [8 x i8] c"clzl(N)\00"
@.str.31 = [9 x i8] c"clzll(N)\00"
@.str.32 = [7 x i8] c"ctz(N)\00"
@.str.33 = [8 x i8] c"ctzl(N)\00"
@.str.34 = [9 x i8] c"ctzll(N)\00"
@.str.35 = [7 x i8] c"ffs(N)\00"
@.str.36 = [8 x i8] c"ffsl(N)\00"
@.str.37 = [9 x i8] c"ffsll(N)\00"
@.str.38 = [10 x i8] c"parity(N)\00"
@.str.39 = [11 x i8] c"parityl(N)\00"
@.str.40 = [12 x i8] c"parityll(N)\00"
@.str.41 = [12 x i8] c"popcount(N)\00"
@.str.42 = [13 x i8] c"popcountl(N)\00"
@.str.43 = [14 x i8] c"popcountll(N)\00"
@.str.44 = [14 x i8] c"powi(1.2f, N)\00"
@.str.45 = [15 x i8] c"powif(1.2f, N)\00"
@.str.46 = [15 x i8] c"powil(1.2f, N)\00"
@__const.main.s1 = [6 x i8] c"Hello\00"
@.str.47 = [15 x i8] c"strcat(s0, s1)\00"
@.str.48 = [15 x i8] c"strcmp(s0, s1)\00"
@.str.49 = [19 x i8] c"strncat(s0, s1, n)\00"
@.str.50 = [18 x i8] c"strchr(s0, s1[0])\00"
@.str.51 = [19 x i8] c"strrchr(s0, s1[0])\00"
@.str.52 = [15 x i8] c"strcpy(s0, s1)\00"
@.str.53 = [19 x i8] c"strncpy(s0, s1, n)\00"
@.str.54 = [34 x i8] c"__memset_chk(s0, 0, sizeof s0, n)\00"
@.str.55 = [35 x i8] c"__memcpy_chk(s0, s1, sizeof s0, n)\00"
@.str.56 = [36 x i8] c"__memmove_chk(s0, s1, sizeof s0, n)\00"
@.str.57 = [36 x i8] c"__mempcpy_chk(s0, s1, sizeof s0, n)\00"
@.str.58 = [36 x i8] c"__strncpy_chk(s0, s1, sizeof s0, n)\00"
@.str.59 = [24 x i8] c"__strcpy_chk(s0, s1, n)\00"
@.str.60 = [24 x i8] c"__strcat_chk(s0, s1, n)\00"
@.str.61 = [19 x i8] c"object_size(s0, 0)\00"
@.str.62 = [19 x i8] c"object_size(s0, 1)\00"
@.str.63 = [19 x i8] c"object_size(s0, 2)\00"
@.str.64 = [19 x i8] c"object_size(s0, 3)\00"
@.str.65 = [11 x i8] c"bswap32(N)\00"
@.str.66 = [11 x i8] c"bswap64(N)\00"
@.str.67 = [7 x i8] c"trap()\00"
@.str.68 = [24 x i8] c"extract_return_addr(&N)\00"
@.str.69 = [13 x i8] c"signbit(1.0)\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca [10 x i8]
%7 = alloca [6 x i8]
store i32 0, i32* %1
%8 = call i32 (...) @random()
store i32 %8, i32* %2
%9 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 0)
%10 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 20)
%11 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0), i32 1)
%12 = load i32, i32* %2
%13 = icmp eq i32 %12, 12
%14 = zext i1 %13 to i32
%15 = sext i32 %14 to i64
%16 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), i64 %15)
%17 = bitcast i32* %2 to i8*
%18 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0), i32 0)
%19 = bitcast i32* %2 to i8*
%20 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.5, i64 0, i64 0), i32 0)
%21 = bitcast i32* %2 to i8*
%22 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.6, i64 0, i64 0), i32 0)
%23 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0), double 0x7FF0000000000000)
%24 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.8, i64 0, i64 0), double 0x7FF0000000000000)
%25 = call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0), x86_fp80 0xK7FFF8000000000000000)
%26 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), double 0x7FF0000000000000)
%27 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0), double 0x7FF0000000000000)
%28 = call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0), x86_fp80 0xK7FFF8000000000000000)
%29 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.13, i64 0, i64 0), double 0x7FF8000000000000)
%30 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.14, i64 0, i64 0), double 0x7FF8000000000000)
%31 = call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0), x86_fp80 0xK7FFFC000000000000000)
%32 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0), double 0x7FF4000000000000)
%33 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), double 0x7FF800000000000A)
%34 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.18, i64 0, i64 0), double 0x7FF8000140000000)
%35 = call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.19, i64 0, i64 0), x86_fp80 0xK7FFFC00000000000000A)
%36 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.20, i64 0, i64 0), double 0x7FF000000000000A)
%37 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.21, i64 0, i64 0), i32 0)
%38 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.22, i64 0, i64 0), i32 0)
%39 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.23, i64 0, i64 0), i32 1)
%40 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.24, i64 0, i64 0), i32 1)
%41 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.25, i64 0, i64 0), i32 1)
%42 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.26, i64 0, i64 0), i32 0)
%43 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.27, i64 0, i64 0), i32 0)
%44 = load i32, i32* %2
%45 = sub nsw i32 0, %44
%46 = icmp slt i32 %44, 0
%47 = select i1 %46, i32 %45, i32 %44
%48 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.28, i64 0, i64 0), i32 %47)
%49 = load i32, i32* %2
%50 = call i32 @llvm.ctlz.i32(i32 %49, i1 true)
%51 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.29, i64 0, i64 0), i32 %50)
%52 = load i32, i32* %2
%53 = sext i32 %52 to i64
%54 = call i64 @llvm.ctlz.i64(i64 %53, i1 true)
%55 = trunc i64 %54 to i32
%56 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.30, i64 0, i64 0), i32 %55)
%57 = load i32, i32* %2
%58 = sext i32 %57 to i64
%59 = call i64 @llvm.ctlz.i64(i64 %58, i1 true)
%60 = trunc i64 %59 to i32
%61 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.31, i64 0, i64 0), i32 %60)
%62 = load i32, i32* %2
%63 = call i32 @llvm.cttz.i32(i32 %62, i1 true)
%64 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.32, i64 0, i64 0), i32 %63)
%65 = load i32, i32* %2
%66 = sext i32 %65 to i64
%67 = call i64 @llvm.cttz.i64(i64 %66, i1 true)
%68 = trunc i64 %67 to i32
%69 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.33, i64 0, i64 0), i32 %68)
%70 = load i32, i32* %2
%71 = sext i32 %70 to i64
%72 = call i64 @llvm.cttz.i64(i64 %71, i1 true)
%73 = trunc i64 %72 to i32
%74 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i64 0, i64 0), i32 %73)
%75 = load i32, i32* %2
%76 = call i32 @llvm.cttz.i32(i32 %75, i1 true)
%77 = add i32 %76, 1
%78 = icmp eq i32 %75, 0
%79 = select i1 %78, i32 0, i32 %77
%80 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.35, i64 0, i64 0), i32 %79)
%81 = load i32, i32* %2
%82 = sext i32 %81 to i64
%83 = call i64 @llvm.cttz.i64(i64 %82, i1 true)
%84 = add i64 %83, 1
%85 = icmp eq i64 %82, 0
%86 = select i1 %85, i64 0, i64 %84
%87 = trunc i64 %86 to i32
%88 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.36, i64 0, i64 0), i32 %87)
%89 = load i32, i32* %2
%90 = sext i32 %89 to i64
%91 = call i64 @llvm.cttz.i64(i64 %90, i1 true)
%92 = add i64 %91, 1
%93 = icmp eq i64 %90, 0
%94 = select i1 %93, i64 0, i64 %92
%95 = trunc i64 %94 to i32
%96 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.37, i64 0, i64 0), i32 %95)
%97 = load i32, i32* %2
%98 = call i32 @llvm.ctpop.i32(i32 %97)
%99 = and i32 %98, 1
%100 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i64 0, i64 0), i32 %99)
%101 = load i32, i32* %2
%102 = sext i32 %101 to i64
%103 = call i64 @llvm.ctpop.i64(i64 %102)
%104 = and i64 %103, 1
%105 = trunc i64 %104 to i32
%106 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.39, i64 0, i64 0), i32 %105)
%107 = load i32, i32* %2
%108 = sext i32 %107 to i64
%109 = call i64 @llvm.ctpop.i64(i64 %108)
%110 = and i64 %109, 1
%111 = trunc i64 %110 to i32
%112 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.40, i64 0, i64 0), i32 %111)
%113 = load i32, i32* %2
%114 = call i32 @llvm.ctpop.i32(i32 %113)
%115 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.41, i64 0, i64 0), i32 %114)
%116 = load i32, i32* %2
%117 = sext i32 %116 to i64
%118 = call i64 @llvm.ctpop.i64(i64 %117)
%119 = trunc i64 %118 to i32
%120 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.42, i64 0, i64 0), i32 %119)
%121 = load i32, i32* %2
%122 = sext i32 %121 to i64
%123 = call i64 @llvm.ctpop.i64(i64 %122)
%124 = trunc i64 %123 to i32
%125 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.43, i64 0, i64 0), i32 %124)
%126 = load i32, i32* %2
%127 = call double @llvm.powi.f64.i32(double 0x3FF3333340000000, i32 %126)
%128 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.44, i64 0, i64 0), double %127)
%129 = load i32, i32* %2
%130 = call float @llvm.powi.f32.i32(float 0x3FF3333340000000, i32 %129)
%131 = fpext float %130 to double
%132 = call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.45, i64 0, i64 0), double %131)
%133 = load i32, i32* %2
%134 = call x86_fp80 @llvm.powi.f80.i32(x86_fp80 0xK3FFF99999A0000000000, i32 %133)
%135 = call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.46, i64 0, i64 0), x86_fp80 %134)
%136 = call i32 (...) @random()
store i32 %136, i32* %5
%137 = bitcast [6 x i8]* %7 to i8*
%138 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%139 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%140 = call i8* @strcat(i8* %138, i8* %139)
%141 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.47, i64 0, i64 0), i32 0)
%142 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%143 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%144 = call i32 @strcmp(i8* %142, i8* %143)
%145 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.48, i64 0, i64 0), i32 0)
%146 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%147 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%148 = load i32, i32* %5
%149 = sext i32 %148 to i64
%150 = call i8* @strncat(i8* %146, i8* %147, i64 %149)
%151 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.49, i64 0, i64 0), i32 0)
%152 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%153 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%154 = load i8, i8* %153
%155 = sext i8 %154 to i32
%156 = call i8* @strchr(i8* %152, i32 %155)
%157 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.50, i64 0, i64 0), i32 0)
%158 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%159 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%160 = load i8, i8* %159
%161 = sext i8 %160 to i32
%162 = call i8* @strrchr(i8* %158, i32 %161)
%163 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.51, i64 0, i64 0), i32 0)
%164 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%165 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%166 = call i8* @strcpy(i8* %164, i8* %165)
%167 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.52, i64 0, i64 0), i32 0)
%168 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%169 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%170 = load i32, i32* %5
%171 = sext i32 %170 to i64
%172 = call i8* @strncpy(i8* %168, i8* %169, i64 %171)
%173 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.53, i64 0, i64 0), i32 0)
%174 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%175 = load i32, i32* %5
%176 = sext i32 %175 to i64
%177 = call i8* @__memset_chk(i8* %174, i32 0, i64 10, i64 %176)
%178 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.54, i64 0, i64 0), i32 0)
%179 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%180 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%181 = load i32, i32* %5
%182 = sext i32 %181 to i64
%183 = call i8* @__memcpy_chk(i8* %179, i8* %180, i64 10, i64 %182)
%184 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.55, i64 0, i64 0), i32 0)
%185 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%186 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%187 = load i32, i32* %5
%188 = sext i32 %187 to i64
%189 = call i8* @__memmove_chk(i8* %185, i8* %186, i64 10, i64 %188)
%190 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.56, i64 0, i64 0), i32 0)
%191 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%192 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%193 = load i32, i32* %5
%194 = sext i32 %193 to i64
%195 = call i8* @__mempcpy_chk(i8* %191, i8* %192, i64 10, i64 %194)
%196 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.57, i64 0, i64 0), i32 0)
%197 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%198 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%199 = load i32, i32* %5
%200 = sext i32 %199 to i64
%201 = call i8* @__strncpy_chk(i8* %197, i8* %198, i64 10, i64 %200)
%202 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.58, i64 0, i64 0), i32 0)
%203 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%204 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%205 = load i32, i32* %5
%206 = sext i32 %205 to i64
%207 = call i8* @__strcpy_chk(i8* %203, i8* %204, i64 %206)
%208 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.59, i64 0, i64 0), i32 0)
%209 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
store i8 0, i8* %209
%210 = getelementptr inbounds [10 x i8], [10 x i8]* %6, i64 0, i64 0
%211 = getelementptr inbounds [6 x i8], [6 x i8]* %7, i64 0, i64 0
%212 = load i32, i32* %5
%213 = sext i32 %212 to i64
%214 = call i8* @__strcat_chk(i8* %210, i8* %211, i64 %213)
%215 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.60, i64 0, i64 0), i32 0)
%216 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.61, i64 0, i64 0), i64 10)
%217 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.62, i64 0, i64 0), i64 10)
%218 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.63, i64 0, i64 0), i64 10)
%219 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.64, i64 0, i64 0), i64 10)
%220 = load i32, i32* %2
%221 = call i32 @llvm.bswap.i32(i32 %220)
%222 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.65, i64 0, i64 0), i32 %221)
%223 = load i32, i32* %2
%224 = sext i32 %223 to i64
%225 = call i64 @llvm.bswap.i64(i64 %224)
%226 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.66, i64 0, i64 0), i64 %225)
%227 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.67, i64 0, i64 0), i32 0)
%228 = bitcast i32* %2 to i8*
%229 = call i32 (i8*, i8*, ...) bitcast (i32 (...)* @r to i32 (i8*, i8*, ...)*)(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.68, i64 0, i64 0), i8* %228)
%230 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.69, i64 0, i64 0), i32 0)
ret i32 0
}

LLVM IR (-O2):
@.str = [31 x i8] c"types_compatible_p(int, float)\00"
@.str.1 = [23 x i8] c"choose_expr(0, 10, 20)\00"
@.str.2 = [23 x i8] c"constant_p(sizeof(10))\00"
@.str.3 = [19 x i8] c"expect(N == 12, 0)\00"
@.str.4 = [13 x i8] c"prefetch(&N)\00"
@.str.5 = [16 x i8] c"prefetch(&N, 1)\00"
@.str.6 = [19 x i8] c"prefetch(&N, 1, 0)\00"
@.str.7 = [11 x i8] c"huge_val()\00"
@.str.8 = [12 x i8] c"huge_valf()\00"
@.str.9 = [12 x i8] c"huge_vall()\00"
@.str.10 = [6 x i8] c"inf()\00"
@.str.11 = [7 x i8] c"inff()\00"
@.str.12 = [7 x i8] c"infl()\00"
@.str.13 = [8 x i8] c"nan(\22\22)\00"
@.str.14 = [9 x i8] c"nanf(\22\22)\00"
@.str.15 = [9 x i8] c"nanl(\22\22)\00"
@.str.16 = [9 x i8] c"nans(\22\22)\00"
@.str.17 = [10 x i8] c"nan(\2210\22)\00"
@.str.18 = [11 x i8] c"nanf(\2210\22)\00"
@.str.19 = [11 x i8] c"nanl(\2210\22)\00"
@.str.20 = [11 x i8] c"nans(\2210\22)\00"
@.str.21 = [18 x i8] c"isgreater(1., 2.)\00"
@.str.22 = [23 x i8] c"isgreaterequal(1., 2.)\00"
@.str.23 = [15 x i8] c"isless(1., 2.)\00"
@.str.24 = [20 x i8] c"islessequal(1., 2.)\00"
@.str.25 = [22 x i8] c"islessgreater(1., 2.)\00"
@.str.26 = [20 x i8] c"isunordered(1., 2.)\00"
@.str.27 = [10 x i8] c"isnan(1.)\00"
@.str.28 = [7 x i8] c"abs(N)\00"
@.str.29 = [7 x i8] c"clz(N)\00"
@.str.30 = [8 x i8] c"clzl(N)\00"
@.str.31 = [9 x i8] c"clzll(N)\00"
@.str.32 = [7 x i8] c"ctz(N)\00"
@.str.33 = [8 x i8] c"ctzl(N)\00"
@.str.34 = [9 x i8] c"ctzll(N)\00"
@.str.35 = [7 x i8] c"ffs(N)\00"
@.str.36 = [8 x i8] c"ffsl(N)\00"
@.str.37 = [9 x i8] c"ffsll(N)\00"
@.str.38 = [10 x i8] c"parity(N)\00"
@.str.39 = [11 x i8] c"parityl(N)\00"
@.str.40 = [12 x i8] c"parityll(N)\00"
@.str.41 = [12 x i8] c"popcount(N)\00"
@.str.42 = [13 x i8] c"popcountl(N)\00"
@.str.43 = [14 x i8] c"popcountll(N)\00"
@.str.44 = [14 x i8] c"powi(1.2f, N)\00"
@.str.45 = [15 x i8] c"powif(1.2f, N)\00"
@.str.46 = [15 x i8] c"powil(1.2f, N)\00"
@__const.main.s1 = [6 x i8] c"Hello\00"
@.str.47 = [15 x i8] c"strcat(s0, s1)\00"
@.str.48 = [15 x i8] c"strcmp(s0, s1)\00"
@.str.49 = [19 x i8] c"strncat(s0, s1, n)\00"
@.str.50 = [18 x i8] c"strchr(s0, s1[0])\00"
@.str.51 = [19 x i8] c"strrchr(s0, s1[0])\00"
@.str.52 = [15 x i8] c"strcpy(s0, s1)\00"
@.str.53 = [19 x i8] c"strncpy(s0, s1, n)\00"
@.str.54 = [34 x i8] c"__memset_chk(s0, 0, sizeof s0, n)\00"
@.str.55 = [35 x i8] c"__memcpy_chk(s0, s1, sizeof s0, n)\00"
@.str.56 = [36 x i8] c"__memmove_chk(s0, s1, sizeof s0, n)\00"
@.str.57 = [36 x i8] c"__mempcpy_chk(s0, s1, sizeof s0, n)\00"
@.str.58 = [36 x i8] c"__strncpy_chk(s0, s1, sizeof s0, n)\00"
@.str.59 = [24 x i8] c"__strcpy_chk(s0, s1, n)\00"
@.str.60 = [24 x i8] c"__strcat_chk(s0, s1, n)\00"
@.str.61 = [19 x i8] c"object_size(s0, 0)\00"
@.str.62 = [19 x i8] c"object_size(s0, 1)\00"
@.str.63 = [19 x i8] c"object_size(s0, 2)\00"
@.str.64 = [19 x i8] c"object_size(s0, 3)\00"
@.str.65 = [11 x i8] c"bswap32(N)\00"
@.str.66 = [11 x i8] c"bswap64(N)\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [10 x i8]
%3 = alloca [6 x i8]
%4 = bitcast i32* %1 to i8*
%5 = tail call i32 (...) @random()
store i32 %5, i32* %1
%6 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), i32 0)
%7 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 20)
%8 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0), i32 1)
%9 = icmp eq i32 %5, 12
%10 = zext i1 %9 to i64
%11 = tail call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), i64 %10)
%12 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0), i32 0)
%13 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.5, i64 0, i64 0), i32 0)
%14 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.6, i64 0, i64 0), i32 0)
%15 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0), double 0x7FF0000000000000)
%16 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.8, i64 0, i64 0), double 0x7FF0000000000000)
%17 = tail call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0), x86_fp80 0xK7FFF8000000000000000)
%18 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), double 0x7FF0000000000000)
%19 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0), double 0x7FF0000000000000)
%20 = tail call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0), x86_fp80 0xK7FFF8000000000000000)
%21 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.13, i64 0, i64 0), double 0x7FF8000000000000)
%22 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.14, i64 0, i64 0), double 0x7FF8000000000000)
%23 = tail call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0), x86_fp80 0xK7FFFC000000000000000)
%24 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0), double 0x7FF4000000000000)
%25 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), double 0x7FF800000000000A)
%26 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.18, i64 0, i64 0), double 0x7FF8000140000000)
%27 = tail call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.19, i64 0, i64 0), x86_fp80 0xK7FFFC00000000000000A)
%28 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.20, i64 0, i64 0), double 0x7FF000000000000A)
%29 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.21, i64 0, i64 0), i32 0)
%30 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.22, i64 0, i64 0), i32 0)
%31 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.23, i64 0, i64 0), i32 1)
%32 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.24, i64 0, i64 0), i32 1)
%33 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.25, i64 0, i64 0), i32 1)
%34 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.26, i64 0, i64 0), i32 0)
%35 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.27, i64 0, i64 0), i32 0)
%36 = tail call i32 @llvm.abs.i32(i32 %5, i1 true)
%37 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.28, i64 0, i64 0), i32 %36)
%38 = tail call i32 @llvm.ctlz.i32(i32 %5, i1 true)
%39 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.29, i64 0, i64 0), i32 %38)
%40 = sext i32 %5 to i64
%41 = tail call i64 @llvm.ctlz.i64(i64 %40, i1 true)
%42 = trunc i64 %41 to i32
%43 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.30, i64 0, i64 0), i32 %42)
%44 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.31, i64 0, i64 0), i32 %42)
%45 = tail call i32 @llvm.cttz.i32(i32 %5, i1 true)
%46 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.32, i64 0, i64 0), i32 %45)
%47 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.33, i64 0, i64 0), i32 %45)
%48 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i64 0, i64 0), i32 %45)
%49 = add nuw nsw i32 %45, 1
%50 = icmp eq i32 %5, 0
%51 = select i1 %50, i32 0, i32 %49
%52 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.35, i64 0, i64 0), i32 %51)
%53 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.36, i64 0, i64 0), i32 %51)
%54 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.37, i64 0, i64 0), i32 %51)
%55 = tail call i32 @llvm.ctpop.i32(i32 %5)
%56 = and i32 %55, 1
%57 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.38, i64 0, i64 0), i32 %56)
%58 = tail call i64 @llvm.ctpop.i64(i64 %40)
%59 = trunc i64 %58 to i32
%60 = and i32 %59, 1
%61 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.39, i64 0, i64 0), i32 %60)
%62 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.40, i64 0, i64 0), i32 %60)
%63 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.41, i64 0, i64 0), i32 %55)
%64 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.42, i64 0, i64 0), i32 %59)
%65 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.43, i64 0, i64 0), i32 %59)
%66 = tail call double @llvm.powi.f64.i32(double 0x3FF3333340000000, i32 %5)
%67 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.44, i64 0, i64 0), double %66)
%68 = tail call float @llvm.powi.f32.i32(float 0x3FF3333340000000, i32 %5)
%69 = fpext float %68 to double
%70 = tail call i32 (i8*, double, ...) bitcast (i32 (...)* @q to i32 (i8*, double, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.45, i64 0, i64 0), double %69)
%71 = tail call x86_fp80 @llvm.powi.f80.i32(x86_fp80 0xK3FFF99999A0000000000, i32 %5)
%72 = tail call i32 (i8*, x86_fp80, ...) bitcast (i32 (...)* @q to i32 (i8*, x86_fp80, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.46, i64 0, i64 0), x86_fp80 %71)
%73 = tail call i32 (...) @random()
%74 = getelementptr inbounds [10 x i8], [10 x i8]* %2, i64 0, i64 0
%75 = getelementptr inbounds [6 x i8], [6 x i8]* %3, i64 0, i64 0
%76 = call i8* @strcat(i8* %74, i8* %75)
%77 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.47, i64 0, i64 0), i32 0)
%78 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.48, i64 0, i64 0), i32 0)
%79 = sext i32 %73 to i64
%80 = call i8* @strncat(i8* %74, i8* %75, i64 %79)
%81 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.49, i64 0, i64 0), i32 0)
%82 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.50, i64 0, i64 0), i32 0)
%83 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.51, i64 0, i64 0), i32 0)
%84 = call i8* @strcpy(i8* %74, i8* %75)
%85 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.52, i64 0, i64 0), i32 0)
%86 = call i8* @strncpy(i8* %74, i8* %75, i64 %79)
%87 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.53, i64 0, i64 0), i32 0)
%88 = call i8* @__memset_chk(i8* %74, i32 0, i64 10, i64 %79)
%89 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.54, i64 0, i64 0), i32 0)
%90 = call i8* @__memcpy_chk(i8* %74, i8* %75, i64 10, i64 %79)
%91 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.55, i64 0, i64 0), i32 0)
%92 = call i8* @__memmove_chk(i8* %74, i8* %75, i64 10, i64 %79)
%93 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.56, i64 0, i64 0), i32 0)
%94 = call i8* @__mempcpy_chk(i8* %74, i8* %75, i64 10, i64 %79)
%95 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.57, i64 0, i64 0), i32 0)
%96 = call i8* @__strncpy_chk(i8* %74, i8* %75, i64 10, i64 %79)
%97 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.58, i64 0, i64 0), i32 0)
%98 = call i8* @__strcpy_chk(i8* %74, i8* %75, i64 %79)
%99 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.59, i64 0, i64 0), i32 0)
store i8 0, i8* %74
%100 = call i8* @__strcat_chk(i8* %74, i8* %75, i64 %79)
%101 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.60, i64 0, i64 0), i32 0)
%102 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.61, i64 0, i64 0), i64 10)
%103 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.62, i64 0, i64 0), i64 10)
%104 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.63, i64 0, i64 0), i64 10)
%105 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.64, i64 0, i64 0), i64 10)
%106 = load i32, i32* %1
%107 = call i32 @llvm.bswap.i32(i32 %106)
%108 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @p to i32 (i8*, i32, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.65, i64 0, i64 0), i32 %107)
%109 = sext i32 %106 to i64
%110 = call i64 @llvm.bswap.i64(i64 %109)
%111 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @p to i32 (i8*, i64, ...)*)(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.66, i64 0, i64 0), i64 %110)
unreachable
}