int main() {
  volatile char a[] = {-1, 2};
  volatile unsigned char b[] = {3, 4};
  volatile short c[] = {-5, 6};
  volatile unsigned short d[] = {7, 8};
  volatile int e[] = {-9, 10};
  volatile unsigned int f[] = {11, 12};
  volatile long g[] = {-13, 14};
  volatile unsigned long h[] = {15, 16};
  volatile float i[] = {-1.123, 2.456};
  volatile char j[3][2] = {{1, 2}, {3, 4}, {5, 6}};
  volatile char k[2][3][4];
  const char msg[] = "Hello World";
  const char strlist[2][10] = {"hello", "world"};
  while (1) {
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x6(%rbp),%rax
mov    0xee6(%rip),%cx
mov    %cx,(%rax)
lea    -0x8(%rbp),%rax
mov    0xeda(%rip),%cx
mov    %cx,(%rax)
lea    -0xc(%rbp),%rax
mov    0xeef(%rip),%ecx
mov    %ecx,(%rax)
lea    -0x10(%rbp),%rax
mov    0xee7(%rip),%ecx
mov    %ecx,(%rax)
lea    -0x18(%rbp),%rax
mov    0xede(%rip),%rcx
mov    %rcx,(%rax)
lea    -0x20(%rbp),%rax
mov    0xed8(%rip),%rcx
mov    %rcx,(%rax)
lea    -0x30(%rbp),%rax
movaps 0xee6(%rip),%xmm0
movaps %xmm0,(%rax)
lea    -0x40(%rbp),%rax
movaps 0xee8(%rip),%xmm0
movaps %xmm0,(%rax)
lea    -0x48(%rbp),%rax
mov    0xeb6(%rip),%rcx
mov    %rcx,(%rax)
lea    -0x4e(%rbp),%rax
mov    0xe74(%rip),%cx
mov    %cx,0x4(%rax)
mov    0xe66(%rip),%ecx
mov    %ecx,(%rax)
mov    0xec9(%rip),%rax
mov    %rax,-0x7c(%rbp)
mov    0xec7(%rip),%eax
mov    %eax,-0x74(%rbp)
mov    0xe55(%rip),%rax
mov    %rax,-0x90(%rbp)
mov    0xe4f(%rip),%rax
mov    %rax,-0x88(%rbp)
mov    0xe4a(%rip),%eax
mov    %eax,-0x80(%rbp)
jmp    11d9 <main+0xd9>

x86 assembly (clang, -O2):
<main>:
movzwl 0xef9(%rip),%eax
mov    %ax,-0x1a(%rsp)
movzwl 0xeef(%rip),%eax
mov    %ax,-0x1c(%rsp)
mov    0xee6(%rip),%eax
mov    %eax,-0x14(%rsp)
mov    0xee0(%rip),%eax
mov    %eax,-0x18(%rsp)
mov    0xedd(%rip),%rax
mov    %rax,-0x8(%rsp)
mov    0xed9(%rip),%rax
mov    %rax,-0x10(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
jmp    1150 <main+0x50>

LLVM IR (-O0):
@__const.main.a = [2 x i8] c"\FF\02"
@__const.main.b = [2 x i8] c"\03\04"
@__const.main.c = [2 x i16] [i16 -5, i16 6]
@__const.main.d = [2 x i16] [i16 7, i16 8]
@__const.main.e = [2 x i32] [i32 -9, i32 10]
@__const.main.f = [2 x i32] [i32 11, i32 12]
@__const.main.g = [2 x i64] [i64 -13, i64 14]
@__const.main.h = [2 x i64] [i64 15, i64 16]
@__const.main.i = [2 x float] [float 0xBFF1F7CEE0000000, float 0x4003A5E360000000]
@__const.main.j = [3 x [2 x i8]] [[2 x i8] c"\01\02", [2 x i8] c"\03\04", [2 x i8] c"\05\06"]
@__const.main.msg = [12 x i8] c"Hello World\00"
@__const.main.strlist = [2 x [10 x i8]] [[10 x i8] c"hello\00\00\00\00\00", [10 x i8] c"world\00\00\00\00\00"]
define i32 @main() {
%1 = alloca i32
%2 = alloca [2 x i8]
%3 = alloca [2 x i8]
%4 = alloca [2 x i16]
%5 = alloca [2 x i16]
%6 = alloca [2 x i32]
%7 = alloca [2 x i32]
%8 = alloca [2 x i64]
%9 = alloca [2 x i64]
%10 = alloca [2 x float]
%11 = alloca [3 x [2 x i8]]
%12 = alloca [2 x [3 x [4 x i8]]]
%13 = alloca [12 x i8]
%14 = alloca [2 x [10 x i8]]
store i32 0, i32* %1
%15 = bitcast [2 x i8]* %2 to i8*
%16 = bitcast [2 x i8]* %3 to i8*
%17 = bitcast [2 x i16]* %4 to i8*
%18 = bitcast [2 x i16]* %5 to i8*
%19 = bitcast [2 x i32]* %6 to i8*
%20 = bitcast [2 x i32]* %7 to i8*
%21 = bitcast [2 x i64]* %8 to i8*
%22 = bitcast [2 x i64]* %9 to i8*
%23 = bitcast [2 x float]* %10 to i8*
%24 = bitcast [3 x [2 x i8]]* %11 to i8*
%25 = bitcast [12 x i8]* %13 to i8*
%26 = bitcast [2 x [10 x i8]]* %14 to i8*
br label %27
27: ; preds = %0, %27
br label %27
}

LLVM IR (-O2):
@__const.main.a = [2 x i8] c"\FF\02"
@__const.main.b = [2 x i8] c"\03\04"
@__const.main.c = [2 x i16] [i16 -5, i16 6]
@__const.main.d = [2 x i16] [i16 7, i16 8]
@__const.main.e = [2 x i32] [i32 -9, i32 10]
@__const.main.f = [2 x i32] [i32 11, i32 12]
define i32 @main() {
%1 = alloca i16
%2 = alloca i16
%3 = alloca i32
%4 = alloca i32
%5 = alloca i64
%6 = alloca i64
%7 = bitcast i16* %1 to i8*
%8 = load volatile i16, i16* bitcast ([2 x i8]* @__const.main.a to i16*)
store volatile i16 %8, i16* %1
%9 = bitcast i16* %2 to i8*
%10 = load volatile i16, i16* bitcast ([2 x i8]* @__const.main.b to i16*)
store volatile i16 %10, i16* %2
%11 = bitcast i32* %3 to i8*
%12 = load volatile i32, i32* bitcast ([2 x i16]* @__const.main.c to i32*)
store volatile i32 %12, i32* %3
%13 = bitcast i32* %4 to i8*
%14 = load volatile i32, i32* bitcast ([2 x i16]* @__const.main.d to i32*)
store volatile i32 %14, i32* %4
%15 = bitcast i64* %5 to i8*
%16 = load volatile i64, i64* bitcast ([2 x i32]* @__const.main.e to i64*)
store volatile i64 %16, i64* %5
%17 = bitcast i64* %6 to i8*
%18 = load volatile i64, i64* bitcast ([2 x i32]* @__const.main.f to i64*)
store volatile i64 %18, i64* %6
br label %19
19: ; preds = %19, %0
br label %19
}