#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*/ docheck(int, char *, int);
int isalnum(int);
int isalpha(int);
int isblank(int);
int isdigit(int);
int isgraph(int);
int islower(int);
int isprint(int);
int ispunct(int);
int isspace(int);
int isupper(int);
int isxdigit(int);
int /*<<< orphan*/ printf(char *, char *);
scalar_t__ strchr(char *, int);
void testmacros(void) {
  int i;
  do {
    printf("%s ", "isalnum");
    for (i = 0; i < 256; i++) {
      if (i && strchr("abcdefghijklmnopqrstuvwxyz"
                      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                      "0123456789",
                      i))
        docheck(isalnum(i), "isalnum(i)", i);
      else
        docheck(!isalnum(i), "!isalnum(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isalpha");
    for (i = 0; i < 256; i++) {
      if (i && strchr("abcdefghijklmnopqrstuvwxyz"
                      "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
                      i))
        docheck(isalpha(i), "isalpha(i)", i);
      else
        docheck(!isalpha(i), "!isalpha(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isblank");
    for (i = 0; i < 256; i++) {
      if (i && strchr(" \t", i))
        docheck(isblank(i), "isblank(i)", i);
      else
        docheck(!isblank(i), "!isblank(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isdigit");
    for (i = 0; i < 256; i++) {
      if (i && strchr("0123456789", i))
        docheck(isdigit(i), "isdigit(i)", i);
      else
        docheck(!isdigit(i), "!isdigit(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isgraph");
    for (i = 0; i < 256; i++) {
      if (i && strchr("abcdefghijklmnopqrstuvwxyz"
                      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                      "~`!@#$%^&*()-_+=[]\\{}|:;\"',./<>?"
                      "0123456789",
                      i))
        docheck(isgraph(i), "isgraph(i)", i);
      else
        docheck(!isgraph(i), "!isgraph(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "islower");
    for (i = 0; i < 256; i++) {
      if (i && strchr("abcdefghijklmnopqrstuvwxyz", i))
        docheck(islower(i), "islower(i)", i);
      else
        docheck(!islower(i), "!islower(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isprint");
    for (i = 0; i < 256; i++) {
      if (i && strchr("abcdefghijklmnopqrstuvwxyz"
                      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                      "~`!@#$%^&*()-_+=[]\\{}|:;\"',./<>?"
                      "0123456789"
                      " ",
                      i))
        docheck(isprint(i), "isprint(i)", i);
      else
        docheck(!isprint(i), "!isprint(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "ispunct");
    for (i = 0; i < 256; i++) {
      if (i && strchr("~`!@#$%^&*()-_+=[]\\{}|:;\"',./<>?", i))
        docheck(ispunct(i), "ispunct(i)", i);
      else
        docheck(!ispunct(i), "!ispunct(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isspace");
    for (i = 0; i < 256; i++) {
      if (i && strchr(" \f\n\r\t\v", i))
        docheck(isspace(i), "isspace(i)", i);
      else
        docheck(!isspace(i), "!isspace(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isupper");
    for (i = 0; i < 256; i++) {
      if (i && strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", i))
        docheck(isupper(i), "isupper(i)", i);
      else
        docheck(!isupper(i), "!isupper(i)", i);
    }
  } while (0);
  do {
    printf("%s ", "isxdigit");
    for (i = 0; i < 256; i++) {
      if (i && strchr("0123456789ABCDEFabcdef", i))
        docheck(isxdigit(i), "isxdigit(i)", i);
      else
        docheck(!isxdigit(i), "!isxdigit(i)", i);
    }
  } while (0);
}


x86 assembly (clang, -O0):
<testmacros>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
lea    0xe11(%rip),%rdi
lea    0xe0e(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    1287 <testmacros+0xa7>
cmpl   $0x0,-0x4(%rbp)
je     1250 <testmacros+0x70>
mov    -0x4(%rbp),%esi
lea    0xde9(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     1250 <testmacros+0x70>
mov    -0x4(%rbp),%edi
call   1070 <isalnum@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xe06(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1274 <testmacros+0x94>
mov    -0x4(%rbp),%edi
call   1070 <isalnum@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xddc(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1279 <testmacros+0x99>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1202 <testmacros+0x22>
jmp    128c <testmacros+0xac>
jmp    1291 <testmacros+0xb1>
lea    0xd68(%rip),%rdi
lea    0xdb8(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    1330 <testmacros+0x150>
cmpl   $0x0,-0x4(%rbp)
je     12f9 <testmacros+0x119>
mov    -0x4(%rbp),%esi
lea    0xd93(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     12f9 <testmacros+0x119>
mov    -0x4(%rbp),%edi
call   10b0 <isalpha@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xda6(%rip),%rsi
call   10f0 <docheck@plt>
jmp    131d <testmacros+0x13d>
mov    -0x4(%rbp),%edi
call   10b0 <isalpha@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xd7c(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1322 <testmacros+0x142>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    12ab <testmacros+0xcb>
jmp    1335 <testmacros+0x155>
jmp    133a <testmacros+0x15a>
lea    0xcbf(%rip),%rdi
lea    0xd58(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    13d9 <testmacros+0x1f9>
cmpl   $0x0,-0x4(%rbp)
je     13a2 <testmacros+0x1c2>
mov    -0x4(%rbp),%esi
lea    0xd33(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     13a2 <testmacros+0x1c2>
mov    -0x4(%rbp),%edi
call   1080 <isblank@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xd14(%rip),%rsi
call   10f0 <docheck@plt>
jmp    13c6 <testmacros+0x1e6>
mov    -0x4(%rbp),%edi
call   1080 <isblank@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xcea(%rip),%rsi
call   10f0 <docheck@plt>
jmp    13cb <testmacros+0x1eb>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1354 <testmacros+0x174>
jmp    13de <testmacros+0x1fe>
jmp    13e3 <testmacros+0x203>
lea    0xc16(%rip),%rdi
lea    0xcc6(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    1482 <testmacros+0x2a2>
cmpl   $0x0,-0x4(%rbp)
je     144b <testmacros+0x26b>
mov    -0x4(%rbp),%esi
lea    0xd09(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     144b <testmacros+0x26b>
mov    -0x4(%rbp),%edi
call   1030 <isdigit@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xc7f(%rip),%rsi
call   10f0 <docheck@plt>
jmp    146f <testmacros+0x28f>
mov    -0x4(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xc55(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1474 <testmacros+0x294>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    13fd <testmacros+0x21d>
jmp    1487 <testmacros+0x2a7>
jmp    148c <testmacros+0x2ac>
lea    0xb6d(%rip),%rdi
lea    0xc31(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    152b <testmacros+0x34b>
cmpl   $0x0,-0x4(%rbp)
je     14f4 <testmacros+0x314>
mov    -0x4(%rbp),%esi
lea    0xc0c(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     14f4 <testmacros+0x314>
mov    -0x4(%rbp),%edi
call   1100 <isgraph@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xc49(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1518 <testmacros+0x338>
mov    -0x4(%rbp),%edi
call   1100 <isgraph@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xc1f(%rip),%rsi
call   10f0 <docheck@plt>
jmp    151d <testmacros+0x33d>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    14a6 <testmacros+0x2c6>
jmp    1530 <testmacros+0x350>
jmp    1535 <testmacros+0x355>
lea    0xac4(%rip),%rdi
lea    0xbfb(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    15d4 <testmacros+0x3f4>
cmpl   $0x0,-0x4(%rbp)
je     159d <testmacros+0x3bd>
mov    -0x4(%rbp),%esi
lea    0xbd6(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     159d <testmacros+0x3bd>
mov    -0x4(%rbp),%edi
call   1040 <islower@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xbcf(%rip),%rsi
call   10f0 <docheck@plt>
jmp    15c1 <testmacros+0x3e1>
mov    -0x4(%rbp),%edi
call   1040 <islower@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xba5(%rip),%rsi
call   10f0 <docheck@plt>
jmp    15c6 <testmacros+0x3e6>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    154f <testmacros+0x36f>
jmp    15d9 <testmacros+0x3f9>
jmp    15de <testmacros+0x3fe>
lea    0xa1b(%rip),%rdi
lea    0xb81(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    167d <testmacros+0x49d>
cmpl   $0x0,-0x4(%rbp)
je     1646 <testmacros+0x466>
mov    -0x4(%rbp),%esi
lea    0xb5c(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     1646 <testmacros+0x466>
mov    -0x4(%rbp),%edi
call   10d0 <isprint@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xb9a(%rip),%rsi
call   10f0 <docheck@plt>
jmp    166a <testmacros+0x48a>
mov    -0x4(%rbp),%edi
call   10d0 <isprint@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xb70(%rip),%rsi
call   10f0 <docheck@plt>
jmp    166f <testmacros+0x48f>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    15f8 <testmacros+0x418>
jmp    1682 <testmacros+0x4a2>
jmp    1687 <testmacros+0x4a7>
lea    0x972(%rip),%rdi
lea    0xb4c(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    1726 <testmacros+0x546>
cmpl   $0x0,-0x4(%rbp)
je     16ef <testmacros+0x50f>
mov    -0x4(%rbp),%esi
lea    0xb27(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     16ef <testmacros+0x50f>
mov    -0x4(%rbp),%edi
call   1090 <ispunct@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xb26(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1713 <testmacros+0x533>
mov    -0x4(%rbp),%edi
call   1090 <ispunct@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xafc(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1718 <testmacros+0x538>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    16a1 <testmacros+0x4c1>
jmp    172b <testmacros+0x54b>
jmp    1730 <testmacros+0x550>
lea    0x8c9(%rip),%rdi
lea    0xad8(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    17cf <testmacros+0x5ef>
cmpl   $0x0,-0x4(%rbp)
je     1798 <testmacros+0x5b8>
mov    -0x4(%rbp),%esi
lea    0xab3(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     1798 <testmacros+0x5b8>
mov    -0x4(%rbp),%edi
call   10a0 <isspace@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xa98(%rip),%rsi
call   10f0 <docheck@plt>
jmp    17bc <testmacros+0x5dc>
mov    -0x4(%rbp),%edi
call   10a0 <isspace@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0xa6e(%rip),%rsi
call   10f0 <docheck@plt>
jmp    17c1 <testmacros+0x5e1>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    174a <testmacros+0x56a>
jmp    17d4 <testmacros+0x5f4>
jmp    17d9 <testmacros+0x5f9>
lea    0x820(%rip),%rdi
lea    0xa4a(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    1878 <testmacros+0x698>
cmpl   $0x0,-0x4(%rbp)
je     1841 <testmacros+0x661>
mov    -0x4(%rbp),%esi
lea    0x865(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     1841 <testmacros+0x661>
mov    -0x4(%rbp),%edi
call   10c0 <isupper@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0xa03(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1865 <testmacros+0x685>
mov    -0x4(%rbp),%edi
call   10c0 <isupper@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0x9d9(%rip),%rsi
call   10f0 <docheck@plt>
jmp    186a <testmacros+0x68a>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    17f3 <testmacros+0x613>
jmp    187d <testmacros+0x69d>
jmp    1882 <testmacros+0x6a2>
lea    0x777(%rip),%rdi
lea    0x9b5(%rip),%rsi
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
cmpl   $0x100,-0x4(%rbp)
jge    1921 <testmacros+0x741>
cmpl   $0x0,-0x4(%rbp)
je     18ea <testmacros+0x70a>
mov    -0x4(%rbp),%esi
lea    0x991(%rip),%rdi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     18ea <testmacros+0x70a>
mov    -0x4(%rbp),%edi
call   10e0 <isxdigit@plt>
mov    %eax,%edi
mov    -0x4(%rbp),%edx
lea    0x986(%rip),%rsi
call   10f0 <docheck@plt>
jmp    190e <testmacros+0x72e>
mov    -0x4(%rbp),%edi
call   10e0 <isxdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
mov    -0x4(%rbp),%edx
lea    0x95c(%rip),%rsi
call   10f0 <docheck@plt>
jmp    1913 <testmacros+0x733>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    189c <testmacros+0x6bc>
jmp    1926 <testmacros+0x746>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<testmacros>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
lea    0xe21(%rip),%rdi
lea    0xe1e(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   1060 <isalnum@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xe4a(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xdf5(%rip),%r12
lea    0xe2e(%rip),%r15
jmp    123d <testmacros+0x6d>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     125d <testmacros+0x8d>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   1060 <isalnum@plt>
test   %rbx,%rbx
je     1220 <testmacros+0x50>
mov    %eax,%edi
mov    %r15,%rsi
jmp    122b <testmacros+0x5b>
lea    0xd9c(%rip),%rdi
lea    0xdec(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   10a0 <isalpha@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xe0e(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xdc3(%rip),%r12
lea    0xdf2(%rip),%r15
jmp    12cd <testmacros+0xfd>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     12ed <testmacros+0x11d>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   10a0 <isalpha@plt>
test   %rbx,%rbx
je     12b0 <testmacros+0xe0>
mov    %eax,%edi
mov    %r15,%rsi
jmp    12bb <testmacros+0xeb>
lea    0xd0c(%rip),%rdi
lea    0xda5(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   1070 <isblank@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xd95(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xd7c(%rip),%r12
lea    0xd79(%rip),%r15
jmp    135d <testmacros+0x18d>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     137d <testmacros+0x1ad>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   1070 <isblank@plt>
test   %rbx,%rbx
je     1340 <testmacros+0x170>
mov    %eax,%edi
mov    %r15,%rsi
jmp    134b <testmacros+0x17b>
lea    0xc7c(%rip),%rdi
lea    0xd2c(%rip),%rsi
call   1050 <printf@plt>
lea    0xd28(%rip),%r14
mov    $0x1,%ebp
mov    $0x1,%edi
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
lea    0xd75(%rip),%r15
mov    $0xfffffff6,%r12d
lea    0xd01(%rip),%rbx
nop
mov    %r15,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
lea    -0x30(%rbp),%ecx
lea    -0x3a(%rbp),%edx
test   %rax,%rax
mov    $0xa,%eax
cmove  %r12d,%eax
mov    %rbx,%rsi
cmove  %r14,%rsi
cmovne %ecx,%edx
xor    %edi,%edi
cmp    %eax,%edx
setb   %dil
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
jne    13c0 <testmacros+0x1f0>
lea    0xbf9(%rip),%rdi
lea    0xcbd(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   10f0 <isgraph@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xd09(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xc94(%rip),%r12
lea    0xced(%rip),%r15
jmp    146d <testmacros+0x29d>
nopl   0x0(%rax,%rax,1)
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     148d <testmacros+0x2bd>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   10f0 <isgraph@plt>
test   %rbx,%rbx
je     1450 <testmacros+0x280>
mov    %eax,%edi
mov    %r15,%rsi
jmp    145b <testmacros+0x28b>
lea    0xb6c(%rip),%rdi
lea    0xca3(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   1030 <islower@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xcab(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xc7a(%rip),%r12
lea    0xc8f(%rip),%r15
jmp    14fd <testmacros+0x32d>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     151d <testmacros+0x34d>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   1030 <islower@plt>
test   %rbx,%rbx
je     14e0 <testmacros+0x310>
mov    %eax,%edi
mov    %r15,%rsi
jmp    14eb <testmacros+0x31b>
lea    0xadc(%rip),%rdi
lea    0xc42(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   10c0 <isprint@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xc8f(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xc19(%rip),%r12
lea    0xc73(%rip),%r15
jmp    158d <testmacros+0x3bd>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     15ad <testmacros+0x3dd>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   10c0 <isprint@plt>
test   %rbx,%rbx
je     1570 <testmacros+0x3a0>
mov    %eax,%edi
mov    %r15,%rsi
jmp    157b <testmacros+0x3ab>
lea    0xa4c(%rip),%rdi
lea    0xc26(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   1080 <ispunct@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xc34(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xbfd(%rip),%r12
lea    0xc18(%rip),%r15
jmp    161d <testmacros+0x44d>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     163d <testmacros+0x46d>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   1080 <ispunct@plt>
test   %rbx,%rbx
je     1600 <testmacros+0x430>
mov    %eax,%edi
mov    %r15,%rsi
jmp    160b <testmacros+0x43b>
lea    0x9bc(%rip),%rdi
lea    0xbcb(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   1090 <isspace@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xbbf(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xba2(%rip),%r12
lea    0xba3(%rip),%r15
jmp    16ad <testmacros+0x4dd>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     16cd <testmacros+0x4fd>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   1090 <isspace@plt>
test   %rbx,%rbx
je     1690 <testmacros+0x4c0>
mov    %eax,%edi
mov    %r15,%rsi
jmp    169b <testmacros+0x4cb>
lea    0x92c(%rip),%rdi
lea    0xb56(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   10b0 <isupper@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xb43(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0x96d(%rip),%r12
lea    0xb27(%rip),%r15
jmp    173d <testmacros+0x56d>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     175d <testmacros+0x58d>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   10b0 <isupper@plt>
test   %rbx,%rbx
je     1720 <testmacros+0x550>
mov    %eax,%edi
mov    %r15,%rsi
jmp    172b <testmacros+0x55b>
lea    0x89c(%rip),%rdi
lea    0xada(%rip),%rsi
call   1050 <printf@plt>
xor    %edi,%edi
call   10d0 <isxdigit@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
lea    0xadf(%rip),%r14
mov    %r14,%rsi
xor    %edx,%edx
call   10e0 <docheck@plt>
mov    $0x1,%ebp
lea    0xab2(%rip),%r12
lea    0xac3(%rip),%r15
jmp    17cd <testmacros+0x5fd>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %edi,%edi
test   %eax,%eax
sete   %dil
mov    %r14,%rsi
mov    %ebp,%edx
call   10e0 <docheck@plt>
add    $0x1,%ebp
cmp    $0x100,%ebp
je     17ed <testmacros+0x61d>
mov    %r12,%rdi
mov    %ebp,%esi
call   1040 <strchr@plt>
mov    %rax,%rbx
mov    %ebp,%edi
call   10d0 <isxdigit@plt>
test   %rbx,%rbx
je     17b0 <testmacros+0x5e0>
mov    %eax,%edi
mov    %r15,%rsi
jmp    17bb <testmacros+0x5eb>
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [4 x i8] c"%s \00"
@.str.1 = [8 x i8] c"isalnum\00"
@.str.2 = [63 x i8] c"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\00"
@.str.3 = [11 x i8] c"isalnum(i)\00"
@.str.4 = [12 x i8] c"!isalnum(i)\00"
@.str.5 = [8 x i8] c"isalpha\00"
@.str.6 = [53 x i8] c"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\00"
@.str.7 = [11 x i8] c"isalpha(i)\00"
@.str.8 = [12 x i8] c"!isalpha(i)\00"
@.str.9 = [8 x i8] c"isblank\00"
@.str.10 = [3 x i8] c" \09\00"
@.str.11 = [11 x i8] c"isblank(i)\00"
@.str.12 = [12 x i8] c"!isblank(i)\00"
@.str.13 = [8 x i8] c"isdigit\00"
@.str.14 = [11 x i8] c"0123456789\00"
@.str.15 = [11 x i8] c"isdigit(i)\00"
@.str.16 = [12 x i8] c"!isdigit(i)\00"
@.str.17 = [8 x i8] c"isgraph\00"
@.str.18 = [95 x i8] c"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-_+=[]\\{}|:;\22',./<>?0123456789\00"
@.str.19 = [11 x i8] c"isgraph(i)\00"
@.str.20 = [12 x i8] c"!isgraph(i)\00"
@.str.21 = [8 x i8] c"islower\00"
@.str.22 = [27 x i8] c"abcdefghijklmnopqrstuvwxyz\00"
@.str.23 = [11 x i8] c"islower(i)\00"
@.str.24 = [12 x i8] c"!islower(i)\00"
@.str.25 = [8 x i8] c"isprint\00"
@.str.26 = [96 x i8] c"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-_+=[]\\{}|:;\22',./<>?0123456789 \00"
@.str.27 = [11 x i8] c"isprint(i)\00"
@.str.28 = [12 x i8] c"!isprint(i)\00"
@.str.29 = [8 x i8] c"ispunct\00"
@.str.30 = [33 x i8] c"~`!@#$%^&*()-_+=[]\\{}|:;\22',./<>?\00"
@.str.31 = [11 x i8] c"ispunct(i)\00"
@.str.32 = [12 x i8] c"!ispunct(i)\00"
@.str.33 = [8 x i8] c"isspace\00"
@.str.34 = [7 x i8] c" \0C\0A\0D\09\0B\00"
@.str.35 = [11 x i8] c"isspace(i)\00"
@.str.36 = [12 x i8] c"!isspace(i)\00"
@.str.37 = [8 x i8] c"isupper\00"
@.str.38 = [27 x i8] c"ABCDEFGHIJKLMNOPQRSTUVWXYZ\00"
@.str.39 = [11 x i8] c"isupper(i)\00"
@.str.40 = [12 x i8] c"!isupper(i)\00"
@.str.41 = [9 x i8] c"isxdigit\00"
@.str.42 = [23 x i8] c"0123456789ABCDEFabcdef\00"
@.str.43 = [12 x i8] c"isxdigit(i)\00"
@.str.44 = [13 x i8] c"!isxdigit(i)\00"
define void @testmacros() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
%2 = tail call i32 @isalnum(i32 0)
%3 = icmp eq i32 %2, 0
%4 = zext i1 %3 to i32
%5 = tail call i32 @docheck(i32 %4, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0), i32 0)
br label %6
6: ; preds = %17, %0
%7 = phi i32 [ 1, %0 ], [ %18, %17 ]
%8 = tail call i64 @strchr(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.2, i64 0, i64 0), i32 %7)
%9 = icmp eq i64 %8, 0
%10 = tail call i32 @isalnum(i32 %7)
br i1 %9, label %13, label %11
11: ; preds = %6
%12 = tail call i32 @docheck(i32 %10, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), i32 %7)
br label %17
13: ; preds = %6
%14 = icmp eq i32 %10, 0
%15 = zext i1 %14 to i32
%16 = tail call i32 @docheck(i32 %15, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0), i32 %7)
br label %17
17: ; preds = %11, %13
%18 = add nuw nsw i32 %7, 1
%19 = icmp eq i32 %18, 256
br i1 %19, label %20, label %6
20: ; preds = %17
%21 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.5, i64 0, i64 0))
%22 = tail call i32 @isalpha(i32 0)
%23 = icmp eq i32 %22, 0
%24 = zext i1 %23 to i32
%25 = tail call i32 @docheck(i32 %24, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.8, i64 0, i64 0), i32 0)
br label %26
26: ; preds = %37, %20
%27 = phi i32 [ 1, %20 ], [ %38, %37 ]
%28 = tail call i64 @strchr(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.6, i64 0, i64 0), i32 %27)
%29 = icmp eq i64 %28, 0
%30 = tail call i32 @isalpha(i32 %27)
br i1 %29, label %33, label %31
31: ; preds = %26
%32 = tail call i32 @docheck(i32 %30, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0), i32 %27)
br label %37
33: ; preds = %26
%34 = icmp eq i32 %30, 0
%35 = zext i1 %34 to i32
%36 = tail call i32 @docheck(i32 %35, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.8, i64 0, i64 0), i32 %27)
br label %37
37: ; preds = %31, %33
%38 = add nuw nsw i32 %27, 1
%39 = icmp eq i32 %38, 256
br i1 %39, label %40, label %26
40: ; preds = %37
%41 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.9, i64 0, i64 0))
%42 = tail call i32 @isblank(i32 0)
%43 = icmp eq i32 %42, 0
%44 = zext i1 %43 to i32
%45 = tail call i32 @docheck(i32 %44, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0), i32 0)
br label %46
46: ; preds = %57, %40
%47 = phi i32 [ 1, %40 ], [ %58, %57 ]
%48 = tail call i64 @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.10, i64 0, i64 0), i32 %47)
%49 = icmp eq i64 %48, 0
%50 = tail call i32 @isblank(i32 %47)
br i1 %49, label %53, label %51
51: ; preds = %46
%52 = tail call i32 @docheck(i32 %50, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i64 0, i64 0), i32 %47)
br label %57
53: ; preds = %46
%54 = icmp eq i32 %50, 0
%55 = zext i1 %54 to i32
%56 = tail call i32 @docheck(i32 %55, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0), i32 %47)
br label %57
57: ; preds = %51, %53
%58 = add nuw nsw i32 %47, 1
%59 = icmp eq i32 %58, 256
br i1 %59, label %60, label %46
60: ; preds = %57
%61 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.13, i64 0, i64 0))
%62 = tail call i32 @docheck(i32 1, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.16, i64 0, i64 0), i32 0)
br label %63
63: ; preds = %63, %60
%64 = phi i32 [ 1, %60 ], [ %74, %63 ]
%65 = tail call i64 @strchr(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.14, i64 0, i64 0), i32 %64)
%66 = icmp eq i64 %65, 0
%67 = select i1 %66, i32 -58, i32 -48
%68 = select i1 %66, i32 -10, i32 10
%69 = select i1 %66, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.16, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.15, i64 0, i64 0)
%70 = add nsw i32 %64, %67
%71 = icmp ult i32 %70, %68
%72 = zext i1 %71 to i32
%73 = tail call i32 @docheck(i32 %72, i8* %69, i32 %64)
%74 = add nuw nsw i32 %64, 1
%75 = icmp eq i32 %74, 256
br i1 %75, label %76, label %63
76: ; preds = %63
%77 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.17, i64 0, i64 0))
%78 = tail call i32 @isgraph(i32 0)
%79 = icmp eq i32 %78, 0
%80 = zext i1 %79 to i32
%81 = tail call i32 @docheck(i32 %80, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.20, i64 0, i64 0), i32 0)
br label %82
82: ; preds = %93, %76
%83 = phi i32 [ 1, %76 ], [ %94, %93 ]
%84 = tail call i64 @strchr(i8* getelementptr inbounds ([95 x i8], [95 x i8]* @.str.18, i64 0, i64 0), i32 %83)
%85 = icmp eq i64 %84, 0
%86 = tail call i32 @isgraph(i32 %83)
br i1 %85, label %89, label %87
87: ; preds = %82
%88 = tail call i32 @docheck(i32 %86, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.19, i64 0, i64 0), i32 %83)
br label %93
89: ; preds = %82
%90 = icmp eq i32 %86, 0
%91 = zext i1 %90 to i32
%92 = tail call i32 @docheck(i32 %91, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.20, i64 0, i64 0), i32 %83)
br label %93
93: ; preds = %87, %89
%94 = add nuw nsw i32 %83, 1
%95 = icmp eq i32 %94, 256
br i1 %95, label %96, label %82
96: ; preds = %93
%97 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0))
%98 = tail call i32 @islower(i32 0)
%99 = icmp eq i32 %98, 0
%100 = zext i1 %99 to i32
%101 = tail call i32 @docheck(i32 %100, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.24, i64 0, i64 0), i32 0)
br label %102
102: ; preds = %113, %96
%103 = phi i32 [ 1, %96 ], [ %114, %113 ]
%104 = tail call i64 @strchr(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.22, i64 0, i64 0), i32 %103)
%105 = icmp eq i64 %104, 0
%106 = tail call i32 @islower(i32 %103)
br i1 %105, label %109, label %107
107: ; preds = %102
%108 = tail call i32 @docheck(i32 %106, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.23, i64 0, i64 0), i32 %103)
br label %113
109: ; preds = %102
%110 = icmp eq i32 %106, 0
%111 = zext i1 %110 to i32
%112 = tail call i32 @docheck(i32 %111, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.24, i64 0, i64 0), i32 %103)
br label %113
113: ; preds = %107, %109
%114 = add nuw nsw i32 %103, 1
%115 = icmp eq i32 %114, 256
br i1 %115, label %116, label %102
116: ; preds = %113
%117 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.25, i64 0, i64 0))
%118 = tail call i32 @isprint(i32 0)
%119 = icmp eq i32 %118, 0
%120 = zext i1 %119 to i32
%121 = tail call i32 @docheck(i32 %120, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.28, i64 0, i64 0), i32 0)
br label %122
122: ; preds = %133, %116
%123 = phi i32 [ 1, %116 ], [ %134, %133 ]
%124 = tail call i64 @strchr(i8* getelementptr inbounds ([96 x i8], [96 x i8]* @.str.26, i64 0, i64 0), i32 %123)
%125 = icmp eq i64 %124, 0
%126 = tail call i32 @isprint(i32 %123)
br i1 %125, label %129, label %127
127: ; preds = %122
%128 = tail call i32 @docheck(i32 %126, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.27, i64 0, i64 0), i32 %123)
br label %133
129: ; preds = %122
%130 = icmp eq i32 %126, 0
%131 = zext i1 %130 to i32
%132 = tail call i32 @docheck(i32 %131, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.28, i64 0, i64 0), i32 %123)
br label %133
133: ; preds = %127, %129
%134 = add nuw nsw i32 %123, 1
%135 = icmp eq i32 %134, 256
br i1 %135, label %136, label %122
136: ; preds = %133
%137 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.29, i64 0, i64 0))
%138 = tail call i32 @ispunct(i32 0)
%139 = icmp eq i32 %138, 0
%140 = zext i1 %139 to i32
%141 = tail call i32 @docheck(i32 %140, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.32, i64 0, i64 0), i32 0)
br label %142
142: ; preds = %153, %136
%143 = phi i32 [ 1, %136 ], [ %154, %153 ]
%144 = tail call i64 @strchr(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.30, i64 0, i64 0), i32 %143)
%145 = icmp eq i64 %144, 0
%146 = tail call i32 @ispunct(i32 %143)
br i1 %145, label %149, label %147
147: ; preds = %142
%148 = tail call i32 @docheck(i32 %146, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.31, i64 0, i64 0), i32 %143)
br label %153
149: ; preds = %142
%150 = icmp eq i32 %146, 0
%151 = zext i1 %150 to i32
%152 = tail call i32 @docheck(i32 %151, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.32, i64 0, i64 0), i32 %143)
br label %153
153: ; preds = %147, %149
%154 = add nuw nsw i32 %143, 1
%155 = icmp eq i32 %154, 256
br i1 %155, label %156, label %142
156: ; preds = %153
%157 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.33, i64 0, i64 0))
%158 = tail call i32 @isspace(i32 0)
%159 = icmp eq i32 %158, 0
%160 = zext i1 %159 to i32
%161 = tail call i32 @docheck(i32 %160, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.36, i64 0, i64 0), i32 0)
br label %162
162: ; preds = %173, %156
%163 = phi i32 [ 1, %156 ], [ %174, %173 ]
%164 = tail call i64 @strchr(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.34, i64 0, i64 0), i32 %163)
%165 = icmp eq i64 %164, 0
%166 = tail call i32 @isspace(i32 %163)
br i1 %165, label %169, label %167
167: ; preds = %162
%168 = tail call i32 @docheck(i32 %166, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.35, i64 0, i64 0), i32 %163)
br label %173
169: ; preds = %162
%170 = icmp eq i32 %166, 0
%171 = zext i1 %170 to i32
%172 = tail call i32 @docheck(i32 %171, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.36, i64 0, i64 0), i32 %163)
br label %173
173: ; preds = %167, %169
%174 = add nuw nsw i32 %163, 1
%175 = icmp eq i32 %174, 256
br i1 %175, label %176, label %162
176: ; preds = %173
%177 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.37, i64 0, i64 0))
%178 = tail call i32 @isupper(i32 0)
%179 = icmp eq i32 %178, 0
%180 = zext i1 %179 to i32
%181 = tail call i32 @docheck(i32 %180, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.40, i64 0, i64 0), i32 0)
br label %182
182: ; preds = %193, %176
%183 = phi i32 [ 1, %176 ], [ %194, %193 ]
%184 = tail call i64 @strchr(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.38, i64 0, i64 0), i32 %183)
%185 = icmp eq i64 %184, 0
%186 = tail call i32 @isupper(i32 %183)
br i1 %185, label %189, label %187
187: ; preds = %182
%188 = tail call i32 @docheck(i32 %186, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.39, i64 0, i64 0), i32 %183)
br label %193
189: ; preds = %182
%190 = icmp eq i32 %186, 0
%191 = zext i1 %190 to i32
%192 = tail call i32 @docheck(i32 %191, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.40, i64 0, i64 0), i32 %183)
br label %193
193: ; preds = %187, %189
%194 = add nuw nsw i32 %183, 1
%195 = icmp eq i32 %194, 256
br i1 %195, label %196, label %182
196: ; preds = %193
%197 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.41, i64 0, i64 0))
%198 = tail call i32 @isxdigit(i32 0)
%199 = icmp eq i32 %198, 0
%200 = zext i1 %199 to i32
%201 = tail call i32 @docheck(i32 %200, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.44, i64 0, i64 0), i32 0)
br label %202
202: ; preds = %213, %196
%203 = phi i32 [ 1, %196 ], [ %214, %213 ]
%204 = tail call i64 @strchr(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.42, i64 0, i64 0), i32 %203)
%205 = icmp eq i64 %204, 0
%206 = tail call i32 @isxdigit(i32 %203)
br i1 %205, label %209, label %207
207: ; preds = %202
%208 = tail call i32 @docheck(i32 %206, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.43, i64 0, i64 0), i32 %203)
br label %213
209: ; preds = %202
%210 = icmp eq i32 %206, 0
%211 = zext i1 %210 to i32
%212 = tail call i32 @docheck(i32 %211, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.44, i64 0, i64 0), i32 %203)
br label %213
213: ; preds = %207, %209
%214 = add nuw nsw i32 %203, 1
%215 = icmp eq i32 %214, 256
br i1 %215, label %216, label %202
216: ; preds = %213
ret void
}