#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    $0x560,%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
xor    %eax,%eax
cmpl   $0x0,-0x210(%rbp,%rcx,4)
mov    %al,-0x551(%rbp)
je     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    1278 <main1+0x158>
movslq -0x4(%rbp),%rax
mov    -0x110(%rbp,%rax,4),%eax
movslq -0x4(%rbp),%rcx
cmp    -0x210(%rbp,%rcx,4),%eax
je     1265 <main1+0x145>
movslq -0x4(%rbp),%rax
cmpl   $0x0,-0x310(%rbp,%rax,4)
je     1265 <main1+0x145>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    126a <main1+0x14a>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1226 <main1+0x106>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    12e4 <main1+0x1c4>
movslq -0x4(%rbp),%rax
movsbl -0x390(%rbp,%rax,1),%ecx
ff
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x552(%rbp)
je     12be <main1+0x19e>
movslq -0x4(%rbp),%rax
movsbl -0x3d0(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
setne  %al
mov    %al,-0x552(%rbp)
mov    -0x552(%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    127f <main1+0x15f>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    1344 <main1+0x224>
movslq -0x4(%rbp),%rax
movsbl -0x350(%rbp,%rax,1),%eax
movslq -0x4(%rbp),%rcx
movsbl -0x390(%rbp,%rcx,1),%ecx
ff
cmp    %ecx,%eax
je     1331 <main1+0x211>
movslq -0x4(%rbp),%rax
movsbl -0x3d0(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
je     1331 <main1+0x211>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1336 <main1+0x216>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    12eb <main1+0x1cb>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    13b2 <main1+0x292>
movslq -0x4(%rbp),%rax
movswl -0x4d0(%rbp,%rax,2),%ecx
ff
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x553(%rbp)
je     138a <main1+0x26a>
movslq -0x4(%rbp),%rax
movswl -0x550(%rbp,%rax,2),%eax
ff
cmp    $0x0,%eax
setne  %al
mov    %al,-0x553(%rbp)
mov    -0x553(%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    134b <main1+0x22b>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    1412 <main1+0x2f2>
movslq -0x4(%rbp),%rax
movswl -0x450(%rbp,%rax,2),%eax
ff
movslq -0x4(%rbp),%rcx
movswl -0x4d0(%rbp,%rcx,2),%ecx
ff
cmp    %ecx,%eax
je     13ff <main1+0x2df>
movslq -0x4(%rbp),%rax
movswl -0x550(%rbp,%rax,2),%eax
ff
cmp    $0x0,%eax
je     13ff <main1+0x2df>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1404 <main1+0x2e4>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    13b9 <main1+0x299>
xor    %eax,%eax
add    $0x560,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
sub    $0x1c8,%rsp
movabs $0xacacacacacacacac,%rdi
ac ac ac
movabs $0x5353535353535353,%r8
53 53 53
xor    %eax,%eax
nopl   (%rax)
bt     %rax,%rdi
setae  %dl
mov    %r8,%rsi
mov    %eax,%ecx
shr    %cl,%rsi
and    %dl,%sil
movzbl %sil,%ecx
mov    %ecx,0xc0(%rsp,%rax,4)
lea    0x1(%rax),%ecx
movzbl %cl,%ecx
bt     %rcx,%rdi
setae  %dl
mov    %r8,%rsi
shr    %cl,%rsi
and    %dl,%sil
movzbl %sil,%ecx
mov    %ecx,0xc4(%rsp,%rax,4)
add    $0x2,%rax
cmp    $0x40,%rax
jne    1130 <main1+0x20>
xor    %eax,%eax
lea    0xe7f(%rip),%rcx
jmp    119a <main1+0x8a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x2,%rax
cmp    $0x40,%rax
je     11cc <main1+0xbc>
mov    0xc0(%rsp,%rax,4),%edx
cmp    (%rcx,%rax,4),%edx
je     11b0 <main1+0xa0>
bt     %rax,%rdi
jae    12e1 <main1+0x1d1>
mov    0xc4(%rsp,%rax,4),%edx
cmp    0x4(%rcx,%rax,4),%edx
je     1190 <main1+0x80>
lea    0x1(%rax),%rdx
bt     %rdx,%rdi
jb     1190 <main1+0x80>
jmp    12e1 <main1+0x1d1>
xor    %eax,%eax
xchg   %ax,%ax
bt     %rax,%rdi
setae  %dl
mov    %r8,%rsi
mov    %eax,%ecx
shr    %cl,%rsi
and    %dl,%sil
mov    %sil,(%rsp,%rax,1)
lea    0x1(%rax),%ecx
movzbl %cl,%ecx
bt     %rcx,%rdi
setae  %dl
mov    %r8,%rsi
shr    %cl,%rsi
and    %dl,%sil
mov    %sil,0x1(%rsp,%rax,1)
add    $0x2,%rax
cmp    $0x40,%rax
jne    11d0 <main1+0xc0>
xor    %eax,%eax
lea    0xeec(%rip),%rcx
jmp    122a <main1+0x11a>
cs nopw 0x0(%rax,%rax,1)
add    $0x2,%rax
cmp    $0x40,%rax
je     1257 <main1+0x147>
movzbl (%rsp,%rax,1),%edx
cmp    (%rax,%rcx,1),%dl
je     123d <main1+0x12d>
bt     %rax,%rdi
jae    12e1 <main1+0x1d1>
movzbl 0x1(%rsp,%rax,1),%edx
cmp    0x1(%rax,%rcx,1),%dl
je     1220 <main1+0x110>
lea    0x1(%rax),%rdx
bt     %rdx,%rdi
jb     1220 <main1+0x110>
jmp    12e1 <main1+0x1d1>
xor    %eax,%eax
nopl   0x0(%rax)
bt     %rax,%rdi
setae  %dl
mov    %r8,%rsi
mov    %eax,%ecx
shr    %cl,%rsi
and    %dl,%sil
movzbl %sil,%ecx
mov    %cx,0x40(%rsp,%rax,2)
lea    0x1(%rax),%ecx
movzbl %cl,%ecx
bt     %rcx,%rdi
setae  %dl
mov    %r8,%rsi
shr    %cl,%rsi
and    %dl,%sil
movzbl %sil,%ecx
mov    %cx,0x42(%rsp,%rax,2)
add    $0x2,%rax
cmp    $0x40,%rax
jne    1260 <main1+0x150>
xor    %eax,%eax
lea    0xe93(%rip),%rcx
jmp    12ba <main1+0x1aa>
nop
add    $0x2,%rax
cmp    $0x40,%rax
je     12e8 <main1+0x1d8>
movzwl 0x40(%rsp,%rax,2),%edx
cmp    (%rcx,%rax,2),%dx
je     12cb <main1+0x1bb>
bt     %rax,%rdi
jae    12e1 <main1+0x1d1>
movzwl 0x42(%rsp,%rax,2),%edx
cmp    0x2(%rcx,%rax,2),%dx
je     12b0 <main1+0x1a0>
lea    0x1(%rax),%rdx
bt     %rdx,%rdi
jb     12b0 <main1+0x1a0>
xor    %eax,%eax
call   1030 <abort@plt>
xor    %eax,%eax
add    $0x1c8,%rsp
ret

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 %26, label %32
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 [ false, %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 = %64, %41
%43 = load i32, i32* %1
%44 = icmp slt i32 %43, 64
br i1 %44, label %45, label %67
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 %49, %53
br i1 %54, label %55, label %63
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 i1 %60, label %61, label %63
61: ; preds = %55
%62 = call i32 (...) @abort()
unreachable
63: ; preds = %55, %45
br label %64
64: ; preds = %63
%65 = load i32, i32* %1
%66 = add nsw i32 %65, 1
store i32 %66, i32* %1
br label %42
67: ; preds = %42
store i32 0, i32* %1
br label %68
68: ; preds = %92, %67
%69 = load i32, i32* %1
%70 = icmp slt i32 %69, 64
br i1 %70, label %71, label %95
71: ; preds = %68
%72 = load i32, i32* %1
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [64 x i8], [64 x i8]* %6, i64 0, i64 %73
%75 = load i8, i8* %74
%76 = sext i8 %75 to i32
%77 = icmp ne i32 %76, 0
br i1 %77, label %78, label %85
78: ; preds = %71
%79 = load i32, i32* %1
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [64 x i8], [64 x i8]* %7, i64 0, i64 %80
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = icmp ne i32 %83, 0
br label %85
85: ; preds = %78, %71
%86 = phi i1 [ false, %71 ], [ %84, %78 ]
%87 = zext i1 %86 to i32
%88 = trunc i32 %87 to i8
%89 = load i32, i32* %1
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [64 x i8], [64 x i8]* %5, i64 0, i64 %90
store i8 %88, i8* %91
br label %92
92: ; preds = %85
%93 = load i32, i32* %1
%94 = add nsw i32 %93, 1
store i32 %94, i32* %1
br label %68
95: ; preds = %68
store i32 0, i32* %1
br label %96
96: ; preds = %121, %95
%97 = load i32, i32* %1
%98 = icmp slt i32 %97, 64
br i1 %98, label %99, label %124
99: ; preds = %96
%100 = load i32, i32* %1
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [64 x i8], [64 x i8]* %5, i64 0, i64 %101
%103 = load i8, i8* %102
%104 = sext i8 %103 to i32
%105 = load i32, i32* %1
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [64 x i8], [64 x i8]* %6, i64 0, i64 %106
%108 = load i8, i8* %107
%109 = sext i8 %108 to i32
%110 = icmp ne i32 %104, %109
br i1 %110, label %111, label %120
111: ; preds = %99
%112 = load i32, i32* %1
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds [64 x i8], [64 x i8]* %7, i64 0, i64 %113
%115 = load i8, i8* %114
%116 = sext i8 %115 to i32
%117 = icmp ne i32 %116, 0
br i1 %117, label %118, label %120
118: ; preds = %111
%119 = call i32 (...) @abort()
unreachable
120: ; preds = %111, %99
br label %121
121: ; preds = %120
%122 = load i32, i32* %1
%123 = add nsw i32 %122, 1
store i32 %123, i32* %1
br label %96
124: ; preds = %96
store i32 0, i32* %1
br label %125
125: ; preds = %149, %124
%126 = load i32, i32* %1
%127 = icmp slt i32 %126, 64
br i1 %127, label %128, label %152
128: ; preds = %125
%129 = load i32, i32* %1
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds [64 x i16], [64 x i16]* %9, i64 0, i64 %130
%132 = load i16, i16* %131
%133 = sext i16 %132 to i32
%134 = icmp ne i32 %133, 0
br i1 %134, label %135, label %142
135: ; preds = %128
%136 = load i32, i32* %1
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds [64 x i16], [64 x i16]* %10, i64 0, i64 %137
%139 = load i16, i16* %138
%140 = sext i16 %139 to i32
%141 = icmp ne i32 %140, 0
br label %142
142: ; preds = %135, %128
%143 = phi i1 [ false, %128 ], [ %141, %135 ]
%144 = zext i1 %143 to i32
%145 = trunc i32 %144 to i16
%146 = load i32, i32* %1
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds [64 x i16], [64 x i16]* %8, i64 0, i64 %147
store i16 %145, i16* %148
br label %149
149: ; preds = %142
%150 = load i32, i32* %1
%151 = add nsw i32 %150, 1
store i32 %151, i32* %1
br label %125
152: ; preds = %125
store i32 0, i32* %1
br label %153
153: ; preds = %178, %152
%154 = load i32, i32* %1
%155 = icmp slt i32 %154, 64
br i1 %155, label %156, label %181
156: ; preds = %153
%157 = load i32, i32* %1
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds [64 x i16], [64 x i16]* %8, i64 0, i64 %158
%160 = load i16, i16* %159
%161 = sext i16 %160 to i32
%162 = load i32, i32* %1
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [64 x i16], [64 x i16]* %9, i64 0, i64 %163
%165 = load i16, i16* %164
%166 = sext i16 %165 to i32
%167 = icmp ne i32 %161, %166
br i1 %167, label %168, label %177
168: ; preds = %156
%169 = load i32, i32* %1
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds [64 x i16], [64 x i16]* %10, i64 0, i64 %170
%172 = load i16, i16* %171
%173 = sext i16 %172 to i32
%174 = icmp ne i32 %173, 0
br i1 %174, label %175, label %177
175: ; preds = %168
%176 = call i32 (...) @abort()
unreachable
177: ; preds = %168, %156
br label %178
178: ; preds = %177
%179 = load i32, i32* %1
%180 = add nsw i32 %179, 1
store i32 %180, i32* %1
br label %153
181: ; preds = %153
ret i32 0
}

LLVM IR (-O2):
@__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.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.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]
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 %14, i1 false
%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 %24, i1 false
%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 %30, label %7
30: ; preds = %7, %54
%31 = phi i64 [ %55, %54 ], [ 0, %7 ]
%32 = getelementptr inbounds [64 x i32], [64 x i32]* %1, i64 0, i64 %31
%33 = load i32, i32* %32
%34 = getelementptr inbounds [64 x i32], [64 x i32]* @__const.main1.ib, i64 0, i64 %31
%35 = load i32, i32* %34
%36 = icmp eq i32 %33, %35
br i1 %36, label %43, label %37
37: ; preds = %30
%38 = lshr i64 -6004234345560363860, %31
%39 = and i64 %38, 1
%40 = icmp eq i64 %39, 0
br i1 %40, label %41, label %43
41: ; preds = %50, %37
%42 = tail call i32 (...) @abort()
unreachable
43: ; preds = %30, %37
%44 = or i64 %31, 1
%45 = getelementptr inbounds [64 x i32], [64 x i32]* %1, i64 0, i64 %44
%46 = load i32, i32* %45
%47 = getelementptr inbounds [64 x i32], [64 x i32]* @__const.main1.ib, i64 0, i64 %44
%48 = load i32, i32* %47
%49 = icmp eq i32 %46, %48
br i1 %49, label %54, label %50
50: ; preds = %43
%51 = lshr i64 -6004234345560363860, %44
%52 = and i64 %51, 1
%53 = icmp eq i64 %52, 0
br i1 %53, label %41, label %54
54: ; preds = %50, %43
%55 = add nuw nsw i64 %31, 2
%56 = icmp eq i64 %55, 64
br i1 %56, label %57, label %30
57: ; preds = %54, %57
%58 = phi i64 [ %78, %57 ], [ 0, %54 ]
%59 = lshr i64 -6004234345560363860, %58
%60 = and i64 %59, 1
%61 = icmp eq i64 %60, 0
%62 = lshr i64 6004234345560363859, %58
%63 = and i64 %62, 1
%64 = icmp ne i64 %63, 0
%65 = select i1 %61, i1 %64, i1 false
%66 = zext i1 %65 to i8
%67 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 %58
store i8 %66, i8* %67
%68 = or i64 %58, 1
%69 = lshr i64 -6004234345560363860, %68
%70 = and i64 %69, 1
%71 = icmp eq i64 %70, 0
%72 = lshr i64 6004234345560363859, %68
%73 = and i64 %72, 1
%74 = icmp ne i64 %73, 0
%75 = select i1 %71, i1 %74, i1 false
%76 = zext i1 %75 to i8
%77 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 %68
store i8 %76, i8* %77
%78 = add nuw nsw i64 %58, 2
%79 = icmp eq i64 %78, 64
br i1 %79, label %80, label %57
80: ; preds = %57, %104
%81 = phi i64 [ %105, %104 ], [ 0, %57 ]
%82 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 %81
%83 = load i8, i8* %82
%84 = getelementptr inbounds [64 x i8], [64 x i8]* @__const.main1.cb, i64 0, i64 %81
%85 = load i8, i8* %84
%86 = icmp eq i8 %83, %85
br i1 %86, label %93, label %87
87: ; preds = %80
%88 = lshr i64 -6004234345560363860, %81
%89 = and i64 %88, 1
%90 = icmp eq i64 %89, 0
br i1 %90, label %91, label %93
91: ; preds = %100, %87
%92 = tail call i32 (...) @abort()
unreachable
93: ; preds = %80, %87
%94 = or i64 %81, 1
%95 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 %94
%96 = load i8, i8* %95
%97 = getelementptr inbounds [64 x i8], [64 x i8]* @__const.main1.cb, i64 0, i64 %94
%98 = load i8, i8* %97
%99 = icmp eq i8 %96, %98
br i1 %99, label %104, label %100
100: ; preds = %93
%101 = lshr i64 -6004234345560363860, %94
%102 = and i64 %101, 1
%103 = icmp eq i64 %102, 0
br i1 %103, label %91, label %104
104: ; preds = %100, %93
%105 = add nuw nsw i64 %81, 2
%106 = icmp eq i64 %105, 64
br i1 %106, label %107, label %80
107: ; preds = %104, %107
%108 = phi i64 [ %128, %107 ], [ 0, %104 ]
%109 = lshr i64 -6004234345560363860, %108
%110 = and i64 %109, 1
%111 = icmp eq i64 %110, 0
%112 = lshr i64 6004234345560363859, %108
%113 = and i64 %112, 1
%114 = icmp ne i64 %113, 0
%115 = select i1 %111, i1 %114, i1 false
%116 = zext i1 %115 to i16
%117 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 %108
store i16 %116, i16* %117
%118 = or i64 %108, 1
%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 %124, i1 false
%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 = add nuw nsw i64 %108, 2
%129 = icmp eq i64 %128, 64
br i1 %129, label %130, label %107
130: ; preds = %107, %154
%131 = phi i64 [ %155, %154 ], [ 0, %107 ]
%132 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 %131
%133 = load i16, i16* %132
%134 = getelementptr inbounds [64 x i16], [64 x i16]* @__const.main1.sb, i64 0, i64 %131
%135 = load i16, i16* %134
%136 = icmp eq i16 %133, %135
br i1 %136, label %143, label %137
137: ; preds = %130
%138 = lshr i64 -6004234345560363860, %131
%139 = and i64 %138, 1
%140 = icmp eq i64 %139, 0
br i1 %140, label %141, label %143
141: ; preds = %150, %137
%142 = tail call i32 (...) @abort()
unreachable
143: ; preds = %130, %137
%144 = or i64 %131, 1
%145 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 %144
%146 = load i16, i16* %145
%147 = getelementptr inbounds [64 x i16], [64 x i16]* @__const.main1.sb, i64 0, i64 %144
%148 = load i16, i16* %147
%149 = icmp eq i16 %146, %148
br i1 %149, label %154, label %150
150: ; preds = %143
%151 = lshr i64 -6004234345560363860, %144
%152 = and i64 %151, 1
%153 = icmp eq i64 %152, 0
br i1 %153, label %141, label %154
154: ; preds = %150, %143
%155 = add nuw nsw i64 %131, 2
%156 = icmp eq i64 %155, 64
br i1 %156, label %157, label %130
157: ; preds = %154
ret i32 0
}