char *MDparseline(char *line, char *limit, char **targ, char **tool) {
  char *next;
  *targ = 0;
  *tool = 0;
  next = line;
  while (next < limit && *next == ' ') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  if ((*next == '\n')) {
    return ++next;
  }
  if (*next == '#') {
    while (next < limit && *next != '\n') {
      next++;
    };
    if ((next >= limit)) {
      return 0;
    }
    if ((*next == '\n')) {
      return ++next;
    }
  }
  *targ = next;
  while (next < limit && *next != ':' && *next != '\n') {
    next++;
  };
  if (*next != ':')
    return 0;
  next++;
  while (next < limit && *next == ' ') {
    next++;
  };
  while (next < limit && *next != '#' && *next != '\n') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  if ((*next == '\n')) {
    return ++next;
  }
  if (*++next != ':')
    return 0;
  next++;
  while (next < limit && *next == ' ') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  if ((*next == '\n')) {
    return ++next;
  }
  *tool = next;
  while (next < limit && *next != '\n') {
    next++;
  };
  if ((next >= limit)) {
    return 0;
  }
  return ++next;
}


x86 assembly (clang, -O0):
<MDparseline>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movq   $0x0,(%rax)
mov    -0x28(%rbp),%rax
movq   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x31(%rbp)
jae    1155 <MDparseline+0x55>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
sete   %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    1165 <MDparseline+0x65>
jmp    1176 <MDparseline+0x76>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1132 <MDparseline+0x32>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     1191 <MDparseline+0x91>
movq   $0x0,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    11b6 <MDparseline+0xb6>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    %rax,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    1254 <MDparseline+0x154>
jmp    11cb <MDparseline+0xcb>
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x32(%rbp)
jae    11ee <MDparseline+0xee>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x32(%rbp)
mov    -0x32(%rbp),%al
test   $0x1,%al
jne    11fe <MDparseline+0xfe>
jmp    120f <MDparseline+0x10f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11cb <MDparseline+0xcb>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     122a <MDparseline+0x12a>
movq   $0x0,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    124f <MDparseline+0x14f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    %rax,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
jmp    1254 <MDparseline+0x154>
mov    -0x30(%rbp),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x33(%rbp)
jae    1297 <MDparseline+0x197>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x3a,%ecx
mov    %al,-0x33(%rbp)
je     1297 <MDparseline+0x197>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x33(%rbp)
mov    -0x33(%rbp),%al
test   $0x1,%al
jne    12a7 <MDparseline+0x1a7>
jmp    12b8 <MDparseline+0x1b8>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    125f <MDparseline+0x15f>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
je     12d5 <MDparseline+0x1d5>
movq   $0x0,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x34(%rbp)
jae    1304 <MDparseline+0x204>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
sete   %al
mov    %al,-0x34(%rbp)
mov    -0x34(%rbp),%al
test   $0x1,%al
jne    1314 <MDparseline+0x214>
jmp    1325 <MDparseline+0x225>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    12e1 <MDparseline+0x1e1>
jmp    132a <MDparseline+0x22a>
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x35(%rbp)
jae    1362 <MDparseline+0x262>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x23,%ecx
mov    %al,-0x35(%rbp)
je     1362 <MDparseline+0x262>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1372 <MDparseline+0x272>
jmp    1383 <MDparseline+0x283>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    132a <MDparseline+0x22a>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     139e <MDparseline+0x29e>
movq   $0x0,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    13c3 <MDparseline+0x2c3>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    %rax,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbl 0x1(%rax),%eax
cmp    $0x3a,%eax
je     13ec <MDparseline+0x2ec>
movq   $0x0,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x36(%rbp)
jae    141b <MDparseline+0x31b>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
sete   %al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
test   $0x1,%al
jne    142b <MDparseline+0x32b>
jmp    143c <MDparseline+0x33c>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13f8 <MDparseline+0x2f8>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     1457 <MDparseline+0x357>
movq   $0x0,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    147c <MDparseline+0x37c>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    %rax,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x37(%rbp)
jae    14aa <MDparseline+0x3aa>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x37(%rbp)
mov    -0x37(%rbp),%al
test   $0x1,%al
jne    14ba <MDparseline+0x3ba>
jmp    14cb <MDparseline+0x3cb>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1487 <MDparseline+0x387>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     14e6 <MDparseline+0x3e6>
movq   $0x0,-0x8(%rbp)
jmp    14f6 <MDparseline+0x3f6>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<MDparseline>:
movq   $0x0,(%rdx)
movq   $0x0,(%rcx)
cmp    %rsi,%rdi
jae    1287 <MDparseline+0x187>
mov    %rsi,%r8
sub    %rdi,%r8
xor    %eax,%eax
nop
movzbl (%rdi),%r9d
cmp    $0x20,%r9b
jne    1138 <MDparseline+0x38>
add    $0x1,%rdi
add    $0xffffffffffffffff,%r8
cmp    %rsi,%rdi
jne    1120 <MDparseline+0x20>
ret
cmp    $0xa,%r9b
je     1249 <MDparseline+0x149>
cmp    $0x23,%r9b
jne    1179 <MDparseline+0x79>
cmp    %rsi,%rdi
jae    1287 <MDparseline+0x187>
mov    $0x1,%ecx
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
cmp    %rcx,%r8
je     1137 <MDparseline+0x37>
lea    0x1(%rcx),%rdx
cmpb   $0xa,(%rdi,%rcx,1)
mov    %rdx,%rcx
jne    1160 <MDparseline+0x60>
add    %rdx,%rdi
mov    %rdi,%rax
ret
mov    %rdi,(%rdx)
cmp    %rsi,%rdi
jae    11a8 <MDparseline+0xa8>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%rdi),%eax
cmp    $0xa,%al
je     11aa <MDparseline+0xaa>
cmp    $0x3a,%al
je     11aa <MDparseline+0xaa>
add    $0x1,%rdi
add    $0xffffffffffffffff,%r8
jne    1190 <MDparseline+0x90>
mov    %rsi,%rdi
mov    (%rdi),%al
cmp    $0x3a,%al
jne    1287 <MDparseline+0x187>
lea    0x1(%rdi),%r8
xor    %eax,%eax
xor    %r9d,%r9d
nopl   0x0(%rax,%rax,1)
lea    (%r8,%r9,1),%rdx
cmp    %rsi,%rdx
jae    1137 <MDparseline+0x37>
add    $0x1,%r9
cmpb   $0x20,(%rdx)
je     11c0 <MDparseline+0xc0>
mov    %rsi,%r8
sub    %rdi,%r8
xor    %eax,%eax
xchg   %ax,%ax
movzbl (%rdi,%r9,1),%edx
cmp    $0xa,%dl
je     11fd <MDparseline+0xfd>
cmp    $0x23,%dl
je     1206 <MDparseline+0x106>
add    $0x1,%r9
cmp    %r9,%r8
jne    11e0 <MDparseline+0xe0>
jmp    1137 <MDparseline+0x37>
lea    (%rdi,%r9,1),%rax
add    $0x1,%rax
ret
xor    %eax,%eax
cmpb   $0x3a,0x1(%rdi,%r9,1)
jne    1137 <MDparseline+0x37>
add    %r9,%rdi
add    $0x2,%rdi
cmp    %rsi,%rdi
jae    1137 <MDparseline+0x37>
sub    %r9,%r8
add    $0xfffffffffffffffd,%r8
xor    %eax,%eax
movzbl (%rdi),%edx
cmp    $0x20,%dl
jne    1244 <MDparseline+0x144>
add    $0x1,%rdi
add    $0xffffffffffffffff,%r8
jb     122d <MDparseline+0x12d>
jmp    1137 <MDparseline+0x37>
cmp    $0xa,%dl
jne    1251 <MDparseline+0x151>
add    $0x1,%rdi
mov    %rdi,%rax
ret
mov    %rdi,(%rcx)
cmp    %rsi,%rdi
jae    1287 <MDparseline+0x187>
mov    $0x1,%cl
cmpb   $0xa,(%rdi)
je     1293 <MDparseline+0x193>
lea    (%r8,%rdi,1),%rcx
add    $0x1,%rcx
add    $0x1,%rdi
mov    %rdi,%rax
test   %r8,%r8
je     128a <MDparseline+0x18a>
lea    0x1(%rax),%rdi
add    $0xffffffffffffffff,%r8
cmpb   $0xa,(%rax)
jne    126c <MDparseline+0x16c>
add    $0xffffffffffffffff,%rdi
jmp    128d <MDparseline+0x18d>
xor    %eax,%eax
ret
mov    %rcx,%rdi
cmp    %rsi,%rax
setb   %cl
add    $0x1,%rdi
xor    %eax,%eax
test   %cl,%cl
cmovne %rdi,%rax
ret

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

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