int main(int argc, const char *argv[]) {
  struct nested_struct {
    double c;
  };
  struct my_struct {
    int a;
    struct nested_struct b[2][2];
  };
  struct my_struct array[2][2];
  array[0][0].a = 1;
  array[0][0].b[0][0].c = 3.5;
  array[0][0].b[0][1].c = 3.6;
  array[0][0].b[1][0].c = 3.7;
  array[0][0].b[1][1].c = 3.8;
  array[0][1].a = 1;
  array[0][1].b[0][0].c = 3.5;
  array[0][1].b[0][1].c = 3.6;
  array[0][1].b[1][0].c = 3.7;
  array[0][1].b[1][1].c = 3.8;
  array[1][0].a = 2;
  array[1][0].b[0][0].c = 4.5;
  array[1][0].b[0][1].c = 4.6;
  array[1][0].b[1][0].c = 18.9;
  array[1][0].b[1][1].c = 18.95;
  array[1][1].a = 2;
  array[1][1].b[0][0].c = 4.5;
  array[1][1].b[0][1].c = 4.6;
  array[1][1].b[1][0].c = 18.9;
  array[1][1].b[1][1].c = 18.95;
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x1,-0xb0(%rbp)
movsd  0xf10(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xef8(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xee0(%rip),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xec8(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movl   $0x1,-0x88(%rbp)
movsd  0xec6(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xeb1(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xe9c(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe87(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x2,-0x60(%rbp)
movsd  0xe6b(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe56(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe41(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe2c(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x2,-0x38(%rbp)
movsd  0xe30(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe1b(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe06(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xdf1(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

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

LLVM IR (-O0):
%struct.my_struct = type { i32, [2 x [2 x %struct.nested_struct]] }
%struct.nested_struct = type { double }
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca [2 x [2 x %struct.my_struct]]
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%7 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%8 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %7, i64 0, i64 0
%9 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %8, i32 0, i32 0
store i32 1, i32* %9
%10 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%11 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %10, i64 0, i64 0
%12 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %11, i32 0, i32 1
%13 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %12, i64 0, i64 0
%14 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %13, i64 0, i64 0
%15 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %14, i32 0, i32 0
store double 3.500000e+00, double* %15
%16 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%17 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %16, i64 0, i64 0
%18 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %17, i32 0, i32 1
%19 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %18, i64 0, i64 0
%20 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %19, i64 0, i64 1
%21 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %20, i32 0, i32 0
store double 3.600000e+00, double* %21
%22 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%23 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %22, i64 0, i64 0
%24 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %23, i32 0, i32 1
%25 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %24, i64 0, i64 1
%26 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %25, i64 0, i64 0
%27 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %26, i32 0, i32 0
store double 3.700000e+00, double* %27
%28 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%29 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %28, i64 0, i64 0
%30 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %29, i32 0, i32 1
%31 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %30, i64 0, i64 1
%32 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %31, i64 0, i64 1
%33 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %32, i32 0, i32 0
store double 3.800000e+00, double* %33
%34 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%35 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %34, i64 0, i64 1
%36 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %35, i32 0, i32 0
store i32 1, i32* %36
%37 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%38 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %37, i64 0, i64 1
%39 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %38, i32 0, i32 1
%40 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %39, i64 0, i64 0
%41 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %40, i64 0, i64 0
%42 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %41, i32 0, i32 0
store double 3.500000e+00, double* %42
%43 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%44 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %43, i64 0, i64 1
%45 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %44, i32 0, i32 1
%46 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %45, i64 0, i64 0
%47 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %46, i64 0, i64 1
%48 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %47, i32 0, i32 0
store double 3.600000e+00, double* %48
%49 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%50 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %49, i64 0, i64 1
%51 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %50, i32 0, i32 1
%52 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %51, i64 0, i64 1
%53 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %52, i64 0, i64 0
%54 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %53, i32 0, i32 0
store double 3.700000e+00, double* %54
%55 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 0
%56 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %55, i64 0, i64 1
%57 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %56, i32 0, i32 1
%58 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %57, i64 0, i64 1
%59 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %58, i64 0, i64 1
%60 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %59, i32 0, i32 0
store double 3.800000e+00, double* %60
%61 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%62 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %61, i64 0, i64 0
%63 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %62, i32 0, i32 0
store i32 2, i32* %63
%64 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%65 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %64, i64 0, i64 0
%66 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %65, i32 0, i32 1
%67 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %66, i64 0, i64 0
%68 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %67, i64 0, i64 0
%69 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %68, i32 0, i32 0
store double 4.500000e+00, double* %69
%70 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%71 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %70, i64 0, i64 0
%72 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %71, i32 0, i32 1
%73 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %72, i64 0, i64 0
%74 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %73, i64 0, i64 1
%75 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %74, i32 0, i32 0
store double 4.600000e+00, double* %75
%76 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%77 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %76, i64 0, i64 0
%78 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %77, i32 0, i32 1
%79 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %78, i64 0, i64 1
%80 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %79, i64 0, i64 0
%81 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %80, i32 0, i32 0
store double 1.890000e+01, double* %81
%82 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%83 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %82, i64 0, i64 0
%84 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %83, i32 0, i32 1
%85 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %84, i64 0, i64 1
%86 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %85, i64 0, i64 1
%87 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %86, i32 0, i32 0
store double 1.895000e+01, double* %87
%88 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%89 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %88, i64 0, i64 1
%90 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %89, i32 0, i32 0
store i32 2, i32* %90
%91 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%92 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %91, i64 0, i64 1
%93 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %92, i32 0, i32 1
%94 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %93, i64 0, i64 0
%95 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %94, i64 0, i64 0
%96 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %95, i32 0, i32 0
store double 4.500000e+00, double* %96
%97 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%98 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %97, i64 0, i64 1
%99 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %98, i32 0, i32 1
%100 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %99, i64 0, i64 0
%101 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %100, i64 0, i64 1
%102 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %101, i32 0, i32 0
store double 4.600000e+00, double* %102
%103 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%104 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %103, i64 0, i64 1
%105 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %104, i32 0, i32 1
%106 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %105, i64 0, i64 1
%107 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %106, i64 0, i64 0
%108 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %107, i32 0, i32 0
store double 1.890000e+01, double* %108
%109 = getelementptr inbounds [2 x [2 x %struct.my_struct]], [2 x [2 x %struct.my_struct]]* %6, i64 0, i64 1
%110 = getelementptr inbounds [2 x %struct.my_struct], [2 x %struct.my_struct]* %109, i64 0, i64 1
%111 = getelementptr inbounds %struct.my_struct, %struct.my_struct* %110, i32 0, i32 1
%112 = getelementptr inbounds [2 x [2 x %struct.nested_struct]], [2 x [2 x %struct.nested_struct]]* %111, i64 0, i64 1
%113 = getelementptr inbounds [2 x %struct.nested_struct], [2 x %struct.nested_struct]* %112, i64 0, i64 1
%114 = getelementptr inbounds %struct.nested_struct, %struct.nested_struct* %113, i32 0, i32 0
store double 1.895000e+01, double* %114
ret i32 0
}

LLVM IR (-O2):
define i32 @main(i32 %0, i8** nocapture readnone %1) {
ret i32 0
}