int parse_escape(string_ptr)
char **string_ptr;
{
  register int c = *(*string_ptr)++;
  switch (c) {
  case 'a':
    return '\007';
  case 'b':
    return '\b';
  case 'e':
    return 033;
  case 'f':
    return '\f';
  case 'n':
    return '\n';
  case 'r':
    return '\r';
  case 't':
    return '\t';
  case 'v':
    return '\v';
  case '\n':
    return -2;
  case 0:
    (*string_ptr)--;
    return 0;
  case '^':
    c = *(*string_ptr)++;
    if (c == '\\')
      c = parse_escape(string_ptr);
    if (c == '?')
      return 0177;
    return (c & 0200) | (c & 037);
  case '0':
  case '1':
  case '2':
  case '3':
  case '4':
  case '5':
  case '6':
  case '7': {
    register int i = c - '0';
    register int count = 0;
    while (++count < 3) {
      c = *(*string_ptr)++;
      if (c >= '0' && c <= '7')
        i = (i << 3) + c - '0';
      else {
        (*string_ptr)--;
        break;
      }
    }
    if ((i & ~((1 << 8) - 1)) != 0) {
      i &= (1 << 8) - 1;
      warning("octal character constant does not fit in a byte");
    }
    return i;
  }
  case 'x': {
    register int i = 0;
    register int count = 0;
    for (;;) {
      c = *(*string_ptr)++;
      if (c >= '0' && c <= '9')
        i = (i << 4) + c - '0';
      else if (c >= 'a' && c <= 'f')
        i = (i << 4) + c - 'a' + 10;
      else if (c >= 'A' && c <= 'F')
        i = (i << 4) + c - 'A' + 10;
      else {
        (*string_ptr)--;
        break;
      }
    }
    if ((i & ~((1 << 8) - 1)) != 0) {
      i &= (1 << 8) - 1;
      warning("hex character constant does not fit in a byte");
    }
    return i;
  }
  default:
    return c;
  }
}


x86 assembly (clang, -O0):
<parse_escape>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movsbl (%rax),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    %rax,-0x30(%rbp)
sub    $0x78,%rax
ja     13f1 <parse_escape+0x2d1>
mov    -0x30(%rbp),%rax
lea    0xea1(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x7,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0x8,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0x1b,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0xc,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0xa,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0xd,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0x9,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0xb,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0xfffffffe,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movsbl (%rax),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x5c,-0x14(%rbp)
jne    121b <parse_escape+0xfb>
mov    -0x10(%rbp),%rdi
call   1040 <parse_escape@plt>
mov    %eax,-0x14(%rbp)
cmpl   $0x3f,-0x14(%rbp)
jne    1231 <parse_escape+0x111>
movl   $0x7f,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
mov    -0x14(%rbp),%eax
and    $0x80,%eax
mov    -0x14(%rbp),%ecx
and    $0x1f,%ecx
or     %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
mov    -0x14(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
cmp    $0x3,%eax
jge    12c2 <parse_escape+0x1a2>
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movsbl (%rax),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x30,-0x14(%rbp)
jl     12aa <parse_escape+0x18a>
cmpl   $0x37,-0x14(%rbp)
jg     12aa <parse_escape+0x18a>
mov    -0x18(%rbp),%eax
shl    $0x3,%eax
add    -0x14(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x18(%rbp)
jmp    12bd <parse_escape+0x19d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,(%rax)
jmp    12c2 <parse_escape+0x1a2>
jmp    1259 <parse_escape+0x139>
mov    -0x18(%rbp),%eax
and    $0xffffff00,%eax
cmp    $0x0,%eax
je     12ec <parse_escape+0x1cc>
mov    -0x18(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x18(%rbp)
lea    0xeff(%rip),%rdi
mov    $0x0,%al
call   1030 <warning@plt>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movsbl (%rax),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x30,-0x14(%rbp)
jl     1344 <parse_escape+0x224>
cmpl   $0x39,-0x14(%rbp)
jg     1344 <parse_escape+0x224>
mov    -0x20(%rbp),%eax
shl    $0x4,%eax
add    -0x14(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
jmp    13b7 <parse_escape+0x297>
cmpl   $0x61,-0x14(%rbp)
jl     136f <parse_escape+0x24f>
cmpl   $0x66,-0x14(%rbp)
jg     136f <parse_escape+0x24f>
mov    -0x20(%rbp),%eax
shl    $0x4,%eax
add    -0x14(%rbp),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x20(%rbp)
jmp    13b2 <parse_escape+0x292>
cmpl   $0x41,-0x14(%rbp)
jl     139a <parse_escape+0x27a>
cmpl   $0x46,-0x14(%rbp)
jg     139a <parse_escape+0x27a>
mov    -0x20(%rbp),%eax
shl    $0x4,%eax
add    -0x14(%rbp),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x20(%rbp)
jmp    13ad <parse_escape+0x28d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,(%rax)
jmp    13bc <parse_escape+0x29c>
jmp    13b2 <parse_escape+0x292>
jmp    13b7 <parse_escape+0x297>
jmp    1305 <parse_escape+0x1e5>
mov    -0x20(%rbp),%eax
and    $0xffffff00,%eax
cmp    $0x0,%eax
je     13e6 <parse_escape+0x2c6>
mov    -0x20(%rbp),%eax
and    $0xff,%eax
mov    %eax,-0x20(%rbp)
lea    0xe35(%rip),%rdi
mov    $0x0,%al
call   1030 <warning@plt>
mov    -0x20(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13f7 <parse_escape+0x2d7>
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse_escape>:
push   %rbx
mov    (%rdi),%rdx
lea    0x1(%rdx),%r9
mov    %r9,(%rdi)
movsbl (%rdx),%ecx
cmp    $0x78,%ecx
ja     119b <parse_escape+0x7b>
mov    $0x7,%ebx
lea    0xec1(%rip),%r8
movslq (%r8,%rcx,4),%rsi
add    %r8,%rsi
jmp    *%rsi
add    $0xffffffd0,%ecx
lea    0x2(%rdx),%r8
mov    %r8,(%rdi)
movzbl 0x1(%rdx),%esi
mov    %esi,%ebx
and    $0xf8,%bl
cmp    $0x30,%bl
jne    1198 <parse_escape+0x78>
lea    (%rsi,%rcx,8),%ecx
add    $0xffffffd0,%ecx
lea    0x3(%rdx),%rax
mov    %rax,(%rdi)
movzbl 0x2(%rdx),%eax
mov    %eax,%edx
and    $0xf8,%dl
cmp    $0x30,%dl
jne    1195 <parse_escape+0x75>
lea    (%rax,%rcx,8),%ebx
add    $0xffffffd0,%ebx
cmp    $0x100,%ebx
jb     119d <parse_escape+0x7d>
movzbl %bl,%ebx
lea    0x1051(%rip),%rdi
jmp    120e <parse_escape+0xee>
mov    %r8,%r9
mov    %r9,(%rdi)
mov    %ecx,%ebx
mov    %ebx,%eax
pop    %rbx
ret
mov    $0x8,%ebx
jmp    119d <parse_escape+0x7d>
mov    $0x1b,%ebx
jmp    119d <parse_escape+0x7d>
mov    $0xb,%ebx
jmp    119d <parse_escape+0x7d>
xor    %ebx,%ebx
jmp    11ca <parse_escape+0xaa>
nopw   0x0(%rax,%rax,1)
shl    $0x4,%ebx
add    %esi,%ebx
add    %edx,%ebx
mov    %rcx,%r9
lea    0x1(%r9),%rcx
mov    %rcx,(%rdi)
movsbl (%r9),%edx
lea    -0x30(%rdx),%eax
mov    $0xffffffd0,%esi
cmp    $0xa,%al
jb     11c0 <parse_escape+0xa0>
lea    -0x61(%rdx),%eax
mov    $0xffffffa9,%esi
cmp    $0x6,%al
jb     11c0 <parse_escape+0xa0>
lea    -0x41(%rdx),%eax
mov    $0xffffffc9,%esi
cmp    $0x6,%al
jb     11c0 <parse_escape+0xa0>
mov    %r9,(%rdi)
cmp    $0x100,%ebx
jb     119d <parse_escape+0x7d>
movzbl %bl,%ebx
lea    0x1006(%rip),%rdi
xor    %eax,%eax
call   1030 <warning@plt>
jmp    119d <parse_escape+0x7d>
mov    %rdx,(%rdi)
xor    %ebx,%ebx
jmp    119d <parse_escape+0x7d>
mov    $0xfffffffe,%ebx
jmp    119d <parse_escape+0x7d>
lea    0x2(%rdx),%rax
mov    %rax,(%rdi)
movsbl 0x1(%rdx),%eax
cmp    $0x5c,%eax
jne    1240 <parse_escape+0x120>
call   1040 <parse_escape@plt>
mov    %eax,%ecx
and    $0x9f,%ecx
cmp    $0x3f,%eax
mov    $0x7f,%ebx
cmovne %ecx,%ebx
jmp    119d <parse_escape+0x7d>
mov    $0xc,%ebx
jmp    119d <parse_escape+0x7d>
mov    $0xa,%ebx
jmp    119d <parse_escape+0x7d>
mov    $0xd,%ebx
jmp    119d <parse_escape+0x7d>
mov    $0x9,%ebx
jmp    119d <parse_escape+0x7d>

LLVM IR (-O0):
@.str = [48 x i8] c"octal character constant does not fit in a byte\00"
@.str.1 = [46 x i8] c"hex character constant does not fit in a byte\00"
define i32 @parse_escape(i8** %0) {
%2 = alloca i32
%3 = alloca i8**
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i8** %0, i8*** %3
%9 = load i8**, i8*** %3
%10 = load i8*, i8** %9
%11 = getelementptr inbounds i8, i8* %10, i32 1
store i8* %11, i8** %9
%12 = load i8, i8* %10
%13 = sext i8 %12 to i32
store i32 %13, i32* %4
%14 = load i32, i32* %4
switch i32 %14, label %149 [
i32 97, label %15
i32 98, label %16
i32 101, label %17
i32 102, label %18
i32 110, label %19
i32 114, label %20
i32 116, label %21
i32 118, label %22
i32 10, label %23
i32 0, label %24
i32 94, label %28
i32 48, label %49
i32 49, label %49
i32 50, label %49
i32 51, label %49
i32 52, label %49
i32 53, label %49
i32 54, label %49
i32 55, label %49
i32 120, label %88
]
15: ; preds = %1
store i32 7, i32* %2
br label %151
16: ; preds = %1
store i32 8, i32* %2
br label %151
17: ; preds = %1
store i32 27, i32* %2
br label %151
18: ; preds = %1
store i32 12, i32* %2
br label %151
19: ; preds = %1
store i32 10, i32* %2
br label %151
20: ; preds = %1
store i32 13, i32* %2
br label %151
21: ; preds = %1
store i32 9, i32* %2
br label %151
22: ; preds = %1
store i32 11, i32* %2
br label %151
23: ; preds = %1
store i32 -2, i32* %2
br label %151
24: ; preds = %1
%25 = load i8**, i8*** %3
%26 = load i8*, i8** %25
%27 = getelementptr inbounds i8, i8* %26, i32 -1
store i8* %27, i8** %25
store i32 0, i32* %2
br label %151
28: ; preds = %1
%29 = load i8**, i8*** %3
%30 = load i8*, i8** %29
%31 = getelementptr inbounds i8, i8* %30, i32 1
store i8* %31, i8** %29
%32 = load i8, i8* %30
%33 = sext i8 %32 to i32
store i32 %33, i32* %4
%34 = load i32, i32* %4
%35 = icmp eq i32 %34, 92
br i1 %35, label %36, label %39
36: ; preds = %28
%37 = load i8**, i8*** %3
%38 = call i32 @parse_escape(i8** %37)
store i32 %38, i32* %4
br label %39
39: ; preds = %36, %28
%40 = load i32, i32* %4
%41 = icmp eq i32 %40, 63
br i1 %41, label %42, label %43
42: ; preds = %39
store i32 127, i32* %2
br label %151
43: ; preds = %39
%44 = load i32, i32* %4
%45 = and i32 %44, 128
%46 = load i32, i32* %4
%47 = and i32 %46, 31
%48 = or i32 %45, %47
store i32 %48, i32* %2
br label %151
49: ; preds = %1, %1, %1, %1, %1, %1, %1, %1
%50 = load i32, i32* %4
%51 = sub nsw i32 %50, 48
store i32 %51, i32* %5
store i32 0, i32* %6
br label %52
52: ; preds = %77, %49
%53 = load i32, i32* %6
%54 = add nsw i32 %53, 1
store i32 %54, i32* %6
%55 = icmp slt i32 %54, 3
br i1 %55, label %56, label %78
56: ; preds = %52
%57 = load i8**, i8*** %3
%58 = load i8*, i8** %57
%59 = getelementptr inbounds i8, i8* %58, i32 1
store i8* %59, i8** %57
%60 = load i8, i8* %58
%61 = sext i8 %60 to i32
store i32 %61, i32* %4
%62 = load i32, i32* %4
%63 = icmp sge i32 %62, 48
br i1 %63, label %64, label %73
64: ; preds = %56
%65 = load i32, i32* %4
%66 = icmp sle i32 %65, 55
br i1 %66, label %67, label %73
67: ; preds = %64
%68 = load i32, i32* %5
%69 = shl i32 %68, 3
%70 = load i32, i32* %4
%71 = add nsw i32 %69, %70
%72 = sub nsw i32 %71, 48
store i32 %72, i32* %5
br label %77
73: ; preds = %64, %56
%74 = load i8**, i8*** %3
%75 = load i8*, i8** %74
%76 = getelementptr inbounds i8, i8* %75, i32 -1
store i8* %76, i8** %74
br label %78
77: ; preds = %67
br label %52
78: ; preds = %73, %52
%79 = load i32, i32* %5
%80 = and i32 %79, -256
%81 = icmp ne i32 %80, 0
br i1 %81, label %82, label %86
82: ; preds = %78
%83 = load i32, i32* %5
%84 = and i32 %83, 255
store i32 %84, i32* %5
%85 = call i32 (i8*, ...) bitcast (i32 (...)* @warning to i32 (i8*, ...)*)(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0))
br label %86
86: ; preds = %82, %78
%87 = load i32, i32* %5
store i32 %87, i32* %2
br label %151
88: ; preds = %1
store i32 0, i32* %7
store i32 0, i32* %8
br label %89
89: ; preds = %138, %88
%90 = load i8**, i8*** %3
%91 = load i8*, i8** %90
%92 = getelementptr inbounds i8, i8* %91, i32 1
store i8* %92, i8** %90
%93 = load i8, i8* %91
%94 = sext i8 %93 to i32
store i32 %94, i32* %4
%95 = load i32, i32* %4
%96 = icmp sge i32 %95, 48
br i1 %96, label %97, label %106
97: ; preds = %89
%98 = load i32, i32* %4
%99 = icmp sle i32 %98, 57
br i1 %99, label %100, label %106
100: ; preds = %97
%101 = load i32, i32* %7
%102 = shl i32 %101, 4
%103 = load i32, i32* %4
%104 = add nsw i32 %102, %103
%105 = sub nsw i32 %104, 48
store i32 %105, i32* %7
br label %138
106: ; preds = %97, %89
%107 = load i32, i32* %4
%108 = icmp sge i32 %107, 97
br i1 %108, label %109, label %119
109: ; preds = %106
%110 = load i32, i32* %4
%111 = icmp sle i32 %110, 102
br i1 %111, label %112, label %119
112: ; preds = %109
%113 = load i32, i32* %7
%114 = shl i32 %113, 4
%115 = load i32, i32* %4
%116 = add nsw i32 %114, %115
%117 = sub nsw i32 %116, 97
%118 = add nsw i32 %117, 10
store i32 %118, i32* %7
br label %137
119: ; preds = %109, %106
%120 = load i32, i32* %4
%121 = icmp sge i32 %120, 65
br i1 %121, label %122, label %132
122: ; preds = %119
%123 = load i32, i32* %4
%124 = icmp sle i32 %123, 70
br i1 %124, label %125, label %132
125: ; preds = %122
%126 = load i32, i32* %7
%127 = shl i32 %126, 4
%128 = load i32, i32* %4
%129 = add nsw i32 %127, %128
%130 = sub nsw i32 %129, 65
%131 = add nsw i32 %130, 10
store i32 %131, i32* %7
br label %136
132: ; preds = %122, %119
%133 = load i8**, i8*** %3
%134 = load i8*, i8** %133
%135 = getelementptr inbounds i8, i8* %134, i32 -1
store i8* %135, i8** %133
br label %139
136: ; preds = %125
br label %137
137: ; preds = %136, %112
br label %138
138: ; preds = %137, %100
br label %89
139: ; preds = %132
%140 = load i32, i32* %7
%141 = and i32 %140, -256
%142 = icmp ne i32 %141, 0
br i1 %142, label %143, label %147
143: ; preds = %139
%144 = load i32, i32* %7
%145 = and i32 %144, 255
store i32 %145, i32* %7
%146 = call i32 (i8*, ...) bitcast (i32 (...)* @warning to i32 (i8*, ...)*)(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.1, i64 0, i64 0))
br label %147
147: ; preds = %143, %139
%148 = load i32, i32* %7
store i32 %148, i32* %2
br label %151
149: ; preds = %1
%150 = load i32, i32* %4
store i32 %150, i32* %2
br label %151
151: ; preds = %149, %147, %86, %43, %42, %24, %23, %22, %21, %20, %19, %18, %17, %16, %15
%152 = load i32, i32* %2
ret i32 %152
}

LLVM IR (-O2):
@.str = [48 x i8] c"octal character constant does not fit in a byte\00"
@.str.1 = [46 x i8] c"hex character constant does not fit in a byte\00"
define i32 @parse_escape(i8** nocapture %0) {
%2 = load i8*, i8** %0
%3 = getelementptr inbounds i8, i8* %2, i64 1
store i8* %3, i8** %0
%4 = load i8, i8* %2
%5 = sext i8 %4 to i32
switch i32 %5, label %78 [
i32 97, label %79
i32 98, label %6
i32 101, label %7
i32 102, label %8
i32 110, label %9
i32 114, label %10
i32 116, label %11
i32 118, label %12
i32 10, label %13
i32 0, label %14
i32 94, label %15
i32 48, label %27
i32 49, label %27
i32 50, label %27
i32 51, label %27
i32 52, label %27
i32 53, label %27
i32 54, label %27
i32 55, label %27
i32 120, label %54
]
6: ; preds = %1
br label %79
7: ; preds = %1
br label %79
8: ; preds = %1
br label %79
9: ; preds = %1
br label %79
10: ; preds = %1
br label %79
11: ; preds = %1
br label %79
12: ; preds = %1
br label %79
13: ; preds = %1
br label %79
14: ; preds = %1
store i8* %2, i8** %0
br label %79
15: ; preds = %1
%16 = getelementptr inbounds i8, i8* %2, i64 2
store i8* %16, i8** %0
%17 = load i8, i8* %3
%18 = sext i8 %17 to i32
%19 = icmp eq i8 %17, 92
br i1 %19, label %20, label %22
20: ; preds = %15
%21 = tail call i32 @parse_escape(i8** %0)
br label %22
22: ; preds = %20, %15
%23 = phi i32 [ %21, %20 ], [ %18, %15 ]
%24 = icmp eq i32 %23, 63
%25 = and i32 %23, 159
%26 = select i1 %24, i32 127, i32 %25
br label %79
27: ; preds = %1, %1, %1, %1, %1, %1, %1, %1
%28 = add nsw i32 %5, -48
%29 = getelementptr inbounds i8, i8* %2, i64 2
store i8* %29, i8** %0
%30 = load i8, i8* %3
%31 = and i8 %30, -8
%32 = icmp eq i8 %31, 48
br i1 %32, label %33, label %42
33: ; preds = %27
%34 = zext i8 %30 to i32
%35 = shl nuw nsw i32 %28, 3
%36 = add nuw nsw i32 %35, %34
%37 = add nsw i32 %36, -48
%38 = getelementptr inbounds i8, i8* %2, i64 3
store i8* %38, i8** %0
%39 = load i8, i8* %29
%40 = and i8 %39, -8
%41 = icmp eq i8 %40, 48
br i1 %41, label %45, label %42
42: ; preds = %27, %33
%43 = phi i32 [ %28, %27 ], [ %37, %33 ]
%44 = phi i8* [ %3, %27 ], [ %29, %33 ]
store i8* %44, i8** %0
br label %79
45: ; preds = %33
%46 = zext i8 %39 to i32
%47 = shl nuw nsw i32 %37, 3
%48 = add nuw nsw i32 %47, %46
%49 = add nsw i32 %48, -48
%50 = icmp ult i32 %49, 256
br i1 %50, label %79, label %51
51: ; preds = %45
%52 = and i32 %49, 255
%53 = tail call i32 (i8*, ...) bitcast (i32 (...)* @warning to i32 (i8*, ...)*)(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0))
br label %79
54: ; preds = %1, %70
%55 = phi i8* [ %57, %70 ], [ %3, %1 ]
%56 = phi i32 [ %74, %70 ], [ 0, %1 ]
%57 = getelementptr inbounds i8, i8* %55, i64 1
store i8* %57, i8** %0
%58 = load i8, i8* %55
%59 = sext i8 %58 to i32
%60 = add i8 %58, -48
%61 = icmp ult i8 %60, 10
br i1 %61, label %70, label %62
62: ; preds = %54
%63 = add i8 %58, -97
%64 = icmp ult i8 %63, 6
br i1 %64, label %70, label %65
65: ; preds = %62
%66 = add i8 %58, -65
%67 = icmp ult i8 %66, 6
br i1 %67, label %70, label %68
68: ; preds = %65
store i8* %55, i8** %0
%69 = icmp ult i32 %56, 256
br i1 %69, label %79, label %75
70: ; preds = %65, %62, %54
%71 = phi i32 [ -48, %54 ], [ -87, %62 ], [ -55, %65 ]
%72 = shl i32 %56, 4
%73 = add i32 %72, %71
%74 = add i32 %73, %59
br label %54
75: ; preds = %68
%76 = and i32 %56, 255
%77 = tail call i32 (i8*, ...) bitcast (i32 (...)* @warning to i32 (i8*, ...)*)(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.1, i64 0, i64 0))
br label %79
78: ; preds = %1
br label %79
79: ; preds = %42, %22, %68, %75, %45, %51, %1, %78, %14, %13, %12, %11, %10, %9, %8, %7, %6
%80 = phi i32 [ %5, %78 ], [ 0, %14 ], [ -2, %13 ], [ 11, %12 ], [ 9, %11 ], [ 13, %10 ], [ 10, %9 ], [ 12, %8 ], [ 27, %7 ], [ 8, %6 ], [ 7, %1 ], [ %52, %51 ], [ %49, %45 ], [ %76, %75 ], [ %56, %68 ], [ %26, %22 ], [ %43, %42 ]
ret i32 %80
}