#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 */
struct confline {
  int dummy;
};
struct cnfnode {
  int dummy;
};
typedef int /*<<< orphan*/ buf;

/* Variables and functions */
struct confline *_skip_spaces(struct confline *, char const **);
int /*<<< orphan*/ append_node(struct cnfnode *, struct cnfnode *);
int /*<<< orphan*/ cnfnode_setval(struct cnfnode *, char *);
struct cnfnode *create_cnfnode(char *);
scalar_t__ isalnum(char const);
int /*<<< orphan*/ isspace(char const);
struct confline *next_char(struct confline *, char const **);
struct confline *parse_syslogng_items(struct cnfnode *cn_top,
                                      struct confline *cl, const char **pp) {
  struct cnfnode *cn;
  char buf[256], *q;
  const char *p = *pp;
  while (1) {
    q = buf;
    while (*p && (isalnum(*p) || (*p == '_') || (*p == '-')))
      *q++ = *p++;
    *q = 0;
    append_node(cn_top, cn = create_cnfnode(buf));
    cl = _skip_spaces(cl, &p);
    if (*p == '(') {
      p++;
      cl = _skip_spaces(cl, &p);
      q = buf;
      if ((*p == '\"' || *p == '\'') && (p[-1] != '\\')) {
        char qc = *p;
        *q++ = *p++;
        while (*p && ((*p != qc) || (p[-1] == '\\')) &&
               q < buf + sizeof(buf) - 1) {
          *q++ = *p;
          cl = next_char(cl, &p);
        }
        if (*p == qc)
          *q++ = *p++;
      } else {
        while (*p && !isspace(*p) && *p != '(' && *p != ')' &&
               q < buf + sizeof(buf) - 1) {
          *q++ = *p;
          cl = next_char(cl, &p);
        }
      }
      *q = 0;
      cl = _skip_spaces(cl, &p);
      if (*p == ')')
        p++;
      cnfnode_setval(cn, buf);
      cl = _skip_spaces(cl, &p);
    }
    if (*p == ')') {
      p++;
      break;
    }
  }
  *pp = p;
  return cl;
}


x86 assembly (clang, -O0):
<parse_syslogng_items>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x130(%rbp)
lea    -0x120(%rbp),%rax
mov    %rax,-0x128(%rbp)
mov    -0x130(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x132(%rbp)
je     121f <parse_syslogng_items+0xaf>
mov    -0x130(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isalnum@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x133(%rbp)
jne    1213 <parse_syslogng_items+0xa3>
mov    -0x130(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x5f,%ecx
mov    %al,-0x133(%rbp)
je     1213 <parse_syslogng_items+0xa3>
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
sete   %al
mov    %al,-0x133(%rbp)
mov    -0x133(%rbp),%al
mov    %al,-0x132(%rbp)
mov    -0x132(%rbp),%al
test   $0x1,%al
jne    1232 <parse_syslogng_items+0xc2>
jmp    1265 <parse_syslogng_items+0xf5>
mov    -0x130(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x130(%rbp)
mov    (%rax),%cl
mov    -0x128(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x128(%rbp)
mov    %cl,(%rax)
jmp    11a3 <parse_syslogng_items+0x33>
mov    -0x128(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x8(%rbp),%rax
mov    %rax,-0x140(%rbp)
lea    -0x120(%rbp),%rdi
call   1090 <create_cnfnode@plt>
mov    -0x140(%rbp),%rdi
mov    %rax,%rsi
mov    %rsi,-0x20(%rbp)
call   1040 <append_node@plt>
mov    -0x10(%rbp),%rdi
lea    -0x130(%rbp),%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,-0x10(%rbp)
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
jne    15cd <parse_syslogng_items+0x45d>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x10(%rbp),%rdi
lea    -0x130(%rbp),%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,-0x10(%rbp)
lea    -0x120(%rbp),%rax
mov    %rax,-0x128(%rbp)
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
je     131a <parse_syslogng_items+0x1aa>
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
jne    1478 <parse_syslogng_items+0x308>
mov    -0x130(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x5c,%eax
je     1478 <parse_syslogng_items+0x308>
mov    -0x130(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x131(%rbp)
mov    -0x130(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x130(%rbp)
mov    (%rax),%cl
mov    -0x128(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x128(%rbp)
mov    %cl,(%rax)
mov    -0x130(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x141(%rbp)
je     13e0 <parse_syslogng_items+0x270>
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x131(%rbp),%ecx
cmp    %ecx,%eax
jne    13bb <parse_syslogng_items+0x24b>
mov    -0x130(%rbp),%rax
movsbl -0x1(%rax),%ecx
xor    %eax,%eax
cmp    $0x5c,%ecx
mov    %al,-0x141(%rbp)
jne    13e0 <parse_syslogng_items+0x270>
mov    -0x128(%rbp),%rax
lea    -0x120(%rbp),%rcx
add    $0x100,%rcx
add    $0xffffffffffffffff,%rcx
cmp    %rcx,%rax
setb   %al
mov    %al,-0x141(%rbp)
mov    -0x141(%rbp),%al
test   $0x1,%al
jne    13f3 <parse_syslogng_items+0x283>
jmp    142c <parse_syslogng_items+0x2bc>
mov    -0x130(%rbp),%rax
mov    (%rax),%cl
mov    -0x128(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x128(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rdi
lea    -0x130(%rbp),%rsi
call   1030 <next_char@plt>
mov    %rax,-0x10(%rbp)
jmp    136b <parse_syslogng_items+0x1fb>
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x131(%rbp),%ecx
cmp    %ecx,%eax
jne    1473 <parse_syslogng_items+0x303>
mov    -0x130(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x130(%rbp)
mov    (%rax),%cl
mov    -0x128(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x128(%rbp)
mov    %cl,(%rax)
jmp    1566 <parse_syslogng_items+0x3f6>
jmp    147d <parse_syslogng_items+0x30d>
mov    -0x130(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x142(%rbp)
je     1515 <parse_syslogng_items+0x3a5>
mov    -0x130(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isspace@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x142(%rbp)
jne    1515 <parse_syslogng_items+0x3a5>
mov    -0x130(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x28,%ecx
mov    %al,-0x142(%rbp)
je     1515 <parse_syslogng_items+0x3a5>
mov    -0x130(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x29,%ecx
mov    %al,-0x142(%rbp)
je     1515 <parse_syslogng_items+0x3a5>
mov    -0x128(%rbp),%rax
lea    -0x120(%rbp),%rcx
add    $0x100,%rcx
add    $0xffffffffffffffff,%rcx
cmp    %rcx,%rax
setb   %al
mov    %al,-0x142(%rbp)
mov    -0x142(%rbp),%al
test   $0x1,%al
jne    1528 <parse_syslogng_items+0x3b8>
jmp    1561 <parse_syslogng_items+0x3f1>
mov    -0x130(%rbp),%rax
mov    (%rax),%cl
mov    -0x128(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x128(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rdi
lea    -0x130(%rbp),%rsi
call   1030 <next_char@plt>
mov    %rax,-0x10(%rbp)
jmp    147d <parse_syslogng_items+0x30d>
jmp    1566 <parse_syslogng_items+0x3f6>
mov    -0x128(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
lea    -0x130(%rbp),%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,-0x10(%rbp)
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
jne    15a9 <parse_syslogng_items+0x439>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x20(%rbp),%rdi
lea    -0x120(%rbp),%rsi
call   1080 <cnfnode_setval@plt>
mov    -0x10(%rbp),%rdi
lea    -0x130(%rbp),%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,-0x10(%rbp)
mov    -0x130(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
jne    15f7 <parse_syslogng_items+0x487>
mov    -0x130(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
jmp    15fc <parse_syslogng_items+0x48c>
jmp    1195 <parse_syslogng_items+0x25>
mov    -0x130(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse_syslogng_items>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x128,%rsp
mov    %rsi,%rbp
mov    %rdi,%r14
mov    %rdx,0x10(%rsp)
mov    (%rdx),%rax
mov    %rax,0x8(%rsp)
mov    (%rax),%al
lea    0x20(%rsp),%r15
lea    0x8(%rsp),%r13
mov    %rdi,0x18(%rsp)
jmp    11dd <parse_syslogng_items+0x6d>
nopw   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %r15,%rsi
call   1080 <cnfnode_setval@plt>
mov    %rbp,%rdi
mov    %r13,%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,%rbp
mov    0x8(%rsp),%rcx
mov    (%rcx),%al
mov    0x18(%rsp),%r14
cmp    $0x29,%al
je     13d8 <parse_syslogng_items+0x268>
mov    %r15,%rbx
test   %al,%al
je     1230 <parse_syslogng_items+0xc0>
mov    %r15,%rbx
jmp    120a <parse_syslogng_items+0x9a>
nopl   0x0(%rax)
lea    0x1(%rcx),%rax
mov    %rax,0x8(%rsp)
movzbl (%rcx),%eax
mov    %al,(%rbx)
add    $0x1,%rbx
movzbl 0x1(%rcx),%eax
test   %al,%al
je     1230 <parse_syslogng_items+0xc0>
movsbl %al,%edi
call   1050 <isalnum@plt>
mov    0x8(%rsp),%rcx
test   %rax,%rax
jne    11f0 <parse_syslogng_items+0x80>
movzbl (%rcx),%eax
cmp    $0x5f,%al
je     11f0 <parse_syslogng_items+0x80>
cmp    $0x2d,%al
je     11f0 <parse_syslogng_items+0x80>
nopw   0x0(%rax,%rax,1)
movb   $0x0,(%rbx)
mov    %r15,%rdi
call   1090 <create_cnfnode@plt>
mov    %rax,%rbx
mov    %r14,%rdi
mov    %rax,%rsi
call   1040 <append_node@plt>
mov    %rbp,%rdi
mov    %r13,%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,%rbp
mov    0x8(%rsp),%rcx
mov    (%rcx),%al
cmp    $0x28,%al
jne    11d5 <parse_syslogng_items+0x65>
add    $0x1,%rcx
mov    %rcx,0x8(%rsp)
mov    %rbp,%rdi
mov    %r13,%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,%rbp
mov    0x8(%rsp),%rcx
mov    (%rcx),%r14b
test   %r14b,%r14b
je     1379 <parse_syslogng_items+0x209>
cmp    $0x27,%r14b
je     129a <parse_syslogng_items+0x12a>
cmp    $0x22,%r14b
jne    12a0 <parse_syslogng_items+0x130>
cmpb   $0x5c,-0x1(%rcx)
jne    1313 <parse_syslogng_items+0x1a3>
mov    %r15,%r12
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsbl %r14b,%edi
call   1060 <isspace@plt>
test   %eax,%eax
jne    13a0 <parse_syslogng_items+0x230>
mov    0x8(%rsp),%rax
movzbl (%rax),%eax
cmp    $0x28,%al
je     13a0 <parse_syslogng_items+0x230>
cmp    $0x29,%al
je     13a0 <parse_syslogng_items+0x230>
lea    0x11f(%rsp),%rcx
cmp    %rcx,%r12
jae    13a0 <parse_syslogng_items+0x230>
mov    %al,(%r12)
add    $0x1,%r12
mov    %rbp,%rdi
mov    %r13,%rsi
call   1030 <next_char@plt>
mov    %rax,%rbp
mov    0x8(%rsp),%rax
movzbl (%rax),%r14d
test   %r14b,%r14b
jne    12b0 <parse_syslogng_items+0x140>
jmp    13a0 <parse_syslogng_items+0x230>
lea    0x1(%rcx),%rax
mov    %rax,0x8(%rsp)
mov    (%rcx),%dl
mov    %dl,0x20(%rsp)
mov    0x1(%rcx),%cl
test   %cl,%cl
je     137e <parse_syslogng_items+0x20e>
lea    0x21(%rsp),%r12
jmp    135f <parse_syslogng_items+0x1ef>
lea    0x11f(%rsp),%rdx
cmp    %rdx,%r12
jae    1385 <parse_syslogng_items+0x215>
mov    %cl,(%r12)
add    $0x1,%r12
mov    %rbp,%rdi
mov    %r13,%rsi
call   1030 <next_char@plt>
mov    %rax,%rbp
mov    0x8(%rsp),%rax
movzbl (%rax),%ecx
test   %cl,%cl
je     13cf <parse_syslogng_items+0x25f>
cmp    %r14b,%cl
jne    1330 <parse_syslogng_items+0x1c0>
cmpb   $0x5c,-0x1(%rax)
jne    138a <parse_syslogng_items+0x21a>
lea    0x11f(%rsp),%rdx
cmp    %rdx,%r12
jb     133d <parse_syslogng_items+0x1cd>
jmp    138a <parse_syslogng_items+0x21a>
mov    %r15,%r12
jmp    13a0 <parse_syslogng_items+0x230>
xor    %ecx,%ecx
lea    0x21(%rsp),%r12
cmp    %r14b,%cl
jne    13a0 <parse_syslogng_items+0x230>
lea    0x1(%rax),%rcx
mov    %rcx,0x8(%rsp)
mov    (%rax),%al
mov    %al,(%r12)
add    $0x1,%r12
nopl   (%rax)
movb   $0x0,(%r12)
mov    %rbp,%rdi
mov    %r13,%rsi
call   1070 <_skip_spaces@plt>
mov    %rax,%rbp
mov    0x8(%rsp),%rax
cmpb   $0x29,(%rax)
jne    11b0 <parse_syslogng_items+0x40>
add    $0x1,%rax
mov    %rax,0x8(%rsp)
jmp    11b0 <parse_syslogng_items+0x40>
xor    %ecx,%ecx
cmp    %r14b,%cl
je     138a <parse_syslogng_items+0x21a>
jmp    13a0 <parse_syslogng_items+0x230>
add    $0x1,%rcx
mov    0x10(%rsp),%rax
mov    %rcx,(%rax)
mov    %rbp,%rax
add    $0x128,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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