#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 */
typedef int /*<<< orphan*/ PUNCT_MAP;

/* Variables and functions */
scalar_t__ md_unicode_bsearch__(unsigned int, unsigned int const *, int);
int md_is_unicode_punct__(unsigned codepoint) {
  static const unsigned PUNCT_MAP[] = {((0x0021) | 0x40000000),
                                       ((0x0023) | 0x80000000),
                                       ((0x0025) | 0x40000000),
                                       ((0x002a) | 0x80000000),
                                       ((0x002c) | 0x40000000),
                                       ((0x002f) | 0x80000000),
                                       ((0x003a) | 0x40000000),
                                       ((0x003b) | 0x80000000),
                                       ((0x003f) | 0x40000000),
                                       ((0x0040) | 0x80000000),
                                       ((0x005b) | 0x40000000),
                                       ((0x005d) | 0x80000000),
                                       (0x005f),
                                       (0x007b),
                                       (0x007d),
                                       (0x00a1),
                                       (0x00a7),
                                       (0x00ab),
                                       ((0x00b6) | 0x40000000),
                                       ((0x00b7) | 0x80000000),
                                       (0x00bb),
                                       (0x00bf),
                                       (0x037e),
                                       (0x0387),
                                       ((0x055a) | 0x40000000),
                                       ((0x055f) | 0x80000000),
                                       ((0x0589) | 0x40000000),
                                       ((0x058a) | 0x80000000),
                                       (0x05be),
                                       (0x05c0),
                                       (0x05c3),
                                       (0x05c6),
                                       ((0x05f3) | 0x40000000),
                                       ((0x05f4) | 0x80000000),
                                       ((0x0609) | 0x40000000),
                                       ((0x060a) | 0x80000000),
                                       ((0x060c) | 0x40000000),
                                       ((0x060d) | 0x80000000),
                                       (0x061b),
                                       ((0x061e) | 0x40000000),
                                       ((0x061f) | 0x80000000),
                                       ((0x066a) | 0x40000000),
                                       ((0x066d) | 0x80000000),
                                       (0x06d4),
                                       ((0x0700) | 0x40000000),
                                       ((0x070d) | 0x80000000),
                                       ((0x07f7) | 0x40000000),
                                       ((0x07f9) | 0x80000000),
                                       ((0x0830) | 0x40000000),
                                       ((0x083e) | 0x80000000),
                                       (0x085e),
                                       ((0x0964) | 0x40000000),
                                       ((0x0965) | 0x80000000),
                                       (0x0970),
                                       (0x09fd),
                                       (0x0a76),
                                       (0x0af0),
                                       (0x0c77),
                                       (0x0c84),
                                       (0x0df4),
                                       (0x0e4f),
                                       ((0x0e5a) | 0x40000000),
                                       ((0x0e5b) | 0x80000000),
                                       ((0x0f04) | 0x40000000),
                                       ((0x0f12) | 0x80000000),
                                       (0x0f14),
                                       ((0x0f3a) | 0x40000000),
                                       ((0x0f3d) | 0x80000000),
                                       (0x0f85),
                                       ((0x0fd0) | 0x40000000),
                                       ((0x0fd4) | 0x80000000),
                                       ((0x0fd9) | 0x40000000),
                                       ((0x0fda) | 0x80000000),
                                       ((0x104a) | 0x40000000),
                                       ((0x104f) | 0x80000000),
                                       (0x10fb),
                                       ((0x1360) | 0x40000000),
                                       ((0x1368) | 0x80000000),
                                       (0x1400),
                                       (0x166e),
                                       ((0x169b) | 0x40000000),
                                       ((0x169c) | 0x80000000),
                                       ((0x16eb) | 0x40000000),
                                       ((0x16ed) | 0x80000000),
                                       ((0x1735) | 0x40000000),
                                       ((0x1736) | 0x80000000),
                                       ((0x17d4) | 0x40000000),
                                       ((0x17d6) | 0x80000000),
                                       ((0x17d8) | 0x40000000),
                                       ((0x17da) | 0x80000000),
                                       ((0x1800) | 0x40000000),
                                       ((0x180a) | 0x80000000),
                                       ((0x1944) | 0x40000000),
                                       ((0x1945) | 0x80000000),
                                       ((0x1a1e) | 0x40000000),
                                       ((0x1a1f) | 0x80000000),
                                       ((0x1aa0) | 0x40000000),
                                       ((0x1aa6) | 0x80000000),
                                       ((0x1aa8) | 0x40000000),
                                       ((0x1aad) | 0x80000000),
                                       ((0x1b5a) | 0x40000000),
                                       ((0x1b60) | 0x80000000),
                                       ((0x1bfc) | 0x40000000),
                                       ((0x1bff) | 0x80000000),
                                       ((0x1c3b) | 0x40000000),
                                       ((0x1c3f) | 0x80000000),
                                       ((0x1c7e) | 0x40000000),
                                       ((0x1c7f) | 0x80000000),
                                       ((0x1cc0) | 0x40000000),
                                       ((0x1cc7) | 0x80000000),
                                       (0x1cd3),
                                       ((0x2010) | 0x40000000),
                                       ((0x2027) | 0x80000000),
                                       ((0x2030) | 0x40000000),
                                       ((0x2043) | 0x80000000),
                                       ((0x2045) | 0x40000000),
                                       ((0x2051) | 0x80000000),
                                       ((0x2053) | 0x40000000),
                                       ((0x205e) | 0x80000000),
                                       ((0x207d) | 0x40000000),
                                       ((0x207e) | 0x80000000),
                                       ((0x208d) | 0x40000000),
                                       ((0x208e) | 0x80000000),
                                       ((0x2308) | 0x40000000),
                                       ((0x230b) | 0x80000000),
                                       ((0x2329) | 0x40000000),
                                       ((0x232a) | 0x80000000),
                                       ((0x2768) | 0x40000000),
                                       ((0x2775) | 0x80000000),
                                       ((0x27c5) | 0x40000000),
                                       ((0x27c6) | 0x80000000),
                                       ((0x27e6) | 0x40000000),
                                       ((0x27ef) | 0x80000000),
                                       ((0x2983) | 0x40000000),
                                       ((0x2998) | 0x80000000),
                                       ((0x29d8) | 0x40000000),
                                       ((0x29db) | 0x80000000),
                                       ((0x29fc) | 0x40000000),
                                       ((0x29fd) | 0x80000000),
                                       ((0x2cf9) | 0x40000000),
                                       ((0x2cfc) | 0x80000000),
                                       ((0x2cfe) | 0x40000000),
                                       ((0x2cff) | 0x80000000),
                                       (0x2d70),
                                       ((0x2e00) | 0x40000000),
                                       ((0x2e2e) | 0x80000000),
                                       ((0x2e30) | 0x40000000),
                                       ((0x2e4f) | 0x80000000),
                                       ((0x3001) | 0x40000000),
                                       ((0x3003) | 0x80000000),
                                       ((0x3008) | 0x40000000),
                                       ((0x3011) | 0x80000000),
                                       ((0x3014) | 0x40000000),
                                       ((0x301f) | 0x80000000),
                                       (0x3030),
                                       (0x303d),
                                       (0x30a0),
                                       (0x30fb),
                                       ((0xa4fe) | 0x40000000),
                                       ((0xa4ff) | 0x80000000),
                                       ((0xa60d) | 0x40000000),
                                       ((0xa60f) | 0x80000000),
                                       (0xa673),
                                       (0xa67e),
                                       ((0xa6f2) | 0x40000000),
                                       ((0xa6f7) | 0x80000000),
                                       ((0xa874) | 0x40000000),
                                       ((0xa877) | 0x80000000),
                                       ((0xa8ce) | 0x40000000),
                                       ((0xa8cf) | 0x80000000),
                                       ((0xa8f8) | 0x40000000),
                                       ((0xa8fa) | 0x80000000),
                                       (0xa8fc),
                                       ((0xa92e) | 0x40000000),
                                       ((0xa92f) | 0x80000000),
                                       (0xa95f),
                                       ((0xa9c1) | 0x40000000),
                                       ((0xa9cd) | 0x80000000),
                                       ((0xa9de) | 0x40000000),
                                       ((0xa9df) | 0x80000000),
                                       ((0xaa5c) | 0x40000000),
                                       ((0xaa5f) | 0x80000000),
                                       ((0xaade) | 0x40000000),
                                       ((0xaadf) | 0x80000000),
                                       ((0xaaf0) | 0x40000000),
                                       ((0xaaf1) | 0x80000000),
                                       (0xabeb),
                                       ((0xfd3e) | 0x40000000),
                                       ((0xfd3f) | 0x80000000),
                                       ((0xfe10) | 0x40000000),
                                       ((0xfe19) | 0x80000000),
                                       ((0xfe30) | 0x40000000),
                                       ((0xfe52) | 0x80000000),
                                       ((0xfe54) | 0x40000000),
                                       ((0xfe61) | 0x80000000),
                                       (0xfe63),
                                       (0xfe68),
                                       ((0xfe6a) | 0x40000000),
                                       ((0xfe6b) | 0x80000000),
                                       ((0xff01) | 0x40000000),
                                       ((0xff03) | 0x80000000),
                                       ((0xff05) | 0x40000000),
                                       ((0xff0a) | 0x80000000),
                                       ((0xff0c) | 0x40000000),
                                       ((0xff0f) | 0x80000000),
                                       ((0xff1a) | 0x40000000),
                                       ((0xff1b) | 0x80000000),
                                       ((0xff1f) | 0x40000000),
                                       ((0xff20) | 0x80000000),
                                       ((0xff3b) | 0x40000000),
                                       ((0xff3d) | 0x80000000),
                                       (0xff3f),
                                       (0xff5b),
                                       (0xff5d),
                                       ((0xff5f) | 0x40000000),
                                       ((0xff65) | 0x80000000),
                                       ((0x10100) | 0x40000000),
                                       ((0x10102) | 0x80000000),
                                       (0x1039f),
                                       (0x103d0),
                                       (0x1056f),
                                       (0x10857),
                                       (0x1091f),
                                       (0x1093f),
                                       ((0x10a50) | 0x40000000),
                                       ((0x10a58) | 0x80000000),
                                       (0x10a7f),
                                       ((0x10af0) | 0x40000000),
                                       ((0x10af6) | 0x80000000),
                                       ((0x10b39) | 0x40000000),
                                       ((0x10b3f) | 0x80000000),
                                       ((0x10b99) | 0x40000000),
                                       ((0x10b9c) | 0x80000000),
                                       ((0x10f55) | 0x40000000),
                                       ((0x10f59) | 0x80000000),
                                       ((0x11047) | 0x40000000),
                                       ((0x1104d) | 0x80000000),
                                       ((0x110bb) | 0x40000000),
                                       ((0x110bc) | 0x80000000),
                                       ((0x110be) | 0x40000000),
                                       ((0x110c1) | 0x80000000),
                                       ((0x11140) | 0x40000000),
                                       ((0x11143) | 0x80000000),
                                       ((0x11174) | 0x40000000),
                                       ((0x11175) | 0x80000000),
                                       ((0x111c5) | 0x40000000),
                                       ((0x111c8) | 0x80000000),
                                       (0x111cd),
                                       (0x111db),
                                       ((0x111dd) | 0x40000000),
                                       ((0x111df) | 0x80000000),
                                       ((0x11238) | 0x40000000),
                                       ((0x1123d) | 0x80000000),
                                       (0x112a9),
                                       ((0x1144b) | 0x40000000),
                                       ((0x1144f) | 0x80000000),
                                       (0x1145b),
                                       (0x1145d),
                                       (0x114c6),
                                       ((0x115c1) | 0x40000000),
                                       ((0x115d7) | 0x80000000),
                                       ((0x11641) | 0x40000000),
                                       ((0x11643) | 0x80000000),
                                       ((0x11660) | 0x40000000),
                                       ((0x1166c) | 0x80000000),
                                       ((0x1173c) | 0x40000000),
                                       ((0x1173e) | 0x80000000),
                                       (0x1183b),
                                       (0x119e2),
                                       ((0x11a3f) | 0x40000000),
                                       ((0x11a46) | 0x80000000),
                                       ((0x11a9a) | 0x40000000),
                                       ((0x11a9c) | 0x80000000),
                                       ((0x11a9e) | 0x40000000),
                                       ((0x11aa2) | 0x80000000),
                                       ((0x11c41) | 0x40000000),
                                       ((0x11c45) | 0x80000000),
                                       ((0x11c70) | 0x40000000),
                                       ((0x11c71) | 0x80000000),
                                       ((0x11ef7) | 0x40000000),
                                       ((0x11ef8) | 0x80000000),
                                       (0x11fff),
                                       ((0x12470) | 0x40000000),
                                       ((0x12474) | 0x80000000),
                                       ((0x16a6e) | 0x40000000),
                                       ((0x16a6f) | 0x80000000),
                                       (0x16af5),
                                       ((0x16b37) | 0x40000000),
                                       ((0x16b3b) | 0x80000000),
                                       (0x16b44),
                                       ((0x16e97) | 0x40000000),
                                       ((0x16e9a) | 0x80000000),
                                       (0x16fe2),
                                       (0x1bc9f),
                                       ((0x1da87) | 0x40000000),
                                       ((0x1da8b) | 0x80000000),
                                       ((0x1e95e) | 0x40000000),
                                       ((0x1e95f) | 0x80000000)};
  if (codepoint <= 0x7f)
    return (((33) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (47)) ||
            ((58) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (64)) ||
            ((91) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (96)) ||
            ((123) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (126)));
  return (md_unicode_bsearch__(codepoint, PUNCT_MAP,
                               (sizeof(PUNCT_MAP) / sizeof(PUNCT_MAP[0]))) >=
          0);
}


x86 assembly (clang, -O0):
<md_is_unicode_punct__>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x8(%rbp)
cmpl   $0x7f,-0x8(%rbp)
ja     11af <md_is_unicode_punct__+0x9f>
mov    $0x21,%eax
cmp    -0x8(%rbp),%eax
ja     1142 <md_is_unicode_punct__+0x32>
mov    $0x1,%al
cmpl   $0x2f,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jbe    119f <md_is_unicode_punct__+0x8f>
mov    $0x3a,%eax
cmp    -0x8(%rbp),%eax
ja     115f <md_is_unicode_punct__+0x4f>
mov    $0x1,%al
cmpl   $0x40,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jbe    119f <md_is_unicode_punct__+0x8f>
mov    $0x5b,%eax
cmp    -0x8(%rbp),%eax
ja     117c <md_is_unicode_punct__+0x6c>
mov    $0x1,%al
cmpl   $0x60,-0x8(%rbp)
mov    %al,-0x9(%rbp)
jbe    119f <md_is_unicode_punct__+0x8f>
xor    %eax,%eax
mov    $0x7b,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0xa(%rbp)
ja     1199 <md_is_unicode_punct__+0x89>
cmpl   $0x7e,-0x8(%rbp)
setbe  %al
mov    %al,-0xa(%rbp)
mov    -0xa(%rbp),%al
mov    %al,-0x9(%rbp)
mov    -0x9(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    11d2 <md_is_unicode_punct__+0xc2>
mov    -0x8(%rbp),%edi
lea    0xe47(%rip),%rsi
mov    $0x12a,%edx
call   1030 <md_unicode_bsearch__@plt>
cmp    $0x0,%rax
setge  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<md_is_unicode_punct__>:
push   %rax
cmp    $0x7f,%edi
ja     1147 <md_is_unicode_punct__+0x37>
movd   %edi,%xmm0
pshufd $0x0,%xmm0,%xmm0
paddd  0xed9(%rip),%xmm0
pxor   0xee1(%rip),%xmm0
movdqa 0xee9(%rip),%xmm1
pcmpgtd %xmm0,%xmm1
movmskps %xmm1,%ecx
xor    %eax,%eax
test   %ecx,%ecx
setne  %al
pop    %rcx
ret
lea    0xee2(%rip),%rsi
mov    $0x12a,%edx
call   1030 <md_unicode_bsearch__@plt>
shr    $0x3f,%rax
xor    $0x1,%eax
pop    %rcx
ret

LLVM IR (-O0):
@md_is_unicode_punct__.PUNCT_MAP = internal constant [298 x i32] [i32 1073741857, i32 -2147483613, i32 1073741861, i32 -2147483606, i32 1073741868, i32 -2147483601, i32 1073741882, i32 -2147483589, i32 1073741887, i32 -2147483584, i32 1073741915, i32 -2147483555, i32 95, i32 123, i32 125, i32 161, i32 167, i32 171, i32 1073742006, i32 -2147483465, i32 187, i32 191, i32 894, i32 903, i32 1073743194, i32 -2147482273, i32 1073743241, i32 -2147482230, i32 1470, i32 1472, i32 1475, i32 1478, i32 1073743347, i32 -2147482124, i32 1073743369, i32 -2147482102, i32 1073743372, i32 -2147482099, i32 1563, i32 1073743390, i32 -2147482081, i32 1073743466, i32 -2147482003, i32 1748, i32 1073743616, i32 -2147481843, i32 1073743863, i32 -2147481607, i32 1073743920, i32 -2147481538, i32 2142, i32 1073744228, i32 -2147481243, i32 2416, i32 2557, i32 2678, i32 2800, i32 3191, i32 3204, i32 3572, i32 3663, i32 1073745498, i32 -2147479973, i32 1073745668, i32 -2147479790, i32 3860, i32 1073745722, i32 -2147479747, i32 3973, i32 1073745872, i32 -2147479596, i32 1073745881, i32 -2147479590, i32 1073745994, i32 -2147479473, i32 4347, i32 1073746784, i32 -2147478680, i32 5120, i32 5742, i32 1073747611, i32 -2147477860, i32 1073747691, i32 -2147477779, i32 1073747765, i32 -2147477706, i32 1073747924, i32 -2147477546, i32 1073747928, i32 -2147477542, i32 1073747968, i32 -2147477494, i32 1073748292, i32 -2147477179, i32 1073748510, i32 -2147476961, i32 1073748640, i32 -2147476826, i32 1073748648, i32 -2147476819, i32 1073748826, i32 -2147476640, i32 1073748988, i32 -2147476481, i32 1073749051, i32 -2147476417, i32 1073749118, i32 -2147476353, i32 1073749184, i32 -2147476281, i32 7379, i32 1073750032, i32 -2147475417, i32 1073750064, i32 -2147475389, i32 1073750085, i32 -2147475375, i32 1073750099, i32 -2147475362, i32 1073750141, i32 -2147475330, i32 1073750157, i32 -2147475314, i32 1073750792, i32 -2147474677, i32 1073750825, i32 -2147474646, i32 1073751912, i32 -2147473547, i32 1073752005, i32 -2147473466, i32 1073752038, i32 -2147473425, i32 1073752451, i32 -2147473000, i32 1073752536, i32 -2147472933, i32 1073752572, i32 -2147472899, i32 1073753337, i32 -2147472132, i32 1073753342, i32 -2147472129, i32 11632, i32 1073753600, i32 -2147471826, i32 1073753648, i32 -2147471793, i32 1073754113, i32 -2147471357, i32 1073754120, i32 -2147471343, i32 1073754132, i32 -2147471329, i32 12336, i32 12349, i32 12448, i32 12539, i32 1073784062, i32 -2147441409, i32 1073784333, i32 -2147441137, i32 42611, i32 42622, i32 1073784562, i32 -2147440905, i32 1073784948, i32 -2147440521, i32 1073785038, i32 -2147440433, i32 1073785080, i32 -2147440390, i32 43260, i32 1073785134, i32 -2147440337, i32 43359, i32 1073785281, i32 -2147440179, i32 1073785310, i32 -2147440161, i32 1073785436, i32 -2147440033, i32 1073785566, i32 -2147439905, i32 1073785584, i32 -2147439887, i32 44011, i32 1073806654, i32 -2147418817, i32 1073806864, i32 -2147418599, i32 1073806896, i32 -2147418542, i32 1073806932, i32 -2147418527, i32 65123, i32 65128, i32 1073806954, i32 -2147418517, i32 1073807105, i32 -2147418365, i32 1073807109, i32 -2147418358, i32 1073807116, i32 -2147418353, i32 1073807130, i32 -2147418341, i32 1073807135, i32 -2147418336, i32 1073807163, i32 -2147418307, i32 65343, i32 65371, i32 65373, i32 1073807199, i32 -2147418267, i32 1073807616, i32 -2147417854, i32 66463, i32 66512, i32 66927, i32 67671, i32 67871, i32 67903, i32 1073810000, i32 -2147415464, i32 68223, i32 1073810160, i32 -2147415306, i32 1073810233, i32 -2147415233, i32 1073810329, i32 -2147415140, i32 1073811285, i32 -2147414183, i32 1073811527, i32 -2147413939, i32 1073811643, i32 -2147413828, i32 1073811646, i32 -2147413823, i32 1073811776, i32 -2147413693, i32 1073811828, i32 -2147413643, i32 1073811909, i32 -2147413560, i32 70093, i32 70107, i32 1073811933, i32 -2147413537, i32 1073812024, i32 -2147413443, i32 70313, i32 1073812555, i32 -2147412913, i32 70747, i32 70749, i32 70854, i32 1073812929, i32 -2147412521, i32 1073813057, i32 -2147412413, i32 1073813088, i32 -2147412372, i32 1073813308, i32 -2147412162, i32 71739, i32 72162, i32 1073814079, i32 -2147411386, i32 1073814170, i32 -2147411300, i32 1073814174, i32 -2147411294, i32 1073814593, i32 -2147410875, i32 1073814640, i32 -2147410831, i32 1073815287, i32 -2147410184, i32 73727, i32 1073816688, i32 -2147408780, i32 1073834606, i32 -2147390865, i32 92917, i32 1073834807, i32 -2147390661, i32 92996, i32 1073835671, i32 -2147389798, i32 94178, i32 113823, i32 1073863303, i32 -2147362165, i32 1073867102, i32 -2147358369]
define i32 @md_is_unicode_punct__(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
%5 = icmp ule i32 %4, 127
br i1 %5, label %6, label %35
6: ; preds = %1
%7 = load i32, i32* %3
%8 = icmp ule i32 33, %7
br i1 %8, label %9, label %12
9: ; preds = %6
%10 = load i32, i32* %3
%11 = icmp ule i32 %10, 47
br i1 %11, label %32, label %12
12: ; preds = %9, %6
%13 = load i32, i32* %3
%14 = icmp ule i32 58, %13
br i1 %14, label %15, label %18
15: ; preds = %12
%16 = load i32, i32* %3
%17 = icmp ule i32 %16, 64
br i1 %17, label %32, label %18
18: ; preds = %15, %12
%19 = load i32, i32* %3
%20 = icmp ule i32 91, %19
br i1 %20, label %21, label %24
21: ; preds = %18
%22 = load i32, i32* %3
%23 = icmp ule i32 %22, 96
br i1 %23, label %32, label %24
24: ; preds = %21, %18
%25 = load i32, i32* %3
%26 = icmp ule i32 123, %25
br i1 %26, label %27, label %30
27: ; preds = %24
%28 = load i32, i32* %3
%29 = icmp ule i32 %28, 126
br label %30
30: ; preds = %27, %24
%31 = phi i1 [ false, %24 ], [ %29, %27 ]
br label %32
32: ; preds = %30, %21, %15, %9
%33 = phi i1 [ true, %21 ], [ true, %15 ], [ true, %9 ], [ %31, %30 ]
%34 = zext i1 %33 to i32
store i32 %34, i32* %2
br label %40
35: ; preds = %1
%36 = load i32, i32* %3
%37 = call i64 @md_unicode_bsearch__(i32 %36, i32* getelementptr inbounds ([298 x i32], [298 x i32]* @md_is_unicode_punct__.PUNCT_MAP, i64 0, i64 0), i32 298)
%38 = icmp sge i64 %37, 0
%39 = zext i1 %38 to i32
store i32 %39, i32* %2
br label %40
40: ; preds = %35, %32
%41 = load i32, i32* %2
ret i32 %41
}

LLVM IR (-O2):
@md_is_unicode_punct__.PUNCT_MAP = internal constant [298 x i32] [i32 1073741857, i32 -2147483613, i32 1073741861, i32 -2147483606, i32 1073741868, i32 -2147483601, i32 1073741882, i32 -2147483589, i32 1073741887, i32 -2147483584, i32 1073741915, i32 -2147483555, i32 95, i32 123, i32 125, i32 161, i32 167, i32 171, i32 1073742006, i32 -2147483465, i32 187, i32 191, i32 894, i32 903, i32 1073743194, i32 -2147482273, i32 1073743241, i32 -2147482230, i32 1470, i32 1472, i32 1475, i32 1478, i32 1073743347, i32 -2147482124, i32 1073743369, i32 -2147482102, i32 1073743372, i32 -2147482099, i32 1563, i32 1073743390, i32 -2147482081, i32 1073743466, i32 -2147482003, i32 1748, i32 1073743616, i32 -2147481843, i32 1073743863, i32 -2147481607, i32 1073743920, i32 -2147481538, i32 2142, i32 1073744228, i32 -2147481243, i32 2416, i32 2557, i32 2678, i32 2800, i32 3191, i32 3204, i32 3572, i32 3663, i32 1073745498, i32 -2147479973, i32 1073745668, i32 -2147479790, i32 3860, i32 1073745722, i32 -2147479747, i32 3973, i32 1073745872, i32 -2147479596, i32 1073745881, i32 -2147479590, i32 1073745994, i32 -2147479473, i32 4347, i32 1073746784, i32 -2147478680, i32 5120, i32 5742, i32 1073747611, i32 -2147477860, i32 1073747691, i32 -2147477779, i32 1073747765, i32 -2147477706, i32 1073747924, i32 -2147477546, i32 1073747928, i32 -2147477542, i32 1073747968, i32 -2147477494, i32 1073748292, i32 -2147477179, i32 1073748510, i32 -2147476961, i32 1073748640, i32 -2147476826, i32 1073748648, i32 -2147476819, i32 1073748826, i32 -2147476640, i32 1073748988, i32 -2147476481, i32 1073749051, i32 -2147476417, i32 1073749118, i32 -2147476353, i32 1073749184, i32 -2147476281, i32 7379, i32 1073750032, i32 -2147475417, i32 1073750064, i32 -2147475389, i32 1073750085, i32 -2147475375, i32 1073750099, i32 -2147475362, i32 1073750141, i32 -2147475330, i32 1073750157, i32 -2147475314, i32 1073750792, i32 -2147474677, i32 1073750825, i32 -2147474646, i32 1073751912, i32 -2147473547, i32 1073752005, i32 -2147473466, i32 1073752038, i32 -2147473425, i32 1073752451, i32 -2147473000, i32 1073752536, i32 -2147472933, i32 1073752572, i32 -2147472899, i32 1073753337, i32 -2147472132, i32 1073753342, i32 -2147472129, i32 11632, i32 1073753600, i32 -2147471826, i32 1073753648, i32 -2147471793, i32 1073754113, i32 -2147471357, i32 1073754120, i32 -2147471343, i32 1073754132, i32 -2147471329, i32 12336, i32 12349, i32 12448, i32 12539, i32 1073784062, i32 -2147441409, i32 1073784333, i32 -2147441137, i32 42611, i32 42622, i32 1073784562, i32 -2147440905, i32 1073784948, i32 -2147440521, i32 1073785038, i32 -2147440433, i32 1073785080, i32 -2147440390, i32 43260, i32 1073785134, i32 -2147440337, i32 43359, i32 1073785281, i32 -2147440179, i32 1073785310, i32 -2147440161, i32 1073785436, i32 -2147440033, i32 1073785566, i32 -2147439905, i32 1073785584, i32 -2147439887, i32 44011, i32 1073806654, i32 -2147418817, i32 1073806864, i32 -2147418599, i32 1073806896, i32 -2147418542, i32 1073806932, i32 -2147418527, i32 65123, i32 65128, i32 1073806954, i32 -2147418517, i32 1073807105, i32 -2147418365, i32 1073807109, i32 -2147418358, i32 1073807116, i32 -2147418353, i32 1073807130, i32 -2147418341, i32 1073807135, i32 -2147418336, i32 1073807163, i32 -2147418307, i32 65343, i32 65371, i32 65373, i32 1073807199, i32 -2147418267, i32 1073807616, i32 -2147417854, i32 66463, i32 66512, i32 66927, i32 67671, i32 67871, i32 67903, i32 1073810000, i32 -2147415464, i32 68223, i32 1073810160, i32 -2147415306, i32 1073810233, i32 -2147415233, i32 1073810329, i32 -2147415140, i32 1073811285, i32 -2147414183, i32 1073811527, i32 -2147413939, i32 1073811643, i32 -2147413828, i32 1073811646, i32 -2147413823, i32 1073811776, i32 -2147413693, i32 1073811828, i32 -2147413643, i32 1073811909, i32 -2147413560, i32 70093, i32 70107, i32 1073811933, i32 -2147413537, i32 1073812024, i32 -2147413443, i32 70313, i32 1073812555, i32 -2147412913, i32 70747, i32 70749, i32 70854, i32 1073812929, i32 -2147412521, i32 1073813057, i32 -2147412413, i32 1073813088, i32 -2147412372, i32 1073813308, i32 -2147412162, i32 71739, i32 72162, i32 1073814079, i32 -2147411386, i32 1073814170, i32 -2147411300, i32 1073814174, i32 -2147411294, i32 1073814593, i32 -2147410875, i32 1073814640, i32 -2147410831, i32 1073815287, i32 -2147410184, i32 73727, i32 1073816688, i32 -2147408780, i32 1073834606, i32 -2147390865, i32 92917, i32 1073834807, i32 -2147390661, i32 92996, i32 1073835671, i32 -2147389798, i32 94178, i32 113823, i32 1073863303, i32 -2147362165, i32 1073867102, i32 -2147358369]
define i32 @md_is_unicode_punct__(i32 %0) {
%2 = icmp ult i32 %0, 128
br i1 %2, label %3, label %12
3: ; preds = %1
%4 = insertelement <4 x i32> poison, i32 %0, i64 0
%5 = shufflevector <4 x i32> %4, <4 x i32> poison, <4 x i32> zeroinitializer
%6 = freeze <4 x i32> %5
%7 = add <4 x i32> %6, <i32 -91, i32 -33, i32 -58, i32 -123>
%8 = icmp ult <4 x i32> %7, <i32 6, i32 15, i32 7, i32 4>
%9 = bitcast <4 x i1> %8 to i4
%10 = icmp ne i4 %9, 0
%11 = zext i1 %10 to i32
br label %17
12: ; preds = %1
%13 = tail call i64 @md_unicode_bsearch__(i32 %0, i32* getelementptr inbounds ([298 x i32], [298 x i32]* @md_is_unicode_punct__.PUNCT_MAP, i64 0, i64 0), i32 298)
%14 = lshr i64 %13, 63
%15 = trunc i64 %14 to i32
%16 = xor i32 %15, 1
br label %17
17: ; preds = %12, %3
%18 = phi i32 [ %11, %3 ], [ %16, %12 ]
ret i32 %18
}