long process(int line, int column, int n, char labyrinth[100][100],
             int wasProcessed[100][100]) {
  int result = 0;
  if (labyrinth[line][column] == '#' || wasProcessed[line][column] == 1 ||
      line < 0 || column < 0 || line >= n || column >= n)
    return 0;
  wasProcessed[line][column] = 1;
  if (column == 0) {
    if (line != 0)
      result++;
  } else if (labyrinth[line][column - 1] == '#') {
    result++;
  } else
    result += process(line, column - 1, n, labyrinth, wasProcessed);
  if (line == 0) {
    if (column != 0)
      result++;
  } else if (labyrinth[line - 1][column] == '#') {
    result++;
  } else
    result += process(line - 1, column, n, labyrinth, wasProcessed);
  if (column == (n - 1)) {
    if (line != (n - 1))
      result++;
  } else if (labyrinth[line][column + 1] == '#') {
    result++;
  } else
    result += process(line, column + 1, n, labyrinth, wasProcessed);
  if (line == (n - 1)) {
    if (column != (n - 1))
      result++;
  } else if (labyrinth[line + 1][column] == '#') {
    result++;
  } else
    result += process(line + 1, column, n, labyrinth, wasProcessed);
  return result;
}


x86 assembly (clang, -O0):
<process>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
je     119c <process+0x8c>
mov    -0x28(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x190,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
je     119c <process+0x8c>
cmpl   $0x0,-0xc(%rbp)
jl     119c <process+0x8c>
cmpl   $0x0,-0x10(%rbp)
jl     119c <process+0x8c>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    119c <process+0x8c>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jl     11a9 <process+0x99>
movq   $0x0,-0x8(%rbp)
jmp    13ea <process+0x2da>
mov    -0x28(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x190,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
cmpl   $0x0,-0x10(%rbp)
jne    11e8 <process+0xd8>
cmpl   $0x0,-0xc(%rbp)
je     11e3 <process+0xd3>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1246 <process+0x136>
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    121b <process+0x10b>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1241 <process+0x131>
mov    -0xc(%rbp),%edi
mov    -0x10(%rbp),%esi
sub    $0x1,%esi
mov    -0x14(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
call   1030 <process@plt>
mov    %rax,%rcx
movslq -0x2c(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x2c(%rbp)
jmp    1246 <process+0x136>
cmpl   $0x0,-0xc(%rbp)
jne    1268 <process+0x158>
cmpl   $0x0,-0x10(%rbp)
je     1263 <process+0x153>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12c6 <process+0x1b6>
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    129b <process+0x18b>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12c1 <process+0x1b1>
mov    -0xc(%rbp),%edi
sub    $0x1,%edi
mov    -0x10(%rbp),%esi
mov    -0x14(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
call   1030 <process@plt>
mov    %rax,%rcx
movslq -0x2c(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x2c(%rbp)
jmp    12c6 <process+0x1b6>
mov    -0x10(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    12f6 <process+0x1e6>
mov    -0xc(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     12f1 <process+0x1e1>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1354 <process+0x244>
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    1329 <process+0x219>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    134f <process+0x23f>
mov    -0xc(%rbp),%edi
mov    -0x10(%rbp),%esi
add    $0x1,%esi
mov    -0x14(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
call   1030 <process@plt>
mov    %rax,%rcx
movslq -0x2c(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x2c(%rbp)
jmp    1354 <process+0x244>
mov    -0xc(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1384 <process+0x274>
mov    -0x10(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     137f <process+0x26f>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    13e2 <process+0x2d2>
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    13b7 <process+0x2a7>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    13dd <process+0x2cd>
mov    -0xc(%rbp),%edi
add    $0x1,%edi
mov    -0x10(%rbp),%esi
mov    -0x14(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
call   1030 <process@plt>
mov    %rax,%rcx
movslq -0x2c(%rbp),%rax
add    %rcx,%rax
mov    %eax,-0x2c(%rbp)
jmp    13e2 <process+0x2d2>
movslq -0x2c(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<process>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rcx,%r15
movslq %edi,%rcx
movslq %esi,%r14
imul   $0x64,%rcx,%r12
add    %r15,%r12
cmpb   $0x23,(%r14,%r12,1)
jne    113c <process+0x2c>
xor    %eax,%eax
jmp    1286 <process+0x176>
mov    %esi,%r13d
xor    %eax,%eax
cmp    %edx,%esi
jge    1286 <process+0x176>
mov    %edi,%ebx
cmp    %edx,%edi
jge    1286 <process+0x176>
mov    %r13d,%esi
or     %ebx,%esi
js     1286 <process+0x176>
imul   $0x190,%rcx,%rcx
add    %r8,%rcx
cmpl   $0x1,(%rcx,%r14,4)
je     1286 <process+0x176>
lea    (%rcx,%r14,4),%rax
movl   $0x1,(%rax)
test   %r13d,%r13d
je     11ef <process+0xdf>
lea    -0x1(%r13),%esi
mov    $0x1,%ebp
cmpb   $0x23,(%rsi,%r12,1)
je     11af <process+0x9f>
mov    %ebx,%edi
mov    %r15,%rcx
mov    %r8,%rbp
mov    %rdx,0x8(%rsp)
call   1030 <process@plt>
mov    0x8(%rsp),%rdx
mov    %rbp,%r8
mov    %rax,%rbp
test   %ebx,%ebx
je     11fb <process+0xeb>
lea    -0x1(%rbx),%edi
imul   $0x64,%rdi,%rcx
add    %r15,%rcx
mov    $0x1,%eax
cmpb   $0x23,(%r14,%rcx,1)
je     1203 <process+0xf3>
mov    %r13d,%esi
mov    %r15,%rcx
mov    %r8,0x10(%rsp)
mov    0x10(%rsp),%r8
mov    %rdx,0x8(%rsp)
call   1030 <process@plt>
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%r8
jmp    1203 <process+0xf3>
xor    %ebp,%ebp
test   %ebx,%ebx
setne  %bpl
test   %ebx,%ebx
jne    11b3 <process+0xa3>
xor    %eax,%eax
test   %r13d,%r13d
setne  %al
add    %rax,%rbp
lea    -0x1(%rdx),%ecx
cmp    %r13d,%ecx
jne    1218 <process+0x108>
xor    %eax,%eax
cmp    %ebx,%r13d
setne  %al
jmp    124a <process+0x13a>
lea    0x1(%r13),%esi
mov    $0x1,%eax
cmpb   $0x23,(%rsi,%r12,1)
je     124a <process+0x13a>
mov    %ebx,%edi
mov    %ecx,0x10(%rsp)
mov    %r15,%rcx
mov    %r8,%r12
mov    %rdx,0x8(%rsp)
call   1030 <process@plt>
mov    0x10(%rsp),%ecx
mov    0x8(%rsp),%rdx
mov    %r12,%r8
add    %rax,%rbp
cmp    %ebx,%ecx
jne    125b <process+0x14b>
xor    %eax,%eax
cmp    %r13d,%ecx
setne  %al
jmp    1281 <process+0x171>
add    $0x1,%ebx
movslq %ebx,%rax
imul   $0x64,%rax,%rcx
add    %r15,%rcx
mov    $0x1,%eax
cmpb   $0x23,(%r14,%rcx,1)
je     1281 <process+0x171>
mov    %ebx,%edi
mov    %r13d,%esi
mov    %r15,%rcx
call   1030 <process@plt>
add    %eax,%ebp
movslq %ebp,%rax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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