int vitoria(char v[3][3], char ch) {
  int c, l, d1, d2, i;
  d1 = (v[0][0] == v[1][1] && v[1][1] == v[2][2] && v[0][0] == ch);
  d2 = (v[0][2] == v[1][1] && v[1][1] == v[2][0] && v[0][2] == ch);
  for (i = 0; i <= 2; i++) {
    c = (v[0][i] == v[1][i] && v[1][i] == v[2][i] && v[1][i] == ch);
    l = (v[i][0] == v[i][1] && v[i][1] == v[i][2] && v[i][1] == ch);
    if (c)
      return 1;
    if (l)
      return 1;
  }
  if (!c && !l && d1 || d2)
    return 1;
  else
    return 0;
}


x86 assembly (clang, -O0):
<vitoria>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %rdi,-0x10(%rbp)
mov    %al,-0x11(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x29(%rbp)
jne    115a <vitoria+0x5a>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x29(%rbp)
jne    115a <vitoria+0x5a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x11(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%ecx
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2a(%rbp)
jne    11b3 <vitoria+0xb3>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%ecx
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2a(%rbp)
jne    11b3 <vitoria+0xb3>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
movsbl -0x11(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x2a(%rbp)
mov    -0x2a(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
cmpl   $0x2,-0x28(%rbp)
jg     130e <vitoria+0x20e>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rdx
movsbl 0x3(%rax,%rdx,1),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2b(%rbp)
jne    1235 <vitoria+0x135>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl 0x3(%rax,%rcx,1),%ecx
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rdx
movsbl 0x6(%rax,%rdx,1),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2b(%rbp)
jne    1235 <vitoria+0x135>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl 0x3(%rax,%rcx,1),%eax
movsbl -0x11(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x2b(%rbp)
mov    -0x2b(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0x3,%rcx,%rcx
add    %rcx,%rax
movsbl (%rax),%ecx
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rdx
imul   $0x3,%rdx,%rdx
add    %rdx,%rax
movsbl 0x1(%rax),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2c(%rbp)
jne    12c4 <vitoria+0x1c4>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0x3,%rcx,%rcx
add    %rcx,%rax
movsbl 0x1(%rax),%ecx
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rdx
imul   $0x3,%rdx,%rdx
add    %rdx,%rax
movsbl 0x2(%rax),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2c(%rbp)
jne    12c4 <vitoria+0x1c4>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0x3,%rcx,%rcx
add    %rcx,%rax
movsbl 0x1(%rax),%eax
movsbl -0x11(%rbp),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x2c(%rbp)
mov    -0x2c(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     12e5 <vitoria+0x1e5>
movl   $0x1,-0x4(%rbp)
jmp    1349 <vitoria+0x249>
cmpl   $0x0,-0x1c(%rbp)
je     12fb <vitoria+0x1fb>
movl   $0x1,-0x4(%rbp)
jmp    1349 <vitoria+0x249>
jmp    1300 <vitoria+0x200>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11c5 <vitoria+0xc5>
cmpl   $0x0,-0x18(%rbp)
jne    132c <vitoria+0x22c>
cmpl   $0x0,-0x1c(%rbp)
jne    132c <vitoria+0x22c>
cmpl   $0x0,-0x20(%rbp)
jne    1336 <vitoria+0x236>
cmpl   $0x0,-0x24(%rbp)
je     1342 <vitoria+0x242>
movl   $0x1,-0x4(%rbp)
jmp    1349 <vitoria+0x249>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<vitoria>:
push   %rbp
push   %rbx
mov    (%rdi),%cl
mov    0x4(%rdi),%bpl
cmp    %bpl,%cl
jne    111f <vitoria+0x1f>
mov    0x8(%rdi),%dl
xor    %cl,%dl
mov    %ecx,%eax
xor    %sil,%al
or     %dl,%al
sete   %r9b
jmp    1122 <vitoria+0x22>
xor    %r9d,%r9d
mov    0x2(%rdi),%r10b
cmp    %bpl,%r10b
jne    113e <vitoria+0x3e>
mov    0x6(%rdi),%al
xor    %bpl,%al
mov    %ebp,%edx
xor    %sil,%dl
or     %al,%dl
sete   %r8b
jmp    1141 <vitoria+0x41>
xor    %r8d,%r8d
mov    0x3(%rdi),%r11b
cmp    %r11b,%cl
jne    115b <vitoria+0x5b>
mov    0x6(%rdi),%al
xor    %cl,%al
mov    %ecx,%edx
xor    %sil,%dl
or     %al,%dl
sete   %dl
jmp    115d <vitoria+0x5d>
xor    %edx,%edx
mov    0x1(%rdi),%bl
cmp    %bl,%cl
jne    1173 <vitoria+0x73>
mov    %ecx,%eax
xor    %r10b,%al
xor    %sil,%cl
or     %al,%cl
sete   %al
jmp    1175 <vitoria+0x75>
xor    %eax,%eax
or     %al,%dl
mov    $0x1,%eax
cmp    $0x1,%dl
je     11ff <vitoria+0xff>
cmp    %bpl,%bl
jne    11a3 <vitoria+0xa3>
mov    0x7(%rdi),%cl
xor    %bpl,%cl
mov    %ebp,%edx
xor    %sil,%dl
or     %cl,%dl
sete   %dl
cmp    %bpl,%r11b
je     11aa <vitoria+0xaa>
xor    %ecx,%ecx
or     %cl,%dl
je     11bd <vitoria+0xbd>
jmp    11ff <vitoria+0xff>
xor    %edx,%edx
cmp    %bpl,%r11b
jne    119b <vitoria+0x9b>
mov    0x5(%rdi),%cl
xor    %bpl,%cl
xor    %sil,%bpl
or     %cl,%bpl
sete   %cl
or     %cl,%dl
jne    11ff <vitoria+0xff>
cmp    0x5(%rdi),%r10b
jne    11d4 <vitoria+0xd4>
mov    0x8(%rdi),%cl
xor    %r10b,%cl
xor    %sil,%r10b
or     %cl,%r10b
sete   %cl
jmp    11d6 <vitoria+0xd6>
xor    %ecx,%ecx
mov    0x6(%rdi),%dl
cmp    0x7(%rdi),%dl
jne    11f2 <vitoria+0xf2>
mov    0x8(%rdi),%bl
xor    %dl,%bl
xor    %dl,%sil
or     %bl,%sil
sete   %dl
or     %dl,%cl
je     11f8 <vitoria+0xf8>
jmp    11ff <vitoria+0xff>
xor    %edx,%edx
or     %dl,%cl
jne    11ff <vitoria+0xff>
or     %r8b,%r9b
movzbl %r9b,%eax
pop    %rbx
pop    %rbp
ret

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

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