#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*/ exit(int);
int ispunct(int);
int IsPunct(int enc, int c) {
  if (enc == 0)
    return ispunct(c);
  if (enc == 1) {
    if (c == 0x24 || c == 0x2b || c == 0x5e || c == 0x60 || c == 0x7c ||
        c == 0x7e)
      return 1;
    if (c >= 0x3c && c <= 0x3e)
      return 1;
  }
  if (c >= 0x21 && c <= 0x2f)
    return 1;
  if (c >= 0x3a && c <= 0x40)
    return 1;
  if (c >= 0x5b && c <= 0x60)
    return 1;
  if (c >= 0x7b && c <= 0x7e)
    return 1;
  switch (enc) {
  case 2:
  case 10:
  case 15:
    if (c == 0xad)
      return 1;
  case 1:
    if (c == 0xa1)
      return 1;
    if (c == 0xab)
      return 1;
    if (c == 0xb7)
      return 1;
    if (c == 0xbb)
      return 1;
    if (c == 0xbf)
      return 1;
    break;
  case 3:
  case 5:
  case 6:
  case 14:
    if (c == 0xad)
      return 1;
    break;
  case 4:
  case 11:
    if (c == 0xad)
      return 1;
    if (c == 0xb7)
      return 1;
    if (c == 0xbd)
      return 1;
    break;
  case 7:
    if (c == 0xac)
      return 1;
    if (c == 0xad)
      return 1;
    if (c == 0xbb)
      return 1;
    if (c == 0xbf)
      return 1;
    break;
  case 8:
    if (c == 0xa1 || c == 0xa2)
      return 1;
    if (c == 0xab)
      return 1;
    if (c == 0xaf)
      return 1;
    if (c == 0xad)
      return 1;
    if (c == 0xb7 || c == 0xbb)
      return 1;
    break;
  case 9:
    if (c == 0xab)
      return 1;
    if (c == 0xad)
      return 1;
    if (c == 0xb7)
      return 1;
    if (c == 0xbb)
      return 1;
    if (c == 0xdf)
      return 1;
    break;
  case 13:
    if (c == 0xa1 || c == 0xa5)
      return 1;
    if (c == 0xab || c == 0xad)
      return 1;
    if (c == 0xb4 || c == 0xb7)
      return 1;
    if (c == 0xbb)
      return 1;
    if (c == 0xff)
      return 1;
    break;
  case 16:
    if (c == 0xa5)
      return 1;
    if (c == 0xab)
      return 1;
    if (c == 0xad)
      return 1;
    if (c == 0xb5)
      return 1;
    if (c == 0xb7)
      return 1;
    if (c == 0xbb)
      return 1;
    break;
  case 18:
    if (c == 0x9e)
      return 1;
    break;
  case 12:
  case 17:
    break;
  default:
    exit(-1);
  }
  return 0;
}


x86 assembly (clang, -O0):
<IsPunct>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
cmpl   $0x0,-0x8(%rbp)
jne    1148 <IsPunct+0x28>
mov    -0xc(%rbp),%edi
call   1030 <ispunct@plt>
mov    %eax,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0x1,-0x8(%rbp)
jne    11bf <IsPunct+0x9f>
cmpl   $0x24,-0xc(%rbp)
je     118e <IsPunct+0x6e>
cmpl   $0x2b,-0xc(%rbp)
je     118e <IsPunct+0x6e>
cmpl   $0x5e,-0xc(%rbp)
je     118e <IsPunct+0x6e>
cmpl   $0x60,-0xc(%rbp)
je     118e <IsPunct+0x6e>
cmpl   $0x7c,-0xc(%rbp)
je     118e <IsPunct+0x6e>
cmpl   $0x7e,-0xc(%rbp)
jne    119a <IsPunct+0x7a>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0x3c,-0xc(%rbp)
jl     11ba <IsPunct+0x9a>
cmpl   $0x3e,-0xc(%rbp)
jg     11ba <IsPunct+0x9a>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    11bf <IsPunct+0x9f>
cmpl   $0x21,-0xc(%rbp)
jl     11df <IsPunct+0xbf>
cmpl   $0x2f,-0xc(%rbp)
jg     11df <IsPunct+0xbf>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0x3a,-0xc(%rbp)
jl     11ff <IsPunct+0xdf>
cmpl   $0x40,-0xc(%rbp)
jg     11ff <IsPunct+0xdf>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0x5b,-0xc(%rbp)
jl     121f <IsPunct+0xff>
cmpl   $0x60,-0xc(%rbp)
jg     121f <IsPunct+0xff>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0x7b,-0xc(%rbp)
jl     123f <IsPunct+0x11f>
cmpl   $0x7e,-0xc(%rbp)
jg     123f <IsPunct+0x11f>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x11,%eax
ja     1664 <IsPunct+0x544>
mov    -0x18(%rbp),%rax
lea    0xda1(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0xad,-0xc(%rbp)
jne    1281 <IsPunct+0x161>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    1286 <IsPunct+0x166>
cmpl   $0xa1,-0xc(%rbp)
jne    129f <IsPunct+0x17f>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xab,-0xc(%rbp)
jne    12b8 <IsPunct+0x198>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xb7,-0xc(%rbp)
jne    12d1 <IsPunct+0x1b1>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbb,-0xc(%rbp)
jne    12ea <IsPunct+0x1ca>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbf,-0xc(%rbp)
jne    1303 <IsPunct+0x1e3>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0xad,-0xc(%rbp)
jne    1321 <IsPunct+0x201>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0xad,-0xc(%rbp)
jne    133f <IsPunct+0x21f>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xb7,-0xc(%rbp)
jne    1358 <IsPunct+0x238>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbd,-0xc(%rbp)
jne    1371 <IsPunct+0x251>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0xac,-0xc(%rbp)
jne    138f <IsPunct+0x26f>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xad,-0xc(%rbp)
jne    13a8 <IsPunct+0x288>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbb,-0xc(%rbp)
jne    13c1 <IsPunct+0x2a1>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbf,-0xc(%rbp)
jne    13da <IsPunct+0x2ba>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0xa1,-0xc(%rbp)
je     13f9 <IsPunct+0x2d9>
cmpl   $0xa2,-0xc(%rbp)
jne    1405 <IsPunct+0x2e5>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xab,-0xc(%rbp)
jne    141e <IsPunct+0x2fe>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xaf,-0xc(%rbp)
jne    1437 <IsPunct+0x317>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xad,-0xc(%rbp)
jne    1450 <IsPunct+0x330>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xb7,-0xc(%rbp)
je     146a <IsPunct+0x34a>
cmpl   $0xbb,-0xc(%rbp)
jne    1476 <IsPunct+0x356>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0xab,-0xc(%rbp)
jne    1494 <IsPunct+0x374>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xad,-0xc(%rbp)
jne    14ad <IsPunct+0x38d>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xb7,-0xc(%rbp)
jne    14c6 <IsPunct+0x3a6>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbb,-0xc(%rbp)
jne    14df <IsPunct+0x3bf>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xdf,-0xc(%rbp)
jne    14f8 <IsPunct+0x3d8>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0xa1,-0xc(%rbp)
je     1517 <IsPunct+0x3f7>
cmpl   $0xa5,-0xc(%rbp)
jne    1523 <IsPunct+0x403>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xab,-0xc(%rbp)
je     153d <IsPunct+0x41d>
cmpl   $0xad,-0xc(%rbp)
jne    1549 <IsPunct+0x429>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xb4,-0xc(%rbp)
je     1563 <IsPunct+0x443>
cmpl   $0xb7,-0xc(%rbp)
jne    156f <IsPunct+0x44f>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbb,-0xc(%rbp)
jne    1588 <IsPunct+0x468>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xff,-0xc(%rbp)
jne    15a1 <IsPunct+0x481>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0xa5,-0xc(%rbp)
jne    15bf <IsPunct+0x49f>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xab,-0xc(%rbp)
jne    15d8 <IsPunct+0x4b8>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xad,-0xc(%rbp)
jne    15f1 <IsPunct+0x4d1>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xb5,-0xc(%rbp)
jne    160a <IsPunct+0x4ea>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xb7,-0xc(%rbp)
jne    1623 <IsPunct+0x503>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
cmpl   $0xbb,-0xc(%rbp)
jne    163c <IsPunct+0x51c>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
cmpl   $0x9e,-0xc(%rbp)
jne    165a <IsPunct+0x53a>
movl   $0x1,-0x4(%rbp)
jmp    1675 <IsPunct+0x555>
jmp    166e <IsPunct+0x54e>
jmp    166e <IsPunct+0x54e>
mov    $0xffffffff,%edi
call   1040 <exit@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<IsPunct>:
push   %rax
cmp    $0x1,%edi
je     1132 <IsPunct+0x12>
test   %edi,%edi
jne    1151 <IsPunct+0x31>
mov    %esi,%edi
pop    %rax
jmp    1030 <ispunct@plt>
mov    $0x1,%eax
lea    -0x24(%rsi),%ecx
cmp    $0x3c,%ecx
ja     11ac <IsPunct+0x8c>
movabs $0x1400000000000081,%rdx
bt     %rcx,%rdx
jae    11ac <IsPunct+0x8c>
pop    %rcx
ret
lea    -0x21(%rsi),%ecx
mov    $0x1,%eax
cmp    $0xf,%ecx
jb     114f <IsPunct+0x2f>
mov    $0x1,%eax
lea    -0x5b(%rsi),%ecx
cmp    $0x23,%ecx
ja     117b <IsPunct+0x5b>
movabs $0xf0000003f,%rdx
bt     %rcx,%rdx
jb     114f <IsPunct+0x2f>
lea    -0x3a(%rsi),%ecx
cmp    $0x7,%ecx
jb     114f <IsPunct+0x2f>
add    $0xffffffff,%edi
cmp    $0x11,%edi
ja     12dd <IsPunct+0x1bd>
lea    0xe6a(%rip),%rcx
movslq (%rcx,%rdi,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
cmp    $0xad,%esi
je     114f <IsPunct+0x2f>
jmp    12d9 <IsPunct+0x1b9>
cmp    $0x7c,%esi
je     114f <IsPunct+0x2f>
cmp    $0x7e,%esi
je     114f <IsPunct+0x2f>
lea    -0x3c(%rsi),%ecx
cmp    $0x3,%ecx
jb     114f <IsPunct+0x2f>
lea    -0x21(%rsi),%ecx
cmp    $0xf,%ecx
jae    115e <IsPunct+0x3e>
jmp    114f <IsPunct+0x2f>
add    $0xffffff5f,%esi
cmp    $0x1e,%esi
ja     12d9 <IsPunct+0x1b9>
mov    $0x44401401,%ecx
jmp    121e <IsPunct+0xfe>
add    $0xffffff53,%esi
cmp    $0x10,%esi
ja     12d9 <IsPunct+0x1b9>
mov    $0x10401,%ecx
jmp    121e <IsPunct+0xfe>
add    $0xffffff5f,%esi
cmp    $0x1e,%esi
ja     12d9 <IsPunct+0x1b9>
mov    $0x44400401,%ecx
jmp    121e <IsPunct+0xfe>
add    $0xffffff54,%esi
cmp    $0x13,%esi
ja     12d9 <IsPunct+0x1b9>
mov    $0x88003,%ecx
bt     %esi,%ecx
jb     114f <IsPunct+0x2f>
jmp    12d9 <IsPunct+0x1b9>
lea    -0xa1(%rsi),%ecx
cmp    $0x2,%ecx
jb     114f <IsPunct+0x2f>
add    $0xffffff55,%esi
ror    %esi
cmp    $0x9,%esi
jae    12d9 <IsPunct+0x1b9>
movslq %esi,%rax
lea    0xdf2(%rip),%rcx
jmp    12c8 <IsPunct+0x1a8>
add    $0xffffff55,%esi
cmp    $0x34,%esi
ja     12d9 <IsPunct+0x1b9>
movabs $0x10000000011005,%rcx
bt     %rsi,%rcx
jb     114f <IsPunct+0x2f>
jmp    12d9 <IsPunct+0x1b9>
mov    %esi,%ecx
and    $0xfffffffb,%ecx
cmp    $0xa1,%ecx
je     114f <IsPunct+0x2f>
lea    -0xab(%rsi),%ecx
cmp    $0x10,%ecx
ja     12a3 <IsPunct+0x183>
mov    $0x11205,%edx
bt     %ecx,%edx
jb     114f <IsPunct+0x2f>
cmp    $0xff,%esi
je     114f <IsPunct+0x2f>
jmp    12d9 <IsPunct+0x1b9>
add    $0xffffff5b,%esi
ror    %esi
cmp    $0xc,%esi
jae    12d9 <IsPunct+0x1b9>
movslq %esi,%rax
lea    0xda4(%rip),%rcx
mov    (%rcx,%rax,4),%eax
pop    %rcx
ret
cmp    $0x9e,%esi
je     114f <IsPunct+0x2f>
xor    %eax,%eax
pop    %rcx
ret
mov    $0xffffffff,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
define i32 @IsPunct(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
store i32 %0, i32* %4
store i32 %1, i32* %5
%6 = load i32, i32* %4
%7 = icmp eq i32 %6, 0
br i1 %7, label %8, label %11
8: ; preds = %2
%9 = load i32, i32* %5
%10 = call i32 @ispunct(i32 %9)
store i32 %10, i32* %3
br label %244
11: ; preds = %2
%12 = load i32, i32* %4
%13 = icmp eq i32 %12, 1
br i1 %13, label %14, label %41
14: ; preds = %11
%15 = load i32, i32* %5
%16 = icmp eq i32 %15, 36
br i1 %16, label %32, label %17
17: ; preds = %14
%18 = load i32, i32* %5
%19 = icmp eq i32 %18, 43
br i1 %19, label %32, label %20
20: ; preds = %17
%21 = load i32, i32* %5
%22 = icmp eq i32 %21, 94
br i1 %22, label %32, label %23
23: ; preds = %20
%24 = load i32, i32* %5
%25 = icmp eq i32 %24, 96
br i1 %25, label %32, label %26
26: ; preds = %23
%27 = load i32, i32* %5
%28 = icmp eq i32 %27, 124
br i1 %28, label %32, label %29
29: ; preds = %26
%30 = load i32, i32* %5
%31 = icmp eq i32 %30, 126
br i1 %31, label %32, label %33
32: ; preds = %29, %26, %23, %20, %17, %14
store i32 1, i32* %3
br label %244
33: ; preds = %29
%34 = load i32, i32* %5
%35 = icmp sge i32 %34, 60
br i1 %35, label %36, label %40
36: ; preds = %33
%37 = load i32, i32* %5
%38 = icmp sle i32 %37, 62
br i1 %38, label %39, label %40
39: ; preds = %36
store i32 1, i32* %3
br label %244
40: ; preds = %36, %33
br label %41
41: ; preds = %40, %11
%42 = load i32, i32* %5
%43 = icmp sge i32 %42, 33
br i1 %43, label %44, label %48
44: ; preds = %41
%45 = load i32, i32* %5
%46 = icmp sle i32 %45, 47
br i1 %46, label %47, label %48
47: ; preds = %44
store i32 1, i32* %3
br label %244
48: ; preds = %44, %41
%49 = load i32, i32* %5
%50 = icmp sge i32 %49, 58
br i1 %50, label %51, label %55
51: ; preds = %48
%52 = load i32, i32* %5
%53 = icmp sle i32 %52, 64
br i1 %53, label %54, label %55
54: ; preds = %51
store i32 1, i32* %3
br label %244
55: ; preds = %51, %48
%56 = load i32, i32* %5
%57 = icmp sge i32 %56, 91
br i1 %57, label %58, label %62
58: ; preds = %55
%59 = load i32, i32* %5
%60 = icmp sle i32 %59, 96
br i1 %60, label %61, label %62
61: ; preds = %58
store i32 1, i32* %3
br label %244
62: ; preds = %58, %55
%63 = load i32, i32* %5
%64 = icmp sge i32 %63, 123
br i1 %64, label %65, label %69
65: ; preds = %62
%66 = load i32, i32* %5
%67 = icmp sle i32 %66, 126
br i1 %67, label %68, label %69
68: ; preds = %65
store i32 1, i32* %3
br label %244
69: ; preds = %65, %62
%70 = load i32, i32* %4
switch i32 %70, label %241 [
i32 2, label %71
i32 10, label %71
i32 15, label %71
i32 1, label %76
i32 3, label %97
i32 5, label %97
i32 6, label %97
i32 14, label %97
i32 4, label %102
i32 11, label %102
i32 7, label %115
i32 8, label %132
i32 9, label %159
i32 13, label %180
i32 16, label %210
i32 18, label %235
i32 12, label %240
i32 17, label %240
]
71: ; preds = %69, %69, %69
%72 = load i32, i32* %5
%73 = icmp eq i32 %72, 173
br i1 %73, label %74, label %75
74: ; preds = %71
store i32 1, i32* %3
br label %244
75: ; preds = %71
br label %76
76: ; preds = %69, %75
%77 = load i32, i32* %5
%78 = icmp eq i32 %77, 161
br i1 %78, label %79, label %80
79: ; preds = %76
store i32 1, i32* %3
br label %244
80: ; preds = %76
%81 = load i32, i32* %5
%82 = icmp eq i32 %81, 171
br i1 %82, label %83, label %84
83: ; preds = %80
store i32 1, i32* %3
br label %244
84: ; preds = %80
%85 = load i32, i32* %5
%86 = icmp eq i32 %85, 183
br i1 %86, label %87, label %88
87: ; preds = %84
store i32 1, i32* %3
br label %244
88: ; preds = %84
%89 = load i32, i32* %5
%90 = icmp eq i32 %89, 187
br i1 %90, label %91, label %92
91: ; preds = %88
store i32 1, i32* %3
br label %244
92: ; preds = %88
%93 = load i32, i32* %5
%94 = icmp eq i32 %93, 191
br i1 %94, label %95, label %96
95: ; preds = %92
store i32 1, i32* %3
br label %244
96: ; preds = %92
br label %243
97: ; preds = %69, %69, %69, %69
%98 = load i32, i32* %5
%99 = icmp eq i32 %98, 173
br i1 %99, label %100, label %101
100: ; preds = %97
store i32 1, i32* %3
br label %244
101: ; preds = %97
br label %243
102: ; preds = %69, %69
%103 = load i32, i32* %5
%104 = icmp eq i32 %103, 173
br i1 %104, label %105, label %106
105: ; preds = %102
store i32 1, i32* %3
br label %244
106: ; preds = %102
%107 = load i32, i32* %5
%108 = icmp eq i32 %107, 183
br i1 %108, label %109, label %110
109: ; preds = %106
store i32 1, i32* %3
br label %244
110: ; preds = %106
%111 = load i32, i32* %5
%112 = icmp eq i32 %111, 189
br i1 %112, label %113, label %114
113: ; preds = %110
store i32 1, i32* %3
br label %244
114: ; preds = %110
br label %243
115: ; preds = %69
%116 = load i32, i32* %5
%117 = icmp eq i32 %116, 172
br i1 %117, label %118, label %119
118: ; preds = %115
store i32 1, i32* %3
br label %244
119: ; preds = %115
%120 = load i32, i32* %5
%121 = icmp eq i32 %120, 173
br i1 %121, label %122, label %123
122: ; preds = %119
store i32 1, i32* %3
br label %244
123: ; preds = %119
%124 = load i32, i32* %5
%125 = icmp eq i32 %124, 187
br i1 %125, label %126, label %127
126: ; preds = %123
store i32 1, i32* %3
br label %244
127: ; preds = %123
%128 = load i32, i32* %5
%129 = icmp eq i32 %128, 191
br i1 %129, label %130, label %131
130: ; preds = %127
store i32 1, i32* %3
br label %244
131: ; preds = %127
br label %243
132: ; preds = %69
%133 = load i32, i32* %5
%134 = icmp eq i32 %133, 161
br i1 %134, label %138, label %135
135: ; preds = %132
%136 = load i32, i32* %5
%137 = icmp eq i32 %136, 162
br i1 %137, label %138, label %139
138: ; preds = %135, %132
store i32 1, i32* %3
br label %244
139: ; preds = %135
%140 = load i32, i32* %5
%141 = icmp eq i32 %140, 171
br i1 %141, label %142, label %143
142: ; preds = %139
store i32 1, i32* %3
br label %244
143: ; preds = %139
%144 = load i32, i32* %5
%145 = icmp eq i32 %144, 175
br i1 %145, label %146, label %147
146: ; preds = %143
store i32 1, i32* %3
br label %244
147: ; preds = %143
%148 = load i32, i32* %5
%149 = icmp eq i32 %148, 173
br i1 %149, label %150, label %151
150: ; preds = %147
store i32 1, i32* %3
br label %244
151: ; preds = %147
%152 = load i32, i32* %5
%153 = icmp eq i32 %152, 183
br i1 %153, label %157, label %154
154: ; preds = %151
%155 = load i32, i32* %5
%156 = icmp eq i32 %155, 187
br i1 %156, label %157, label %158
157: ; preds = %154, %151
store i32 1, i32* %3
br label %244
158: ; preds = %154
br label %243
159: ; preds = %69
%160 = load i32, i32* %5
%161 = icmp eq i32 %160, 171
br i1 %161, label %162, label %163
162: ; preds = %159
store i32 1, i32* %3
br label %244
163: ; preds = %159
%164 = load i32, i32* %5
%165 = icmp eq i32 %164, 173
br i1 %165, label %166, label %167
166: ; preds = %163
store i32 1, i32* %3
br label %244
167: ; preds = %163
%168 = load i32, i32* %5
%169 = icmp eq i32 %168, 183
br i1 %169, label %170, label %171
170: ; preds = %167
store i32 1, i32* %3
br label %244
171: ; preds = %167
%172 = load i32, i32* %5
%173 = icmp eq i32 %172, 187
br i1 %173, label %174, label %175
174: ; preds = %171
store i32 1, i32* %3
br label %244
175: ; preds = %171
%176 = load i32, i32* %5
%177 = icmp eq i32 %176, 223
br i1 %177, label %178, label %179
178: ; preds = %175
store i32 1, i32* %3
br label %244
179: ; preds = %175
br label %243
180: ; preds = %69
%181 = load i32, i32* %5
%182 = icmp eq i32 %181, 161
br i1 %182, label %186, label %183
183: ; preds = %180
%184 = load i32, i32* %5
%185 = icmp eq i32 %184, 165
br i1 %185, label %186, label %187
186: ; preds = %183, %180
store i32 1, i32* %3
br label %244
187: ; preds = %183
%188 = load i32, i32* %5
%189 = icmp eq i32 %188, 171
br i1 %189, label %193, label %190
190: ; preds = %187
%191 = load i32, i32* %5
%192 = icmp eq i32 %191, 173
br i1 %192, label %193, label %194
193: ; preds = %190, %187
store i32 1, i32* %3
br label %244
194: ; preds = %190
%195 = load i32, i32* %5
%196 = icmp eq i32 %195, 180
br i1 %196, label %200, label %197
197: ; preds = %194
%198 = load i32, i32* %5
%199 = icmp eq i32 %198, 183
br i1 %199, label %200, label %201
200: ; preds = %197, %194
store i32 1, i32* %3
br label %244
201: ; preds = %197
%202 = load i32, i32* %5
%203 = icmp eq i32 %202, 187
br i1 %203, label %204, label %205
204: ; preds = %201
store i32 1, i32* %3
br label %244
205: ; preds = %201
%206 = load i32, i32* %5
%207 = icmp eq i32 %206, 255
br i1 %207, label %208, label %209
208: ; preds = %205
store i32 1, i32* %3
br label %244
209: ; preds = %205
br label %243
210: ; preds = %69
%211 = load i32, i32* %5
%212 = icmp eq i32 %211, 165
br i1 %212, label %213, label %214
213: ; preds = %210
store i32 1, i32* %3
br label %244
214: ; preds = %210
%215 = load i32, i32* %5
%216 = icmp eq i32 %215, 171
br i1 %216, label %217, label %218
217: ; preds = %214
store i32 1, i32* %3
br label %244
218: ; preds = %214
%219 = load i32, i32* %5
%220 = icmp eq i32 %219, 173
br i1 %220, label %221, label %222
221: ; preds = %218
store i32 1, i32* %3
br label %244
222: ; preds = %218
%223 = load i32, i32* %5
%224 = icmp eq i32 %223, 181
br i1 %224, label %225, label %226
225: ; preds = %222
store i32 1, i32* %3
br label %244
226: ; preds = %222
%227 = load i32, i32* %5
%228 = icmp eq i32 %227, 183
br i1 %228, label %229, label %230
229: ; preds = %226
store i32 1, i32* %3
br label %244
230: ; preds = %226
%231 = load i32, i32* %5
%232 = icmp eq i32 %231, 187
br i1 %232, label %233, label %234
233: ; preds = %230
store i32 1, i32* %3
br label %244
234: ; preds = %230
br label %243
235: ; preds = %69
%236 = load i32, i32* %5
%237 = icmp eq i32 %236, 158
br i1 %237, label %238, label %239
238: ; preds = %235
store i32 1, i32* %3
br label %244
239: ; preds = %235
br label %243
240: ; preds = %69, %69
br label %243
241: ; preds = %69
%242 = call i32 @exit(i32 -1)
unreachable
243: ; preds = %240, %239, %234, %209, %179, %158, %131, %114, %101, %96
store i32 0, i32* %3
br label %244
244: ; preds = %243, %238, %233, %229, %225, %221, %217, %213, %208, %204, %200, %193, %186, %178, %174, %170, %166, %162, %157, %150, %146, %142, %138, %130, %126, %122, %118, %113, %109, %105, %100, %95, %91, %87, %83, %79, %74, %68, %61, %54, %47, %39, %32, %8
%245 = load i32, i32* %3
ret i32 %245
}

LLVM IR (-O2):
@switch.table.IsPunct = [9 x i32] [i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 1]
@switch.table.IsPunct.1 = [12 x i32] [i32 1, i32 0, i32 0, i32 1, i32 1, i32 0, i32 0, i32 0, i32 1, i32 1, i32 0, i32 1]
define i32 @IsPunct(i32 %0, i32 %1) {
switch i32 %0, label %12 [
i32 0, label %3
i32 1, label %5
]
3: ; preds = %2
%4 = tail call i32 @ispunct(i32 %1)
br label %52
5: ; preds = %2
switch i32 %1, label %6 [
i32 126, label %52
i32 124, label %52
i32 96, label %52
i32 94, label %52
i32 43, label %52
i32 36, label %52
]
6: ; preds = %5
%7 = add i32 %1, -60
%8 = icmp ult i32 %7, 3
%9 = add i32 %1, -33
%10 = icmp ult i32 %9, 15
%11 = or i1 %8, %10
br i1 %11, label %52, label %15
12: ; preds = %2
%13 = add i32 %1, -33
%14 = icmp ult i32 %13, 15
br i1 %14, label %52, label %15
15: ; preds = %6, %12
switch i32 %1, label %16 [
i32 126, label %52
i32 125, label %52
i32 124, label %52
i32 123, label %52
i32 96, label %52
i32 95, label %52
i32 94, label %52
i32 93, label %52
i32 92, label %52
i32 91, label %52
i32 64, label %52
i32 63, label %52
i32 62, label %52
i32 61, label %52
i32 60, label %52
i32 59, label %52
i32 58, label %52
]
16: ; preds = %15
switch i32 %0, label %41 [
i32 2, label %17
i32 10, label %17
i32 15, label %17
i32 1, label %18
i32 3, label %19
i32 5, label %19
i32 6, label %19
i32 14, label %19
i32 4, label %21
i32 11, label %21
i32 7, label %22
i32 8, label %23
i32 9, label %30
i32 13, label %31
i32 16, label %35
i32 18, label %39
i32 12, label %43
i32 17, label %43
]
17: ; preds = %16, %16, %16
switch i32 %1, label %43 [
i32 173, label %52
i32 161, label %52
i32 171, label %52
i32 183, label %52
i32 187, label %52
i32 191, label %52
]
18: ; preds = %16
switch i32 %1, label %43 [
i32 161, label %52
i32 171, label %52
i32 183, label %52
i32 187, label %52
i32 191, label %52
]
19: ; preds = %16, %16, %16, %16
%20 = icmp eq i32 %1, 173
br i1 %20, label %52, label %43
21: ; preds = %16, %16
switch i32 %1, label %43 [
i32 173, label %52
i32 183, label %52
i32 189, label %52
]
22: ; preds = %16
switch i32 %1, label %43 [
i32 172, label %52
i32 173, label %52
i32 187, label %52
i32 191, label %52
]
23: ; preds = %16
%24 = add i32 %1, -161
%25 = icmp ult i32 %24, 2
br i1 %25, label %52, label %26
26: ; preds = %23
%27 = add i32 %1, -171
%28 = tail call i32 @llvm.fshl.i32(i32 %27, i32 %27, i32 31)
%29 = icmp ult i32 %28, 9
br i1 %29, label %44, label %43
30: ; preds = %16
switch i32 %1, label %43 [
i32 171, label %52
i32 173, label %52
i32 183, label %52
i32 187, label %52
i32 223, label %52
]
31: ; preds = %16
%32 = and i32 %1, -5
%33 = icmp eq i32 %32, 161
br i1 %33, label %52, label %34
34: ; preds = %31
switch i32 %1, label %43 [
i32 173, label %52
i32 171, label %52
i32 183, label %52
i32 180, label %52
i32 187, label %52
i32 255, label %52
]
35: ; preds = %16
%36 = add i32 %1, -165
%37 = tail call i32 @llvm.fshl.i32(i32 %36, i32 %36, i32 31)
%38 = icmp ult i32 %37, 12
br i1 %38, label %48, label %43
39: ; preds = %16
%40 = icmp eq i32 %1, 158
br i1 %40, label %52, label %43
41: ; preds = %16
%42 = tail call i32 @exit(i32 -1)
unreachable
43: ; preds = %35, %26, %34, %30, %22, %21, %17, %18, %16, %16, %39, %19
br label %52
44: ; preds = %26
%45 = sext i32 %28 to i64
%46 = getelementptr inbounds [9 x i32], [9 x i32]* @switch.table.IsPunct, i64 0, i64 %45
%47 = load i32, i32* %46
br label %52
48: ; preds = %35
%49 = sext i32 %37 to i64
%50 = getelementptr inbounds [12 x i32], [12 x i32]* @switch.table.IsPunct.1, i64 0, i64 %49
%51 = load i32, i32* %50
br label %52
52: ; preds = %48, %44, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %15, %34, %34, %34, %34, %34, %34, %39, %31, %30, %30, %30, %30, %30, %23, %22, %22, %22, %22, %21, %21, %21, %19, %18, %17, %17, %17, %17, %17, %17, %18, %18, %18, %18, %12, %6, %5, %5, %5, %5, %5, %5, %43, %3
%53 = phi i32 [ %4, %3 ], [ 0, %43 ], [ 1, %5 ], [ 1, %5 ], [ 1, %5 ], [ 1, %5 ], [ 1, %5 ], [ 1, %5 ], [ 1, %6 ], [ 1, %12 ], [ 1, %15 ], [ 1, %17 ], [ 1, %17 ], [ 1, %18 ], [ 1, %17 ], [ 1, %18 ], [ 1, %17 ], [ 1, %18 ], [ 1, %17 ], [ 1, %18 ], [ 1, %17 ], [ 1, %18 ], [ 1, %19 ], [ 1, %21 ], [ 1, %21 ], [ 1, %21 ], [ 1, %22 ], [ 1, %22 ], [ 1, %22 ], [ 1, %22 ], [ 1, %23 ], [ 1, %30 ], [ 1, %30 ], [ 1, %30 ], [ 1, %30 ], [ 1, %30 ], [ 1, %31 ], [ 1, %34 ], [ 1, %34 ], [ 1, %39 ], [ 1, %34 ], [ 1, %34 ], [ 1, %34 ], [ 1, %34 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ 1, %15 ], [ %47, %44 ], [ %51, %48 ]
ret i32 %53
}