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());
  p("fpclassify"
    "(0, 1, 2, 3, 4, 1.0)",
    __builtin_fpclassify(0, 1, 2, 3, 4, 1.0));
  p("fpclassify"
    "(0, 1, 2, 3, 4, 1.0f)",
    __builtin_fpclassify(0, 1, 2, 3, 4, 1.0f));
  p("fpclassify"
    "(0, 1, 2, 3, 4, 1.0l)",
    __builtin_fpclassify(0, 1, 2, 3, 4, 1.0l));
  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
mov    $0x2,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xdd1(%rip),%rdi
mov    $0x2,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xdde(%rip),%rdi
mov    $0x2,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xdeb(%rip),%rdi
movsd  0xc95(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xddd(%rip),%rdi
movsd  0xc7f(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
mov    %rsp,%rax
flds   0xc3b(%rip)
fstpt  (%rax)
lea    0xdc5(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
lea    0xdc0(%rip),%rdi
movsd  0xc48(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xdb3(%rip),%rdi
movsd  0xc2a(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xda7(%rip),%rdi
movsd  0xc0c(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
mov    %rsp,%rax
fldt   0xc2c(%rip)
fstpt  (%rax)
lea    0xd91(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
lea    0xd8e(%rip),%rdi
movsd  0xbd5(%rip),%xmm0
mov    $0x1,%al
call   1110 <q@plt>
lea    0xd83(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd85(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd8c(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd88(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd89(%rip),%rdi
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd8c(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0xd90(%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    0xd7d(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%eax
bsr    %eax,%esi
xor    $0x1f,%esi
lea    0xd6d(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsr    %rax,%rax
xor    $0x3f,%rax
mov    %eax,%esi
lea    0xd58(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsr    %rax,%rax
xor    $0x3f,%rax
mov    %eax,%esi
lea    0xd44(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%eax
bsf    %eax,%esi
lea    0xd39(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsf    %rax,%rax
mov    %eax,%esi
lea    0xd28(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rax
bsf    %rax,%rax
mov    %eax,%esi
lea    0xd18(%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    0xd02(%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    0xce3(%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    0xcc5(%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    0xc88(%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    0xc21(%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    0xbbb(%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    0xb84(%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    0xb23(%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    0xac3(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%edi
movsd  0x7e4(%rip),%xmm0
call   1b80 <__powidf2>
lea    0xab3(%rip),%rdi
mov    $0x1,%al
call   1110 <q@plt>
mov    -0x8(%rbp),%edi
movss  0x7b6(%rip),%xmm0
call   1b30 <__powisf2>
cvtss2sd %xmm0,%xmm0
lea    0xa9f(%rip),%rdi
mov    $0x1,%al
call   1110 <q@plt>
mov    -0x8(%rbp),%edi
mov    %rsp,%rax
flds   0x793(%rip)
fstpt  (%rax)
call   1bd0 <__powixf2>
mov    %rsp,%rax
fstpt  (%rax)
lea    0xa88(%rip),%rdi
xor    %eax,%eax
call   1110 <q@plt>
mov    $0x0,%al
call   10f0 <random@plt>
mov    %eax,-0x14(%rbp)
mov    0xa80(%rip),%eax
mov    %eax,-0x24(%rbp)
mov    0xa7a(%rip),%ax
mov    %ax,-0x20(%rbp)
lea    -0x1e(%rbp),%rdi
lea    -0x24(%rbp),%rsi
call   1130 <strcat@plt>
lea    0xa64(%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    0xa56(%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    0xa44(%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    0xa3a(%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    0xa2f(%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    0xa25(%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    0xa13(%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    0xa02(%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    0x9fe(%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    0x9fb(%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    0x9f9(%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    0x9f7(%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    0x9fa(%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    0x9ed(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9f5(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9f5(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9f5(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    0x9f5(%rip),%rdi
mov    $0xa,%esi
mov    $0x0,%al
call   1080 <p@plt>
mov    -0x8(%rbp),%esi
bswap  %esi
lea    0x9f0(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
movslq -0x8(%rbp),%rsi
bswap  %rsi
lea    0x9e6(%rip),%rdi
mov    $0x0,%al
call   1080 <p@plt>
ud2
lea    0x9e1(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
lea    -0x8(%rbp),%rsi
lea    0x9d4(%rip),%rdi
mov    $0x0,%al
call   1070 <r@plt>
lea    0x9de(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1080 <p@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret
nopw   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
mov    $0x2,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xe1f(%rip),%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xe2c(%rip),%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xe39(%rip),%rdi
movsd  0xcb3(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xe2b(%rip),%rdi
movsd  0xc9d(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
flds   0xcc4(%rip)
fstpt  (%rsp)
lea    0xe15(%rip),%rdi
xor    %eax,%eax
call   10d0 <q@plt>
lea    0xe10(%rip),%rdi
movsd  0xc78(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xe03(%rip),%rdi
movsd  0xc6a(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xdf7(%rip),%rdi
movsd  0xc5c(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
fldt   0xc7f(%rip)
fstpt  (%rsp)
lea    0xde3(%rip),%rdi
xor    %eax,%eax
call   10d0 <q@plt>
lea    0xde0(%rip),%rdi
movsd  0xc37(%rip),%xmm0
mov    $0x1,%al
call   10d0 <q@plt>
lea    0xdd5(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdd7(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdde(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdda(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xddb(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdde(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xde2(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    %ebx,%esi
neg    %esi
cmovs  %ebx,%esi
lea    0xdd5(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
bsr    %ebx,%esi
xor    $0x1f,%esi
lea    0xdc8(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
movslq %ebx,%r14
bsr    %r14,%rbx
xor    $0x3f,%ebx
lea    0xdb7(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xdaf(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
bsf    %r14d,%ebx
lea    0xda4(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd9b(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd93(%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    0xd7e(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd75(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xd6d(%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    0xd28(%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    0xcc3(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xcbe(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xcba(%rip),%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xcb5(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xcb2(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <p@plt>
movsd  0x9f4(%rip),%xmm0
mov    %r14d,%edi
call   1920 <__powidf2>
lea    0xca0(%rip),%rdi
mov    $0x1,%al
call   10d0 <q@plt>
movss  0x9e6(%rip),%xmm0
mov    %r14d,%edi
call   18d0 <__powisf2>
cvtss2sd %xmm0,%xmm0
lea    0xc8c(%rip),%rdi
mov    $0x1,%al
call   10d0 <q@plt>
flds   0x9c6(%rip)
fstpt  (%rsp)
mov    %r14d,%edi
call   1970 <__powixf2>
fstpt  (%rsp)
lea    0xc79(%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    0xc53(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc52(%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    0xc40(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc43(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc45(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
mov    %r15,%rdi
mov    %r14,%rsi
call   1060 <strcpy@plt>
lea    0xc3d(%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    0xc2e(%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    0xc1f(%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    0xc1e(%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    0xc1e(%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    0xc1f(%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    0xc20(%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    0xc26(%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    0xc1b(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc23(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc23(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc23(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
lea    0xc23(%rip),%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1070 <p@plt>
movslq 0x18(%rsp),%rbx
mov    %ebx,%esi
bswap  %esi
lea    0xc1a(%rip),%rdi
xor    %eax,%eax
call   1070 <p@plt>
bswap  %rbx
lea    0xc14(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1070 <p@plt>
ud2
cs nopw 0x0(%rax,%rax,1)
nop

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