#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    $0x550,%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    11fb <main1+0xdb>
movslq -0x4(%rbp),%rax
mov    -0x210(%rbp,%rax,4),%ecx
movslq -0x4(%rbp),%rax
xor    -0x310(%rbp,%rax,4),%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    1258 <main1+0x138>
movslq -0x4(%rbp),%rax
mov    -0x110(%rbp,%rax,4),%eax
movslq -0x4(%rbp),%rcx
cmp    -0x210(%rbp,%rcx,4),%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
movslq -0x4(%rbp),%rcx
xor    -0x310(%rbp,%rcx,4),%eax
cmp    $0x0,%eax
je     1245 <main1+0x125>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    124a <main1+0x12a>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1202 <main1+0xe2>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    129e <main1+0x17e>
movslq -0x4(%rbp),%rax
movsbl -0x390(%rbp,%rax,1),%eax
ff
movslq -0x4(%rbp),%rcx
movsbl -0x3d0(%rbp,%rcx,1),%ecx
ff
xor    %ecx,%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    125f <main1+0x13f>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    1302 <main1+0x1e2>
movslq -0x4(%rbp),%rax
movsbl -0x350(%rbp,%rax,1),%eax
ff
movslq -0x4(%rbp),%rcx
movsbl -0x390(%rbp,%rcx,1),%ecx
ff
cmp    %ecx,%eax
setne  %al
and    $0x1,%al
movzbl %al,%eax
movslq -0x4(%rbp),%rcx
movsbl -0x3d0(%rbp,%rcx,1),%ecx
ff
xor    %ecx,%eax
cmp    $0x0,%eax
je     12ef <main1+0x1cf>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    12f4 <main1+0x1d4>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    12a5 <main1+0x185>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    134a <main1+0x22a>
movslq -0x4(%rbp),%rax
movswl -0x4d0(%rbp,%rax,2),%eax
ff
movslq -0x4(%rbp),%rcx
movswl -0x550(%rbp,%rcx,2),%ecx
ff
xor    %ecx,%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    1309 <main1+0x1e9>
movl   $0x0,-0x4(%rbp)
cmpl   $0x40,-0x4(%rbp)
jge    13ae <main1+0x28e>
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
setne  %al
and    $0x1,%al
movzbl %al,%eax
movslq -0x4(%rbp),%rcx
movswl -0x550(%rbp,%rcx,2),%ecx
ff
xor    %ecx,%eax
cmp    $0x0,%eax
je     139b <main1+0x27b>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    13a0 <main1+0x280>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1351 <main1+0x231>
xor    %eax,%eax
add    $0x550,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
sub    $0x1c8,%rsp
xorps  %xmm0,%xmm0
movaps %xmm0,0xc0(%rsp)
movaps %xmm0,0xd0(%rsp)
movaps %xmm0,0xe0(%rsp)
movaps %xmm0,0xf0(%rsp)
movaps %xmm0,0x100(%rsp)
movaps %xmm0,0x110(%rsp)
movaps %xmm0,0x120(%rsp)
movaps %xmm0,0x130(%rsp)
movaps %xmm0,0x140(%rsp)
movaps %xmm0,0x150(%rsp)
movaps %xmm0,0x160(%rsp)
movaps %xmm0,0x170(%rsp)
movaps %xmm0,0x180(%rsp)
movaps %xmm0,0x190(%rsp)
movaps %xmm0,0x1a0(%rsp)
movaps %xmm0,0x1b0(%rsp)
xor    %eax,%eax
lea    0xe5d(%rip),%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rcx,%rax,4),%edx
xor    %esi,%esi
cmp    %edx,0xc0(%rsp,%rax,4)
setne  %sil
cmp    %esi,%edx
jne    12cb <main1+0x1bb>
mov    0x4(%rcx,%rax,4),%edx
xor    %esi,%esi
cmp    %edx,0xc4(%rsp,%rax,4)
setne  %sil
cmp    %esi,%edx
jne    12cb <main1+0x1bb>
add    $0x2,%rax
cmp    $0x40,%rax
jne    11b0 <main1+0xa0>
xorps  %xmm0,%xmm0
movaps %xmm0,(%rsp)
movaps %xmm0,0x10(%rsp)
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x30(%rsp)
xor    %eax,%eax
lea    0xef6(%rip),%rcx
nopw   0x0(%rax,%rax,1)
movsbl (%rax,%rcx,1),%edx
xor    %esi,%esi
cmp    %dl,(%rsp,%rax,1)
setne  %sil
cmp    %edx,%esi
jne    12cb <main1+0x1bb>
movsbl 0x1(%rax,%rcx,1),%edx
xor    %esi,%esi
cmp    %dl,0x1(%rsp,%rax,1)
setne  %sil
cmp    %edx,%esi
jne    12cb <main1+0x1bb>
add    $0x2,%rax
cmp    $0x40,%rax
jne    1210 <main1+0x100>
xorps  %xmm0,%xmm0
movaps %xmm0,0x40(%rsp)
movaps %xmm0,0x50(%rsp)
movaps %xmm0,0x60(%rsp)
movaps %xmm0,0x70(%rsp)
movaps %xmm0,0x80(%rsp)
movaps %xmm0,0x90(%rsp)
movaps %xmm0,0xa0(%rsp)
movaps %xmm0,0xb0(%rsp)
xor    %eax,%eax
lea    0xeba(%rip),%rcx
cs nopw 0x0(%rax,%rax,1)
movswl (%rcx,%rax,2),%edx
xor    %esi,%esi
cmp    %dx,0x40(%rsp,%rax,2)
setne  %sil
cmp    %edx,%esi
jne    12cb <main1+0x1bb>
movswl 0x2(%rcx,%rax,2),%edx
xor    %esi,%esi
cmp    %dx,0x42(%rsp,%rax,2)
setne  %sil
cmp    %edx,%esi
jne    12cb <main1+0x1bb>
add    $0x2,%rax
cmp    $0x40,%rax
jne    1290 <main1+0x180>
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 = %33, %0
%18 = load i32, i32* %1
%19 = icmp slt i32 %18, 64
br i1 %19, label %20, label %36
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 = load i32, i32* %1
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 %26
%28 = load i32, i32* %27
%29 = xor i32 %24, %28
%30 = load i32, i32* %1
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds [64 x i32], [64 x i32]* %2, i64 0, i64 %31
store i32 %29, i32* %32
br label %33
33: ; preds = %20
%34 = load i32, i32* %1
%35 = add nsw i32 %34, 1
store i32 %35, i32* %1
br label %17
36: ; preds = %17
store i32 0, i32* %1
br label %37
37: ; preds = %60, %36
%38 = load i32, i32* %1
%39 = icmp slt i32 %38, 64
br i1 %39, label %40, label %63
40: ; preds = %37
%41 = load i32, i32* %1
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [64 x i32], [64 x i32]* %2, i64 0, i64 %42
%44 = load i32, i32* %43
%45 = load i32, i32* %1
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 %46
%48 = load i32, i32* %47
%49 = icmp ne i32 %44, %48
%50 = zext i1 %49 to i32
%51 = load i32, i32* %1
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [64 x i32], [64 x i32]* %4, i64 0, i64 %52
%54 = load i32, i32* %53
%55 = xor i32 %50, %54
%56 = icmp ne i32 %55, 0
br i1 %56, label %57, label %59
57: ; preds = %40
%58 = call i32 (...) @abort()
unreachable
59: ; preds = %40
br label %60
60: ; preds = %59
%61 = load i32, i32* %1
%62 = add nsw i32 %61, 1
store i32 %62, i32* %1
br label %37
63: ; preds = %37
store i32 0, i32* %1
br label %64
64: ; preds = %83, %63
%65 = load i32, i32* %1
%66 = icmp slt i32 %65, 64
br i1 %66, label %67, label %86
67: ; preds = %64
%68 = load i32, i32* %1
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [64 x i8], [64 x i8]* %6, i64 0, i64 %69
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = load i32, i32* %1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [64 x i8], [64 x i8]* %7, i64 0, i64 %74
%76 = load i8, i8* %75
%77 = sext i8 %76 to i32
%78 = xor i32 %72, %77
%79 = trunc i32 %78 to i8
%80 = load i32, i32* %1
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds [64 x i8], [64 x i8]* %5, i64 0, i64 %81
store i8 %79, i8* %82
br label %83
83: ; preds = %67
%84 = load i32, i32* %1
%85 = add nsw i32 %84, 1
store i32 %85, i32* %1
br label %64
86: ; preds = %64
store i32 0, i32* %1
br label %87
87: ; preds = %113, %86
%88 = load i32, i32* %1
%89 = icmp slt i32 %88, 64
br i1 %89, label %90, label %116
90: ; preds = %87
%91 = load i32, i32* %1
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds [64 x i8], [64 x i8]* %5, i64 0, i64 %92
%94 = load i8, i8* %93
%95 = sext i8 %94 to i32
%96 = load i32, i32* %1
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [64 x i8], [64 x i8]* %6, i64 0, i64 %97
%99 = load i8, i8* %98
%100 = sext i8 %99 to i32
%101 = icmp ne i32 %95, %100
%102 = zext i1 %101 to i32
%103 = load i32, i32* %1
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds [64 x i8], [64 x i8]* %7, i64 0, i64 %104
%106 = load i8, i8* %105
%107 = sext i8 %106 to i32
%108 = xor i32 %102, %107
%109 = icmp ne i32 %108, 0
br i1 %109, label %110, label %112
110: ; preds = %90
%111 = call i32 (...) @abort()
unreachable
112: ; preds = %90
br label %113
113: ; preds = %112
%114 = load i32, i32* %1
%115 = add nsw i32 %114, 1
store i32 %115, i32* %1
br label %87
116: ; preds = %87
store i32 0, i32* %1
br label %117
117: ; preds = %136, %116
%118 = load i32, i32* %1
%119 = icmp slt i32 %118, 64
br i1 %119, label %120, label %139
120: ; preds = %117
%121 = load i32, i32* %1
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds [64 x i16], [64 x i16]* %9, i64 0, i64 %122
%124 = load i16, i16* %123
%125 = sext i16 %124 to i32
%126 = load i32, i32* %1
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds [64 x i16], [64 x i16]* %10, i64 0, i64 %127
%129 = load i16, i16* %128
%130 = sext i16 %129 to i32
%131 = xor i32 %125, %130
%132 = trunc i32 %131 to i16
%133 = load i32, i32* %1
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [64 x i16], [64 x i16]* %8, i64 0, i64 %134
store i16 %132, i16* %135
br label %136
136: ; preds = %120
%137 = load i32, i32* %1
%138 = add nsw i32 %137, 1
store i32 %138, i32* %1
br label %117
139: ; preds = %117
store i32 0, i32* %1
br label %140
140: ; preds = %166, %139
%141 = load i32, i32* %1
%142 = icmp slt i32 %141, 64
br i1 %142, label %143, label %169
143: ; preds = %140
%144 = load i32, i32* %1
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds [64 x i16], [64 x i16]* %8, i64 0, i64 %145
%147 = load i16, i16* %146
%148 = sext i16 %147 to i32
%149 = load i32, i32* %1
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds [64 x i16], [64 x i16]* %9, i64 0, i64 %150
%152 = load i16, i16* %151
%153 = sext i16 %152 to i32
%154 = icmp ne i32 %148, %153
%155 = zext i1 %154 to i32
%156 = load i32, i32* %1
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds [64 x i16], [64 x i16]* %10, i64 0, i64 %157
%159 = load i16, i16* %158
%160 = sext i16 %159 to i32
%161 = xor i32 %155, %160
%162 = icmp ne i32 %161, 0
br i1 %162, label %163, label %165
163: ; preds = %143
%164 = call i32 (...) @abort()
unreachable
165: ; preds = %143
br label %166
166: ; preds = %165
%167 = load i32, i32* %1
%168 = add nsw i32 %167, 1
store i32 %168, i32* %1
br label %140
169: ; preds = %140
ret i32 0
}

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