int main() {
  int a[3] = {1, 2, 3};
  int b_0 = 5, b_1 = 6, b_2 = 7, b_r = 8;
  int *b[3] = {&b_0, &b_1, &b_2};
  if (a[0] != 1)
    return 1;
  if (a[1] != 2)
    return 2;
  if (a[2] != 3)
    return 3;
  if (*b[0] != 5)
    return 4;
  if (*b[1] != 6)
    return 5;
  if (*b[2] != 7)
    return 6;
  a[1] = 5;
  if (a[1] != 5)
    return 7;
  if (a[0] + a[1] + a[2] != 9)
    return 8;
  b[0] = &b_r;
  if (*b[0] != 8)
    return 9;
  a[2] += 3;
  if (a[2] != 6)
    return 10;
  a[2] -= 3;
  if (a[2] != 3)
    return 11;
  a[2]++;
  if (a[2] != 4)
    return 12;
  a[2]--;
  if (a[2] != 3)
    return 13;
  ++a[2];
  if (a[2] != 4)
    return 14;
  --a[2];
  if (a[2] != 3)
    return 15;
  b[1]++;
  if (b[1] - &b_1 != 1)
    return 16;
  if (&b[2] - &b[0] != 2)
    return 17;
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
mov    0xeee(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    0xeec(%rip),%eax
mov    %eax,-0x8(%rbp)
movl   $0x5,-0x14(%rbp)
movl   $0x6,-0x18(%rbp)
movl   $0x7,-0x1c(%rbp)
movl   $0x8,-0x20(%rbp)
lea    -0x14(%rbp),%rax
mov    %rax,-0x40(%rbp)
lea    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
lea    -0x1c(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmpl   $0x1,-0x10(%rbp)
je     1169 <main+0x69>
movl   $0x1,-0x4(%rbp)
jmp    132e <main+0x22e>
cmpl   $0x2,-0xc(%rbp)
je     117f <main+0x7f>
movl   $0x2,-0x4(%rbp)
jmp    132e <main+0x22e>
cmpl   $0x3,-0x8(%rbp)
je     1195 <main+0x95>
movl   $0x3,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x40(%rbp),%rax
cmpl   $0x5,(%rax)
je     11ae <main+0xae>
movl   $0x4,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x38(%rbp),%rax
cmpl   $0x6,(%rax)
je     11c7 <main+0xc7>
movl   $0x5,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x30(%rbp),%rax
cmpl   $0x7,(%rax)
je     11e0 <main+0xe0>
movl   $0x6,-0x4(%rbp)
jmp    132e <main+0x22e>
movl   $0x5,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
je     11fd <main+0xfd>
movl   $0x7,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x10(%rbp),%eax
add    -0xc(%rbp),%eax
add    -0x8(%rbp),%eax
cmp    $0x9,%eax
je     121b <main+0x11b>
movl   $0x8,-0x4(%rbp)
jmp    132e <main+0x22e>
lea    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmpl   $0x8,(%rax)
je     123c <main+0x13c>
movl   $0x9,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x8(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x6,-0x8(%rbp)
je     125b <main+0x15b>
movl   $0xa,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x8(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x3,-0x8(%rbp)
je     127a <main+0x17a>
movl   $0xb,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x4,-0x8(%rbp)
je     1299 <main+0x199>
movl   $0xc,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x3,-0x8(%rbp)
je     12b8 <main+0x1b8>
movl   $0xd,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x4,-0x8(%rbp)
je     12d7 <main+0x1d7>
movl   $0xe,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x3,-0x8(%rbp)
je     12f6 <main+0x1f6>
movl   $0xf,-0x4(%rbp)
jmp    132e <main+0x22e>
mov    -0x38(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
lea    -0x18(%rbp),%rcx
sub    %rcx,%rax
sar    $0x2,%rax
cmp    $0x1,%rax
je     1327 <main+0x227>
movl   $0x10,-0x4(%rbp)
jmp    132e <main+0x22e>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

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

LLVM IR (-O0):
@__const.main.a = [3 x i32] [i32 1, i32 2, i32 3]
define i32 @main() {
%1 = alloca i32
%2 = alloca [3 x i32]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca [3 x i32*]
store i32 0, i32* %1
%8 = bitcast [3 x i32]* %2 to i8*
store i32 5, i32* %3
store i32 6, i32* %4
store i32 7, i32* %5
store i32 8, i32* %6
%9 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 0
store i32* %3, i32** %9
%10 = getelementptr inbounds i32*, i32** %9, i64 1
store i32* %4, i32** %10
%11 = getelementptr inbounds i32*, i32** %10, i64 1
store i32* %5, i32** %11
%12 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%13 = load i32, i32* %12
%14 = icmp ne i32 %13, 1
br i1 %14, label %15, label %16
15: ; preds = %0
store i32 1, i32* %1
br label %129
16: ; preds = %0
%17 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%18 = load i32, i32* %17
%19 = icmp ne i32 %18, 2
br i1 %19, label %20, label %21
20: ; preds = %16
store i32 2, i32* %1
br label %129
21: ; preds = %16
%22 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%23 = load i32, i32* %22
%24 = icmp ne i32 %23, 3
br i1 %24, label %25, label %26
25: ; preds = %21
store i32 3, i32* %1
br label %129
26: ; preds = %21
%27 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 0
%28 = load i32*, i32** %27
%29 = load i32, i32* %28
%30 = icmp ne i32 %29, 5
br i1 %30, label %31, label %32
31: ; preds = %26
store i32 4, i32* %1
br label %129
32: ; preds = %26
%33 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 1
%34 = load i32*, i32** %33
%35 = load i32, i32* %34
%36 = icmp ne i32 %35, 6
br i1 %36, label %37, label %38
37: ; preds = %32
store i32 5, i32* %1
br label %129
38: ; preds = %32
%39 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 2
%40 = load i32*, i32** %39
%41 = load i32, i32* %40
%42 = icmp ne i32 %41, 7
br i1 %42, label %43, label %44
43: ; preds = %38
store i32 6, i32* %1
br label %129
44: ; preds = %38
%45 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
store i32 5, i32* %45
%46 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%47 = load i32, i32* %46
%48 = icmp ne i32 %47, 5
br i1 %48, label %49, label %50
49: ; preds = %44
store i32 7, i32* %1
br label %129
50: ; preds = %44
%51 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 0
%52 = load i32, i32* %51
%53 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 1
%54 = load i32, i32* %53
%55 = add nsw i32 %52, %54
%56 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%57 = load i32, i32* %56
%58 = add nsw i32 %55, %57
%59 = icmp ne i32 %58, 9
br i1 %59, label %60, label %61
60: ; preds = %50
store i32 8, i32* %1
br label %129
61: ; preds = %50
%62 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 0
store i32* %6, i32** %62
%63 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 0
%64 = load i32*, i32** %63
%65 = load i32, i32* %64
%66 = icmp ne i32 %65, 8
br i1 %66, label %67, label %68
67: ; preds = %61
store i32 9, i32* %1
br label %129
68: ; preds = %61
%69 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%70 = load i32, i32* %69
%71 = add nsw i32 %70, 3
store i32 %71, i32* %69
%72 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%73 = load i32, i32* %72
%74 = icmp ne i32 %73, 6
br i1 %74, label %75, label %76
75: ; preds = %68
store i32 10, i32* %1
br label %129
76: ; preds = %68
%77 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%78 = load i32, i32* %77
%79 = sub nsw i32 %78, 3
store i32 %79, i32* %77
%80 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%81 = load i32, i32* %80
%82 = icmp ne i32 %81, 3
br i1 %82, label %83, label %84
83: ; preds = %76
store i32 11, i32* %1
br label %129
84: ; preds = %76
%85 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%86 = load i32, i32* %85
%87 = add nsw i32 %86, 1
store i32 %87, i32* %85
%88 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%89 = load i32, i32* %88
%90 = icmp ne i32 %89, 4
br i1 %90, label %91, label %92
91: ; preds = %84
store i32 12, i32* %1
br label %129
92: ; preds = %84
%93 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%94 = load i32, i32* %93
%95 = add nsw i32 %94, -1
store i32 %95, i32* %93
%96 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%97 = load i32, i32* %96
%98 = icmp ne i32 %97, 3
br i1 %98, label %99, label %100
99: ; preds = %92
store i32 13, i32* %1
br label %129
100: ; preds = %92
%101 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%102 = load i32, i32* %101
%103 = add nsw i32 %102, 1
store i32 %103, i32* %101
%104 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%105 = load i32, i32* %104
%106 = icmp ne i32 %105, 4
br i1 %106, label %107, label %108
107: ; preds = %100
store i32 14, i32* %1
br label %129
108: ; preds = %100
%109 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%110 = load i32, i32* %109
%111 = add nsw i32 %110, -1
store i32 %111, i32* %109
%112 = getelementptr inbounds [3 x i32], [3 x i32]* %2, i64 0, i64 2
%113 = load i32, i32* %112
%114 = icmp ne i32 %113, 3
br i1 %114, label %115, label %116
115: ; preds = %108
store i32 15, i32* %1
br label %129
116: ; preds = %108
%117 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 1
%118 = load i32*, i32** %117
%119 = getelementptr inbounds i32, i32* %118, i32 1
store i32* %119, i32** %117
%120 = getelementptr inbounds [3 x i32*], [3 x i32*]* %7, i64 0, i64 1
%121 = load i32*, i32** %120
%122 = ptrtoint i32* %121 to i64
%123 = ptrtoint i32* %4 to i64
%124 = sub i64 %122, %123
%125 = sdiv exact i64 %124, 4
%126 = icmp ne i64 %125, 1
br i1 %126, label %127, label %128
127: ; preds = %116
store i32 16, i32* %1
br label %129
128: ; preds = %116
store i32 0, i32* %1
br label %129
129: ; preds = %128, %127, %115, %107, %99, %91, %83, %75, %67, %60, %49, %43, %37, %31, %25, %20, %15
%130 = load i32, i32* %1
ret i32 %130
}

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