#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[16];
  int ic[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  int ib[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  short sa[16];
  short sc[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  short sb[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  for (i = 0; i < 16; i++) {
    ia[i] = ib[i] + ic[i];
    sa[i] = sb[i] + sc[i];
  }
  for (i = 0; i < 16; i++) {
    if (ia[i] != ib[i] + ic[i] || sa[i] != sb[i] + sc[i])
      abort();
  }
  return 0;
}


x86 assembly (clang, -O0):
<main1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
lea    -0x90(%rbp),%rdi
lea    0xec7(%rip),%rsi
mov    $0x40,%edx
call   1040 <memcpy@plt>
lea    -0xd0(%rbp),%rdi
lea    0xeef(%rip),%rsi
mov    $0x40,%edx
call   1040 <memcpy@plt>
mov    0xf1e(%rip),%rax
mov    %rax,-0x110(%rbp)
mov    0xf18(%rip),%rax
mov    %rax,-0x108(%rbp)
mov    0xf12(%rip),%rax
mov    %rax,-0x100(%rbp)
mov    0xf0c(%rip),%rax
mov    %rax,-0xf8(%rbp)
mov    0xee6(%rip),%rax
mov    %rax,-0x130(%rbp)
mov    0xee0(%rip),%rax
mov    %rax,-0x128(%rbp)
mov    0xeda(%rip),%rax
mov    %rax,-0x120(%rbp)
mov    0xed4(%rip),%rax
mov    %rax,-0x118(%rbp)
movl   $0x0,-0x4(%rbp)
cmpl   $0x10,-0x4(%rbp)
jge    1231 <main1+0x111>
movslq -0x4(%rbp),%rax
mov    -0xd0(%rbp,%rax,4),%ecx
movslq -0x4(%rbp),%rax
add    -0x90(%rbp,%rax,4),%ecx
movslq -0x4(%rbp),%rax
mov    %ecx,-0x50(%rbp,%rax,4)
movslq -0x4(%rbp),%rax
movswl -0x130(%rbp,%rax,2),%eax
ff
movslq -0x4(%rbp),%rcx
movswl -0x110(%rbp,%rcx,2),%ecx
ff
add    %ecx,%eax
mov    %ax,%cx
movslq -0x4(%rbp),%rax
mov    %cx,-0xf0(%rbp,%rax,2)
ff
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    11d2 <main1+0xb2>
movl   $0x0,-0x4(%rbp)
cmpl   $0x10,-0x4(%rbp)
jge    12b0 <main1+0x190>
movslq -0x4(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%eax
movslq -0x4(%rbp),%rcx
mov    -0xd0(%rbp,%rcx,4),%ecx
movslq -0x4(%rbp),%rdx
add    -0x90(%rbp,%rdx,4),%ecx
cmp    %ecx,%eax
jne    1296 <main1+0x176>
movslq -0x4(%rbp),%rax
movswl -0xf0(%rbp,%rax,2),%eax
ff
movslq -0x4(%rbp),%rcx
movswl -0x130(%rbp,%rcx,2),%ecx
ff
movslq -0x4(%rbp),%rdx
movswl -0x110(%rbp,%rdx,2),%edx
ff
add    %edx,%ecx
cmp    %ecx,%eax
je     129d <main1+0x17d>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    12a2 <main1+0x182>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1238 <main1+0x118>
xor    %eax,%eax
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
sub    $0x68,%rsp
movaps 0xee5(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xee9(%rip),%xmm0
movaps %xmm0,(%rsp)
movaps 0xeee(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xef2(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xef6(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xefa(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
lea    0xefe(%rip),%rax
xor    %ecx,%ecx
lea    0xf35(%rip),%rdx
nopl   0x0(%rax,%rax,1)
mov    (%rax),%esi
add    %esi,%esi
cmp    %esi,0x20(%rsp,%rcx,2)
jne    119d <main1+0x8d>
movswl (%rsp,%rcx,1),%esi
movswl (%rcx,%rdx,1),%edi
add    %edi,%edi
cmp    %esi,%edi
jne    119d <main1+0x8d>
add    $0x2,%rcx
add    $0x4,%rax
cmp    $0x20,%rcx
jne    1170 <main1+0x60>
xor    %eax,%eax
add    $0x68,%rsp
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
@__const.main1.ic = [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45]
@__const.main1.ib = [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45]
@__const.main1.sc = [16 x i16] [i16 0, i16 3, i16 6, i16 9, i16 12, i16 15, i16 18, i16 21, i16 24, i16 27, i16 30, i16 33, i16 36, i16 39, i16 42, i16 45]
@__const.main1.sb = [16 x i16] [i16 0, i16 3, i16 6, i16 9, i16 12, i16 15, i16 18, i16 21, i16 24, i16 27, i16 30, i16 33, i16 36, i16 39, i16 42, i16 45]
define i32 @main1() {
%1 = alloca i32
%2 = alloca [16 x i32]
%3 = alloca [16 x i32]
%4 = alloca [16 x i32]
%5 = alloca [16 x i16]
%6 = alloca [16 x i16]
%7 = alloca [16 x i16]
%8 = bitcast [16 x i32]* %3 to i8*
%9 = bitcast [16 x i32]* %4 to i8*
%10 = bitcast [16 x i16]* %6 to i8*
%11 = bitcast [16 x i16]* %7 to i8*
store i32 0, i32* %1
br label %12
12: ; preds = %43, %0
%13 = load i32, i32* %1
%14 = icmp slt i32 %13, 16
br i1 %14, label %15, label %46
15: ; preds = %12
%16 = load i32, i32* %1
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [16 x i32], [16 x i32]* %4, i64 0, i64 %17
%19 = load i32, i32* %18
%20 = load i32, i32* %1
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [16 x i32], [16 x i32]* %3, i64 0, i64 %21
%23 = load i32, i32* %22
%24 = add nsw i32 %19, %23
%25 = load i32, i32* %1
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [16 x i32], [16 x i32]* %2, i64 0, i64 %26
store i32 %24, i32* %27
%28 = load i32, i32* %1
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds [16 x i16], [16 x i16]* %7, i64 0, i64 %29
%31 = load i16, i16* %30
%32 = sext i16 %31 to i32
%33 = load i32, i32* %1
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [16 x i16], [16 x i16]* %6, i64 0, i64 %34
%36 = load i16, i16* %35
%37 = sext i16 %36 to i32
%38 = add nsw i32 %32, %37
%39 = trunc i32 %38 to i16
%40 = load i32, i32* %1
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [16 x i16], [16 x i16]* %5, i64 0, i64 %41
store i16 %39, i16* %42
br label %43
43: ; preds = %15
%44 = load i32, i32* %1
%45 = add nsw i32 %44, 1
store i32 %45, i32* %1
br label %12
46: ; preds = %12
store i32 0, i32* %1
br label %47
47: ; preds = %86, %46
%48 = load i32, i32* %1
%49 = icmp slt i32 %48, 16
br i1 %49, label %50, label %89
50: ; preds = %47
%51 = load i32, i32* %1
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [16 x i32], [16 x i32]* %2, i64 0, i64 %52
%54 = load i32, i32* %53
%55 = load i32, i32* %1
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [16 x i32], [16 x i32]* %4, i64 0, i64 %56
%58 = load i32, i32* %57
%59 = load i32, i32* %1
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [16 x i32], [16 x i32]* %3, i64 0, i64 %60
%62 = load i32, i32* %61
%63 = add nsw i32 %58, %62
%64 = icmp ne i32 %54, %63
br i1 %64, label %83, label %65
65: ; preds = %50
%66 = load i32, i32* %1
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds [16 x i16], [16 x i16]* %5, i64 0, i64 %67
%69 = load i16, i16* %68
%70 = sext i16 %69 to i32
%71 = load i32, i32* %1
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [16 x i16], [16 x i16]* %7, i64 0, i64 %72
%74 = load i16, i16* %73
%75 = sext i16 %74 to i32
%76 = load i32, i32* %1
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [16 x i16], [16 x i16]* %6, i64 0, i64 %77
%79 = load i16, i16* %78
%80 = sext i16 %79 to i32
%81 = add nsw i32 %75, %80
%82 = icmp ne i32 %70, %81
br i1 %82, label %83, label %85
83: ; preds = %65, %50
%84 = call i32 (...) @abort()
unreachable
85: ; preds = %65
br label %86
86: ; preds = %85
%87 = load i32, i32* %1
%88 = add nsw i32 %87, 1
store i32 %88, i32* %1
br label %47
89: ; preds = %47
ret i32 0
}

LLVM IR (-O2):
@__const.main1.ib = [16 x i32] [i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21, i32 24, i32 27, i32 30, i32 33, i32 36, i32 39, i32 42, i32 45]
@__const.main1.sb = [16 x i16] [i16 0, i16 3, i16 6, i16 9, i16 12, i16 15, i16 18, i16 21, i16 24, i16 27, i16 30, i16 33, i16 36, i16 39, i16 42, i16 45]
define i32 @main1() {
%1 = alloca [16 x i32]
%2 = alloca [16 x i16]
%3 = bitcast [16 x i32]* %1 to i8*
%4 = bitcast [16 x i16]* %2 to i8*
%5 = bitcast [16 x i32]* %1 to <4 x i32>*
store <4 x i32> <i32 0, i32 6, i32 12, i32 18>, <4 x i32>* %5
%6 = bitcast [16 x i16]* %2 to <4 x i16>*
store <4 x i16> <i16 0, i16 6, i16 12, i16 18>, <4 x i16>* %6
%7 = getelementptr inbounds [16 x i32], [16 x i32]* %1, i64 0, i64 4
%8 = bitcast i32* %7 to <4 x i32>*
store <4 x i32> <i32 24, i32 30, i32 36, i32 42>, <4 x i32>* %8
%9 = getelementptr inbounds [16 x i16], [16 x i16]* %2, i64 0, i64 4
%10 = bitcast i16* %9 to <4 x i16>*
store <4 x i16> <i16 24, i16 30, i16 36, i16 42>, <4 x i16>* %10
%11 = getelementptr inbounds [16 x i32], [16 x i32]* %1, i64 0, i64 8
%12 = bitcast i32* %11 to <4 x i32>*
store <4 x i32> <i32 48, i32 54, i32 60, i32 66>, <4 x i32>* %12
%13 = getelementptr inbounds [16 x i16], [16 x i16]* %2, i64 0, i64 8
%14 = bitcast i16* %13 to <4 x i16>*
store <4 x i16> <i16 48, i16 54, i16 60, i16 66>, <4 x i16>* %14
%15 = getelementptr inbounds [16 x i32], [16 x i32]* %1, i64 0, i64 12
%16 = bitcast i32* %15 to <4 x i32>*
store <4 x i32> <i32 72, i32 78, i32 84, i32 90>, <4 x i32>* %16
%17 = getelementptr inbounds [16 x i16], [16 x i16]* %2, i64 0, i64 12
%18 = bitcast i16* %17 to <4 x i16>*
store <4 x i16> <i16 72, i16 78, i16 84, i16 90>, <4 x i16>* %18
br label %22
19: ; preds = %32
%20 = add nuw nsw i64 %23, 1
%21 = icmp eq i64 %20, 16
br i1 %21, label %46, label %22
22: ; preds = %0, %19
%23 = phi i64 [ %20, %19 ], [ 0, %0 ]
%24 = getelementptr inbounds [16 x i32], [16 x i32]* %1, i64 0, i64 %23
%25 = load i32, i32* %24
%26 = getelementptr inbounds [16 x i32], [16 x i32]* @__const.main1.ib, i64 0, i64 %23
%27 = load i32, i32* %26
%28 = getelementptr inbounds [16 x i32], [16 x i32]* @__const.main1.ib, i64 0, i64 %23
%29 = load i32, i32* %28
%30 = add nsw i32 %29, %27
%31 = icmp eq i32 %25, %30
br i1 %31, label %32, label %44
32: ; preds = %22
%33 = getelementptr inbounds [16 x i16], [16 x i16]* %2, i64 0, i64 %23
%34 = load i16, i16* %33
%35 = sext i16 %34 to i32
%36 = getelementptr inbounds [16 x i16], [16 x i16]* @__const.main1.sb, i64 0, i64 %23
%37 = load i16, i16* %36
%38 = sext i16 %37 to i32
%39 = getelementptr inbounds [16 x i16], [16 x i16]* @__const.main1.sb, i64 0, i64 %23
%40 = load i16, i16* %39
%41 = sext i16 %40 to i32
%42 = add nsw i32 %41, %38
%43 = icmp eq i32 %42, %35
br i1 %43, label %19, label %44
44: ; preds = %32, %22
%45 = tail call i32 (...) @abort()
unreachable
46: ; preds = %19
ret i32 0
}