#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
and    -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
and    -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
and    %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
and    %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
and    %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
and    %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
movaps 0xee2(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movaps 0xee3(%rip),%xmm1
movaps %xmm1,0xd0(%rsp)
movaps %xmm0,0xe0(%rsp)
movaps %xmm1,0xf0(%rsp)
movaps %xmm0,0x100(%rsp)
movaps %xmm1,0x110(%rsp)
movaps %xmm0,0x120(%rsp)
movaps %xmm1,0x130(%rsp)
movaps %xmm0,0x140(%rsp)
movaps %xmm1,0x150(%rsp)
movaps %xmm0,0x160(%rsp)
movaps %xmm1,0x170(%rsp)
movaps %xmm0,0x180(%rsp)
movaps %xmm1,0x190(%rsp)
movaps %xmm0,0x1a0(%rsp)
movaps %xmm1,0x1b0(%rsp)
xor    %eax,%eax
lea    0xe92(%rip),%rsi
xchg   %ax,%ax
mov    (%rsi,%rax,4),%ecx
xor    %edx,%edx
cmp    %ecx,0xc0(%rsp,%rax,4)
setne  %dl
test   %edx,%ecx
jne    12c7 <main1+0x1b7>
mov    0x4(%rsi,%rax,4),%edx
cmp    %edx,0xc4(%rsp,%rax,4)
setne  %cl
test   %cl,%dl
jne    12c7 <main1+0x1b7>
add    $0x2,%rax
cmp    $0x40,%rax
jne    11b0 <main1+0xa0>
movaps 0xe32(%rip),%xmm0
movaps %xmm0,(%rsp)
movaps %xmm0,0x10(%rsp)
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x30(%rsp)
xor    %eax,%eax
lea    0xf36(%rip),%rsi
nopw   0x0(%rax,%rax,1)
movzbl (%rax,%rsi,1),%ecx
cmp    %cl,(%rsp,%rax,1)
setne  %dl
test   %cl,%dl
jne    12c7 <main1+0x1b7>
movzbl 0x1(%rax,%rsi,1),%edx
cmp    %dl,0x1(%rsp,%rax,1)
setne  %cl
test   %dl,%cl
jne    12c7 <main1+0x1b7>
add    $0x2,%rax
cmp    $0x40,%rax
jne    1210 <main1+0x100>
movaps 0xde9(%rip),%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    0xefc(%rip),%rsi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzwl (%rsi,%rax,2),%ecx
xor    %edx,%edx
cmp    %cx,0x40(%rsp,%rax,2)
setne  %dl
test   %ecx,%edx
jne    12c7 <main1+0x1b7>
movzwl 0x2(%rsi,%rax,2),%edx
cmp    %dx,0x42(%rsp,%rax,2)
setne  %cl
test   %dl,%cl
jne    12c7 <main1+0x1b7>
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 = and 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 = and 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 = and 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 = and 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 = and 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 = and 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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <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> <i32 1, i32 1, i32 0, i32 0>, <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> <i32 1, i32 0, i32 1, i32 0>, <4 x i32>* %37
br label %61
38: ; preds = %61
%39 = or i64 %62, 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 = and i32 %47, %45
%49 = icmp eq i32 %48, 0
br i1 %49, label %50, label %73
50: ; preds = %38
%51 = add nuw nsw i64 %62, 2
%52 = icmp eq i64 %51, 64
br i1 %52, label %53, label %61
53: ; preds = %50
%54 = bitcast [64 x i8]* %2 to <16 x i8>*
store <16 x i8> <i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0>, <16 x i8>* %54
%55 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 16
%56 = bitcast i8* %55 to <16 x i8>*
store <16 x i8> <i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0>, <16 x i8>* %56
%57 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 32
%58 = bitcast i8* %57 to <16 x i8>*
store <16 x i8> <i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0>, <16 x i8>* %58
%59 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 48
%60 = bitcast i8* %59 to <16 x i8>*
store <16 x i8> <i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 1, i8 0, i8 0, i8 1, i8 0, i8 1, i8 0>, <16 x i8>* %60
br label %107
61: ; preds = %50, %0
%62 = phi i64 [ 0, %0 ], [ %51, %50 ]
%63 = getelementptr inbounds [64 x i32], [64 x i32]* %1, i64 0, i64 %62
%64 = load i32, i32* %63
%65 = getelementptr inbounds [64 x i32], [64 x i32]* @__const.main1.ic, i64 0, i64 %62
%66 = load i32, i32* %65
%67 = icmp ne i32 %64, %66
%68 = zext i1 %67 to i32
%69 = getelementptr inbounds [64 x i32], [64 x i32]* @__const.main1.ic, i64 0, i64 %62
%70 = load i32, i32* %69
%71 = and i32 %70, %68
%72 = icmp eq i32 %71, 0
br i1 %72, label %38, label %73
73: ; preds = %38, %61
%74 = tail call i32 (...) @abort()
unreachable
75: ; preds = %107
%76 = or i64 %108, 1
%77 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 %76
%78 = load i8, i8* %77
%79 = getelementptr inbounds [64 x i8], [64 x i8]* @__const.main1.cc, i64 0, i64 %76
%80 = load i8, i8* %79
%81 = icmp ne i8 %78, %80
%82 = zext i1 %81 to i32
%83 = getelementptr inbounds [64 x i8], [64 x i8]* @__const.main1.cc, i64 0, i64 %76
%84 = load i8, i8* %83
%85 = zext i8 %84 to i32
%86 = and i32 %82, %85
%87 = icmp eq i32 %86, 0
br i1 %87, label %88, label %120
88: ; preds = %75
%89 = add nuw nsw i64 %108, 2
%90 = icmp eq i64 %89, 64
br i1 %90, label %91, label %107
91: ; preds = %88
%92 = bitcast [64 x i16]* %3 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %92
%93 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 8
%94 = bitcast i16* %93 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %94
%95 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 16
%96 = bitcast i16* %95 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %96
%97 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 24
%98 = bitcast i16* %97 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %98
%99 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 32
%100 = bitcast i16* %99 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %100
%101 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 40
%102 = bitcast i16* %101 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %102
%103 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 48
%104 = bitcast i16* %103 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %104
%105 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 56
%106 = bitcast i16* %105 to <8 x i16>*
store <8 x i16> <i16 1, i16 1, i16 0, i16 0, i16 1, i16 0, i16 1, i16 0>, <8 x i16>* %106
br label %138
107: ; preds = %88, %53
%108 = phi i64 [ 0, %53 ], [ %89, %88 ]
%109 = getelementptr inbounds [64 x i8], [64 x i8]* %2, i64 0, i64 %108
%110 = load i8, i8* %109
%111 = getelementptr inbounds [64 x i8], [64 x i8]* @__const.main1.cc, i64 0, i64 %108
%112 = load i8, i8* %111
%113 = icmp ne i8 %110, %112
%114 = zext i1 %113 to i32
%115 = getelementptr inbounds [64 x i8], [64 x i8]* @__const.main1.cc, i64 0, i64 %108
%116 = load i8, i8* %115
%117 = zext i8 %116 to i32
%118 = and i32 %114, %117
%119 = icmp eq i32 %118, 0
br i1 %119, label %75, label %120
120: ; preds = %75, %107
%121 = tail call i32 (...) @abort()
unreachable
122: ; preds = %138
%123 = or i64 %139, 1
%124 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 %123
%125 = load i16, i16* %124
%126 = getelementptr inbounds [64 x i16], [64 x i16]* @__const.main1.sc, i64 0, i64 %123
%127 = load i16, i16* %126
%128 = icmp ne i16 %125, %127
%129 = zext i1 %128 to i32
%130 = getelementptr inbounds [64 x i16], [64 x i16]* @__const.main1.sc, i64 0, i64 %123
%131 = load i16, i16* %130
%132 = zext i16 %131 to i32
%133 = and i32 %129, %132
%134 = icmp eq i32 %133, 0
br i1 %134, label %135, label %151
135: ; preds = %122
%136 = add nuw nsw i64 %139, 2
%137 = icmp eq i64 %136, 64
br i1 %137, label %153, label %138
138: ; preds = %135, %91
%139 = phi i64 [ 0, %91 ], [ %136, %135 ]
%140 = getelementptr inbounds [64 x i16], [64 x i16]* %3, i64 0, i64 %139
%141 = load i16, i16* %140
%142 = getelementptr inbounds [64 x i16], [64 x i16]* @__const.main1.sc, i64 0, i64 %139
%143 = load i16, i16* %142
%144 = icmp ne i16 %141, %143
%145 = zext i1 %144 to i32
%146 = getelementptr inbounds [64 x i16], [64 x i16]* @__const.main1.sc, i64 0, i64 %139
%147 = load i16, i16* %146
%148 = zext i16 %147 to i32
%149 = and i32 %145, %148
%150 = icmp eq i32 %149, 0
br i1 %150, label %122, label %151
151: ; preds = %122, %138
%152 = tail call i32 (...) @abort()
unreachable
153: ; preds = %135
ret i32 0
}