#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;
  unsigned short in[8 * 8] = {
      0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15,
      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
  unsigned short out[8 * 8], a[8],
      b[8] = {3, 0x8031, 0x7fff, 0x8032, 0xffff, 0, 0x8030, 0x8000};
  for (i = 0; i < 8; i++) {
    out[i * 4] = in[i * 4];
    out[i * 4 + 1] = in[i * 4 + 1];
    out[i * 4 + 2] = in[i * 4 + 2];
    out[i * 4 + 3] = in[i * 4 + 3];
    a[i] = b[i] / 0x8031;
  }
  for (i = 0; i < 8; i++) {
    if (out[i * 4] != in[i * 4] || out[i * 4 + 1] != in[i * 4 + 1] ||
        out[i * 4 + 2] != in[i * 4 + 2] || out[i * 4 + 3] != in[i * 4 + 3] ||
        a[i] != b[i] / 0x8031)
      abort();
  }
  return 0;
}


x86 assembly (clang, -O0):
<main1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
lea    -0x90(%rbp),%rdi
lea    0xec7(%rip),%rsi
mov    $0x80,%edx
call   1040 <memcpy@plt>
mov    0xf36(%rip),%rax
mov    %rax,-0x130(%rbp)
mov    0xf30(%rip),%rax
mov    %rax,-0x128(%rbp)
movl   $0x0,-0x4(%rbp)
cmpl   $0x8,-0x4(%rbp)
jge    1233 <main1+0x113>
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
cltq
mov    -0x90(%rbp,%rax,2),%cx
ff
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
cltq
mov    %cx,-0x110(%rbp,%rax,2)
ff
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x1,%eax
cltq
mov    -0x90(%rbp,%rax,2),%cx
ff
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x1,%eax
cltq
mov    %cx,-0x110(%rbp,%rax,2)
ff
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x2,%eax
cltq
mov    -0x90(%rbp,%rax,2),%cx
ff
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x2,%eax
cltq
mov    %cx,-0x110(%rbp,%rax,2)
ff
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x3,%eax
cltq
mov    -0x90(%rbp,%rax,2),%cx
ff
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x3,%eax
cltq
mov    %cx,-0x110(%rbp,%rax,2)
ff
movslq -0x4(%rbp),%rax
movzwl -0x130(%rbp,%rax,2),%eax
ff
mov    $0x8031,%ecx
cltd
idiv   %ecx
mov    %ax,%cx
movslq -0x4(%rbp),%rax
mov    %cx,-0x120(%rbp,%rax,2)
ff
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1166 <main1+0x46>
movl   $0x0,-0x4(%rbp)
cmpl   $0x8,-0x4(%rbp)
jge    134a <main1+0x22a>
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
cltq
movzwl -0x110(%rbp,%rax,2),%eax
ff
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movzwl -0x90(%rbp,%rcx,2),%ecx
ff
cmp    %ecx,%eax
jne    1330 <main1+0x210>
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x1,%eax
cltq
movzwl -0x110(%rbp,%rax,2),%eax
ff
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzwl -0x90(%rbp,%rcx,2),%ecx
ff
cmp    %ecx,%eax
jne    1330 <main1+0x210>
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x2,%eax
cltq
movzwl -0x110(%rbp,%rax,2),%eax
ff
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzwl -0x90(%rbp,%rcx,2),%ecx
ff
cmp    %ecx,%eax
jne    1330 <main1+0x210>
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
add    $0x3,%eax
cltq
movzwl -0x110(%rbp,%rax,2),%eax
ff
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movzwl -0x90(%rbp,%rcx,2),%ecx
ff
cmp    %ecx,%eax
jne    1330 <main1+0x210>
movslq -0x4(%rbp),%rax
movzwl -0x120(%rbp,%rax,2),%eax
ff
mov    %eax,-0x134(%rbp)
movslq -0x4(%rbp),%rax
movzwl -0x130(%rbp,%rax,2),%eax
ff
mov    $0x8031,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x134(%rbp),%eax
cmp    %ecx,%eax
je     1337 <main1+0x217>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    133c <main1+0x21c>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    123a <main1+0x11a>
xor    %eax,%eax
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
xor    %eax,%eax
ret

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

LLVM IR (-O2):
define i32 @main1() {
ret i32 0
}