#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 */
void DXFfillGaps(int *inout, int xsize, int ysize, int zsize) {
  size_t numelems;
  size_t radar[6];
  size_t curloc;
  size_t peek;
  int repeat;
  int numIn, numOut;
  int i;
  numelems = xsize * ysize * zsize;
  radar[0] = 1;
  radar[1] = -1;
  radar[2] = -ysize;
  radar[3] = ysize;
  radar[4] = xsize * ysize;
  radar[5] = -radar[4];
  do {
    repeat = 0;
    for (curloc = 0; curloc < numelems; curloc++) {
      if (inout[curloc] == 2) {
        numIn = 0;
        numOut = 0;
        for (i = 0; i < 6; i++) {
          peek = curloc + radar[i];
          if (inout[peek] == 1)
            numIn++;
          else if (inout[peek] == 0)
            numOut++;
        }
        if (numIn > numOut)
          inout[curloc] = 3;
        else if (numOut > numIn)
          inout[curloc] = 4;
        else if ((numIn != 0) && (numIn == numOut))
          inout[curloc] = 4;
      }
    }
    for (curloc = 0; curloc < numelems; curloc++) {
      switch (inout[curloc]) {
      case 3:
        inout[curloc] = 1;
        break;
      case 4:
        inout[curloc] = 0;
        break;
      case 2:
        repeat = 1;
        break;
      }
    }
  } while (repeat);
}


x86 assembly (clang, -O0):
<DXFfillGaps>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    -0xc(%rbp),%eax
imul   -0x10(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x20(%rbp)
movq   $0x1,-0x50(%rbp)
movq   $0xffffffffffffffff,-0x48(%rbp)
ff
xor    %eax,%eax
sub    -0x10(%rbp),%eax
cltq
mov    %rax,-0x40(%rbp)
movslq -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0xc(%rbp),%eax
imul   -0x10(%rbp),%eax
cltq
mov    %rax,-0x30(%rbp)
xor    %eax,%eax
sub    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x64(%rbp)
movq   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    1298 <DXFfillGaps+0x198>
mov    -0x8(%rbp),%rax
mov    -0x58(%rbp),%rcx
cmpl   $0x2,(%rax,%rcx,4)
jne    1282 <DXFfillGaps+0x182>
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x6c(%rbp)
movl   $0x0,-0x70(%rbp)
cmpl   $0x6,-0x70(%rbp)
jge    120e <DXFfillGaps+0x10e>
mov    -0x58(%rbp),%rax
movslq -0x70(%rbp),%rcx
add    -0x50(%rbp,%rcx,8),%rax
mov    %rax,-0x60(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x60(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    11db <DXFfillGaps+0xdb>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    11fb <DXFfillGaps+0xfb>
mov    -0x8(%rbp),%rax
mov    -0x60(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    11f6 <DXFfillGaps+0xf6>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    11fb <DXFfillGaps+0xfb>
jmp    1200 <DXFfillGaps+0x100>
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    11a0 <DXFfillGaps+0xa0>
mov    -0x68(%rbp),%eax
cmp    -0x6c(%rbp),%eax
jle    122e <DXFfillGaps+0x12e>
mov    -0x8(%rbp),%rax
mov    -0x58(%rbp),%rcx
movl   $0x3,(%rax,%rcx,4)
jmp    127d <DXFfillGaps+0x17d>
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%eax
jle    124e <DXFfillGaps+0x14e>
mov    -0x8(%rbp),%rax
mov    -0x58(%rbp),%rcx
movl   $0x4,(%rax,%rcx,4)
jmp    1278 <DXFfillGaps+0x178>
cmpl   $0x0,-0x68(%rbp)
je     1273 <DXFfillGaps+0x173>
mov    -0x68(%rbp),%eax
cmp    -0x6c(%rbp),%eax
jne    1273 <DXFfillGaps+0x173>
mov    -0x8(%rbp),%rax
mov    -0x58(%rbp),%rcx
movl   $0x4,(%rax,%rcx,4)
jmp    1278 <DXFfillGaps+0x178>
jmp    127d <DXFfillGaps+0x17d>
jmp    1282 <DXFfillGaps+0x182>
jmp    1287 <DXFfillGaps+0x187>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    116b <DXFfillGaps+0x6b>
movq   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    1331 <DXFfillGaps+0x231>
mov    -0x8(%rbp),%rax
mov    -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x74(%rbp)
sub    $0x2,%eax
je     1314 <DXFfillGaps+0x214>
jmp    12ca <DXFfillGaps+0x1ca>
mov    -0x74(%rbp),%eax
sub    $0x3,%eax
je     12ec <DXFfillGaps+0x1ec>
jmp    12db <DXFfillGaps+0x1db>
mov    -0x74(%rbp),%eax
sub    $0x4,%eax
je     1300 <DXFfillGaps+0x200>
jmp    131b <DXFfillGaps+0x21b>
mov    -0x8(%rbp),%rax
mov    -0x58(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    131b <DXFfillGaps+0x21b>
mov    -0x8(%rbp),%rax
mov    -0x58(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    131b <DXFfillGaps+0x21b>
movl   $0x1,-0x64(%rbp)
jmp    1320 <DXFfillGaps+0x220>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    12a0 <DXFfillGaps+0x1a0>
jmp    1336 <DXFfillGaps+0x236>
cmpl   $0x0,-0x64(%rbp)
jne    115c <DXFfillGaps+0x5c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<DXFfillGaps>:
push   %rbp
push   %r15
push   %r14
push   %rbx
imul   %edx,%esi
imul   %esi,%ecx
cmp    $0x2,%ecx
mov    $0x1,%eax
cmovae %ecx,%eax
test   %ecx,%ecx
je     1318 <DXFfillGaps+0x218>
movslq %edx,%r8
neg    %edx
movslq %edx,%r9
movslq %esi,%r10
movslq %eax,%r11
mov    %r11,%rax
and    $0xfffffffffffffffe,%rax
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
mov    %rbx,%rdx
add    $0x1,%rbx
cmpl   $0x2,(%rdi,%rdx,4)
jne    1213 <DXFfillGaps+0x113>
mov    0x4(%rdi,%rdx,4),%r15d
test   %r15d,%r15d
je     1169 <DXFfillGaps+0x69>
xor    %r14d,%r14d
cmp    $0x1,%r15d
je     116f <DXFfillGaps+0x6f>
xor    %r15d,%r15d
jmp    116f <DXFfillGaps+0x6f>
mov    $0x1,%r14d
mov    -0x4(%rdi,%rdx,4),%ebp
cmp    $0x1,%ebp
je     1182 <DXFfillGaps+0x82>
test   %ebp,%ebp
jne    1186 <DXFfillGaps+0x86>
add    $0x1,%r14d
jmp    1186 <DXFfillGaps+0x86>
add    $0x1,%r15d
lea    (%rdx,%r9,1),%rbp
mov    (%rdi,%rbp,4),%ebp
cmp    $0x1,%ebp
je     119c <DXFfillGaps+0x9c>
test   %ebp,%ebp
jne    11a0 <DXFfillGaps+0xa0>
add    $0x1,%r14d
jmp    11a0 <DXFfillGaps+0xa0>
add    $0x1,%r15d
lea    (%rdx,%r8,1),%rbp
mov    (%rdi,%rbp,4),%ebp
cmp    $0x1,%ebp
je     11b6 <DXFfillGaps+0xb6>
test   %ebp,%ebp
jne    11ba <DXFfillGaps+0xba>
add    $0x1,%r14d
jmp    11ba <DXFfillGaps+0xba>
add    $0x1,%r15d
lea    (%rdx,%r10,1),%rbp
mov    (%rdi,%rbp,4),%ebp
cmp    $0x1,%ebp
je     11d0 <DXFfillGaps+0xd0>
test   %ebp,%ebp
jne    11d4 <DXFfillGaps+0xd4>
add    $0x1,%r14d
jmp    11d4 <DXFfillGaps+0xd4>
add    $0x1,%r15d
mov    %rdx,%rsi
sub    %r10,%rsi
mov    (%rdi,%rsi,4),%ebp
cmp    $0x1,%ebp
je     11ec <DXFfillGaps+0xec>
test   %ebp,%ebp
jne    11f0 <DXFfillGaps+0xf0>
add    $0x1,%r14d
jmp    11f0 <DXFfillGaps+0xf0>
add    $0x1,%r15d
mov    $0x3,%ebp
cmp    %r14d,%r15d
ja     1210 <DXFfillGaps+0x110>
mov    $0x4,%ebp
jb     1210 <DXFfillGaps+0x110>
test   %r15d,%r15d
je     1213 <DXFfillGaps+0x113>
cmp    %r14d,%r15d
jne    1213 <DXFfillGaps+0x113>
nopl   0x0(%rax,%rax,1)
mov    %ebp,(%rdi,%rdx,4)
cmp    %r11,%rbx
jne    1140 <DXFfillGaps+0x40>
test   %ecx,%ecx
je     1318 <DXFfillGaps+0x218>
xor    %edx,%edx
xor    %esi,%esi
cmp    $0x1,%ecx
jne    1271 <DXFfillGaps+0x171>
test   $0x1,%r11b
jne    12e0 <DXFfillGaps+0x1e0>
test   %edx,%edx
je     1318 <DXFfillGaps+0x218>
mov    $0x0,%ebx
test   %ecx,%ecx
jne    1140 <DXFfillGaps+0x40>
jmp    1318 <DXFfillGaps+0x218>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movl   $0x1,0x4(%rdi,%rsi,4)
add    $0x2,%rsi
cmp    %rsi,%rax
je     122d <DXFfillGaps+0x12d>
mov    (%rdi,%rsi,4),%ebx
cmp    $0x2,%ebx
je     1290 <DXFfillGaps+0x190>
cmp    $0x4,%ebx
je     12a0 <DXFfillGaps+0x1a0>
cmp    $0x3,%ebx
jne    12a7 <DXFfillGaps+0x1a7>
movl   $0x1,(%rdi,%rsi,4)
jmp    12a7 <DXFfillGaps+0x1a7>
nopl   0x0(%rax)
mov    $0x1,%edx
jmp    12a7 <DXFfillGaps+0x1a7>
nopw   0x0(%rax,%rax,1)
movl   $0x0,(%rdi,%rsi,4)
mov    0x4(%rdi,%rsi,4),%ebx
cmp    $0x4,%ebx
je     12d0 <DXFfillGaps+0x1d0>
cmp    $0x3,%ebx
je     1260 <DXFfillGaps+0x160>
cmp    $0x2,%ebx
jne    1268 <DXFfillGaps+0x168>
mov    $0x1,%edx
jmp    1268 <DXFfillGaps+0x168>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movl   $0x0,0x4(%rdi,%rsi,4)
jmp    1268 <DXFfillGaps+0x168>
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rsi,4),%ebx
cmp    $0x4,%ebx
je     1300 <DXFfillGaps+0x200>
cmp    $0x3,%ebx
je     130c <DXFfillGaps+0x20c>
cmp    $0x2,%ebx
jne    1237 <DXFfillGaps+0x137>
mov    $0x1,%edx
jmp    1237 <DXFfillGaps+0x137>
movl   $0x0,(%rdi,%rsi,4)
jmp    1237 <DXFfillGaps+0x137>
movl   $0x1,(%rdi,%rsi,4)
jmp    1237 <DXFfillGaps+0x137>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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