int check_pos(int **board, int x, int y, int q) {
  int i = 0, j = 0;
  int flag = 0;
  for (i = 0; i < q; i++) {
    j = y;
    if (board[i][j] == 20) {
      flag = 10;
    }
  }
  for (j = 0; j < q; j++) {
    i = x;
    if (board[i][j] == 20) {
      flag = 10;
    }
  }
  for (i = x, j = y; i < q && j < q; i++, j++) {
    if (board[i][j] == 20) {
      flag = 10;
    }
  }
  for (i = x, j = y; i >= 0 && j >= 0; i--, j--) {
    if (board[i][j] == 20) {
      flag = 10;
    }
  }
  for (i = x, j = y; i < q && j >= 0; i++, j--) {
    if (board[i][j] == 20) {
      flag = 10;
    }
  }
  for (i = x, j = y; i >= 0 && j < q; i--, j++) {
    if (board[i][j] == 20) {
      flag = 10;
    }
  }
  return flag;
}


x86 assembly (clang, -O0):
<check_pos>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1173 <check_pos+0x73>
mov    -0x10(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
cmpl   $0x14,(%rax,%rcx,4)
jne    1160 <check_pos+0x60>
movl   $0xa,-0x20(%rbp)
jmp    1165 <check_pos+0x65>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    112d <check_pos+0x2d>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11c0 <check_pos+0xc0>
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
cmpl   $0x14,(%rax,%rcx,4)
jne    11ad <check_pos+0xad>
movl   $0xa,-0x20(%rbp)
jmp    11b2 <check_pos+0xb2>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    117a <check_pos+0x7a>
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
xor    %eax,%eax
cmp    -0x14(%rbp),%ecx
mov    %al,-0x21(%rbp)
jge    11e9 <check_pos+0xe9>
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
setl   %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    11f9 <check_pos+0xf9>
jmp    1236 <check_pos+0x136>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
cmpl   $0x14,(%rax,%rcx,4)
jne    121a <check_pos+0x11a>
movl   $0xa,-0x20(%rbp)
jmp    121f <check_pos+0x11f>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11cc <check_pos+0xcc>
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x1c(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x18(%rbp)
mov    %al,-0x22(%rbp)
jl     125b <check_pos+0x15b>
cmpl   $0x0,-0x1c(%rbp)
setge  %al
mov    %al,-0x22(%rbp)
mov    -0x22(%rbp),%al
test   $0x1,%al
jne    126b <check_pos+0x16b>
jmp    12a8 <check_pos+0x1a8>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
cmpl   $0x14,(%rax,%rcx,4)
jne    128c <check_pos+0x18c>
movl   $0xa,-0x20(%rbp)
jmp    1291 <check_pos+0x191>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1242 <check_pos+0x142>
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
xor    %eax,%eax
cmp    -0x14(%rbp),%ecx
mov    %al,-0x23(%rbp)
jge    12cf <check_pos+0x1cf>
cmpl   $0x0,-0x1c(%rbp)
setge  %al
mov    %al,-0x23(%rbp)
mov    -0x23(%rbp),%al
test   $0x1,%al
jne    12df <check_pos+0x1df>
jmp    131c <check_pos+0x21c>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
cmpl   $0x14,(%rax,%rcx,4)
jne    1300 <check_pos+0x200>
movl   $0xa,-0x20(%rbp)
jmp    1305 <check_pos+0x205>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    12b4 <check_pos+0x1b4>
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x1c(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x18(%rbp)
mov    %al,-0x24(%rbp)
jl     1343 <check_pos+0x243>
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
setl   %al
mov    %al,-0x24(%rbp)
mov    -0x24(%rbp),%al
test   $0x1,%al
jne    1353 <check_pos+0x253>
jmp    1390 <check_pos+0x290>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
cmpl   $0x14,(%rax,%rcx,4)
jne    1374 <check_pos+0x274>
movl   $0xa,-0x20(%rbp)
jmp    1379 <check_pos+0x279>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1328 <check_pos+0x228>
mov    -0x20(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_pos>:
push   %rbp
push   %r15
push   %r14
push   %rbx
movslq %edx,%r8
test   %ecx,%ecx
jle    1127 <check_pos+0x27>
mov    %ecx,%r9d
lea    -0x1(%r9),%rax
mov    %r9d,%r10d
and    $0x3,%r10d
cmp    $0x3,%rax
jae    112e <check_pos+0x2e>
xor    %ebx,%ebx
xor    %eax,%eax
jmp    1183 <check_pos+0x83>
xor    %eax,%eax
jmp    1321 <check_pos+0x221>
mov    %r9d,%r11d
and    $0xfffffffc,%r11d
xor    %ebx,%ebx
mov    $0xa,%r14d
xor    %eax,%eax
nop
mov    (%rdi,%rbx,8),%rbp
mov    0x8(%rdi,%rbx,8),%r15
cmpl   $0x14,0x0(%rbp,%r8,4)
cmove  %r14d,%eax
cmpl   $0x14,(%r15,%r8,4)
cmove  %r14d,%eax
mov    0x10(%rdi,%rbx,8),%rbp
cmpl   $0x14,0x0(%rbp,%r8,4)
mov    0x18(%rdi,%rbx,8),%rbp
cmove  %r14d,%eax
cmpl   $0x14,0x0(%rbp,%r8,4)
cmove  %r14d,%eax
add    $0x4,%rbx
cmp    %rbx,%r11
jne    1140 <check_pos+0x40>
test   %r10,%r10
je     11b7 <check_pos+0xb7>
lea    (%rdi,%rbx,8),%r14
xor    %ebx,%ebx
mov    $0xa,%r11d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%r14,%rbx,8),%rbp
cmpl   $0x14,0x0(%rbp,%r8,4)
cmove  %r11d,%eax
add    $0x1,%rbx
cmp    %rbx,%r10
jne    11a0 <check_pos+0xa0>
test   %ecx,%ecx
jle    1321 <check_pos+0x221>
movslq %esi,%rbp
mov    (%rdi,%rbp,8),%r10
cmp    $0x8,%ecx
jae    11d3 <check_pos+0xd3>
xor    %r11d,%r11d
jmp    1309 <check_pos+0x209>
mov    %r9d,%r11d
and    $0xfffffff8,%r11d
movd   %eax,%xmm8
pshufd $0x0,%xmm8,%xmm1
lea    -0x8(%r11),%rbx
mov    %rbx,%r14
shr    $0x3,%r14
add    $0x1,%r14
test   %rbx,%rbx
je     1426 <check_pos+0x326>
mov    %r14,%r15
and    $0xfffffffffffffffe,%r15
xor    %ebx,%ebx
movdqa 0xdf2(%rip),%xmm3
movdqa 0xdfa(%rip),%xmm4
movdqa %xmm1,%xmm6
movdqa %xmm1,%xmm5
xchg   %ax,%ax
movdqu (%r10,%rbx,4),%xmm7
movdqu 0x10(%r10,%rbx,4),%xmm0
movdqu 0x20(%r10,%rbx,4),%xmm1
movdqu 0x30(%r10,%rbx,4),%xmm2
pcmpeqd %xmm3,%xmm7
pcmpeqd %xmm3,%xmm0
pcmpeqd %xmm3,%xmm1
por    %xmm7,%xmm1
pcmpeqd %xmm3,%xmm2
por    %xmm0,%xmm2
movdqa %xmm1,%xmm0
pandn  %xmm6,%xmm0
pand   %xmm4,%xmm1
por    %xmm0,%xmm1
movdqa %xmm2,%xmm0
pandn  %xmm5,%xmm0
pand   %xmm4,%xmm2
por    %xmm0,%xmm2
add    $0x10,%rbx
movdqa %xmm1,%xmm6
movdqa %xmm2,%xmm5
add    $0xfffffffffffffffe,%r15
jne    1220 <check_pos+0x120>
test   $0x1,%r14b
je     12d8 <check_pos+0x1d8>
movdqu (%r10,%rbx,4),%xmm0
movdqu 0x10(%r10,%rbx,4),%xmm3
movdqa 0xd60(%rip),%xmm4
pcmpeqd %xmm4,%xmm0
pcmpeqd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pandn  %xmm1,%xmm4
movdqa 0xd58(%rip),%xmm1
pand   %xmm1,%xmm0
por    %xmm4,%xmm0
movdqa %xmm3,%xmm4
pandn  %xmm2,%xmm4
pand   %xmm1,%xmm3
por    %xmm4,%xmm3
movdqa %xmm0,%xmm1
movdqa %xmm3,%xmm2
pshufd $0x0,%xmm8,%xmm0
movdqa %xmm1,%xmm3
pcmpeqd %xmm0,%xmm3
pand   %xmm3,%xmm2
pandn  %xmm1,%xmm3
por    %xmm2,%xmm3
pcmpeqd %xmm0,%xmm3
movmskps %xmm3,%ebx
cmp    $0xf,%ebx
mov    $0xa,%ebx
cmovne %ebx,%eax
cmp    %r9,%r11
je     1321 <check_pos+0x221>
mov    $0xa,%ebx
xchg   %ax,%ax
cmpl   $0x14,(%r10,%r11,4)
cmove  %ebx,%eax
add    $0x1,%r11
cmp    %r11,%r9
jne    1310 <check_pos+0x210>
cmp    %ecx,%esi
jge    1364 <check_pos+0x264>
cmp    %ecx,%edx
jge    1364 <check_pos+0x264>
movslq %ecx,%r10
movslq %esi,%rbx
add    $0x1,%rbx
lea    0x1(%r8),%r11
mov    $0xa,%r9d
nopl   (%rax)
mov    -0x8(%rdi,%rbx,8),%rbp
cmpl   $0x14,-0x4(%rbp,%r11,4)
cmove  %r9d,%eax
cmp    %r10,%rbx
jge    1364 <check_pos+0x264>
add    $0x1,%rbx
lea    0x1(%r11),%rbp
cmp    %r10,%r11
mov    %rbp,%r11
jl     1340 <check_pos+0x240>
mov    %esi,%ebp
or     %edx,%ebp
mov    %edx,%r14d
mov    %esi,%r9d
js     13a1 <check_pos+0x2a1>
mov    $0xa,%r10d
mov    %r9,%rbp
mov    %r14,%r11
nopl   0x0(%rax)
mov    (%rdi,%rbp,8),%rbx
cmpl   $0x14,(%rbx,%r11,4)
cmove  %r10d,%eax
test   %ebp,%ebp
jle    13a1 <check_pos+0x2a1>
add    $0xffffffffffffffff,%rbp
lea    -0x1(%r11),%rbx
test   %r11d,%r11d
mov    %rbx,%r11
jg     1380 <check_pos+0x280>
cmp    %ecx,%esi
jge    13e2 <check_pos+0x2e2>
test   %edx,%edx
js     13e2 <check_pos+0x2e2>
movslq %esi,%rbp
movslq %ecx,%r10
add    $0x1,%rbp
mov    $0xa,%r11d
nopl   0x0(%rax)
mov    -0x8(%rdi,%rbp,8),%rbx
cmpl   $0x14,(%rbx,%r14,4)
cmove  %r11d,%eax
add    $0xffffffffffffffff,%r14
setb   %bl
cmp    %r10,%rbp
jge    13e2 <check_pos+0x2e2>
add    $0x1,%rbp
test   %bl,%bl
jne    13c0 <check_pos+0x2c0>
test   %esi,%esi
js     141f <check_pos+0x31f>
cmp    %ecx,%edx
jge    141f <check_pos+0x31f>
movslq %ecx,%rcx
add    $0x1,%r8
mov    $0xa,%edx
cs nopw 0x0(%rax,%rax,1)
mov    (%rdi,%r9,8),%rsi
cmpl   $0x14,-0x4(%rsi,%r8,4)
cmove  %edx,%eax
add    $0xffffffffffffffff,%r9
jae    141f <check_pos+0x31f>
lea    0x1(%r8),%rsi
cmp    %rcx,%r8
mov    %rsi,%r8
jl     1400 <check_pos+0x300>
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ebx,%ebx
movdqa %xmm1,%xmm2
test   $0x1,%r14b
jne    128b <check_pos+0x18b>
jmp    12d8 <check_pos+0x1d8>

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

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