#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 */
typedef int uint8_t;

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
void print_hexdump(char *data, int len) {
  int line;
  int max_lines = (len / 16) + (len % 16 == 0 ? 0 : 1);
  int i;
  for (line = 0; line < max_lines; line++) {
    printf("%08x  ", line * 16);
    for (i = line * 16; i < (8 + (line * 16)); i++) {
      if (i < len)
        printf("%02x ", (uint8_t)data[i]);
      else
        printf("   ");
    }
    printf(" ");
    for (i = (line * 16) + 8; i < (16 + (line * 16)); i++) {
      if (i < len)
        printf("%02x ", (uint8_t)data[i]);
      else
        printf("   ");
    }
    printf(" ");
    for (i = line * 16; i < (8 + (line * 16)); i++) {
      if (i < len) {
        if (32 <= data[i] && data[i] <= 126)
          printf("%c", data[i]);
        else
          printf(".");
      } else
        printf(" ");
    }
    printf(" ");
    for (i = (line * 16) + 8; i < (16 + (line * 16)); i++) {
      if (i < len) {
        if (32 <= data[i] && data[i] <= 126)
          printf("%c", data[i]);
        else
          printf(".");
      } else
        printf(" ");
    }
    printf("\n");
  }
}


x86 assembly (clang, -O0):
<print_hexdump>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
mov    -0x1c(%rbp),%eax
mov    %edx,%esi
mov    $0x1,%ecx
xor    %edx,%edx
cmp    $0x0,%esi
cmove  %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    13e8 <print_hexdump+0x2d8>
mov    -0x10(%rbp),%esi
shl    $0x4,%esi
lea    0xe91(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x10(%rbp),%ecx
shl    $0x4,%ecx
add    $0x8,%ecx
cmp    %ecx,%eax
jge    11df <print_hexdump+0xcf>
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11be <print_hexdump+0xae>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xe55(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11cc <print_hexdump+0xbc>
lea    0xe48(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11d1 <print_hexdump+0xc1>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    117f <print_hexdump+0x6f>
lea    0xe29(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
shl    $0x4,%eax
add    $0x8,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x10(%rbp),%ecx
shl    $0x4,%ecx
add    $0x10,%ecx
cmp    %ecx,%eax
jge    1259 <print_hexdump+0x149>
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1238 <print_hexdump+0x128>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xddb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1246 <print_hexdump+0x136>
lea    0xdce(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    124b <print_hexdump+0x13b>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11f9 <print_hexdump+0xe9>
lea    0xdaf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x10(%rbp),%ecx
shl    $0x4,%ecx
add    $0x8,%ecx
cmp    %ecx,%eax
jge    1311 <print_hexdump+0x201>
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12f0 <print_hexdump+0x1e0>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x20,%eax
cmp    %ecx,%eax
jg     12dd <print_hexdump+0x1cd>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7e,%eax
jg     12dd <print_hexdump+0x1cd>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xd40(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    12eb <print_hexdump+0x1db>
lea    0xd30(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    12fe <print_hexdump+0x1ee>
lea    0xd18(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1303 <print_hexdump+0x1f3>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1270 <print_hexdump+0x160>
lea    0xcf7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
shl    $0x4,%eax
add    $0x8,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x10(%rbp),%ecx
shl    $0x4,%ecx
add    $0x10,%ecx
cmp    %ecx,%eax
jge    13cc <print_hexdump+0x2bc>
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    13ab <print_hexdump+0x29b>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x20,%eax
cmp    %ecx,%eax
jg     1398 <print_hexdump+0x288>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7e,%eax
jg     1398 <print_hexdump+0x288>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%esi
lea    0xc85(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    13a6 <print_hexdump+0x296>
lea    0xc75(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    13b9 <print_hexdump+0x2a9>
lea    0xc5d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    13be <print_hexdump+0x2ae>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    132b <print_hexdump+0x21b>
lea    0xc43(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1156 <print_hexdump+0x46>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_hexdump>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
lea    0xf(%rsi),%r14d
test   %esi,%esi
cmovns %esi,%r14d
sar    $0x4,%r14d
mov    %esi,%eax
and    $0xf,%eax
cmp    $0x1,%eax
sbb    $0xffffffff,%r14d
test   %r14d,%r14d
jle    1739 <print_hexdump+0x619>
mov    %rdi,%rbx
movslq %esi,%r15
mov    $0xf,%r12d
lea    0xea3(%rip),%rbp
jmp    1196 <print_hexdump+0x76>
cs nopw 0x0(%rax,%rax,1)
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x10,%r12
add    $0xffffffff,%r14d
lea    0xe77(%rip),%rbp
je     1739 <print_hexdump+0x619>
lea    -0xf(%r12),%r13
lea    0xe5e(%rip),%rdi
mov    %r13d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    %r15,%r13
jge    11d0 <print_hexdump+0xb0>
movsbl -0xf(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    11de <print_hexdump+0xbe>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0xe36(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0xe(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x10(%rsp)
jge    1200 <print_hexdump+0xe0>
movsbl -0xe(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    120e <print_hexdump+0xee>
nop
lea    0xe06(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0xd(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x20(%rsp)
jge    1230 <print_hexdump+0x110>
movsbl -0xd(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    123e <print_hexdump+0x11e>
nop
lea    0xdd6(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0xc(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x18(%rsp)
jge    1260 <print_hexdump+0x140>
movsbl -0xc(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    126e <print_hexdump+0x14e>
nop
lea    0xda6(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0xb(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x30(%rsp)
jge    1290 <print_hexdump+0x170>
movsbl -0xb(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    129e <print_hexdump+0x17e>
nop
lea    0xd76(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0xa(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x28(%rsp)
jge    12c0 <print_hexdump+0x1a0>
movsbl -0xa(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    12ce <print_hexdump+0x1ae>
nop
lea    0xd46(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x9(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x40(%rsp)
jge    12f0 <print_hexdump+0x1d0>
movsbl -0x9(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    12fe <print_hexdump+0x1de>
nop
lea    0xd16(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x7(%r12),%rax
mov    %rax,0x8(%rsp)
lea    -0x8(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x38(%rsp)
jge    1330 <print_hexdump+0x210>
movsbl -0x8(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    133e <print_hexdump+0x21e>
nopl   0x0(%rax)
lea    0xcd6(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x20,%edi
call   1030 <putchar@plt>
cmp    %r15,0x8(%rsp)
jge    1370 <print_hexdump+0x250>
movsbl -0x7(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    137e <print_hexdump+0x25e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    0xc96(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x6(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x48(%rsp)
jge    13a0 <print_hexdump+0x280>
movsbl -0x6(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    13ae <print_hexdump+0x28e>
nop
lea    0xc66(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x5(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x58(%rsp)
jge    13d0 <print_hexdump+0x2b0>
movsbl -0x5(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    13de <print_hexdump+0x2be>
nop
lea    0xc36(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x4(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x50(%rsp)
jge    1400 <print_hexdump+0x2e0>
movsbl -0x4(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    140e <print_hexdump+0x2ee>
nop
lea    0xc06(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x3(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x68(%rsp)
jge    1430 <print_hexdump+0x310>
movsbl -0x3(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    143e <print_hexdump+0x31e>
nop
lea    0xbd6(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x2(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x60(%rsp)
jge    1460 <print_hexdump+0x340>
movsbl -0x2(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    146e <print_hexdump+0x34e>
nop
lea    0xba6(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    -0x1(%r12),%rax
cmp    %r15,%rax
mov    %rax,0x70(%rsp)
jge    14b0 <print_hexdump+0x390>
movsbl -0x1(%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    %r15,%r12
jl     14c3 <print_hexdump+0x3a3>
lea    0xb74(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    14d2 <print_hexdump+0x3b2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    0xb56(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    %r15,%r12
jge    1492 <print_hexdump+0x372>
movsbl (%rbx,%r12,1),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
call   1030 <putchar@plt>
mov    $0x20,%edi
cmp    %r15,%r13
mov    $0x2e,%r13d
jge    1504 <print_hexdump+0x3e4>
movzbl -0xf(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,0x10(%rsp)
jge    1523 <print_hexdump+0x403>
movzbl -0xe(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
cmp    %r15,0x20(%rsp)
jge    154e <print_hexdump+0x42e>
movzbl -0xd(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,0x18(%rsp)
jge    156d <print_hexdump+0x44d>
movzbl -0xc(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
cmp    %r15,0x30(%rsp)
jge    1598 <print_hexdump+0x478>
movzbl -0xb(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,0x28(%rsp)
jge    15b7 <print_hexdump+0x497>
movzbl -0xa(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
cmp    %r15,0x40(%rsp)
jge    15e2 <print_hexdump+0x4c2>
movzbl -0x9(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,0x38(%rsp)
jge    1601 <print_hexdump+0x4e1>
movzbl -0x8(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
call   1030 <putchar@plt>
mov    $0x20,%edi
cmp    %r15,0x8(%rsp)
jge    1636 <print_hexdump+0x516>
movzbl -0x7(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,0x48(%rsp)
jge    1655 <print_hexdump+0x535>
movzbl -0x6(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
cmp    %r15,0x58(%rsp)
jge    1680 <print_hexdump+0x560>
movzbl -0x5(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,0x50(%rsp)
jge    169f <print_hexdump+0x57f>
movzbl -0x4(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
cmp    %r15,0x68(%rsp)
jge    16ca <print_hexdump+0x5aa>
movzbl -0x3(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,0x60(%rsp)
jge    16e9 <print_hexdump+0x5c9>
movzbl -0x2(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
mov    %ebp,%edi
call   1030 <putchar@plt>
mov    $0x20,%ebp
mov    $0x20,%edi
cmp    %r15,0x70(%rsp)
jge    1714 <print_hexdump+0x5f4>
movzbl -0x1(%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%edi
call   1030 <putchar@plt>
cmp    %r15,%r12
jge    1170 <print_hexdump+0x50>
movzbl (%rbx,%r12,1),%eax
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
cmovb  %r13d,%eax
movzbl %al,%ebp
jmp    1170 <print_hexdump+0x50>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [7 x i8] c"%08x \00"
@.str.1 = [6 x i8] c"%02x \00"
@.str.2 = [4 x i8] c" \00"
@.str.3 = [2 x i8] c" \00"
@.str.4 = [3 x i8] c"%c\00"
@.str.5 = [2 x i8] c".\00"
@.str.6 = [2 x i8] c"\0A\00"
define void @print_hexdump(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i8* %0, i8** %3
store i32 %1, i32* %4
%8 = load i32, i32* %4
%9 = sdiv i32 %8, 16
%10 = load i32, i32* %4
%11 = srem i32 %10, 16
%12 = icmp eq i32 %11, 0
%13 = zext i1 %12 to i64
%14 = select i1 %12, i32 0, i32 1
%15 = add nsw i32 %9, %14
store i32 %15, i32* %6
store i32 0, i32* %5
br label %16
16: ; preds = %176, %2
%17 = load i32, i32* %5
%18 = load i32, i32* %6
%19 = icmp slt i32 %17, %18
br i1 %19, label %20, label %179
20: ; preds = %16
%21 = load i32, i32* %5
%22 = mul nsw i32 %21, 16
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i32 %22)
%24 = load i32, i32* %5
%25 = mul nsw i32 %24, 16
store i32 %25, i32* %7
br label %26
26: ; preds = %47, %20
%27 = load i32, i32* %7
%28 = load i32, i32* %5
%29 = mul nsw i32 %28, 16
%30 = add nsw i32 8, %29
%31 = icmp slt i32 %27, %30
br i1 %31, label %32, label %50
32: ; preds = %26
%33 = load i32, i32* %7
%34 = load i32, i32* %4
%35 = icmp slt i32 %33, %34
br i1 %35, label %36, label %44
36: ; preds = %32
%37 = load i8*, i8** %3
%38 = load i32, i32* %7
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds i8, i8* %37, i64 %39
%41 = load i8, i8* %40
%42 = sext i8 %41 to i32
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %42)
br label %46
44: ; preds = %32
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %46
46: ; preds = %44, %36
br label %47
47: ; preds = %46
%48 = load i32, i32* %7
%49 = add nsw i32 %48, 1
store i32 %49, i32* %7
br label %26
50: ; preds = %26
%51 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%52 = load i32, i32* %5
%53 = mul nsw i32 %52, 16
%54 = add nsw i32 %53, 8
store i32 %54, i32* %7
br label %55
55: ; preds = %76, %50
%56 = load i32, i32* %7
%57 = load i32, i32* %5
%58 = mul nsw i32 %57, 16
%59 = add nsw i32 16, %58
%60 = icmp slt i32 %56, %59
br i1 %60, label %61, label %79
61: ; preds = %55
%62 = load i32, i32* %7
%63 = load i32, i32* %4
%64 = icmp slt i32 %62, %63
br i1 %64, label %65, label %73
65: ; preds = %61
%66 = load i8*, i8** %3
%67 = load i32, i32* %7
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds i8, i8* %66, i64 %68
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %71)
br label %75
73: ; preds = %61
%74 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %75
75: ; preds = %73, %65
br label %76
76: ; preds = %75
%77 = load i32, i32* %7
%78 = add nsw i32 %77, 1
store i32 %78, i32* %7
br label %55
79: ; preds = %55
%80 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%81 = load i32, i32* %5
%82 = mul nsw i32 %81, 16
store i32 %82, i32* %7
br label %83
83: ; preds = %123, %79
%84 = load i32, i32* %7
%85 = load i32, i32* %5
%86 = mul nsw i32 %85, 16
%87 = add nsw i32 8, %86
%88 = icmp slt i32 %84, %87
br i1 %88, label %89, label %126
89: ; preds = %83
%90 = load i32, i32* %7
%91 = load i32, i32* %4
%92 = icmp slt i32 %90, %91
br i1 %92, label %93, label %120
93: ; preds = %89
%94 = load i8*, i8** %3
%95 = load i32, i32* %7
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i8, i8* %94, i64 %96
%98 = load i8, i8* %97
%99 = sext i8 %98 to i32
%100 = icmp sle i32 32, %99
br i1 %100, label %101, label %117
101: ; preds = %93
%102 = load i8*, i8** %3
%103 = load i32, i32* %7
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i8, i8* %102, i64 %104
%106 = load i8, i8* %105
%107 = sext i8 %106 to i32
%108 = icmp sle i32 %107, 126
br i1 %108, label %109, label %117
109: ; preds = %101
%110 = load i8*, i8** %3
%111 = load i32, i32* %7
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds i8, i8* %110, i64 %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i32 %115)
br label %119
117: ; preds = %101, %93
%118 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
br label %119
119: ; preds = %117, %109
br label %122
120: ; preds = %89
%121 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %122
122: ; preds = %120, %119
br label %123
123: ; preds = %122
%124 = load i32, i32* %7
%125 = add nsw i32 %124, 1
store i32 %125, i32* %7
br label %83
126: ; preds = %83
%127 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%128 = load i32, i32* %5
%129 = mul nsw i32 %128, 16
%130 = add nsw i32 %129, 8
store i32 %130, i32* %7
br label %131
131: ; preds = %171, %126
%132 = load i32, i32* %7
%133 = load i32, i32* %5
%134 = mul nsw i32 %133, 16
%135 = add nsw i32 16, %134
%136 = icmp slt i32 %132, %135
br i1 %136, label %137, label %174
137: ; preds = %131
%138 = load i32, i32* %7
%139 = load i32, i32* %4
%140 = icmp slt i32 %138, %139
br i1 %140, label %141, label %168
141: ; preds = %137
%142 = load i8*, i8** %3
%143 = load i32, i32* %7
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds i8, i8* %142, i64 %144
%146 = load i8, i8* %145
%147 = sext i8 %146 to i32
%148 = icmp sle i32 32, %147
br i1 %148, label %149, label %165
149: ; preds = %141
%150 = load i8*, i8** %3
%151 = load i32, i32* %7
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds i8, i8* %150, i64 %152
%154 = load i8, i8* %153
%155 = sext i8 %154 to i32
%156 = icmp sle i32 %155, 126
br i1 %156, label %157, label %165
157: ; preds = %149
%158 = load i8*, i8** %3
%159 = load i32, i32* %7
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds i8, i8* %158, i64 %160
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i32 %163)
br label %167
165: ; preds = %149, %141
%166 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
br label %167
167: ; preds = %165, %157
br label %170
168: ; preds = %137
%169 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %170
170: ; preds = %168, %167
br label %171
171: ; preds = %170
%172 = load i32, i32* %7
%173 = add nsw i32 %172, 1
store i32 %173, i32* %7
br label %131
174: ; preds = %131
%175 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0))
br label %176
176: ; preds = %174
%177 = load i32, i32* %5
%178 = add nsw i32 %177, 1
store i32 %178, i32* %5
br label %16
179: ; preds = %16
ret void
}

LLVM IR (-O2):
@.str = [7 x i8] c"%08x \00"
@.str.1 = [6 x i8] c"%02x \00"
@.str.2 = [4 x i8] c" \00"
define void @print_hexdump(i8* nocapture %0, i32 %1) {
%3 = sdiv i32 %1, 16
%4 = and i32 %1, 15
%5 = icmp ne i32 %4, 0
%6 = zext i1 %5 to i32
%7 = add nsw i32 %3, %6
%8 = icmp sgt i32 %7, 0
br i1 %8, label %9, label %373
9: ; preds = %2
%10 = sext i32 %1 to i64
br label %11
11: ; preds = %365, %9
%12 = phi i64 [ 8, %9 ], [ %371, %365 ]
%13 = phi i64 [ 0, %9 ], [ %370, %365 ]
%14 = phi i32 [ 0, %9 ], [ %369, %365 ]
%15 = shl nsw i32 %14, 4
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i32 %15)
%17 = icmp slt i64 %13, %10
br i1 %17, label %18, label %23
18: ; preds = %11
%19 = getelementptr inbounds i8, i8* %0, i64 %13
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %21)
br label %25
23: ; preds = %11
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %25
25: ; preds = %18, %23
%26 = or i64 %13, 1
%27 = icmp slt i64 %26, %10
br i1 %27, label %30, label %28
28: ; preds = %25
%29 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %35
30: ; preds = %25
%31 = getelementptr inbounds i8, i8* %0, i64 %26
%32 = load i8, i8* %31
%33 = sext i8 %32 to i32
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %33)
br label %35
35: ; preds = %30, %28
%36 = or i64 %13, 2
%37 = icmp slt i64 %36, %10
br i1 %37, label %40, label %38
38: ; preds = %35
%39 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %45
40: ; preds = %35
%41 = getelementptr inbounds i8, i8* %0, i64 %36
%42 = load i8, i8* %41
%43 = sext i8 %42 to i32
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %43)
br label %45
45: ; preds = %40, %38
%46 = or i64 %13, 3
%47 = icmp slt i64 %46, %10
br i1 %47, label %50, label %48
48: ; preds = %45
%49 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %55
50: ; preds = %45
%51 = getelementptr inbounds i8, i8* %0, i64 %46
%52 = load i8, i8* %51
%53 = sext i8 %52 to i32
%54 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %53)
br label %55
55: ; preds = %50, %48
%56 = or i64 %13, 4
%57 = icmp slt i64 %56, %10
br i1 %57, label %60, label %58
58: ; preds = %55
%59 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %65
60: ; preds = %55
%61 = getelementptr inbounds i8, i8* %0, i64 %56
%62 = load i8, i8* %61
%63 = sext i8 %62 to i32
%64 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %63)
br label %65
65: ; preds = %60, %58
%66 = or i64 %13, 5
%67 = icmp slt i64 %66, %10
br i1 %67, label %70, label %68
68: ; preds = %65
%69 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %75
70: ; preds = %65
%71 = getelementptr inbounds i8, i8* %0, i64 %66
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %73)
br label %75
75: ; preds = %70, %68
%76 = or i64 %13, 6
%77 = icmp slt i64 %76, %10
br i1 %77, label %80, label %78
78: ; preds = %75
%79 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %85
80: ; preds = %75
%81 = getelementptr inbounds i8, i8* %0, i64 %76
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %83)
br label %85
85: ; preds = %80, %78
%86 = or i64 %13, 7
%87 = icmp slt i64 %86, %10
br i1 %87, label %90, label %88
88: ; preds = %85
%89 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %95
90: ; preds = %85
%91 = getelementptr inbounds i8, i8* %0, i64 %86
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %93)
br label %95
95: ; preds = %90, %88
%96 = tail call i32 @putchar(i32 32)
%97 = icmp slt i64 %12, %10
br i1 %97, label %98, label %103
98: ; preds = %95
%99 = getelementptr inbounds i8, i8* %0, i64 %12
%100 = load i8, i8* %99
%101 = sext i8 %100 to i32
%102 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %101)
br label %105
103: ; preds = %95
%104 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %105
105: ; preds = %98, %103
%106 = or i64 %12, 1
%107 = icmp slt i64 %106, %10
br i1 %107, label %110, label %108
108: ; preds = %105
%109 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %115
110: ; preds = %105
%111 = getelementptr inbounds i8, i8* %0, i64 %106
%112 = load i8, i8* %111
%113 = sext i8 %112 to i32
%114 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %113)
br label %115
115: ; preds = %110, %108
%116 = or i64 %12, 2
%117 = icmp slt i64 %116, %10
br i1 %117, label %120, label %118
118: ; preds = %115
%119 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %125
120: ; preds = %115
%121 = getelementptr inbounds i8, i8* %0, i64 %116
%122 = load i8, i8* %121
%123 = sext i8 %122 to i32
%124 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %123)
br label %125
125: ; preds = %120, %118
%126 = or i64 %12, 3
%127 = icmp slt i64 %126, %10
br i1 %127, label %130, label %128
128: ; preds = %125
%129 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %135
130: ; preds = %125
%131 = getelementptr inbounds i8, i8* %0, i64 %126
%132 = load i8, i8* %131
%133 = sext i8 %132 to i32
%134 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %133)
br label %135
135: ; preds = %130, %128
%136 = or i64 %12, 4
%137 = icmp slt i64 %136, %10
br i1 %137, label %140, label %138
138: ; preds = %135
%139 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %145
140: ; preds = %135
%141 = getelementptr inbounds i8, i8* %0, i64 %136
%142 = load i8, i8* %141
%143 = sext i8 %142 to i32
%144 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %143)
br label %145
145: ; preds = %140, %138
%146 = or i64 %12, 5
%147 = icmp slt i64 %146, %10
br i1 %147, label %150, label %148
148: ; preds = %145
%149 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %155
150: ; preds = %145
%151 = getelementptr inbounds i8, i8* %0, i64 %146
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %153)
br label %155
155: ; preds = %150, %148
%156 = or i64 %12, 6
%157 = icmp slt i64 %156, %10
br i1 %157, label %160, label %158
158: ; preds = %155
%159 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %165
160: ; preds = %155
%161 = getelementptr inbounds i8, i8* %0, i64 %156
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %163)
br label %165
165: ; preds = %160, %158
%166 = or i64 %12, 7
%167 = icmp slt i64 %166, %10
br i1 %167, label %170, label %168
168: ; preds = %165
%169 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %175
170: ; preds = %165
%171 = getelementptr inbounds i8, i8* %0, i64 %166
%172 = load i8, i8* %171
%173 = sext i8 %172 to i32
%174 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i32 %173)
br label %175
175: ; preds = %170, %168
%176 = tail call i32 @putchar(i32 32)
%177 = icmp slt i64 %13, %10
br i1 %177, label %178, label %185
178: ; preds = %175
%179 = getelementptr inbounds i8, i8* %0, i64 %13
%180 = load i8, i8* %179
%181 = add i8 %180, -127
%182 = icmp ult i8 %181, -95
%183 = select i1 %182, i8 46, i8 %180
%184 = zext i8 %183 to i32
br label %185
185: ; preds = %178, %175
%186 = phi i32 [ 32, %175 ], [ %184, %178 ]
%187 = tail call i32 @putchar(i32 %186)
%188 = or i64 %13, 1
%189 = icmp slt i64 %188, %10
br i1 %189, label %190, label %197
190: ; preds = %185
%191 = getelementptr inbounds i8, i8* %0, i64 %188
%192 = load i8, i8* %191
%193 = add i8 %192, -127
%194 = icmp ult i8 %193, -95
%195 = select i1 %194, i8 46, i8 %192
%196 = zext i8 %195 to i32
br label %197
197: ; preds = %190, %185
%198 = phi i32 [ 32, %185 ], [ %196, %190 ]
%199 = tail call i32 @putchar(i32 %198)
%200 = or i64 %13, 2
%201 = icmp slt i64 %200, %10
br i1 %201, label %202, label %209
202: ; preds = %197
%203 = getelementptr inbounds i8, i8* %0, i64 %200
%204 = load i8, i8* %203
%205 = add i8 %204, -127
%206 = icmp ult i8 %205, -95
%207 = select i1 %206, i8 46, i8 %204
%208 = zext i8 %207 to i32
br label %209
209: ; preds = %202, %197
%210 = phi i32 [ 32, %197 ], [ %208, %202 ]
%211 = tail call i32 @putchar(i32 %210)
%212 = or i64 %13, 3
%213 = icmp slt i64 %212, %10
br i1 %213, label %214, label %221
214: ; preds = %209
%215 = getelementptr inbounds i8, i8* %0, i64 %212
%216 = load i8, i8* %215
%217 = add i8 %216, -127
%218 = icmp ult i8 %217, -95
%219 = select i1 %218, i8 46, i8 %216
%220 = zext i8 %219 to i32
br label %221
221: ; preds = %214, %209
%222 = phi i32 [ 32, %209 ], [ %220, %214 ]
%223 = tail call i32 @putchar(i32 %222)
%224 = or i64 %13, 4
%225 = icmp slt i64 %224, %10
br i1 %225, label %226, label %233
226: ; preds = %221
%227 = getelementptr inbounds i8, i8* %0, i64 %224
%228 = load i8, i8* %227
%229 = add i8 %228, -127
%230 = icmp ult i8 %229, -95
%231 = select i1 %230, i8 46, i8 %228
%232 = zext i8 %231 to i32
br label %233
233: ; preds = %226, %221
%234 = phi i32 [ 32, %221 ], [ %232, %226 ]
%235 = tail call i32 @putchar(i32 %234)
%236 = or i64 %13, 5
%237 = icmp slt i64 %236, %10
br i1 %237, label %238, label %245
238: ; preds = %233
%239 = getelementptr inbounds i8, i8* %0, i64 %236
%240 = load i8, i8* %239
%241 = add i8 %240, -127
%242 = icmp ult i8 %241, -95
%243 = select i1 %242, i8 46, i8 %240
%244 = zext i8 %243 to i32
br label %245
245: ; preds = %238, %233
%246 = phi i32 [ 32, %233 ], [ %244, %238 ]
%247 = tail call i32 @putchar(i32 %246)
%248 = or i64 %13, 6
%249 = icmp slt i64 %248, %10
br i1 %249, label %250, label %257
250: ; preds = %245
%251 = getelementptr inbounds i8, i8* %0, i64 %248
%252 = load i8, i8* %251
%253 = add i8 %252, -127
%254 = icmp ult i8 %253, -95
%255 = select i1 %254, i8 46, i8 %252
%256 = zext i8 %255 to i32
br label %257
257: ; preds = %250, %245
%258 = phi i32 [ 32, %245 ], [ %256, %250 ]
%259 = tail call i32 @putchar(i32 %258)
%260 = or i64 %13, 7
%261 = icmp slt i64 %260, %10
br i1 %261, label %262, label %269
262: ; preds = %257
%263 = getelementptr inbounds i8, i8* %0, i64 %260
%264 = load i8, i8* %263
%265 = add i8 %264, -127
%266 = icmp ult i8 %265, -95
%267 = select i1 %266, i8 46, i8 %264
%268 = zext i8 %267 to i32
br label %269
269: ; preds = %262, %257
%270 = phi i32 [ 32, %257 ], [ %268, %262 ]
%271 = tail call i32 @putchar(i32 %270)
%272 = tail call i32 @putchar(i32 32)
%273 = icmp slt i64 %12, %10
br i1 %273, label %274, label %281
274: ; preds = %269
%275 = getelementptr inbounds i8, i8* %0, i64 %12
%276 = load i8, i8* %275
%277 = add i8 %276, -127
%278 = icmp ult i8 %277, -95
%279 = select i1 %278, i8 46, i8 %276
%280 = zext i8 %279 to i32
br label %281
281: ; preds = %274, %269
%282 = phi i32 [ 32, %269 ], [ %280, %274 ]
%283 = tail call i32 @putchar(i32 %282)
%284 = or i64 %12, 1
%285 = icmp slt i64 %284, %10
br i1 %285, label %286, label %293
286: ; preds = %281
%287 = getelementptr inbounds i8, i8* %0, i64 %284
%288 = load i8, i8* %287
%289 = add i8 %288, -127
%290 = icmp ult i8 %289, -95
%291 = select i1 %290, i8 46, i8 %288
%292 = zext i8 %291 to i32
br label %293
293: ; preds = %286, %281
%294 = phi i32 [ 32, %281 ], [ %292, %286 ]
%295 = tail call i32 @putchar(i32 %294)
%296 = or i64 %12, 2
%297 = icmp slt i64 %296, %10
br i1 %297, label %298, label %305
298: ; preds = %293
%299 = getelementptr inbounds i8, i8* %0, i64 %296
%300 = load i8, i8* %299
%301 = add i8 %300, -127
%302 = icmp ult i8 %301, -95
%303 = select i1 %302, i8 46, i8 %300
%304 = zext i8 %303 to i32
br label %305
305: ; preds = %298, %293
%306 = phi i32 [ 32, %293 ], [ %304, %298 ]
%307 = tail call i32 @putchar(i32 %306)
%308 = or i64 %12, 3
%309 = icmp slt i64 %308, %10
br i1 %309, label %310, label %317
310: ; preds = %305
%311 = getelementptr inbounds i8, i8* %0, i64 %308
%312 = load i8, i8* %311
%313 = add i8 %312, -127
%314 = icmp ult i8 %313, -95
%315 = select i1 %314, i8 46, i8 %312
%316 = zext i8 %315 to i32
br label %317
317: ; preds = %310, %305
%318 = phi i32 [ 32, %305 ], [ %316, %310 ]
%319 = tail call i32 @putchar(i32 %318)
%320 = or i64 %12, 4
%321 = icmp slt i64 %320, %10
br i1 %321, label %322, label %329
322: ; preds = %317
%323 = getelementptr inbounds i8, i8* %0, i64 %320
%324 = load i8, i8* %323
%325 = add i8 %324, -127
%326 = icmp ult i8 %325, -95
%327 = select i1 %326, i8 46, i8 %324
%328 = zext i8 %327 to i32
br label %329
329: ; preds = %322, %317
%330 = phi i32 [ 32, %317 ], [ %328, %322 ]
%331 = tail call i32 @putchar(i32 %330)
%332 = or i64 %12, 5
%333 = icmp slt i64 %332, %10
br i1 %333, label %334, label %341
334: ; preds = %329
%335 = getelementptr inbounds i8, i8* %0, i64 %332
%336 = load i8, i8* %335
%337 = add i8 %336, -127
%338 = icmp ult i8 %337, -95
%339 = select i1 %338, i8 46, i8 %336
%340 = zext i8 %339 to i32
br label %341
341: ; preds = %334, %329
%342 = phi i32 [ 32, %329 ], [ %340, %334 ]
%343 = tail call i32 @putchar(i32 %342)
%344 = or i64 %12, 6
%345 = icmp slt i64 %344, %10
br i1 %345, label %346, label %353
346: ; preds = %341
%347 = getelementptr inbounds i8, i8* %0, i64 %344
%348 = load i8, i8* %347
%349 = add i8 %348, -127
%350 = icmp ult i8 %349, -95
%351 = select i1 %350, i8 46, i8 %348
%352 = zext i8 %351 to i32
br label %353
353: ; preds = %346, %341
%354 = phi i32 [ 32, %341 ], [ %352, %346 ]
%355 = tail call i32 @putchar(i32 %354)
%356 = or i64 %12, 7
%357 = icmp slt i64 %356, %10
br i1 %357, label %358, label %365
358: ; preds = %353
%359 = getelementptr inbounds i8, i8* %0, i64 %356
%360 = load i8, i8* %359
%361 = add i8 %360, -127
%362 = icmp ult i8 %361, -95
%363 = select i1 %362, i8 46, i8 %360
%364 = zext i8 %363 to i32
br label %365
365: ; preds = %358, %353
%366 = phi i32 [ 32, %353 ], [ %364, %358 ]
%367 = tail call i32 @putchar(i32 %366)
%368 = tail call i32 @putchar(i32 10)
%369 = add nuw nsw i32 %14, 1
%370 = add nuw nsw i64 %13, 16
%371 = add nuw nsw i64 %12, 16
%372 = icmp eq i32 %369, %7
br i1 %372, label %373, label %11
373: ; preds = %365, %2
ret void
}