#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 */
scalar_t__ isprint(char);
int /*<<< orphan*/ printf(char *, char *, long, long, long, long, char, char,
                          char, char, char, char, char, char, char, char, char,
                          char, char, char, char, char);
void hexdump(char *address, char *buffer, long length) {
  while (length > 0) {
    printf("%p  %08x %08x %08x %08x  %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
           address, *((long *)buffer), *((long *)(buffer + 4)),
           *((long *)(buffer + 8)), *((long *)(buffer + 12)),
           isprint(*(buffer + 0)) ? *(buffer + 0) : '.',
           isprint(*(buffer + 1)) ? *(buffer + 1) : '.',
           isprint(*(buffer + 2)) ? *(buffer + 2) : '.',
           isprint(*(buffer + 3)) ? *(buffer + 3) : '.',
           isprint(*(buffer + 4)) ? *(buffer + 4) : '.',
           isprint(*(buffer + 5)) ? *(buffer + 5) : '.',
           isprint(*(buffer + 6)) ? *(buffer + 6) : '.',
           isprint(*(buffer + 7)) ? *(buffer + 7) : '.',
           isprint(*(buffer + 8)) ? *(buffer + 8) : '.',
           isprint(*(buffer + 9)) ? *(buffer + 9) : '.',
           isprint(*(buffer + 10)) ? *(buffer + 10) : '.',
           isprint(*(buffer + 11)) ? *(buffer + 11) : '.',
           isprint(*(buffer + 12)) ? *(buffer + 12) : '.',
           isprint(*(buffer + 13)) ? *(buffer + 13) : '.',
           isprint(*(buffer + 14)) ? *(buffer + 14) : '.',
           isprint(*(buffer + 15)) ? *(buffer + 15) : '.');
    address += 16;
    buffer += 16;
    length -= 16;
  }
}


x86 assembly (clang, -O0):
<hexdump>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x148,%rsp
mov    %rdi,-0x30(%rbp)
mov    %rsi,-0x38(%rbp)
mov    %rdx,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
jle    16e9 <hexdump+0x5c9>
mov    -0x30(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x38(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x60(%rbp)
mov    -0x38(%rbp),%rax
mov    0x4(%rax),%rax
mov    %rax,-0x58(%rbp)
mov    -0x38(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x50(%rbp)
mov    -0x38(%rbp),%rax
mov    0xc(%rax),%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     11a7 <hexdump+0x87>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x6c(%rbp)
jmp    11b4 <hexdump+0x94>
mov    $0x2e,%eax
mov    %eax,-0x6c(%rbp)
jmp    11b4 <hexdump+0x94>
mov    -0x6c(%rbp),%eax
mov    %al,-0x6d(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     11e1 <hexdump+0xc1>
mov    -0x38(%rbp),%rax
movsbl 0x1(%rax),%eax
mov    %eax,-0x74(%rbp)
jmp    11ee <hexdump+0xce>
mov    $0x2e,%eax
mov    %eax,-0x74(%rbp)
jmp    11ee <hexdump+0xce>
mov    -0x74(%rbp),%eax
mov    %al,-0x75(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     121b <hexdump+0xfb>
mov    -0x38(%rbp),%rax
movsbl 0x2(%rax),%eax
mov    %eax,-0x7c(%rbp)
jmp    1228 <hexdump+0x108>
mov    $0x2e,%eax
mov    %eax,-0x7c(%rbp)
jmp    1228 <hexdump+0x108>
mov    -0x7c(%rbp),%eax
mov    %al,-0x7d(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x3(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     1258 <hexdump+0x138>
mov    -0x38(%rbp),%rax
movsbl 0x3(%rax),%eax
mov    %eax,-0x84(%rbp)
jmp    1268 <hexdump+0x148>
mov    $0x2e,%eax
mov    %eax,-0x84(%rbp)
jmp    1268 <hexdump+0x148>
mov    -0x84(%rbp),%eax
mov    %al,-0x85(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x4(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     129e <hexdump+0x17e>
mov    -0x38(%rbp),%rax
movsbl 0x4(%rax),%eax
mov    %eax,-0x8c(%rbp)
jmp    12ae <hexdump+0x18e>
mov    $0x2e,%eax
mov    %eax,-0x8c(%rbp)
jmp    12ae <hexdump+0x18e>
mov    -0x8c(%rbp),%eax
mov    %al,-0x8d(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x5(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     12e4 <hexdump+0x1c4>
mov    -0x38(%rbp),%rax
movsbl 0x5(%rax),%eax
mov    %eax,-0x94(%rbp)
jmp    12f4 <hexdump+0x1d4>
mov    $0x2e,%eax
mov    %eax,-0x94(%rbp)
jmp    12f4 <hexdump+0x1d4>
mov    -0x94(%rbp),%eax
mov    %al,-0x95(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x6(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     132a <hexdump+0x20a>
mov    -0x38(%rbp),%rax
movsbl 0x6(%rax),%eax
mov    %eax,-0x9c(%rbp)
jmp    133a <hexdump+0x21a>
mov    $0x2e,%eax
mov    %eax,-0x9c(%rbp)
jmp    133a <hexdump+0x21a>
mov    -0x9c(%rbp),%eax
mov    %al,-0x9d(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x7(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     1370 <hexdump+0x250>
mov    -0x38(%rbp),%rax
movsbl 0x7(%rax),%eax
mov    %eax,-0xa4(%rbp)
jmp    1380 <hexdump+0x260>
mov    $0x2e,%eax
mov    %eax,-0xa4(%rbp)
jmp    1380 <hexdump+0x260>
mov    -0xa4(%rbp),%eax
mov    %al,-0xa5(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x8(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     13b6 <hexdump+0x296>
mov    -0x38(%rbp),%rax
movsbl 0x8(%rax),%eax
mov    %eax,-0xac(%rbp)
jmp    13c6 <hexdump+0x2a6>
mov    $0x2e,%eax
mov    %eax,-0xac(%rbp)
jmp    13c6 <hexdump+0x2a6>
mov    -0xac(%rbp),%eax
mov    %al,-0xad(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0x9(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     13fc <hexdump+0x2dc>
mov    -0x38(%rbp),%rax
movsbl 0x9(%rax),%eax
mov    %eax,-0xb4(%rbp)
jmp    140c <hexdump+0x2ec>
mov    $0x2e,%eax
mov    %eax,-0xb4(%rbp)
jmp    140c <hexdump+0x2ec>
mov    -0xb4(%rbp),%eax
mov    %al,-0xb5(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0xa(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     1442 <hexdump+0x322>
mov    -0x38(%rbp),%rax
movsbl 0xa(%rax),%eax
mov    %eax,-0xbc(%rbp)
jmp    1452 <hexdump+0x332>
mov    $0x2e,%eax
mov    %eax,-0xbc(%rbp)
jmp    1452 <hexdump+0x332>
mov    -0xbc(%rbp),%eax
mov    %al,-0xbd(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0xb(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     1488 <hexdump+0x368>
mov    -0x38(%rbp),%rax
movsbl 0xb(%rax),%eax
mov    %eax,-0xc4(%rbp)
jmp    1498 <hexdump+0x378>
mov    $0x2e,%eax
mov    %eax,-0xc4(%rbp)
jmp    1498 <hexdump+0x378>
mov    -0xc4(%rbp),%eax
mov    %al,-0xc5(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0xc(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     14ce <hexdump+0x3ae>
mov    -0x38(%rbp),%rax
movsbl 0xc(%rax),%eax
mov    %eax,-0xcc(%rbp)
jmp    14de <hexdump+0x3be>
mov    $0x2e,%eax
mov    %eax,-0xcc(%rbp)
jmp    14de <hexdump+0x3be>
mov    -0xcc(%rbp),%eax
mov    %al,-0xcd(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0xd(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     1514 <hexdump+0x3f4>
mov    -0x38(%rbp),%rax
movsbl 0xd(%rax),%eax
mov    %eax,-0xd4(%rbp)
jmp    1524 <hexdump+0x404>
mov    $0x2e,%eax
mov    %eax,-0xd4(%rbp)
jmp    1524 <hexdump+0x404>
mov    -0xd4(%rbp),%eax
mov    %al,-0xd5(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0xe(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     155a <hexdump+0x43a>
mov    -0x38(%rbp),%rax
movsbl 0xe(%rax),%eax
mov    %eax,-0xdc(%rbp)
jmp    156a <hexdump+0x44a>
mov    $0x2e,%eax
mov    %eax,-0xdc(%rbp)
jmp    156a <hexdump+0x44a>
mov    -0xdc(%rbp),%eax
mov    %al,-0xdd(%rbp)
mov    -0x38(%rbp),%rax
movsbl 0xf(%rax),%edi
call   1040 <isprint@plt>
cmp    $0x0,%rax
je     15a0 <hexdump+0x480>
mov    -0x38(%rbp),%rax
movsbl 0xf(%rax),%eax
mov    %eax,-0xe4(%rbp)
jmp    15b0 <hexdump+0x490>
mov    $0x2e,%eax
mov    %eax,-0xe4(%rbp)
jmp    15b0 <hexdump+0x490>
mov    -0xd5(%rbp),%r11b
mov    -0xcd(%rbp),%bl
mov    -0xc5(%rbp),%r14b
mov    -0xbd(%rbp),%r15b
mov    -0xb5(%rbp),%r12b
mov    -0xad(%rbp),%r13b
mov    -0x6d(%rbp),%r10b
mov    -0x48(%rbp),%r9
mov    -0x50(%rbp),%r8
mov    -0x58(%rbp),%rcx
mov    -0x60(%rbp),%rdx
mov    -0x68(%rbp),%rsi
mov    -0xe4(%rbp),%eax
lea    0xa02(%rip),%rdi
movsbl %r10b,%r10d
mov    %r10d,(%rsp)
mov    -0x75(%rbp),%r10b
movsbl %r10b,%r10d
mov    %r10d,0x8(%rsp)
mov    -0x7d(%rbp),%r10b
movsbl %r10b,%r10d
mov    %r10d,0x10(%rsp)
mov    -0x85(%rbp),%r10b
movsbl %r10b,%r10d
mov    %r10d,0x18(%rsp)
mov    -0x8d(%rbp),%r10b
movsbl %r10b,%r10d
mov    %r10d,0x20(%rsp)
mov    -0x95(%rbp),%r10b
movsbl %r10b,%r10d
mov    %r10d,0x28(%rsp)
mov    -0x9d(%rbp),%r10b
movsbl %r10b,%r10d
mov    %r10d,0x30(%rsp)
mov    -0xa5(%rbp),%r10b
movsbl %r10b,%r10d
mov    %r10d,0x38(%rsp)
mov    -0xdd(%rbp),%r10b
movsbl %r13b,%r13d
mov    %r13d,0x40(%rsp)
movsbl %r12b,%r12d
mov    %r12d,0x48(%rsp)
movsbl %r15b,%r15d
mov    %r15d,0x50(%rsp)
movsbl %r14b,%r14d
mov    %r14d,0x58(%rsp)
movsbl %bl,%ebx
mov    %ebx,0x60(%rsp)
movsbl %r11b,%r11d
mov    %r11d,0x68(%rsp)
movsbl %r10b,%r10d
mov    %r10d,0x70(%rsp)
movsbl %al,%eax
mov    %eax,0x78(%rsp)
call   1030 <printf@plt>
mov    -0x30(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%rax
sub    $0x10,%rax
mov    %rax,-0x40(%rbp)
jmp    1140 <hexdump+0x20>
add    $0x148,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<hexdump>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %rdi,0x58(%rsp)
test   %rdx,%rdx
jle    141e <hexdump+0x2fe>
mov    %rsi,%rbx
add    $0x10,%rdx
add    $0xf,%rbx
jmp    1260 <hexdump+0x140>
nop
movsbl %r14b,%ebp
movsbl %r13b,%r13d
movsbl 0x10(%rsp),%eax
movsbl %r12b,%r14d
movsbl 0x18(%rsp),%r12d
movsbl 0xd(%rsp),%r10d
movsbl 0x28(%rsp),%r11d
movsbl 0x20(%rsp),%ecx
mov    %rcx,0x20(%rsp)
movsbl 0x38(%rsp),%ecx
mov    %rcx,0x28(%rsp)
movsbl 0x30(%rsp),%ecx
mov    %rcx,0x30(%rsp)
movsbl 0x48(%rsp),%ecx
mov    %rcx,0x38(%rsp)
movsbl 0x40(%rsp),%ecx
mov    %rcx,0x40(%rsp)
movsbl 0x50(%rsp),%ecx
mov    %rcx,0x48(%rsp)
movsbl 0xe(%rsp),%ecx
mov    %rcx,0x50(%rsp)
movsbl %r15b,%ecx
mov    %rcx,0x10(%rsp)
movsbl 0xf(%rsp),%ecx
mov    %rcx,0x18(%rsp)
mov    0x68(%rsp),%r8
mov    0x60(%rsp),%r9
mov    0x58(%rsp),%r15
mov    %r15,%rsi
mov    0x78(%rsp),%rdx
mov    0x70(%rsp),%rcx
lea    0xe11(%rip),%rdi
push   %rbp
push   %r13
push   %rax
push   %r14
push   %r12
push   %r10
push   %r11
push   0x58(%rsp)
push   0x68(%rsp)
push   0x78(%rsp)
push   0x88(%rsp)
push   0x98(%rsp)
push   0xa8(%rsp)
push   0xb8(%rsp)
push   0x80(%rsp)
push   0x90(%rsp)
call   1030 <printf@plt>
add    $0x80,%rsp
add    $0x10,%r15
mov    %r15,0x58(%rsp)
mov    0x80(%rsp),%rdx
add    $0xfffffffffffffff0,%rdx
add    $0x10,%rbx
cmp    $0x10,%rdx
jle    141e <hexdump+0x2fe>
mov    %rdx,0x80(%rsp)
mov    -0xf(%rbx),%rax
mov    -0xb(%rbx),%rcx
mov    %rcx,0x70(%rsp)
mov    -0x7(%rbx),%rcx
mov    %rcx,0x68(%rsp)
mov    -0x3(%rbx),%rcx
mov    %rcx,0x60(%rsp)
mov    %rax,0x78(%rsp)
movsbl %al,%edi
call   1040 <isprint@plt>
mov    $0x2e,%bpl
mov    $0x2e,%cl
test   %rax,%rax
je     12a2 <hexdump+0x182>
movzbl -0xf(%rbx),%ecx
mov    %cl,0xf(%rsp)
movsbl -0xe(%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     12b8 <hexdump+0x198>
movzbl -0xe(%rbx),%ebp
movsbl -0xd(%rbx),%edi
call   1040 <isprint@plt>
mov    $0x2e,%r14b
mov    $0x2e,%cl
test   %rax,%rax
je     12cf <hexdump+0x1af>
movzbl -0xd(%rbx),%ecx
mov    %cl,0xe(%rsp)
movsbl -0xc(%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     12e6 <hexdump+0x1c6>
movzbl -0xc(%rbx),%r14d
movsbl -0xb(%rbx),%edi
call   1040 <isprint@plt>
mov    $0x2e,%r15b
mov    $0x2e,%cl
test   %rax,%rax
je     12fd <hexdump+0x1dd>
movzbl -0xb(%rbx),%ecx
mov    %cl,0x40(%rsp)
movsbl -0xa(%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     1314 <hexdump+0x1f4>
movzbl -0xa(%rbx),%r15d
movsbl -0x9(%rbx),%edi
call   1040 <isprint@plt>
mov    $0x2e,%r12b
mov    $0x2e,%cl
test   %rax,%rax
je     132b <hexdump+0x20b>
movzbl -0x9(%rbx),%ecx
mov    %cl,0x30(%rsp)
movsbl -0x8(%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     1342 <hexdump+0x222>
movzbl -0x8(%rbx),%r12d
movsbl -0x7(%rbx),%edi
call   1040 <isprint@plt>
mov    $0x2e,%r13b
mov    $0x2e,%cl
test   %rax,%rax
je     1359 <hexdump+0x239>
movzbl -0x7(%rbx),%ecx
mov    %cl,0x20(%rsp)
movsbl -0x6(%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     1370 <hexdump+0x250>
movzbl -0x6(%rbx),%r13d
movsbl -0x5(%rbx),%edi
call   1040 <isprint@plt>
movb   $0x2e,0x18(%rsp)
mov    $0x2e,%cl
test   %rax,%rax
je     1389 <hexdump+0x269>
movzbl -0x5(%rbx),%ecx
mov    %cl,0xd(%rsp)
mov    %r12b,0x38(%rsp)
movsbl -0x4(%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     13a8 <hexdump+0x288>
movzbl -0x4(%rbx),%eax
mov    %al,0x18(%rsp)
movsbl -0x3(%rbx),%edi
call   1040 <isprint@plt>
movb   $0x2e,0x10(%rsp)
mov    $0x2e,%r12b
test   %rax,%rax
je     13c3 <hexdump+0x2a3>
movzbl -0x3(%rbx),%r12d
mov    %r13b,0x28(%rsp)
mov    %r14b,0x50(%rsp)
movsbl -0x2(%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     13e3 <hexdump+0x2c3>
movzbl -0x2(%rbx),%eax
mov    %al,0x10(%rsp)
mov    %r15b,0x48(%rsp)
movsbl -0x1(%rbx),%edi
call   1040 <isprint@plt>
mov    $0x2e,%r14b
mov    $0x2e,%r13b
test   %rax,%rax
je     1401 <hexdump+0x2e1>
movzbl -0x1(%rbx),%r13d
mov    %ebp,%r15d
movsbl (%rbx),%edi
call   1040 <isprint@plt>
test   %rax,%rax
je     1150 <hexdump+0x30>
movzbl (%rbx),%r14d
jmp    1150 <hexdump+0x30>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [59 x i8] c"%p %08x %08x %08x %08x %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\0A\00"
define void @hexdump(i8* %0, i8* %1, i64 %2) {
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i64
store i8* %0, i8** %4
store i8* %1, i8** %5
store i64 %2, i64* %6
br label %7
7: ; preds = %248, %3
%8 = load i64, i64* %6
%9 = icmp sgt i64 %8, 0
br i1 %9, label %10, label %258
10: ; preds = %7
%11 = load i8*, i8** %4
%12 = load i8*, i8** %5
%13 = bitcast i8* %12 to i64*
%14 = load i64, i64* %13
%15 = load i8*, i8** %5
%16 = getelementptr inbounds i8, i8* %15, i64 4
%17 = bitcast i8* %16 to i64*
%18 = load i64, i64* %17
%19 = load i8*, i8** %5
%20 = getelementptr inbounds i8, i8* %19, i64 8
%21 = bitcast i8* %20 to i64*
%22 = load i64, i64* %21
%23 = load i8*, i8** %5
%24 = getelementptr inbounds i8, i8* %23, i64 12
%25 = bitcast i8* %24 to i64*
%26 = load i64, i64* %25
%27 = load i8*, i8** %5
%28 = getelementptr inbounds i8, i8* %27, i64 0
%29 = load i8, i8* %28
%30 = call i64 @isprint(i8 signext %29)
%31 = icmp ne i64 %30, 0
br i1 %31, label %32, label %37
32: ; preds = %10
%33 = load i8*, i8** %5
%34 = getelementptr inbounds i8, i8* %33, i64 0
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
br label %38
37: ; preds = %10
br label %38
38: ; preds = %37, %32
%39 = phi i32 [ %36, %32 ], [ 46, %37 ]
%40 = trunc i32 %39 to i8
%41 = load i8*, i8** %5
%42 = getelementptr inbounds i8, i8* %41, i64 1
%43 = load i8, i8* %42
%44 = call i64 @isprint(i8 signext %43)
%45 = icmp ne i64 %44, 0
br i1 %45, label %46, label %51
46: ; preds = %38
%47 = load i8*, i8** %5
%48 = getelementptr inbounds i8, i8* %47, i64 1
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
br label %52
51: ; preds = %38
br label %52
52: ; preds = %51, %46
%53 = phi i32 [ %50, %46 ], [ 46, %51 ]
%54 = trunc i32 %53 to i8
%55 = load i8*, i8** %5
%56 = getelementptr inbounds i8, i8* %55, i64 2
%57 = load i8, i8* %56
%58 = call i64 @isprint(i8 signext %57)
%59 = icmp ne i64 %58, 0
br i1 %59, label %60, label %65
60: ; preds = %52
%61 = load i8*, i8** %5
%62 = getelementptr inbounds i8, i8* %61, i64 2
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
br label %66
65: ; preds = %52
br label %66
66: ; preds = %65, %60
%67 = phi i32 [ %64, %60 ], [ 46, %65 ]
%68 = trunc i32 %67 to i8
%69 = load i8*, i8** %5
%70 = getelementptr inbounds i8, i8* %69, i64 3
%71 = load i8, i8* %70
%72 = call i64 @isprint(i8 signext %71)
%73 = icmp ne i64 %72, 0
br i1 %73, label %74, label %79
74: ; preds = %66
%75 = load i8*, i8** %5
%76 = getelementptr inbounds i8, i8* %75, i64 3
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
br label %80
79: ; preds = %66
br label %80
80: ; preds = %79, %74
%81 = phi i32 [ %78, %74 ], [ 46, %79 ]
%82 = trunc i32 %81 to i8
%83 = load i8*, i8** %5
%84 = getelementptr inbounds i8, i8* %83, i64 4
%85 = load i8, i8* %84
%86 = call i64 @isprint(i8 signext %85)
%87 = icmp ne i64 %86, 0
br i1 %87, label %88, label %93
88: ; preds = %80
%89 = load i8*, i8** %5
%90 = getelementptr inbounds i8, i8* %89, i64 4
%91 = load i8, i8* %90
%92 = sext i8 %91 to i32
br label %94
93: ; preds = %80
br label %94
94: ; preds = %93, %88
%95 = phi i32 [ %92, %88 ], [ 46, %93 ]
%96 = trunc i32 %95 to i8
%97 = load i8*, i8** %5
%98 = getelementptr inbounds i8, i8* %97, i64 5
%99 = load i8, i8* %98
%100 = call i64 @isprint(i8 signext %99)
%101 = icmp ne i64 %100, 0
br i1 %101, label %102, label %107
102: ; preds = %94
%103 = load i8*, i8** %5
%104 = getelementptr inbounds i8, i8* %103, i64 5
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
br label %108
107: ; preds = %94
br label %108
108: ; preds = %107, %102
%109 = phi i32 [ %106, %102 ], [ 46, %107 ]
%110 = trunc i32 %109 to i8
%111 = load i8*, i8** %5
%112 = getelementptr inbounds i8, i8* %111, i64 6
%113 = load i8, i8* %112
%114 = call i64 @isprint(i8 signext %113)
%115 = icmp ne i64 %114, 0
br i1 %115, label %116, label %121
116: ; preds = %108
%117 = load i8*, i8** %5
%118 = getelementptr inbounds i8, i8* %117, i64 6
%119 = load i8, i8* %118
%120 = sext i8 %119 to i32
br label %122
121: ; preds = %108
br label %122
122: ; preds = %121, %116
%123 = phi i32 [ %120, %116 ], [ 46, %121 ]
%124 = trunc i32 %123 to i8
%125 = load i8*, i8** %5
%126 = getelementptr inbounds i8, i8* %125, i64 7
%127 = load i8, i8* %126
%128 = call i64 @isprint(i8 signext %127)
%129 = icmp ne i64 %128, 0
br i1 %129, label %130, label %135
130: ; preds = %122
%131 = load i8*, i8** %5
%132 = getelementptr inbounds i8, i8* %131, i64 7
%133 = load i8, i8* %132
%134 = sext i8 %133 to i32
br label %136
135: ; preds = %122
br label %136
136: ; preds = %135, %130
%137 = phi i32 [ %134, %130 ], [ 46, %135 ]
%138 = trunc i32 %137 to i8
%139 = load i8*, i8** %5
%140 = getelementptr inbounds i8, i8* %139, i64 8
%141 = load i8, i8* %140
%142 = call i64 @isprint(i8 signext %141)
%143 = icmp ne i64 %142, 0
br i1 %143, label %144, label %149
144: ; preds = %136
%145 = load i8*, i8** %5
%146 = getelementptr inbounds i8, i8* %145, i64 8
%147 = load i8, i8* %146
%148 = sext i8 %147 to i32
br label %150
149: ; preds = %136
br label %150
150: ; preds = %149, %144
%151 = phi i32 [ %148, %144 ], [ 46, %149 ]
%152 = trunc i32 %151 to i8
%153 = load i8*, i8** %5
%154 = getelementptr inbounds i8, i8* %153, i64 9
%155 = load i8, i8* %154
%156 = call i64 @isprint(i8 signext %155)
%157 = icmp ne i64 %156, 0
br i1 %157, label %158, label %163
158: ; preds = %150
%159 = load i8*, i8** %5
%160 = getelementptr inbounds i8, i8* %159, i64 9
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
br label %164
163: ; preds = %150
br label %164
164: ; preds = %163, %158
%165 = phi i32 [ %162, %158 ], [ 46, %163 ]
%166 = trunc i32 %165 to i8
%167 = load i8*, i8** %5
%168 = getelementptr inbounds i8, i8* %167, i64 10
%169 = load i8, i8* %168
%170 = call i64 @isprint(i8 signext %169)
%171 = icmp ne i64 %170, 0
br i1 %171, label %172, label %177
172: ; preds = %164
%173 = load i8*, i8** %5
%174 = getelementptr inbounds i8, i8* %173, i64 10
%175 = load i8, i8* %174
%176 = sext i8 %175 to i32
br label %178
177: ; preds = %164
br label %178
178: ; preds = %177, %172
%179 = phi i32 [ %176, %172 ], [ 46, %177 ]
%180 = trunc i32 %179 to i8
%181 = load i8*, i8** %5
%182 = getelementptr inbounds i8, i8* %181, i64 11
%183 = load i8, i8* %182
%184 = call i64 @isprint(i8 signext %183)
%185 = icmp ne i64 %184, 0
br i1 %185, label %186, label %191
186: ; preds = %178
%187 = load i8*, i8** %5
%188 = getelementptr inbounds i8, i8* %187, i64 11
%189 = load i8, i8* %188
%190 = sext i8 %189 to i32
br label %192
191: ; preds = %178
br label %192
192: ; preds = %191, %186
%193 = phi i32 [ %190, %186 ], [ 46, %191 ]
%194 = trunc i32 %193 to i8
%195 = load i8*, i8** %5
%196 = getelementptr inbounds i8, i8* %195, i64 12
%197 = load i8, i8* %196
%198 = call i64 @isprint(i8 signext %197)
%199 = icmp ne i64 %198, 0
br i1 %199, label %200, label %205
200: ; preds = %192
%201 = load i8*, i8** %5
%202 = getelementptr inbounds i8, i8* %201, i64 12
%203 = load i8, i8* %202
%204 = sext i8 %203 to i32
br label %206
205: ; preds = %192
br label %206
206: ; preds = %205, %200
%207 = phi i32 [ %204, %200 ], [ 46, %205 ]
%208 = trunc i32 %207 to i8
%209 = load i8*, i8** %5
%210 = getelementptr inbounds i8, i8* %209, i64 13
%211 = load i8, i8* %210
%212 = call i64 @isprint(i8 signext %211)
%213 = icmp ne i64 %212, 0
br i1 %213, label %214, label %219
214: ; preds = %206
%215 = load i8*, i8** %5
%216 = getelementptr inbounds i8, i8* %215, i64 13
%217 = load i8, i8* %216
%218 = sext i8 %217 to i32
br label %220
219: ; preds = %206
br label %220
220: ; preds = %219, %214
%221 = phi i32 [ %218, %214 ], [ 46, %219 ]
%222 = trunc i32 %221 to i8
%223 = load i8*, i8** %5
%224 = getelementptr inbounds i8, i8* %223, i64 14
%225 = load i8, i8* %224
%226 = call i64 @isprint(i8 signext %225)
%227 = icmp ne i64 %226, 0
br i1 %227, label %228, label %233
228: ; preds = %220
%229 = load i8*, i8** %5
%230 = getelementptr inbounds i8, i8* %229, i64 14
%231 = load i8, i8* %230
%232 = sext i8 %231 to i32
br label %234
233: ; preds = %220
br label %234
234: ; preds = %233, %228
%235 = phi i32 [ %232, %228 ], [ 46, %233 ]
%236 = trunc i32 %235 to i8
%237 = load i8*, i8** %5
%238 = getelementptr inbounds i8, i8* %237, i64 15
%239 = load i8, i8* %238
%240 = call i64 @isprint(i8 signext %239)
%241 = icmp ne i64 %240, 0
br i1 %241, label %242, label %247
242: ; preds = %234
%243 = load i8*, i8** %5
%244 = getelementptr inbounds i8, i8* %243, i64 15
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
br label %248
247: ; preds = %234
br label %248
248: ; preds = %247, %242
%249 = phi i32 [ %246, %242 ], [ 46, %247 ]
%250 = trunc i32 %249 to i8
%251 = call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str, i64 0, i64 0), i8* %11, i64 %14, i64 %18, i64 %22, i64 %26, i8 signext %40, i8 signext %54, i8 signext %68, i8 signext %82, i8 signext %96, i8 signext %110, i8 signext %124, i8 signext %138, i8 signext %152, i8 signext %166, i8 signext %180, i8 signext %194, i8 signext %208, i8 signext %222, i8 signext %236, i8 signext %250)
%252 = load i8*, i8** %4
%253 = getelementptr inbounds i8, i8* %252, i64 16
store i8* %253, i8** %4
%254 = load i8*, i8** %5
%255 = getelementptr inbounds i8, i8* %254, i64 16
store i8* %255, i8** %5
%256 = load i64, i64* %6
%257 = sub nsw i64 %256, 16
store i64 %257, i64* %6
br label %7
258: ; preds = %7
ret void
}

LLVM IR (-O2):
@.str = [59 x i8] c"%p %08x %08x %08x %08x %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\0A\00"
define void @hexdump(i8* %0, i8* nocapture %1, i64 %2) {
%4 = icmp sgt i64 %2, 0
br i1 %4, label %5, label %149
5: ; preds = %3, %142
%6 = phi i64 [ %147, %142 ], [ %2, %3 ]
%7 = phi i8* [ %146, %142 ], [ %1, %3 ]
%8 = phi i8* [ %145, %142 ], [ %0, %3 ]
%9 = bitcast i8* %7 to i64*
%10 = load i64, i64* %9
%11 = getelementptr inbounds i8, i8* %7, i64 4
%12 = bitcast i8* %11 to i64*
%13 = load i64, i64* %12
%14 = getelementptr inbounds i8, i8* %7, i64 8
%15 = bitcast i8* %14 to i64*
%16 = load i64, i64* %15
%17 = getelementptr inbounds i8, i8* %7, i64 12
%18 = bitcast i8* %17 to i64*
%19 = load i64, i64* %18
%20 = trunc i64 %10 to i8
%21 = tail call i64 @isprint(i8 signext %20)
%22 = icmp eq i64 %21, 0
br i1 %22, label %25, label %23
23: ; preds = %5
%24 = load i8, i8* %7
br label %25
25: ; preds = %5, %23
%26 = phi i8 [ %24, %23 ], [ 46, %5 ]
%27 = getelementptr inbounds i8, i8* %7, i64 1
%28 = load i8, i8* %27
%29 = tail call i64 @isprint(i8 signext %28)
%30 = icmp eq i64 %29, 0
br i1 %30, label %33, label %31
31: ; preds = %25
%32 = load i8, i8* %27
br label %33
33: ; preds = %25, %31
%34 = phi i8 [ %32, %31 ], [ 46, %25 ]
%35 = getelementptr inbounds i8, i8* %7, i64 2
%36 = load i8, i8* %35
%37 = tail call i64 @isprint(i8 signext %36)
%38 = icmp eq i64 %37, 0
br i1 %38, label %41, label %39
39: ; preds = %33
%40 = load i8, i8* %35
br label %41
41: ; preds = %33, %39
%42 = phi i8 [ %40, %39 ], [ 46, %33 ]
%43 = getelementptr inbounds i8, i8* %7, i64 3
%44 = load i8, i8* %43
%45 = tail call i64 @isprint(i8 signext %44)
%46 = icmp eq i64 %45, 0
br i1 %46, label %49, label %47
47: ; preds = %41
%48 = load i8, i8* %43
br label %49
49: ; preds = %41, %47
%50 = phi i8 [ %48, %47 ], [ 46, %41 ]
%51 = load i8, i8* %11
%52 = tail call i64 @isprint(i8 signext %51)
%53 = icmp eq i64 %52, 0
br i1 %53, label %56, label %54
54: ; preds = %49
%55 = load i8, i8* %11
br label %56
56: ; preds = %49, %54
%57 = phi i8 [ %55, %54 ], [ 46, %49 ]
%58 = getelementptr inbounds i8, i8* %7, i64 5
%59 = load i8, i8* %58
%60 = tail call i64 @isprint(i8 signext %59)
%61 = icmp eq i64 %60, 0
br i1 %61, label %64, label %62
62: ; preds = %56
%63 = load i8, i8* %58
br label %64
64: ; preds = %56, %62
%65 = phi i8 [ %63, %62 ], [ 46, %56 ]
%66 = getelementptr inbounds i8, i8* %7, i64 6
%67 = load i8, i8* %66
%68 = tail call i64 @isprint(i8 signext %67)
%69 = icmp eq i64 %68, 0
br i1 %69, label %72, label %70
70: ; preds = %64
%71 = load i8, i8* %66
br label %72
72: ; preds = %64, %70
%73 = phi i8 [ %71, %70 ], [ 46, %64 ]
%74 = getelementptr inbounds i8, i8* %7, i64 7
%75 = load i8, i8* %74
%76 = tail call i64 @isprint(i8 signext %75)
%77 = icmp eq i64 %76, 0
br i1 %77, label %80, label %78
78: ; preds = %72
%79 = load i8, i8* %74
br label %80
80: ; preds = %72, %78
%81 = phi i8 [ %79, %78 ], [ 46, %72 ]
%82 = load i8, i8* %14
%83 = tail call i64 @isprint(i8 signext %82)
%84 = icmp eq i64 %83, 0
br i1 %84, label %87, label %85
85: ; preds = %80
%86 = load i8, i8* %14
br label %87
87: ; preds = %80, %85
%88 = phi i8 [ %86, %85 ], [ 46, %80 ]
%89 = getelementptr inbounds i8, i8* %7, i64 9
%90 = load i8, i8* %89
%91 = tail call i64 @isprint(i8 signext %90)
%92 = icmp eq i64 %91, 0
br i1 %92, label %95, label %93
93: ; preds = %87
%94 = load i8, i8* %89
br label %95
95: ; preds = %87, %93
%96 = phi i8 [ %94, %93 ], [ 46, %87 ]
%97 = getelementptr inbounds i8, i8* %7, i64 10
%98 = load i8, i8* %97
%99 = tail call i64 @isprint(i8 signext %98)
%100 = icmp eq i64 %99, 0
br i1 %100, label %103, label %101
101: ; preds = %95
%102 = load i8, i8* %97
br label %103
103: ; preds = %95, %101
%104 = phi i8 [ %102, %101 ], [ 46, %95 ]
%105 = getelementptr inbounds i8, i8* %7, i64 11
%106 = load i8, i8* %105
%107 = tail call i64 @isprint(i8 signext %106)
%108 = icmp eq i64 %107, 0
br i1 %108, label %111, label %109
109: ; preds = %103
%110 = load i8, i8* %105
br label %111
111: ; preds = %103, %109
%112 = phi i8 [ %110, %109 ], [ 46, %103 ]
%113 = load i8, i8* %17
%114 = tail call i64 @isprint(i8 signext %113)
%115 = icmp eq i64 %114, 0
br i1 %115, label %118, label %116
116: ; preds = %111
%117 = load i8, i8* %17
br label %118
118: ; preds = %111, %116
%119 = phi i8 [ %117, %116 ], [ 46, %111 ]
%120 = getelementptr inbounds i8, i8* %7, i64 13
%121 = load i8, i8* %120
%122 = tail call i64 @isprint(i8 signext %121)
%123 = icmp eq i64 %122, 0
br i1 %123, label %126, label %124
124: ; preds = %118
%125 = load i8, i8* %120
br label %126
126: ; preds = %118, %124
%127 = phi i8 [ %125, %124 ], [ 46, %118 ]
%128 = getelementptr inbounds i8, i8* %7, i64 14
%129 = load i8, i8* %128
%130 = tail call i64 @isprint(i8 signext %129)
%131 = icmp eq i64 %130, 0
br i1 %131, label %134, label %132
132: ; preds = %126
%133 = load i8, i8* %128
br label %134
134: ; preds = %126, %132
%135 = phi i8 [ %133, %132 ], [ 46, %126 ]
%136 = getelementptr inbounds i8, i8* %7, i64 15
%137 = load i8, i8* %136
%138 = tail call i64 @isprint(i8 signext %137)
%139 = icmp eq i64 %138, 0
br i1 %139, label %142, label %140
140: ; preds = %134
%141 = load i8, i8* %136
br label %142
142: ; preds = %134, %140
%143 = phi i8 [ %141, %140 ], [ 46, %134 ]
%144 = tail call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str, i64 0, i64 0), i8* %8, i64 %10, i64 %13, i64 %16, i64 %19, i8 signext %26, i8 signext %34, i8 signext %42, i8 signext %50, i8 signext %57, i8 signext %65, i8 signext %73, i8 signext %81, i8 signext %88, i8 signext %96, i8 signext %104, i8 signext %112, i8 signext %119, i8 signext %127, i8 signext %135, i8 signext %143)
%145 = getelementptr inbounds i8, i8* %8, i64 16
%146 = getelementptr inbounds i8, i8* %7, i64 16
%147 = add nsw i64 %6, -16
%148 = icmp sgt i64 %6, 16
br i1 %148, label %5, label %149
149: ; preds = %142, %3
ret void
}