#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 */
char *malloc(int);
char *read_config_description(char **config, int two) {
  char *p, *v, *value;
  int length = 0;
  p = *config;
  while ((!two && *p == '#') || (two && *p == '#' && *(p + 1) == '#')) {
    p++;
    if (two)
      p++;
    if (*p == ' ')
      p++;
    while (*p != '\r' && *p != '\n') {
      p++;
      length++;
    }
    while (*p == '\r' || *p == '\n')
      p++;
    length++;
    while (*p == ' ' || *p == '\t')
      p++;
  }
  value = malloc(length + 1);
  v = value;
  p = *config;
  while ((!two && *p == '#') || (two && *p == '#' && *(p + 1) == '#')) {
    p++;
    if (two)
      p++;
    if (*p == ' ')
      p++;
    while (*p != '\r' && *p != '\n') {
      *(v++) = *(p++);
    }
    while (*p == '\r' || *p == '\n')
      p++;
    *(v++) = '\n';
    while (*p == ' ' || *p == '\t')
      p++;
  }
  *v = 0;
  *config = p;
  return value;
}


x86 assembly (clang, -O0):
<read_config_description>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0xc(%rbp)
jne    1150 <read_config_description+0x40>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x23,%ecx
mov    %al,-0x2d(%rbp)
je     118b <read_config_description+0x7b>
xor    %eax,%eax
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0x2e(%rbp)
je     1185 <read_config_description+0x75>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x23,%ecx
mov    %al,-0x2e(%rbp)
jne    1185 <read_config_description+0x75>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x23,%eax
sete   %al
mov    %al,-0x2e(%rbp)
mov    -0x2e(%rbp),%al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    119b <read_config_description+0x8b>
jmp    12cc <read_config_description+0x1bc>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0xc(%rbp)
je     11bd <read_config_description+0xad>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    11d9 <read_config_description+0xc9>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    11de <read_config_description+0xce>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x2f(%rbp)
je     1203 <read_config_description+0xf3>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x2f(%rbp)
mov    -0x2f(%rbp),%al
test   $0x1,%al
jne    1213 <read_config_description+0x103>
jmp    122d <read_config_description+0x11d>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11de <read_config_description+0xce>
jmp    1232 <read_config_description+0x122>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x30(%rbp)
je     1257 <read_config_description+0x147>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
sete   %al
mov    %al,-0x30(%rbp)
mov    -0x30(%rbp),%al
test   $0x1,%al
jne    1267 <read_config_description+0x157>
jmp    1278 <read_config_description+0x168>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1232 <read_config_description+0x122>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x31(%rbp)
je     12a6 <read_config_description+0x196>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    12b6 <read_config_description+0x1a6>
jmp    12c7 <read_config_description+0x1b7>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1281 <read_config_description+0x171>
jmp    1131 <read_config_description+0x21>
mov    -0x2c(%rbp),%edi
add    $0x1,%edi
call   1030 <malloc@plt>
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0xc(%rbp)
jne    130d <read_config_description+0x1fd>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x23,%ecx
mov    %al,-0x32(%rbp)
je     1348 <read_config_description+0x238>
xor    %eax,%eax
cmpl   $0x0,-0xc(%rbp)
mov    %al,-0x33(%rbp)
je     1342 <read_config_description+0x232>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x23,%ecx
mov    %al,-0x33(%rbp)
jne    1342 <read_config_description+0x232>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x23,%eax
sete   %al
mov    %al,-0x33(%rbp)
mov    -0x33(%rbp),%al
mov    %al,-0x32(%rbp)
mov    -0x32(%rbp),%al
test   $0x1,%al
jne    1358 <read_config_description+0x248>
jmp    149f <read_config_description+0x38f>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0xc(%rbp)
je     137a <read_config_description+0x26a>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1396 <read_config_description+0x286>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    139b <read_config_description+0x28b>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x34(%rbp)
je     13c0 <read_config_description+0x2b0>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x34(%rbp)
mov    -0x34(%rbp),%al
test   $0x1,%al
jne    13d0 <read_config_description+0x2c0>
jmp    13f7 <read_config_description+0x2e7>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
jmp    139b <read_config_description+0x28b>
jmp    13fc <read_config_description+0x2ec>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x35(%rbp)
je     1421 <read_config_description+0x311>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
sete   %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1431 <read_config_description+0x321>
jmp    1442 <read_config_description+0x332>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    13fc <read_config_description+0x2ec>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0xa,(%rax)
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x36(%rbp)
je     1479 <read_config_description+0x369>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
test   $0x1,%al
jne    1489 <read_config_description+0x379>
jmp    149a <read_config_description+0x38a>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1454 <read_config_description+0x344>
jmp    12ee <read_config_description+0x1de>
mov    -0x20(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x18(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<read_config_description>:
push   %rbp
push   %r14
push   %rbx
mov    %esi,%ebp
mov    %rdi,%r14
mov    (%rdi),%rbx
xor    %edi,%edi
mov    %rbx,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%rax),%dl
test   %ebp,%ebp
je     1150 <read_config_description+0x40>
cmp    $0x23,%dl
jne    11c7 <read_config_description+0xb7>
mov    $0x2,%ecx
cmpb   $0x23,0x1(%rax)
je     115a <read_config_description+0x4a>
jmp    11c7 <read_config_description+0xb7>
nopl   0x0(%rax)
mov    $0x1,%ecx
cmp    $0x23,%dl
jne    11c7 <read_config_description+0xb7>
xor    %edx,%edx
cmpb   $0x20,(%rax,%rcx,1)
lea    (%rax,%rcx,1),%rax
sete   %dl
add    %rax,%rdx
add    $0x1,%edi
mov    %rdx,%rax
movzbl (%rax),%ecx
cmp    $0xd,%cl
je     1198 <read_config_description+0x88>
cmp    $0xa,%cl
je     1198 <read_config_description+0x88>
add    $0x1,%rax
add    $0x1,%edi
jmp    1170 <read_config_description+0x60>
cs nopw 0x0(%rax,%rax,1)
movzbl 0x1(%rax),%ecx
add    $0x1,%rax
cmp    $0xa,%cl
je     1190 <read_config_description+0x80>
cmp    $0xd,%cl
je     1190 <read_config_description+0x80>
jmp    11b8 <read_config_description+0xa8>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl 0x1(%rax),%ecx
add    $0x1,%rax
cmp    $0x20,%cl
je     11b0 <read_config_description+0xa0>
cmp    $0x9,%cl
je     11b0 <read_config_description+0xa0>
jmp    1130 <read_config_description+0x20>
add    $0x1,%edi
call   1030 <malloc@plt>
mov    %rax,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%rbx),%sil
test   %ebp,%ebp
je     1210 <read_config_description+0x100>
cmp    $0x23,%sil
jne    1296 <read_config_description+0x186>
mov    $0x2,%edx
cmpb   $0x23,0x1(%rbx)
je     121b <read_config_description+0x10b>
jmp    1296 <read_config_description+0x186>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    $0x1,%edx
cmp    $0x23,%sil
jne    1296 <read_config_description+0x186>
xor    %esi,%esi
cmpb   $0x20,(%rbx,%rdx,1)
lea    (%rbx,%rdx,1),%rdx
sete   %sil
add    %rdx,%rsi
add    $0x1,%rcx
mov    %rsi,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rbx),%edx
cmp    $0xd,%dl
je     1268 <read_config_description+0x158>
cmp    $0xa,%dl
je     1268 <read_config_description+0x158>
add    $0x1,%rbx
mov    %dl,-0x1(%rcx)
add    $0x1,%rcx
jmp    1240 <read_config_description+0x130>
nopw   0x0(%rax,%rax,1)
movzbl 0x1(%rbx),%edx
add    $0x1,%rbx
cmp    $0xd,%dl
je     1260 <read_config_description+0x150>
cmp    $0xa,%dl
je     1260 <read_config_description+0x150>
movb   $0xa,-0x1(%rcx)
jmp    1284 <read_config_description+0x174>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbx
movzbl (%rbx),%edx
cmp    $0x20,%dl
je     1280 <read_config_description+0x170>
cmp    $0x9,%dl
je     1280 <read_config_description+0x170>
jmp    11e0 <read_config_description+0xd0>
movb   $0x0,(%rcx)
mov    %rbx,(%r14)
pop    %rbx
pop    %r14
pop    %rbp
ret

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

LLVM IR (-O2):
define noalias i8* @read_config_description(i8** nocapture %0, i32 %1) {
%3 = load i8*, i8** %0
%4 = icmp eq i32 %1, 0
br label %7
5: ; preds = %39
%6 = add nsw i32 %27, 1
br label %7
7: ; preds = %5, %2
%8 = phi i8* [ %3, %2 ], [ %41, %5 ]
%9 = phi i32 [ 0, %2 ], [ %6, %5 ]
%10 = load i8, i8* %8
%11 = icmp eq i8 %10, 35
br i1 %4, label %12, label %13
12: ; preds = %7
br i1 %11, label %18, label %45
13: ; preds = %7
br i1 %11, label %14, label %45
14: ; preds = %13
%15 = getelementptr inbounds i8, i8* %8, i64 1
%16 = load i8, i8* %15
%17 = icmp eq i8 %16, 35
br i1 %17, label %18, label %45
18: ; preds = %12, %14
%19 = phi i64 [ 1, %12 ], [ 2, %14 ]
%20 = getelementptr inbounds i8, i8* %8, i64 %19
%21 = load i8, i8* %20
%22 = icmp eq i8 %21, 32
%23 = zext i1 %22 to i64
%24 = getelementptr i8, i8* %20, i64 %23
br label %25
25: ; preds = %30, %18
%26 = phi i8* [ %24, %18 ], [ %31, %30 ]
%27 = phi i32 [ %9, %18 ], [ %32, %30 ]
%28 = load i8, i8* %26
switch i8 %28, label %30 [
i8 13, label %29
i8 10, label %29
]
29: ; preds = %25, %25
br label %33
30: ; preds = %25
%31 = getelementptr inbounds i8, i8* %26, i64 1
%32 = add nsw i32 %27, 1
br label %25
33: ; preds = %29, %36
%34 = phi i8 [ %38, %36 ], [ %28, %29 ]
%35 = phi i8* [ %37, %36 ], [ %26, %29 ]
switch i8 %34, label %39 [
i8 13, label %36
i8 10, label %36
]
36: ; preds = %33, %33
%37 = getelementptr inbounds i8, i8* %35, i64 1
%38 = load i8, i8* %37
br label %33
39: ; preds = %33, %42
%40 = phi i8 [ %44, %42 ], [ %34, %33 ]
%41 = phi i8* [ %43, %42 ], [ %35, %33 ]
switch i8 %40, label %5 [
i8 32, label %42
i8 9, label %42
]
42: ; preds = %39, %39
%43 = getelementptr inbounds i8, i8* %41, i64 1
%44 = load i8, i8* %43
br label %39
45: ; preds = %12, %13, %14
%46 = add nsw i32 %9, 1
%47 = tail call i8* @malloc(i32 %46)
br label %50
48: ; preds = %83
%49 = getelementptr inbounds i8, i8* %69, i64 1
br label %50
50: ; preds = %48, %45
%51 = phi i8* [ %47, %45 ], [ %49, %48 ]
%52 = phi i8* [ %3, %45 ], [ %84, %48 ]
%53 = load i8, i8* %52
%54 = icmp eq i8 %53, 35
br i1 %4, label %55, label %56
55: ; preds = %50
br i1 %54, label %61, label %88
56: ; preds = %50
br i1 %54, label %57, label %88
57: ; preds = %56
%58 = getelementptr inbounds i8, i8* %52, i64 1
%59 = load i8, i8* %58
%60 = icmp eq i8 %59, 35
br i1 %60, label %61, label %88
61: ; preds = %55, %57
%62 = phi i64 [ 1, %55 ], [ 2, %57 ]
%63 = getelementptr inbounds i8, i8* %52, i64 %62
%64 = load i8, i8* %63
%65 = icmp eq i8 %64, 32
%66 = zext i1 %65 to i64
%67 = getelementptr i8, i8* %63, i64 %66
br label %68
68: ; preds = %73, %61
%69 = phi i8* [ %51, %61 ], [ %75, %73 ]
%70 = phi i8* [ %67, %61 ], [ %74, %73 ]
%71 = load i8, i8* %70
switch i8 %71, label %73 [
i8 13, label %72
i8 10, label %72
]
72: ; preds = %68, %68
br label %76
73: ; preds = %68
%74 = getelementptr inbounds i8, i8* %70, i64 1
%75 = getelementptr inbounds i8, i8* %69, i64 1
store i8 %71, i8* %69
br label %68
76: ; preds = %72, %79
%77 = phi i8 [ %81, %79 ], [ %71, %72 ]
%78 = phi i8* [ %80, %79 ], [ %70, %72 ]
switch i8 %77, label %82 [
i8 13, label %79
i8 10, label %79
]
79: ; preds = %76, %76
%80 = getelementptr inbounds i8, i8* %78, i64 1
%81 = load i8, i8* %80
br label %76
82: ; preds = %76
store i8 10, i8* %69
br label %83
83: ; preds = %86, %82
%84 = phi i8* [ %78, %82 ], [ %87, %86 ]
%85 = load i8, i8* %84
switch i8 %85, label %48 [
i8 32, label %86
i8 9, label %86
]
86: ; preds = %83, %83
%87 = getelementptr inbounds i8, i8* %84, i64 1
br label %83
88: ; preds = %55, %56, %57
store i8 0, i8* %51
store i8* %52, i8** %0
ret i8* %47
}