#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 */
int /*<<< orphan*/ abort();
int match_prefix(char *, int, char *);
int /*<<< orphan*/ printf(char *, int, char *);
void test_match_prefix(void) {
  do {
    if (!(match_prefix("/api", 4, "/api") == 4))
      do {
        printf("Fail on line %d: [%s]\n", 76,
               "match_prefix(\"/api\", 4, \"/api\") == 4");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("/a/", 3, "/a/b/c") == 3))
      do {
        printf("Fail on line %d: [%s]\n", 77,
               "match_prefix(\"/a/\", 3, \"/a/b/c\") == 3");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("/a/", 3, "/ab/c") == -1))
      do {
        printf("Fail on line %d: [%s]\n", 78,
               "match_prefix(\"/a/\", 3, \"/ab/c\") == -1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("/*/", 3, "/ab/c") == 4))
      do {
        printf("Fail on line %d: [%s]\n", 79,
               "match_prefix(\"/*/\", 3, \"/ab/c\") == 4");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**", 2, "/a/b/c") == 6))
      do {
        printf("Fail on line %d: [%s]\n", 80,
               "match_prefix(\"**\", 2, \"/a/b/c\") == 6");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("/*", 2, "/a/b/c") == 2))
      do {
        printf("Fail on line %d: [%s]\n", 81,
               "match_prefix(\"/*\", 2, \"/a/b/c\") == 2");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("*/*", 3, "/a/b/c") == 2))
      do {
        printf("Fail on line %d: [%s]\n", 82,
               "match_prefix(\"*/*\", 3, \"/a/b/c\") == 2");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**/", 3, "/a/b/c") == 5))
      do {
        printf("Fail on line %d: [%s]\n", 83,
               "match_prefix(\"**/\", 3, \"/a/b/c\") == 5");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**.foo|**.bar", 13, "a.bar") == 5))
      do {
        printf("Fail on line %d: [%s]\n", 84,
               "match_prefix(\"**.foo|**.bar\", 13, \"a.bar\") == 5");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("a|b|cd", 6, "cdef") == 2))
      do {
        printf("Fail on line %d: [%s]\n", 85,
               "match_prefix(\"a|b|cd\", 6, \"cdef\") == 2");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("a|b|c?", 6, "cdef") == 2))
      do {
        printf("Fail on line %d: [%s]\n", 86,
               "match_prefix(\"a|b|c?\", 6, \"cdef\") == 2");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("a|?|cd", 6, "cdef") == 1))
      do {
        printf("Fail on line %d: [%s]\n", 87,
               "match_prefix(\"a|?|cd\", 6, \"cdef\") == 1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("/a/**.cgi", 9, "/foo/bar/x.cgi") == -1))
      do {
        printf("Fail on line %d: [%s]\n", 88,
               "match_prefix(\"/a/**.cgi\", 9, \"/foo/bar/x.cgi\") == -1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("/a/**.cgi", 9, "/a/bar/x.cgi") == 12))
      do {
        printf("Fail on line %d: [%s]\n", 89,
               "match_prefix(\"/a/**.cgi\", 9, \"/a/bar/x.cgi\") == 12");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**/", 3, "/a/b/c") == 5))
      do {
        printf("Fail on line %d: [%s]\n", 90,
               "match_prefix(\"**/\", 3, \"/a/b/c\") == 5");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**/$", 4, "/a/b/c") == -1))
      do {
        printf("Fail on line %d: [%s]\n", 91,
               "match_prefix(\"**/$\", 4, \"/a/b/c\") == -1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**/$", 4, "/a/b/") == 5))
      do {
        printf("Fail on line %d: [%s]\n", 92,
               "match_prefix(\"**/$\", 4, \"/a/b/\") == 5");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("$", 1, "") == 0))
      do {
        printf("Fail on line %d: [%s]\n", 93,
               "match_prefix(\"$\", 1, \"\") == 0");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("$", 1, "x") == -1))
      do {
        printf("Fail on line %d: [%s]\n", 94,
               "match_prefix(\"$\", 1, \"x\") == -1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("*$", 2, "x") == 1))
      do {
        printf("Fail on line %d: [%s]\n", 95,
               "match_prefix(\"*$\", 2, \"x\") == 1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("/$", 2, "/") == 1))
      do {
        printf("Fail on line %d: [%s]\n", 96,
               "match_prefix(\"/$\", 2, \"/\") == 1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**/$", 4, "/a/b/c") == -1))
      do {
        printf("Fail on line %d: [%s]\n", 97,
               "match_prefix(\"**/$\", 4, \"/a/b/c\") == -1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**/$", 4, "/a/b/") == 5))
      do {
        printf("Fail on line %d: [%s]\n", 98,
               "match_prefix(\"**/$\", 4, \"/a/b/\") == 5");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("*", 1, "/hello/") == 0))
      do {
        printf("Fail on line %d: [%s]\n", 99,
               "match_prefix(\"*\", 1, \"/hello/\") == 0");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**.a$|**.b$", 11, "/a/b.b/") == -1))
      do {
        printf("Fail on line %d: [%s]\n", 100,
               "match_prefix(\"**.a$|**.b$\", 11, \"/a/b.b/\") == -1");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**.a$|**.b$", 11, "/a/b.b") == 6))
      do {
        printf("Fail on line %d: [%s]\n", 101,
               "match_prefix(\"**.a$|**.b$\", 11, \"/a/b.b\") == 6");
        abort();
      } while (0);
  } while (0);
  do {
    if (!(match_prefix("**.a$|**.b$", 11, "/a/b.a") == 6))
      do {
        printf("Fail on line %d: [%s]\n", 102,
               "match_prefix(\"**.a$|**.b$\", 11, \"/a/b.a\") == 6");
        abort();
      } while (0);
  } while (0);
}


x86 assembly (clang, -O0):
<test_match_prefix>:
push   %rbp
mov    %rsp,%rbp
jmp    1139 <test_match_prefix+0x9>
lea    0xec0(%rip),%rdx
mov    $0x4,%esi
mov    %rdx,%rdi
call   1050 <match_prefix@plt>
cmp    $0x4,%eax
je     117a <test_match_prefix+0x4a>
jmp    115b <test_match_prefix+0x2b>
lea    0xea3(%rip),%rdi
mov    $0x4c,%esi
lea    0xeae(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    117f <test_match_prefix+0x4f>
jmp    1184 <test_match_prefix+0x54>
lea    0xeb6(%rip),%rdi
mov    $0x3,%esi
lea    0xeae(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x3,%eax
je     11c9 <test_match_prefix+0x99>
jmp    11aa <test_match_prefix+0x7a>
lea    0xe54(%rip),%rdi
mov    $0x4d,%esi
lea    0xe8f(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    11ce <test_match_prefix+0x9e>
jmp    11d3 <test_match_prefix+0xa3>
lea    0xe67(%rip),%rdi
mov    $0x3,%esi
lea    0xe8c(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
je     1218 <test_match_prefix+0xe8>
jmp    11f9 <test_match_prefix+0xc9>
lea    0xe05(%rip),%rdi
mov    $0x4e,%esi
lea    0xe6c(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    121d <test_match_prefix+0xed>
jmp    1222 <test_match_prefix+0xf2>
lea    0xe75(%rip),%rdi
mov    $0x3,%esi
lea    0xe3d(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x4,%eax
je     1267 <test_match_prefix+0x137>
jmp    1248 <test_match_prefix+0x118>
lea    0xdb6(%rip),%rdi
mov    $0x4f,%esi
lea    0xe47(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    126c <test_match_prefix+0x13c>
jmp    1271 <test_match_prefix+0x141>
lea    0xe4f(%rip),%rdi
mov    $0x2,%esi
lea    0xdc1(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x6,%eax
je     12b6 <test_match_prefix+0x186>
jmp    1297 <test_match_prefix+0x167>
lea    0xd67(%rip),%rdi
mov    $0x50,%esi
lea    0xe20(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    12bb <test_match_prefix+0x18b>
jmp    12c0 <test_match_prefix+0x190>
lea    0xe4e(%rip),%rdi
mov    $0x2,%esi
lea    0xd72(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
je     1305 <test_match_prefix+0x1d5>
jmp    12e6 <test_match_prefix+0x1b6>
lea    0xd18(%rip),%rdi
mov    $0x51,%esi
lea    0xdf6(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    130a <test_match_prefix+0x1da>
jmp    130f <test_match_prefix+0x1df>
lea    0xdfe(%rip),%rdi
mov    $0x3,%esi
lea    0xd23(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
je     1354 <test_match_prefix+0x224>
jmp    1335 <test_match_prefix+0x205>
lea    0xcc9(%rip),%rdi
mov    $0x52,%esi
lea    0xdd0(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1359 <test_match_prefix+0x229>
jmp    135e <test_match_prefix+0x22e>
lea    0xdd9(%rip),%rdi
mov    $0x3,%esi
lea    0xcd4(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
je     13a3 <test_match_prefix+0x273>
jmp    1384 <test_match_prefix+0x254>
lea    0xc7a(%rip),%rdi
mov    $0x53,%esi
lea    0xdab(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    13a8 <test_match_prefix+0x278>
jmp    13ad <test_match_prefix+0x27d>
lea    0xdb4(%rip),%rdi
mov    $0xd,%esi
lea    0xdb6(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
je     13f2 <test_match_prefix+0x2c2>
jmp    13d3 <test_match_prefix+0x2a3>
lea    0xc2b(%rip),%rdi
mov    $0x54,%esi
lea    0xd96(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    13f7 <test_match_prefix+0x2c7>
jmp    13fc <test_match_prefix+0x2cc>
lea    0xda9(%rip),%rdi
mov    $0x6,%esi
lea    0xda4(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
je     1441 <test_match_prefix+0x311>
jmp    1422 <test_match_prefix+0x2f2>
lea    0xbdc(%rip),%rdi
mov    $0x55,%esi
lea    0xd83(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1446 <test_match_prefix+0x316>
jmp    144b <test_match_prefix+0x31b>
lea    0xd8d(%rip),%rdi
mov    $0x6,%esi
lea    0xd55(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
je     1490 <test_match_prefix+0x360>
jmp    1471 <test_match_prefix+0x341>
lea    0xb8d(%rip),%rdi
mov    $0x56,%esi
lea    0xd62(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1495 <test_match_prefix+0x365>
jmp    149a <test_match_prefix+0x36a>
lea    0xd6c(%rip),%rdi
mov    $0x6,%esi
lea    0xd06(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x1,%eax
je     14df <test_match_prefix+0x3af>
jmp    14c0 <test_match_prefix+0x390>
lea    0xb3e(%rip),%rdi
mov    $0x57,%esi
lea    0xd41(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    14e4 <test_match_prefix+0x3b4>
jmp    14e9 <test_match_prefix+0x3b9>
lea    0xd4b(%rip),%rdi
mov    $0x9,%esi
lea    0xd49(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
je     152e <test_match_prefix+0x3fe>
jmp    150f <test_match_prefix+0x3df>
lea    0xaef(%rip),%rdi
mov    $0x58,%esi
lea    0xd32(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1533 <test_match_prefix+0x403>
jmp    1538 <test_match_prefix+0x408>
lea    0xcfc(%rip),%rdi
mov    $0x9,%esi
lea    0xd3e(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0xc,%eax
je     157d <test_match_prefix+0x44d>
jmp    155e <test_match_prefix+0x42e>
lea    0xaa0(%rip),%rdi
mov    $0x59,%esi
lea    0xd25(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1582 <test_match_prefix+0x452>
jmp    1587 <test_match_prefix+0x457>
lea    0xbb0(%rip),%rdi
mov    $0x3,%esi
lea    0xaab(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
je     15cc <test_match_prefix+0x49c>
jmp    15ad <test_match_prefix+0x47d>
lea    0xa51(%rip),%rdi
mov    $0x5a,%esi
lea    0xb82(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    15d1 <test_match_prefix+0x4a1>
jmp    15d6 <test_match_prefix+0x4a6>
lea    0xcec(%rip),%rdi
mov    $0x4,%esi
lea    0xa5c(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
je     161b <test_match_prefix+0x4eb>
jmp    15fc <test_match_prefix+0x4cc>
lea    0xa02(%rip),%rdi
mov    $0x5b,%esi
lea    0xcbf(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1620 <test_match_prefix+0x4f0>
jmp    1625 <test_match_prefix+0x4f5>
lea    0xc9d(%rip),%rdi
mov    $0x4,%esi
lea    0xcbe(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
je     166a <test_match_prefix+0x53a>
jmp    164b <test_match_prefix+0x51b>
lea    0x9b3(%rip),%rdi
mov    $0x5c,%esi
lea    0xc9e(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    166f <test_match_prefix+0x53f>
jmp    1674 <test_match_prefix+0x544>
lea    0xce8(%rip),%rdi
mov    $0x1,%esi
lea    0x994(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x0,%eax
je     16b9 <test_match_prefix+0x589>
jmp    169a <test_match_prefix+0x56a>
lea    0x964(%rip),%rdi
mov    $0x5d,%esi
lea    0xc75(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    16be <test_match_prefix+0x58e>
jmp    16c3 <test_match_prefix+0x593>
lea    0xc99(%rip),%rdi
mov    $0x1,%esi
lea    0xc6a(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
je     1708 <test_match_prefix+0x5d8>
jmp    16e9 <test_match_prefix+0x5b9>
lea    0x915(%rip),%rdi
mov    $0x5e,%esi
lea    0xc46(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    170d <test_match_prefix+0x5dd>
jmp    1712 <test_match_prefix+0x5e2>
lea    0xc49(%rip),%rdi
mov    $0x2,%esi
lea    0xc1b(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x1,%eax
je     1757 <test_match_prefix+0x627>
jmp    1738 <test_match_prefix+0x608>
lea    0x8c6(%rip),%rdi
mov    $0x5f,%esi
lea    0xc1a(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    175c <test_match_prefix+0x62c>
jmp    1761 <test_match_prefix+0x631>
lea    0xb63(%rip),%rdi
mov    $0x2,%esi
lea    0x9cc(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x1,%eax
je     17a6 <test_match_prefix+0x676>
jmp    1787 <test_match_prefix+0x657>
lea    0x877(%rip),%rdi
mov    $0x60,%esi
lea    0xbeb(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    17ab <test_match_prefix+0x67b>
jmp    17b0 <test_match_prefix+0x680>
lea    0xb12(%rip),%rdi
mov    $0x4,%esi
lea    0x882(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
je     17f5 <test_match_prefix+0x6c5>
jmp    17d6 <test_match_prefix+0x6a6>
lea    0x828(%rip),%rdi
mov    $0x61,%esi
lea    0xae5(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    17fa <test_match_prefix+0x6ca>
jmp    17ff <test_match_prefix+0x6cf>
lea    0xac3(%rip),%rdi
mov    $0x4,%esi
lea    0xae4(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
je     1844 <test_match_prefix+0x714>
jmp    1825 <test_match_prefix+0x6f5>
lea    0x7d9(%rip),%rdi
mov    $0x62,%esi
lea    0xac4(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1849 <test_match_prefix+0x719>
jmp    184e <test_match_prefix+0x71e>
lea    0x873(%rip),%rdi
mov    $0x1,%esi
lea    0xb44(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x0,%eax
je     1893 <test_match_prefix+0x763>
jmp    1874 <test_match_prefix+0x744>
lea    0x78a(%rip),%rdi
mov    $0x63,%esi
lea    0xb26(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1898 <test_match_prefix+0x768>
jmp    189d <test_match_prefix+0x76d>
lea    0xb2e(%rip),%rdi
mov    $0xb,%esi
lea    0xb2e(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
je     18e2 <test_match_prefix+0x7b2>
jmp    18c3 <test_match_prefix+0x793>
lea    0x73b(%rip),%rdi
mov    $0x64,%esi
lea    0xb10(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    18e7 <test_match_prefix+0x7b7>
jmp    18ec <test_match_prefix+0x7bc>
lea    0xadf(%rip),%rdi
mov    $0xb,%esi
lea    0xb18(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x6,%eax
je     1931 <test_match_prefix+0x801>
jmp    1912 <test_match_prefix+0x7e2>
lea    0x6ec(%rip),%rdi
mov    $0x65,%esi
lea    0xaf9(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1936 <test_match_prefix+0x806>
jmp    193b <test_match_prefix+0x80b>
lea    0xa90(%rip),%rdi
mov    $0xb,%esi
lea    0xaff(%rip),%rdx
call   1050 <match_prefix@plt>
cmp    $0x6,%eax
je     1980 <test_match_prefix+0x850>
jmp    1961 <test_match_prefix+0x831>
lea    0x69d(%rip),%rdi
mov    $0x66,%esi
lea    0xae0(%rip),%rdx
call   1040 <printf@plt>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    1985 <test_match_prefix+0x855>
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_match_prefix>:
push   %rax
lea    0xec8(%rip),%rdi
mov    $0x4,%esi
mov    %rdi,%rdx
call   1050 <match_prefix@plt>
cmp    $0x4,%eax
jne    14a8 <test_match_prefix+0x378>
lea    0xeec(%rip),%rdi
lea    0xee9(%rip),%rdx
mov    $0x3,%esi
call   1050 <match_prefix@plt>
cmp    $0x3,%eax
jne    14c0 <test_match_prefix+0x390>
lea    0xecb(%rip),%rdi
lea    0xef5(%rip),%rdx
mov    $0x3,%esi
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
jne    14d8 <test_match_prefix+0x3a8>
lea    0xf07(%rip),%rdi
lea    0xed4(%rip),%rdx
mov    $0x3,%esi
call   1050 <match_prefix@plt>
cmp    $0x4,%eax
jne    14f0 <test_match_prefix+0x3c0>
lea    0xf0f(%rip),%rdi
lea    0xe86(%rip),%rdx
mov    $0x2,%esi
call   1050 <match_prefix@plt>
cmp    $0x6,%eax
jne    1508 <test_match_prefix+0x3d8>
lea    0xf3c(%rip),%rdi
lea    0xe65(%rip),%rdx
mov    $0x2,%esi
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
jne    1520 <test_match_prefix+0x3f0>
lea    0xf1a(%rip),%rdi
lea    0xe44(%rip),%rdx
mov    $0x3,%esi
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
jne    1538 <test_match_prefix+0x408>
lea    0xf23(%rip),%rdi
lea    0xe23(%rip),%rdx
mov    $0x3,%esi
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
jne    1550 <test_match_prefix+0x420>
lea    0xf2c(%rip),%rdi
lea    0xf33(%rip),%rdx
mov    $0xd,%esi
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
jne    1568 <test_match_prefix+0x438>
lea    0xf4f(%rip),%rdi
lea    0xf4f(%rip),%rdx
mov    $0x6,%esi
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
jne    1580 <test_match_prefix+0x450>
lea    0xf61(%rip),%rdi
lea    0xf2e(%rip),%rdx
mov    $0x6,%esi
call   1050 <match_prefix@plt>
cmp    $0x2,%eax
jne    1598 <test_match_prefix+0x468>
lea    0xf6e(%rip),%rdi
lea    0xf0d(%rip),%rdx
mov    $0x6,%esi
call   1050 <match_prefix@plt>
cmp    $0x1,%eax
jne    15b0 <test_match_prefix+0x480>
lea    0xf7b(%rip),%rdi
lea    0xf7e(%rip),%rdx
mov    $0x9,%esi
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
jne    15c8 <test_match_prefix+0x498>
lea    0xf5a(%rip),%rdi
lea    0xfa1(%rip),%rdx
mov    $0x9,%esi
call   1050 <match_prefix@plt>
cmp    $0xc,%eax
jne    15e0 <test_match_prefix+0x4b0>
lea    0xe3c(%rip),%rdi
lea    0xd3c(%rip),%rdx
mov    $0x3,%esi
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
jne    15f8 <test_match_prefix+0x4c8>
lea    0xfa6(%rip),%rdi
lea    0xd1b(%rip),%rdx
mov    $0x4,%esi
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
jne    1610 <test_match_prefix+0x4e0>
lea    0xf85(%rip),%rdi
lea    0xfab(%rip),%rdx
mov    $0x4,%esi
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
jne    1628 <test_match_prefix+0x4f8>
lea    0xffe(%rip),%rdi
lea    0xcaf(%rip),%rdx
mov    $0x1,%esi
call   1050 <match_prefix@plt>
test   %eax,%eax
jne    1640 <test_match_prefix+0x510>
lea    0xfde(%rip),%rdi
lea    0xfb4(%rip),%rdx
mov    $0x1,%esi
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
jne    1658 <test_match_prefix+0x528>
lea    0xfbc(%rip),%rdi
lea    0xf93(%rip),%rdx
mov    $0x2,%esi
call   1050 <match_prefix@plt>
cmp    $0x1,%eax
jne    1670 <test_match_prefix+0x540>
lea    0xf04(%rip),%rdi
lea    0xd72(%rip),%rdx
mov    $0x2,%esi
call   1050 <match_prefix@plt>
cmp    $0x1,%eax
jne    1688 <test_match_prefix+0x558>
lea    0xee1(%rip),%rdi
lea    0xc56(%rip),%rdx
mov    $0x4,%esi
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
jne    169d <test_match_prefix+0x56d>
lea    0xec0(%rip),%rdi
lea    0xee6(%rip),%rdx
mov    $0x4,%esi
call   1050 <match_prefix@plt>
cmp    $0x5,%eax
jne    16b2 <test_match_prefix+0x582>
lea    0xc9e(%rip),%rdi
lea    0xf74(%rip),%rdx
mov    $0x1,%esi
call   1050 <match_prefix@plt>
test   %eax,%eax
jne    16c7 <test_match_prefix+0x597>
lea    0xf88(%rip),%rdi
lea    0xf8d(%rip),%rdx
mov    $0xb,%esi
call   1050 <match_prefix@plt>
cmp    $0xffffffff,%eax
jne    16dc <test_match_prefix+0x5ac>
lea    0xf67(%rip),%rdi
lea    0xfa5(%rip),%rdx
mov    $0xb,%esi
call   1050 <match_prefix@plt>
cmp    $0x6,%eax
jne    16f1 <test_match_prefix+0x5c1>
lea    0xf46(%rip),%rdi
lea    0xfba(%rip),%rdx
mov    $0xb,%esi
call   1050 <match_prefix@plt>
cmp    $0x6,%eax
jne    1706 <test_match_prefix+0x5d6>
pop    %rax
ret
lea    0xb56(%rip),%rdi
lea    0xb66(%rip),%rdx
mov    $0x4c,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xb3e(%rip),%rdi
lea    0xb7e(%rip),%rdx
mov    $0x4d,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xb26(%rip),%rdi
lea    0xb92(%rip),%rdx
mov    $0x4e,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xb0e(%rip),%rdi
lea    0xba4(%rip),%rdx
mov    $0x4f,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xaf6(%rip),%rdi
lea    0xbb4(%rip),%rdx
mov    $0x50,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xade(%rip),%rdi
lea    0xbc1(%rip),%rdx
mov    $0x51,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xac6(%rip),%rdi
lea    0xbd2(%rip),%rdx
mov    $0x52,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xaae(%rip),%rdi
lea    0xbe4(%rip),%rdx
mov    $0x53,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xa96(%rip),%rdi
lea    0xc06(%rip),%rdx
mov    $0x54,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xa7e(%rip),%rdi
lea    0xc2a(%rip),%rdx
mov    $0x55,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xa66(%rip),%rdi
lea    0xc40(%rip),%rdx
mov    $0x56,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xa4e(%rip),%rdi
lea    0xc56(%rip),%rdx
mov    $0x57,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xa36(%rip),%rdi
lea    0xc7e(%rip),%rdx
mov    $0x58,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xa1e(%rip),%rdi
lea    0xca8(%rip),%rdx
mov    $0x59,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0xa06(%rip),%rdi
lea    0xb3c(%rip),%rdx
mov    $0x5a,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x9ee(%rip),%rdi
lea    0xcb0(%rip),%rdx
mov    $0x5b,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x9d6(%rip),%rdi
lea    0xcc6(%rip),%rdx
mov    $0x5c,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x9be(%rip),%rdi
lea    0xcd4(%rip),%rdx
mov    $0x5d,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x9a6(%rip),%rdi
lea    0xcdc(%rip),%rdx
mov    $0x5e,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x98e(%rip),%rdi
lea    0xce7(%rip),%rdx
mov    $0x5f,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x976(%rip),%rdi
lea    0xcef(%rip),%rdx
mov    $0x60,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x961(%rip),%rdi
lea    0xc23(%rip),%rdx
mov    $0x61,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x94c(%rip),%rdi
lea    0xc3c(%rip),%rdx
mov    $0x62,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x937(%rip),%rdi
lea    0xcd8(%rip),%rdx
mov    $0x63,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x922(%rip),%rdi
lea    0xcfc(%rip),%rdx
mov    $0x64,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x90d(%rip),%rdi
lea    0xd1f(%rip),%rdx
mov    $0x65,%esi
jmp    1719 <test_match_prefix+0x5e9>
lea    0x8f8(%rip),%rdi
lea    0xd40(%rip),%rdx
mov    $0x66,%esi
call   1040 <printf@plt>
xor    %eax,%eax
call   1030 <abort@plt>

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

LLVM IR (-O2):
@.str = [5 x i8] c"/api\00"
@.str.1 = [23 x i8] c"Fail on line %d: [%s]\0A\00"
@.str.2 = [37 x i8] c"match_prefix(\22/api\22, 4, \22/api\22) == 4\00"
@.str.3 = [4 x i8] c"/a/\00"
@.str.4 = [7 x i8] c"/a/b/c\00"
@.str.5 = [38 x i8] c"match_prefix(\22/a/\22, 3, \22/a/b/c\22) == 3\00"
@.str.6 = [6 x i8] c"/ab/c\00"
@.str.7 = [38 x i8] c"match_prefix(\22/a/\22, 3, \22/ab/c\22) == -1\00"
@.str.8 = [4 x i8] c"/*/\00"
@.str.9 = [37 x i8] c"match_prefix(\22/*/\22, 3, \22/ab/c\22) == 4\00"
@.str.10 = [3 x i8] c"**\00"
@.str.11 = [37 x i8] c"match_prefix(\22**\22, 2, \22/a/b/c\22) == 6\00"
@.str.12 = [3 x i8] c"/*\00"
@.str.13 = [37 x i8] c"match_prefix(\22/*\22, 2, \22/a/b/c\22) == 2\00"
@.str.14 = [4 x i8] c"*/*\00"
@.str.15 = [38 x i8] c"match_prefix(\22*/*\22, 3, \22/a/b/c\22) == 2\00"
@.str.16 = [4 x i8] c"**/\00"
@.str.17 = [38 x i8] c"match_prefix(\22**/\22, 3, \22/a/b/c\22) == 5\00"
@.str.18 = [14 x i8] c"**.foo|**.bar\00"
@.str.19 = [6 x i8] c"a.bar\00"
@.str.20 = [48 x i8] c"match_prefix(\22**.foo|**.bar\22, 13, \22a.bar\22) == 5\00"
@.str.21 = [7 x i8] c"a|b|cd\00"
@.str.22 = [5 x i8] c"cdef\00"
@.str.23 = [39 x i8] c"match_prefix(\22a|b|cd\22, 6, \22cdef\22) == 2\00"
@.str.24 = [7 x i8] c"a|b|c?\00"
@.str.25 = [39 x i8] c"match_prefix(\22a|b|c?\22, 6, \22cdef\22) == 2\00"
@.str.26 = [7 x i8] c"a|?|cd\00"
@.str.27 = [39 x i8] c"match_prefix(\22a|?|cd\22, 6, \22cdef\22) == 1\00"
@.str.28 = [10 x i8] c"/a/**.cgi\00"
@.str.29 = [15 x i8] c"/foo/bar/x.cgi\00"
@.str.30 = [53 x i8] c"match_prefix(\22/a/**.cgi\22, 9, \22/foo/bar/x.cgi\22) == -1\00"
@.str.31 = [13 x i8] c"/a/bar/x.cgi\00"
@.str.32 = [51 x i8] c"match_prefix(\22/a/**.cgi\22, 9, \22/a/bar/x.cgi\22) == 12\00"
@.str.33 = [5 x i8] c"**/$\00"
@.str.34 = [40 x i8] c"match_prefix(\22**/$\22, 4, \22/a/b/c\22) == -1\00"
@.str.35 = [6 x i8] c"/a/b/\00"
@.str.36 = [38 x i8] c"match_prefix(\22**/$\22, 4, \22/a/b/\22) == 5\00"
@.str.37 = [2 x i8] c"$\00"
@.str.38 = [1 x i8] zeroinitializer
@.str.39 = [30 x i8] c"match_prefix(\22$\22, 1, \22\22) == 0\00"
@.str.40 = [2 x i8] c"x\00"
@.str.41 = [32 x i8] c"match_prefix(\22$\22, 1, \22x\22) == -1\00"
@.str.42 = [3 x i8] c"*$\00"
@.str.43 = [32 x i8] c"match_prefix(\22*$\22, 2, \22x\22) == 1\00"
@.str.44 = [3 x i8] c"/$\00"
@.str.45 = [2 x i8] c"/\00"
@.str.46 = [32 x i8] c"match_prefix(\22/$\22, 2, \22/\22) == 1\00"
@.str.47 = [2 x i8] c"*\00"
@.str.48 = [8 x i8] c"/hello/\00"
@.str.49 = [37 x i8] c"match_prefix(\22*\22, 1, \22/hello/\22) == 0\00"
@.str.50 = [12 x i8] c"**.a$|**.b$\00"
@.str.51 = [8 x i8] c"/a/b.b/\00"
@.str.52 = [49 x i8] c"match_prefix(\22**.a$|**.b$\22, 11, \22/a/b.b/\22) == -1\00"
@.str.53 = [7 x i8] c"/a/b.b\00"
@.str.54 = [47 x i8] c"match_prefix(\22**.a$|**.b$\22, 11, \22/a/b.b\22) == 6\00"
@.str.55 = [7 x i8] c"/a/b.a\00"
@.str.56 = [47 x i8] c"match_prefix(\22**.a$|**.b$\22, 11, \22/a/b.a\22) == 6\00"
define void @test_match_prefix() {
%1 = tail call i32 @match_prefix(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%2 = icmp eq i32 %1, 4
br i1 %2, label %6, label %3
3: ; preds = %0
%4 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 76, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.2, i64 0, i64 0))
%5 = tail call i32 (...) @abort()
unreachable
6: ; preds = %0
%7 = tail call i32 @match_prefix(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%8 = icmp eq i32 %7, 3
br i1 %8, label %12, label %9
9: ; preds = %6
%10 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 77, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.5, i64 0, i64 0))
%11 = tail call i32 (...) @abort()
unreachable
12: ; preds = %6
%13 = tail call i32 @match_prefix(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%14 = icmp eq i32 %13, -1
br i1 %14, label %18, label %15
15: ; preds = %12
%16 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 78, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.7, i64 0, i64 0))
%17 = tail call i32 (...) @abort()
unreachable
18: ; preds = %12
%19 = tail call i32 @match_prefix(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%20 = icmp eq i32 %19, 4
br i1 %20, label %24, label %21
21: ; preds = %18
%22 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 79, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.9, i64 0, i64 0))
%23 = tail call i32 (...) @abort()
unreachable
24: ; preds = %18
%25 = tail call i32 @match_prefix(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%26 = icmp eq i32 %25, 6
br i1 %26, label %30, label %27
27: ; preds = %24
%28 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 80, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.11, i64 0, i64 0))
%29 = tail call i32 (...) @abort()
unreachable
30: ; preds = %24
%31 = tail call i32 @match_prefix(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%32 = icmp eq i32 %31, 2
br i1 %32, label %36, label %33
33: ; preds = %30
%34 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 81, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.13, i64 0, i64 0))
%35 = tail call i32 (...) @abort()
unreachable
36: ; preds = %30
%37 = tail call i32 @match_prefix(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%38 = icmp eq i32 %37, 2
br i1 %38, label %42, label %39
39: ; preds = %36
%40 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 82, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.15, i64 0, i64 0))
%41 = tail call i32 (...) @abort()
unreachable
42: ; preds = %36
%43 = tail call i32 @match_prefix(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%44 = icmp eq i32 %43, 5
br i1 %44, label %48, label %45
45: ; preds = %42
%46 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 83, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.17, i64 0, i64 0))
%47 = tail call i32 (...) @abort()
unreachable
48: ; preds = %42
%49 = tail call i32 @match_prefix(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.18, i64 0, i64 0), i32 13, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0))
%50 = icmp eq i32 %49, 5
br i1 %50, label %54, label %51
51: ; preds = %48
%52 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 84, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.20, i64 0, i64 0))
%53 = tail call i32 (...) @abort()
unreachable
54: ; preds = %48
%55 = tail call i32 @match_prefix(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.21, i64 0, i64 0), i32 6, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.22, i64 0, i64 0))
%56 = icmp eq i32 %55, 2
br i1 %56, label %60, label %57
57: ; preds = %54
%58 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 85, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.23, i64 0, i64 0))
%59 = tail call i32 (...) @abort()
unreachable
60: ; preds = %54
%61 = tail call i32 @match_prefix(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.24, i64 0, i64 0), i32 6, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.22, i64 0, i64 0))
%62 = icmp eq i32 %61, 2
br i1 %62, label %66, label %63
63: ; preds = %60
%64 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 86, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.25, i64 0, i64 0))
%65 = tail call i32 (...) @abort()
unreachable
66: ; preds = %60
%67 = tail call i32 @match_prefix(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.22, i64 0, i64 0))
%68 = icmp eq i32 %67, 1
br i1 %68, label %72, label %69
69: ; preds = %66
%70 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 87, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.27, i64 0, i64 0))
%71 = tail call i32 (...) @abort()
unreachable
72: ; preds = %66
%73 = tail call i32 @match_prefix(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.28, i64 0, i64 0), i32 9, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.29, i64 0, i64 0))
%74 = icmp eq i32 %73, -1
br i1 %74, label %78, label %75
75: ; preds = %72
%76 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 88, i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.30, i64 0, i64 0))
%77 = tail call i32 (...) @abort()
unreachable
78: ; preds = %72
%79 = tail call i32 @match_prefix(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.28, i64 0, i64 0), i32 9, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.31, i64 0, i64 0))
%80 = icmp eq i32 %79, 12
br i1 %80, label %84, label %81
81: ; preds = %78
%82 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 89, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.32, i64 0, i64 0))
%83 = tail call i32 (...) @abort()
unreachable
84: ; preds = %78
%85 = tail call i32 @match_prefix(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%86 = icmp eq i32 %85, 5
br i1 %86, label %90, label %87
87: ; preds = %84
%88 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 90, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.17, i64 0, i64 0))
%89 = tail call i32 (...) @abort()
unreachable
90: ; preds = %84
%91 = tail call i32 @match_prefix(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%92 = icmp eq i32 %91, -1
br i1 %92, label %96, label %93
93: ; preds = %90
%94 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 91, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.34, i64 0, i64 0))
%95 = tail call i32 (...) @abort()
unreachable
96: ; preds = %90
%97 = tail call i32 @match_prefix(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.35, i64 0, i64 0))
%98 = icmp eq i32 %97, 5
br i1 %98, label %102, label %99
99: ; preds = %96
%100 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 92, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.36, i64 0, i64 0))
%101 = tail call i32 (...) @abort()
unreachable
102: ; preds = %96
%103 = tail call i32 @match_prefix(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.37, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.38, i64 0, i64 0))
%104 = icmp eq i32 %103, 0
br i1 %104, label %108, label %105
105: ; preds = %102
%106 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 93, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.39, i64 0, i64 0))
%107 = tail call i32 (...) @abort()
unreachable
108: ; preds = %102
%109 = tail call i32 @match_prefix(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.37, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.40, i64 0, i64 0))
%110 = icmp eq i32 %109, -1
br i1 %110, label %114, label %111
111: ; preds = %108
%112 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 94, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.41, i64 0, i64 0))
%113 = tail call i32 (...) @abort()
unreachable
114: ; preds = %108
%115 = tail call i32 @match_prefix(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.42, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.40, i64 0, i64 0))
%116 = icmp eq i32 %115, 1
br i1 %116, label %120, label %117
117: ; preds = %114
%118 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 95, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.43, i64 0, i64 0))
%119 = tail call i32 (...) @abort()
unreachable
120: ; preds = %114
%121 = tail call i32 @match_prefix(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.44, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.45, i64 0, i64 0))
%122 = icmp eq i32 %121, 1
br i1 %122, label %126, label %123
123: ; preds = %120
%124 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 96, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.46, i64 0, i64 0))
%125 = tail call i32 (...) @abort()
unreachable
126: ; preds = %120
%127 = tail call i32 @match_prefix(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%128 = icmp eq i32 %127, -1
br i1 %128, label %132, label %129
129: ; preds = %126
%130 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 97, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.34, i64 0, i64 0))
%131 = tail call i32 (...) @abort()
unreachable
132: ; preds = %126
%133 = tail call i32 @match_prefix(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.35, i64 0, i64 0))
%134 = icmp eq i32 %133, 5
br i1 %134, label %138, label %135
135: ; preds = %132
%136 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 98, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.36, i64 0, i64 0))
%137 = tail call i32 (...) @abort()
unreachable
138: ; preds = %132
%139 = tail call i32 @match_prefix(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.47, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.48, i64 0, i64 0))
%140 = icmp eq i32 %139, 0
br i1 %140, label %144, label %141
141: ; preds = %138
%142 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 99, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.49, i64 0, i64 0))
%143 = tail call i32 (...) @abort()
unreachable
144: ; preds = %138
%145 = tail call i32 @match_prefix(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.50, i64 0, i64 0), i32 11, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.51, i64 0, i64 0))
%146 = icmp eq i32 %145, -1
br i1 %146, label %150, label %147
147: ; preds = %144
%148 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 100, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.52, i64 0, i64 0))
%149 = tail call i32 (...) @abort()
unreachable
150: ; preds = %144
%151 = tail call i32 @match_prefix(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.50, i64 0, i64 0), i32 11, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.53, i64 0, i64 0))
%152 = icmp eq i32 %151, 6
br i1 %152, label %156, label %153
153: ; preds = %150
%154 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 101, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.54, i64 0, i64 0))
%155 = tail call i32 (...) @abort()
unreachable
156: ; preds = %150
%157 = tail call i32 @match_prefix(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.50, i64 0, i64 0), i32 11, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.55, i64 0, i64 0))
%158 = icmp eq i32 %157, 6
br i1 %158, label %162, label %159
159: ; preds = %156
%160 = tail call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 102, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.56, i64 0, i64 0))
%161 = tail call i32 (...) @abort()
unreachable
162: ; preds = %156
ret void
}