int diagonally(char board[12][12], int columnNumber, int rowNumber) {
  if ((((board[rowNumber - 1][columnNumber - 1] == '#') &&
        (rowNumber - 1 >= 0) && (columnNumber - 1 >= 0)) &&
       ((board[rowNumber - 2][columnNumber - 2] == '#') &&
        (rowNumber - 2 >= 0) && (columnNumber - 2 >= 0))) ||
      (((board[rowNumber - 1][columnNumber - 1] == '#') &&
        (rowNumber - 1 >= 0) && (columnNumber - 1 >= 0)) &&
       ((board[rowNumber + 1][columnNumber + 1] == '#') &&
        (rowNumber + 1 < 12) && (columnNumber + 1 < 12))) ||
      (((board[rowNumber + 1][columnNumber + 1] == '#') &&
        (rowNumber + 1 < 12) && (columnNumber + 1 < 12)) &&
       ((board[rowNumber + 2][columnNumber + 2] == '#') &&
        (rowNumber + 2 < 12) && (columnNumber + 2 < 12))) ||
      (((board[rowNumber - 1][columnNumber + 1] == '#') &&
        (rowNumber - 1 >= 0) && (columnNumber + 1 < 12)) &&
       ((board[rowNumber - 2][columnNumber + 2] == '#') &&
        (rowNumber - 2 >= 0) && (columnNumber + 2 < 12))) ||
      (((board[rowNumber - 1][columnNumber + 1] == '#') &&
        (rowNumber - 1 >= 0) && (columnNumber + 1 < 12)) &&
       ((board[rowNumber + 1][columnNumber - 1] == '#') &&
        (rowNumber + 1 < 12) && (columnNumber - 1 >= 0))) ||
      (((board[rowNumber + 1][columnNumber - 1] == '#') &&
        (rowNumber + 1 < 12) && (columnNumber - 1 >= 0)) &&
       ((board[rowNumber + 2][columnNumber - 2] == '#') &&
        (rowNumber + 2 < 12) && (columnNumber - 2 >= 0))))
    return 1;
  else
    return 0;
}


x86 assembly (clang, -O0):
<diagonally>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    119e <diagonally+0x9e>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     119e <diagonally+0x9e>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     119e <diagonally+0x9e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    119e <diagonally+0x9e>
mov    -0x18(%rbp),%eax
sub    $0x2,%eax
cmp    $0x0,%eax
jl     119e <diagonally+0x9e>
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
cmp    $0x0,%eax
jge    146e <diagonally+0x36e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    122e <diagonally+0x12e>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     122e <diagonally+0x12e>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     122e <diagonally+0x12e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    122e <diagonally+0x12e>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jge    122e <diagonally+0x12e>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jl     146e <diagonally+0x36e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    12be <diagonally+0x1be>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jge    12be <diagonally+0x1be>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jge    12be <diagonally+0x1be>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    12be <diagonally+0x1be>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
cmp    $0xc,%eax
jge    12be <diagonally+0x1be>
mov    -0x14(%rbp),%eax
add    $0x2,%eax
cmp    $0xc,%eax
jl     146e <diagonally+0x36e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    134e <diagonally+0x24e>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     134e <diagonally+0x24e>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jge    134e <diagonally+0x24e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    134e <diagonally+0x24e>
mov    -0x18(%rbp),%eax
sub    $0x2,%eax
cmp    $0x0,%eax
jl     134e <diagonally+0x24e>
mov    -0x14(%rbp),%eax
add    $0x2,%eax
cmp    $0xc,%eax
jl     146e <diagonally+0x36e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    13de <diagonally+0x2de>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     13de <diagonally+0x2de>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jge    13de <diagonally+0x2de>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    13de <diagonally+0x2de>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jge    13de <diagonally+0x2de>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jge    146e <diagonally+0x36e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    147a <diagonally+0x37a>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cmp    $0xc,%eax
jge    147a <diagonally+0x37a>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jl     147a <diagonally+0x37a>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x23,%eax
jne    147a <diagonally+0x37a>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
cmp    $0xc,%eax
jge    147a <diagonally+0x37a>
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
cmp    $0x0,%eax
jl     147a <diagonally+0x37a>
movl   $0x1,-0x4(%rbp)
jmp    1481 <diagonally+0x381>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<diagonally>:
push   %rbx
lea    -0x1(%rdx),%eax
cltq
movslq %esi,%r10
lea    (%rax,%rax,2),%rax
lea    (%rdi,%rax,4),%r8
test   %r10d,%r10d
jle    1155 <diagonally+0x55>
test   %edx,%edx
jle    1155 <diagonally+0x55>
cmpb   $0x23,-0x1(%r10,%r8,1)
jne    1155 <diagonally+0x55>
mov    $0x1,%eax
cmp    $0x2,%esi
jb     11f8 <diagonally+0xf8>
cmp    $0x2,%edx
jb     11f8 <diagonally+0xf8>
lea    -0x2(%rdx),%ecx
movslq %ecx,%rcx
lea    (%rcx,%rcx,2),%rcx
lea    (%rdi,%rcx,4),%rcx
cmpb   $0x23,-0x2(%r10,%rcx,1)
jne    11f8 <diagonally+0xf8>
pop    %rbx
ret
lea    0x1(%rdx),%ecx
lea    0x1(%rsi),%r9d
movslq %ecx,%rax
movslq %r9d,%rcx
lea    (%rax,%rax,2),%rax
lea    (%rdi,%rax,4),%r9
cmp    $0xa,%esi
jg     119f <diagonally+0x9f>
cmp    $0xa,%edx
jg     119f <diagonally+0x9f>
cmpb   $0x23,(%rcx,%r9,1)
jne    119f <diagonally+0x9f>
cmp    $0x9,%esi
jg     119f <diagonally+0x9f>
cmp    $0x9,%edx
jg     119f <diagonally+0x9f>
lea    0x2(%rdx),%eax
cltq
lea    (%rax,%rax,2),%rax
lea    (%rdi,%rax,4),%rbx
mov    $0x1,%eax
cmpb   $0x23,0x2(%r10,%rbx,1)
je     1153 <diagonally+0x53>
lea    -0x1(%r10),%r11
cmp    $0xa,%esi
jg     122d <diagonally+0x12d>
test   %edx,%edx
jle    122d <diagonally+0x12d>
cmpb   $0x23,(%rcx,%r8,1)
jne    122d <diagonally+0x12d>
mov    $0x1,%eax
cmp    $0x9,%esi
jg     11e0 <diagonally+0xe0>
cmp    $0x2,%edx
jb     11e0 <diagonally+0xe0>
lea    -0x2(%rdx),%ecx
movslq %ecx,%rcx
lea    (%rcx,%rcx,2),%rcx
lea    (%rdi,%rcx,4),%rcx
cmpb   $0x23,0x2(%r10,%rcx,1)
je     1153 <diagonally+0x53>
mov    (%r11,%r9,1),%cl
test   %esi,%esi
jle    1231 <diagonally+0x131>
cmp    $0xa,%edx
jg     1231 <diagonally+0x131>
cmp    $0x23,%cl
je     1153 <diagonally+0x53>
jmp    1231 <diagonally+0x131>
lea    0x1(%rdx),%ecx
lea    0x1(%rsi),%r9d
cmp    $0xa,%esi
ja     115c <diagonally+0x5c>
cmp    $0xa,%edx
ja     115c <diagonally+0x5c>
mov    %esi,%r11d
lea    (%rcx,%rcx,2),%rbx
lea    (%rdi,%rbx,4),%rbx
cmpb   $0x23,0x1(%r11,%rbx,1)
je     1153 <diagonally+0x53>
jmp    115c <diagonally+0x5c>
mov    (%r11,%r9,1),%cl
test   %esi,%esi
jle    1268 <diagonally+0x168>
cmp    $0xa,%edx
jg     1268 <diagonally+0x168>
cmp    $0x23,%cl
jne    1268 <diagonally+0x168>
cmp    $0x2,%esi
jb     1268 <diagonally+0x168>
cmp    $0x9,%edx
jg     1268 <diagonally+0x168>
add    $0x2,%edx
movslq %edx,%rax
lea    (%rax,%rax,2),%rax
lea    (%rdi,%rax,4),%rcx
mov    $0x1,%eax
cmpb   $0x23,-0x2(%r10,%rcx,1)
je     1153 <diagonally+0x53>
xor    %eax,%eax
pop    %rbx
ret

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

LLVM IR (-O2):
define i32 @diagonally([12 x i8]* nocapture %0, i32 %1, i32 %2) {
%4 = add nsw i32 %2, -1
%5 = sext i32 %4 to i64
%6 = add nsw i32 %1, -1
%7 = sext i32 %6 to i64
%8 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %5, i64 %7
%9 = load i8, i8* %8
%10 = icmp eq i8 %9, 35
%11 = icmp sgt i32 %2, 0
%12 = and i1 %11, %10
%13 = icmp sgt i32 %1, 0
%14 = and i1 %13, %12
br i1 %14, label %18, label %15
15: ; preds = %3
%16 = add nsw i32 %2, 1
%17 = add nsw i32 %1, 1
br label %42
18: ; preds = %3
%19 = add nsw i32 %2, -2
%20 = sext i32 %19 to i64
%21 = add nsw i32 %1, -2
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %20, i64 %22
%24 = load i8, i8* %23
%25 = icmp eq i8 %24, 35
%26 = icmp ugt i32 %2, 1
%27 = and i1 %26, %25
%28 = icmp ugt i32 %1, 1
%29 = and i1 %28, %27
br i1 %29, label %111, label %30
30: ; preds = %18
%31 = add nuw nsw i32 %2, 1
%32 = zext i32 %31 to i64
%33 = add nuw nsw i32 %1, 1
%34 = zext i32 %33 to i64
%35 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %32, i64 %34
%36 = load i8, i8* %35
%37 = icmp eq i8 %36, 35
%38 = icmp ult i32 %2, 11
%39 = and i1 %38, %37
%40 = icmp ult i32 %1, 11
%41 = and i1 %40, %39
br i1 %41, label %111, label %42
42: ; preds = %15, %30
%43 = phi i32 [ %17, %15 ], [ %33, %30 ]
%44 = phi i32 [ %16, %15 ], [ %31, %30 ]
%45 = sext i32 %44 to i64
%46 = sext i32 %43 to i64
%47 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %45, i64 %46
%48 = load i8, i8* %47
%49 = icmp eq i8 %48, 35
%50 = icmp slt i32 %2, 11
%51 = and i1 %50, %49
%52 = icmp slt i32 %1, 11
%53 = and i1 %52, %51
br i1 %53, label %54, label %66
54: ; preds = %42
%55 = add nsw i32 %2, 2
%56 = sext i32 %55 to i64
%57 = add nsw i32 %1, 2
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %56, i64 %58
%60 = load i8, i8* %59
%61 = icmp eq i8 %60, 35
%62 = icmp slt i32 %2, 10
%63 = and i1 %62, %61
%64 = icmp slt i32 %1, 10
%65 = and i1 %64, %63
br i1 %65, label %111, label %66
66: ; preds = %54, %42
%67 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %5, i64 %46
%68 = load i8, i8* %67
%69 = icmp eq i8 %68, 35
%70 = and i1 %11, %69
%71 = and i1 %52, %70
br i1 %71, label %75, label %72
72: ; preds = %66
%73 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %45, i64 %7
%74 = load i8, i8* %73
br label %93
75: ; preds = %66
%76 = add nsw i32 %2, -2
%77 = sext i32 %76 to i64
%78 = add nsw i32 %1, 2
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %77, i64 %79
%81 = load i8, i8* %80
%82 = icmp eq i8 %81, 35
%83 = icmp ugt i32 %2, 1
%84 = and i1 %83, %82
%85 = icmp slt i32 %1, 10
%86 = and i1 %85, %84
br i1 %86, label %111, label %87
87: ; preds = %75
%88 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %45, i64 %7
%89 = load i8, i8* %88
%90 = icmp eq i8 %89, 35
%91 = and i1 %50, %90
%92 = and i1 %13, %91
br i1 %92, label %111, label %93
93: ; preds = %72, %87
%94 = phi i8 [ %74, %72 ], [ %89, %87 ]
%95 = icmp eq i8 %94, 35
%96 = and i1 %50, %95
%97 = and i1 %13, %96
br i1 %97, label %98, label %110
98: ; preds = %93
%99 = add nsw i32 %2, 2
%100 = sext i32 %99 to i64
%101 = add nsw i32 %1, -2
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [12 x i8], [12 x i8]* %0, i64 %100, i64 %102
%104 = load i8, i8* %103
%105 = icmp eq i8 %104, 35
%106 = icmp slt i32 %2, 10
%107 = and i1 %106, %105
%108 = icmp ugt i32 %1, 1
%109 = and i1 %108, %107
br i1 %109, label %111, label %110
110: ; preds = %98, %93
br label %111
111: ; preds = %18, %30, %54, %75, %87, %98, %110
%112 = phi i32 [ 0, %110 ], [ 1, %98 ], [ 1, %87 ], [ 1, %75 ], [ 1, %54 ], [ 1, %30 ], [ 1, %18 ]
ret i32 %112
}