#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 */
bool is_arg_type(char arg_type) {
  switch (arg_type) {
  case 'U':
  case 'I':
  case 'F':
  case 'z':
  case 'l':
  case 'd':
  case 'u':
  case 'i':
  case 'f':
  case 'h':
  case 's':
  case 'c':
  case 'b':
    return true;
  default:
    return false;
  }
}


x86 assembly (clang, -O0):
<is_arg_type>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x5(%rbp)
movsbl -0x5(%rbp),%eax
mov    %eax,-0xc(%rbp)
sub    $0x46,%eax
je     11be <is_arg_type+0xbe>
jmp    111f <is_arg_type+0x1f>
mov    -0xc(%rbp),%eax
sub    $0x49,%eax
je     11be <is_arg_type+0xbe>
jmp    1130 <is_arg_type+0x30>
mov    -0xc(%rbp),%eax
sub    $0x55,%eax
je     11be <is_arg_type+0xbe>
jmp    1141 <is_arg_type+0x41>
mov    -0xc(%rbp),%eax
add    $0xffffff9e,%eax
sub    $0x3,%eax
jb     11be <is_arg_type+0xbe>
jmp    1155 <is_arg_type+0x55>
mov    -0xc(%rbp),%eax
sub    $0x66,%eax
je     11be <is_arg_type+0xbe>
jmp    1166 <is_arg_type+0x66>
mov    -0xc(%rbp),%eax
add    $0xffffff98,%eax
sub    $0x2,%eax
jb     11be <is_arg_type+0xbe>
jmp    117a <is_arg_type+0x7a>
mov    -0xc(%rbp),%eax
sub    $0x6c,%eax
je     11be <is_arg_type+0xbe>
jmp    118b <is_arg_type+0x8b>
mov    -0xc(%rbp),%eax
sub    $0x73,%eax
je     11be <is_arg_type+0xbe>
jmp    119c <is_arg_type+0x9c>
mov    -0xc(%rbp),%eax
sub    $0x75,%eax
je     11be <is_arg_type+0xbe>
jmp    11ad <is_arg_type+0xad>
mov    -0xc(%rbp),%eax
sub    $0x7a,%eax
jne    11ca <is_arg_type+0xca>
jmp    11be <is_arg_type+0xbe>
movl   $0x1,-0x4(%rbp)
jmp    11d1 <is_arg_type+0xd1>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_arg_type>:
add    $0xffffffba,%edi
cmp    $0x34,%edi
ja     111e <is_arg_type+0x1e>
mov    $0x1,%eax
movabs $0x10a04d70008009,%rcx
bt     %rdi,%rcx
jae    111e <is_arg_type+0x1e>
ret
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @is_arg_type(i8 signext %0) {
%2 = alloca i32
%3 = alloca i8
store i8 %0, i8* %3
%4 = load i8, i8* %3
%5 = sext i8 %4 to i32
switch i32 %5, label %7 [
i32 85, label %6
i32 73, label %6
i32 70, label %6
i32 122, label %6
i32 108, label %6
i32 100, label %6
i32 117, label %6
i32 105, label %6
i32 102, label %6
i32 104, label %6
i32 115, label %6
i32 99, label %6
i32 98, label %6
]
6: ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1
store i32 1, i32* %2
br label %8
7: ; preds = %1
store i32 0, i32* %2
br label %8
8: ; preds = %7, %6
%9 = load i32, i32* %2
ret i32 %9
}

LLVM IR (-O2):
define i32 @is_arg_type(i8 signext %0) {
%2 = sext i8 %0 to i32
switch i32 %2, label %3 [
i32 85, label %4
i32 73, label %4
i32 70, label %4
i32 122, label %4
i32 108, label %4
i32 100, label %4
i32 117, label %4
i32 105, label %4
i32 102, label %4
i32 104, label %4
i32 115, label %4
i32 99, label %4
i32 98, label %4
]
3: ; preds = %1
br label %4
4: ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %3
%5 = phi i32 [ 0, %3 ], [ 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 %5
}