#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*/ CT_ASSERT(int);
int isalpha(char);
int isdigit(char);
int isgraph(char);
int islower(char);
int isprint(char);
int isspace(char);
int isupper(char);
int isxdigit(char);
char tolower(char);
char toupper(char);
void ctype_test() {
  CT_ASSERT(isupper('A'));
  CT_ASSERT(!isupper('a'));
  CT_ASSERT(!isupper('9'));
  CT_ASSERT(!isupper('\000'));
  CT_ASSERT(!islower('A'));
  CT_ASSERT(islower('a'));
  CT_ASSERT(!islower('9'));
  CT_ASSERT(!islower('\000'));
  CT_ASSERT(!isdigit('A'));
  CT_ASSERT(!isdigit('a'));
  CT_ASSERT(isdigit('9'));
  CT_ASSERT(!isdigit('\000'));
  CT_ASSERT(isxdigit('A'));
  CT_ASSERT(isxdigit('a'));
  CT_ASSERT(!isxdigit('h'));
  CT_ASSERT(isxdigit('9'));
  CT_ASSERT(!isxdigit('\000'));
  CT_ASSERT(isspace(' '));
  CT_ASSERT(!isspace('9'));
  CT_ASSERT(!isspace('\000'));
  CT_ASSERT(isalpha('A'));
  CT_ASSERT(isalpha('a'));
  CT_ASSERT(isalpha('h'));
  CT_ASSERT(!isalpha('9'));
  CT_ASSERT(!isalpha('\000'));
  CT_ASSERT(isprint(' '));
  CT_ASSERT(isprint('A'));
  CT_ASSERT(isprint('a'));
  CT_ASSERT(isprint('h'));
  CT_ASSERT(isprint('9'));
  CT_ASSERT(!isprint('\000'));
  CT_ASSERT(!isgraph(' '));
  CT_ASSERT(isgraph('A'));
  CT_ASSERT(isgraph('a'));
  CT_ASSERT(isgraph('h'));
  CT_ASSERT(isgraph('9'));
  CT_ASSERT(!isgraph('\000'));
  CT_ASSERT(toupper('c') == 'C');
  CT_ASSERT(toupper('C') == 'C');
  CT_ASSERT(toupper('9') == '9');
  CT_ASSERT(tolower('c') == 'c');
  CT_ASSERT(tolower('C') == 'c');
  CT_ASSERT(tolower('9') == '9');
  ;
}


x86 assembly (clang, -O0):
<ctype_test>:
push   %rbp
mov    %rsp,%rbp
mov    $0x41,%edi
call   10a0 <isupper@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10a0 <isupper@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10a0 <isupper@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10a0 <isupper@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   1040 <islower@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   1040 <islower@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1040 <islower@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1040 <islower@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1030 <isdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   10c0 <isxdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10c0 <isxdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   10c0 <isxdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10c0 <isxdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10c0 <isxdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x20,%edi
call   1070 <isspace@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1070 <isspace@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1070 <isspace@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   1090 <isalpha@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   1090 <isalpha@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   1090 <isalpha@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1090 <isalpha@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1090 <isalpha@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x20,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10b0 <isprint@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x20,%edi
call   10d0 <isgraph@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10d0 <isgraph@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x63,%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x43,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x43,%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x43,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1050 <toupper@plt>
movsbl %al,%eax
cmp    $0x39,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x63,%edi
call   1080 <tolower@plt>
movsbl %al,%eax
cmp    $0x63,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x43,%edi
call   1080 <tolower@plt>
movsbl %al,%eax
cmp    $0x63,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1080 <tolower@plt>
movsbl %al,%eax
cmp    $0x39,%eax
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1060 <CT_ASSERT@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<ctype_test>:
push   %rax
mov    $0x41,%edi
call   10a0 <isupper@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10a0 <isupper@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10a0 <isupper@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10a0 <isupper@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   1040 <islower@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   1040 <islower@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1040 <islower@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1040 <islower@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   1030 <isdigit@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   1030 <isdigit@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1030 <isdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1030 <isdigit@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   10c0 <isxdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10c0 <isxdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   10c0 <isxdigit@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10c0 <isxdigit@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10c0 <isxdigit@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x20,%edi
call   1070 <isspace@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1070 <isspace@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1070 <isspace@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   1090 <isalpha@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   1090 <isalpha@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   1090 <isalpha@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1090 <isalpha@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   1090 <isalpha@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x20,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10b0 <isprint@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10b0 <isprint@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x20,%edi
call   10d0 <isgraph@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x41,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x61,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x68,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   10d0 <isgraph@plt>
mov    %eax,%edi
call   1060 <CT_ASSERT@plt>
xor    %edi,%edi
call   10d0 <isgraph@plt>
xor    %edi,%edi
test   %eax,%eax
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x63,%edi
call   1050 <toupper@plt>
xor    %edi,%edi
cmp    $0x43,%al
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x43,%edi
call   1050 <toupper@plt>
xor    %edi,%edi
cmp    $0x43,%al
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1050 <toupper@plt>
xor    %edi,%edi
cmp    $0x39,%al
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x63,%edi
call   1080 <tolower@plt>
xor    %edi,%edi
cmp    $0x63,%al
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x43,%edi
call   1080 <tolower@plt>
xor    %edi,%edi
cmp    $0x63,%al
sete   %dil
call   1060 <CT_ASSERT@plt>
mov    $0x39,%edi
call   1080 <tolower@plt>
xor    %edi,%edi
cmp    $0x39,%al
sete   %dil
pop    %rax
jmp    1060 <CT_ASSERT@plt>

LLVM IR (-O0):
define void @ctype_test() {
%1 = call i32 @isupper(i8 signext 65)
%2 = call i32 @CT_ASSERT(i32 %1)
%3 = call i32 @isupper(i8 signext 97)
%4 = icmp ne i32 %3, 0
%5 = xor i1 %4, true
%6 = zext i1 %5 to i32
%7 = call i32 @CT_ASSERT(i32 %6)
%8 = call i32 @isupper(i8 signext 57)
%9 = icmp ne i32 %8, 0
%10 = xor i1 %9, true
%11 = zext i1 %10 to i32
%12 = call i32 @CT_ASSERT(i32 %11)
%13 = call i32 @isupper(i8 signext 0)
%14 = icmp ne i32 %13, 0
%15 = xor i1 %14, true
%16 = zext i1 %15 to i32
%17 = call i32 @CT_ASSERT(i32 %16)
%18 = call i32 @islower(i8 signext 65)
%19 = icmp ne i32 %18, 0
%20 = xor i1 %19, true
%21 = zext i1 %20 to i32
%22 = call i32 @CT_ASSERT(i32 %21)
%23 = call i32 @islower(i8 signext 97)
%24 = call i32 @CT_ASSERT(i32 %23)
%25 = call i32 @islower(i8 signext 57)
%26 = icmp ne i32 %25, 0
%27 = xor i1 %26, true
%28 = zext i1 %27 to i32
%29 = call i32 @CT_ASSERT(i32 %28)
%30 = call i32 @islower(i8 signext 0)
%31 = icmp ne i32 %30, 0
%32 = xor i1 %31, true
%33 = zext i1 %32 to i32
%34 = call i32 @CT_ASSERT(i32 %33)
%35 = call i32 @isdigit(i8 signext 65)
%36 = icmp ne i32 %35, 0
%37 = xor i1 %36, true
%38 = zext i1 %37 to i32
%39 = call i32 @CT_ASSERT(i32 %38)
%40 = call i32 @isdigit(i8 signext 97)
%41 = icmp ne i32 %40, 0
%42 = xor i1 %41, true
%43 = zext i1 %42 to i32
%44 = call i32 @CT_ASSERT(i32 %43)
%45 = call i32 @isdigit(i8 signext 57)
%46 = call i32 @CT_ASSERT(i32 %45)
%47 = call i32 @isdigit(i8 signext 0)
%48 = icmp ne i32 %47, 0
%49 = xor i1 %48, true
%50 = zext i1 %49 to i32
%51 = call i32 @CT_ASSERT(i32 %50)
%52 = call i32 @isxdigit(i8 signext 65)
%53 = call i32 @CT_ASSERT(i32 %52)
%54 = call i32 @isxdigit(i8 signext 97)
%55 = call i32 @CT_ASSERT(i32 %54)
%56 = call i32 @isxdigit(i8 signext 104)
%57 = icmp ne i32 %56, 0
%58 = xor i1 %57, true
%59 = zext i1 %58 to i32
%60 = call i32 @CT_ASSERT(i32 %59)
%61 = call i32 @isxdigit(i8 signext 57)
%62 = call i32 @CT_ASSERT(i32 %61)
%63 = call i32 @isxdigit(i8 signext 0)
%64 = icmp ne i32 %63, 0
%65 = xor i1 %64, true
%66 = zext i1 %65 to i32
%67 = call i32 @CT_ASSERT(i32 %66)
%68 = call i32 @isspace(i8 signext 32)
%69 = call i32 @CT_ASSERT(i32 %68)
%70 = call i32 @isspace(i8 signext 57)
%71 = icmp ne i32 %70, 0
%72 = xor i1 %71, true
%73 = zext i1 %72 to i32
%74 = call i32 @CT_ASSERT(i32 %73)
%75 = call i32 @isspace(i8 signext 0)
%76 = icmp ne i32 %75, 0
%77 = xor i1 %76, true
%78 = zext i1 %77 to i32
%79 = call i32 @CT_ASSERT(i32 %78)
%80 = call i32 @isalpha(i8 signext 65)
%81 = call i32 @CT_ASSERT(i32 %80)
%82 = call i32 @isalpha(i8 signext 97)
%83 = call i32 @CT_ASSERT(i32 %82)
%84 = call i32 @isalpha(i8 signext 104)
%85 = call i32 @CT_ASSERT(i32 %84)
%86 = call i32 @isalpha(i8 signext 57)
%87 = icmp ne i32 %86, 0
%88 = xor i1 %87, true
%89 = zext i1 %88 to i32
%90 = call i32 @CT_ASSERT(i32 %89)
%91 = call i32 @isalpha(i8 signext 0)
%92 = icmp ne i32 %91, 0
%93 = xor i1 %92, true
%94 = zext i1 %93 to i32
%95 = call i32 @CT_ASSERT(i32 %94)
%96 = call i32 @isprint(i8 signext 32)
%97 = call i32 @CT_ASSERT(i32 %96)
%98 = call i32 @isprint(i8 signext 65)
%99 = call i32 @CT_ASSERT(i32 %98)
%100 = call i32 @isprint(i8 signext 97)
%101 = call i32 @CT_ASSERT(i32 %100)
%102 = call i32 @isprint(i8 signext 104)
%103 = call i32 @CT_ASSERT(i32 %102)
%104 = call i32 @isprint(i8 signext 57)
%105 = call i32 @CT_ASSERT(i32 %104)
%106 = call i32 @isprint(i8 signext 0)
%107 = icmp ne i32 %106, 0
%108 = xor i1 %107, true
%109 = zext i1 %108 to i32
%110 = call i32 @CT_ASSERT(i32 %109)
%111 = call i32 @isgraph(i8 signext 32)
%112 = icmp ne i32 %111, 0
%113 = xor i1 %112, true
%114 = zext i1 %113 to i32
%115 = call i32 @CT_ASSERT(i32 %114)
%116 = call i32 @isgraph(i8 signext 65)
%117 = call i32 @CT_ASSERT(i32 %116)
%118 = call i32 @isgraph(i8 signext 97)
%119 = call i32 @CT_ASSERT(i32 %118)
%120 = call i32 @isgraph(i8 signext 104)
%121 = call i32 @CT_ASSERT(i32 %120)
%122 = call i32 @isgraph(i8 signext 57)
%123 = call i32 @CT_ASSERT(i32 %122)
%124 = call i32 @isgraph(i8 signext 0)
%125 = icmp ne i32 %124, 0
%126 = xor i1 %125, true
%127 = zext i1 %126 to i32
%128 = call i32 @CT_ASSERT(i32 %127)
%129 = call signext i8 @toupper(i8 signext 99)
%130 = sext i8 %129 to i32
%131 = icmp eq i32 %130, 67
%132 = zext i1 %131 to i32
%133 = call i32 @CT_ASSERT(i32 %132)
%134 = call signext i8 @toupper(i8 signext 67)
%135 = sext i8 %134 to i32
%136 = icmp eq i32 %135, 67
%137 = zext i1 %136 to i32
%138 = call i32 @CT_ASSERT(i32 %137)
%139 = call signext i8 @toupper(i8 signext 57)
%140 = sext i8 %139 to i32
%141 = icmp eq i32 %140, 57
%142 = zext i1 %141 to i32
%143 = call i32 @CT_ASSERT(i32 %142)
%144 = call signext i8 @tolower(i8 signext 99)
%145 = sext i8 %144 to i32
%146 = icmp eq i32 %145, 99
%147 = zext i1 %146 to i32
%148 = call i32 @CT_ASSERT(i32 %147)
%149 = call signext i8 @tolower(i8 signext 67)
%150 = sext i8 %149 to i32
%151 = icmp eq i32 %150, 99
%152 = zext i1 %151 to i32
%153 = call i32 @CT_ASSERT(i32 %152)
%154 = call signext i8 @tolower(i8 signext 57)
%155 = sext i8 %154 to i32
%156 = icmp eq i32 %155, 57
%157 = zext i1 %156 to i32
%158 = call i32 @CT_ASSERT(i32 %157)
ret void
}

LLVM IR (-O2):
define void @ctype_test() {
%1 = tail call i32 @isupper(i8 signext 65)
%2 = tail call i32 @CT_ASSERT(i32 %1)
%3 = tail call i32 @isupper(i8 signext 97)
%4 = icmp eq i32 %3, 0
%5 = zext i1 %4 to i32
%6 = tail call i32 @CT_ASSERT(i32 %5)
%7 = tail call i32 @isupper(i8 signext 57)
%8 = icmp eq i32 %7, 0
%9 = zext i1 %8 to i32
%10 = tail call i32 @CT_ASSERT(i32 %9)
%11 = tail call i32 @isupper(i8 signext 0)
%12 = icmp eq i32 %11, 0
%13 = zext i1 %12 to i32
%14 = tail call i32 @CT_ASSERT(i32 %13)
%15 = tail call i32 @islower(i8 signext 65)
%16 = icmp eq i32 %15, 0
%17 = zext i1 %16 to i32
%18 = tail call i32 @CT_ASSERT(i32 %17)
%19 = tail call i32 @islower(i8 signext 97)
%20 = tail call i32 @CT_ASSERT(i32 %19)
%21 = tail call i32 @islower(i8 signext 57)
%22 = icmp eq i32 %21, 0
%23 = zext i1 %22 to i32
%24 = tail call i32 @CT_ASSERT(i32 %23)
%25 = tail call i32 @islower(i8 signext 0)
%26 = icmp eq i32 %25, 0
%27 = zext i1 %26 to i32
%28 = tail call i32 @CT_ASSERT(i32 %27)
%29 = tail call i32 @isdigit(i8 signext 65)
%30 = icmp eq i32 %29, 0
%31 = zext i1 %30 to i32
%32 = tail call i32 @CT_ASSERT(i32 %31)
%33 = tail call i32 @isdigit(i8 signext 97)
%34 = icmp eq i32 %33, 0
%35 = zext i1 %34 to i32
%36 = tail call i32 @CT_ASSERT(i32 %35)
%37 = tail call i32 @isdigit(i8 signext 57)
%38 = tail call i32 @CT_ASSERT(i32 %37)
%39 = tail call i32 @isdigit(i8 signext 0)
%40 = icmp eq i32 %39, 0
%41 = zext i1 %40 to i32
%42 = tail call i32 @CT_ASSERT(i32 %41)
%43 = tail call i32 @isxdigit(i8 signext 65)
%44 = tail call i32 @CT_ASSERT(i32 %43)
%45 = tail call i32 @isxdigit(i8 signext 97)
%46 = tail call i32 @CT_ASSERT(i32 %45)
%47 = tail call i32 @isxdigit(i8 signext 104)
%48 = icmp eq i32 %47, 0
%49 = zext i1 %48 to i32
%50 = tail call i32 @CT_ASSERT(i32 %49)
%51 = tail call i32 @isxdigit(i8 signext 57)
%52 = tail call i32 @CT_ASSERT(i32 %51)
%53 = tail call i32 @isxdigit(i8 signext 0)
%54 = icmp eq i32 %53, 0
%55 = zext i1 %54 to i32
%56 = tail call i32 @CT_ASSERT(i32 %55)
%57 = tail call i32 @isspace(i8 signext 32)
%58 = tail call i32 @CT_ASSERT(i32 %57)
%59 = tail call i32 @isspace(i8 signext 57)
%60 = icmp eq i32 %59, 0
%61 = zext i1 %60 to i32
%62 = tail call i32 @CT_ASSERT(i32 %61)
%63 = tail call i32 @isspace(i8 signext 0)
%64 = icmp eq i32 %63, 0
%65 = zext i1 %64 to i32
%66 = tail call i32 @CT_ASSERT(i32 %65)
%67 = tail call i32 @isalpha(i8 signext 65)
%68 = tail call i32 @CT_ASSERT(i32 %67)
%69 = tail call i32 @isalpha(i8 signext 97)
%70 = tail call i32 @CT_ASSERT(i32 %69)
%71 = tail call i32 @isalpha(i8 signext 104)
%72 = tail call i32 @CT_ASSERT(i32 %71)
%73 = tail call i32 @isalpha(i8 signext 57)
%74 = icmp eq i32 %73, 0
%75 = zext i1 %74 to i32
%76 = tail call i32 @CT_ASSERT(i32 %75)
%77 = tail call i32 @isalpha(i8 signext 0)
%78 = icmp eq i32 %77, 0
%79 = zext i1 %78 to i32
%80 = tail call i32 @CT_ASSERT(i32 %79)
%81 = tail call i32 @isprint(i8 signext 32)
%82 = tail call i32 @CT_ASSERT(i32 %81)
%83 = tail call i32 @isprint(i8 signext 65)
%84 = tail call i32 @CT_ASSERT(i32 %83)
%85 = tail call i32 @isprint(i8 signext 97)
%86 = tail call i32 @CT_ASSERT(i32 %85)
%87 = tail call i32 @isprint(i8 signext 104)
%88 = tail call i32 @CT_ASSERT(i32 %87)
%89 = tail call i32 @isprint(i8 signext 57)
%90 = tail call i32 @CT_ASSERT(i32 %89)
%91 = tail call i32 @isprint(i8 signext 0)
%92 = icmp eq i32 %91, 0
%93 = zext i1 %92 to i32
%94 = tail call i32 @CT_ASSERT(i32 %93)
%95 = tail call i32 @isgraph(i8 signext 32)
%96 = icmp eq i32 %95, 0
%97 = zext i1 %96 to i32
%98 = tail call i32 @CT_ASSERT(i32 %97)
%99 = tail call i32 @isgraph(i8 signext 65)
%100 = tail call i32 @CT_ASSERT(i32 %99)
%101 = tail call i32 @isgraph(i8 signext 97)
%102 = tail call i32 @CT_ASSERT(i32 %101)
%103 = tail call i32 @isgraph(i8 signext 104)
%104 = tail call i32 @CT_ASSERT(i32 %103)
%105 = tail call i32 @isgraph(i8 signext 57)
%106 = tail call i32 @CT_ASSERT(i32 %105)
%107 = tail call i32 @isgraph(i8 signext 0)
%108 = icmp eq i32 %107, 0
%109 = zext i1 %108 to i32
%110 = tail call i32 @CT_ASSERT(i32 %109)
%111 = tail call signext i8 @toupper(i8 signext 99)
%112 = icmp eq i8 %111, 67
%113 = zext i1 %112 to i32
%114 = tail call i32 @CT_ASSERT(i32 %113)
%115 = tail call signext i8 @toupper(i8 signext 67)
%116 = icmp eq i8 %115, 67
%117 = zext i1 %116 to i32
%118 = tail call i32 @CT_ASSERT(i32 %117)
%119 = tail call signext i8 @toupper(i8 signext 57)
%120 = icmp eq i8 %119, 57
%121 = zext i1 %120 to i32
%122 = tail call i32 @CT_ASSERT(i32 %121)
%123 = tail call signext i8 @tolower(i8 signext 99)
%124 = icmp eq i8 %123, 99
%125 = zext i1 %124 to i32
%126 = tail call i32 @CT_ASSERT(i32 %125)
%127 = tail call signext i8 @tolower(i8 signext 67)
%128 = icmp eq i8 %127, 99
%129 = zext i1 %128 to i32
%130 = tail call i32 @CT_ASSERT(i32 %129)
%131 = tail call signext i8 @tolower(i8 signext 57)
%132 = icmp eq i8 %131, 57
%133 = zext i1 %132 to i32
%134 = tail call i32 @CT_ASSERT(i32 %133)
ret void
}