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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ abort();
int main1() {
  int i;
  int ia[64];
  int ib[64] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0};
  int ic[64] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0};
  char ca[64];
  char cb[64] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0};
  char cc[64] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0};
  short sa[64];
  short sb[64] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                  1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                  1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                  1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0};
  short sc[64] = {1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                  1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                  1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0,
                  1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0};
  for (i = 0; i < 64; i++) {
    ia[i] = (ib[i] || ic[i]);
  }
  for (i = 0; i < 64; i++) {
    if (ia[i] != (ib[i] || ic[i]))
      abort();
  }
  for (i = 0; i < 64; i++) {
    ca[i] = (cb[i] || cc[i]);
  }
  for (i = 0; i < 64; i++) {
    if (ca[i] != (cb[i] || cc[i]))
      abort();
  }
  for (i = 0; i < 64; i++) {
    sa[i] = (sb[i] || sc[i]);
  }
  for (i = 0; i < 64; i++) {
    if (sa[i] != (sb[i] || sc[i]))
      abort();
  }
  return 0;
}


x86 assembly (clang, -O0):
<main1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x570,%rsp
lea    -0x210(%rbp),%rdi
lea    0xec7(%rip),%rsi
mov    $0x100,%edx
call   1040 <memcpy@plt>
lea    -0x310(%rbp),%rdi
lea    0xfaf(%rip),%rsi
mov    $0x100,%edx
call   1040 <memcpy@plt>
lea    -0x390(%rbp),%rdi
lea    0x1097(%rip),%rsi
mov    $0x40,%edx
call   1040 <memcpy@plt>
lea    -0x3d0(%rbp),%rdi
lea    0x10bf(%rip),%rsi
mov    $0x40,%edx
call   1040 <memcpy@plt>
lea    -0x4d0(%rbp),%rdi
lea    0x10e7(%rip),%rsi
mov    $0x80,%edx
call   1040 <memcpy@plt>
lea    -0x550(%rbp),%rdi
lea    0x114f(%rip),%rsi
mov    $0x80,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    121f <main1+0xff>
movslq -0x4(%rbp),%rcx
mov    $0x1,%al
cmpl   $0x0,-0x210(%rbp,%rcx,4)
mov    %al,-0x551(%rbp)
jne    11fb <main1+0xdb>
movslq -0x4(%rbp),%rax
cmpl   $0x0,-0x310(%rbp,%rax,4)
setne  %al
mov    %al,-0x551(%rbp)
mov    -0x551(%rbp),%al
and    $0x1,%al
movzbl %al,%ecx
movslq -0x4(%rbp),%rax
mov    %ecx,-0x110(%rbp,%rax,4)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    11c2 <main1+0xa2>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    12a4 <main1+0x184>
movslq -0x4(%rbp),%rax
mov    -0x110(%rbp,%rax,4),%eax
mov    %eax,-0x558(%rbp)
movslq -0x4(%rbp),%rcx
mov    $0x1,%al
cmpl   $0x0,-0x210(%rbp,%rcx,4)
mov    %al,-0x552(%rbp)
jne    1270 <main1+0x150>
movslq -0x4(%rbp),%rax
cmpl   $0x0,-0x310(%rbp,%rax,4)
setne  %al
mov    %al,-0x552(%rbp)
mov    -0x558(%rbp),%eax
mov    -0x552(%rbp),%cl
and    $0x1,%cl
movzbl %cl,%ecx
cmp    %ecx,%eax
je     1291 <main1+0x171>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1296 <main1+0x176>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1226 <main1+0x106>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    1310 <main1+0x1f0>
movslq -0x4(%rbp),%rax
movsbl -0x390(%rbp,%rax,1),%ecx
ff
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x559(%rbp)
jne    12ea <main1+0x1ca>
movslq -0x4(%rbp),%rax
movsbl -0x3d0(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
setne  %al
mov    %al,-0x559(%rbp)
mov    -0x559(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %al,%cl
movslq -0x4(%rbp),%rax
mov    %cl,-0x350(%rbp,%rax,1)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    12ab <main1+0x18b>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    139c <main1+0x27c>
movslq -0x4(%rbp),%rax
movsbl -0x350(%rbp,%rax,1),%eax
ff
mov    %eax,-0x560(%rbp)
movslq -0x4(%rbp),%rax
movsbl -0x390(%rbp,%rax,1),%ecx
ff
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x55a(%rbp)
jne    1368 <main1+0x248>
movslq -0x4(%rbp),%rax
movsbl -0x3d0(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
setne  %al
mov    %al,-0x55a(%rbp)
mov    -0x560(%rbp),%eax
mov    -0x55a(%rbp),%cl
and    $0x1,%cl
movzbl %cl,%ecx
cmp    %ecx,%eax
je     1389 <main1+0x269>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    138e <main1+0x26e>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1317 <main1+0x1f7>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    140a <main1+0x2ea>
movslq -0x4(%rbp),%rax
movswl -0x4d0(%rbp,%rax,2),%ecx
ff
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x561(%rbp)
jne    13e2 <main1+0x2c2>
movslq -0x4(%rbp),%rax
movswl -0x550(%rbp,%rax,2),%eax
ff
cmp    $0x0,%eax
setne  %al
mov    %al,-0x561(%rbp)
mov    -0x561(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %ax,%cx
movslq -0x4(%rbp),%rax
mov    %cx,-0x450(%rbp,%rax,2)
ff
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    13a3 <main1+0x283>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    1496 <main1+0x376>
movslq -0x4(%rbp),%rax
movswl -0x450(%rbp,%rax,2),%eax
ff
mov    %eax,-0x568(%rbp)
movslq -0x4(%rbp),%rax
movswl -0x4d0(%rbp,%rax,2),%ecx
ff
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x562(%rbp)
jne    1462 <main1+0x342>
movslq -0x4(%rbp),%rax
movswl -0x550(%rbp,%rax,2),%eax
ff
cmp    $0x0,%eax
setne  %al
mov    %al,-0x562(%rbp)
mov    -0x568(%rbp),%eax
mov    -0x562(%rbp),%cl
and    $0x1,%cl
movzbl %cl,%ecx
cmp    %ecx,%eax
je     1483 <main1+0x363>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1488 <main1+0x368>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1411 <main1+0x2f1>
xor    %eax,%eax
add    $0x570,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
sub    $0x1c8,%rsp
movabs $0xacacacacacacacac,%r8
ac ac ac
movabs $0x5353535353535353,%r9
53 53 53
xor    %eax,%eax
nopl   (%rax)
bt     %rax,%r8
setae  %dl
mov    %r9,%rsi
mov    %eax,%ecx
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%edx
and    $0x1,%edx
lea    0x1(%rax),%ecx
movzbl %cl,%ecx
bt     %rcx,%r8
setae  %sil
mov    %r9,%rdi
shr    %cl,%rdi
mov    %edx,0xc0(%rsp,%rax,4)
or     %sil,%dil
movzbl %dil,%ecx
and    $0x1,%ecx
mov    %ecx,0xc4(%rsp,%rax,4)
add    $0x2,%rax
cmp    $0x40,%rax
jne    1130 <main1+0x20>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
bt     %rax,%r8
setae  %dl
mov    %r9,%rsi
mov    %eax,%ecx
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%ecx
and    $0x1,%ecx
cmp    %ecx,0xc0(%rsp,%rax,4)
jne    1348 <main1+0x238>
lea    0x1(%rax),%rcx
bt     %rcx,%r8
setae  %dl
mov    %r9,%rsi
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%edx
and    $0x1,%edx
cmp    %edx,0xc4(%rsp,%rax,4)
jne    1348 <main1+0x238>
add    $0x1,%rcx
mov    %rcx,%rax
cmp    $0x40,%rcx
jne    1190 <main1+0x80>
xor    %eax,%eax
nopl   (%rax)
bt     %rax,%r8
setae  %dl
mov    %r9,%rsi
mov    %eax,%ecx
shr    %cl,%rsi
or     %dl,%sil
and    $0x1,%sil
mov    %sil,(%rsp,%rax,1)
lea    0x1(%rax),%ecx
movzbl %cl,%ecx
bt     %rcx,%r8
setae  %dl
mov    %r9,%rsi
shr    %cl,%rsi
or     %dl,%sil
and    $0x1,%sil
mov    %sil,0x1(%rsp,%rax,1)
add    $0x2,%rax
cmp    $0x40,%rax
jne    11f0 <main1+0xe0>
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
movsbl (%rsp,%rcx,1),%eax
bt     %rcx,%r8
setae  %dl
mov    %r9,%rsi
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%edx
and    $0x1,%edx
cmp    %edx,%eax
jne    1348 <main1+0x238>
movsbl 0x1(%rsp,%rcx,1),%eax
add    $0x1,%rcx
bt     %rcx,%r8
setae  %dl
mov    %r9,%rsi
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%edx
and    $0x1,%edx
cmp    %edx,%eax
jne    1348 <main1+0x238>
add    $0x1,%rcx
cmp    $0x40,%rcx
jne    1240 <main1+0x130>
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
bt     %rax,%r8
setae  %dl
mov    %r9,%rsi
mov    %eax,%ecx
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%edx
and    $0x1,%edx
lea    0x1(%rax),%ecx
movzbl %cl,%ecx
bt     %rcx,%r8
setae  %sil
mov    %r9,%rdi
shr    %cl,%rdi
mov    %dx,0x40(%rsp,%rax,2)
or     %sil,%dil
movzbl %dil,%ecx
and    $0x1,%ecx
mov    %cx,0x42(%rsp,%rax,2)
add    $0x2,%rax
cmp    $0x40,%rax
jne    12a0 <main1+0x190>
xor    %ecx,%ecx
nopl   (%rax)
movswl 0x40(%rsp,%rcx,2),%eax
bt     %rcx,%r8
setae  %dl
mov    %r9,%rsi
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%edx
and    $0x1,%edx
cmp    %edx,%eax
jne    1348 <main1+0x238>
movswl 0x42(%rsp,%rcx,2),%eax
add    $0x1,%rcx
bt     %rcx,%r8
setae  %dl
mov    %r9,%rsi
shr    %cl,%rsi
or     %dl,%sil
movzbl %sil,%edx
and    $0x1,%edx
cmp    %edx,%eax
jne    1348 <main1+0x238>
add    $0x1,%rcx
cmp    $0x40,%rcx
jne    12f0 <main1+0x1e0>
xor    %eax,%eax
add    $0x1c8,%rsp
ret
xor    %eax,%eax
call   1030 <abort@plt>

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

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