#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 count_mines(const char **field, size_t col, size_t row, size_t cols,
                size_t rows) {
  int result = 0;
  if (row == 0) {
    if (col == 0) {
      result += (field[row][col + 1] == '*') ? 1 : 0;
      if (row + 1 != rows)
        result += (field[row + 1][col + 1] == '*') ? 1 : 0;
    } else if (col + 1 == cols) {
      result += (field[row][col - 1] == '*') ? 1 : 0;
      if (row + 1 != rows)
        result += (field[row + 1][col - 1] == '*') ? 1 : 0;
    } else {
      result += (field[row][col + 1] == '*') ? 1 : 0;
      result += (field[row][col - 1] == '*') ? 1 : 0;
      if (row + 1 != rows) {
        result += (field[row + 1][col + 1] == '*') ? 1 : 0;
        result += (field[row + 1][col - 1] == '*') ? 1 : 0;
      }
    }
    if (row + 1 != rows)
      result += (field[row + 1][col] == '*') ? 1 : 0;
  } else if (row + 1 == rows) {
    if (col == 0) {
      result += (field[row][col + 1] == '*') ? 1 : 0;
      result += (field[row - 1][col + 1] == '*') ? 1 : 0;
    } else if (col + 1 == cols) {
      result += (field[row][col - 1] == '*') ? 1 : 0;
      result += (field[row - 1][col - 1] == '*') ? 1 : 0;
    } else {
      result += (field[row - 1][col + 1] == '*') ? 1 : 0;
      result += (field[row - 1][col - 1] == '*') ? 1 : 0;
      result += (field[row][col + 1] == '*') ? 1 : 0;
      result += (field[row][col - 1] == '*') ? 1 : 0;
    }
    result += (field[row - 1][col] == '*') ? 1 : 0;
  } else {
    result += (field[row][col + 1] == '*') ? 1 : 0;
    result += (field[row][col - 1] == '*') ? 1 : 0;
    result += (field[row + 1][col] == '*') ? 1 : 0;
    result += (field[row - 1][col] == '*') ? 1 : 0;
    result += (field[row - 1][col - 1] == '*') ? 1 : 0;
    result += (field[row + 1][col - 1] == '*') ? 1 : 0;
    result += (field[row - 1][col + 1] == '*') ? 1 : 0;
    result += (field[row + 1][col + 1] == '*') ? 1 : 0;
  }
  return result;
}


x86 assembly (clang, -O0):
<count_mines>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    1320 <count_mines+0x220>
cmpq   $0x0,-0x10(%rbp)
jne    119d <count_mines+0x9d>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    -0x28(%rbp),%rax
je     1198 <count_mines+0x98>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    12e1 <count_mines+0x1e1>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
cmp    -0x20(%rbp),%rax
jne    121d <count_mines+0x11d>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    -0x28(%rbp),%rax
je     1218 <count_mines+0x118>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    12dc <count_mines+0x1dc>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    -0x28(%rbp),%rax
je     12d7 <count_mines+0x1d7>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    12dc <count_mines+0x1dc>
jmp    12e1 <count_mines+0x1e1>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    -0x28(%rbp),%rax
je     131b <count_mines+0x21b>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1645 <count_mines+0x545>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
cmp    -0x28(%rbp),%rax
jne    14ea <count_mines+0x3ea>
cmpq   $0x0,-0x10(%rbp)
jne    1396 <count_mines+0x296>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    14ba <count_mines+0x3ba>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
cmp    -0x20(%rbp),%rax
jne    1407 <count_mines+0x307>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    14b5 <count_mines+0x3b5>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    14ba <count_mines+0x3ba>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1640 <count_mines+0x540>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    0x8(%rax,%rcx,8),%rax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x2a,%edx
cmove  %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1645 <count_mines+0x545>
mov    -0x2c(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<count_mines>:
test   %rdx,%rdx
je     1140 <count_mines+0x40>
lea    0x1(%rdx),%rax
cmp    %r8,%rax
jne    1180 <count_mines+0x80>
test   %rsi,%rsi
je     1219 <count_mines+0x119>
lea    0x1(%rsi),%rax
cmp    %rcx,%rax
jne    1269 <count_mines+0x169>
lea    -0x1(%rsi),%r8
add    (%rdi,%rdx,8),%r8
mov    -0x8(%rdi,%rdx,8),%rcx
xor    %edx,%edx
cmpb   $0x2a,-0x1(%rcx,%rsi,1)
sete   %dl
jmp    129d <count_mines+0x19d>
test   %rsi,%rsi
je     11f1 <count_mines+0xf1>
lea    0x1(%rsi),%rax
mov    (%rdi),%rdx
cmp    %rcx,%rax
jne    1231 <count_mines+0x131>
xor    %eax,%eax
cmpb   $0x2a,-0x1(%rsi,%rdx,1)
sete   %al
cmp    $0x1,%r8
je     12b5 <count_mines+0x1b5>
mov    0x8(%rdi),%rcx
xor    %edx,%edx
cmpb   $0x2a,-0x1(%rcx,%rsi,1)
sete   %dl
jmp    12a6 <count_mines+0x1a6>
mov    (%rdi,%rdx,8),%r8
xor    %ecx,%ecx
cmpb   $0x2a,0x1(%r8,%rsi,1)
sete   %cl
xor    %eax,%eax
cmpb   $0x2a,-0x1(%r8,%rsi,1)
mov    -0x8(%rdi,%rdx,8),%r8
sete   %al
add    %ecx,%eax
mov    0x8(%rdi,%rdx,8),%rdx
xor    %ecx,%ecx
cmpb   $0x2a,(%rdx,%rsi,1)
sete   %cl
add    %eax,%ecx
xor    %eax,%eax
cmpb   $0x2a,(%r8,%rsi,1)
sete   %al
add    %ecx,%eax
xor    %ecx,%ecx
cmpb   $0x2a,-0x1(%r8,%rsi,1)
sete   %cl
add    %eax,%ecx
xor    %edi,%edi
cmpb   $0x2a,-0x1(%rdx,%rsi,1)
sete   %dil
add    %ecx,%edi
xor    %eax,%eax
cmpb   $0x2a,0x1(%r8,%rsi,1)
sete   %al
add    %edi,%eax
lea    (%rdx,%rsi,1),%rcx
add    $0x1,%rcx
jmp    12ab <count_mines+0x1ab>
mov    (%rdi),%rcx
xor    %eax,%eax
cmpb   $0x2a,0x1(%rcx)
sete   %al
cmp    $0x1,%r8
je     12b5 <count_mines+0x1b5>
mov    0x8(%rdi),%rcx
xor    %edx,%edx
cmpb   $0x2a,0x1(%rcx)
sete   %dl
jmp    12a6 <count_mines+0x1a6>
mov    -0x8(%rdi,%rdx,8),%rcx
mov    (%rdi,%rdx,8),%r8
add    $0x1,%r8
xor    %edx,%edx
cmpb   $0x2a,0x1(%rcx)
sete   %dl
jmp    129d <count_mines+0x19d>
xor    %ecx,%ecx
cmpb   $0x2a,0x1(%rdx,%rsi,1)
sete   %cl
xor    %eax,%eax
cmpb   $0x2a,-0x1(%rdx,%rsi,1)
sete   %al
add    %ecx,%eax
cmp    $0x1,%r8
je     12b5 <count_mines+0x1b5>
mov    0x8(%rdi),%rcx
xor    %edi,%edi
cmpb   $0x2a,0x1(%rcx,%rsi,1)
sete   %dil
mov    %eax,%edx
add    %edi,%edx
xor    %eax,%eax
cmpb   $0x2a,-0x1(%rcx,%rsi,1)
jmp    12a3 <count_mines+0x1a3>
mov    -0x8(%rdi,%rdx,8),%rcx
mov    (%rdi,%rdx,8),%rax
xor    %edx,%edx
cmpb   $0x2a,0x1(%rcx,%rsi,1)
sete   %dl
xor    %edi,%edi
cmpb   $0x2a,-0x1(%rcx,%rsi,1)
sete   %dil
add    %edx,%edi
xor    %edx,%edx
cmpb   $0x2a,0x1(%rax,%rsi,1)
sete   %dl
add    %edi,%edx
lea    (%rax,%rsi,1),%r8
add    $0xffffffffffffffff,%r8
xor    %eax,%eax
cmpb   $0x2a,(%r8)
sete   %al
add    %edx,%eax
add    %rsi,%rcx
xor    %edx,%edx
cmpb   $0x2a,(%rcx)
sete   %dl
add    %edx,%eax
ret

LLVM IR (-O0):
define i32 @count_mines(i8** %0, i64 %1, i64 %2, i64 %3, i64 %4) {
%6 = alloca i8**
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i32
store i8** %0, i8*** %6
store i64 %1, i64* %7
store i64 %2, i64* %8
store i64 %3, i64* %9
store i64 %4, i64* %10
store i32 0, i32* %11
%12 = load i64, i64* %8
%13 = icmp eq i64 %12, 0
br i1 %13, label %14, label %181
14: ; preds = %5
%15 = load i64, i64* %7
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %53
17: ; preds = %14
%18 = load i8**, i8*** %6
%19 = load i64, i64* %8
%20 = getelementptr inbounds i8*, i8** %18, i64 %19
%21 = load i8*, i8** %20
%22 = load i64, i64* %7
%23 = add i64 %22, 1
%24 = getelementptr inbounds i8, i8* %21, i64 %23
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = icmp eq i32 %26, 42
%28 = zext i1 %27 to i64
%29 = select i1 %27, i32 1, i32 0
%30 = load i32, i32* %11
%31 = add nsw i32 %30, %29
store i32 %31, i32* %11
%32 = load i64, i64* %8
%33 = add i64 %32, 1
%34 = load i64, i64* %10
%35 = icmp ne i64 %33, %34
br i1 %35, label %36, label %52
36: ; preds = %17
%37 = load i8**, i8*** %6
%38 = load i64, i64* %8
%39 = add i64 %38, 1
%40 = getelementptr inbounds i8*, i8** %37, i64 %39
%41 = load i8*, i8** %40
%42 = load i64, i64* %7
%43 = add i64 %42, 1
%44 = getelementptr inbounds i8, i8* %41, i64 %43
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = icmp eq i32 %46, 42
%48 = zext i1 %47 to i64
%49 = select i1 %47, i32 1, i32 0
%50 = load i32, i32* %11
%51 = add nsw i32 %50, %49
store i32 %51, i32* %11
br label %52
52: ; preds = %36, %17
br label %160
53: ; preds = %14
%54 = load i64, i64* %7
%55 = add i64 %54, 1
%56 = load i64, i64* %9
%57 = icmp eq i64 %55, %56
br i1 %57, label %58, label %94
58: ; preds = %53
%59 = load i8**, i8*** %6
%60 = load i64, i64* %8
%61 = getelementptr inbounds i8*, i8** %59, i64 %60
%62 = load i8*, i8** %61
%63 = load i64, i64* %7
%64 = sub i64 %63, 1
%65 = getelementptr inbounds i8, i8* %62, i64 %64
%66 = load i8, i8* %65
%67 = sext i8 %66 to i32
%68 = icmp eq i32 %67, 42
%69 = zext i1 %68 to i64
%70 = select i1 %68, i32 1, i32 0
%71 = load i32, i32* %11
%72 = add nsw i32 %71, %70
store i32 %72, i32* %11
%73 = load i64, i64* %8
%74 = add i64 %73, 1
%75 = load i64, i64* %10
%76 = icmp ne i64 %74, %75
br i1 %76, label %77, label %93
77: ; preds = %58
%78 = load i8**, i8*** %6
%79 = load i64, i64* %8
%80 = add i64 %79, 1
%81 = getelementptr inbounds i8*, i8** %78, i64 %80
%82 = load i8*, i8** %81
%83 = load i64, i64* %7
%84 = sub i64 %83, 1
%85 = getelementptr inbounds i8, i8* %82, i64 %84
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = icmp eq i32 %87, 42
%89 = zext i1 %88 to i64
%90 = select i1 %88, i32 1, i32 0
%91 = load i32, i32* %11
%92 = add nsw i32 %91, %90
store i32 %92, i32* %11
br label %93
93: ; preds = %77, %58
br label %159
94: ; preds = %53
%95 = load i8**, i8*** %6
%96 = load i64, i64* %8
%97 = getelementptr inbounds i8*, i8** %95, i64 %96
%98 = load i8*, i8** %97
%99 = load i64, i64* %7
%100 = add i64 %99, 1
%101 = getelementptr inbounds i8, i8* %98, i64 %100
%102 = load i8, i8* %101
%103 = sext i8 %102 to i32
%104 = icmp eq i32 %103, 42
%105 = zext i1 %104 to i64
%106 = select i1 %104, i32 1, i32 0
%107 = load i32, i32* %11
%108 = add nsw i32 %107, %106
store i32 %108, i32* %11
%109 = load i8**, i8*** %6
%110 = load i64, i64* %8
%111 = getelementptr inbounds i8*, i8** %109, i64 %110
%112 = load i8*, i8** %111
%113 = load i64, i64* %7
%114 = sub i64 %113, 1
%115 = getelementptr inbounds i8, i8* %112, i64 %114
%116 = load i8, i8* %115
%117 = sext i8 %116 to i32
%118 = icmp eq i32 %117, 42
%119 = zext i1 %118 to i64
%120 = select i1 %118, i32 1, i32 0
%121 = load i32, i32* %11
%122 = add nsw i32 %121, %120
store i32 %122, i32* %11
%123 = load i64, i64* %8
%124 = add i64 %123, 1
%125 = load i64, i64* %10
%126 = icmp ne i64 %124, %125
br i1 %126, label %127, label %158
127: ; preds = %94
%128 = load i8**, i8*** %6
%129 = load i64, i64* %8
%130 = add i64 %129, 1
%131 = getelementptr inbounds i8*, i8** %128, i64 %130
%132 = load i8*, i8** %131
%133 = load i64, i64* %7
%134 = add i64 %133, 1
%135 = getelementptr inbounds i8, i8* %132, i64 %134
%136 = load i8, i8* %135
%137 = sext i8 %136 to i32
%138 = icmp eq i32 %137, 42
%139 = zext i1 %138 to i64
%140 = select i1 %138, i32 1, i32 0
%141 = load i32, i32* %11
%142 = add nsw i32 %141, %140
store i32 %142, i32* %11
%143 = load i8**, i8*** %6
%144 = load i64, i64* %8
%145 = add i64 %144, 1
%146 = getelementptr inbounds i8*, i8** %143, i64 %145
%147 = load i8*, i8** %146
%148 = load i64, i64* %7
%149 = sub i64 %148, 1
%150 = getelementptr inbounds i8, i8* %147, i64 %149
%151 = load i8, i8* %150
%152 = sext i8 %151 to i32
%153 = icmp eq i32 %152, 42
%154 = zext i1 %153 to i64
%155 = select i1 %153, i32 1, i32 0
%156 = load i32, i32* %11
%157 = add nsw i32 %156, %155
store i32 %157, i32* %11
br label %158
158: ; preds = %127, %94
br label %159
159: ; preds = %158, %93
br label %160
160: ; preds = %159, %52
%161 = load i64, i64* %8
%162 = add i64 %161, 1
%163 = load i64, i64* %10
%164 = icmp ne i64 %162, %163
br i1 %164, label %165, label %180
165: ; preds = %160
%166 = load i8**, i8*** %6
%167 = load i64, i64* %8
%168 = add i64 %167, 1
%169 = getelementptr inbounds i8*, i8** %166, i64 %168
%170 = load i8*, i8** %169
%171 = load i64, i64* %7
%172 = getelementptr inbounds i8, i8* %170, i64 %171
%173 = load i8, i8* %172
%174 = sext i8 %173 to i32
%175 = icmp eq i32 %174, 42
%176 = zext i1 %175 to i64
%177 = select i1 %175, i32 1, i32 0
%178 = load i32, i32* %11
%179 = add nsw i32 %178, %177
store i32 %179, i32* %11
br label %180
180: ; preds = %165, %160
br label %447
181: ; preds = %5
%182 = load i64, i64* %8
%183 = add i64 %182, 1
%184 = load i64, i64* %10
%185 = icmp eq i64 %183, %184
br i1 %185, label %186, label %329
186: ; preds = %181
%187 = load i64, i64* %7
%188 = icmp eq i64 %187, 0
br i1 %188, label %189, label %219
189: ; preds = %186
%190 = load i8**, i8*** %6
%191 = load i64, i64* %8
%192 = getelementptr inbounds i8*, i8** %190, i64 %191
%193 = load i8*, i8** %192
%194 = load i64, i64* %7
%195 = add i64 %194, 1
%196 = getelementptr inbounds i8, i8* %193, i64 %195
%197 = load i8, i8* %196
%198 = sext i8 %197 to i32
%199 = icmp eq i32 %198, 42
%200 = zext i1 %199 to i64
%201 = select i1 %199, i32 1, i32 0
%202 = load i32, i32* %11
%203 = add nsw i32 %202, %201
store i32 %203, i32* %11
%204 = load i8**, i8*** %6
%205 = load i64, i64* %8
%206 = sub i64 %205, 1
%207 = getelementptr inbounds i8*, i8** %204, i64 %206
%208 = load i8*, i8** %207
%209 = load i64, i64* %7
%210 = add i64 %209, 1
%211 = getelementptr inbounds i8, i8* %208, i64 %210
%212 = load i8, i8* %211
%213 = sext i8 %212 to i32
%214 = icmp eq i32 %213, 42
%215 = zext i1 %214 to i64
%216 = select i1 %214, i32 1, i32 0
%217 = load i32, i32* %11
%218 = add nsw i32 %217, %216
store i32 %218, i32* %11
br label %314
219: ; preds = %186
%220 = load i64, i64* %7
%221 = add i64 %220, 1
%222 = load i64, i64* %9
%223 = icmp eq i64 %221, %222
br i1 %223, label %224, label %254
224: ; preds = %219
%225 = load i8**, i8*** %6
%226 = load i64, i64* %8
%227 = getelementptr inbounds i8*, i8** %225, i64 %226
%228 = load i8*, i8** %227
%229 = load i64, i64* %7
%230 = sub i64 %229, 1
%231 = getelementptr inbounds i8, i8* %228, i64 %230
%232 = load i8, i8* %231
%233 = sext i8 %232 to i32
%234 = icmp eq i32 %233, 42
%235 = zext i1 %234 to i64
%236 = select i1 %234, i32 1, i32 0
%237 = load i32, i32* %11
%238 = add nsw i32 %237, %236
store i32 %238, i32* %11
%239 = load i8**, i8*** %6
%240 = load i64, i64* %8
%241 = sub i64 %240, 1
%242 = getelementptr inbounds i8*, i8** %239, i64 %241
%243 = load i8*, i8** %242
%244 = load i64, i64* %7
%245 = sub i64 %244, 1
%246 = getelementptr inbounds i8, i8* %243, i64 %245
%247 = load i8, i8* %246
%248 = sext i8 %247 to i32
%249 = icmp eq i32 %248, 42
%250 = zext i1 %249 to i64
%251 = select i1 %249, i32 1, i32 0
%252 = load i32, i32* %11
%253 = add nsw i32 %252, %251
store i32 %253, i32* %11
br label %313
254: ; preds = %219
%255 = load i8**, i8*** %6
%256 = load i64, i64* %8
%257 = sub i64 %256, 1
%258 = getelementptr inbounds i8*, i8** %255, i64 %257
%259 = load i8*, i8** %258
%260 = load i64, i64* %7
%261 = add i64 %260, 1
%262 = getelementptr inbounds i8, i8* %259, i64 %261
%263 = load i8, i8* %262
%264 = sext i8 %263 to i32
%265 = icmp eq i32 %264, 42
%266 = zext i1 %265 to i64
%267 = select i1 %265, i32 1, i32 0
%268 = load i32, i32* %11
%269 = add nsw i32 %268, %267
store i32 %269, i32* %11
%270 = load i8**, i8*** %6
%271 = load i64, i64* %8
%272 = sub i64 %271, 1
%273 = getelementptr inbounds i8*, i8** %270, i64 %272
%274 = load i8*, i8** %273
%275 = load i64, i64* %7
%276 = sub i64 %275, 1
%277 = getelementptr inbounds i8, i8* %274, i64 %276
%278 = load i8, i8* %277
%279 = sext i8 %278 to i32
%280 = icmp eq i32 %279, 42
%281 = zext i1 %280 to i64
%282 = select i1 %280, i32 1, i32 0
%283 = load i32, i32* %11
%284 = add nsw i32 %283, %282
store i32 %284, i32* %11
%285 = load i8**, i8*** %6
%286 = load i64, i64* %8
%287 = getelementptr inbounds i8*, i8** %285, i64 %286
%288 = load i8*, i8** %287
%289 = load i64, i64* %7
%290 = add i64 %289, 1
%291 = getelementptr inbounds i8, i8* %288, i64 %290
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp eq i32 %293, 42
%295 = zext i1 %294 to i64
%296 = select i1 %294, i32 1, i32 0
%297 = load i32, i32* %11
%298 = add nsw i32 %297, %296
store i32 %298, i32* %11
%299 = load i8**, i8*** %6
%300 = load i64, i64* %8
%301 = getelementptr inbounds i8*, i8** %299, i64 %300
%302 = load i8*, i8** %301
%303 = load i64, i64* %7
%304 = sub i64 %303, 1
%305 = getelementptr inbounds i8, i8* %302, i64 %304
%306 = load i8, i8* %305
%307 = sext i8 %306 to i32
%308 = icmp eq i32 %307, 42
%309 = zext i1 %308 to i64
%310 = select i1 %308, i32 1, i32 0
%311 = load i32, i32* %11
%312 = add nsw i32 %311, %310
store i32 %312, i32* %11
br label %313
313: ; preds = %254, %224
br label %314
314: ; preds = %313, %189
%315 = load i8**, i8*** %6
%316 = load i64, i64* %8
%317 = sub i64 %316, 1
%318 = getelementptr inbounds i8*, i8** %315, i64 %317
%319 = load i8*, i8** %318
%320 = load i64, i64* %7
%321 = getelementptr inbounds i8, i8* %319, i64 %320
%322 = load i8, i8* %321
%323 = sext i8 %322 to i32
%324 = icmp eq i32 %323, 42
%325 = zext i1 %324 to i64
%326 = select i1 %324, i32 1, i32 0
%327 = load i32, i32* %11
%328 = add nsw i32 %327, %326
store i32 %328, i32* %11
br label %446
329: ; preds = %181
%330 = load i8**, i8*** %6
%331 = load i64, i64* %8
%332 = getelementptr inbounds i8*, i8** %330, i64 %331
%333 = load i8*, i8** %332
%334 = load i64, i64* %7
%335 = add i64 %334, 1
%336 = getelementptr inbounds i8, i8* %333, i64 %335
%337 = load i8, i8* %336
%338 = sext i8 %337 to i32
%339 = icmp eq i32 %338, 42
%340 = zext i1 %339 to i64
%341 = select i1 %339, i32 1, i32 0
%342 = load i32, i32* %11
%343 = add nsw i32 %342, %341
store i32 %343, i32* %11
%344 = load i8**, i8*** %6
%345 = load i64, i64* %8
%346 = getelementptr inbounds i8*, i8** %344, i64 %345
%347 = load i8*, i8** %346
%348 = load i64, i64* %7
%349 = sub i64 %348, 1
%350 = getelementptr inbounds i8, i8* %347, i64 %349
%351 = load i8, i8* %350
%352 = sext i8 %351 to i32
%353 = icmp eq i32 %352, 42
%354 = zext i1 %353 to i64
%355 = select i1 %353, i32 1, i32 0
%356 = load i32, i32* %11
%357 = add nsw i32 %356, %355
store i32 %357, i32* %11
%358 = load i8**, i8*** %6
%359 = load i64, i64* %8
%360 = add i64 %359, 1
%361 = getelementptr inbounds i8*, i8** %358, i64 %360
%362 = load i8*, i8** %361
%363 = load i64, i64* %7
%364 = getelementptr inbounds i8, i8* %362, i64 %363
%365 = load i8, i8* %364
%366 = sext i8 %365 to i32
%367 = icmp eq i32 %366, 42
%368 = zext i1 %367 to i64
%369 = select i1 %367, i32 1, i32 0
%370 = load i32, i32* %11
%371 = add nsw i32 %370, %369
store i32 %371, i32* %11
%372 = load i8**, i8*** %6
%373 = load i64, i64* %8
%374 = sub i64 %373, 1
%375 = getelementptr inbounds i8*, i8** %372, i64 %374
%376 = load i8*, i8** %375
%377 = load i64, i64* %7
%378 = getelementptr inbounds i8, i8* %376, i64 %377
%379 = load i8, i8* %378
%380 = sext i8 %379 to i32
%381 = icmp eq i32 %380, 42
%382 = zext i1 %381 to i64
%383 = select i1 %381, i32 1, i32 0
%384 = load i32, i32* %11
%385 = add nsw i32 %384, %383
store i32 %385, i32* %11
%386 = load i8**, i8*** %6
%387 = load i64, i64* %8
%388 = sub i64 %387, 1
%389 = getelementptr inbounds i8*, i8** %386, i64 %388
%390 = load i8*, i8** %389
%391 = load i64, i64* %7
%392 = sub i64 %391, 1
%393 = getelementptr inbounds i8, i8* %390, i64 %392
%394 = load i8, i8* %393
%395 = sext i8 %394 to i32
%396 = icmp eq i32 %395, 42
%397 = zext i1 %396 to i64
%398 = select i1 %396, i32 1, i32 0
%399 = load i32, i32* %11
%400 = add nsw i32 %399, %398
store i32 %400, i32* %11
%401 = load i8**, i8*** %6
%402 = load i64, i64* %8
%403 = add i64 %402, 1
%404 = getelementptr inbounds i8*, i8** %401, i64 %403
%405 = load i8*, i8** %404
%406 = load i64, i64* %7
%407 = sub i64 %406, 1
%408 = getelementptr inbounds i8, i8* %405, i64 %407
%409 = load i8, i8* %408
%410 = sext i8 %409 to i32
%411 = icmp eq i32 %410, 42
%412 = zext i1 %411 to i64
%413 = select i1 %411, i32 1, i32 0
%414 = load i32, i32* %11
%415 = add nsw i32 %414, %413
store i32 %415, i32* %11
%416 = load i8**, i8*** %6
%417 = load i64, i64* %8
%418 = sub i64 %417, 1
%419 = getelementptr inbounds i8*, i8** %416, i64 %418
%420 = load i8*, i8** %419
%421 = load i64, i64* %7
%422 = add i64 %421, 1
%423 = getelementptr inbounds i8, i8* %420, i64 %422
%424 = load i8, i8* %423
%425 = sext i8 %424 to i32
%426 = icmp eq i32 %425, 42
%427 = zext i1 %426 to i64
%428 = select i1 %426, i32 1, i32 0
%429 = load i32, i32* %11
%430 = add nsw i32 %429, %428
store i32 %430, i32* %11
%431 = load i8**, i8*** %6
%432 = load i64, i64* %8
%433 = add i64 %432, 1
%434 = getelementptr inbounds i8*, i8** %431, i64 %433
%435 = load i8*, i8** %434
%436 = load i64, i64* %7
%437 = add i64 %436, 1
%438 = getelementptr inbounds i8, i8* %435, i64 %437
%439 = load i8, i8* %438
%440 = sext i8 %439 to i32
%441 = icmp eq i32 %440, 42
%442 = zext i1 %441 to i64
%443 = select i1 %441, i32 1, i32 0
%444 = load i32, i32* %11
%445 = add nsw i32 %444, %443
store i32 %445, i32* %11
br label %446
446: ; preds = %329, %314
br label %447
447: ; preds = %446, %180
%448 = load i32, i32* %11
ret i32 %448
}

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