#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*/ printf(char *, int, int, int, int, int, int, int, int, int,
                          int, int, int, int, int);
int main() {
  int a[3][5];
  printf("%d\t%d\t%d\t \n %d\t%d\t%d\t \n %d\t%d\t%d\t", a[0][0] = 1,
         a[0][1] = 2, a[0][2] = 3, a[0][4] = 5, a[1][0] = 6, a[1][1] = 7,
         a[1][2] = 9, a[1][3] = 8, a[1][4] = 3, a[2][0] = 9, a[2][1] = 7,
         a[2][2] = 56, a[2][3] = 45, a[2][4] = 78);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movl   $0x1,-0x40(%rbp)
movl   $0x2,-0x3c(%rbp)
movl   $0x3,-0x38(%rbp)
movl   $0x5,-0x30(%rbp)
movl   $0x6,-0x2c(%rbp)
movl   $0x7,-0x28(%rbp)
movl   $0x9,-0x24(%rbp)
movl   $0x8,-0x20(%rbp)
movl   $0x3,-0x1c(%rbp)
movl   $0x9,-0x18(%rbp)
movl   $0x7,-0x14(%rbp)
movl   $0x38,-0x10(%rbp)
movl   $0x2d,-0xc(%rbp)
movl   $0x4e,-0x8(%rbp)
lea    0xe7c(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x5,%r8d
mov    $0x6,%r9d
movl   $0x7,(%rsp)
movl   $0x9,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x3,0x18(%rsp)
movl   $0x9,0x20(%rsp)
movl   $0x7,0x28(%rsp)
movl   $0x38,0x30(%rsp)
movl   $0x2d,0x38(%rsp)
movl   $0x4e,0x40(%rsp)
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
sub    $0x8,%rsp
lea    0xee4(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x3,%ecx
mov    $0x5,%r8d
mov    $0x6,%r9d
push   $0x4e
push   $0x2d
push   $0x38
push   $0x7
push   $0x9
push   $0x3
push   $0x8
push   $0x9
push   $0x7
call   1030 <printf@plt>
add    $0x50,%rsp
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [34 x i8] c"%d\09%d\09%d\09 \0A %d\09%d\09%d\09 \0A %d\09%d\09%d\09\00"
define i32 @main() {
%1 = alloca [3 x [5 x i32]]
%2 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 0
%3 = getelementptr inbounds [5 x i32], [5 x i32]* %2, i64 0, i64 0
store i32 1, i32* %3
%4 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 0
%5 = getelementptr inbounds [5 x i32], [5 x i32]* %4, i64 0, i64 1
store i32 2, i32* %5
%6 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 0
%7 = getelementptr inbounds [5 x i32], [5 x i32]* %6, i64 0, i64 2
store i32 3, i32* %7
%8 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 0
%9 = getelementptr inbounds [5 x i32], [5 x i32]* %8, i64 0, i64 4
store i32 5, i32* %9
%10 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 1
%11 = getelementptr inbounds [5 x i32], [5 x i32]* %10, i64 0, i64 0
store i32 6, i32* %11
%12 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 1
%13 = getelementptr inbounds [5 x i32], [5 x i32]* %12, i64 0, i64 1
store i32 7, i32* %13
%14 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 1
%15 = getelementptr inbounds [5 x i32], [5 x i32]* %14, i64 0, i64 2
store i32 9, i32* %15
%16 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 1
%17 = getelementptr inbounds [5 x i32], [5 x i32]* %16, i64 0, i64 3
store i32 8, i32* %17
%18 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 1
%19 = getelementptr inbounds [5 x i32], [5 x i32]* %18, i64 0, i64 4
store i32 3, i32* %19
%20 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 2
%21 = getelementptr inbounds [5 x i32], [5 x i32]* %20, i64 0, i64 0
store i32 9, i32* %21
%22 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 2
%23 = getelementptr inbounds [5 x i32], [5 x i32]* %22, i64 0, i64 1
store i32 7, i32* %23
%24 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 2
%25 = getelementptr inbounds [5 x i32], [5 x i32]* %24, i64 0, i64 2
store i32 56, i32* %25
%26 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 2
%27 = getelementptr inbounds [5 x i32], [5 x i32]* %26, i64 0, i64 3
store i32 45, i32* %27
%28 = getelementptr inbounds [3 x [5 x i32]], [3 x [5 x i32]]* %1, i64 0, i64 2
%29 = getelementptr inbounds [5 x i32], [5 x i32]* %28, i64 0, i64 4
store i32 78, i32* %29
%30 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0), i32 1, i32 2, i32 3, i32 5, i32 6, i32 7, i32 9, i32 8, i32 3, i32 9, i32 7, i32 56, i32 45, i32 78)
ret i32 0
}

LLVM IR (-O2):
@.str = [34 x i8] c"%d\09%d\09%d\09 \0A %d\09%d\09%d\09 \0A %d\09%d\09%d\09\00"
define i32 @main() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0), i32 1, i32 2, i32 3, i32 5, i32 6, i32 7, i32 9, i32 8, i32 3, i32 9, i32 7, i32 56, i32 45, i32 78)
ret i32 0
}