int c_iscntrl(int c) {
  switch (c) {
  case '\a':
  case '\b':
  case '\f':
  case '\n':
  case '\r':
  case '\t':
  case '\v':
  case '\x00':
  case '\x01':
  case '\x02':
  case '\x03':
  case '\x04':
  case '\x05':
  case '\x06':
  case '\x0e':
  case '\x0f':
  case '\x10':
  case '\x11':
  case '\x12':
  case '\x13':
  case '\x14':
  case '\x15':
  case '\x16':
  case '\x17':
  case '\x18':
  case '\x19':
  case '\x1a':
  case '\x1b':
  case '\x1c':
  case '\x1d':
  case '\x1e':
  case '\x1f':
  case '\x7f':
    return 1;
  default:
    return 0;
  }
}


x86 assembly (clang, -O0):
<c_iscntrl>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
sub    $0x20,%eax
jb     112c <c_iscntrl+0x2c>
jmp    111b <c_iscntrl+0x1b>
mov    -0xc(%rbp),%eax
sub    $0x7f,%eax
jne    1138 <c_iscntrl+0x38>
jmp    112c <c_iscntrl+0x2c>
movl   $0x1,-0x4(%rbp)
jmp    113f <c_iscntrl+0x3f>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<c_iscntrl>:
mov    $0x1,%eax
cmp    $0x20,%edi
jae    110b <c_iscntrl+0xb>
ret
cmp    $0x7f,%edi
je     110a <c_iscntrl+0xa>
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @c_iscntrl(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %6 [
i32 7, label %5
i32 8, label %5
i32 12, label %5
i32 10, label %5
i32 13, label %5
i32 9, label %5
i32 11, label %5
i32 0, label %5
i32 1, label %5
i32 2, label %5
i32 3, label %5
i32 4, label %5
i32 5, label %5
i32 6, label %5
i32 14, label %5
i32 15, label %5
i32 16, label %5
i32 17, label %5
i32 18, label %5
i32 19, label %5
i32 20, label %5
i32 21, label %5
i32 22, label %5
i32 23, label %5
i32 24, label %5
i32 25, label %5
i32 26, label %5
i32 27, label %5
i32 28, label %5
i32 29, label %5
i32 30, label %5
i32 31, label %5
i32 127, label %5
]
5: ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1
store i32 1, i32* %2
br label %7
6: ; preds = %1
store i32 0, i32* %2
br label %7
7: ; preds = %6, %5
%8 = load i32, i32* %2
ret i32 %8
}

LLVM IR (-O2):
define i32 @c_iscntrl(i32 %0) {
switch i32 %0, label %2 [
i32 7, label %3
i32 8, label %3
i32 12, label %3
i32 10, label %3
i32 13, label %3
i32 9, label %3
i32 11, label %3
i32 0, label %3
i32 1, label %3
i32 2, label %3
i32 3, label %3
i32 4, label %3
i32 5, label %3
i32 6, label %3
i32 14, label %3
i32 15, label %3
i32 16, label %3
i32 17, label %3
i32 18, label %3
i32 19, label %3
i32 20, label %3
i32 21, label %3
i32 22, label %3
i32 23, label %3
i32 24, label %3
i32 25, label %3
i32 26, label %3
i32 27, label %3
i32 28, label %3
i32 29, label %3
i32 30, label %3
i32 31, label %3
i32 127, label %3
]
2: ; preds = %1
br label %3
3: ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %2
%4 = phi i32 [ 0, %2 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ], [ 1, %1 ]
ret i32 %4
}