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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ f0(char *, int /*<<< orphan*/, int, int, int, int, int, int,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f1(int /*<<< orphan*/, char *, int, int, int, int, int, int,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f10(int /*<<< orphan*/, int, int, int, int, int, int, int,
                       int, int, char *, int, int, int, int, int, int);
int /*<<< orphan*/ f11(int /*<<< orphan*/, int, int, int, int, int, int, int,
                       int, int, int, char *, int, int, int, int, int);
int /*<<< orphan*/ f12(int /*<<< orphan*/, int, int, int, int, int, int, int,
                       int, int, int, int, char *, int, int, int, int);
int /*<<< orphan*/ f13(int /*<<< orphan*/, int, int, int, int, int, int, int,
                       int, int, int, int, int, char *, int, int, int);
int /*<<< orphan*/ f14(int /*<<< orphan*/, int, int, int, int, int, int, int,
                       int, int, int, int, int, int, char *, int, int);
int /*<<< orphan*/ f15(int /*<<< orphan*/, int, int, int, int, int, int, int,
                       int, int, int, int, int, int, int, char *, int);
int /*<<< orphan*/ f2(int /*<<< orphan*/, int, char *, int, int, int, int, int,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f3(int /*<<< orphan*/, int, int, char *, int, int, int, int,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f4(int /*<<< orphan*/, int, int, int, char *, int, int, int,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f5(int /*<<< orphan*/, int, int, int, int, char *, int, int,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f6(int /*<<< orphan*/, int, int, int, int, int, char *, int,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f7(int /*<<< orphan*/, int, int, int, int, int, int, char *,
                      int, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f8(int /*<<< orphan*/, int, int, int, int, int, int, int,
                      char *, int, int, int, int, int, int, int, int);
int /*<<< orphan*/ f9(int /*<<< orphan*/, int, int, int, int, int, int, int,
                      int, char *, int, int, int, int, int, int, int);
main() {
  char *f = "0123456789abcdef";
  f0(f + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f1(0, f + 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f2(0, 1, f + 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f3(0, 1, 2, f + 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f4(0, 1, 2, 3, f + 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f5(0, 1, 2, 3, 4, f + 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f6(0, 1, 2, 3, 4, 5, f + 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f7(0, 1, 2, 3, 4, 5, 6, f + 7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
  f8(0, 1, 2, 3, 4, 5, 6, 7, f + 8, 8, 9, 10, 11, 12, 13, 14, 15);
  f9(0, 1, 2, 3, 4, 5, 6, 7, 8, f + 9, 9, 10, 11, 12, 13, 14, 15);
  f10(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f + 10, 10, 11, 12, 13, 14, 15);
  f11(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f + 11, 11, 12, 13, 14, 15);
  f12(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f + 12, 12, 13, 14, 15);
  f13(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f + 13, 13, 14, 15);
  f14(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f + 14, 14, 15);
  f15(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f + 15, 15);
  exit(0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xdda(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
mov    $0x1,%edx
mov    $0x2,%ecx
mov    $0x3,%r8d
mov    $0x4,%r9d
movl   $0x5,(%rsp)
movl   $0x6,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1030 <f0@plt>
mov    -0x10(%rbp),%rsi
add    $0x1,%rsi
xor    %edi,%edi
mov    $0x1,%edx
mov    $0x2,%ecx
mov    $0x3,%r8d
mov    $0x4,%r9d
movl   $0x5,(%rsp)
movl   $0x6,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   10b0 <f1@plt>
mov    -0x10(%rbp),%rdx
add    $0x2,%rdx
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%ecx
mov    $0x3,%r8d
mov    $0x4,%r9d
movl   $0x5,(%rsp)
movl   $0x6,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1040 <f2@plt>
mov    -0x10(%rbp),%rcx
add    $0x3,%rcx
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%r8d
mov    $0x4,%r9d
movl   $0x5,(%rsp)
movl   $0x6,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   10a0 <f3@plt>
mov    -0x10(%rbp),%r8
add    $0x4,%r8
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r9d
movl   $0x5,(%rsp)
movl   $0x6,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1130 <f4@plt>
mov    -0x10(%rbp),%r9
add    $0x5,%r9
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
movl   $0x5,(%rsp)
movl   $0x6,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   10d0 <f5@plt>
mov    -0x10(%rbp),%rax
add    $0x6,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
mov    %rax,(%rsp)
movl   $0x6,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1060 <f6@plt>
mov    -0x10(%rbp),%rax
add    $0x7,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
mov    %rax,0x8(%rsp)
movl   $0x7,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   10c0 <f7@plt>
mov    -0x10(%rbp),%rax
add    $0x8,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
mov    %rax,0x10(%rsp)
movl   $0x8,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1050 <f8@plt>
mov    -0x10(%rbp),%rax
add    $0x9,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
movl   $0x8,0x10(%rsp)
mov    %rax,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   10e0 <f9@plt>
mov    -0x10(%rbp),%rax
add    $0xa,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x9,0x18(%rsp)
mov    %rax,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1110 <f10@plt>
mov    -0x10(%rbp),%rax
add    $0xb,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x9,0x18(%rsp)
movl   $0xa,0x20(%rsp)
mov    %rax,0x28(%rsp)
movl   $0xb,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1090 <f11@plt>
mov    -0x10(%rbp),%rax
add    $0xc,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x9,0x18(%rsp)
movl   $0xa,0x20(%rsp)
movl   $0xb,0x28(%rsp)
mov    %rax,0x30(%rsp)
movl   $0xc,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1100 <f12@plt>
mov    -0x10(%rbp),%rax
add    $0xd,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x9,0x18(%rsp)
movl   $0xa,0x20(%rsp)
movl   $0xb,0x28(%rsp)
movl   $0xc,0x30(%rsp)
mov    %rax,0x38(%rsp)
movl   $0xd,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1070 <f13@plt>
mov    -0x10(%rbp),%rax
add    $0xe,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x9,0x18(%rsp)
movl   $0xa,0x20(%rsp)
movl   $0xb,0x28(%rsp)
movl   $0xc,0x30(%rsp)
movl   $0xd,0x38(%rsp)
mov    %rax,0x40(%rsp)
movl   $0xe,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   10f0 <f14@plt>
mov    -0x10(%rbp),%rax
add    $0xf,%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
movl   $0x6,(%rsp)
movl   $0x7,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x9,0x18(%rsp)
movl   $0xa,0x20(%rsp)
movl   $0xb,0x28(%rsp)
movl   $0xc,0x30(%rsp)
movl   $0xd,0x38(%rsp)
movl   $0xe,0x40(%rsp)
mov    %rax,0x48(%rsp)
movl   $0xf,0x50(%rsp)
call   1080 <f15@plt>
xor    %edi,%edi
call   1120 <exit@plt>

x86 assembly (clang, -O2):
<main>:
push   %rax
sub    $0x8,%rsp
lea    0xde4(%rip),%rdi
xor    %esi,%esi
mov    $0x1,%edx
mov    $0x2,%ecx
mov    $0x3,%r8d
mov    $0x4,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
push   $0x5
call   1030 <f0@plt>
add    $0x58,%rsp
lea    0xda7(%rip),%rsi
xor    %edi,%edi
mov    $0x1,%edx
mov    $0x2,%ecx
mov    $0x3,%r8d
mov    $0x4,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
push   $0x5
call   10b0 <f1@plt>
add    $0x58,%rsp
lea    0xd6a(%rip),%rdx
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%ecx
mov    $0x3,%r8d
mov    $0x4,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
push   $0x5
call   1040 <f2@plt>
add    $0x58,%rsp
lea    0xd2d(%rip),%rcx
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%r8d
mov    $0x4,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
push   $0x5
call   10a0 <f3@plt>
add    $0x58,%rsp
lea    0xcf0(%rip),%r8
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
push   $0x5
call   1130 <f4@plt>
add    $0x58,%rsp
lea    0xcb4(%rip),%r9
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
push   $0x5
call   10d0 <f5@plt>
add    $0x58,%rsp
lea    0xc78(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
push   %rax
call   1060 <f6@plt>
add    $0x58,%rsp
lea    0xc37(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   %rax
push   $0x6
call   10c0 <f7@plt>
add    $0x58,%rsp
lea    0xbf6(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   %rax
push   $0x7
push   $0x6
call   1050 <f8@plt>
add    $0x58,%rsp
lea    0xbb5(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   %rax
push   $0x8
push   $0x7
push   $0x6
call   10e0 <f9@plt>
add    $0x58,%rsp
lea    0xb74(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   %rax
push   $0x9
push   $0x8
push   $0x7
push   $0x6
call   1110 <f10@plt>
add    $0x58,%rsp
lea    0xb33(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   %rax
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
call   1090 <f11@plt>
add    $0x58,%rsp
lea    0xaf2(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   $0xc
push   %rax
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
call   1100 <f12@plt>
add    $0x58,%rsp
lea    0xab1(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   $0xd
push   %rax
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
call   1070 <f13@plt>
add    $0x58,%rsp
lea    0xa70(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   $0xe
push   %rax
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
call   10f0 <f14@plt>
add    $0x58,%rsp
lea    0xa2f(%rip),%rax
xor    %edi,%edi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x4,%r8d
mov    $0x5,%r9d
push   $0xf
push   %rax
push   $0xe
push   $0xd
push   $0xc
push   $0xb
push   $0xa
push   $0x9
push   $0x8
push   $0x7
push   $0x6
call   1080 <f15@plt>
add    $0x60,%rsp
xor    %edi,%edi
call   1120 <exit@plt>

LLVM IR (-O0):
@.str = [17 x i8] c"0123456789abcdef\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8*
store i32 0, i32* %1
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8** %2
%3 = load i8*, i8** %2
%4 = getelementptr inbounds i8, i8* %3, i64 0
%5 = call i32 @f0(i8* %4, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%6 = load i8*, i8** %2
%7 = getelementptr inbounds i8, i8* %6, i64 1
%8 = call i32 @f1(i32 0, i8* %7, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%9 = load i8*, i8** %2
%10 = getelementptr inbounds i8, i8* %9, i64 2
%11 = call i32 @f2(i32 0, i32 1, i8* %10, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%12 = load i8*, i8** %2
%13 = getelementptr inbounds i8, i8* %12, i64 3
%14 = call i32 @f3(i32 0, i32 1, i32 2, i8* %13, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%15 = load i8*, i8** %2
%16 = getelementptr inbounds i8, i8* %15, i64 4
%17 = call i32 @f4(i32 0, i32 1, i32 2, i32 3, i8* %16, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%18 = load i8*, i8** %2
%19 = getelementptr inbounds i8, i8* %18, i64 5
%20 = call i32 @f5(i32 0, i32 1, i32 2, i32 3, i32 4, i8* %19, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%21 = load i8*, i8** %2
%22 = getelementptr inbounds i8, i8* %21, i64 6
%23 = call i32 @f6(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i8* %22, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%24 = load i8*, i8** %2
%25 = getelementptr inbounds i8, i8* %24, i64 7
%26 = call i32 @f7(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i8* %25, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%27 = load i8*, i8** %2
%28 = getelementptr inbounds i8, i8* %27, i64 8
%29 = call i32 @f8(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i8* %28, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%30 = load i8*, i8** %2
%31 = getelementptr inbounds i8, i8* %30, i64 9
%32 = call i32 @f9(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i8* %31, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%33 = load i8*, i8** %2
%34 = getelementptr inbounds i8, i8* %33, i64 10
%35 = call i32 @f10(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i8* %34, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%36 = load i8*, i8** %2
%37 = getelementptr inbounds i8, i8* %36, i64 11
%38 = call i32 @f11(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i8* %37, i32 11, i32 12, i32 13, i32 14, i32 15)
%39 = load i8*, i8** %2
%40 = getelementptr inbounds i8, i8* %39, i64 12
%41 = call i32 @f12(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i8* %40, i32 12, i32 13, i32 14, i32 15)
%42 = load i8*, i8** %2
%43 = getelementptr inbounds i8, i8* %42, i64 13
%44 = call i32 @f13(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i8* %43, i32 13, i32 14, i32 15)
%45 = load i8*, i8** %2
%46 = getelementptr inbounds i8, i8* %45, i64 14
%47 = call i32 @f14(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i8* %46, i32 14, i32 15)
%48 = load i8*, i8** %2
%49 = getelementptr inbounds i8, i8* %48, i64 15
%50 = call i32 @f15(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i8* %49, i32 15)
%51 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@.str = [17 x i8] c"0123456789abcdef\00"
define i32 @main() {
%1 = tail call i32 @f0(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%2 = tail call i32 @f1(i32 0, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 1), i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%3 = tail call i32 @f2(i32 0, i32 1, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 2), i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%4 = tail call i32 @f3(i32 0, i32 1, i32 2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 3), i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%5 = tail call i32 @f4(i32 0, i32 1, i32 2, i32 3, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 4), i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%6 = tail call i32 @f5(i32 0, i32 1, i32 2, i32 3, i32 4, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 5), i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%7 = tail call i32 @f6(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 6), i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%8 = tail call i32 @f7(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 7), i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%9 = tail call i32 @f8(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 8), i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%10 = tail call i32 @f9(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 9), i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%11 = tail call i32 @f10(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 10), i32 10, i32 11, i32 12, i32 13, i32 14, i32 15)
%12 = tail call i32 @f11(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 11), i32 11, i32 12, i32 13, i32 14, i32 15)
%13 = tail call i32 @f12(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 12), i32 12, i32 13, i32 14, i32 15)
%14 = tail call i32 @f13(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 13), i32 13, i32 14, i32 15)
%15 = tail call i32 @f14(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 14), i32 14, i32 15)
%16 = tail call i32 @f15(i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 15), i32 15)
%17 = tail call i32 @exit(i32 0)
unreachable
}