#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*/ assert(int);
scalar_t__ b64cmpn(char *, char *, int);
scalar_t__ deccmp(char *, int, char *, int);
int diglenn(char *, int);
int fdiglenn(char *, int);
scalar_t__ hexcmpn(char *, char *, int);
scalar_t__ nrmcmpn(char *, char *, int);
int /*<<< orphan*/ rx_init();
int rx_match(char *, char *, int);
int tokcntn(char *, int);
int toklenn(char *, int);
void xsd_test() {
  rx_init();
  assert(toklenn("", 0) == 0);
  assert(toklenn("A", 1) == 1);
  assert(toklenn(" A  ", 4) == 1);
  assert(toklenn(" A  B  ", 7) == 3);
  assert(tokcntn("", 0) == 0);
  assert(tokcntn("A", 1) == 1);
  assert(tokcntn("AB CD", 5) == 2);
  assert(tokcntn("   AB  C ", 9) == 2);
  assert(diglenn(" +14.25", 7) == 4);
  assert(diglenn("1", 1) == 1);
  assert(diglenn("0", 1) == 1);
  assert(diglenn("+00.0", 5) == 1);
  assert(fdiglenn(".1", 2) == 1);
  assert(fdiglenn("+0.0140", 7) == 3);
  assert(fdiglenn("0", 1) == 0);
  assert(deccmp("0", 1, "0.0", 3) == 0);
  assert(deccmp("1 ", 2, " 1", 2) == 0);
  assert(deccmp("0.", 2, ".0", 2) == 0);
  assert(deccmp("1", 1, "1.0", 3) == 0);
  assert(deccmp("01.1", 4, "1.10", 4) == 0);
  assert(deccmp("+1", 2, "1.0", 3) == 0);
  assert(deccmp("+0.", 3, "-0", 2) == 0);
  assert(deccmp("0", 1, "0.1", 3) < 0);
  assert(deccmp("1.", 2, ".0", 2) > 0);
  assert(deccmp("+1", 2, "-1", 2) > 0);
  assert(hexcmpn("", "", 0) == 0);
  assert(hexcmpn("ABC123", "ABC123", 6) == 0);
  assert(hexcmpn("aBCd", "AbCd", 4) == 0);
  assert(hexcmpn("ABC 123", " ABC123", 7) == 0);
  assert(hexcmpn("ABC124", "ABC123", 6) > 0);
  assert(rx_match("("
                  "([A-Za-z0-9+/] ?)"
                  "{4})*"
                  "("
                  "([A-Za-z0-9+/] ?)"
                  "([AQgw] ?)"
                  "= ?="
                  "|"
                  "([A-Za-z0-9+/] ?)"
                  "{2}"
                  "([AEIMQUYcgkosw048] ?)"
                  "=)?",
                  "", 0));
  assert(rx_match("("
                  "([A-Za-z0-9+/] ?)"
                  "{4})*"
                  "("
                  "([A-Za-z0-9+/] ?)"
                  "([AQgw] ?)"
                  "= ?="
                  "|"
                  "([A-Za-z0-9+/] ?)"
                  "{2}"
                  "([AEIMQUYcgkosw048] ?)"
                  "=)?",
                  "YmFz", 4));
  assert(rx_match("("
                  "([A-Za-z0-9+/] ?)"
                  "{4})*"
                  "("
                  "([A-Za-z0-9+/] ?)"
                  "([AQgw] ?)"
                  "= ?="
                  "|"
                  "([A-Za-z0-9+/] ?)"
                  "{2}"
                  "([AEIMQUYcgkosw048] ?)"
                  "=)?",
                  "YA==", 4));
  assert(rx_match("("
                  "([A-Za-z0-9+/] ?)"
                  "{4})*"
                  "("
                  "([A-Za-z0-9+/] ?)"
                  "([AQgw] ?)"
                  "= ?="
                  "|"
                  "([A-Za-z0-9+/] ?)"
                  "{2}"
                  "([AEIMQUYcgkosw048] ?)"
                  "=)?",
                  "Y w = =", 7));
  assert(rx_match("("
                  "([A-Za-z0-9+/] ?)"
                  "{4})*"
                  "("
                  "([A-Za-z0-9+/] ?)"
                  "([AQgw] ?)"
                  "= ?="
                  "|"
                  "([A-Za-z0-9+/] ?)"
                  "{2}"
                  "([AEIMQUYcgkosw048] ?)"
                  "=)?",
                  "YF8=", 4));
  assert(!rx_match("("
                   "([A-Za-z0-9+/] ?)"
                   "{4})*"
                   "("
                   "([A-Za-z0-9+/] ?)"
                   "([AQgw] ?)"
                   "= ?="
                   "|"
                   "([A-Za-z0-9+/] ?)"
                   "{2}"
                   "([AEIMQUYcgkosw048] ?)"
                   "=)?",
                   "YmF@", 4));
  assert(!rx_match("("
                   "([A-Za-z0-9+/] ?)"
                   "{4})*"
                   "("
                   "([A-Za-z0-9+/] ?)"
                   "([AQgw] ?)"
                   "= ?="
                   "|"
                   "([A-Za-z0-9+/] ?)"
                   "{2}"
                   "([AEIMQUYcgkosw048] ?)"
                   "=)?",
                   "YmFgH", 5));
  assert(!rx_match("("
                   "([A-Za-z0-9+/] ?)"
                   "{4})*"
                   "("
                   "([A-Za-z0-9+/] ?)"
                   "([AQgw] ?)"
                   "= ?="
                   "|"
                   "([A-Za-z0-9+/] ?)"
                   "{2}"
                   "([AEIMQUYcgkosw048] ?)"
                   "=)?",
                   "Y===", 4));
  assert(!rx_match("("
                   "([A-Za-z0-9+/] ?)"
                   "{4})*"
                   "("
                   "([A-Za-z0-9+/] ?)"
                   "([AQgw] ?)"
                   "= ?="
                   "|"
                   "([A-Za-z0-9+/] ?)"
                   "{2}"
                   "([AEIMQUYcgkosw048] ?)"
                   "=)?",
                   "YF=O", 4));
  assert(!rx_match("("
                   "([A-Za-z0-9+/] ?)"
                   "{4})*"
                   "("
                   "([A-Za-z0-9+/] ?)"
                   "([AQgw] ?)"
                   "= ?="
                   "|"
                   "([A-Za-z0-9+/] ?)"
                   "{2}"
                   "([AEIMQUYcgkosw048] ?)"
                   "=)?",
                   "YFZ=", 4));
  assert(b64cmpn("", "", 0) == 0);
  assert(b64cmpn("ABC123", "ABC123", 6) == 0);
  assert(b64cmpn("ABC 123", " ABC123", 7) == 0);
  assert(b64cmpn("ABC124", "ABC123", 6) > 0);
  assert(b64cmpn("ABC123", "abc123", 6) < 0);
  assert(nrmcmpn("A B", "A B", 3) == 0);
  assert(nrmcmpn("A B", "A C", 3) < 0);
  assert(nrmcmpn("A B", "A\nB", 3) == 0);
  assert(nrmcmpn(" A", "A ", 2) < 0);
}


x86 assembly (clang, -O0):
<xsd_test>:
push   %rbp
mov    %rsp,%rbp
mov    $0x0,%al
call   1030 <rx_init@plt>
lea    0xe42(%rip),%rdi
xor    %esi,%esi
call   10d0 <toklenn@plt>
cmp    $0x0,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xf47(%rip),%rdi
mov    $0x1,%esi
call   10d0 <toklenn@plt>
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xdff(%rip),%rdi
mov    $0x4,%esi
call   10d0 <toklenn@plt>
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xde3(%rip),%rdi
mov    $0x7,%esi
call   10d0 <toklenn@plt>
cmp    $0x3,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xdc1(%rip),%rdi
xor    %esi,%esi
call   1040 <tokcntn@plt>
cmp    $0x0,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xec6(%rip),%rdi
mov    $0x1,%esi
call   1040 <tokcntn@plt>
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xd8b(%rip),%rdi
mov    $0x5,%esi
call   1040 <tokcntn@plt>
cmp    $0x2,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xd70(%rip),%rdi
mov    $0x9,%esi
call   1040 <tokcntn@plt>
cmp    $0x2,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xd59(%rip),%rdi
mov    $0x7,%esi
call   10c0 <diglenn@plt>
cmp    $0x4,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xd52(%rip),%rdi
mov    $0x1,%esi
call   10c0 <diglenn@plt>
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xd49(%rip),%rdi
mov    $0x1,%esi
call   10c0 <diglenn@plt>
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xcfe(%rip),%rdi
mov    $0x5,%esi
call   10c0 <diglenn@plt>
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xd0a(%rip),%rdi
mov    $0x2,%esi
call   1060 <fdiglenn@plt>
cmp    $0x1,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xcc2(%rip),%rdi
mov    $0x7,%esi
call   1060 <fdiglenn@plt>
cmp    $0x3,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xcc5(%rip),%rdi
mov    $0x1,%esi
call   1060 <fdiglenn@plt>
cmp    $0x0,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xca4(%rip),%rdi
mov    $0x1,%esi
lea    0xc70(%rip),%rdx
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xc5a(%rip),%rdi
mov    $0x2,%ecx
lea    0xc51(%rip),%rdx
mov    %ecx,%esi
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xc47(%rip),%rdi
mov    $0x2,%ecx
lea    0xc18(%rip),%rdx
mov    %ecx,%esi
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xc08(%rip),%rdi
mov    $0x1,%esi
lea    0xbfe(%rip),%rdx
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xbe0(%rip),%rdi
mov    $0x4,%ecx
lea    0xbd9(%rip),%rdx
mov    %ecx,%esi
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xbbf(%rip),%rdi
mov    $0x2,%esi
lea    0xba5(%rip),%rdx
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xb94(%rip),%rdi
mov    $0x3,%esi
lea    0xb8c(%rip),%rdx
mov    $0x2,%ecx
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xb6b(%rip),%rdi
mov    $0x1,%esi
lea    0xb61(%rip),%rdx
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
setl   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xb43(%rip),%rdi
mov    $0x2,%ecx
lea    0xb0a(%rip),%rdx
mov    %ecx,%esi
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
setg   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xb0a(%rip),%rdi
mov    $0x2,%ecx
lea    0xb0f(%rip),%rdx
mov    %ecx,%esi
call   10a0 <deccmp@plt>
cmp    $0x0,%rax
setg   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xa9c(%rip),%rsi
xor    %edx,%edx
mov    %rsi,%rdi
call   1050 <hexcmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xae4(%rip),%rsi
mov    $0x6,%edx
mov    %rsi,%rdi
call   1050 <hexcmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xaac(%rip),%rdi
lea    0xaaa(%rip),%rsi
mov    $0x4,%edx
call   1050 <hexcmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xa8d(%rip),%rdi
lea    0xa8e(%rip),%rsi
mov    $0x7,%edx
call   1050 <hexcmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xa74(%rip),%rdi
lea    0xa66(%rip),%rsi
mov    $0x6,%edx
call   1050 <hexcmpn@plt>
cmp    $0x0,%rax
setg   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0xa52(%rip),%rdi
lea    0x9d3(%rip),%rsi
xor    %edx,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xa36(%rip),%rdi
lea    0xa95(%rip),%rsi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xa17(%rip),%rdi
lea    0xa7b(%rip),%rsi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0x9f8(%rip),%rdi
lea    0xa61(%rip),%rsi
mov    $0x7,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0x9d9(%rip),%rdi
lea    0xa4a(%rip),%rsi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0x9ba(%rip),%rdi
lea    0xa30(%rip),%rsi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x990(%rip),%rdi
lea    0xa0b(%rip),%rsi
mov    $0x5,%edx
call   10b0 <rx_match@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x966(%rip),%rdi
lea    0x9e7(%rip),%rsi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x93c(%rip),%rdi
lea    0x9c2(%rip),%rsi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x912(%rip),%rdi
lea    0x99d(%rip),%rsi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x870(%rip),%rsi
xor    %edx,%edx
mov    %rsi,%rdi
call   1070 <b64cmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x8b8(%rip),%rsi
mov    $0x6,%edx
mov    %rsi,%rdi
call   1070 <b64cmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x88a(%rip),%rdi
lea    0x88b(%rip),%rsi
mov    $0x7,%edx
call   1070 <b64cmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x871(%rip),%rdi
lea    0x863(%rip),%rsi
mov    $0x6,%edx
call   1070 <b64cmpn@plt>
cmp    $0x0,%rax
setg   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x841(%rip),%rdi
lea    0x8df(%rip),%rsi
mov    $0x6,%edx
call   1070 <b64cmpn@plt>
cmp    $0x0,%rax
setl   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x8c4(%rip),%rsi
mov    $0x3,%edx
mov    %rsi,%rdi
call   1080 <nrmcmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x89f(%rip),%rdi
lea    0x89c(%rip),%rsi
mov    $0x3,%edx
call   1080 <nrmcmpn@plt>
cmp    $0x0,%rax
setl   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x876(%rip),%rdi
lea    0x877(%rip),%rsi
mov    $0x3,%edx
call   1080 <nrmcmpn@plt>
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
lea    0x859(%rip),%rdi
lea    0x855(%rip),%rsi
mov    $0x2,%edx
call   1080 <nrmcmpn@plt>
cmp    $0x0,%rax
setl   %al
and    $0x1,%al
movzbl %al,%edi
call   1090 <assert@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<xsd_test>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %eax,%eax
call   1030 <rx_init@plt>
lea    0xe3b(%rip),%r14
mov    %r14,%rdi
xor    %esi,%esi
call   10d0 <toklenn@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xf40(%rip),%rbx
mov    %rbx,%rdi
mov    $0x1,%esi
call   10d0 <toklenn@plt>
xor    %edi,%edi
cmp    $0x1,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xdf7(%rip),%rdi
mov    $0x4,%esi
call   10d0 <toklenn@plt>
xor    %edi,%edi
cmp    $0x1,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xddd(%rip),%rdi
mov    $0x7,%esi
call   10d0 <toklenn@plt>
xor    %edi,%edi
cmp    $0x3,%eax
sete   %dil
call   1090 <assert@plt>
mov    %r14,%rdi
xor    %esi,%esi
call   1040 <tokcntn@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
call   1040 <tokcntn@plt>
xor    %edi,%edi
cmp    $0x1,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xd94(%rip),%rdi
mov    $0x5,%esi
call   1040 <tokcntn@plt>
xor    %edi,%edi
cmp    $0x2,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xd7b(%rip),%rdi
mov    $0x9,%esi
call   1040 <tokcntn@plt>
xor    %edi,%edi
cmp    $0x2,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xd66(%rip),%rdi
mov    $0x7,%esi
call   10c0 <diglenn@plt>
xor    %edi,%edi
cmp    $0x4,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xd61(%rip),%r15
mov    %r15,%rdi
mov    $0x1,%esi
call   10c0 <diglenn@plt>
xor    %edi,%edi
cmp    $0x1,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xd57(%rip),%r12
mov    %r12,%rdi
mov    $0x1,%esi
call   10c0 <diglenn@plt>
xor    %edi,%edi
cmp    $0x1,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xd0b(%rip),%rdi
mov    $0x5,%esi
call   10c0 <diglenn@plt>
xor    %edi,%edi
cmp    $0x1,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xd19(%rip),%rdi
mov    $0x2,%esi
call   1060 <fdiglenn@plt>
xor    %edi,%edi
cmp    $0x1,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xcd3(%rip),%rdi
mov    $0x7,%esi
call   1060 <fdiglenn@plt>
xor    %edi,%edi
cmp    $0x3,%eax
sete   %dil
call   1090 <assert@plt>
mov    %r12,%rdi
mov    $0x1,%esi
call   1060 <fdiglenn@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xc96(%rip),%rdx
mov    %r12,%rdi
mov    $0x1,%esi
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xc7b(%rip),%rdi
lea    0xc77(%rip),%rdx
mov    $0x2,%esi
mov    $0x2,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xc68(%rip),%rdi
lea    0xc3e(%rip),%r13
mov    $0x2,%esi
mov    %r13,%rdx
mov    $0x2,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xc28(%rip),%rbp
mov    %r15,%rdi
mov    $0x1,%esi
mov    %rbp,%rdx
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xc02(%rip),%rdi
lea    0xc00(%rip),%rdx
mov    $0x4,%esi
mov    $0x4,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xbe1(%rip),%rbx
mov    %rbx,%rdi
mov    $0x2,%esi
mov    %rbp,%rdx
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xbba(%rip),%rdi
lea    0xbb7(%rip),%rdx
mov    $0x3,%esi
mov    $0x2,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xb96(%rip),%rdx
mov    %r12,%rdi
mov    $0x1,%esi
mov    $0x3,%ecx
call   10a0 <deccmp@plt>
shr    $0x3f,%rax
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xb76(%rip),%rdi
mov    $0x2,%esi
mov    %r13,%rdx
mov    $0x2,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
setg   %dil
call   1090 <assert@plt>
lea    0xb52(%rip),%rdx
mov    %rbx,%rdi
mov    $0x2,%esi
mov    $0x2,%ecx
call   10a0 <deccmp@plt>
xor    %edi,%edi
test   %rax,%rax
setg   %dil
call   1090 <assert@plt>
mov    %r14,%rdi
mov    %r14,%rsi
xor    %edx,%edx
call   1050 <hexcmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xb26(%rip),%rbx
mov    %rbx,%rdi
mov    %rbx,%rsi
mov    $0x6,%edx
call   1050 <hexcmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xaee(%rip),%rdi
lea    0xaec(%rip),%rsi
mov    $0x4,%edx
call   1050 <hexcmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xad2(%rip),%r15
lea    0xad3(%rip),%r12
mov    %r15,%rdi
mov    %r12,%rsi
mov    $0x7,%edx
call   1050 <hexcmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0xab6(%rip),%r13
mov    %r13,%rdi
mov    %rbx,%rsi
mov    $0x6,%edx
call   1050 <hexcmpn@plt>
xor    %edi,%edi
test   %rax,%rax
setg   %dil
call   1090 <assert@plt>
lea    0xa98(%rip),%rbp
mov    %rbp,%rdi
mov    %r14,%rsi
xor    %edx,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xae3(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xacd(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xab7(%rip),%rsi
mov    %rbp,%rdi
mov    $0x7,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xaa4(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
mov    %eax,%edi
call   1090 <assert@plt>
lea    0xa8e(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xa72(%rip),%rsi
mov    %rbp,%rdi
mov    $0x5,%edx
call   10b0 <rx_match@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xa57(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xa3b(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
lea    0xa1f(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   10b0 <rx_match@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1090 <assert@plt>
mov    %r14,%rdi
mov    %r14,%rsi
xor    %edx,%edx
call   1070 <b64cmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
mov    %rbx,%rdi
mov    %rbx,%rsi
mov    $0x6,%edx
call   1070 <b64cmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
mov    %r15,%rdi
mov    %r12,%rsi
mov    $0x7,%edx
call   1070 <b64cmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
mov    %r13,%rdi
mov    %rbx,%rsi
mov    $0x6,%edx
call   1070 <b64cmpn@plt>
xor    %edi,%edi
test   %rax,%rax
setg   %dil
call   1090 <assert@plt>
lea    0x98e(%rip),%rsi
mov    %rbx,%rdi
mov    $0x6,%edx
call   1070 <b64cmpn@plt>
shr    $0x3f,%rax
mov    %eax,%edi
call   1090 <assert@plt>
lea    0x976(%rip),%rbx
mov    %rbx,%rdi
mov    %rbx,%rsi
mov    $0x3,%edx
call   1080 <nrmcmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0x955(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1080 <nrmcmpn@plt>
shr    $0x3f,%rax
mov    %eax,%edi
call   1090 <assert@plt>
lea    0x93a(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1080 <nrmcmpn@plt>
xor    %edi,%edi
test   %rax,%rax
sete   %dil
call   1090 <assert@plt>
lea    0x91c(%rip),%rdi
lea    0x918(%rip),%rsi
mov    $0x2,%edx
call   1080 <nrmcmpn@plt>
shr    $0x3f,%rax
mov    %eax,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1090 <assert@plt>

LLVM IR (-O0):
@.str = [1 x i8] zeroinitializer
@.str.1 = [2 x i8] c"A\00"
@.str.2 = [5 x i8] c" A \00"
@.str.3 = [8 x i8] c" A B \00"
@.str.4 = [6 x i8] c"AB CD\00"
@.str.5 = [10 x i8] c" AB C \00"
@.str.6 = [8 x i8] c" +14.25\00"
@.str.7 = [2 x i8] c"1\00"
@.str.8 = [2 x i8] c"0\00"
@.str.9 = [6 x i8] c"+00.0\00"
@.str.10 = [3 x i8] c".1\00"
@.str.11 = [8 x i8] c"+0.0140\00"
@.str.12 = [4 x i8] c"0.0\00"
@.str.13 = [3 x i8] c"1 \00"
@.str.14 = [3 x i8] c" 1\00"
@.str.15 = [3 x i8] c"0.\00"
@.str.16 = [3 x i8] c".0\00"
@.str.17 = [4 x i8] c"1.0\00"
@.str.18 = [5 x i8] c"01.1\00"
@.str.19 = [5 x i8] c"1.10\00"
@.str.20 = [3 x i8] c"+1\00"
@.str.21 = [4 x i8] c"+0.\00"
@.str.22 = [3 x i8] c"-0\00"
@.str.23 = [4 x i8] c"0.1\00"
@.str.24 = [3 x i8] c"1.\00"
@.str.25 = [3 x i8] c"-1\00"
@.str.26 = [7 x i8] c"ABC123\00"
@.str.27 = [5 x i8] c"aBCd\00"
@.str.28 = [5 x i8] c"AbCd\00"
@.str.29 = [8 x i8] c"ABC 123\00"
@.str.30 = [8 x i8] c" ABC123\00"
@.str.31 = [7 x i8] c"ABC124\00"
@.str.32 = [102 x i8] c"(([A-Za-z0-9+/] ?){4})*(([A-Za-z0-9+/] ?)([AQgw] ?)= ?=|([A-Za-z0-9+/] ?){2}([AEIMQUYcgkosw048] ?)=)?\00"
@.str.33 = [5 x i8] c"YmFz\00"
@.str.34 = [5 x i8] c"YA==\00"
@.str.35 = [8 x i8] c"Y w = =\00"
@.str.36 = [5 x i8] c"YF8=\00"
@.str.37 = [5 x i8] c"YmF@\00"
@.str.38 = [6 x i8] c"YmFgH\00"
@.str.39 = [5 x i8] c"Y===\00"
@.str.40 = [5 x i8] c"YF=O\00"
@.str.41 = [5 x i8] c"YFZ=\00"
@.str.42 = [7 x i8] c"abc123\00"
@.str.43 = [4 x i8] c"A B\00"
@.str.44 = [4 x i8] c"A C\00"
@.str.45 = [4 x i8] c"A\0AB\00"
@.str.46 = [3 x i8] c" A\00"
@.str.47 = [3 x i8] c"A \00"
define void @xsd_test() {
%1 = call i32 (...) @rx_init()
%2 = call i32 @toklenn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%3 = icmp eq i32 %2, 0
%4 = zext i1 %3 to i32
%5 = call i32 @assert(i32 %4)
%6 = call i32 @toklenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 1)
%7 = icmp eq i32 %6, 1
%8 = zext i1 %7 to i32
%9 = call i32 @assert(i32 %8)
%10 = call i32 @toklenn(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i32 4)
%11 = icmp eq i32 %10, 1
%12 = zext i1 %11 to i32
%13 = call i32 @assert(i32 %12)
%14 = call i32 @toklenn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0), i32 7)
%15 = icmp eq i32 %14, 3
%16 = zext i1 %15 to i32
%17 = call i32 @assert(i32 %16)
%18 = call i32 @tokcntn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%19 = icmp eq i32 %18, 0
%20 = zext i1 %19 to i32
%21 = call i32 @assert(i32 %20)
%22 = call i32 @tokcntn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 1)
%23 = icmp eq i32 %22, 1
%24 = zext i1 %23 to i32
%25 = call i32 @assert(i32 %24)
%26 = call i32 @tokcntn(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i32 5)
%27 = icmp eq i32 %26, 2
%28 = zext i1 %27 to i32
%29 = call i32 @assert(i32 %28)
%30 = call i32 @tokcntn(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0), i32 9)
%31 = icmp eq i32 %30, 2
%32 = zext i1 %31 to i32
%33 = call i32 @assert(i32 %32)
%34 = call i32 @diglenn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.6, i64 0, i64 0), i32 7)
%35 = icmp eq i32 %34, 4
%36 = zext i1 %35 to i32
%37 = call i32 @assert(i32 %36)
%38 = call i32 @diglenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), i32 1)
%39 = icmp eq i32 %38, 1
%40 = zext i1 %39 to i32
%41 = call i32 @assert(i32 %40)
%42 = call i32 @diglenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1)
%43 = icmp eq i32 %42, 1
%44 = zext i1 %43 to i32
%45 = call i32 @assert(i32 %44)
%46 = call i32 @diglenn(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0), i32 5)
%47 = icmp eq i32 %46, 1
%48 = zext i1 %47 to i32
%49 = call i32 @assert(i32 %48)
%50 = call i32 @fdiglenn(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i32 2)
%51 = icmp eq i32 %50, 1
%52 = zext i1 %51 to i32
%53 = call i32 @assert(i32 %52)
%54 = call i32 @fdiglenn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 7)
%55 = icmp eq i32 %54, 3
%56 = zext i1 %55 to i32
%57 = call i32 @assert(i32 %56)
%58 = call i32 @fdiglenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1)
%59 = icmp eq i32 %58, 0
%60 = zext i1 %59 to i32
%61 = call i32 @assert(i32 %60)
%62 = call i64 @deccmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i64 0, i64 0), i32 3)
%63 = icmp eq i64 %62, 0
%64 = zext i1 %63 to i32
%65 = call i32 @assert(i32 %64)
%66 = call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 2)
%67 = icmp eq i64 %66, 0
%68 = zext i1 %67 to i32
%69 = call i32 @assert(i32 %68)
%70 = call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.16, i64 0, i64 0), i32 2)
%71 = icmp eq i64 %70, 0
%72 = zext i1 %71 to i32
%73 = call i32 @assert(i32 %72)
%74 = call i64 @deccmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0), i32 3)
%75 = icmp eq i64 %74, 0
%76 = zext i1 %75 to i32
%77 = call i32 @assert(i32 %76)
%78 = call i64 @deccmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.19, i64 0, i64 0), i32 4)
%79 = icmp eq i64 %78, 0
%80 = zext i1 %79 to i32
%81 = call i32 @assert(i32 %80)
%82 = call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.20, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0), i32 3)
%83 = icmp eq i64 %82, 0
%84 = zext i1 %83 to i32
%85 = call i32 @assert(i32 %84)
%86 = call i64 @deccmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.22, i64 0, i64 0), i32 2)
%87 = icmp eq i64 %86, 0
%88 = zext i1 %87 to i32
%89 = call i32 @assert(i32 %88)
%90 = call i64 @deccmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i64 0, i64 0), i32 3)
%91 = icmp slt i64 %90, 0
%92 = zext i1 %91 to i32
%93 = call i32 @assert(i32 %92)
%94 = call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.16, i64 0, i64 0), i32 2)
%95 = icmp sgt i64 %94, 0
%96 = zext i1 %95 to i32
%97 = call i32 @assert(i32 %96)
%98 = call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.20, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.25, i64 0, i64 0), i32 2)
%99 = icmp sgt i64 %98, 0
%100 = zext i1 %99 to i32
%101 = call i32 @assert(i32 %100)
%102 = call i64 @hexcmpn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%103 = icmp eq i64 %102, 0
%104 = zext i1 %103 to i32
%105 = call i32 @assert(i32 %104)
%106 = call i64 @hexcmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%107 = icmp eq i64 %106, 0
%108 = zext i1 %107 to i32
%109 = call i32 @assert(i32 %108)
%110 = call i64 @hexcmpn(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.28, i64 0, i64 0), i32 4)
%111 = icmp eq i64 %110, 0
%112 = zext i1 %111 to i32
%113 = call i32 @assert(i32 %112)
%114 = call i64 @hexcmpn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.29, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.30, i64 0, i64 0), i32 7)
%115 = icmp eq i64 %114, 0
%116 = zext i1 %115 to i32
%117 = call i32 @assert(i32 %116)
%118 = call i64 @hexcmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.31, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%119 = icmp sgt i64 %118, 0
%120 = zext i1 %119 to i32
%121 = call i32 @assert(i32 %120)
%122 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%123 = call i32 @assert(i32 %122)
%124 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), i32 4)
%125 = call i32 @assert(i32 %124)
%126 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.34, i64 0, i64 0), i32 4)
%127 = call i32 @assert(i32 %126)
%128 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.35, i64 0, i64 0), i32 7)
%129 = call i32 @assert(i32 %128)
%130 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.36, i64 0, i64 0), i32 4)
%131 = call i32 @assert(i32 %130)
%132 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.37, i64 0, i64 0), i32 4)
%133 = icmp ne i32 %132, 0
%134 = xor i1 %133, true
%135 = zext i1 %134 to i32
%136 = call i32 @assert(i32 %135)
%137 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.38, i64 0, i64 0), i32 5)
%138 = icmp ne i32 %137, 0
%139 = xor i1 %138, true
%140 = zext i1 %139 to i32
%141 = call i32 @assert(i32 %140)
%142 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.39, i64 0, i64 0), i32 4)
%143 = icmp ne i32 %142, 0
%144 = xor i1 %143, true
%145 = zext i1 %144 to i32
%146 = call i32 @assert(i32 %145)
%147 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.40, i64 0, i64 0), i32 4)
%148 = icmp ne i32 %147, 0
%149 = xor i1 %148, true
%150 = zext i1 %149 to i32
%151 = call i32 @assert(i32 %150)
%152 = call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 4)
%153 = icmp ne i32 %152, 0
%154 = xor i1 %153, true
%155 = zext i1 %154 to i32
%156 = call i32 @assert(i32 %155)
%157 = call i64 @b64cmpn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%158 = icmp eq i64 %157, 0
%159 = zext i1 %158 to i32
%160 = call i32 @assert(i32 %159)
%161 = call i64 @b64cmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%162 = icmp eq i64 %161, 0
%163 = zext i1 %162 to i32
%164 = call i32 @assert(i32 %163)
%165 = call i64 @b64cmpn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.29, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.30, i64 0, i64 0), i32 7)
%166 = icmp eq i64 %165, 0
%167 = zext i1 %166 to i32
%168 = call i32 @assert(i32 %167)
%169 = call i64 @b64cmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.31, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%170 = icmp sgt i64 %169, 0
%171 = zext i1 %170 to i32
%172 = call i32 @assert(i32 %171)
%173 = call i64 @b64cmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.42, i64 0, i64 0), i32 6)
%174 = icmp slt i64 %173, 0
%175 = zext i1 %174 to i32
%176 = call i32 @assert(i32 %175)
%177 = call i64 @nrmcmpn(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i32 3)
%178 = icmp eq i64 %177, 0
%179 = zext i1 %178 to i32
%180 = call i32 @assert(i32 %179)
%181 = call i64 @nrmcmpn(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i64 0, i64 0), i32 3)
%182 = icmp slt i64 %181, 0
%183 = zext i1 %182 to i32
%184 = call i32 @assert(i32 %183)
%185 = call i64 @nrmcmpn(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.45, i64 0, i64 0), i32 3)
%186 = icmp eq i64 %185, 0
%187 = zext i1 %186 to i32
%188 = call i32 @assert(i32 %187)
%189 = call i64 @nrmcmpn(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.46, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.47, i64 0, i64 0), i32 2)
%190 = icmp slt i64 %189, 0
%191 = zext i1 %190 to i32
%192 = call i32 @assert(i32 %191)
ret void
}

LLVM IR (-O2):
@.str = [1 x i8] zeroinitializer
@.str.1 = [2 x i8] c"A\00"
@.str.2 = [5 x i8] c" A \00"
@.str.3 = [8 x i8] c" A B \00"
@.str.4 = [6 x i8] c"AB CD\00"
@.str.5 = [10 x i8] c" AB C \00"
@.str.6 = [8 x i8] c" +14.25\00"
@.str.7 = [2 x i8] c"1\00"
@.str.8 = [2 x i8] c"0\00"
@.str.9 = [6 x i8] c"+00.0\00"
@.str.10 = [3 x i8] c".1\00"
@.str.11 = [8 x i8] c"+0.0140\00"
@.str.12 = [4 x i8] c"0.0\00"
@.str.13 = [3 x i8] c"1 \00"
@.str.14 = [3 x i8] c" 1\00"
@.str.15 = [3 x i8] c"0.\00"
@.str.16 = [3 x i8] c".0\00"
@.str.17 = [4 x i8] c"1.0\00"
@.str.18 = [5 x i8] c"01.1\00"
@.str.19 = [5 x i8] c"1.10\00"
@.str.20 = [3 x i8] c"+1\00"
@.str.21 = [4 x i8] c"+0.\00"
@.str.22 = [3 x i8] c"-0\00"
@.str.23 = [4 x i8] c"0.1\00"
@.str.24 = [3 x i8] c"1.\00"
@.str.25 = [3 x i8] c"-1\00"
@.str.26 = [7 x i8] c"ABC123\00"
@.str.27 = [5 x i8] c"aBCd\00"
@.str.28 = [5 x i8] c"AbCd\00"
@.str.29 = [8 x i8] c"ABC 123\00"
@.str.30 = [8 x i8] c" ABC123\00"
@.str.31 = [7 x i8] c"ABC124\00"
@.str.32 = [102 x i8] c"(([A-Za-z0-9+/] ?){4})*(([A-Za-z0-9+/] ?)([AQgw] ?)= ?=|([A-Za-z0-9+/] ?){2}([AEIMQUYcgkosw048] ?)=)?\00"
@.str.33 = [5 x i8] c"YmFz\00"
@.str.34 = [5 x i8] c"YA==\00"
@.str.35 = [8 x i8] c"Y w = =\00"
@.str.36 = [5 x i8] c"YF8=\00"
@.str.37 = [5 x i8] c"YmF@\00"
@.str.38 = [6 x i8] c"YmFgH\00"
@.str.39 = [5 x i8] c"Y===\00"
@.str.40 = [5 x i8] c"YF=O\00"
@.str.41 = [5 x i8] c"YFZ=\00"
@.str.42 = [7 x i8] c"abc123\00"
@.str.43 = [4 x i8] c"A B\00"
@.str.44 = [4 x i8] c"A C\00"
@.str.45 = [4 x i8] c"A\0AB\00"
@.str.46 = [3 x i8] c" A\00"
@.str.47 = [3 x i8] c"A \00"
define void @xsd_test() {
%1 = tail call i32 (...) @rx_init()
%2 = tail call i32 @toklenn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%3 = icmp eq i32 %2, 0
%4 = zext i1 %3 to i32
%5 = tail call i32 @assert(i32 %4)
%6 = tail call i32 @toklenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 1)
%7 = icmp eq i32 %6, 1
%8 = zext i1 %7 to i32
%9 = tail call i32 @assert(i32 %8)
%10 = tail call i32 @toklenn(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i32 4)
%11 = icmp eq i32 %10, 1
%12 = zext i1 %11 to i32
%13 = tail call i32 @assert(i32 %12)
%14 = tail call i32 @toklenn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0), i32 7)
%15 = icmp eq i32 %14, 3
%16 = zext i1 %15 to i32
%17 = tail call i32 @assert(i32 %16)
%18 = tail call i32 @tokcntn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%19 = icmp eq i32 %18, 0
%20 = zext i1 %19 to i32
%21 = tail call i32 @assert(i32 %20)
%22 = tail call i32 @tokcntn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0), i32 1)
%23 = icmp eq i32 %22, 1
%24 = zext i1 %23 to i32
%25 = tail call i32 @assert(i32 %24)
%26 = tail call i32 @tokcntn(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i32 5)
%27 = icmp eq i32 %26, 2
%28 = zext i1 %27 to i32
%29 = tail call i32 @assert(i32 %28)
%30 = tail call i32 @tokcntn(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0), i32 9)
%31 = icmp eq i32 %30, 2
%32 = zext i1 %31 to i32
%33 = tail call i32 @assert(i32 %32)
%34 = tail call i32 @diglenn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.6, i64 0, i64 0), i32 7)
%35 = icmp eq i32 %34, 4
%36 = zext i1 %35 to i32
%37 = tail call i32 @assert(i32 %36)
%38 = tail call i32 @diglenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), i32 1)
%39 = icmp eq i32 %38, 1
%40 = zext i1 %39 to i32
%41 = tail call i32 @assert(i32 %40)
%42 = tail call i32 @diglenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1)
%43 = icmp eq i32 %42, 1
%44 = zext i1 %43 to i32
%45 = tail call i32 @assert(i32 %44)
%46 = tail call i32 @diglenn(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0), i32 5)
%47 = icmp eq i32 %46, 1
%48 = zext i1 %47 to i32
%49 = tail call i32 @assert(i32 %48)
%50 = tail call i32 @fdiglenn(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i32 2)
%51 = icmp eq i32 %50, 1
%52 = zext i1 %51 to i32
%53 = tail call i32 @assert(i32 %52)
%54 = tail call i32 @fdiglenn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 7)
%55 = icmp eq i32 %54, 3
%56 = zext i1 %55 to i32
%57 = tail call i32 @assert(i32 %56)
%58 = tail call i32 @fdiglenn(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1)
%59 = icmp eq i32 %58, 0
%60 = zext i1 %59 to i32
%61 = tail call i32 @assert(i32 %60)
%62 = tail call i64 @deccmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i64 0, i64 0), i32 3)
%63 = icmp eq i64 %62, 0
%64 = zext i1 %63 to i32
%65 = tail call i32 @assert(i32 %64)
%66 = tail call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 2)
%67 = icmp eq i64 %66, 0
%68 = zext i1 %67 to i32
%69 = tail call i32 @assert(i32 %68)
%70 = tail call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.16, i64 0, i64 0), i32 2)
%71 = icmp eq i64 %70, 0
%72 = zext i1 %71 to i32
%73 = tail call i32 @assert(i32 %72)
%74 = tail call i64 @deccmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0), i32 3)
%75 = icmp eq i64 %74, 0
%76 = zext i1 %75 to i32
%77 = tail call i32 @assert(i32 %76)
%78 = tail call i64 @deccmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.19, i64 0, i64 0), i32 4)
%79 = icmp eq i64 %78, 0
%80 = zext i1 %79 to i32
%81 = tail call i32 @assert(i32 %80)
%82 = tail call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.20, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i64 0, i64 0), i32 3)
%83 = icmp eq i64 %82, 0
%84 = zext i1 %83 to i32
%85 = tail call i32 @assert(i32 %84)
%86 = tail call i64 @deccmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.22, i64 0, i64 0), i32 2)
%87 = icmp eq i64 %86, 0
%88 = zext i1 %87 to i32
%89 = tail call i32 @assert(i32 %88)
%90 = tail call i64 @deccmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i64 0, i64 0), i32 3)
%91 = lshr i64 %90, 63
%92 = trunc i64 %91 to i32
%93 = tail call i32 @assert(i32 %92)
%94 = tail call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.16, i64 0, i64 0), i32 2)
%95 = icmp sgt i64 %94, 0
%96 = zext i1 %95 to i32
%97 = tail call i32 @assert(i32 %96)
%98 = tail call i64 @deccmp(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.20, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.25, i64 0, i64 0), i32 2)
%99 = icmp sgt i64 %98, 0
%100 = zext i1 %99 to i32
%101 = tail call i32 @assert(i32 %100)
%102 = tail call i64 @hexcmpn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%103 = icmp eq i64 %102, 0
%104 = zext i1 %103 to i32
%105 = tail call i32 @assert(i32 %104)
%106 = tail call i64 @hexcmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%107 = icmp eq i64 %106, 0
%108 = zext i1 %107 to i32
%109 = tail call i32 @assert(i32 %108)
%110 = tail call i64 @hexcmpn(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.28, i64 0, i64 0), i32 4)
%111 = icmp eq i64 %110, 0
%112 = zext i1 %111 to i32
%113 = tail call i32 @assert(i32 %112)
%114 = tail call i64 @hexcmpn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.29, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.30, i64 0, i64 0), i32 7)
%115 = icmp eq i64 %114, 0
%116 = zext i1 %115 to i32
%117 = tail call i32 @assert(i32 %116)
%118 = tail call i64 @hexcmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.31, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%119 = icmp sgt i64 %118, 0
%120 = zext i1 %119 to i32
%121 = tail call i32 @assert(i32 %120)
%122 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%123 = tail call i32 @assert(i32 %122)
%124 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.33, i64 0, i64 0), i32 4)
%125 = tail call i32 @assert(i32 %124)
%126 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.34, i64 0, i64 0), i32 4)
%127 = tail call i32 @assert(i32 %126)
%128 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.35, i64 0, i64 0), i32 7)
%129 = tail call i32 @assert(i32 %128)
%130 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.36, i64 0, i64 0), i32 4)
%131 = tail call i32 @assert(i32 %130)
%132 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.37, i64 0, i64 0), i32 4)
%133 = icmp eq i32 %132, 0
%134 = zext i1 %133 to i32
%135 = tail call i32 @assert(i32 %134)
%136 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.38, i64 0, i64 0), i32 5)
%137 = icmp eq i32 %136, 0
%138 = zext i1 %137 to i32
%139 = tail call i32 @assert(i32 %138)
%140 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.39, i64 0, i64 0), i32 4)
%141 = icmp eq i32 %140, 0
%142 = zext i1 %141 to i32
%143 = tail call i32 @assert(i32 %142)
%144 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.40, i64 0, i64 0), i32 4)
%145 = icmp eq i32 %144, 0
%146 = zext i1 %145 to i32
%147 = tail call i32 @assert(i32 %146)
%148 = tail call i32 @rx_match(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.32, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 4)
%149 = icmp eq i32 %148, 0
%150 = zext i1 %149 to i32
%151 = tail call i32 @assert(i32 %150)
%152 = tail call i64 @b64cmpn(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0), i32 0)
%153 = icmp eq i64 %152, 0
%154 = zext i1 %153 to i32
%155 = tail call i32 @assert(i32 %154)
%156 = tail call i64 @b64cmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%157 = icmp eq i64 %156, 0
%158 = zext i1 %157 to i32
%159 = tail call i32 @assert(i32 %158)
%160 = tail call i64 @b64cmpn(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.29, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.30, i64 0, i64 0), i32 7)
%161 = icmp eq i64 %160, 0
%162 = zext i1 %161 to i32
%163 = tail call i32 @assert(i32 %162)
%164 = tail call i64 @b64cmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.31, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i32 6)
%165 = icmp sgt i64 %164, 0
%166 = zext i1 %165 to i32
%167 = tail call i32 @assert(i32 %166)
%168 = tail call i64 @b64cmpn(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.42, i64 0, i64 0), i32 6)
%169 = lshr i64 %168, 63
%170 = trunc i64 %169 to i32
%171 = tail call i32 @assert(i32 %170)
%172 = tail call i64 @nrmcmpn(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i32 3)
%173 = icmp eq i64 %172, 0
%174 = zext i1 %173 to i32
%175 = tail call i32 @assert(i32 %174)
%176 = tail call i64 @nrmcmpn(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i64 0, i64 0), i32 3)
%177 = lshr i64 %176, 63
%178 = trunc i64 %177 to i32
%179 = tail call i32 @assert(i32 %178)
%180 = tail call i64 @nrmcmpn(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.45, i64 0, i64 0), i32 3)
%181 = icmp eq i64 %180, 0
%182 = zext i1 %181 to i32
%183 = tail call i32 @assert(i32 %182)
%184 = tail call i64 @nrmcmpn(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.46, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.47, i64 0, i64 0), i32 2)
%185 = lshr i64 %184, 63
%186 = trunc i64 %185 to i32
%187 = tail call i32 @assert(i32 %186)
ret void
}