#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;
  unsigned const 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"
         "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"
         "static unsigned char pcre_default_tables[] = {\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 digits, 'word' chars, and white\n"
         "space. Each map is 32 bytes long and the bits run from the least\n"
         "significant end of each byte. */\n\n");
  printf("  ");
  for (i = 0; i < 96; i++) {
    if ((i & 7) == 0 && i != 0) {
      if ((i & 31) == 0)
        printf("\n");
      printf("\n  ");
    }
    printf("0x%02x", *tables++);
    if (i != 96 - 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    0x12f8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    11ef <main+0xbf>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    11a1 <main+0x71>
cmpl   $0x0,-0x8(%rbp)
je     11a1 <main+0x71>
lea    0x12bc(%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    0x108b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0xff,-0x8(%rbp)
je     11dc <main+0xac>
lea    0x1074(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    11e1 <main+0xb1>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    116d <main+0x3d>
lea    0x1132(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1047(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1245(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    12a2 <main+0x172>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    1254 <main+0x124>
cmpl   $0x0,-0x8(%rbp)
je     1254 <main+0x124>
lea    0x1209(%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    0xfd8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0xff,-0x8(%rbp)
je     128f <main+0x15f>
lea    0xfc1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1294 <main+0x164>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1220 <main+0xf0>
lea    0x107f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xfc1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1192(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x60,-0x8(%rbp)
jge    136c <main+0x23c>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    1321 <main+0x1f1>
cmpl   $0x0,-0x8(%rbp)
je     1321 <main+0x1f1>
mov    -0x8(%rbp),%eax
and    $0x1f,%eax
cmp    $0x0,%eax
jne    1313 <main+0x1e3>
lea    0x101e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x113c(%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    0xfe6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0x5f,-0x8(%rbp)
je     1359 <main+0x229>
lea    0xef7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    135e <main+0x22e>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12d3 <main+0x1a3>
lea    0xfb4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xfab(%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    0x10a6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x100,-0x8(%rbp)
jge    14d3 <main+0x3a3>
mov    -0x8(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    1485 <main+0x355>
cmpl   $0x0,-0x8(%rbp)
je     1485 <main+0x355>
lea    0x1052(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x8,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     1421 <main+0x2f1>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0x102e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1435 <main+0x305>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0x101b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x1,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     1463 <main+0x333>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0xff7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1477 <main+0x347>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0xdd5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xfd5(%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    0xe82(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0xff,-0x8(%rbp)
je     14c0 <main+0x390>
lea    0xd90(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    14c5 <main+0x395>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13bf <main+0x28f>
lea    0xf80(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x8,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     150f <main+0x3df>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0xf40(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1523 <main+0x3f3>
mov    -0x8(%rbp),%esi
sub    $0x8,%esi
lea    0xf2d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%edi
sub    $0x1,%edi
call   1050 <isprint@plt>
cmp    $0x0,%rax
je     1551 <main+0x421>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0xf09(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1565 <main+0x435>
mov    -0x8(%rbp),%esi
sub    $0x1,%esi
lea    0xce7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xef4(%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    0xfbe(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x3,%rbx
lea    0xfab(%rip),%r14
lea    0xe6f(%rip),%r15
xor    %ebp,%ebp
test   %ebp,%ebp
je     11b1 <main+0x61>
nopw   0x0(%rax,%rax,1)
mov    %ebp,%eax
and    $0x7,%eax
jne    11b1 <main+0x61>
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     11de <main+0x8e>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%ebp
add    $0x1,%rbx
test   %ebp,%ebp
jne    11a0 <main+0x50>
jmp    11b1 <main+0x61>
lea    0x1272(%rip),%rdi
call   1040 <puts@plt>
lea    0x1192(%rip),%rdi
call   1040 <puts@plt>
lea    0xf39(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xf2a(%rip),%r14
lea    0xdee(%rip),%r15
xor    %ebp,%ebp
test   %ebp,%ebp
je     1231 <main+0xe1>
nopl   0x0(%rax,%rax,1)
mov    %ebp,%eax
and    $0x7,%eax
jne    1231 <main+0xe1>
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     125c <main+0x10c>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
test   %ebp,%ebp
jne    1220 <main+0xd0>
jmp    1231 <main+0xe1>
lea    0x11f4(%rip),%rdi
call   1040 <puts@plt>
lea    0x1140(%rip),%rdi
call   1040 <puts@plt>
lea    0xebb(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
add    %rbp,%rbx
lea    0xea9(%rip),%r15
lea    0xd71(%rip),%r14
xor    %ebp,%ebp
test   %ebp,%ebp
je     12c1 <main+0x171>
nopl   0x0(%rax)
mov    %ebp,%eax
and    $0x7,%eax
jne    12c1 <main+0x171>
test   $0x1f,%bpl
jne    12b7 <main+0x167>
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    $0x5f,%ebp
je     12eb <main+0x19b>
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%ebp
add    $0x1,%rbx
test   %ebp,%ebp
jne    12a0 <main+0x150>
jmp    12c1 <main+0x171>
lea    0x1164(%rip),%rdi
call   1040 <puts@plt>
movl   $0x80,(%rsp)
lea    0xd06(%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    0xe08(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xde6(%rip),%r12
lea    0xdea(%rip),%r15
lea    0xcba(%rip),%r13
xor    %r14d,%r14d
test   %r14d,%r14d
je     13ce <main+0x27e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r14d,%eax
and    $0x7,%eax
jne    13ce <main+0x27e>
lea    0xdae(%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    0xd9a(%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    0xc4d(%rip),%rax
cmove  %rax,%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xd6b(%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     1401 <main+0x2b1>
add    $0x1,%rbx
mov    $0x2c,%edi
call   1030 <putchar@plt>
add    $0x1,%r14d
test   %r14d,%r14d
jne    1360 <main+0x210>
jmp    13ce <main+0x27e>
lea    0xd31(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xf8,%edi
call   1070 <isprint@plt>
test   %rax,%rax
lea    0xd05(%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    0xbb6(%rip),%rax
cmove  %rax,%r15
mov    %r15,%rdi
mov    $0xff,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xff6(%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 = [581 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\0AThis 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\0Astatic unsigned char pcre_default_tables[] = {\0A\0A/* This table is a lower casing table. */\0A\0A\00"
@.str.1 = [3 x i8] c" \00"
@.str.2 = [4 x i8] c"\0A \00"
@.str.3 = [4 x i8] c"%3d\00"
@.str.4 = [2 x i8] c",\00"
@.str.5 = [4 x i8] c",\0A\0A\00"
@.str.6 = [45 x i8] c"/* This table is a case flipping table. */\0A\0A\00"
@.str.7 = [168 x i8] c"/* This table contains bit maps for digits, 'word' chars, and white\0Aspace. Each map is 32 bytes long and the bits run from the least\0Asignificant end of each byte. */\0A\0A\00"
@.str.8 = [2 x i8] c"\0A\00"
@.str.9 = [7 x i8] c"0x%02x\00"
@.str.10 = [5 x i8] c" ,\0A\0A\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 ([581 x i8], [581 x i8]* @.str, i64 0, i64 0))
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %7
7: ; preds = %30, %0
%8 = load i32, i32* %2
%9 = icmp slt i32 %8, 256
br i1 %9, label %10, label %33
10: ; preds = %7
%11 = load i32, i32* %2
%12 = and i32 %11, 7
%13 = icmp eq i32 %12, 0
br i1 %13, label %14, label %19
14: ; preds = %10
%15 = load i32, i32* %2
%16 = icmp ne i32 %15, 0
br i1 %16, label %17, label %19
17: ; preds = %14
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %19
19: ; preds = %17, %14, %10
%20 = load i8*, i8** %3
%21 = getelementptr inbounds i8, i8* %20, i32 1
store i8* %21, i8** %3
%22 = load i8, i8* %20
%23 = zext i8 %22 to i32
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %23)
%25 = load i32, i32* %2
%26 = icmp ne i32 %25, 255
br i1 %26, label %27, label %29
27: ; preds = %19
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0))
br label %29
29: ; preds = %27, %19
br label %30
30: ; preds = %29
%31 = load i32, i32* %2
%32 = add nsw i32 %31, 1
store i32 %32, i32* %2
br label %7
33: ; preds = %7
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.6, i64 0, i64 0))
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %37
37: ; preds = %60, %33
%38 = load i32, i32* %2
%39 = icmp slt i32 %38, 256
br i1 %39, label %40, label %63
40: ; preds = %37
%41 = load i32, i32* %2
%42 = and i32 %41, 7
%43 = icmp eq i32 %42, 0
br i1 %43, label %44, label %49
44: ; preds = %40
%45 = load i32, i32* %2
%46 = icmp ne i32 %45, 0
br i1 %46, label %47, label %49
47: ; preds = %44
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %49
49: ; preds = %47, %44, %40
%50 = load i8*, i8** %3
%51 = getelementptr inbounds i8, i8* %50, i32 1
store i8* %51, i8** %3
%52 = load i8, i8* %50
%53 = zext i8 %52 to i32
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %53)
%55 = load i32, i32* %2
%56 = icmp ne i32 %55, 255
br i1 %56, label %57, label %59
57: ; preds = %49
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0))
br label %59
59: ; preds = %57, %49
br label %60
60: ; preds = %59
%61 = load i32, i32* %2
%62 = add nsw i32 %61, 1
store i32 %62, i32* %2
br label %37
63: ; preds = %37
%64 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%65 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([168 x i8], [168 x i8]* @.str.7, i64 0, i64 0))
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %67
67: ; preds = %96, %63
%68 = load i32, i32* %2
%69 = icmp slt i32 %68, 96
br i1 %69, label %70, label %99
70: ; preds = %67
%71 = load i32, i32* %2
%72 = and i32 %71, 7
%73 = icmp eq i32 %72, 0
br i1 %73, label %74, label %85
74: ; preds = %70
%75 = load i32, i32* %2
%76 = icmp ne i32 %75, 0
br i1 %76, label %77, label %85
77: ; preds = %74
%78 = load i32, i32* %2
%79 = and i32 %78, 31
%80 = icmp eq i32 %79, 0
br i1 %80, label %81, label %83
81: ; preds = %77
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i64 0, i64 0))
br label %83
83: ; preds = %81, %77
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %85
85: ; preds = %83, %74, %70
%86 = load i8*, i8** %3
%87 = getelementptr inbounds i8, i8* %86, i32 1
store i8* %87, i8** %3
%88 = load i8, i8* %86
%89 = zext i8 %88 to i32
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i32 %89)
%91 = load i32, i32* %2
%92 = icmp ne i32 %91, 95
br i1 %92, label %93, label %95
93: ; preds = %85
%94 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0))
br label %95
95: ; preds = %93, %85
br label %96
96: ; preds = %95
%97 = load i32, i32* %2
%98 = add nsw i32 %97, 1
store i32 %98, i32* %2
br label %67
99: ; preds = %67
%100 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%101 = 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)
%102 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %103
103: ; preds = %153, %99
%104 = load i32, i32* %2
%105 = icmp slt i32 %104, 256
br i1 %105, label %106, label %156
106: ; preds = %103
%107 = load i32, i32* %2
%108 = and i32 %107, 7
%109 = icmp eq i32 %108, 0
br i1 %109, label %110, label %142
110: ; preds = %106
%111 = load i32, i32* %2
%112 = icmp ne i32 %111, 0
br i1 %112, label %113, label %142
113: ; preds = %110
%114 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0))
%115 = load i32, i32* %2
%116 = sub nsw i32 %115, 8
%117 = call i64 @isprint(i32 %116)
%118 = icmp ne i64 %117, 0
br i1 %118, label %119, label %123
119: ; preds = %113
%120 = load i32, i32* %2
%121 = sub nsw i32 %120, 8
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 %121)
br label %127
123: ; preds = %113
%124 = load i32, i32* %2
%125 = sub nsw i32 %124, 8
%126 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i32 %125)
br label %127
127: ; preds = %123, %119
%128 = load i32, i32* %2
%129 = sub nsw i32 %128, 1
%130 = call i64 @isprint(i32 %129)
%131 = icmp ne i64 %130, 0
br i1 %131, label %132, label %136
132: ; preds = %127
%133 = load i32, i32* %2
%134 = sub nsw i32 %133, 1
%135 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i32 %134)
br label %140
136: ; preds = %127
%137 = load i32, i32* %2
%138 = sub nsw i32 %137, 1
%139 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %138)
br label %140
140: ; preds = %136, %132
%141 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0))
br label %142
142: ; preds = %140, %110, %106
%143 = load i8*, i8** %3
%144 = getelementptr inbounds i8, i8* %143, i32 1
store i8* %144, i8** %3
%145 = load i8, i8* %143
%146 = zext i8 %145 to i32
%147 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i32 %146)
%148 = load i32, i32* %2
%149 = icmp ne i32 %148, 255
br i1 %149, label %150, label %152
150: ; preds = %142
%151 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i64 0, i64 0))
br label %152
152: ; preds = %150, %142
br label %153
153: ; preds = %152
%154 = load i32, i32* %2
%155 = add nsw i32 %154, 1
store i32 %155, i32* %2
br label %103
156: ; preds = %103
%157 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0))
%158 = load i32, i32* %2
%159 = sub nsw i32 %158, 8
%160 = call i64 @isprint(i32 %159)
%161 = icmp ne i64 %160, 0
br i1 %161, label %162, label %166
162: ; preds = %156
%163 = load i32, i32* %2
%164 = sub nsw i32 %163, 8
%165 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 %164)
br label %170
166: ; preds = %156
%167 = load i32, i32* %2
%168 = sub nsw i32 %167, 8
%169 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i32 %168)
br label %170
170: ; preds = %166, %162
%171 = load i32, i32* %2
%172 = sub nsw i32 %171, 1
%173 = call i64 @isprint(i32 %172)
%174 = icmp ne i64 %173, 0
br i1 %174, label %175, label %179
175: ; preds = %170
%176 = load i32, i32* %2
%177 = sub nsw i32 %176, 1
%178 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i32 %177)
br label %183
179: ; preds = %170
%180 = load i32, i32* %2
%181 = sub nsw i32 %180, 1
%182 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %181)
br label %183
183: ; preds = %179, %175
%184 = 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.1 = [3 x i8] c" \00"
@.str.2 = [4 x i8] c"\0A \00"
@.str.3 = [4 x i8] c"%3d\00"
@.str.9 = [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 = [580 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\0AThis 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\0Astatic unsigned char pcre_default_tables[] = {\0A\0A/* This table is a lower casing table. */\0A\00"
@str.20 = [44 x i8] c"/* This table is a case flipping table. */\0A\00"
@str.21 = [3 x i8] c",\0A\00"
@str.22 = [167 x i8] c"/* This table contains bit maps for digits, 'word' chars, and white\0Aspace. Each map is 32 bytes long and the bits run from the least\0Asignificant end of each byte. */\0A\00"
@str.23 = [4 x i8] c" ,\0A\00"
@str.24 = [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 ([580 x i8], [580 x i8]* @str, i64 0, i64 0))
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %4
4: ; preds = %19, %0
%5 = phi i8* [ %1, %0 ], [ %14, %19 ]
%6 = phi i32 [ 0, %0 ], [ %21, %19 ]
%7 = and i32 %6, 7
%8 = icmp eq i32 %7, 0
%9 = icmp ne i32 %6, 0
%10 = and i1 %9, %8
br i1 %10, label %11, label %13
11: ; preds = %4
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %13
13: ; preds = %11, %4
%14 = getelementptr inbounds i8, i8* %5, i64 1
%15 = load i8, i8* %5
%16 = zext i8 %15 to i32
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %16)
%18 = icmp eq i32 %6, 255
br i1 %18, label %22, label %19
19: ; preds = %13
%20 = tail call i32 @putchar(i32 44)
%21 = add nuw nsw i32 %6, 1
br label %4
22: ; preds = %13
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.21, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @str.20, i64 0, i64 0))
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %26
26: ; preds = %41, %22
%27 = phi i8* [ %14, %22 ], [ %36, %41 ]
%28 = phi i32 [ 0, %22 ], [ %43, %41 ]
%29 = and i32 %28, 7
%30 = icmp eq i32 %29, 0
%31 = icmp ne i32 %28, 0
%32 = and i1 %31, %30
br i1 %32, label %33, label %35
33: ; preds = %26
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %35
35: ; preds = %33, %26
%36 = getelementptr inbounds i8, i8* %27, i64 1
%37 = load i8, i8* %27
%38 = zext i8 %37 to i32
%39 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %38)
%40 = icmp eq i32 %28, 255
br i1 %40, label %44, label %41
41: ; preds = %35
%42 = tail call i32 @putchar(i32 44)
%43 = add nuw nsw i32 %28, 1
br label %26
44: ; preds = %35
%45 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.21, i64 0, i64 0))
%46 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([167 x i8], [167 x i8]* @str.22, i64 0, i64 0))
%47 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %48
48: ; preds = %68, %44
%49 = phi i8* [ %36, %44 ], [ %63, %68 ]
%50 = phi i32 [ 0, %44 ], [ %70, %68 ]
%51 = and i32 %50, 7
%52 = icmp eq i32 %51, 0
%53 = icmp ne i32 %50, 0
%54 = and i1 %53, %52
br i1 %54, label %55, label %62
55: ; preds = %48
%56 = and i32 %50, 31
%57 = icmp eq i32 %56, 0
br i1 %57, label %58, label %60
58: ; preds = %55
%59 = tail call i32 @putchar(i32 10)
br label %60
60: ; preds = %58, %55
%61 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %62
62: ; preds = %60, %48
%63 = getelementptr inbounds i8, i8* %49, i64 1
%64 = load i8, i8* %49
%65 = zext i8 %64 to i32
%66 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i32 %65)
%67 = icmp eq i32 %50, 95
br i1 %67, label %71, label %68
68: ; preds = %62
%69 = tail call i32 @putchar(i32 44)
%70 = add nuw nsw i32 %50, 1
br label %48
71: ; preds = %62
%72 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @str.23, i64 0, i64 0))
%73 = 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)
%74 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %75
75: ; preds = %100, %71
%76 = phi i8* [ %63, %71 ], [ %101, %100 ]
%77 = phi i32 [ 0, %71 ], [ %103, %100 ]
%78 = and i32 %77, 7
%79 = icmp eq i32 %78, 0
%80 = icmp ne i32 %77, 0
%81 = and i1 %80, %79
br i1 %81, label %82, label %95
82: ; preds = %75
%83 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.12, i64 0, i64 0))
%84 = add nsw i32 %77, -8
%85 = tail call i64 @isprint(i32 %84)
%86 = icmp eq i64 %85, 0
%87 = select i1 %86, 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)
%88 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %87, i32 %84)
%89 = add nsw i32 %77, -1
%90 = tail call i64 @isprint(i32 %89)
%91 = icmp eq i64 %90, 0
%92 = select i1 %91, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0)
%93 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %92, i32 %89)
%94 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0))
br label %95
95: ; preds = %82, %75
%96 = load i8, i8* %76
%97 = zext i8 %96 to i32
%98 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0), i32 %97)
%99 = icmp eq i32 %77, 255
br i1 %99, label %104, label %100
100: ; preds = %95
%101 = getelementptr inbounds i8, i8* %76, i64 1
%102 = tail call i32 @putchar(i32 44)
%103 = add nuw nsw i32 %77, 1
br label %75
104: ; preds = %95
%105 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0))
%106 = tail call i64 @isprint(i32 248)
%107 = icmp eq i64 %106, 0
%108 = select i1 %107, 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)
%109 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %108, i32 248)
%110 = tail call i64 @isprint(i32 255)
%111 = icmp eq i64 %110, 0
%112 = select i1 %111, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0)
%113 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %112, i32 255)
%114 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @str.24, i64 0, i64 0))
ret i32 0
}