#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 */
char decodeSubData(char *, int, int, int, int);
int /*<<< orphan*/ printf(char *, ...);
void decodeBtoD(char *data, int top, int left, int row, int col) {
  int oddrow, oddcol;
  int newrow, newcol;
  char datatype;
  datatype = decodeSubData(data, top, left, row, col);
  if (datatype == '1' || datatype == '0')
    printf("%c", datatype);
  else {
    printf("%c", datatype);
    if (row > 1 && col == 1) {
      newcol = col;
      newrow = row / 2;
      oddrow = row % 2;
      oddcol = col;
    } else if (row == 1 && col > 1) {
      newrow = row;
      newcol = col / 2;
      oddrow = row;
      oddcol = col % 2;
    } else {
      oddrow = row % 2;
      oddcol = col % 2;
      newrow = row / 2;
      newcol = col / 2;
    }
    if (row < 0 || col < 0) {
      printf("ERROR\n");
      return;
    }
    if (row == 1 && col == 1) {
      printf("cell[%d, %d]\n", top, left);
      return;
    }
    if (oddrow && oddcol) {
      newrow++;
      newcol++;
    } else if (oddrow && !oddcol) {
      if (row != 1)
        newrow++;
    } else if (!oddrow && oddcol) {
      if (col != 1)
        newcol++;
    } else if (!oddrow && !oddcol) {
    }
    if (row > 1 && col == 1) {
      decodeBtoD(data, top, left, newrow, newcol);
      decodeBtoD(data, top + newrow, left, row - newrow, newcol);
    } else if (row == 1 && col > 1) {
      decodeBtoD(data, top, left, newrow, newcol);
      decodeBtoD(data, top, left + newcol, newrow, col - newcol);
    } else {
      decodeBtoD(data, top, left, newrow, newcol);
      decodeBtoD(data, top, left + newcol, newrow, col - newcol);
      decodeBtoD(data, top + newrow, left, row - newrow, newcol);
      decodeBtoD(data, top + newrow, left + newcol, row - newrow, col - newcol);
    }
  }
}


x86 assembly (clang, -O0):
<decodeBtoD>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%r8d
call   1040 <decodeSubData@plt>
mov    %al,-0x29(%rbp)
movsbl -0x29(%rbp),%eax
cmp    $0x31,%eax
je     117c <decodeBtoD+0x4c>
movsbl -0x29(%rbp),%eax
cmp    $0x30,%eax
jne    1193 <decodeBtoD+0x63>
movsbl -0x29(%rbp),%esi
lea    0xe79(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1476 <decodeBtoD+0x346>
movsbl -0x29(%rbp),%esi
lea    0xe62(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x1,-0x14(%rbp)
jle    11e6 <decodeBtoD+0xb6>
cmpl   $0x1,-0x18(%rbp)
jne    11e6 <decodeBtoD+0xb6>
mov    -0x18(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1264 <decodeBtoD+0x134>
cmpl   $0x1,-0x14(%rbp)
jne    1227 <decodeBtoD+0xf7>
cmpl   $0x1,-0x18(%rbp)
jle    1227 <decodeBtoD+0xf7>
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x28(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x20(%rbp)
jmp    125f <decodeBtoD+0x12f>
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %edx,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x28(%rbp)
jmp    1264 <decodeBtoD+0x134>
cmpl   $0x0,-0x14(%rbp)
jl     1278 <decodeBtoD+0x148>
cmpl   $0x0,-0x18(%rbp)
jge    128b <decodeBtoD+0x15b>
lea    0xd84(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1476 <decodeBtoD+0x346>
cmpl   $0x1,-0x14(%rbp)
jne    12b8 <decodeBtoD+0x188>
cmpl   $0x1,-0x18(%rbp)
jne    12b8 <decodeBtoD+0x188>
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
lea    0xd5e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1476 <decodeBtoD+0x346>
cmpl   $0x0,-0x1c(%rbp)
je     12e3 <decodeBtoD+0x1b3>
cmpl   $0x0,-0x20(%rbp)
je     12e3 <decodeBtoD+0x1b3>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1363 <decodeBtoD+0x233>
cmpl   $0x0,-0x1c(%rbp)
je     130f <decodeBtoD+0x1df>
cmpl   $0x0,-0x20(%rbp)
jne    130f <decodeBtoD+0x1df>
cmpl   $0x1,-0x14(%rbp)
je     130a <decodeBtoD+0x1da>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    135e <decodeBtoD+0x22e>
cmpl   $0x0,-0x1c(%rbp)
jne    133b <decodeBtoD+0x20b>
cmpl   $0x0,-0x20(%rbp)
je     133b <decodeBtoD+0x20b>
cmpl   $0x1,-0x18(%rbp)
je     1336 <decodeBtoD+0x206>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1359 <decodeBtoD+0x229>
cmpl   $0x0,-0x1c(%rbp)
jne    1354 <decodeBtoD+0x224>
cmpl   $0x0,-0x20(%rbp)
jne    1354 <decodeBtoD+0x224>
jmp    1354 <decodeBtoD+0x224>
jmp    1359 <decodeBtoD+0x229>
jmp    135e <decodeBtoD+0x22e>
jmp    1363 <decodeBtoD+0x233>
cmpl   $0x1,-0x14(%rbp)
jle    13ae <decodeBtoD+0x27e>
cmpl   $0x1,-0x18(%rbp)
jne    13ae <decodeBtoD+0x27e>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
add    -0x24(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
sub    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
jmp    1471 <decodeBtoD+0x341>
cmpl   $0x1,-0x14(%rbp)
jne    13fa <decodeBtoD+0x2ca>
cmpl   $0x1,-0x18(%rbp)
jle    13fa <decodeBtoD+0x2ca>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
add    -0x28(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x18(%rbp),%r8d
sub    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
jmp    146c <decodeBtoD+0x33c>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
add    -0x28(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x18(%rbp),%r8d
sub    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
add    -0x24(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
sub    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
add    -0x24(%rbp),%esi
mov    -0x10(%rbp),%edx
add    -0x28(%rbp),%edx
mov    -0x14(%rbp),%ecx
sub    -0x24(%rbp),%ecx
mov    -0x18(%rbp),%r8d
sub    -0x28(%rbp),%r8d
call   1050 <decodeBtoD@plt>
jmp    1471 <decodeBtoD+0x341>
jmp    1476 <decodeBtoD+0x346>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<decodeBtoD>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r8d,%r15d
mov    %ecx,%r13d
mov    %edx,%r14d
mov    %esi,%ebx
mov    %rdi,%rbp
call   1060 <decodeSubData@plt>
movsbl %al,%edi
mov    %edi,%eax
and    $0xfe,%al
cmp    $0x30,%al
jne    118f <decodeBtoD+0x3f>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <putchar@plt>
mov    %rbp,0x8(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,%r12d
mov    %r14d,%r15d
xchg   %ax,%ax
call   1030 <putchar@plt>
cmp    $0x2,%r13d
setge  %cl
cmp    $0x1,%r12d
sete   %al
and    %cl,%al
cmp    $0x1,%al
jne    11d0 <decodeBtoD+0x80>
mov    %r13d,%ebp
shr    %ebp
mov    %r13d,%ecx
and    $0x1,%ecx
mov    $0x1,%edx
mov    $0x1,%ebx
jmp    122a <decodeBtoD+0xda>
cmp    $0x1,%r13d
jne    1200 <decodeBtoD+0xb0>
cmp    $0x2,%r12d
jl     1200 <decodeBtoD+0xb0>
mov    %r12d,%ebx
shr    %ebx
mov    %r12d,%edx
and    $0x1,%edx
mov    $0x1,%ebp
mov    $0x1,%ecx
jmp    122a <decodeBtoD+0xda>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r13d,%ebp
shr    $0x1f,%ebp
add    %r13d,%ebp
mov    %ebp,%edx
and    $0xfffffffe,%edx
mov    %r13d,%ecx
sub    %edx,%ecx
mov    %r12d,%ebx
shr    $0x1f,%ebx
add    %r12d,%ebx
mov    %ebx,%esi
and    $0xfffffffe,%esi
mov    %r12d,%edx
sub    %esi,%edx
sar    %ebp
sar    %ebx
mov    %r12d,%esi
or     %r13d,%esi
js     13ad <decodeBtoD+0x25d>
cmp    $0x1,%r13d
jne    1246 <decodeBtoD+0xf6>
cmp    $0x1,%r12d
je     13c7 <decodeBtoD+0x277>
test   %edx,%edx
je     1260 <decodeBtoD+0x110>
test   %ecx,%ecx
je     1260 <decodeBtoD+0x110>
add    $0x1,%ebp
add    $0x1,%ebx
jmp    12a0 <decodeBtoD+0x150>
cs nopw 0x0(%rax,%rax,1)
test   %edx,%edx
jne    1280 <decodeBtoD+0x130>
test   %ecx,%ecx
je     1280 <decodeBtoD+0x130>
xor    %ecx,%ecx
cmp    $0x1,%r13d
setne  %cl
add    %ecx,%ebp
jmp    12a0 <decodeBtoD+0x150>
cs nopw 0x0(%rax,%rax,1)
nop
test   %edx,%edx
je     12a0 <decodeBtoD+0x150>
test   %ecx,%ecx
jne    12a0 <decodeBtoD+0x150>
xor    %ecx,%ecx
cmp    $0x1,%r12d
setne  %cl
add    %ecx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
test   %al,%al
jne    130c <decodeBtoD+0x1bc>
mov    0x8(%rsp),%rdi
mov    0x4(%rsp),%esi
mov    %r15d,%edx
mov    %ebp,%ecx
mov    %ebx,%r8d
call   1070 <decodeBtoD@plt>
mov    %r13d,%eax
mov    %r15,%r13
lea    (%rbx,%r15,1),%ecx
mov    %r12d,%r15d
sub    %ebx,%r15d
mov    %eax,%r14d
cmp    $0x1,%eax
jne    133a <decodeBtoD+0x1ea>
cmp    $0x2,%r12d
jl     133a <decodeBtoD+0x1ea>
mov    0x8(%rsp),%rdi
mov    0x4(%rsp),%esi
mov    %ecx,%ebx
mov    %ecx,%edx
mov    %ebp,%ecx
mov    %r15d,%r8d
call   1060 <decodeSubData@plt>
movsbl %al,%edi
mov    %edi,%eax
and    $0xfe,%al
mov    %r15d,%r12d
mov    %ebp,%r13d
mov    %ebx,%r15d
cmp    $0x30,%al
jne    11a0 <decodeBtoD+0x50>
jmp    117c <decodeBtoD+0x2c>
mov    0x8(%rsp),%r14
mov    %r14,%rdi
mov    0x4(%rsp),%r12d
mov    %r12d,%esi
mov    %r15d,%edx
mov    %ebp,%ecx
mov    %ebx,%r8d
call   1070 <decodeBtoD@plt>
add    %ebp,%r12d
sub    %ebp,%r13d
mov    %r14,%rbp
mov    %r15d,%r14d
mov    %ebx,%r15d
jmp    1380 <decodeBtoD+0x230>
mov    0x8(%rsp),%rdi
mov    0x4(%rsp),%r12d
mov    %r12d,%esi
mov    %ecx,0x14(%rsp)
mov    0x14(%rsp),%edx
mov    %ebp,%ecx
mov    %r15d,%r8d
call   1070 <decodeBtoD@plt>
add    %ebp,%r12d
sub    %ebp,%r14d
mov    0x8(%rsp),%rbp
mov    %rbp,%rdi
mov    %r12d,%esi
mov    %r13d,%edx
mov    %r14d,%r13d
mov    %r14d,%ecx
mov    %ebx,%r8d
call   1070 <decodeBtoD@plt>
mov    0x14(%rsp),%r14d
mov    %rbp,%rdi
mov    %r12d,0x4(%rsp)
mov    %r12d,%esi
mov    %r14d,%edx
mov    %r13d,%ecx
mov    %r15d,%r8d
call   1060 <decodeSubData@plt>
movsbl %al,%edi
mov    %edi,%eax
and    $0xfe,%al
cmp    $0x30,%al
jne    1198 <decodeBtoD+0x48>
jmp    117c <decodeBtoD+0x2c>
lea    0xc5a(%rip),%rdi
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <puts@plt>
lea    0xc32(%rip),%rdi
mov    0x4(%rsp),%esi
mov    %r15d,%edx
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <printf@plt>

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

LLVM IR (-O2):
@.str.2 = [14 x i8] c"cell[%d, %d]\0A\00"
@str = [6 x i8] c"ERROR\00"
define void @decodeBtoD(i8* %0, i32 %1, i32 %2, i32 %3, i32 %4) {
%6 = tail call signext i8 @decodeSubData(i8* %0, i32 %1, i32 %2, i32 %3, i32 %4)
%7 = sext i8 %6 to i32
%8 = and i8 %6, -2
%9 = icmp eq i8 %8, 48
br i1 %9, label %16, label %10
10: ; preds = %5, %83
%11 = phi i32 [ %89, %83 ], [ %7, %5 ]
%12 = phi i32 [ %87, %83 ], [ %4, %5 ]
%13 = phi i32 [ %86, %83 ], [ %3, %5 ]
%14 = phi i32 [ %85, %83 ], [ %2, %5 ]
%15 = phi i32 [ %84, %83 ], [ %1, %5 ]
br label %19
16: ; preds = %83, %97, %5
%17 = phi i32 [ %7, %5 ], [ %99, %97 ], [ %89, %83 ]
%18 = tail call i32 @putchar(i32 %17)
br label %105
19: ; preds = %10, %97
%20 = phi i32 [ %11, %10 ], [ %99, %97 ]
%21 = phi i32 [ %12, %10 ], [ %96, %97 ]
%22 = phi i32 [ %13, %10 ], [ %78, %97 ]
%23 = phi i32 [ %14, %10 ], [ %95, %97 ]
%24 = tail call i32 @putchar(i32 %20)
%25 = icmp sgt i32 %22, 1
%26 = icmp eq i32 %21, 1
%27 = and i1 %25, %26
br i1 %27, label %28, label %31
28: ; preds = %19
%29 = lshr i32 %22, 1
%30 = and i32 %22, 1
br label %43
31: ; preds = %19
%32 = icmp eq i32 %22, 1
%33 = icmp sgt i32 %21, 1
%34 = and i1 %32, %33
br i1 %34, label %35, label %38
35: ; preds = %31
%36 = lshr i32 %21, 1
%37 = and i32 %21, 1
br label %43
38: ; preds = %31
%39 = srem i32 %22, 2
%40 = srem i32 %21, 2
%41 = sdiv i32 %22, 2
%42 = sdiv i32 %21, 2
br label %43
43: ; preds = %35, %38, %28
%44 = phi i32 [ 1, %28 ], [ %37, %35 ], [ %40, %38 ]
%45 = phi i32 [ %29, %28 ], [ 1, %35 ], [ %41, %38 ]
%46 = phi i32 [ 1, %28 ], [ %36, %35 ], [ %42, %38 ]
%47 = phi i32 [ %30, %28 ], [ 1, %35 ], [ %39, %38 ]
%48 = or i32 %21, %22
%49 = icmp sgt i32 %48, -1
br i1 %49, label %52, label %50
50: ; preds = %43
%51 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str, i64 0, i64 0))
br label %105
52: ; preds = %43
%53 = icmp eq i32 %22, 1
%54 = and i1 %53, %26
br i1 %54, label %55, label %57
55: ; preds = %52
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.2, i64 0, i64 0), i32 %15, i32 %23)
br label %105
57: ; preds = %52
%58 = icmp ne i32 %47, 0
%59 = icmp ne i32 %44, 0
%60 = and i1 %59, %58
br i1 %60, label %61, label %64
61: ; preds = %57
%62 = add nsw i32 %45, 1
%63 = add nsw i32 %46, 1
br label %77
64: ; preds = %57
%65 = icmp eq i32 %47, 0
%66 = or i1 %59, %65
br i1 %66, label %71, label %67
67: ; preds = %64
%68 = xor i1 %53, true
%69 = zext i1 %68 to i32
%70 = add nsw i32 %45, %69
br label %77
71: ; preds = %64
%72 = and i1 %59, %65
br i1 %72, label %73, label %77
73: ; preds = %71
%74 = xor i1 %26, true
%75 = zext i1 %74 to i32
%76 = add nsw i32 %46, %75
br label %77
77: ; preds = %73, %67, %71, %61
%78 = phi i32 [ %62, %61 ], [ %70, %67 ], [ %45, %73 ], [ %45, %71 ]
%79 = phi i32 [ %63, %61 ], [ %46, %67 ], [ %76, %73 ], [ %46, %71 ]
br i1 %27, label %80, label %92
80: ; preds = %77
tail call void @decodeBtoD(i8* %0, i32 %15, i32 %23, i32 %78, i32 %79)
%81 = add nsw i32 %78, %15
%82 = sub nsw i32 %22, %78
br label %83
83: ; preds = %80, %102
%84 = phi i32 [ %103, %102 ], [ %81, %80 ]
%85 = phi i32 [ %95, %102 ], [ %23, %80 ]
%86 = phi i32 [ %104, %102 ], [ %82, %80 ]
%87 = phi i32 [ %96, %102 ], [ %79, %80 ]
%88 = tail call signext i8 @decodeSubData(i8* %0, i32 %84, i32 %85, i32 %86, i32 %87)
%89 = sext i8 %88 to i32
%90 = and i8 %88, -2
%91 = icmp eq i8 %90, 48
br i1 %91, label %16, label %10
92: ; preds = %77
%93 = icmp sgt i32 %21, 1
%94 = and i1 %53, %93
tail call void @decodeBtoD(i8* %0, i32 %15, i32 %23, i32 %78, i32 %79)
%95 = add nsw i32 %79, %23
%96 = sub nsw i32 %21, %79
br i1 %94, label %97, label %102
97: ; preds = %92
%98 = tail call signext i8 @decodeSubData(i8* %0, i32 %15, i32 %95, i32 %78, i32 %96)
%99 = sext i8 %98 to i32
%100 = and i8 %98, -2
%101 = icmp eq i8 %100, 48
br i1 %101, label %16, label %19
102: ; preds = %92
tail call void @decodeBtoD(i8* %0, i32 %15, i32 %95, i32 %78, i32 %96)
%103 = add nsw i32 %78, %15
%104 = sub nsw i32 %22, %78
tail call void @decodeBtoD(i8* %0, i32 %103, i32 %23, i32 %104, i32 %79)
br label %83
105: ; preds = %16, %55, %50
ret void
}