#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 isalnum(char);
int isalpha(char);
int iscntrl(char);
int isdigit(char);
int isgraph(char);
int islower(char);
int isprint(char);
int ispunct(char);
int isspace(char);
int isupper(char);
int isxdigit(char);
int /*<<< orphan*/ printf(char *, ...);
int main() {
  char test1 = '6';
  char test2 = 's';
  char test3 = 'D';
  char test5 = ' ';
  char test6 = '!';
  char test7 = '\n';
  if (isdigit(test1) == 1)
    printf("'%c' is a digit\n", test1);
  else
    printf("'%c' is NOT a digit\n", test1);
  if (isdigit(test2) == 1)
    printf("'%c' is a digit\n", test2);
  else
    printf("'%c' is NOT a digit\n", test2);
  if (isalpha(test1) == 1)
    printf("'%c' is an alphabetic character\n", test1);
  else
    printf("'%c' is NOT an alphabetic character\n", test1);
  if (isalpha(test2) == 1)
    printf("'%c' is an alphabetic character\n", test2);
  else
    printf("'%c' is NOT an alphabetic character\n", test2);
  if (isalnum(test1) == 1)
    printf("'%c' is an alphanumeric character\n", test1);
  else
    printf("'%c' is NOT an alphanumeric character\n", test1);
  if (isalnum(test2) == 1)
    printf("'%c' is an alphanumeric character\n", test2);
  else
    printf("'%c' is NOT an alphanumeric character\n", test2);
  if (isxdigit(test1) == 1)
    printf("'%c' is a hex digit\n", test1);
  else
    printf("'%c' is NOT a hex digit\n", test1);
  if (isxdigit(test2) == 1)
    printf("'%c' is a hex digit\n", test2);
  else
    printf("'%c' is NOT a hex digit\n", test2);
  if (islower(test2) == 1)
    printf("'%c' is lower case\n", test2);
  else
    printf("'%c' is NOT lower case\n", test2);
  if (islower(test3) == 1)
    printf("'%c' is lower case\n", test3);
  else
    printf("'%c' is NOT lower case\n", test3);
  if (isupper(test2) == 1)
    printf("'%c' is upper case\n", test2);
  else
    printf("'%c' is NOT upper case\n", test2);
  if (isupper(test3) == 1)
    printf("'%c' is upper case\n", test3);
  else
    printf("'%c' is NOT upper case\n", test3);
  if (isspace(test5) == 1)
    printf("'%c' is a space character\n", test5);
  else
    printf("'%c' is NOT a space character\n", test5);
  if (isspace(test6) == 1)
    printf("'%c' is a space character\n", test6);
  else
    printf("'%c' is NOT a space character\n", test6);
  if (iscntrl(test6) == 1)
    printf("'%c' is a control character\n", test6);
  else
    printf("'%c' is NOT a control character\n", test6);
  if (iscntrl(test7) == 1)
    printf("'NEWLINE' is a control character\n");
  else
    printf("'NEWLINE' is NOT a control character\n");
  if (ispunct(test5) == 1)
    printf("'%c' is a punctuation character\n", test5);
  else
    printf("'%c' is NOT a punctuation character\n", test5);
  if (ispunct(test6) == 1)
    printf("'%c' is a punctuation character\n", test6);
  else
    printf("'%c' is NOT a punctuation character\n", test6);
  if (isprint(test5) == 1)
    printf("'%c' is a printing character\n", test5);
  else
    printf("'%c' is NOT a printing character\n", test5);
  if (isprint(test6) == 1)
    printf("'%c' is a printing character\n", test6);
  else
    printf("'%c' is NOT a printing character\n", test6);
  if (isgraph(test5) == 1)
    printf("'%c' is a printing character except space\n", test5);
  else
    printf("'%c' is NOT a printing character except space\n", test5);
  if (isgraph(test6) == 1)
    printf("'%c' is a printing character except space\n", test6);
  else
    printf("'%c' is NOT a printing character except space\n", test6);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
movb   $0x36,-0x5(%rbp)
movb   $0x73,-0x6(%rbp)
movb   $0x44,-0x7(%rbp)
movb   $0x20,-0x8(%rbp)
movb   $0x21,-0x9(%rbp)
movb   $0xa,-0xa(%rbp)
movsbl -0x5(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x1,%eax
jne    1210 <main+0x50>
movsbl -0x5(%rbp),%esi
lea    0xdfc(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1222 <main+0x62>
movsbl -0x5(%rbp),%esi
lea    0xdf6(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x6(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x1,%eax
jne    124b <main+0x8b>
movsbl -0x6(%rbp),%esi
lea    0xdc1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    125d <main+0x9d>
movsbl -0x6(%rbp),%esi
lea    0xdbb(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x5(%rbp),%edi
call   10a0 <isalpha@plt>
cmp    $0x1,%eax
jne    1286 <main+0xc6>
movsbl -0x5(%rbp),%esi
lea    0xdac(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1298 <main+0xd8>
movsbl -0x5(%rbp),%esi
lea    0xdb6(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x6(%rbp),%edi
call   10a0 <isalpha@plt>
cmp    $0x1,%eax
jne    12c1 <main+0x101>
movsbl -0x6(%rbp),%esi
lea    0xd71(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    12d3 <main+0x113>
movsbl -0x6(%rbp),%esi
lea    0xd7b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x5(%rbp),%edi
call   1070 <isalnum@plt>
cmp    $0x1,%eax
jne    12fc <main+0x13c>
movsbl -0x5(%rbp),%esi
lea    0xd7c(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    130e <main+0x14e>
movsbl -0x5(%rbp),%esi
lea    0xd88(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x6(%rbp),%edi
call   1070 <isalnum@plt>
cmp    $0x1,%eax
jne    1337 <main+0x177>
movsbl -0x6(%rbp),%esi
lea    0xd41(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1349 <main+0x189>
movsbl -0x6(%rbp),%esi
lea    0xd4d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x5(%rbp),%edi
call   10d0 <isxdigit@plt>
cmp    $0x1,%eax
jne    1372 <main+0x1b2>
movsbl -0x5(%rbp),%esi
lea    0xd50(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1384 <main+0x1c4>
movsbl -0x5(%rbp),%esi
lea    0xd4e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x6(%rbp),%edi
call   10d0 <isxdigit@plt>
cmp    $0x1,%eax
jne    13ad <main+0x1ed>
movsbl -0x6(%rbp),%esi
lea    0xd15(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    13bf <main+0x1ff>
movsbl -0x6(%rbp),%esi
lea    0xd13(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x6(%rbp),%edi
call   1040 <islower@plt>
cmp    $0x1,%eax
jne    13e8 <main+0x228>
movsbl -0x6(%rbp),%esi
lea    0xd08(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    13fa <main+0x23a>
movsbl -0x6(%rbp),%esi
lea    0xd05(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x7(%rbp),%edi
call   1040 <islower@plt>
cmp    $0x1,%eax
jne    1423 <main+0x263>
movsbl -0x7(%rbp),%esi
lea    0xccd(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1435 <main+0x275>
movsbl -0x7(%rbp),%esi
lea    0xcca(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x6(%rbp),%edi
call   10b0 <isupper@plt>
cmp    $0x1,%eax
jne    145e <main+0x29e>
movsbl -0x6(%rbp),%esi
lea    0xcbe(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1470 <main+0x2b0>
movsbl -0x6(%rbp),%esi
lea    0xcbb(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x7(%rbp),%edi
call   10b0 <isupper@plt>
cmp    $0x1,%eax
jne    1499 <main+0x2d9>
movsbl -0x7(%rbp),%esi
lea    0xc83(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    14ab <main+0x2eb>
movsbl -0x7(%rbp),%esi
lea    0xc80(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x8(%rbp),%edi
call   1090 <isspace@plt>
cmp    $0x1,%eax
jne    14d4 <main+0x314>
movsbl -0x8(%rbp),%esi
lea    0xc74(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    14e6 <main+0x326>
movsbl -0x8(%rbp),%esi
lea    0xc78(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x9(%rbp),%edi
call   1090 <isspace@plt>
cmp    $0x1,%eax
jne    150f <main+0x34f>
movsbl -0x9(%rbp),%esi
lea    0xc39(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1521 <main+0x361>
movsbl -0x9(%rbp),%esi
lea    0xc3d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x9(%rbp),%edi
call   1050 <iscntrl@plt>
cmp    $0x1,%eax
jne    154a <main+0x38a>
movsbl -0x9(%rbp),%esi
lea    0xc38(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    155c <main+0x39c>
movsbl -0x9(%rbp),%esi
lea    0xc3e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0xa(%rbp),%edi
call   1050 <iscntrl@plt>
cmp    $0x1,%eax
jne    1581 <main+0x3c1>
lea    0xc3f(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    158f <main+0x3cf>
lea    0xc4e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x8(%rbp),%edi
call   1080 <ispunct@plt>
cmp    $0x1,%eax
jne    15b8 <main+0x3f8>
movsbl -0x8(%rbp),%esi
lea    0xc50(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    15ca <main+0x40a>
movsbl -0x8(%rbp),%esi
lea    0xc5a(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x9(%rbp),%edi
call   1080 <ispunct@plt>
cmp    $0x1,%eax
jne    15f3 <main+0x433>
movsbl -0x9(%rbp),%esi
lea    0xc15(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1605 <main+0x445>
movsbl -0x9(%rbp),%esi
lea    0xc1f(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x8(%rbp),%edi
call   10c0 <isprint@plt>
cmp    $0x1,%eax
jne    162e <main+0x46e>
movsbl -0x8(%rbp),%esi
lea    0xc20(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1640 <main+0x480>
movsbl -0x8(%rbp),%esi
lea    0xc27(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x9(%rbp),%edi
call   10c0 <isprint@plt>
cmp    $0x1,%eax
jne    1669 <main+0x4a9>
movsbl -0x9(%rbp),%esi
lea    0xbe5(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    167b <main+0x4bb>
movsbl -0x9(%rbp),%esi
lea    0xbec(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x8(%rbp),%edi
call   10e0 <isgraph@plt>
cmp    $0x1,%eax
jne    16a4 <main+0x4e4>
movsbl -0x8(%rbp),%esi
lea    0xbea(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    16b6 <main+0x4f6>
movsbl -0x8(%rbp),%esi
lea    0xbfe(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsbl -0x9(%rbp),%edi
call   10e0 <isgraph@plt>
cmp    $0x1,%eax
jne    16df <main+0x51f>
movsbl -0x9(%rbp),%esi
lea    0xbaf(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    16f1 <main+0x531>
movsbl -0x9(%rbp),%esi
lea    0xbc3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
mov    $0x36,%edi
call   1030 <isdigit@plt>
cmp    $0x1,%eax
lea    0xe18(%rip),%r14
lea    0xe22(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x36,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x73,%edi
call   1030 <isdigit@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x73,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x36,%edi
call   10b0 <isalpha@plt>
cmp    $0x1,%eax
lea    0xdf0(%rip),%r14
lea    0xe0a(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x36,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x73,%edi
call   10b0 <isalpha@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x73,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x36,%edi
call   1080 <isalnum@plt>
cmp    $0x1,%eax
lea    0xde8(%rip),%r14
lea    0xe04(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x36,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x73,%edi
call   1080 <isalnum@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x73,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x36,%edi
call   10e0 <isxdigit@plt>
cmp    $0x1,%eax
lea    0xde4(%rip),%r14
lea    0xdf2(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x36,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x73,%edi
call   10e0 <isxdigit@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x73,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x73,%edi
call   1040 <islower@plt>
cmp    $0x1,%eax
lea    0xdc4(%rip),%r14
lea    0xdd1(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x73,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x44,%edi
call   1040 <islower@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x44,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x73,%edi
call   10c0 <isupper@plt>
cmp    $0x1,%eax
lea    0xda2(%rip),%r14
lea    0xdaf(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x73,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x44,%edi
call   10c0 <isupper@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x44,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x20,%edi
call   10a0 <isspace@plt>
cmp    $0x1,%eax
lea    0xd80(%rip),%r14
lea    0xd94(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x20,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x21,%edi
call   10a0 <isspace@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x21,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x21,%edi
call   1060 <iscntrl@plt>
cmp    $0x1,%eax
lea    0xd6c(%rip),%rax
lea    0xd82(%rip),%rdi
cmove  %rax,%rdi
mov    $0x21,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0xa,%edi
call   1060 <iscntrl@plt>
cmp    $0x1,%eax
lea    0xe84(%rip),%rax
lea    0xe58(%rip),%rdi
cmove  %rax,%rdi
call   1050 <puts@plt>
mov    $0x20,%edi
call   1090 <ispunct@plt>
cmp    $0x1,%eax
lea    0xd5b(%rip),%r14
lea    0xd75(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x20,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x21,%edi
call   1090 <ispunct@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x21,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x20,%edi
call   10d0 <isprint@plt>
cmp    $0x1,%eax
lea    0xd53(%rip),%r14
lea    0xd6a(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x20,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x21,%edi
call   10d0 <isprint@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x21,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x20,%edi
call   10f0 <isgraph@plt>
cmp    $0x1,%eax
lea    0xd45(%rip),%r14
lea    0xd69(%rip),%rbx
mov    %rbx,%rdi
cmove  %r14,%rdi
mov    $0x20,%esi
xor    %eax,%eax
call   1070 <printf@plt>
mov    $0x21,%edi
call   10f0 <isgraph@plt>
cmp    $0x1,%eax
cmove  %r14,%rbx
mov    %rbx,%rdi
mov    $0x21,%esi
xor    %eax,%eax
call   1070 <printf@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
@.str = [17 x i8] c"'%c' is a digit\0A\00"
@.str.1 = [21 x i8] c"'%c' is NOT a digit\0A\00"
@.str.2 = [33 x i8] c"'%c' is an alphabetic character\0A\00"
@.str.3 = [37 x i8] c"'%c' is NOT an alphabetic character\0A\00"
@.str.4 = [35 x i8] c"'%c' is an alphanumeric character\0A\00"
@.str.5 = [39 x i8] c"'%c' is NOT an alphanumeric character\0A\00"
@.str.6 = [21 x i8] c"'%c' is a hex digit\0A\00"
@.str.7 = [25 x i8] c"'%c' is NOT a hex digit\0A\00"
@.str.8 = [20 x i8] c"'%c' is lower case\0A\00"
@.str.9 = [24 x i8] c"'%c' is NOT lower case\0A\00"
@.str.10 = [20 x i8] c"'%c' is upper case\0A\00"
@.str.11 = [24 x i8] c"'%c' is NOT upper case\0A\00"
@.str.12 = [27 x i8] c"'%c' is a space character\0A\00"
@.str.13 = [31 x i8] c"'%c' is NOT a space character\0A\00"
@.str.14 = [29 x i8] c"'%c' is a control character\0A\00"
@.str.15 = [33 x i8] c"'%c' is NOT a control character\0A\00"
@.str.18 = [33 x i8] c"'%c' is a punctuation character\0A\00"
@.str.19 = [37 x i8] c"'%c' is NOT a punctuation character\0A\00"
@.str.20 = [30 x i8] c"'%c' is a printing character\0A\00"
@.str.21 = [34 x i8] c"'%c' is NOT a printing character\0A\00"
@.str.22 = [43 x i8] c"'%c' is a printing character except space\0A\00"
@.str.23 = [47 x i8] c"'%c' is NOT a printing character except space\0A\00"
@str = [37 x i8] c"'NEWLINE' is NOT a control character\00"
@str.24 = [33 x i8] c"'NEWLINE' is a control character\00"
define i32 @main() {
%1 = tail call i32 @isdigit(i8 signext 54)
%2 = icmp eq i32 %1, 1
%3 = select i1 %2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0)
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %3, i32 54)
%5 = tail call i32 @isdigit(i8 signext 115)
%6 = icmp eq i32 %5, 1
%7 = select i1 %6, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0)
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %7, i32 115)
%9 = tail call i32 @isalpha(i8 signext 54)
%10 = icmp eq i32 %9, 1
%11 = select i1 %10, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.3, i64 0, i64 0)
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %11, i32 54)
%13 = tail call i32 @isalpha(i8 signext 115)
%14 = icmp eq i32 %13, 1
%15 = select i1 %14, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.3, i64 0, i64 0)
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %15, i32 115)
%17 = tail call i32 @isalnum(i8 signext 54)
%18 = icmp eq i32 %17, 1
%19 = select i1 %18, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.5, i64 0, i64 0)
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %19, i32 54)
%21 = tail call i32 @isalnum(i8 signext 115)
%22 = icmp eq i32 %21, 1
%23 = select i1 %22, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.5, i64 0, i64 0)
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %23, i32 115)
%25 = tail call i32 @isxdigit(i8 signext 54)
%26 = icmp eq i32 %25, 1
%27 = select i1 %26, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.7, i64 0, i64 0)
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %27, i32 54)
%29 = tail call i32 @isxdigit(i8 signext 115)
%30 = icmp eq i32 %29, 1
%31 = select i1 %30, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.7, i64 0, i64 0)
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %31, i32 115)
%33 = tail call i32 @islower(i8 signext 115)
%34 = icmp eq i32 %33, 1
%35 = select i1 %34, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.8, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0)
%36 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %35, i32 115)
%37 = tail call i32 @islower(i8 signext 68)
%38 = icmp eq i32 %37, 1
%39 = select i1 %38, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.8, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0)
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %39, i32 68)
%41 = tail call i32 @isupper(i8 signext 115)
%42 = icmp eq i32 %41, 1
%43 = select i1 %42, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0)
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %43, i32 115)
%45 = tail call i32 @isupper(i8 signext 68)
%46 = icmp eq i32 %45, 1
%47 = select i1 %46, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0)
%48 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %47, i32 68)
%49 = tail call i32 @isspace(i8 signext 32)
%50 = icmp eq i32 %49, 1
%51 = select i1 %50, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.13, i64 0, i64 0)
%52 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %51, i32 32)
%53 = tail call i32 @isspace(i8 signext 33)
%54 = icmp eq i32 %53, 1
%55 = select i1 %54, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.13, i64 0, i64 0)
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %55, i32 33)
%57 = tail call i32 @iscntrl(i8 signext 33)
%58 = icmp eq i32 %57, 1
%59 = select i1 %58, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.14, i64 0, i64 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.15, i64 0, i64 0)
%60 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %59, i32 33)
%61 = tail call i32 @iscntrl(i8 signext 10)
%62 = icmp eq i32 %61, 1
%63 = select i1 %62, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @str.24, i64 0, i64 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @str, i64 0, i64 0)
%64 = tail call i32 @puts(i8* dereferenceable(1) %63)
%65 = tail call i32 @ispunct(i8 signext 32)
%66 = icmp eq i32 %65, 1
%67 = select i1 %66, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.18, i64 0, i64 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.19, i64 0, i64 0)
%68 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %67, i32 32)
%69 = tail call i32 @ispunct(i8 signext 33)
%70 = icmp eq i32 %69, 1
%71 = select i1 %70, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.18, i64 0, i64 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.19, i64 0, i64 0)
%72 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %71, i32 33)
%73 = tail call i32 @isprint(i8 signext 32)
%74 = icmp eq i32 %73, 1
%75 = select i1 %74, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0)
%76 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %75, i32 32)
%77 = tail call i32 @isprint(i8 signext 33)
%78 = icmp eq i32 %77, 1
%79 = select i1 %78, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0)
%80 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %79, i32 33)
%81 = tail call i32 @isgraph(i8 signext 32)
%82 = icmp eq i32 %81, 1
%83 = select i1 %82, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.22, i64 0, i64 0), i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.23, i64 0, i64 0)
%84 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %83, i32 32)
%85 = tail call i32 @isgraph(i8 signext 33)
%86 = icmp eq i32 %85, 1
%87 = select i1 %86, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.22, i64 0, i64 0), i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.23, i64 0, i64 0)
%88 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %87, i32 33)
ret i32 0
}