int main(int argc, char *argv[]) {
  int i, j, k;
  int sum_c[10][10][10];
  int c[10][10];
  int W[10][10];
  int out[1];
  int iter;
  ;
  for (iter = 0; iter < 10000; iter++) {
#pragma scop
    for (i = 0; i <= 10 - 1; i++)
      for (j = 0; j <= 10 - 1; j++)
        c[i][j] = 0;
    for (i = 0; i <= 10 - 2; i++) {
      for (j = i + 1; j <= 10 - 1; j++) {
        sum_c[i][j][i] = 0;
        for (k = i + 1; k <= j - 1; k++) {
          sum_c[i][j][k] = sum_c[i][j][k - 1] + c[i][k] + c[k][j];
        }
        c[i][j] = sum_c[i][j][j - 1] + W[i][j];
      }
    }
#pragma endscop
    out[0] += c[0][10 - 1];
  };
  ;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1270,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x12e8(%rbp)
cmpl   $0x2710,-0x12e8(%rbp)
jge    1334 <main+0x234>
movl   $0x0,-0x14(%rbp)
cmpl   $0x9,-0x14(%rbp)
jg     1193 <main+0x93>
movl   $0x0,-0x18(%rbp)
cmpl   $0x9,-0x18(%rbp)
jg     1180 <main+0x80>
movslq -0x14(%rbp),%rcx
lea    -0x1150(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    114b <main+0x4b>
jmp    1185 <main+0x85>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    113a <main+0x3a>
movl   $0x0,-0x14(%rbp)
cmpl   $0x8,-0x14(%rbp)
jg     130e <main+0x20e>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x9,-0x18(%rbp)
jg     12fb <main+0x1fb>
movslq -0x14(%rbp),%rcx
lea    -0xfc0(%rbp),%rax
imul   $0x190,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     128f <main+0x18f>
movslq -0x14(%rbp),%rcx
lea    -0xfc0(%rbp),%rax
imul   $0x190,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
movslq -0x14(%rbp),%rcx
lea    -0x1150(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
add    (%rax,%rcx,4),%edx
movslq -0x1c(%rbp),%rcx
lea    -0x1150(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
add    (%rax,%rcx,4),%edx
movslq -0x14(%rbp),%rcx
lea    -0xfc0(%rbp),%rax
imul   $0x190,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11eb <main+0xeb>
movslq -0x14(%rbp),%rcx
lea    -0xfc0(%rbp),%rax
imul   $0x190,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
movslq -0x14(%rbp),%rcx
lea    -0x12e0(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
add    (%rax,%rcx,4),%edx
movslq -0x14(%rbp),%rcx
lea    -0x1150(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11ad <main+0xad>
jmp    1300 <main+0x200>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    119a <main+0x9a>
mov    -0x112c(%rbp),%eax
add    -0x12e4(%rbp),%eax
mov    %eax,-0x12e4(%rbp)
mov    -0x12e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x12e8(%rbp)
jmp    1123 <main+0x23>
mov    -0x4(%rbp),%eax
add    $0x1270,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x12f8,%rsp
xor    %eax,%eax
jmp    1143 <main+0x33>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x8(%rsp),%rax
add    $0x1,%eax
cmp    $0x2710,%eax
je     12eb <main+0x1db>
mov    %rax,0x8(%rsp)
mov    $0x190,%edx
lea    0x30(%rsp),%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    $0x1,%r13d
lea    0x37c(%rsp),%rcx
lea    0x5c(%rsp),%rdx
lea    0x34(%rsp),%rsi
xor    %r8d,%r8d
jmp    11a3 <main+0x93>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r13
add    $0x28,%rsi
mov    0x10(%rsp),%rdx
add    $0x4,%rdx
mov    0x18(%rsp),%rcx
add    $0x1b8,%rcx
cmp    $0x9,%r8
je     1130 <main+0x20>
mov    %r8,%rdi
imul   $0x6f,%r8,%r10
add    $0x1,%r8
lea    (%rdi,%rdi,4),%rax
lea    0x30(%rsp,%rax,8),%rax
lea    (%rax,%r13,4),%rax
mov    %rax,0x28(%rsp)
lea    0x1(%r13),%rax
mov    %rax,0x20(%rsp)
mov    %rcx,0x18(%rsp)
mov    %rdx,0x10(%rsp)
xor    %r15d,%r15d
mov    %r13,%rax
jmp    1225 <main+0x115>
nopl   0x0(%rax,%rax,1)
lea    0x0(,%rdi,8),%rbp
lea    0x0(%rbp,%rbp,4),%rbp
lea    (%rsp,%rbp,1),%rbx
add    $0x1c0,%rbx
mov    (%rbx,%rax,4),%ebx
add    -0x4(%r12,%rax,4),%ebx
add    %rsp,%rbp
add    $0x30,%rbp
mov    %ebx,0x0(%rbp,%rax,4)
add    $0x1,%rax
add    $0x1,%r15
add    $0x4,%rdx
add    $0x28,%rcx
cmp    $0xa,%rax
je     1180 <main+0x70>
lea    (%rax,%rax,4),%rbp
imul   $0x190,%rdi,%rbx
add    %rsp,%rbx
add    $0x350,%rbx
lea    (%rbx,%rbp,8),%r12
movl   $0x0,(%r12,%rdi,4)
cmp    %rax,%r8
jae    11e0 <main+0xd0>
lea    (%r15,%r15,4),%rbp
lea    (%rsp,%rbp,8),%rbp
add    $0x350,%rbp
mov    0x28(%rbp,%r10,4),%r14d
test   $0x1,%r15b
jne    1280 <main+0x170>
mov    %r13,%r11
cmp    $0x1,%r15
je     11e0 <main+0xd0>
jmp    12b4 <main+0x1a4>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x28(%rsp),%rbp
add    0x0(%rbp),%r14d
lea    0x0(,%r13,4),%rbp
add    %r13,%rbp
lea    (%rsp,%rbp,8),%rbp
add    $0x30,%rbp
add    0x0(%rbp,%rax,4),%r14d
mov    %r14d,(%r12,%r13,4)
mov    0x20(%rsp),%r11
cmp    $0x1,%r15
je     11e0 <main+0xd0>
lea    (%r11,%r11,4),%rbp
lea    (%rdx,%rbp,8),%r9
nopl   0x0(%rax)
add    -0x4(%rsi,%r11,4),%r14d
add    -0x28(%r9),%r14d
mov    %r14d,-0x4(%rcx,%r11,4)
add    (%rsi,%r11,4),%r14d
add    (%r9),%r14d
mov    %r14d,(%rcx,%r11,4)
add    $0x2,%r11
add    $0x50,%r9
cmp    %r11,%rax
jne    12c0 <main+0x1b0>
jmp    11e0 <main+0xd0>
xor    %eax,%eax
add    $0x12f8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = alloca [10 x [10 x [10 x i32]]]
%4 = alloca [10 x [10 x i32]]
%5 = bitcast [10 x [10 x i32]]* %4 to i8*
%6 = alloca [10 x [10 x i32]]
%7 = bitcast [10 x [10 x [10 x i32]]]* %3 to i8*
%8 = bitcast [10 x [10 x i32]]* %6 to i8*
br label %9
9: ; preds = %2, %74
%10 = phi i32 [ 0, %2 ], [ %75, %74 ]
br label %14
11: ; preds = %63
%12 = add nuw nsw i64 %16, 1
%13 = icmp eq i64 %18, 9
br i1 %13, label %74, label %14
14: ; preds = %11, %9
%15 = phi i64 [ 0, %9 ], [ %18, %11 ]
%16 = phi i64 [ 1, %9 ], [ %12, %11 ]
%17 = mul nuw nsw i64 %15, 111
%18 = add nuw nsw i64 %15, 1
%19 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %4, i64 0, i64 %15, i64 %16
%20 = add nuw nsw i64 %16, 1
br label %21
21: ; preds = %14, %63
%22 = phi i64 [ 0, %14 ], [ %73, %63 ]
%23 = phi i64 [ %16, %14 ], [ %71, %63 ]
%24 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* %3, i64 0, i64 %15, i64 %23, i64 %15
store i32 0, i32* %24
%25 = icmp ult i64 %18, %23
br i1 %25, label %26, label %63
26: ; preds = %21
%27 = add i64 %22, 1
%28 = getelementptr [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* %3, i64 0, i64 0, i64 %27, i64 %17
%29 = load i32, i32* %28
%30 = and i64 %22, 1
%31 = icmp eq i64 %30, 0
br i1 %31, label %39, label %32
32: ; preds = %26
%33 = load i32, i32* %19
%34 = add nsw i32 %33, %29
%35 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %4, i64 0, i64 %16, i64 %23
%36 = load i32, i32* %35
%37 = add nsw i32 %34, %36
%38 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* %3, i64 0, i64 %15, i64 %23, i64 %16
store i32 %37, i32* %38
br label %39
39: ; preds = %32, %26
%40 = phi i32 [ %29, %26 ], [ %37, %32 ]
%41 = phi i64 [ %16, %26 ], [ %20, %32 ]
%42 = icmp eq i64 %22, 1
br i1 %42, label %63, label %43
43: ; preds = %39, %43
%44 = phi i32 [ %59, %43 ], [ %40, %39 ]
%45 = phi i64 [ %61, %43 ], [ %41, %39 ]
%46 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %4, i64 0, i64 %15, i64 %45
%47 = load i32, i32* %46
%48 = add nsw i32 %47, %44
%49 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %4, i64 0, i64 %45, i64 %23
%50 = load i32, i32* %49
%51 = add nsw i32 %48, %50
%52 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* %3, i64 0, i64 %15, i64 %23, i64 %45
store i32 %51, i32* %52
%53 = add nuw nsw i64 %45, 1
%54 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %4, i64 0, i64 %15, i64 %53
%55 = load i32, i32* %54
%56 = add nsw i32 %55, %51
%57 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %4, i64 0, i64 %53, i64 %23
%58 = load i32, i32* %57
%59 = add nsw i32 %56, %58
%60 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* %3, i64 0, i64 %15, i64 %23, i64 %53
store i32 %59, i32* %60
%61 = add nuw nsw i64 %45, 2
%62 = icmp eq i64 %61, %23
br i1 %62, label %63, label %43
63: ; preds = %39, %43, %21
%64 = add nsw i64 %23, -1
%65 = getelementptr inbounds [10 x [10 x [10 x i32]]], [10 x [10 x [10 x i32]]]* %3, i64 0, i64 %15, i64 %23, i64 %64
%66 = load i32, i32* %65
%67 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %6, i64 0, i64 %15, i64 %23
%68 = load i32, i32* %67
%69 = add nsw i32 %68, %66
%70 = getelementptr inbounds [10 x [10 x i32]], [10 x [10 x i32]]* %4, i64 0, i64 %15, i64 %23
store i32 %69, i32* %70
%71 = add nuw nsw i64 %23, 1
%72 = icmp eq i64 %71, 10
%73 = add i64 %22, 1
br i1 %72, label %11, label %21
74: ; preds = %11
%75 = add nuw nsw i32 %10, 1
%76 = icmp eq i32 %75, 10000
br i1 %76, label %77, label %9
77: ; preds = %74
ret i32 0
}