#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 */
unsigned long mfspr(int);
int /*<<< orphan*/ mtspr(int, unsigned long);
int /*<<< orphan*/ printf(char *, unsigned long, ...);
int main() {
  unsigned char *b0_start_addr = (unsigned char *)0x00000000;
  unsigned char *b0_mid_addr = (unsigned char *)0x00100000;
  unsigned char *b0_end_addr = (unsigned char *)0x001ffff0;
  unsigned char *b1_start_addr = (unsigned char *)0xffe00000;
  unsigned char *b1_end_addr = (unsigned char *)0xfffffff0;
  unsigned long int r;
  int i;
  unsigned long int maclo;
  unsigned long int machi;
  unsigned char b0_start[16];
  unsigned char b0_mid[16];
  unsigned char b0_end[16];
  unsigned char b1_start[16];
  unsigned char b1_end[16];
  int maclo_f;
  int machi_f;
  int b0_start_f[16];
  int b0_mid_f[16];
  int b0_end_f[16];
  int b1_start_f[16];
  int b1_end_f[16];
  int changed_since_print;
  r = mfspr(((0 << (11)) + 17));
  mtspr(((0 << (11)) + 17), r | 0x00010000);
  maclo = 0;
  machi = 0;
  maclo_f = 0;
  machi_f = 0;
  for (i = 0; i < 16; i++) {
    b0_start[i] = 0;
    b0_mid[i] = 0;
    b0_end[i] = 0;
    b1_start[i] = 0;
    b1_end[i] = 0;
    b0_start_f[i] = 0;
    b0_mid_f[i] = 0;
    b0_end_f[i] = 0;
    b1_start_f[i] = 0;
    b1_end_f[i] = 0;
  }
  mtspr(((5 << (11)) + 1), maclo);
  mtspr(((5 << (11)) + 2), machi);
  for (i = 0; i < 16; i++) {
    b0_start_addr[i] = b0_start[i];
    b0_mid_addr[i] = b0_mid[i];
    b0_end_addr[i] = b0_end[i];
    b1_start_addr[i] = b1_start[i];
    b1_end_addr[i] = b1_end[i];
  }
  changed_since_print = 0;
  while (1) {
    int changed_this_loop = 0;
    if (mfspr(((5 << (11)) + 1)) != maclo) {
      maclo = mfspr(((5 << (11)) + 1));
      maclo_f = 1;
      changed_since_print = 1;
      changed_this_loop = 1;
    }
    if (mfspr(((5 << (11)) + 2)) != machi) {
      machi = mfspr(((5 << (11)) + 2));
      machi_f = 1;
      changed_since_print = 1;
      changed_this_loop = 1;
    }
    for (i = 0; i < 16; i++) {
      if (b0_start_addr[i] != b0_start[i]) {
        b0_start[i] = b0_start_addr[i];
        b0_start_f[i] = 1;
        changed_since_print = 1;
        changed_this_loop = 1;
      }
      if (b0_mid_addr[i] != b0_mid[i]) {
        b0_mid[i] = b0_mid_addr[i];
        b0_mid_f[i] = 1;
        changed_since_print = 1;
        changed_this_loop = 1;
      }
      if (b0_end_addr[i] != b0_end[i]) {
        b0_end[i] = b0_end_addr[i];
        b0_end_f[i] = 1;
        changed_since_print = 1;
        changed_this_loop = 1;
      }
      if (b1_start_addr[i] != b1_start[i]) {
        b1_start[i] = b1_start_addr[i];
        b1_start_f[i] = 1;
        changed_since_print = 1;
        changed_this_loop = 1;
      }
      if (b1_end_addr[i] != b1_end[i]) {
        b1_end[i] = b1_end_addr[i];
        b1_end_f[i] = 1;
        changed_since_print = 1;
        changed_this_loop = 1;
      }
    }
    if (changed_since_print && !changed_this_loop) {
      if (maclo_f) {
        printf("New MACLO 0x%08lx\n", maclo);
        maclo_f = 0;
      }
      if (machi_f) {
        printf("New MACHI 0x%08lx\n", machi);
        machi_f = 0;
      }
      for (i = 0; i < 16; i++) {
        if (b0_start_f[i]) {
          printf("New byte at 0x%08lx = 0x%02x\n",
                 (unsigned long int)&b0_start_addr[i], b0_start[i]);
          b0_start_f[i] = 0;
        }
      }
      for (i = 0; i < 16; i++) {
        if (b0_mid_f[i]) {
          printf("New byte at 0x%08lx = 0x%02x\n",
                 (unsigned long int)&b0_mid_addr[i], b0_mid[i]);
          b0_mid_f[i] = 0;
        }
      }
      for (i = 0; i < 16; i++) {
        if (b0_end_f[i]) {
          printf("New byte at 0x%08lx = 0x%02x\n",
                 (unsigned long int)&b0_end_addr[i], b0_end[i]);
          b0_end_f[i] = 0;
        }
      }
      for (i = 0; i < 16; i++) {
        if (b1_start_f[i]) {
          printf("New byte at 0x%08lx = 0x%02x\n",
                 (unsigned long int)&b1_start_addr[i], b1_start[i]);
          b1_start_f[i] = 0;
        }
      }
      for (i = 0; i < 16; i++) {
        if (b1_end_f[i]) {
          printf("New byte at 0x%08lx = 0x%02x\n",
                 (unsigned long int)&b1_end_addr[i], b1_end[i]);
          b1_end_f[i] = 0;
        }
      }
      changed_since_print = 0;
    }
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x200,%rsp
movl   $0x0,-0x4(%rbp)
movq   $0x0,-0x10(%rbp)
mov    $0x100000,%eax
mov    %rax,-0x18(%rbp)
mov    $0x1ffff0,%eax
mov    %rax,-0x20(%rbp)
mov    $0xffe00000,%eax
mov    %rax,-0x28(%rbp)
mov    $0xfffffff0,%eax
mov    %rax,-0x30(%rbp)
mov    $0x11,%edi
call   1040 <mfspr@plt>
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rsi
or     $0x10000,%rsi
mov    $0x11,%edi
call   1050 <mtspr@plt>
movq   $0x0,-0x48(%rbp)
movq   $0x0,-0x50(%rbp)
movl   $0x0,-0xa4(%rbp)
movl   $0x0,-0xa8(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    1252 <main+0x122>
movslq -0x3c(%rbp),%rax
movb   $0x0,-0x60(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movb   $0x0,-0x70(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movb   $0x0,-0x80(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movb   $0x0,-0x90(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movb   $0x0,-0xa0(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movl   $0x0,-0xf0(%rbp,%rax,4)
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x130(%rbp,%rax,4)
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x170(%rbp,%rax,4)
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x1b0(%rbp,%rax,4)
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x1f0(%rbp,%rax,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11bc <main+0x8c>
mov    -0x48(%rbp),%rsi
mov    $0x2801,%edi
call   1050 <mtspr@plt>
mov    -0x50(%rbp),%rsi
mov    $0x2802,%edi
call   1050 <mtspr@plt>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    12f2 <main+0x1c2>
movslq -0x3c(%rbp),%rax
mov    -0x60(%rbp,%rax,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movslq -0x3c(%rbp),%rax
mov    -0x70(%rbp,%rax,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movslq -0x3c(%rbp),%rax
mov    -0x80(%rbp,%rax,1),%dl
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movslq -0x3c(%rbp),%rax
mov    -0x90(%rbp,%rax,1),%dl
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movslq -0x3c(%rbp),%rax
mov    -0xa0(%rbp,%rax,1),%dl
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1275 <main+0x145>
movl   $0x0,-0x1f4(%rbp)
movl   $0x0,-0x1f8(%rbp)
mov    $0x2801,%edi
call   1040 <mfspr@plt>
cmp    -0x48(%rbp),%rax
je     1346 <main+0x216>
mov    $0x2801,%edi
call   1040 <mfspr@plt>
mov    %rax,-0x48(%rbp)
movl   $0x1,-0xa4(%rbp)
movl   $0x1,-0x1f4(%rbp)
movl   $0x1,-0x1f8(%rbp)
mov    $0x2802,%edi
call   1040 <mfspr@plt>
cmp    -0x50(%rbp),%rax
je     1386 <main+0x256>
mov    $0x2802,%edi
call   1040 <mfspr@plt>
mov    %rax,-0x50(%rbp)
movl   $0x1,-0xa8(%rbp)
movl   $0x1,-0x1f4(%rbp)
movl   $0x1,-0x1f8(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    1555 <main+0x425>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
movslq -0x3c(%rbp),%rcx
movzbl -0x60(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
je     13ea <main+0x2ba>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x3c(%rbp),%rax
mov    %cl,-0x60(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movl   $0x1,-0xf0(%rbp,%rax,4)
movl   $0x1,-0x1f4(%rbp)
movl   $0x1,-0x1f8(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
movslq -0x3c(%rbp),%rcx
movzbl -0x70(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
je     143d <main+0x30d>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x3c(%rbp),%rax
mov    %cl,-0x70(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movl   $0x1,-0x130(%rbp,%rax,4)
movl   $0x1,-0x1f4(%rbp)
movl   $0x1,-0x1f8(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
movslq -0x3c(%rbp),%rcx
movzbl -0x80(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
je     1490 <main+0x360>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x3c(%rbp),%rax
mov    %cl,-0x80(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movl   $0x1,-0x170(%rbp,%rax,4)
movl   $0x1,-0x1f4(%rbp)
movl   $0x1,-0x1f8(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
movslq -0x3c(%rbp),%rcx
movzbl -0x90(%rbp,%rcx,1),%ecx
ff
cmp    %ecx,%eax
je     14e9 <main+0x3b9>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x3c(%rbp),%rax
mov    %cl,-0x90(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movl   $0x1,-0x1b0(%rbp,%rax,4)
movl   $0x1,-0x1f4(%rbp)
movl   $0x1,-0x1f8(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
movslq -0x3c(%rbp),%rcx
movzbl -0xa0(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
je     1542 <main+0x412>
mov    -0x30(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x3c(%rbp),%rax
mov    %cl,-0xa0(%rbp,%rax,1)
movslq -0x3c(%rbp),%rax
movl   $0x1,-0x1f0(%rbp,%rax,4)
movl   $0x1,-0x1f4(%rbp)
movl   $0x1,-0x1f8(%rbp)
jmp    1547 <main+0x417>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    138d <main+0x25d>
cmpl   $0x0,-0x1f4(%rbp)
je     17d4 <main+0x6a4>
cmpl   $0x0,-0x1f8(%rbp)
jne    17d4 <main+0x6a4>
cmpl   $0x0,-0xa4(%rbp)
je     1598 <main+0x468>
mov    -0x48(%rbp),%rsi
lea    0xa79(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0xa4(%rbp)
cmpl   $0x0,-0xa8(%rbp)
je     15c1 <main+0x491>
mov    -0x50(%rbp),%rsi
lea    0xa63(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0xa8(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    1628 <main+0x4f8>
movslq -0x3c(%rbp),%rax
cmpl   $0x0,-0xf0(%rbp,%rax,4)
je     1615 <main+0x4e5>
mov    -0x10(%rbp),%rsi
movslq -0x3c(%rbp),%rax
add    %rax,%rsi
movslq -0x3c(%rbp),%rax
movzbl -0x60(%rbp,%rax,1),%edx
lea    0xa27(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movslq -0x3c(%rbp),%rax
movl   $0x0,-0xf0(%rbp,%rax,4)
jmp    161a <main+0x4ea>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    15c8 <main+0x498>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    168f <main+0x55f>
movslq -0x3c(%rbp),%rax
cmpl   $0x0,-0x130(%rbp,%rax,4)
je     167c <main+0x54c>
mov    -0x18(%rbp),%rsi
movslq -0x3c(%rbp),%rax
add    %rax,%rsi
movslq -0x3c(%rbp),%rax
movzbl -0x70(%rbp,%rax,1),%edx
lea    0x9c0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x130(%rbp,%rax,4)
jmp    1681 <main+0x551>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    162f <main+0x4ff>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    16f6 <main+0x5c6>
movslq -0x3c(%rbp),%rax
cmpl   $0x0,-0x170(%rbp,%rax,4)
je     16e3 <main+0x5b3>
mov    -0x20(%rbp),%rsi
movslq -0x3c(%rbp),%rax
add    %rax,%rsi
movslq -0x3c(%rbp),%rax
movzbl -0x80(%rbp,%rax,1),%edx
lea    0x959(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x170(%rbp,%rax,4)
jmp    16e8 <main+0x5b8>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1696 <main+0x566>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    1760 <main+0x630>
movslq -0x3c(%rbp),%rax
cmpl   $0x0,-0x1b0(%rbp,%rax,4)
je     174d <main+0x61d>
mov    -0x28(%rbp),%rsi
movslq -0x3c(%rbp),%rax
add    %rax,%rsi
movslq -0x3c(%rbp),%rax
movzbl -0x90(%rbp,%rax,1),%edx
ff
lea    0x8ef(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x1b0(%rbp,%rax,4)
jmp    1752 <main+0x622>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    16fd <main+0x5cd>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x10,-0x3c(%rbp)
jge    17ca <main+0x69a>
movslq -0x3c(%rbp),%rax
cmpl   $0x0,-0x1f0(%rbp,%rax,4)
je     17b7 <main+0x687>
mov    -0x30(%rbp),%rsi
movslq -0x3c(%rbp),%rax
add    %rax,%rsi
movslq -0x3c(%rbp),%rax
movzbl -0xa0(%rbp,%rax,1),%edx
ff
lea    0x885(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movslq -0x3c(%rbp),%rax
movl   $0x0,-0x1f0(%rbp,%rax,4)
jmp    17bc <main+0x68c>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1767 <main+0x637>
movl   $0x0,-0x1f4(%rbp)
jmp    12fc <main+0x1cc>

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
sub    $0x40,%rsp
mov    $0xffe00002,%r14d
mov    $0x100002,%r15d
mov    $0x11,%edi
call   1030 <mfspr@plt>
or     $0x10000,%rax
mov    $0x11,%edi
mov    %rax,%rsi
call   1040 <mtspr@plt>
xorps  %xmm0,%xmm0
movaps %xmm0,0x30(%rsp)
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x10(%rsp)
movaps %xmm0,(%rsp)
xor    %ebx,%ebx
mov    $0x2801,%edi
xor    %esi,%esi
call   1040 <mtspr@plt>
mov    $0x2802,%edi
xor    %esi,%esi
call   1040 <mtspr@plt>
movb   $0x0,0x100000
movb   $0x0,0x1ffff0
movb   $0x0,-0x2(%r14)
movb   $0x0,0x1fffee(%r14)
nop
movzbl 0x31(%rsp,%rbx,1),%eax
movzbl 0x21(%rsp,%rbx,1),%ecx
movzbl 0x11(%rsp,%rbx,1),%edx
movzbl 0x1(%rsp,%rbx,1),%esi
mov    %al,-0x1(%r15,%rbx,1)
mov    %cl,0xfffef(%r15,%rbx,1)
mov    %dl,-0x1(%r14,%rbx,1)
mov    %sil,0x1fffef(%r14,%rbx,1)
cmp    $0xe,%rbx
je     1206 <main+0xe6>
movzbl 0x32(%rsp,%rbx,1),%eax
movzbl 0x22(%rsp,%rbx,1),%ecx
movzbl 0x12(%rsp,%rbx,1),%edx
movzbl 0x2(%rsp,%rbx,1),%esi
mov    %al,(%r15,%rbx,1)
mov    %cl,0xffff0(%r15,%rbx,1)
mov    %dl,(%r14,%rbx,1)
mov    %sil,0x1ffff0(%r14,%rbx,1)
add    $0x2,%rbx
jmp    11a0 <main+0x80>
mov    $0x2801,%edi
call   1030 <mfspr@plt>
test   %rax,%rax
je     121f <main+0xff>
mov    $0x2801,%edi
call   1030 <mfspr@plt>
mov    $0x2802,%edi
call   1030 <mfspr@plt>
mov    $0x2802,%edi
call   1030 <mfspr@plt>

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

LLVM IR (-O2):
define i32 @main() {
%1 = alloca [16 x i8]
%2 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 0
%3 = alloca [16 x i8]
%4 = getelementptr inbounds [16 x i8], [16 x i8]* %3, i64 0, i64 0
%5 = alloca [16 x i8]
%6 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 0
%7 = alloca [16 x i8]
%8 = getelementptr inbounds [16 x i8], [16 x i8]* %7, i64 0, i64 0
%9 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 0
%10 = getelementptr inbounds [16 x i8], [16 x i8]* %3, i64 0, i64 0
%11 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 0
%12 = getelementptr inbounds [16 x i8], [16 x i8]* %7, i64 0, i64 0
%13 = tail call i64 @mfspr(i32 17)
%14 = or i64 %13, 65536
%15 = tail call i32 @mtspr(i32 17, i64 %14)
%16 = tail call i32 @mtspr(i32 10241, i64 0)
%17 = tail call i32 @mtspr(i32 10242, i64 0)
store i8 0, i8* inttoptr (i64 1048576 to i8*)
store i8 0, i8* inttoptr (i64 2097136 to i8*)
store i8 0, i8* inttoptr (i64 4292870144 to i8*)
store i8 0, i8* inttoptr (i64 4294967280 to i8*)
br label %18
18: ; preds = %34, %0
%19 = phi i64 [ 1, %0 ], [ %47, %34 ]
%20 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 %19
%21 = load i8, i8* %20
%22 = getelementptr inbounds [16 x i8], [16 x i8]* %3, i64 0, i64 %19
%23 = load i8, i8* %22
%24 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %19
%25 = load i8, i8* %24
%26 = getelementptr inbounds [16 x i8], [16 x i8]* %7, i64 0, i64 %19
%27 = load i8, i8* %26
%28 = getelementptr inbounds i8, i8* inttoptr (i64 1048576 to i8*), i64 %19
store i8 %21, i8* %28
%29 = getelementptr inbounds i8, i8* inttoptr (i64 2097136 to i8*), i64 %19
store i8 %23, i8* %29
%30 = getelementptr inbounds i8, i8* inttoptr (i64 4292870144 to i8*), i64 %19
store i8 %25, i8* %30
%31 = getelementptr inbounds i8, i8* inttoptr (i64 4294967280 to i8*), i64 %19
store i8 %27, i8* %31
%32 = add nuw nsw i64 %19, 1
%33 = icmp eq i64 %32, 16
br i1 %33, label %48, label %34
34: ; preds = %18
%35 = getelementptr inbounds [16 x i8], [16 x i8]* %1, i64 0, i64 %32
%36 = load i8, i8* %35
%37 = getelementptr inbounds [16 x i8], [16 x i8]* %3, i64 0, i64 %32
%38 = load i8, i8* %37
%39 = getelementptr inbounds [16 x i8], [16 x i8]* %5, i64 0, i64 %32
%40 = load i8, i8* %39
%41 = getelementptr inbounds [16 x i8], [16 x i8]* %7, i64 0, i64 %32
%42 = load i8, i8* %41
%43 = getelementptr inbounds i8, i8* inttoptr (i64 1048576 to i8*), i64 %32
store i8 %36, i8* %43
%44 = getelementptr inbounds i8, i8* inttoptr (i64 2097136 to i8*), i64 %32
store i8 %38, i8* %44
%45 = getelementptr inbounds i8, i8* inttoptr (i64 4292870144 to i8*), i64 %32
store i8 %40, i8* %45
%46 = getelementptr inbounds i8, i8* inttoptr (i64 4294967280 to i8*), i64 %32
store i8 %42, i8* %46
%47 = add nuw nsw i64 %19, 2
br label %18
48: ; preds = %18
%49 = tail call i64 @mfspr(i32 10241)
%50 = icmp eq i64 %49, 0
br i1 %50, label %53, label %51
51: ; preds = %48
%52 = tail call i64 @mfspr(i32 10241)
br label %53
53: ; preds = %51, %48
%54 = tail call i64 @mfspr(i32 10242)
%55 = icmp ne i64 %54, 0
tail call void @llvm.assume(i1 %55)
%56 = tail call i64 @mfspr(i32 10242)
unreachable
}