#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 */
scalar_t__ isprint(int);
unsigned char *pcre_maketables();
int /*<<< orphan*/ printf(char *, ...);
int main(void) {
  int i;
  const unsigned char *tables = pcre_maketables();
  printf("/*************************************************\n"
         "*      Perl-Compatible Regular Expressions       *\n"
         "*************************************************/\n\n"
         "/* This file is automatically written by the dftables auxiliary \n"
         "program. If you edit it by hand, you might like to edit the Makefile "
         "to \n"
         "prevent its ever being regenerated.\n\n");
  printf("This file is #included in the compilation of pcre.c to build the "
         "default\n"
         "character tables which are used when no tables are passed to the "
         "compile\n"
         "function. */\n\n"
         "/* If we're not using GNU C, elide __attribute__ */\n"
         "#ifndef __GNUC__\n"
         "#define __attribute__( x )  /* NOTHING */\n"
         "#endif /* __GNUC__ */\n"
         "static unsigned char pcre_default_tables[]  "
         "__attribute__((__unused__)) = {\n\n"
         "/* This table is a lower casing table. */\n\n");
  printf("  ");
  for (i = 0; i < 256; i++) {
    if ((i & 7) == 0 && i != 0)
      printf("\n  ");
    printf("%3d", *tables++);
    if (i != 255)
      printf(",");
  }
  printf(",\n\n");
  printf("/* This table is a case flipping table. */\n\n");
  printf("  ");
  for (i = 0; i < 256; i++) {
    if ((i & 7) == 0 && i != 0)
      printf("\n  ");
    printf("%3d", *tables++);
    if (i != 255)
      printf(",");
  }
  printf(",\n\n");
  printf("/* This table contains bit maps for various character classes.\n"
         "Each map is 32 bytes long and the bits run from the least\n"
         "significant end of each byte. The classes that have their own\n"
         "maps are: space, xdigit, digit, upper, lower, word, graph\n"
         "print, punct, and cntrl. Other classes are built from combinations. "
         "*/\n\n");
  printf("  ");
  for (i = 0; i < 320; i++) {
    if ((i & 7) == 0 && i != 0) {
      if ((i & 31) == 0)
        printf("\n");
      printf("\n  ");
    }
    printf("0x%02x", *tables++);
    if (i != 320 - 1)
      printf(",");
  }
  printf(",\n\n");
  printf("/* This table identifies various classes of character by individual "
         "bits:\n"
         "  0x%02x   white space character\n"
         "  0x%02x   letter\n"
         "  0x%02x   decimal digit\n"
         "  0x%02x   hexadecimal digit\n"
         "  0x%02x   alphanumeric or '_'\n"
         "  0x%02x   regular expression metacharacter or binary zero\n*/\n\n",
         0x01, 0x02, 0x04, 0x08, 0x10, 0x80);
  printf("  ");
  for (i = 0; i < 256; i++) {
    if ((i & 7) == 0 && i != 0) {
      printf(" /* ");
      if (isprint(i - 8))
        printf(" %c -", i - 8);
      else
        printf("%3d-", i - 8);
      if (isprint(i - 1))
        printf(" %c ", i - 1);
      else
        printf("%3d", i - 1);
      printf(" */\n  ");
    }
    printf("0x%02x", *tables++);
    if (i != 255)
      printf(",");
  }
  printf("};/* ");
  if (isprint(i - 8))
    printf(" %c -", i - 8);
  else
    printf("%3d-", i - 8);
  if (isprint(i - 1))
    printf(" %c ", i - 1);
  else
    printf("%3d", i - 1);
  printf(" */\n\n/* End of chartables.c */\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x0,%al
call   1030 <pcre_maketables@plt>
mov    %rax,-0x10(%rbp)
lea    0xeaf(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xfeb(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x141e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    11fd <main+0xcd>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    11af <main+0x7f>
cmpl   $0x0,-0x8(%rbp)
je     11af <main+0x7f>
lea    0x13e2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%esi
lea    0x1120(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0xff,-0x8(%rbp)
je     11ea <main+0xba>
lea    0x1109(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    11ef <main+0xbf>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    117b <main+0x4b>
lea    0x10ea(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x10e0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x136b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    12b0 <main+0x180>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    1262 <main+0x132>
cmpl   $0x0,-0x8(%rbp)
je     1262 <main+0x132>
lea    0x132f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%esi
lea    0x106d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0xff,-0x8(%rbp)
je     129d <main+0x16d>
lea    0x1056(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    12a2 <main+0x172>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    122e <main+0xfe>
lea    0x1037(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x105a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x12b8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x140,-0x8(%rbp)
jge    1380 <main+0x250>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    1332 <main+0x202>
cmpl   $0x0,-0x8(%rbp)
je     1332 <main+0x202>
mov    -0x8(%rbp),%eax
and    $0x1f,%eax
cmp    $0x0,%eax
jne    1324 <main+0x1f4>
lea    0xfd3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x125f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%esi
lea    0x110e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0x13f,-0x8(%rbp)
je     136d <main+0x23d>
lea    0xf86(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1372 <main+0x242>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12e1 <main+0x1b1>
lea    0xf67(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x10cb(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x4,%ecx
mov    $0x8,%r8d
mov    $0x10,%r9d
movl   $0x80,(%rsp)
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x11c6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    14e7 <main+0x3b7>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    1499 <main+0x369>
cmpl   $0x0,-0x8(%rbp)
je     1499 <main+0x369>
lea    0x1172(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x8,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     1435 <main+0x305>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0x114e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1449 <main+0x319>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0x113b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x1,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     1477 <main+0x347>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0x1117(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    148b <main+0x35b>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0xe64(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x10f5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%esi
lea    0xfa7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0xff,-0x8(%rbp)
je     14d4 <main+0x3a4>
lea    0xe1f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    14d9 <main+0x3a9>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13d3 <main+0x2a3>
lea    0x10a0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x8,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     1523 <main+0x3f3>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0x1060(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1537 <main+0x407>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0x104d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x1,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     1565 <main+0x435>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0x1029(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1579 <main+0x449>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0xd76(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1014(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %eax,%eax
call   1050 <pcre_maketables@plt>
mov    %rax,%rbx
lea    0xfd3(%rip),%rdi
call   1040 <puts@plt>
lea    0x1110(%rip),%rdi
call   1040 <puts@plt>
lea    0xfb2(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x3,%rbx
lea    0xf9f(%rip),%r14
lea    0xe63(%rip),%r15
xor    %ebp,%ebp
test   %ebp,%ebp
je     11c1 <main+0x71>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %ebp,%eax
and    $0x7,%eax
jne    11c1 <main+0x71>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl -0x3(%rbx),%esi
mov    %r15,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
cmp    $0xff,%ebp
je     11ee <main+0x9e>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%ebp
add    $0x1,%rbx
test   %ebp,%ebp
jne    11b0 <main+0x60>
jmp    11c1 <main+0x71>
lea    0x1395(%rip),%rdi
call   1040 <puts@plt>
lea    0x1224(%rip),%rdi
call   1040 <puts@plt>
lea    0xf29(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xf1a(%rip),%r14
lea    0xdde(%rip),%r15
xor    %ebp,%ebp
test   %ebp,%ebp
je     1241 <main+0xf1>
nopl   0x0(%rax,%rax,1)
mov    %ebp,%eax
and    $0x7,%eax
jne    1241 <main+0xf1>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl -0x2(%rbx,%rbp,1),%esi
mov    %r15,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
cmp    $0xff,%ebp
je     126c <main+0x11c>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
test   %ebp,%ebp
jne    1230 <main+0xe0>
jmp    1241 <main+0xf1>
lea    0x1317(%rip),%rdi
call   1040 <puts@plt>
lea    0x11d2(%rip),%rdi
call   1040 <puts@plt>
lea    0xeab(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
add    %rbp,%rbx
lea    0xe99(%rip),%r15
lea    0xd61(%rip),%r14
xor    %ebp,%ebp
test   %ebp,%ebp
je     12d1 <main+0x181>
nopl   0x0(%rax)
mov    %ebp,%eax
and    $0x7,%eax
jne    12d1 <main+0x181>
test   $0x1f,%bpl
jne    12c7 <main+0x177>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl -0x1(%rbx),%esi
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
cmp    $0x13f,%ebp
je     12fe <main+0x1ae>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%ebp
add    $0x1,%rbx
test   %ebp,%ebp
jne    12b0 <main+0x160>
jmp    12d1 <main+0x181>
lea    0x1285(%rip),%rdi
call   1040 <puts@plt>
movl   $0x80,(%rsp)
lea    0xcf3(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x4,%ecx
mov    $0x8,%r8d
mov    $0x10,%r9d
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xdf5(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xdd3(%rip),%r12
lea    0xdd7(%rip),%r15
lea    0xca7(%rip),%r13
xor    %r14d,%r14d
test   %r14d,%r14d
je     13de <main+0x28e>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %r14d,%eax
and    $0x7,%eax
jne    13de <main+0x28e>
lea    0xd9e(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    -0x8(%r14),%ebp
mov    %ebp,%edi
call   1070 <isprint@plt>
test   %rax,%rax
mov    %r12,%rdi
lea    0xd8a(%rip),%rax
cmove  %rax,%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    -0x1(%r14),%ebp
mov    %ebp,%edi
call   1070 <isprint@plt>
test   %rax,%rax
mov    %r15,%rdi
lea    0xc3d(%rip),%rax
cmove  %rax,%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xd5b(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl (%rbx),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
cmp    $0xff,%r14d
je     1411 <main+0x2c1>
add    $0x1,%rbx
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%r14d
test   %r14d,%r14d
jne    1370 <main+0x220>
jmp    13de <main+0x28e>
lea    0xd21(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xf8,%edi
call   1070 <isprint@plt>
test   %rax,%rax
lea    0xcf5(%rip),%rax
cmove  %rax,%r12
mov    %r12,%rdi
mov    $0xf8,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xff,%edi
call   1070 <isprint@plt>
test   %rax,%rax
lea    0xba6(%rip),%rax
cmove  %rax,%r15
mov    %r15,%rdi
mov    $0xff,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x1119(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [330 x i8] c"/*************************************************\0A* Perl-Compatible Regular Expressions *\0A*************************************************/\0A\0A/* This file is automatically written by the dftables auxiliary \0Aprogram. If you edit it by hand, you might like to edit the Makefile to \0Aprevent its ever being regenerated.\0A\0A\00"
@.str.1 = [414 x i8] c"This file is #included in the compilation of pcre.c to build the default\0Acharacter tables which are used when no tables are passed to the compile\0Afunction. */\0A\0A/* If we're not using GNU C, elide __attribute__ */\0A#ifndef __GNUC__\0A#define __attribute__( x ) /* NOTHING */\0A#endif /* __GNUC__ */\0Astatic unsigned char pcre_default_tables[] __attribute__((__unused__)) = {\0A\0A/* This table is a lower casing table. */\0A\0A\00"
@.str.2 = [3 x i8] c" \00"
@.str.3 = [4 x i8] c"\0A \00"
@.str.4 = [4 x i8] c"%3d\00"
@.str.5 = [2 x i8] c",\00"
@.str.6 = [4 x i8] c",\0A\0A\00"
@.str.7 = [45 x i8] c"/* This table is a case flipping table. */\0A\0A\00"
@.str.8 = [314 x i8] c"/* This table contains bit maps for various character classes.\0AEach map is 32 bytes long and the bits run from the least\0Asignificant end of each byte. The classes that have their own\0Amaps are: space, xdigit, digit, upper, lower, word, graph\0Aprint, punct, and cntrl. Other classes are built from combinations. */\0A\0A\00"
@.str.9 = [2 x i8] c"\0A\00"
@.str.10 = [7 x i8] c"0x%02x\00"
@.str.11 = [274 x i8] c"/* This table identifies various classes of character by individual bits:\0A 0x%02x white space character\0A 0x%02x letter\0A 0x%02x decimal digit\0A 0x%02x hexadecimal digit\0A 0x%02x alphanumeric or '_'\0A 0x%02x regular expression metacharacter or binary zero\0A*/\0A\0A\00"
@.str.12 = [5 x i8] c" /* \00"
@.str.13 = [6 x i8] c" %c -\00"
@.str.14 = [5 x i8] c"%3d-\00"
@.str.15 = [5 x i8] c" %c \00"
@.str.16 = [7 x i8] c" */\0A \00"
@.str.17 = [6 x i8] c"};/* \00"
@.str.18 = [32 x i8] c" */\0A\0A/* End of chartables.c */\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i8*
store i32 0, i32* %1
%4 = call i8* (...) @pcre_maketables()
store i8* %4, i8** %3
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([330 x i8], [330 x i8]* @.str, i64 0, i64 0))
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([414 x i8], [414 x i8]* @.str.1, i64 0, i64 0))
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
store i32 0, i32* %2
br label %8
8: ; preds = %31, %0
%9 = load i32, i32* %2
%10 = icmp slt i32 %9, 256
br i1 %10, label %11, label %34
11: ; preds = %8
%12 = load i32, i32* %2
%13 = and i32 %12, 7
%14 = icmp eq i32 %13, 0
br i1 %14, label %15, label %20
15: ; preds = %11
%16 = load i32, i32* %2
%17 = icmp ne i32 %16, 0
br i1 %17, label %18, label %20
18: ; preds = %15
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %20
20: ; preds = %18, %15, %11
%21 = load i8*, i8** %3
%22 = getelementptr inbounds i8, i8* %21, i32 1
store i8* %22, i8** %3
%23 = load i8, i8* %21
%24 = zext i8 %23 to i32
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %24)
%26 = load i32, i32* %2
%27 = icmp ne i32 %26, 255
br i1 %27, label %28, label %30
28: ; preds = %20
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
br label %30
30: ; preds = %28, %20
br label %31
31: ; preds = %30
%32 = load i32, i32* %2
%33 = add nsw i32 %32, 1
store i32 %33, i32* %2
br label %8
34: ; preds = %8
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.7, i64 0, i64 0))
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
store i32 0, i32* %2
br label %38
38: ; preds = %61, %34
%39 = load i32, i32* %2
%40 = icmp slt i32 %39, 256
br i1 %40, label %41, label %64
41: ; preds = %38
%42 = load i32, i32* %2
%43 = and i32 %42, 7
%44 = icmp eq i32 %43, 0
br i1 %44, label %45, label %50
45: ; preds = %41
%46 = load i32, i32* %2
%47 = icmp ne i32 %46, 0
br i1 %47, label %48, label %50
48: ; preds = %45
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %50
50: ; preds = %48, %45, %41
%51 = load i8*, i8** %3
%52 = getelementptr inbounds i8, i8* %51, i32 1
store i8* %52, i8** %3
%53 = load i8, i8* %51
%54 = zext i8 %53 to i32
%55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %54)
%56 = load i32, i32* %2
%57 = icmp ne i32 %56, 255
br i1 %57, label %58, label %60
58: ; preds = %50
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
br label %60
60: ; preds = %58, %50
br label %61
61: ; preds = %60
%62 = load i32, i32* %2
%63 = add nsw i32 %62, 1
store i32 %63, i32* %2
br label %38
64: ; preds = %38
%65 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([314 x i8], [314 x i8]* @.str.8, i64 0, i64 0))
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
store i32 0, i32* %2
br label %68
68: ; preds = %97, %64
%69 = load i32, i32* %2
%70 = icmp slt i32 %69, 320
br i1 %70, label %71, label %100
71: ; preds = %68
%72 = load i32, i32* %2
%73 = and i32 %72, 7
%74 = icmp eq i32 %73, 0
br i1 %74, label %75, label %86
75: ; preds = %71
%76 = load i32, i32* %2
%77 = icmp ne i32 %76, 0
br i1 %77, label %78, label %86
78: ; preds = %75
%79 = load i32, i32* %2
%80 = and i32 %79, 31
%81 = icmp eq i32 %80, 0
br i1 %81, label %82, label %84
82: ; preds = %78
%83 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
br label %84
84: ; preds = %82, %78
%85 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %86
86: ; preds = %84, %75, %71
%87 = load i8*, i8** %3
%88 = getelementptr inbounds i8, i8* %87, i32 1
store i8* %88, i8** %3
%89 = load i8, i8* %87
%90 = zext i8 %89 to i32
%91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0), i32 %90)
%92 = load i32, i32* %2
%93 = icmp ne i32 %92, 319
br i1 %93, label %94, label %96
94: ; preds = %86
%95 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
br label %96
96: ; preds = %94, %86
br label %97
97: ; preds = %96
%98 = load i32, i32* %2
%99 = add nsw i32 %98, 1
store i32 %99, i32* %2
br label %68
100: ; preds = %68
%101 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%102 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([274 x i8], [274 x i8]* @.str.11, i64 0, i64 0), i32 1, i32 2, i32 4, i32 8, i32 16, i32 128)
%103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
store i32 0, i32* %2
br label %104
104: ; preds = %154, %100
%105 = load i32, i32* %2
%106 = icmp slt i32 %105, 256
br i1 %106, label %107, label %157
107: ; preds = %104
%108 = load i32, i32* %2
%109 = and i32 %108, 7
%110 = icmp eq i32 %109, 0
br i1 %110, label %111, label %143
111: ; preds = %107
%112 = load i32, i32* %2
%113 = icmp ne i32 %112, 0
br i1 %113, label %114, label %143
114: ; preds = %111
%115 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0))
%116 = load i32, i32* %2
%117 = sub nsw i32 %116, 8
%118 = call i64 @isprint(i32 %117)
%119 = icmp ne i64 %118, 0
br i1 %119, label %120, label %124
120: ; preds = %114
%121 = load i32, i32* %2
%122 = sub nsw i32 %121, 8
%123 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 %122)
br label %128
124: ; preds = %114
%125 = load i32, i32* %2
%126 = sub nsw i32 %125, 8
%127 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i32 %126)
br label %128
128: ; preds = %124, %120
%129 = load i32, i32* %2
%130 = sub nsw i32 %129, 1
%131 = call i64 @isprint(i32 %130)
%132 = icmp ne i64 %131, 0
br i1 %132, label %133, label %137
133: ; preds = %128
%134 = load i32, i32* %2
%135 = sub nsw i32 %134, 1
%136 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i32 %135)
br label %141
137: ; preds = %128
%138 = load i32, i32* %2
%139 = sub nsw i32 %138, 1
%140 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %139)
br label %141
141: ; preds = %137, %133
%142 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0))
br label %143
143: ; preds = %141, %111, %107
%144 = load i8*, i8** %3
%145 = getelementptr inbounds i8, i8* %144, i32 1
store i8* %145, i8** %3
%146 = load i8, i8* %144
%147 = zext i8 %146 to i32
%148 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0), i32 %147)
%149 = load i32, i32* %2
%150 = icmp ne i32 %149, 255
br i1 %150, label %151, label %153
151: ; preds = %143
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
br label %153
153: ; preds = %151, %143
br label %154
154: ; preds = %153
%155 = load i32, i32* %2
%156 = add nsw i32 %155, 1
store i32 %156, i32* %2
br label %104
157: ; preds = %104
%158 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0))
%159 = load i32, i32* %2
%160 = sub nsw i32 %159, 8
%161 = call i64 @isprint(i32 %160)
%162 = icmp ne i64 %161, 0
br i1 %162, label %163, label %167
163: ; preds = %157
%164 = load i32, i32* %2
%165 = sub nsw i32 %164, 8
%166 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 %165)
br label %171
167: ; preds = %157
%168 = load i32, i32* %2
%169 = sub nsw i32 %168, 8
%170 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i32 %169)
br label %171
171: ; preds = %167, %163
%172 = load i32, i32* %2
%173 = sub nsw i32 %172, 1
%174 = call i64 @isprint(i32 %173)
%175 = icmp ne i64 %174, 0
br i1 %175, label %176, label %180
176: ; preds = %171
%177 = load i32, i32* %2
%178 = sub nsw i32 %177, 1
%179 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i32 %178)
br label %184
180: ; preds = %171
%181 = load i32, i32* %2
%182 = sub nsw i32 %181, 1
%183 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %182)
br label %184
184: ; preds = %180, %176
%185 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.18, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@.str.2 = [3 x i8] c" \00"
@.str.3 = [4 x i8] c"\0A \00"
@.str.4 = [4 x i8] c"%3d\00"
@.str.10 = [7 x i8] c"0x%02x\00"
@.str.11 = [274 x i8] c"/* This table identifies various classes of character by individual bits:\0A 0x%02x white space character\0A 0x%02x letter\0A 0x%02x decimal digit\0A 0x%02x hexadecimal digit\0A 0x%02x alphanumeric or '_'\0A 0x%02x regular expression metacharacter or binary zero\0A*/\0A\0A\00"
@.str.12 = [5 x i8] c" /* \00"
@.str.13 = [6 x i8] c" %c -\00"
@.str.14 = [5 x i8] c"%3d-\00"
@.str.15 = [5 x i8] c" %c \00"
@.str.16 = [7 x i8] c" */\0A \00"
@.str.17 = [6 x i8] c"};/* \00"
@str = [329 x i8] c"/*************************************************\0A* Perl-Compatible Regular Expressions *\0A*************************************************/\0A\0A/* This file is automatically written by the dftables auxiliary \0Aprogram. If you edit it by hand, you might like to edit the Makefile to \0Aprevent its ever being regenerated.\0A\00"
@str.19 = [413 x i8] c"This file is #included in the compilation of pcre.c to build the default\0Acharacter tables which are used when no tables are passed to the compile\0Afunction. */\0A\0A/* If we're not using GNU C, elide __attribute__ */\0A#ifndef __GNUC__\0A#define __attribute__( x ) /* NOTHING */\0A#endif /* __GNUC__ */\0Astatic unsigned char pcre_default_tables[] __attribute__((__unused__)) = {\0A\0A/* This table is a lower casing table. */\0A\00"
@str.21 = [44 x i8] c"/* This table is a case flipping table. */\0A\00"
@str.23 = [313 x i8] c"/* This table contains bit maps for various character classes.\0AEach map is 32 bytes long and the bits run from the least\0Asignificant end of each byte. The classes that have their own\0Amaps are: space, xdigit, digit, upper, lower, word, graph\0Aprint, punct, and cntrl. Other classes are built from combinations. */\0A\00"
@str.24 = [3 x i8] c",\0A\00"
@str.25 = [31 x i8] c" */\0A\0A/* End of chartables.c */\00"
define i32 @main() {
%1 = tail call i8* (...) @pcre_maketables()
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([329 x i8], [329 x i8]* @str, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([413 x i8], [413 x i8]* @str.19, i64 0, i64 0))
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
br label %5
5: ; preds = %20, %0
%6 = phi i8* [ %1, %0 ], [ %15, %20 ]
%7 = phi i32 [ 0, %0 ], [ %22, %20 ]
%8 = and i32 %7, 7
%9 = icmp eq i32 %8, 0
%10 = icmp ne i32 %7, 0
%11 = and i1 %10, %9
br i1 %11, label %12, label %14
12: ; preds = %5
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %14
14: ; preds = %12, %5
%15 = getelementptr inbounds i8, i8* %6, i64 1
%16 = load i8, i8* %6
%17 = zext i8 %16 to i32
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %17)
%19 = icmp eq i32 %7, 255
br i1 %19, label %23, label %20
20: ; preds = %14
%21 = tail call i32 @putchar(i32 44)
%22 = add nuw nsw i32 %7, 1
br label %5
23: ; preds = %14
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.24, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @str.21, i64 0, i64 0))
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
br label %27
27: ; preds = %42, %23
%28 = phi i8* [ %15, %23 ], [ %37, %42 ]
%29 = phi i32 [ 0, %23 ], [ %44, %42 ]
%30 = and i32 %29, 7
%31 = icmp eq i32 %30, 0
%32 = icmp ne i32 %29, 0
%33 = and i1 %32, %31
br i1 %33, label %34, label %36
34: ; preds = %27
%35 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %36
36: ; preds = %34, %27
%37 = getelementptr inbounds i8, i8* %28, i64 1
%38 = load i8, i8* %28
%39 = zext i8 %38 to i32
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %39)
%41 = icmp eq i32 %29, 255
br i1 %41, label %45, label %42
42: ; preds = %36
%43 = tail call i32 @putchar(i32 44)
%44 = add nuw nsw i32 %29, 1
br label %27
45: ; preds = %36
%46 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.24, i64 0, i64 0))
%47 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([313 x i8], [313 x i8]* @str.23, i64 0, i64 0))
%48 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
br label %49
49: ; preds = %69, %45
%50 = phi i8* [ %37, %45 ], [ %64, %69 ]
%51 = phi i32 [ 0, %45 ], [ %71, %69 ]
%52 = and i32 %51, 7
%53 = icmp eq i32 %52, 0
%54 = icmp ne i32 %51, 0
%55 = and i1 %54, %53
br i1 %55, label %56, label %63
56: ; preds = %49
%57 = and i32 %51, 31
%58 = icmp eq i32 %57, 0
br i1 %58, label %59, label %61
59: ; preds = %56
%60 = tail call i32 @putchar(i32 10)
br label %61
61: ; preds = %59, %56
%62 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %63
63: ; preds = %61, %49
%64 = getelementptr inbounds i8, i8* %50, i64 1
%65 = load i8, i8* %50
%66 = zext i8 %65 to i32
%67 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0), i32 %66)
%68 = icmp eq i32 %51, 319
br i1 %68, label %72, label %69
69: ; preds = %63
%70 = tail call i32 @putchar(i32 44)
%71 = add nuw nsw i32 %51, 1
br label %49
72: ; preds = %63
%73 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.24, i64 0, i64 0))
%74 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([274 x i8], [274 x i8]* @.str.11, i64 0, i64 0), i32 1, i32 2, i32 4, i32 8, i32 16, i32 128)
%75 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
br label %76
76: ; preds = %101, %72
%77 = phi i8* [ %64, %72 ], [ %102, %101 ]
%78 = phi i32 [ 0, %72 ], [ %104, %101 ]
%79 = and i32 %78, 7
%80 = icmp eq i32 %79, 0
%81 = icmp ne i32 %78, 0
%82 = and i1 %81, %80
br i1 %82, label %83, label %96
83: ; preds = %76
%84 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0))
%85 = add nsw i32 %78, -8
%86 = tail call i64 @isprint(i32 %85)
%87 = icmp eq i64 %86, 0
%88 = select i1 %87, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0)
%89 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %88, i32 %85)
%90 = add nsw i32 %78, -1
%91 = tail call i64 @isprint(i32 %90)
%92 = icmp eq i64 %91, 0
%93 = select i1 %92, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0)
%94 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %93, i32 %90)
%95 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0))
br label %96
96: ; preds = %83, %76
%97 = load i8, i8* %77
%98 = zext i8 %97 to i32
%99 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0), i32 %98)
%100 = icmp eq i32 %78, 255
br i1 %100, label %105, label %101
101: ; preds = %96
%102 = getelementptr inbounds i8, i8* %77, i64 1
%103 = tail call i32 @putchar(i32 44)
%104 = add nuw nsw i32 %78, 1
br label %76
105: ; preds = %96
%106 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0))
%107 = tail call i64 @isprint(i32 248)
%108 = icmp eq i64 %107, 0
%109 = select i1 %108, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0)
%110 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %109, i32 248)
%111 = tail call i64 @isprint(i32 255)
%112 = icmp eq i64 %111, 0
%113 = select i1 %112, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0)
%114 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %113, i32 255)
%115 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @str.25, i64 0, i64 0))
ret i32 0
}