int token_next_from_string(char *dst, char *src, int *index, int max) {
  int i, j;
  i = (*index);
  for (; src[i] == ' ' || src[i] == '\t' || src[i] == '\n' || src[i] == '\r';
       i++)
    ;
  (*index) = i;
  if (src[i] == '\0')
    return (0);
  if (src[i] == '\"') {
    for (j = 0, i++; src[i] != '\"' && src[i] != '\0'; i++) {
      if (j < max - 1)
        dst[j++] = src[i];
    }
    dst[j] = '\0';
    if (src[i] == '\"')
      i++;
  } else {
    for (j = 0; src[i] != ' ' && src[i] != '\t' && src[i] != '\n' &&
                src[i] != '\r' && src[i] != '\0';
         i++)
      if (j < max - 1)
        dst[j++] = src[i];
    dst[j] = '\0';
  }
  for (; src[i] == ' ' || src[i] == '\t' || src[i] == '\n' || src[i] == '\r';
       i++)
    ;
  (*index) = i;
  return (-1);
}


x86 assembly (clang, -O0):
<token_next_from_string>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x2d(%rbp)
je     117f <token_next_from_string+0x7f>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x2d(%rbp)
je     117f <token_next_from_string+0x7f>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x2d(%rbp)
je     117f <token_next_from_string+0x7f>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
sete   %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    118f <token_next_from_string+0x8f>
jmp    11a2 <token_next_from_string+0xa2>
jmp    1194 <token_next_from_string+0x94>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    111c <token_next_from_string+0x1c>
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    11cc <token_next_from_string+0xcc>
movl   $0x0,-0x4(%rbp)
jmp    1422 <token_next_from_string+0x322>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    12a3 <token_next_from_string+0x1a3>
movl   $0x0,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x22,%ecx
mov    %al,-0x2e(%rbp)
je     1220 <token_next_from_string+0x120>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x2e(%rbp)
mov    -0x2e(%rbp),%al
test   $0x1,%al
jne    1230 <token_next_from_string+0x130>
jmp    1274 <token_next_from_string+0x174>
mov    -0x2c(%rbp),%eax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1261 <token_next_from_string+0x161>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x2c(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1266 <token_next_from_string+0x166>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11f1 <token_next_from_string+0xf1>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    129e <token_next_from_string+0x19e>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1387 <token_next_from_string+0x287>
movl   $0x0,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x2f(%rbp)
je     1327 <token_next_from_string+0x227>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x9,%ecx
mov    %al,-0x2f(%rbp)
je     1327 <token_next_from_string+0x227>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x2f(%rbp)
je     1327 <token_next_from_string+0x227>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x2f(%rbp)
je     1327 <token_next_from_string+0x227>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x2f(%rbp)
mov    -0x2f(%rbp),%al
test   $0x1,%al
jne    1337 <token_next_from_string+0x237>
jmp    137b <token_next_from_string+0x27b>
mov    -0x2c(%rbp),%eax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1368 <token_next_from_string+0x268>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x2c(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    136d <token_next_from_string+0x26d>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12aa <token_next_from_string+0x1aa>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    138c <token_next_from_string+0x28c>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x30(%rbp)
je     13ef <token_next_from_string+0x2ef>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x30(%rbp)
je     13ef <token_next_from_string+0x2ef>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x30(%rbp)
je     13ef <token_next_from_string+0x2ef>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
sete   %al
mov    %al,-0x30(%rbp)
mov    -0x30(%rbp),%al
test   $0x1,%al
jne    13ff <token_next_from_string+0x2ff>
jmp    1412 <token_next_from_string+0x312>
jmp    1404 <token_next_from_string+0x304>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    138c <token_next_from_string+0x28c>
mov    -0x28(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<token_next_from_string>:
push   %rbx
movslq (%rdx),%r9
lea    (%rsi,%r9,1),%rax
mov    %r9,%r10
shl    $0x20,%r10
movabs $0x100002600,%r8
movabs $0x100000000,%r11
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rax),%ebx
cmp    $0x20,%rbx
ja     114c <token_next_from_string+0x4c>
bt     %rbx,%r8
jae    114c <token_next_from_string+0x4c>
add    $0x1,%rax
add    $0x1,%r9d
add    %r11,%r10
jmp    1130 <token_next_from_string+0x30>
mov    %r9d,(%rdx)
mov    (%rax),%al
test   %al,%al
je     1193 <token_next_from_string+0x93>
add    $0xffffffff,%ecx
sar    $0x20,%r10
xor    %r9d,%r9d
cmp    $0x22,%al
jne    1197 <token_next_from_string+0x97>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl 0x1(%rsi,%r10,1),%eax
test   %al,%al
je     11d6 <token_next_from_string+0xd6>
cmp    $0x22,%al
je     11d6 <token_next_from_string+0xd6>
add    $0x1,%r10
cmp    %ecx,%r9d
jge    1170 <token_next_from_string+0x70>
mov    %r9d,%ebx
add    $0x1,%r9d
mov    %al,(%rdi,%rbx,1)
jmp    1170 <token_next_from_string+0x70>
xor    %eax,%eax
pop    %rbx
ret
movabs $0x100002601,%r11
jmp    11b4 <token_next_from_string+0xb4>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r10
movzbl (%rsi,%r10,1),%eax
cmp    $0x20,%rax
ja     11c5 <token_next_from_string+0xc5>
bt     %rax,%r11
jb     11f1 <token_next_from_string+0xf1>
cmp    %ecx,%r9d
jge    11b0 <token_next_from_string+0xb0>
movslq %r9d,%rbx
add    $0x1,%r9d
mov    %al,(%rdi,%rbx,1)
jmp    11b0 <token_next_from_string+0xb0>
mov    %r9d,%eax
movb   $0x0,(%rdi,%rax,1)
xor    %eax,%eax
cmpb   $0x22,0x1(%rsi,%r10,1)
sete   %al
add    %rax,%r10
add    $0x1,%r10
jmp    11f8 <token_next_from_string+0xf8>
movslq %r9d,%rax
movb   $0x0,(%rdi,%rax,1)
movslq %r10d,%rax
add    %rax,%rsi
xchg   %ax,%ax
movzbl (%rsi),%eax
cmp    $0x20,%rax
ja     1219 <token_next_from_string+0x119>
bt     %rax,%r8
jae    1219 <token_next_from_string+0x119>
add    $0x1,%r10d
add    $0x1,%rsi
jmp    1200 <token_next_from_string+0x100>
mov    %r10d,(%rdx)
mov    $0xffffffff,%eax
pop    %rbx
ret

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

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