#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ strlen(char *);
int toupper(int);
int WildComp2(char *lp1, char *lp2) {
  int flg;
  int i1, i2, j1, j2, ilen;
  int c, d;
  flg = 0;
  i1 = (int)strlen(lp1);
  i2 = (int)strlen(lp2);
  if (i1 && i2) {
    ilen = i1;
    if (i2 > i1)
      ilen = i2;
    j2 = 0;
    for (j1 = 0; j1 < ilen; j1++) {
      c = toupper(lp1[j1]);
      d = toupper(lp2[j2]);
      if (c == d) {
        j2++;
        continue;
      }
      if (c == 0) {
        if (d == '*') {
          j2++;
          if (lp2[j2] == 0) {
            flg = 1;
          }
        }
        break;
      }
      if (d == 0) {
        if (c == '*') {
          j1++;
          if (lp1[j1] == 0) {
            flg = 1;
          }
        }
        break;
      }
      {
        if (c == '*') {
          j1++;
          if (lp1[j1] == 0) {
            flg = 1;
            break;
          }
          c = toupper(lp1[j1]);
          j2++;
          if (lp2[j2] == 0)
            break;
          for (; j2 < ilen; j2++) {
            d = toupper(lp2[j2]);
            if (c == d)
              break;
            if (d == 0)
              break;
          }
          if (c == d) {
            j2++;
            continue;
          }
          break;
        }
        if (d == '*') {
          j2++;
          if (lp2[j2] == 0) {
            flg = 1;
            break;
          }
          d = toupper(lp2[j2]);
          j1++;
          if (lp1[j1] == 0)
            break;
          for (; j1 < ilen; j1++) {
            c = toupper(lp1[j1]);
            if (c == d)
              break;
            if (c == 0)
              break;
          }
          if (c == d) {
            j2++;
            continue;
          }
          break;
        }
        if ((c == '?') || (d == '?')) {
        } else {
          if (toupper(c) != toupper(d))
            break;
        }
      }
      j2++;
    }
    if (!flg && (j1 == ilen))
      flg = 1;
  } else {
    if (i1 == 0) {
      if ((i2 == 1) && (*lp2 == '*')) {
        flg = 1;
      } else if ((i2 == 2) && (lp2[0] == '.') && (lp2[1] == '*')) {
        flg = 1;
      }
    } else if (i2 == 0) {
      if ((i1 == 1) && (*lp1 == '*')) {
        flg = 1;
      } else if ((i1 == 2) && (lp1[0] == '.') && (lp1[1] == '*')) {
        flg = 1;
      }
    }
  }
  return flg;
}


x86 assembly (clang, -O0):
<WildComp2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,-0x1c(%rbp)
cmpl   $0x0,-0x18(%rbp)
je     149d <WildComp2+0x37d>
cmpl   $0x0,-0x1c(%rbp)
je     149d <WildComp2+0x37d>
mov    -0x18(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jle    117b <WildComp2+0x5b>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    147b <WildComp2+0x35b>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <toupper@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <toupper@plt>
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    11d7 <WildComp2+0xb7>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    146d <WildComp2+0x34d>
cmpl   $0x0,-0x2c(%rbp)
jne    121a <WildComp2+0xfa>
cmpl   $0x2a,-0x30(%rbp)
jne    1215 <WildComp2+0xf5>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1210 <WildComp2+0xf0>
movl   $0x1,-0x14(%rbp)
jmp    1215 <WildComp2+0xf5>
jmp    147b <WildComp2+0x35b>
cmpl   $0x0,-0x30(%rbp)
jne    125d <WildComp2+0x13d>
cmpl   $0x2a,-0x2c(%rbp)
jne    1258 <WildComp2+0x138>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1253 <WildComp2+0x133>
movl   $0x1,-0x14(%rbp)
jmp    1258 <WildComp2+0x138>
jmp    147b <WildComp2+0x35b>
cmpl   $0x2a,-0x2c(%rbp)
jne    133f <WildComp2+0x21f>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1291 <WildComp2+0x171>
movl   $0x1,-0x14(%rbp)
jmp    147b <WildComp2+0x35b>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <toupper@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    12c8 <WildComp2+0x1a8>
jmp    147b <WildComp2+0x35b>
jmp    12cd <WildComp2+0x1ad>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    1320 <WildComp2+0x200>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <toupper@plt>
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    12fe <WildComp2+0x1de>
jmp    1320 <WildComp2+0x200>
cmpl   $0x0,-0x30(%rbp)
jne    130d <WildComp2+0x1ed>
jmp    1320 <WildComp2+0x200>
jmp    1312 <WildComp2+0x1f2>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12cd <WildComp2+0x1ad>
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    133a <WildComp2+0x21a>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    146d <WildComp2+0x34d>
jmp    147b <WildComp2+0x35b>
cmpl   $0x2a,-0x30(%rbp)
jne    1421 <WildComp2+0x301>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1373 <WildComp2+0x253>
movl   $0x1,-0x14(%rbp)
jmp    147b <WildComp2+0x35b>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <toupper@plt>
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    13aa <WildComp2+0x28a>
jmp    147b <WildComp2+0x35b>
jmp    13af <WildComp2+0x28f>
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    1402 <WildComp2+0x2e2>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <toupper@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    13e0 <WildComp2+0x2c0>
jmp    1402 <WildComp2+0x2e2>
cmpl   $0x0,-0x2c(%rbp)
jne    13ef <WildComp2+0x2cf>
jmp    1402 <WildComp2+0x2e2>
jmp    13f4 <WildComp2+0x2d4>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    13af <WildComp2+0x28f>
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    141c <WildComp2+0x2fc>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    146d <WildComp2+0x34d>
jmp    147b <WildComp2+0x35b>
cmpl   $0x3f,-0x2c(%rbp)
je     1435 <WildComp2+0x315>
cmpl   $0x3f,-0x30(%rbp)
jne    143a <WildComp2+0x31a>
jmp    1464 <WildComp2+0x344>
mov    -0x2c(%rbp),%edi
call   1030 <toupper@plt>
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%edi
call   1030 <toupper@plt>
mov    %eax,%ecx
mov    -0x34(%rbp),%eax
cmp    %ecx,%eax
je     145f <WildComp2+0x33f>
jmp    147b <WildComp2+0x35b>
jmp    1464 <WildComp2+0x344>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1189 <WildComp2+0x69>
cmpl   $0x0,-0x14(%rbp)
jne    1498 <WildComp2+0x378>
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jne    1498 <WildComp2+0x378>
movl   $0x1,-0x14(%rbp)
jmp    157f <WildComp2+0x45f>
cmpl   $0x0,-0x18(%rbp)
jne    1509 <WildComp2+0x3e9>
cmpl   $0x1,-0x1c(%rbp)
jne    14cd <WildComp2+0x3ad>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    14cd <WildComp2+0x3ad>
movl   $0x1,-0x14(%rbp)
jmp    1504 <WildComp2+0x3e4>
cmpl   $0x2,-0x1c(%rbp)
jne    14ff <WildComp2+0x3df>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    14ff <WildComp2+0x3df>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2a,%eax
jne    14ff <WildComp2+0x3df>
movl   $0x1,-0x14(%rbp)
jmp    1504 <WildComp2+0x3e4>
jmp    157a <WildComp2+0x45a>
cmpl   $0x0,-0x1c(%rbp)
jne    1575 <WildComp2+0x455>
cmpl   $0x1,-0x18(%rbp)
jne    1539 <WildComp2+0x419>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    1539 <WildComp2+0x419>
movl   $0x1,-0x14(%rbp)
jmp    1570 <WildComp2+0x450>
cmpl   $0x2,-0x18(%rbp)
jne    156b <WildComp2+0x44b>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    156b <WildComp2+0x44b>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2a,%eax
jne    156b <WildComp2+0x44b>
movl   $0x1,-0x14(%rbp)
jmp    1570 <WildComp2+0x450>
jmp    1575 <WildComp2+0x455>
jmp    157a <WildComp2+0x45a>
jmp    157f <WildComp2+0x45f>
mov    -0x14(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<WildComp2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rsi,%rbp
mov    %rdi,%r14
call   1040 <strlen@plt>
mov    %rax,%rbx
mov    %rbp,%rdi
call   1040 <strlen@plt>
test   %ebx,%ebx
je     1363 <WildComp2+0x243>
test   %eax,%eax
je     1363 <WildComp2+0x243>
cmp    %ebx,%eax
cmovg  %eax,%ebx
test   %ebx,%ebx
jle    1383 <WildComp2+0x263>
mov    %rbp,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %ebx,%eax
add    $0xffffffffffffffff,%rax
mov    %rax,0x20(%rsp)
xor    %r12d,%r12d
xor    %r13d,%r13d
mov    %rbx,0x8(%rsp)
jmp    11a6 <WildComp2+0x86>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x8(%rsp),%rbx
add    $0x1,%r12d
add    $0x1,%r13d
cmp    %ebx,%r13d
jge    13e9 <WildComp2+0x2c9>
movslq %r13d,%r15
mov    0x18(%rsp),%rax
movsbl (%rax,%r15,1),%edi
call   1030 <toupper@plt>
mov    %eax,%ebp
movslq %r12d,%r14
mov    0x10(%rsp),%rax
movsbl (%rax,%r14,1),%edi
call   1030 <toupper@plt>
cmp    %eax,%ebp
je     1190 <WildComp2+0x70>
mov    %eax,%ebx
test   %ebp,%ebp
je     13a4 <WildComp2+0x284>
test   %ebx,%ebx
je     13bd <WildComp2+0x29d>
cmp    $0x2a,%ebp
jne    1280 <WildComp2+0x160>
mov    0x18(%rsp),%rax
movsbl 0x1(%rax,%r15,1),%edi
test   %edi,%edi
je     13e0 <WildComp2+0x2c0>
add    $0x1,%r15
mov    %r15d,%r13d
call   1030 <toupper@plt>
mov    0x10(%rsp),%rbp
movsbl 0x1(%rbp,%r14,1),%edi
test   %edi,%edi
je     13e4 <WildComp2+0x2c4>
mov    %eax,%r15d
add    $0x1,%r14
mov    %r14d,%r12d
cmp    0x8(%rsp),%r14d
jge    1330 <WildComp2+0x210>
call   1030 <toupper@plt>
mov    %eax,%ebx
cmp    %eax,%r15d
je     1273 <WildComp2+0x153>
test   %ebx,%ebx
je     1273 <WildComp2+0x153>
mov    0x20(%rsp),%r12
nopw   0x0(%rax,%rax,1)
cmp    %r14,%r12
je     1325 <WildComp2+0x205>
movsbl 0x1(%rbp,%r14,1),%edi
call   1030 <toupper@plt>
mov    %eax,%ebx
add    $0x1,%r14
cmp    %eax,%r15d
je     1273 <WildComp2+0x153>
test   %ebx,%ebx
jne    1250 <WildComp2+0x130>
mov    %r14d,%r12d
jmp    1330 <WildComp2+0x210>
nopl   0x0(%rax,%rax,1)
cmp    $0x2a,%ebx
jne    1301 <WildComp2+0x1e1>
mov    0x10(%rsp),%rax
movsbl 0x1(%rax,%r14,1),%edi
test   %edi,%edi
je     13e0 <WildComp2+0x2c0>
call   1030 <toupper@plt>
mov    0x18(%rsp),%rbx
movsbl 0x1(%rbx,%r15,1),%edi
add    $0x1,%r15
test   %edi,%edi
je     1412 <WildComp2+0x2f2>
mov    %eax,%r13d
add    $0x1,%r14
cmp    0x8(%rsp),%r15d
jge    1348 <WildComp2+0x228>
call   1030 <toupper@plt>
mov    %eax,%ebp
cmp    %r13d,%eax
je     1348 <WildComp2+0x228>
test   %ebp,%ebp
je     1348 <WildComp2+0x228>
mov    0x20(%rsp),%r12
nopl   0x0(%rax,%rax,1)
cmp    %r15,%r12
je     1343 <WildComp2+0x223>
movsbl 0x1(%rbx,%r15,1),%edi
call   1030 <toupper@plt>
mov    %eax,%ebp
add    $0x1,%r15
cmp    %r13d,%eax
je     1348 <WildComp2+0x228>
test   %ebp,%ebp
jne    12e0 <WildComp2+0x1c0>
jmp    1348 <WildComp2+0x228>
cmp    $0x3f,%ebp
je     1190 <WildComp2+0x70>
cmp    $0x3f,%ebx
je     1190 <WildComp2+0x70>
mov    %ebp,%edi
call   1030 <toupper@plt>
mov    %eax,%ebp
mov    %ebx,%edi
call   1030 <toupper@plt>
jmp    1351 <WildComp2+0x231>
mov    0x8(%rsp),%rax
mov    %eax,%r12d
nopl   (%rax)
cmp    %ebx,%r15d
mov    0x8(%rsp),%rbx
je     1195 <WildComp2+0x75>
jmp    13e9 <WildComp2+0x2c9>
mov    0x8(%rsp),%r15
mov    %r13d,%eax
mov    %r15d,%r13d
mov    %r14d,%r12d
cmp    %eax,%ebp
mov    0x8(%rsp),%rbx
je     1195 <WildComp2+0x75>
jmp    13e9 <WildComp2+0x2c9>
test   %ebx,%ebx
je     1388 <WildComp2+0x268>
test   %eax,%eax
jne    13fe <WildComp2+0x2de>
cmp    $0x2,%ebx
je     13f1 <WildComp2+0x2d1>
cmp    $0x1,%ebx
jne    13fe <WildComp2+0x2de>
cmpb   $0x2a,(%r14)
jmp    13ec <WildComp2+0x2cc>
xor    %r13d,%r13d
jmp    13e9 <WildComp2+0x2c9>
cmp    $0x2,%eax
je     1398 <WildComp2+0x278>
cmp    $0x1,%eax
jne    13fe <WildComp2+0x2de>
cmpb   $0x2a,0x0(%rbp)
jmp    13ec <WildComp2+0x2cc>
cmpb   $0x2e,0x0(%rbp)
jne    13fe <WildComp2+0x2de>
cmpb   $0x2a,0x1(%rbp)
jmp    13ec <WildComp2+0x2cc>
cmp    $0x2a,%ebx
jne    13e4 <WildComp2+0x2c4>
mov    0x10(%rsp),%rax
cmpb   $0x0,0x1(%r14,%rax,1)
mov    0x8(%rsp),%rbx
jne    13e9 <WildComp2+0x2c9>
jmp    13e0 <WildComp2+0x2c0>
cmp    $0x2a,%ebp
mov    0x8(%rsp),%rbx
jne    13e9 <WildComp2+0x2c9>
mov    0x18(%rsp),%rax
cmpb   $0x0,0x1(%rax,%r15,1)
je     13e0 <WildComp2+0x2c0>
add    $0x1,%r15
mov    %r15d,%r13d
cmp    %ebx,%r15d
jmp    13ec <WildComp2+0x2cc>
mov    $0x1,%al
jmp    1400 <WildComp2+0x2e0>
mov    0x8(%rsp),%rbx
cmp    %ebx,%r13d
sete   %al
jmp    1400 <WildComp2+0x2e0>
cmpb   $0x2e,(%r14)
jne    13fe <WildComp2+0x2de>
cmpb   $0x2a,0x1(%r14)
jmp    13ec <WildComp2+0x2cc>
xor    %eax,%eax
movzbl %al,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r15d,%r13d
mov    0x8(%rsp),%rbx
cmp    %ebx,%r15d
jmp    13ec <WildComp2+0x2cc>

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

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