#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*/ test(int *, int *, int *);
int main() {
  int start[3], len[3], stride[3];
  for (start[0] = 0; start[0] < 8; start[0]++) {
    for (len[0] = 2; len[0] <= 8; len[0]++) {
      for (stride[0] = 1; stride[0] < 8; stride[0]++) {
        for (start[1] = 0; start[1] < 8; start[1]++) {
          for (len[1] = 2; len[1] <= 8; len[1]++) {
            for (stride[1] = 1; stride[1] < 8; stride[1]++) {
              for (start[2] = 0; start[2] < 8; start[2]++) {
                for (len[2] = 2; len[2] <= 8; len[2]++) {
                  for (stride[2] = 1; stride[2] < 8; stride[2]++) {
                    if ((start[0] + (len[0] - 1) * stride[0] < 8) &&
                        (start[1] + (len[1] - 1) * stride[1] < 8) &&
                        (start[2] + (len[2] - 1) * stride[2] < 8)) {
                      test(start, len, stride);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x10(%rbp)
cmpl   $0x8,-0x10(%rbp)
jge    12bc <main+0x1ac>
movl   $0x2,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jg     12a9 <main+0x199>
movl   $0x1,-0x28(%rbp)
cmpl   $0x8,-0x28(%rbp)
jge    1296 <main+0x186>
movl   $0x0,-0xc(%rbp)
cmpl   $0x8,-0xc(%rbp)
jge    1283 <main+0x173>
movl   $0x2,-0x18(%rbp)
cmpl   $0x8,-0x18(%rbp)
jg     1270 <main+0x160>
movl   $0x1,-0x24(%rbp)
cmpl   $0x8,-0x24(%rbp)
jge    125d <main+0x14d>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    124a <main+0x13a>
movl   $0x2,-0x14(%rbp)
cmpl   $0x8,-0x14(%rbp)
jg     1237 <main+0x127>
movl   $0x1,-0x20(%rbp)
cmpl   $0x8,-0x20(%rbp)
jge    1224 <main+0x114>
mov    -0x10(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x28(%rbp),%ecx
add    %ecx,%eax
cmp    $0x8,%eax
jge    1211 <main+0x101>
mov    -0xc(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x24(%rbp),%ecx
add    %ecx,%eax
cmp    $0x8,%eax
jge    1211 <main+0x101>
mov    -0x8(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x20(%rbp),%ecx
add    %ecx,%eax
cmp    $0x8,%eax
jge    1211 <main+0x101>
lea    -0x10(%rbp),%rdi
lea    -0x1c(%rbp),%rsi
lea    -0x28(%rbp),%rdx
call   1030 <test@plt>
jmp    1216 <main+0x106>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11ae <main+0x9e>
jmp    1229 <main+0x119>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    119d <main+0x8d>
jmp    123c <main+0x12c>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    118c <main+0x7c>
jmp    124f <main+0x13f>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    117b <main+0x6b>
jmp    1262 <main+0x152>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    116a <main+0x5a>
jmp    1275 <main+0x165>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1159 <main+0x49>
jmp    1288 <main+0x178>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1148 <main+0x38>
jmp    129b <main+0x18b>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1137 <main+0x27>
jmp    12ae <main+0x19e>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1126 <main+0x16>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
sub    $0x30,%rsp
movl   $0x0,0x18(%rsp)
lea    0x18(%rsp),%r14
lea    0xc(%rsp),%r15
lea    0x24(%rsp),%rbx
jmp    1154 <main+0x44>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x18(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x18(%rsp)
cmp    $0x7,%eax
jge    129f <main+0x18f>
movl   $0x2,0xc(%rsp)
jmp    1170 <main+0x60>
xchg   %ax,%ax
mov    0xc(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0xc(%rsp)
cmp    $0x8,%eax
jge    1140 <main+0x30>
movl   $0x1,0x24(%rsp)
jmp    1190 <main+0x80>
nopw   0x0(%rax,%rax,1)
mov    0x24(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x24(%rsp)
cmp    $0x7,%eax
jge    1160 <main+0x50>
movl   $0x0,0x1c(%rsp)
jmp    11b0 <main+0xa0>
nopw   0x0(%rax,%rax,1)
mov    0x1c(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x1c(%rsp)
cmp    $0x7,%eax
jge    1180 <main+0x70>
movl   $0x2,0x10(%rsp)
jmp    11d0 <main+0xc0>
nopw   0x0(%rax,%rax,1)
mov    0x10(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x10(%rsp)
cmp    $0x8,%eax
jge    11a0 <main+0x90>
movl   $0x1,0x28(%rsp)
jmp    11f0 <main+0xe0>
nopw   0x0(%rax,%rax,1)
mov    0x28(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x28(%rsp)
cmp    $0x7,%eax
jge    11c0 <main+0xb0>
movl   $0x0,0x20(%rsp)
jmp    1210 <main+0x100>
nopw   0x0(%rax,%rax,1)
mov    0x20(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x20(%rsp)
cmp    $0x7,%eax
jge    11e0 <main+0xd0>
movl   $0x2,0x14(%rsp)
jmp    1230 <main+0x120>
nopw   0x0(%rax,%rax,1)
mov    0x14(%rsp),%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x14(%rsp)
cmp    $0x8,%eax
jge    1200 <main+0xf0>
movl   $0x1,0x2c(%rsp)
mov    $0x1,%eax
jmp    124e <main+0x13e>
nop
lea    0x1(%rax),%ecx
mov    %ecx,0x2c(%rsp)
cmp    $0x7,%eax
mov    %ecx,%eax
jge    1220 <main+0x110>
mov    0xc(%rsp),%ecx
add    $0xffffffff,%ecx
imul   0x24(%rsp),%ecx
add    0x18(%rsp),%ecx
cmp    $0x7,%ecx
jg     1240 <main+0x130>
mov    0x10(%rsp),%ecx
add    $0xffffffff,%ecx
imul   0x28(%rsp),%ecx
add    0x1c(%rsp),%ecx
cmp    $0x7,%ecx
jg     1240 <main+0x130>
mov    0x14(%rsp),%ecx
add    $0xffffffff,%ecx
imul   %eax,%ecx
add    0x20(%rsp),%ecx
cmp    $0x7,%ecx
jg     1240 <main+0x130>
mov    %r14,%rdi
mov    %r15,%rsi
mov    %rbx,%rdx
call   1030 <test@plt>
mov    0x2c(%rsp),%eax
jmp    1240 <main+0x130>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

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

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