int filtre(unsigned char car) {
  switch (car) {
  case 0x7c:
  case 0x80:
  case 0x92:
  case 0x99:
  case 0x9c:
  case 0xa0:
  case 0xa1:
  case 0xa2:
  case 0xa3:
  case 0xa7:
  case 0xa8:
  case 0xa9:
  case 0xab:
  case 0xae:
  case 0xb0:
  case 0xb4:
  case 0xb7:
  case 0xbb:
  case 0xc0:
  case 0xc7:
  case 0xc9:
  case 0xd6:
  case 0xd7:
  case 0xd9:
  case 0xdf:
  case 0xe0:
  case 0xe1:
  case 0xe2:
  case 0xe3:
  case 0xe4:
  case 0xe6:
  case 0xe7:
  case 0xe8:
  case 0xe9:
  case 0xea:
  case 0xeb:
  case 0xed:
  case 0xee:
  case 0xef:
  case 0xf4:
  case 0xf6:
  case 0xf8:
  case 0xf9:
  case 0xfa:
  case 0xfb:
  case 0xfc:
    return 1;
  }
  if (car == '\b' || car == '\t' || car == '\r' || car == '\n' ||
      (car >= ' ' && car <= '~') || (car >= 0x82 && car <= 0x8d) ||
      (car >= 0x93 && car <= 0x98))
    return 1;
  return 0;
}


x86 assembly (clang, -O0):
<filtre>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
add    $0xffffff84,%eax
mov    %eax,%ecx
mov    %rcx,-0x10(%rbp)
sub    $0x80,%eax
ja     1142 <filtre+0x42>
mov    -0x10(%rbp),%rax
lea    0xed3(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x1,-0x4(%rbp)
jmp    11df <filtre+0xdf>
movzbl -0x5(%rbp),%eax
cmp    $0x8,%eax
je     11cc <filtre+0xcc>
movzbl -0x5(%rbp),%eax
cmp    $0x9,%eax
je     11cc <filtre+0xcc>
movzbl -0x5(%rbp),%eax
cmp    $0xd,%eax
je     11cc <filtre+0xcc>
movzbl -0x5(%rbp),%eax
cmp    $0xa,%eax
je     11cc <filtre+0xcc>
movzbl -0x5(%rbp),%eax
cmp    $0x20,%eax
jl     1190 <filtre+0x90>
movzbl -0x5(%rbp),%eax
cmp    $0x7e,%eax
jle    11cc <filtre+0xcc>
movzbl -0x5(%rbp),%eax
cmp    $0x82,%eax
jl     11ae <filtre+0xae>
movzbl -0x5(%rbp),%eax
cmp    $0x8d,%eax
jle    11cc <filtre+0xcc>
movzbl -0x5(%rbp),%eax
cmp    $0x93,%eax
jl     11d8 <filtre+0xd8>
movzbl -0x5(%rbp),%eax
cmp    $0x98,%eax
jg     11d8 <filtre+0xd8>
movl   $0x1,-0x4(%rbp)
jmp    11df <filtre+0xdf>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<filtre>:
lea    -0x80(%rdi),%ecx
cmp    $0xfc,%cl
ja     1121 <filtre+0x21>
mov    $0x1,%eax
movzbl %cl,%ecx
lea    0xee9(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
ret
lea    -0x20(%rdi),%eax
cmp    $0x5f,%al
setb   %al
lea    0x7e(%rdi),%ecx
cmp    $0xc,%cl
setb   %cl
or     %al,%cl
add    $0x6d,%dil
cmp    $0x6,%dil
setb   %al
or     %cl,%al
movzbl %al,%eax
ret

LLVM IR (-O0):
define i32 @filtre(i8 zeroext %0) {
%2 = alloca i32
%3 = alloca i8
store i8 %0, i8* %3
%4 = load i8, i8* %3
%5 = zext i8 %4 to i32
switch i32 %5, label %7 [
i32 124, label %6
i32 128, label %6
i32 146, label %6
i32 153, label %6
i32 156, label %6
i32 160, label %6
i32 161, label %6
i32 162, label %6
i32 163, label %6
i32 167, label %6
i32 168, label %6
i32 169, label %6
i32 171, label %6
i32 174, label %6
i32 176, label %6
i32 180, label %6
i32 183, label %6
i32 187, label %6
i32 192, label %6
i32 199, label %6
i32 201, label %6
i32 214, label %6
i32 215, label %6
i32 217, label %6
i32 223, label %6
i32 224, label %6
i32 225, label %6
i32 226, label %6
i32 227, label %6
i32 228, label %6
i32 230, label %6
i32 231, label %6
i32 232, label %6
i32 233, label %6
i32 234, label %6
i32 235, label %6
i32 237, label %6
i32 238, label %6
i32 239, label %6
i32 244, label %6
i32 246, label %6
i32 248, label %6
i32 249, label %6
i32 250, label %6
i32 251, label %6
i32 252, label %6
]
6: ; 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, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1
store i32 1, i32* %2
br label %49
7: ; preds = %1
%8 = load i8, i8* %3
%9 = zext i8 %8 to i32
%10 = icmp eq i32 %9, 8
br i1 %10, label %47, label %11
11: ; preds = %7
%12 = load i8, i8* %3
%13 = zext i8 %12 to i32
%14 = icmp eq i32 %13, 9
br i1 %14, label %47, label %15
15: ; preds = %11
%16 = load i8, i8* %3
%17 = zext i8 %16 to i32
%18 = icmp eq i32 %17, 13
br i1 %18, label %47, label %19
19: ; preds = %15
%20 = load i8, i8* %3
%21 = zext i8 %20 to i32
%22 = icmp eq i32 %21, 10
br i1 %22, label %47, label %23
23: ; preds = %19
%24 = load i8, i8* %3
%25 = zext i8 %24 to i32
%26 = icmp sge i32 %25, 32
br i1 %26, label %27, label %31
27: ; preds = %23
%28 = load i8, i8* %3
%29 = zext i8 %28 to i32
%30 = icmp sle i32 %29, 126
br i1 %30, label %47, label %31
31: ; preds = %27, %23
%32 = load i8, i8* %3
%33 = zext i8 %32 to i32
%34 = icmp sge i32 %33, 130
br i1 %34, label %35, label %39
35: ; preds = %31
%36 = load i8, i8* %3
%37 = zext i8 %36 to i32
%38 = icmp sle i32 %37, 141
br i1 %38, label %47, label %39
39: ; preds = %35, %31
%40 = load i8, i8* %3
%41 = zext i8 %40 to i32
%42 = icmp sge i32 %41, 147
br i1 %42, label %43, label %48
43: ; preds = %39
%44 = load i8, i8* %3
%45 = zext i8 %44 to i32
%46 = icmp sle i32 %45, 152
br i1 %46, label %47, label %48
47: ; preds = %43, %35, %27, %19, %15, %11, %7
store i32 1, i32* %2
br label %49
48: ; preds = %43, %39
store i32 0, i32* %2
br label %49
49: ; preds = %48, %47, %6
%50 = load i32, i32* %2
ret i32 %50
}

LLVM IR (-O2):
define i32 @filtre(i8 zeroext %0) {
switch i8 %0, label %2 [
i8 124, label %12
i8 -128, label %12
i8 -110, label %12
i8 -103, label %12
i8 -100, label %12
i8 -96, label %12
i8 -95, label %12
i8 -94, label %12
i8 -93, label %12
i8 -89, label %12
i8 -88, label %12
i8 -87, label %12
i8 -85, label %12
i8 -82, label %12
i8 -80, label %12
i8 -76, label %12
i8 -73, label %12
i8 -69, label %12
i8 -64, label %12
i8 -57, label %12
i8 -55, label %12
i8 -42, label %12
i8 -41, label %12
i8 -39, label %12
i8 -33, label %12
i8 -32, label %12
i8 -31, label %12
i8 -30, label %12
i8 -29, label %12
i8 -28, label %12
i8 -26, label %12
i8 -25, label %12
i8 -24, label %12
i8 -23, label %12
i8 -22, label %12
i8 -21, label %12
i8 -19, label %12
i8 -18, label %12
i8 -17, label %12
i8 -12, label %12
i8 -10, label %12
i8 -8, label %12
i8 -7, label %12
i8 -6, label %12
i8 -5, label %12
i8 -4, label %12
i8 13, label %12
i8 10, label %12
i8 9, label %12
i8 8, label %12
]
2: ; preds = %1
%3 = add i8 %0, -32
%4 = icmp ult i8 %3, 95
%5 = add i8 %0, 126
%6 = icmp ult i8 %5, 12
%7 = or i1 %4, %6
%8 = add i8 %0, 109
%9 = icmp ult i8 %8, 6
%10 = or i1 %9, %7
%11 = zext i1 %10 to i32
br label %12
12: ; preds = %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
%13 = phi i32 [ 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 ], [ 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 ], [ %11, %2 ]
ret i32 %13
}