#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__ isspace(int);
scalar_t__ strchr(char *, int);
int parseaddr_phrase(char **inp, char **phrasep, char *specials) {
  int c;
  char *src = *inp;
  char *dst;
  {
    int _c, _comment = 0;
    while ((_c = *(src))) {
      if (_c == '(') {
        _comment = 1;
        (src)++;
        while ((_comment && (_c = *(src)))) {
          (src)++;
          if (_c == '\\' && *(src))
            (src)++;
          else if (_c == '(')
            _comment++;
          else if (_c == ')')
            _comment--;
        }
        (src)--;
      } else if (!isspace(_c))
        break;
      (src)++;
    }
  };
  *phrasep = dst = src;
  for (;;) {
    c = *src++;
    if (c == '\"') {
      while ((c = *src)) {
        src++;
        if (c == '\"')
          break;
        if (c == '\\') {
          if (!(c = *src))
            break;
          src++;
        }
        *dst++ = c;
      }
    } else if (isspace((int)(unsigned char)c) || c == '(') {
      src--;
      {
        int _c, _comment = 0;
        while ((_c = *(src))) {
          if (_c == '(') {
            _comment = 1;
            (src)++;
            while ((_comment && (_c = *(src)))) {
              (src)++;
              if (_c == '\\' && *(src))
                (src)++;
              else if (_c == '(')
                _comment++;
              else if (_c == ')')
                _comment--;
            }
            (src)--;
          } else if (!isspace(_c))
            break;
          (src)++;
        }
      };
      *dst++ = ' ';
    } else if (!c || strchr(specials, c)) {
      if (dst > *phrasep && dst[-1] == ' ')
        dst--;
      *dst = '\0';
      *inp = src;
      return c;
    } else {
      *dst++ = c;
    }
  }
}


x86 assembly (clang, -O0):
<parseaddr_phrase>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x34(%rbp)
cmp    $0x0,%eax
je     1257 <parseaddr_phrase+0x137>
cmpl   $0x28,-0x34(%rbp)
jne    122a <parseaddr_phrase+0x10a>
movl   $0x1,-0x38(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x38(%rbp)
mov    %al,-0x41(%rbp)
je     1198 <parseaddr_phrase+0x78>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x34(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    11a8 <parseaddr_phrase+0x88>
jmp    1219 <parseaddr_phrase+0xf9>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x5c,-0x34(%rbp)
jne    11df <parseaddr_phrase+0xbf>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     11df <parseaddr_phrase+0xbf>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1214 <parseaddr_phrase+0xf4>
cmpl   $0x28,-0x34(%rbp)
jne    11f7 <parseaddr_phrase+0xd7>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    120f <parseaddr_phrase+0xef>
cmpl   $0x29,-0x34(%rbp)
jne    120a <parseaddr_phrase+0xea>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    120f <parseaddr_phrase+0xef>
jmp    1214 <parseaddr_phrase+0xf4>
jmp    1176 <parseaddr_phrase+0x56>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    1246 <parseaddr_phrase+0x126>
mov    -0x34(%rbp),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
jne    1241 <parseaddr_phrase+0x121>
jmp    1257 <parseaddr_phrase+0x137>
jmp    1246 <parseaddr_phrase+0x126>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1146 <parseaddr_phrase+0x26>
mov    -0x28(%rbp),%rcx
mov    %rcx,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x22,-0x1c(%rbp)
jne    1306 <parseaddr_phrase+0x1e6>
jmp    128a <parseaddr_phrase+0x16a>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x1c(%rbp)
cmp    $0x0,%eax
je     1301 <parseaddr_phrase+0x1e1>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x22,-0x1c(%rbp)
jne    12b8 <parseaddr_phrase+0x198>
jmp    1301 <parseaddr_phrase+0x1e1>
cmpl   $0x5c,-0x1c(%rbp)
jne    12e6 <parseaddr_phrase+0x1c6>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x1c(%rbp)
cmp    $0x0,%eax
jne    12da <parseaddr_phrase+0x1ba>
jmp    1301 <parseaddr_phrase+0x1e1>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    128a <parseaddr_phrase+0x16a>
jmp    14e9 <parseaddr_phrase+0x3c9>
mov    -0x1c(%rbp),%eax
movzbl %al,%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
jne    1325 <parseaddr_phrase+0x205>
cmpl   $0x28,-0x1c(%rbp)
jne    1460 <parseaddr_phrase+0x340>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
cmp    $0x0,%eax
je     1449 <parseaddr_phrase+0x329>
cmpl   $0x28,-0x3c(%rbp)
jne    141c <parseaddr_phrase+0x2fc>
movl   $0x1,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x40(%rbp)
mov    %al,-0x42(%rbp)
je     138a <parseaddr_phrase+0x26a>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0x42(%rbp)
mov    -0x42(%rbp),%al
test   $0x1,%al
jne    139a <parseaddr_phrase+0x27a>
jmp    140b <parseaddr_phrase+0x2eb>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x5c,-0x3c(%rbp)
jne    13d1 <parseaddr_phrase+0x2b1>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     13d1 <parseaddr_phrase+0x2b1>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1406 <parseaddr_phrase+0x2e6>
cmpl   $0x28,-0x3c(%rbp)
jne    13e9 <parseaddr_phrase+0x2c9>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1401 <parseaddr_phrase+0x2e1>
cmpl   $0x29,-0x3c(%rbp)
jne    13fc <parseaddr_phrase+0x2dc>
mov    -0x40(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x40(%rbp)
jmp    1401 <parseaddr_phrase+0x2e1>
jmp    1406 <parseaddr_phrase+0x2e6>
jmp    1368 <parseaddr_phrase+0x248>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    1438 <parseaddr_phrase+0x318>
mov    -0x3c(%rbp),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
jne    1433 <parseaddr_phrase+0x313>
jmp    1449 <parseaddr_phrase+0x329>
jmp    1438 <parseaddr_phrase+0x318>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1338 <parseaddr_phrase+0x218>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x20,(%rax)
jmp    14e4 <parseaddr_phrase+0x3c4>
cmpl   $0x0,-0x1c(%rbp)
je     1480 <parseaddr_phrase+0x360>
mov    -0x18(%rbp),%rdi
mov    -0x1c(%rbp),%esi
call   1030 <strchr@plt>
cmp    $0x0,%rax
je     14c9 <parseaddr_phrase+0x3a9>
mov    -0x30(%rbp),%rax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%rax
jbe    14ae <parseaddr_phrase+0x38e>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x20,%eax
jne    14ae <parseaddr_phrase+0x38e>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x1c(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret
mov    -0x1c(%rbp),%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    14e4 <parseaddr_phrase+0x3c4>
jmp    14e9 <parseaddr_phrase+0x3c9>
jmp    1266 <parseaddr_phrase+0x146>

x86 assembly (clang, -O2):
<parseaddr_phrase>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdx,%r12
mov    %rsi,%r15
mov    %rdi,(%rsp)
mov    (%rdi),%rbx
jmp    114b <parseaddr_phrase+0x2b>
nopw   0x0(%rax,%rax,1)
mov    %rcx,%rbx
add    $0xffffffffffffffff,%rbx
add    $0x1,%rbx
movsbl (%rbx),%edi
cmp    $0x28,%edi
je     1170 <parseaddr_phrase+0x50>
test   %dil,%dil
je     11c5 <parseaddr_phrase+0xa5>
call   1040 <isspace@plt>
test   %rax,%rax
jne    1147 <parseaddr_phrase+0x27>
jmp    11c5 <parseaddr_phrase+0xa5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rbx
mov    $0x1,%eax
mov    %rbx,%rcx
jmp    118a <parseaddr_phrase+0x6a>
xchg   %ax,%ax
add    $0xffffffff,%eax
mov    %rbx,%rcx
test   %eax,%eax
je     1143 <parseaddr_phrase+0x23>
movzbl (%rcx),%edx
test   %dl,%dl
je     1140 <parseaddr_phrase+0x20>
lea    0x1(%rcx),%rbx
cmp    $0x28,%dl
je     11c0 <parseaddr_phrase+0xa0>
cmp    $0x29,%dl
je     1180 <parseaddr_phrase+0x60>
cmp    $0x5c,%dl
jne    1183 <parseaddr_phrase+0x63>
cmpb   $0x0,0x1(%rcx)
je     1183 <parseaddr_phrase+0x63>
add    $0x2,%rcx
mov    %rcx,%rbx
jmp    1183 <parseaddr_phrase+0x63>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%eax
jmp    1183 <parseaddr_phrase+0x63>
mov    %rbx,(%r15)
mov    %rbx,%r14
jmp    11d7 <parseaddr_phrase+0xb7>
nopl   (%rax)
mov    %bpl,(%r14)
add    $0x1,%r14
add    $0x1,%rbx
nopl   0x0(%rax,%rax,1)
movzbl -0x1(%rbx),%ebp
cmp    $0x22,%ebp
jne    1230 <parseaddr_phrase+0x110>
movzbl (%rbx),%eax
add    $0x1,%rbx
test   %al,%al
je     11e0 <parseaddr_phrase+0xc0>
add    $0xffffffffffffffff,%rbx
mov    %rbx,%rcx
jmp    121c <parseaddr_phrase+0xfc>
nopl   (%rax)
movzbl (%rbx),%eax
test   %al,%al
je     11d7 <parseaddr_phrase+0xb7>
add    $0x2,%rcx
mov    %rcx,%rbx
mov    %al,(%r14)
add    $0x1,%r14
movzbl (%rbx),%eax
test   %al,%al
je     11d7 <parseaddr_phrase+0xb7>
lea    0x1(%rcx),%rbx
cmp    $0x5c,%al
je     1200 <parseaddr_phrase+0xe0>
cmp    $0x22,%al
je     11d7 <parseaddr_phrase+0xb7>
mov    %rbx,%rcx
jmp    120e <parseaddr_phrase+0xee>
nopl   (%rax)
mov    %ebp,%edi
call   1040 <isspace@plt>
test   %rax,%rax
jne    1270 <parseaddr_phrase+0x150>
cmp    $0x28,%bpl
je     1270 <parseaddr_phrase+0x150>
movsbl %bpl,%r13d
test   %bpl,%bpl
je     1305 <parseaddr_phrase+0x1e5>
mov    %r12,%rdi
mov    %r13d,%esi
call   1030 <strchr@plt>
test   %rax,%rax
je     11d0 <parseaddr_phrase+0xb0>
jmp    1305 <parseaddr_phrase+0x1e5>
nopl   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rbx
jmp    128b <parseaddr_phrase+0x16b>
cs nopw 0x0(%rax,%rax,1)
mov    %rcx,%rbx
add    $0xffffffffffffffff,%rbx
add    $0x1,%rbx
movsbl (%rbx),%edi
cmp    $0x28,%edi
je     12b0 <parseaddr_phrase+0x190>
mov    $0x20,%bpl
test   %dil,%dil
je     11d0 <parseaddr_phrase+0xb0>
call   1040 <isspace@plt>
test   %rax,%rax
jne    1287 <parseaddr_phrase+0x167>
jmp    11d0 <parseaddr_phrase+0xb0>
xchg   %ax,%ax
add    $0x1,%rbx
mov    $0x1,%eax
mov    %rbx,%rcx
jmp    12ca <parseaddr_phrase+0x1aa>
xchg   %ax,%ax
add    $0xffffffff,%eax
mov    %rbx,%rcx
test   %eax,%eax
je     1283 <parseaddr_phrase+0x163>
movzbl (%rcx),%edx
test   %dl,%dl
je     1280 <parseaddr_phrase+0x160>
lea    0x1(%rcx),%rbx
cmp    $0x28,%dl
je     1300 <parseaddr_phrase+0x1e0>
cmp    $0x29,%dl
je     12c0 <parseaddr_phrase+0x1a0>
cmp    $0x5c,%dl
jne    12c3 <parseaddr_phrase+0x1a3>
cmpb   $0x0,0x1(%rcx)
je     12c3 <parseaddr_phrase+0x1a3>
add    $0x2,%rcx
mov    %rcx,%rbx
jmp    12c3 <parseaddr_phrase+0x1a3>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%eax
jmp    12c3 <parseaddr_phrase+0x1a3>
cmp    (%r15),%r14
jbe    1317 <parseaddr_phrase+0x1f7>
lea    -0x1(%r14),%rax
cmpb   $0x20,-0x1(%r14)
cmove  %rax,%r14
movb   $0x0,(%r14)
mov    (%rsp),%rax
mov    %rbx,(%rax)
mov    %r13d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @parseaddr_phrase(i8** nocapture %0, i8** nocapture %1, i8* %2) {
%4 = load i8*, i8** %0
br label %5
5: ; preds = %37, %3
%6 = phi i8* [ %4, %3 ], [ %39, %37 ]
%7 = load i8, i8* %6
switch i8 %7, label %33 [
i8 0, label %40
i8 40, label %8
]
8: ; preds = %5
%9 = getelementptr inbounds i8, i8* %6, i64 1
br label %10
10: ; preds = %8, %26
%11 = phi i32 [ 1, %8 ], [ %28, %26 ]
%12 = phi i8* [ %9, %8 ], [ %27, %26 ]
%13 = load i8, i8* %12
%14 = icmp eq i8 %13, 0
br i1 %14, label %30, label %15
15: ; preds = %10
%16 = getelementptr inbounds i8, i8* %12, i64 1
switch i8 %13, label %26 [
i8 92, label %17
i8 40, label %22
i8 41, label %24
]
17: ; preds = %15
%18 = load i8, i8* %16
%19 = icmp eq i8 %18, 0
%20 = getelementptr inbounds i8, i8* %12, i64 2
%21 = select i1 %19, i8* %16, i8* %20
br label %26
22: ; preds = %15
%23 = add nsw i32 %11, 1
br label %26
24: ; preds = %15
%25 = add nsw i32 %11, -1
br label %26
26: ; preds = %17, %15, %22, %24
%27 = phi i8* [ %16, %22 ], [ %16, %24 ], [ %16, %15 ], [ %21, %17 ]
%28 = phi i32 [ %23, %22 ], [ %25, %24 ], [ %11, %15 ], [ %11, %17 ]
%29 = icmp eq i32 %28, 0
br i1 %29, label %30, label %10
30: ; preds = %26, %10
%31 = phi i8* [ %27, %26 ], [ %12, %10 ]
%32 = getelementptr inbounds i8, i8* %31, i64 -1
br label %37
33: ; preds = %5
%34 = sext i8 %7 to i32
%35 = tail call i64 @isspace(i32 %34)
%36 = icmp eq i64 %35, 0
br i1 %36, label %40, label %37
37: ; preds = %33, %30
%38 = phi i8* [ %32, %30 ], [ %6, %33 ]
%39 = getelementptr inbounds i8, i8* %38, i64 1
br label %5
40: ; preds = %5, %33
store i8* %6, i8** %1
br label %41
41: ; preds = %130, %40
%42 = phi i8* [ %6, %40 ], [ %131, %130 ]
%43 = phi i8* [ %6, %40 ], [ %132, %130 ]
br label %44
44: ; preds = %41, %49
%45 = phi i8* [ %46, %49 ], [ %42, %41 ]
%46 = getelementptr inbounds i8, i8* %45, i64 1
%47 = load i8, i8* %45
%48 = icmp eq i8 %47, 34
br i1 %48, label %49, label %68
49: ; preds = %44
%50 = load i8, i8* %46
%51 = icmp eq i8 %50, 0
br i1 %51, label %44, label %52
52: ; preds = %49, %62
%53 = phi i8 [ %66, %62 ], [ %50, %49 ]
%54 = phi i8* [ %65, %62 ], [ %43, %49 ]
%55 = phi i8* [ %64, %62 ], [ %46, %49 ]
%56 = getelementptr inbounds i8, i8* %55, i64 1
switch i8 %53, label %62 [
i8 34, label %130
i8 92, label %57
]
57: ; preds = %52
%58 = load i8, i8* %56
%59 = icmp eq i8 %58, 0
br i1 %59, label %130, label %60
60: ; preds = %57
%61 = getelementptr inbounds i8, i8* %55, i64 2
br label %62
62: ; preds = %52, %60
%63 = phi i8 [ %58, %60 ], [ %53, %52 ]
%64 = phi i8* [ %61, %60 ], [ %56, %52 ]
%65 = getelementptr inbounds i8, i8* %54, i64 1
store i8 %63, i8* %54
%66 = load i8, i8* %64
%67 = icmp eq i8 %66, 0
br i1 %67, label %130, label %52
68: ; preds = %44
%69 = sext i8 %47 to i32
%70 = zext i8 %47 to i32
%71 = tail call i64 @isspace(i32 %70)
%72 = icmp ne i64 %71, 0
%73 = icmp eq i8 %47, 40
%74 = select i1 %72, i1 true, i1 %73
br i1 %74, label %75, label %110
75: ; preds = %68, %107
%76 = phi i8* [ %109, %107 ], [ %45, %68 ]
%77 = load i8, i8* %76
switch i8 %77, label %103 [
i8 0, label %126
i8 40, label %78
]
78: ; preds = %75
%79 = getelementptr inbounds i8, i8* %76, i64 1
br label %80
80: ; preds = %78, %96
%81 = phi i32 [ 1, %78 ], [ %98, %96 ]
%82 = phi i8* [ %79, %78 ], [ %97, %96 ]
%83 = load i8, i8* %82
%84 = icmp eq i8 %83, 0
br i1 %84, label %100, label %85
85: ; preds = %80
%86 = getelementptr inbounds i8, i8* %82, i64 1
switch i8 %83, label %96 [
i8 92, label %87
i8 40, label %92
i8 41, label %94
]
87: ; preds = %85
%88 = load i8, i8* %86
%89 = icmp eq i8 %88, 0
%90 = getelementptr inbounds i8, i8* %82, i64 2
%91 = select i1 %89, i8* %86, i8* %90
br label %96
92: ; preds = %85
%93 = add nsw i32 %81, 1
br label %96
94: ; preds = %85
%95 = add nsw i32 %81, -1
br label %96
96: ; preds = %87, %85, %92, %94
%97 = phi i8* [ %86, %92 ], [ %86, %94 ], [ %86, %85 ], [ %91, %87 ]
%98 = phi i32 [ %93, %92 ], [ %95, %94 ], [ %81, %85 ], [ %81, %87 ]
%99 = icmp eq i32 %98, 0
br i1 %99, label %100, label %80
100: ; preds = %96, %80
%101 = phi i8* [ %97, %96 ], [ %82, %80 ]
%102 = getelementptr inbounds i8, i8* %101, i64 -1
br label %107
103: ; preds = %75
%104 = sext i8 %77 to i32
%105 = tail call i64 @isspace(i32 %104)
%106 = icmp eq i64 %105, 0
br i1 %106, label %126, label %107
107: ; preds = %103, %100
%108 = phi i8* [ %102, %100 ], [ %76, %103 ]
%109 = getelementptr inbounds i8, i8* %108, i64 1
br label %75
110: ; preds = %68
%111 = icmp eq i8 %47, 0
br i1 %111, label %115, label %112
112: ; preds = %110
%113 = tail call i64 @strchr(i8* %2, i32 %69)
%114 = icmp eq i64 %113, 0
br i1 %114, label %126, label %115
115: ; preds = %112, %110
%116 = load i8*, i8** %1
%117 = icmp ugt i8* %43, %116
br i1 %117, label %118, label %123
118: ; preds = %115
%119 = getelementptr inbounds i8, i8* %43, i64 -1
%120 = load i8, i8* %119
%121 = icmp eq i8 %120, 32
%122 = select i1 %121, i8* %119, i8* %43
br label %123
123: ; preds = %118, %115
%124 = phi i8* [ %43, %115 ], [ %122, %118 ]
%125 = sext i8 %47 to i32
store i8 0, i8* %124
store i8* %46, i8** %0
ret i32 %125
126: ; preds = %103, %75, %112
%127 = phi i8 [ %47, %112 ], [ 32, %75 ], [ 32, %103 ]
%128 = phi i8* [ %46, %112 ], [ %76, %75 ], [ %76, %103 ]
%129 = getelementptr inbounds i8, i8* %43, i64 1
store i8 %127, i8* %43
br label %130
130: ; preds = %52, %62, %57, %126
%131 = phi i8* [ %128, %126 ], [ %56, %57 ], [ %64, %62 ], [ %56, %52 ]
%132 = phi i8* [ %129, %126 ], [ %54, %57 ], [ %65, %62 ], [ %54, %52 ]
br label %41
}