int check(char *map) {
  if (map[0] == 'X' && map[1] == 'X' && map[2] == 'X')
    return 1;
  if (map[0] == 'Y' && map[1] == 'Y' && map[2] == 'Y')
    return 2;
  if (map[3] == 'X' && map[4] == 'X' && map[5] == 'X')
    return 1;
  if (map[3] == 'Y' && map[4] == 'Y' && map[5] == 'Y')
    return 2;
  if (map[6] == 'X' && map[7] == 'X' && map[8] == 'X')
    return 1;
  if (map[6] == 'Y' && map[7] == 'Y' && map[8] == 'Y')
    return 2;
  if (map[0] == 'X' && map[4] == 'X' && map[8] == 'X')
    return 1;
  if (map[0] == 'Y' && map[4] == 'Y' && map[8] == 'Y')
    return 2;
  if (map[2] == 'X' && map[4] == 'X' && map[6] == 'X')
    return 1;
  if (map[2] == 'Y' && map[4] == 'Y' && map[6] == 'Y')
    return 2;
  if (map[0] == 'X' && map[3] == 'X' && map[6] == 'X')
    return 1;
  if (map[0] == 'Y' && map[3] == 'Y' && map[6] == 'Y')
    return 2;
  if (map[1] == 'X' && map[4] == 'X' && map[7] == 'X')
    return 1;
  if (map[1] == 'Y' && map[4] == 'Y' && map[7] == 'Y')
    return 2;
  if (map[2] == 'X' && map[5] == 'X' && map[8] == 'X')
    return 1;
  if (map[2] == 'Y' && map[5] == 'Y' && map[8] == 'Y')
    return 2;
  return 0;
}


x86 assembly (clang, -O0):
<check>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
jne    1146 <check+0x46>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x58,%eax
jne    1146 <check+0x46>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x58,%eax
jne    1146 <check+0x46>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x59,%eax
jne    1184 <check+0x84>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x59,%eax
jne    1184 <check+0x84>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x59,%eax
jne    1184 <check+0x84>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x58,%eax
jne    11c3 <check+0xc3>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x58,%eax
jne    11c3 <check+0xc3>
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x58,%eax
jne    11c3 <check+0xc3>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x59,%eax
jne    1202 <check+0x102>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x59,%eax
jne    1202 <check+0x102>
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x59,%eax
jne    1202 <check+0x102>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x58,%eax
jne    1241 <check+0x141>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x58,%eax
jne    1241 <check+0x141>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x58,%eax
jne    1241 <check+0x141>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x59,%eax
jne    1280 <check+0x180>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x59,%eax
jne    1280 <check+0x180>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x59,%eax
jne    1280 <check+0x180>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
jne    12be <check+0x1be>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x58,%eax
jne    12be <check+0x1be>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x58,%eax
jne    12be <check+0x1be>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x59,%eax
jne    12fc <check+0x1fc>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x59,%eax
jne    12fc <check+0x1fc>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x59,%eax
jne    12fc <check+0x1fc>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x58,%eax
jne    133b <check+0x23b>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x58,%eax
jne    133b <check+0x23b>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x58,%eax
jne    133b <check+0x23b>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x59,%eax
jne    137a <check+0x27a>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x59,%eax
jne    137a <check+0x27a>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x59,%eax
jne    137a <check+0x27a>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
jne    13b8 <check+0x2b8>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x58,%eax
jne    13b8 <check+0x2b8>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x58,%eax
jne    13b8 <check+0x2b8>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x59,%eax
jne    13f6 <check+0x2f6>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x59,%eax
jne    13f6 <check+0x2f6>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x59,%eax
jne    13f6 <check+0x2f6>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x58,%eax
jne    1435 <check+0x335>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x58,%eax
jne    1435 <check+0x335>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x58,%eax
jne    1435 <check+0x335>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x59,%eax
jne    1474 <check+0x374>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x59,%eax
jne    1474 <check+0x374>
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
cmp    $0x59,%eax
jne    1474 <check+0x374>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x58,%eax
jne    14b3 <check+0x3b3>
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x58,%eax
jne    14b3 <check+0x3b3>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x58,%eax
jne    14b3 <check+0x3b3>
movl   $0x1,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x59,%eax
jne    14f2 <check+0x3f2>
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x59,%eax
jne    14f2 <check+0x3f2>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x59,%eax
jne    14f2 <check+0x3f2>
movl   $0x2,-0x4(%rbp)
jmp    14f9 <check+0x3f9>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<check>:
push   %rbp
push   %rbx
mov    (%rdi),%cl
cmp    $0x58,%cl
jne    1120 <check+0x20>
cmpb   $0x58,0x1(%rdi)
jne    113f <check+0x3f>
mov    $0x1,%eax
cmpb   $0x58,0x2(%rdi)
je     12d4 <check+0x1d4>
jmp    113f <check+0x3f>
cmp    $0x59,%cl
jne    113f <check+0x3f>
mov    $0x1,%r10b
cmpb   $0x59,0x1(%rdi)
jne    1142 <check+0x42>
mov    $0x2,%eax
cmpb   $0x59,0x2(%rdi)
je     12d4 <check+0x1d4>
jmp    1142 <check+0x42>
xor    %r10d,%r10d
mov    0x3(%rdi),%r9b
mov    $0x1,%r8b
cmp    $0x58,%r9b
jne    1165 <check+0x65>
cmpb   $0x58,0x4(%rdi)
jne    1183 <check+0x83>
mov    $0x1,%eax
cmpb   $0x58,0x5(%rdi)
jne    1183 <check+0x83>
jmp    12d4 <check+0x1d4>
cmp    $0x59,%r9b
jne    1183 <check+0x83>
cmpb   $0x59,0x4(%rdi)
jne    1180 <check+0x80>
mov    $0x2,%eax
cmpb   $0x59,0x5(%rdi)
je     12d4 <check+0x1d4>
xor    %r8d,%r8d
mov    0x6(%rdi),%dl
cmp    $0x58,%dl
jne    11a2 <check+0xa2>
cmpb   $0x58,0x7(%rdi)
jne    11cf <check+0xcf>
mov    $0x1,%eax
cmpb   $0x58,0x8(%rdi)
je     12d4 <check+0x1d4>
jmp    11c6 <check+0xc6>
cmp    $0x59,%dl
jne    11c6 <check+0xc6>
mov    $0x1,%sil
cmpb   $0x59,0x7(%rdi)
jne    11bf <check+0xbf>
mov    $0x2,%eax
cmpb   $0x59,0x8(%rdi)
je     12d4 <check+0x1d4>
cmp    $0x58,%cl
jne    11eb <check+0xeb>
jmp    11d6 <check+0xd6>
xor    %esi,%esi
cmp    $0x58,%cl
je     11d6 <check+0xd6>
jmp    11eb <check+0xeb>
xor    %esi,%esi
cmp    $0x58,%cl
jne    11eb <check+0xeb>
cmpb   $0x58,0x4(%rdi)
jne    11eb <check+0xeb>
mov    $0x1,%eax
cmpb   $0x58,0x8(%rdi)
je     12d4 <check+0x1d4>
test   %r10b,%r10b
je     1205 <check+0x105>
cmpb   $0x59,0x4(%rdi)
jne    1205 <check+0x105>
mov    $0x2,%eax
cmpb   $0x59,0x8(%rdi)
je     12d4 <check+0x1d4>
mov    0x2(%rdi),%r11b
cmp    $0x58,%r11b
jne    1227 <check+0x127>
xor    %ebp,%ebp
cmpb   $0x58,0x4(%rdi)
jne    1258 <check+0x158>
mov    $0x1,%eax
cmp    $0x58,%dl
je     12d4 <check+0x1d4>
jmp    1258 <check+0x158>
cmp    $0x59,%r11b
jne    1252 <check+0x152>
mov    0x4(%rdi),%al
cmp    $0x59,%al
setne  %bl
and    %sil,%bl
mov    $0x1,%bpl
cmp    $0x59,%al
jne    1256 <check+0x156>
xor    $0x1,%sil
mov    $0x2,%eax
mov    %ebx,%esi
je     12d4 <check+0x1d4>
jmp    1258 <check+0x158>
xor    %ebp,%ebp
jmp    1258 <check+0x158>
mov    %ebx,%esi
mov    $0x1,%eax
cmp    $0x58,%cl
jne    126d <check+0x16d>
cmp    $0x58,%r9b
jne    126d <check+0x16d>
cmp    $0x58,%dl
je     12d4 <check+0x1d4>
xor    $0x1,%r10b
or     %r10b,%r8b
jne    1283 <check+0x183>
xor    $0x1,%sil
jne    1283 <check+0x183>
mov    $0x2,%eax
jmp    12d4 <check+0x1d4>
mov    0x1(%rdi),%cl
cmp    $0x59,%cl
je     129e <check+0x19e>
cmp    $0x58,%cl
jne    12aa <check+0x1aa>
cmpb   $0x58,0x4(%rdi)
jne    12aa <check+0x1aa>
cmpb   $0x58,0x7(%rdi)
jne    12aa <check+0x1aa>
jmp    12d4 <check+0x1d4>
cmpb   $0x59,0x4(%rdi)
jne    12aa <check+0x1aa>
cmpb   $0x59,0x7(%rdi)
je     127c <check+0x17c>
cmp    $0x58,%r11b
jne    12bc <check+0x1bc>
cmpb   $0x58,0x5(%rdi)
jne    12bc <check+0x1bc>
cmpb   $0x58,0x8(%rdi)
je     12d4 <check+0x1d4>
test   %bpl,%bpl
je     12d2 <check+0x1d2>
cmpb   $0x59,0x5(%rdi)
jne    12d2 <check+0x1d2>
cmpb   $0x59,0x8(%rdi)
mov    $0x2,%eax
je     12d4 <check+0x1d4>
xor    %eax,%eax
pop    %rbx
pop    %rbp
ret

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

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