int name_length(const unsigned char *encoded, const unsigned char *abuf,
                int alen) {
  int n = 0, offset, indir = 0;
  if (encoded == abuf + alen)
    return -1;
  while (*encoded) {
    if ((*encoded & 0xc0) == 0xc0) {
      if (encoded + 1 >= abuf + alen)
        return -1;
      offset = (*encoded & ~0xc0) << 8 | *(encoded + 1);
      if (offset >= alen)
        return -1;
      encoded = abuf + offset;
      if (++indir > alen)
        return -1;
    } else {
      offset = *encoded;
      if (encoded + offset + 1 >= abuf + alen)
        return -1;
      encoded++;
      while (offset--) {
        n += (*encoded == '.' || *encoded == '\\') ? 2 : 1;
        encoded++;
      }
      n++;
    }
  }
  return (n) ? n - 1 : n;
}


x86 assembly (clang, -O0):
<name_length>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
add    %rdx,%rcx
cmp    %rcx,%rax
jne    1141 <name_length+0x41>
movl   $0xffffffff,-0x4(%rbp)
jmp    12d2 <name_length+0x1d2>
jmp    1146 <name_length+0x46>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     12ae <name_length+0x1ae>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
and    $0xc0,%eax
cmp    $0xc0,%eax
jne    11f8 <name_length+0xf8>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    -0x18(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
add    %rdx,%rcx
cmp    %rcx,%rax
jb     1192 <name_length+0x92>
movl   $0xffffffff,-0x4(%rbp)
jmp    12d2 <name_length+0x1d2>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
and    $0xffffff3f,%eax
shl    $0x8,%eax
mov    -0x10(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
or     %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jl     11c6 <name_length+0xc6>
movl   $0xffffffff,-0x4(%rbp)
jmp    12d2 <name_length+0x1d2>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmp    -0x1c(%rbp),%eax
jle    11f3 <name_length+0xf3>
movl   $0xffffffff,-0x4(%rbp)
jmp    12d2 <name_length+0x1d2>
jmp    12a9 <name_length+0x1a9>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
add    %rcx,%rax
add    $0x1,%rax
mov    -0x18(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
add    %rdx,%rcx
cmp    %rcx,%rax
jb     1231 <name_length+0x131>
movl   $0xffffffff,-0x4(%rbp)
jmp    12d2 <name_length+0x1d2>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
je     12a0 <name_length+0x1a0>
mov    -0x10(%rbp),%rax
movzbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x2e,%ecx
mov    %al,-0x29(%rbp)
je     1276 <name_length+0x176>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5c,%eax
sete   %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%dl
mov    $0x1,%eax
mov    $0x2,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    123d <name_length+0x13d>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1146 <name_length+0x46>
cmpl   $0x0,-0x20(%rbp)
je     12c6 <name_length+0x1c6>
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    12cc <name_length+0x1cc>
mov    -0x20(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<name_length>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
movslq %edx,%r9
add    %rsi,%r9
mov    $0xffffffff,%eax
cmp    %rdi,%r9
je     13fb <name_length+0x2fb>
mov    (%rdi),%cl
test   %cl,%cl
je     13f9 <name_length+0x2f9>
xor    %r8d,%r8d
movdqa 0xece(%rip),%xmm10
movdqa 0xed6(%rip),%xmm1
movdqa 0xede(%rip),%xmm2
pcmpeqd %xmm8,%xmm8
movdqa 0xee0(%rip),%xmm9
xor    %r15d,%r15d
jmp    1175 <name_length+0x75>
cs nopw 0x0(%rax,%rax,1)
nop
add    %r10,%rdi
add    $0x2,%rdi
add    $0x1,%r15d
mov    (%rdi),%cl
test   %cl,%cl
je     13f0 <name_length+0x2f0>
movzbl %cl,%r12d
mov    %r12d,%ecx
not    %ecx
test   $0xc0,%cl
jne    11c0 <name_length+0xc0>
add    $0x1,%rdi
cmp    %r9,%rdi
jae    13fb <name_length+0x2fb>
and    $0x3f,%r12d
shl    $0x8,%r12
movzbl (%rdi),%edi
or     %r12,%rdi
cmp    %edx,%edi
jge    13fb <name_length+0x2fb>
cmp    %edx,%r8d
jge    13fb <name_length+0x2fb>
add    %rsi,%rdi
add    $0x1,%r8d
jmp    116b <name_length+0x6b>
nopl   0x0(%rax,%rax,1)
mov    %r12d,%ecx
add    %rdi,%rcx
add    $0x1,%rcx
cmp    %r9,%rcx
jae    13fb <name_length+0x2fb>
lea    -0x1(%r12),%r10d
cmp    $0x7,%r10d
jae    11f0 <name_length+0xf0>
mov    %rdi,%r14
jmp    13a5 <name_length+0x2a5>
cs nopw 0x0(%rax,%rax,1)
lea    0x1(%r10),%r14
mov    %r14,%r11
and    $0xfffffffffffffff8,%r11
movd   %r15d,%xmm5
lea    -0x8(%r11),%rcx
mov    %rcx,%r15
shr    $0x3,%r15
add    $0x1,%r15
test   %rcx,%rcx
je     13de <name_length+0x2de>
mov    %r15,%rcx
and    $0xfffffffffffffffe,%rcx
pxor   %xmm6,%xmm6
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
movd   0x1(%rdi,%rbx,1),%xmm4
movd   0x5(%rdi,%rbx,1),%xmm0
movdqa %xmm4,%xmm3
pcmpeqb %xmm10,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
movdqa %xmm0,%xmm7
pcmpeqb %xmm10,%xmm7
punpcklbw %xmm7,%xmm7
punpcklwd %xmm7,%xmm7
pcmpeqb %xmm1,%xmm4
punpcklbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm4
por    %xmm3,%xmm4
pcmpeqb %xmm1,%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
por    %xmm7,%xmm0
pand   %xmm2,%xmm4
paddd  %xmm5,%xmm4
pand   %xmm2,%xmm0
paddd  %xmm6,%xmm0
movd   0x9(%rdi,%rbx,1),%xmm5
movdqa %xmm5,%xmm3
pcmpeqb %xmm10,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
pcmpeqb %xmm1,%xmm5
punpcklbw %xmm5,%xmm5
punpcklwd %xmm5,%xmm5
por    %xmm3,%xmm5
pand   %xmm2,%xmm5
movd   0xd(%rdi,%rbx,1),%xmm6
movdqa %xmm6,%xmm3
pcmpeqb %xmm10,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
pcmpeqb %xmm1,%xmm6
punpcklbw %xmm6,%xmm6
punpcklwd %xmm6,%xmm6
por    %xmm3,%xmm6
pand   %xmm2,%xmm6
paddd  %xmm9,%xmm5
paddd  %xmm4,%xmm5
paddd  %xmm9,%xmm6
paddd  %xmm0,%xmm6
add    $0x10,%rbx
add    $0xfffffffffffffffe,%rcx
jne    1230 <name_length+0x130>
test   $0x1,%r15b
je     137a <name_length+0x27a>
movd   0x1(%rdi,%rbx,1),%xmm3
movd   0x5(%rdi,%rbx,1),%xmm7
movdqa %xmm3,%xmm0
pcmpeqb %xmm10,%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
movdqa %xmm7,%xmm4
pcmpeqb %xmm10,%xmm4
punpcklbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm4
pcmpeqb %xmm1,%xmm3
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
por    %xmm0,%xmm3
pcmpeqb %xmm1,%xmm7
punpcklbw %xmm7,%xmm7
punpcklwd %xmm7,%xmm7
por    %xmm4,%xmm7
pand   %xmm2,%xmm3
paddd  %xmm5,%xmm3
pand   %xmm2,%xmm7
paddd  %xmm6,%xmm7
psubd  %xmm8,%xmm3
psubd  %xmm8,%xmm7
movdqa %xmm3,%xmm5
movdqa %xmm7,%xmm6
paddd  %xmm6,%xmm5
pshufd $0xee,%xmm5,%xmm0
paddd  %xmm5,%xmm0
pshufd $0x55,%xmm0,%xmm3
paddd  %xmm0,%xmm3
movd   %xmm3,%r15d
cmp    %r11,%r14
je     1160 <name_length+0x60>
lea    (%rdi,%r11,1),%r14
sub    %r11d,%r12d
mov    %r12d,%r11d
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
movzbl 0x1(%r14,%rcx,1),%ebx
cmp    $0x2e,%bl
sete   %bpl
cmp    $0x5c,%bl
sete   %bl
or     %bpl,%bl
movzbl %bl,%ebx
add    %ebx,%r15d
add    $0x1,%r15d
add    $0x1,%rcx
cmp    %ecx,%r11d
jne    13b0 <name_length+0x2b0>
jmp    1160 <name_length+0x60>
pxor   %xmm6,%xmm6
xor    %ebx,%ebx
test   $0x1,%r15b
jne    130a <name_length+0x20a>
jmp    137a <name_length+0x27a>
sub    $0x1,%r15d
mov    %r15d,%eax
jae    13fb <name_length+0x2fb>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @name_length(i8* %0, i8* %1, i32 %2) {
%4 = sext i32 %2 to i64
%5 = getelementptr inbounds i8, i8* %1, i64 %4
%6 = icmp eq i8* %5, %0
br i1 %6, label %162, label %7
7: ; preds = %3
%8 = load i8, i8* %0
%9 = icmp eq i8 %8, 0
br i1 %9, label %161, label %10
10: ; preds = %7, %152
%11 = phi i8 [ %156, %152 ], [ %8, %7 ]
%12 = phi i32 [ %155, %152 ], [ 0, %7 ]
%13 = phi i32 [ %154, %152 ], [ 0, %7 ]
%14 = phi i8* [ %153, %152 ], [ %0, %7 ]
%15 = zext i8 %11 to i32
%16 = and i32 %15, 192
%17 = icmp eq i32 %16, 192
br i1 %17, label %18, label %33
18: ; preds = %10
%19 = getelementptr inbounds i8, i8* %14, i64 1
%20 = icmp ult i8* %19, %5
br i1 %20, label %21, label %162
21: ; preds = %18
%22 = shl nuw nsw i32 %15, 8
%23 = and i32 %22, 16128
%24 = load i8, i8* %19
%25 = zext i8 %24 to i32
%26 = or i32 %23, %25
%27 = icmp slt i32 %26, %2
%28 = zext i32 %26 to i64
%29 = getelementptr inbounds i8, i8* %1, i64 %28
%30 = add nsw i32 %12, 1
%31 = icmp slt i32 %12, %2
%32 = select i1 %27, i1 %31, i1 false
br i1 %32, label %152, label %162
33: ; preds = %10
%34 = zext i8 %11 to i64
%35 = getelementptr inbounds i8, i8* %14, i64 1
%36 = getelementptr inbounds i8, i8* %35, i64 %34
%37 = icmp ult i8* %36, %5
br i1 %37, label %38, label %162
38: ; preds = %33
%39 = add nsw i32 %15, -1
%40 = zext i32 %39 to i64
%41 = add nuw nsw i64 %40, 1
%42 = icmp ult i32 %39, 7
br i1 %42, label %130, label %43
43: ; preds = %38
%44 = and i64 %41, 8589934584
%45 = getelementptr i8, i8* %14, i64 %44
%46 = trunc i64 %44 to i32
%47 = sub i32 %15, %46
%48 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %13, i64 0
%49 = add nsw i64 %44, -8
%50 = lshr exact i64 %49, 3
%51 = add nuw nsw i64 %50, 1
%52 = and i64 %51, 1
%53 = icmp eq i64 %49, 0
br i1 %53, label %99, label %54
54: ; preds = %43
%55 = and i64 %51, 4611686018427387902
%56 = getelementptr i8, i8* %14, i64 1
%57 = getelementptr i8, i8* %14, i64 1
br label %58
58: ; preds = %58, %54
%59 = phi i64 [ 0, %54 ], [ %96, %58 ]
%60 = phi <4 x i32> [ %48, %54 ], [ %94, %58 ]
%61 = phi <4 x i32> [ zeroinitializer, %54 ], [ %95, %58 ]
%62 = phi i64 [ 0, %54 ], [ %97, %58 ]
%63 = getelementptr inbounds i8, i8* %56, i64 %59
%64 = bitcast i8* %63 to <4 x i8>*
%65 = load <4 x i8>, <4 x i8>* %64
%66 = getelementptr inbounds i8, i8* %63, i64 4
%67 = bitcast i8* %66 to <4 x i8>*
%68 = load <4 x i8>, <4 x i8>* %67
%69 = icmp eq <4 x i8> %65, <i8 46, i8 46, i8 46, i8 46>
%70 = icmp eq <4 x i8> %68, <i8 46, i8 46, i8 46, i8 46>
%71 = icmp eq <4 x i8> %65, <i8 92, i8 92, i8 92, i8 92>
%72 = icmp eq <4 x i8> %68, <i8 92, i8 92, i8 92, i8 92>
%73 = or <4 x i1> %69, %71
%74 = or <4 x i1> %70, %72
%75 = select <4 x i1> %73, <4 x i32> <i32 2, i32 2, i32 2, i32 2>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
%76 = select <4 x i1> %74, <4 x i32> <i32 2, i32 2, i32 2, i32 2>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
%77 = add <4 x i32> %75, %60
%78 = add <4 x i32> %76, %61
%79 = or i64 %59, 8
%80 = getelementptr inbounds i8, i8* %57, i64 %79
%81 = bitcast i8* %80 to <4 x i8>*
%82 = load <4 x i8>, <4 x i8>* %81
%83 = getelementptr inbounds i8, i8* %80, i64 4
%84 = bitcast i8* %83 to <4 x i8>*
%85 = load <4 x i8>, <4 x i8>* %84
%86 = icmp eq <4 x i8> %82, <i8 46, i8 46, i8 46, i8 46>
%87 = icmp eq <4 x i8> %85, <i8 46, i8 46, i8 46, i8 46>
%88 = icmp eq <4 x i8> %82, <i8 92, i8 92, i8 92, i8 92>
%89 = icmp eq <4 x i8> %85, <i8 92, i8 92, i8 92, i8 92>
%90 = or <4 x i1> %86, %88
%91 = or <4 x i1> %87, %89
%92 = select <4 x i1> %90, <4 x i32> <i32 2, i32 2, i32 2, i32 2>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
%93 = select <4 x i1> %91, <4 x i32> <i32 2, i32 2, i32 2, i32 2>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
%94 = add <4 x i32> %92, %77
%95 = add <4 x i32> %93, %78
%96 = add nuw i64 %59, 16
%97 = add i64 %62, 2
%98 = icmp eq i64 %97, %55
br i1 %98, label %99, label %58
99: ; preds = %58, %43
%100 = phi <4 x i32> [ undef, %43 ], [ %94, %58 ]
%101 = phi <4 x i32> [ undef, %43 ], [ %95, %58 ]
%102 = phi i64 [ 0, %43 ], [ %96, %58 ]
%103 = phi <4 x i32> [ %48, %43 ], [ %94, %58 ]
%104 = phi <4 x i32> [ zeroinitializer, %43 ], [ %95, %58 ]
%105 = icmp eq i64 %52, 0
br i1 %105, label %124, label %106
106: ; preds = %99
%107 = getelementptr i8, i8* %14, i64 1
%108 = getelementptr inbounds i8, i8* %107, i64 %102
%109 = bitcast i8* %108 to <4 x i8>*
%110 = load <4 x i8>, <4 x i8>* %109
%111 = getelementptr inbounds i8, i8* %108, i64 4
%112 = bitcast i8* %111 to <4 x i8>*
%113 = load <4 x i8>, <4 x i8>* %112
%114 = icmp eq <4 x i8> %110, <i8 46, i8 46, i8 46, i8 46>
%115 = icmp eq <4 x i8> %113, <i8 46, i8 46, i8 46, i8 46>
%116 = icmp eq <4 x i8> %110, <i8 92, i8 92, i8 92, i8 92>
%117 = icmp eq <4 x i8> %113, <i8 92, i8 92, i8 92, i8 92>
%118 = or <4 x i1> %114, %116
%119 = or <4 x i1> %115, %117
%120 = select <4 x i1> %118, <4 x i32> <i32 2, i32 2, i32 2, i32 2>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
%121 = select <4 x i1> %119, <4 x i32> <i32 2, i32 2, i32 2, i32 2>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
%122 = add <4 x i32> %120, %103
%123 = add <4 x i32> %121, %104
br label %124
124: ; preds = %99, %106
%125 = phi <4 x i32> [ %100, %99 ], [ %122, %106 ]
%126 = phi <4 x i32> [ %101, %99 ], [ %123, %106 ]
%127 = add <4 x i32> %126, %125
%128 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %127)
%129 = icmp eq i64 %41, %44
br i1 %129, label %147, label %130
130: ; preds = %38, %124
%131 = phi i8* [ %14, %38 ], [ %45, %124 ]
%132 = phi i32 [ %15, %38 ], [ %47, %124 ]
%133 = phi i32 [ %13, %38 ], [ %128, %124 ]
br label %134
134: ; preds = %130, %134
%135 = phi i8* [ %138, %134 ], [ %131, %130 ]
%136 = phi i32 [ %139, %134 ], [ %132, %130 ]
%137 = phi i32 [ %145, %134 ], [ %133, %130 ]
%138 = getelementptr inbounds i8, i8* %135, i64 1
%139 = add nsw i32 %136, -1
%140 = load i8, i8* %138
%141 = icmp eq i8 %140, 46
%142 = icmp eq i8 %140, 92
%143 = or i1 %141, %142
%144 = select i1 %143, i32 2, i32 1
%145 = add nsw i32 %144, %137
%146 = icmp eq i32 %139, 0
br i1 %146, label %147, label %134
147: ; preds = %134, %124
%148 = phi i32 [ %128, %124 ], [ %145, %134 ]
%149 = getelementptr i8, i8* %14, i64 2
%150 = getelementptr i8, i8* %149, i64 %40
%151 = add nsw i32 %148, 1
br label %152
152: ; preds = %21, %147
%153 = phi i8* [ %150, %147 ], [ %29, %21 ]
%154 = phi i32 [ %151, %147 ], [ %13, %21 ]
%155 = phi i32 [ %12, %147 ], [ %30, %21 ]
%156 = load i8, i8* %153
%157 = icmp eq i8 %156, 0
br i1 %157, label %158, label %10
158: ; preds = %152
%159 = icmp eq i32 %154, 0
%160 = add nsw i32 %154, -1
br i1 %159, label %161, label %162
161: ; preds = %7, %158
br label %162
162: ; preds = %33, %21, %18, %161, %158, %3
%163 = phi i32 [ -1, %3 ], [ 0, %161 ], [ %160, %158 ], [ -1, %18 ], [ -1, %21 ], [ -1, %33 ]
ret i32 %163
}