#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);
main() {
  int L, i, j, k, l, sum;
  int Lold, jlo, llo;
  int partial_sum[15][15], partl;
  sum = 0;
  partl = 0;
  L = 4;
  for (i = 0; i < L - 1; i++) {
    for (j = i + 1; j < L; j++) {
      for (k = 0; k < L - 1; k++) {
        for (l = k + 1; l < L; l++) {
          sum += 1;
        }
      }
      partial_sum[i][j] = 1;
    }
  }
  printf(" L: %d    sum: %d \n", L, sum);
  Lold = L;
  L += 2;
  for (k = 0; k < L - 1; k++) {
    llo = (k < Lold) ? Lold : k + 1;
    for (l = llo; l < L; l++) {
      for (i = 0; i < Lold - 1; i++) {
        for (j = i + 1; j < Lold; j++) {
          sum += partial_sum[i][j];
        }
      }
    }
  }
  for (i = 0; i < L - 1; i++) {
    jlo = (i < Lold) ? Lold : i + 1;
    for (j = jlo; j < L; j++) {
      for (k = 0; k < L - 1; k++) {
        for (l = k + 1; l < L; l++) {
          sum += 1;
        }
      }
    }
  }
  printf(" L: %d    sum: %d \n", L, sum);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x3c0,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x3b4(%rbp)
movl   $0x4,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    11fc <main+0xec>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11e9 <main+0xd9>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    11be <main+0xae>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11ab <main+0x9b>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1188 <main+0x78>
jmp    11b0 <main+0xa0>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    116e <main+0x5e>
movslq -0xc(%rbp),%rcx
lea    -0x3b0(%rbp),%rax
imul   $0x3c,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    115b <main+0x4b>
jmp    11ee <main+0xde>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1141 <main+0x31>
mov    -0x8(%rbp),%esi
mov    -0x1c(%rbp),%edx
lea    0xdf7(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1309 <main+0x1f9>
mov    -0x14(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    124f <main+0x13f>
mov    -0x20(%rbp),%eax
mov    %eax,-0x3b8(%rbp)
jmp    125b <main+0x14b>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3b8(%rbp)
mov    -0x3b8(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    12f6 <main+0x1e6>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x20(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12e3 <main+0x1d3>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    12d0 <main+0x1c0>
movslq -0xc(%rbp),%rcx
lea    -0x3b0(%rbp),%rax
imul   $0x3c,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1297 <main+0x187>
jmp    12d5 <main+0x1c5>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    127d <main+0x16d>
jmp    12e8 <main+0x1d8>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    126a <main+0x15a>
jmp    12fb <main+0x1eb>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1224 <main+0x114>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13df <main+0x2cf>
mov    -0xc(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    133b <main+0x22b>
mov    -0x20(%rbp),%eax
mov    %eax,-0x3bc(%rbp)
jmp    1347 <main+0x237>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3bc(%rbp)
mov    -0x3bc(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    13cc <main+0x2bc>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13b9 <main+0x2a9>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    13a6 <main+0x296>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1383 <main+0x273>
jmp    13ab <main+0x29b>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1369 <main+0x259>
jmp    13be <main+0x2ae>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1356 <main+0x246>
jmp    13d1 <main+0x2c1>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1310 <main+0x200>
mov    -0x8(%rbp),%esi
mov    -0x1c(%rbp),%edx
lea    0xc14(%rip),%rdi
call   1030 <printf@plt>
mov    -0x4(%rbp),%eax
add    $0x3c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
lea    0xee8(%rip),%rbx
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x24,%edx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x6,%esi
mov    $0xe1,%edx
call   1030 <printf@plt>
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
@.str = [20 x i8] c" L: %d sum: %d \0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca [15 x [15 x i32]]
%12 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %7
store i32 0, i32* %12
store i32 4, i32* %2
store i32 0, i32* %3
br label %13
13: ; preds = %59, %0
%14 = load i32, i32* %3
%15 = load i32, i32* %2
%16 = sub nsw i32 %15, 1
%17 = icmp slt i32 %14, %16
br i1 %17, label %18, label %62
18: ; preds = %13
%19 = load i32, i32* %3
%20 = add nsw i32 %19, 1
store i32 %20, i32* %4
br label %21
21: ; preds = %55, %18
%22 = load i32, i32* %4
%23 = load i32, i32* %2
%24 = icmp slt i32 %22, %23
br i1 %24, label %25, label %58
25: ; preds = %21
store i32 0, i32* %5
br label %26
26: ; preds = %45, %25
%27 = load i32, i32* %5
%28 = load i32, i32* %2
%29 = sub nsw i32 %28, 1
%30 = icmp slt i32 %27, %29
br i1 %30, label %31, label %48
31: ; preds = %26
%32 = load i32, i32* %5
%33 = add nsw i32 %32, 1
store i32 %33, i32* %6
br label %34
34: ; preds = %41, %31
%35 = load i32, i32* %6
%36 = load i32, i32* %2
%37 = icmp slt i32 %35, %36
br i1 %37, label %38, label %44
38: ; preds = %34
%39 = load i32, i32* %7
%40 = add nsw i32 %39, 1
store i32 %40, i32* %7
br label %41
41: ; preds = %38
%42 = load i32, i32* %6
%43 = add nsw i32 %42, 1
store i32 %43, i32* %6
br label %34
44: ; preds = %34
br label %45
45: ; preds = %44
%46 = load i32, i32* %5
%47 = add nsw i32 %46, 1
store i32 %47, i32* %5
br label %26
48: ; preds = %26
%49 = load i32, i32* %3
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds [15 x [15 x i32]], [15 x [15 x i32]]* %11, i64 0, i64 %50
%52 = load i32, i32* %4
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [15 x i32], [15 x i32]* %51, i64 0, i64 %53
store i32 1, i32* %54
br label %55
55: ; preds = %48
%56 = load i32, i32* %4
%57 = add nsw i32 %56, 1
store i32 %57, i32* %4
br label %21
58: ; preds = %21
br label %59
59: ; preds = %58
%60 = load i32, i32* %3
%61 = add nsw i32 %60, 1
store i32 %61, i32* %3
br label %13
62: ; preds = %13
%63 = load i32, i32* %2
%64 = load i32, i32* %7
%65 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i32 %63, i32 %64)
%66 = load i32, i32* %2
store i32 %66, i32* %8
%67 = load i32, i32* %2
%68 = add nsw i32 %67, 2
store i32 %68, i32* %2
store i32 0, i32* %5
br label %69
69: ; preds = %125, %62
%70 = load i32, i32* %5
%71 = load i32, i32* %2
%72 = sub nsw i32 %71, 1
%73 = icmp slt i32 %70, %72
br i1 %73, label %74, label %128
74: ; preds = %69
%75 = load i32, i32* %5
%76 = load i32, i32* %8
%77 = icmp slt i32 %75, %76
br i1 %77, label %78, label %80
78: ; preds = %74
%79 = load i32, i32* %8
br label %83
80: ; preds = %74
%81 = load i32, i32* %5
%82 = add nsw i32 %81, 1
br label %83
83: ; preds = %80, %78
%84 = phi i32 [ %79, %78 ], [ %82, %80 ]
store i32 %84, i32* %10
%85 = load i32, i32* %10
store i32 %85, i32* %6
br label %86
86: ; preds = %121, %83
%87 = load i32, i32* %6
%88 = load i32, i32* %2
%89 = icmp slt i32 %87, %88
br i1 %89, label %90, label %124
90: ; preds = %86
store i32 0, i32* %3
br label %91
91: ; preds = %117, %90
%92 = load i32, i32* %3
%93 = load i32, i32* %8
%94 = sub nsw i32 %93, 1
%95 = icmp slt i32 %92, %94
br i1 %95, label %96, label %120
96: ; preds = %91
%97 = load i32, i32* %3
%98 = add nsw i32 %97, 1
store i32 %98, i32* %4
br label %99
99: ; preds = %113, %96
%100 = load i32, i32* %4
%101 = load i32, i32* %8
%102 = icmp slt i32 %100, %101
br i1 %102, label %103, label %116
103: ; preds = %99
%104 = load i32, i32* %3
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [15 x [15 x i32]], [15 x [15 x i32]]* %11, i64 0, i64 %105
%107 = load i32, i32* %4
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds [15 x i32], [15 x i32]* %106, i64 0, i64 %108
%110 = load i32, i32* %109
%111 = load i32, i32* %7
%112 = add nsw i32 %111, %110
store i32 %112, i32* %7
br label %113
113: ; preds = %103
%114 = load i32, i32* %4
%115 = add nsw i32 %114, 1
store i32 %115, i32* %4
br label %99
116: ; preds = %99
br label %117
117: ; preds = %116
%118 = load i32, i32* %3
%119 = add nsw i32 %118, 1
store i32 %119, i32* %3
br label %91
120: ; preds = %91
br label %121
121: ; preds = %120
%122 = load i32, i32* %6
%123 = add nsw i32 %122, 1
store i32 %123, i32* %6
br label %86
124: ; preds = %86
br label %125
125: ; preds = %124
%126 = load i32, i32* %5
%127 = add nsw i32 %126, 1
store i32 %127, i32* %5
br label %69
128: ; preds = %69
store i32 0, i32* %3
br label %129
129: ; preds = %178, %128
%130 = load i32, i32* %3
%131 = load i32, i32* %2
%132 = sub nsw i32 %131, 1
%133 = icmp slt i32 %130, %132
br i1 %133, label %134, label %181
134: ; preds = %129
%135 = load i32, i32* %3
%136 = load i32, i32* %8
%137 = icmp slt i32 %135, %136
br i1 %137, label %138, label %140
138: ; preds = %134
%139 = load i32, i32* %8
br label %143
140: ; preds = %134
%141 = load i32, i32* %3
%142 = add nsw i32 %141, 1
br label %143
143: ; preds = %140, %138
%144 = phi i32 [ %139, %138 ], [ %142, %140 ]
store i32 %144, i32* %9
%145 = load i32, i32* %9
store i32 %145, i32* %4
br label %146
146: ; preds = %174, %143
%147 = load i32, i32* %4
%148 = load i32, i32* %2
%149 = icmp slt i32 %147, %148
br i1 %149, label %150, label %177
150: ; preds = %146
store i32 0, i32* %5
br label %151
151: ; preds = %170, %150
%152 = load i32, i32* %5
%153 = load i32, i32* %2
%154 = sub nsw i32 %153, 1
%155 = icmp slt i32 %152, %154
br i1 %155, label %156, label %173
156: ; preds = %151
%157 = load i32, i32* %5
%158 = add nsw i32 %157, 1
store i32 %158, i32* %6
br label %159
159: ; preds = %166, %156
%160 = load i32, i32* %6
%161 = load i32, i32* %2
%162 = icmp slt i32 %160, %161
br i1 %162, label %163, label %169
163: ; preds = %159
%164 = load i32, i32* %7
%165 = add nsw i32 %164, 1
store i32 %165, i32* %7
br label %166
166: ; preds = %163
%167 = load i32, i32* %6
%168 = add nsw i32 %167, 1
store i32 %168, i32* %6
br label %159
169: ; preds = %159
br label %170
170: ; preds = %169
%171 = load i32, i32* %5
%172 = add nsw i32 %171, 1
store i32 %172, i32* %5
br label %151
173: ; preds = %151
br label %174
174: ; preds = %173
%175 = load i32, i32* %4
%176 = add nsw i32 %175, 1
store i32 %176, i32* %4
br label %146
177: ; preds = %146
br label %178
178: ; preds = %177
%179 = load i32, i32* %3
%180 = add nsw i32 %179, 1
store i32 %180, i32* %3
br label %129
181: ; preds = %129
%182 = load i32, i32* %2
%183 = load i32, i32* %7
%184 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i32 %182, i32 %183)
%185 = load i32, i32* %1
ret i32 %185
}

LLVM IR (-O2):
@.str = [20 x i8] c" L: %d sum: %d \0A\00"
define i32 @main() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i32 4, i32 36)
%2 = add nuw nsw i32 54, 6
%3 = add nsw i32 %2, 6
%4 = add nsw i32 %2, 12
%5 = add nsw i32 %4, 6
%6 = add nsw i32 %4, 12
%7 = add i32 %6, 141
%8 = tail call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i32 6, i32 %7)
ret i32 0
}