int Tcl_ConvertCountedElement(src, length, dst, flags) const char *src;
int length;
char *dst;
int flags;
{
  char *p = dst;
  const char *lastChar;
  if (src && length == -1) {
    length = strlen(src);
  }
  if ((src == 0) || (length == 0)) {
    p[0] = '{';
    p[1] = '}';
    p[2] = 0;
    return 2;
  }
  lastChar = src + length;
  if ((flags & 2) && !(flags & 1)) {
    *p = '{';
    p++;
    for (; src != lastChar; src++, p++) {
      *p = *src;
    }
    *p = '}';
    p++;
  } else {
    if (*src == '{') {
      p[0] = '\\';
      p[1] = '{';
      p += 2;
      src++;
      flags |= 4;
    }
    for (; src != lastChar; src++) {
      switch (*src) {
      case ']':
      case '[':
      case '$':
      case ';':
      case ' ':
      case '\\':
      case '"':
        *p = '\\';
        p++;
        break;
      case '{':
      case '}':
        if (flags & 4) {
          *p = '\\';
          p++;
        }
        break;
      case '\f':
        *p = '\\';
        p++;
        *p = 'f';
        p++;
        continue;
      case '\n':
        *p = '\\';
        p++;
        *p = 'n';
        p++;
        continue;
      case '\r':
        *p = '\\';
        p++;
        *p = 'r';
        p++;
        continue;
      case '\t':
        *p = '\\';
        p++;
        *p = 't';
        p++;
        continue;
      case '\v':
        *p = '\\';
        p++;
        *p = 'v';
        p++;
        continue;
      }
      *p = *src;
      p++;
    }
  }
  *p = '\0';
  return p - dst;
}


x86 assembly (clang, -O0):
<Tcl_ConvertCountedElement>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     114f <Tcl_ConvertCountedElement+0x3f>
cmpl   $0xffffffff,-0x14(%rbp)
jne    114f <Tcl_ConvertCountedElement+0x3f>
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x14(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     1164 <Tcl_ConvertCountedElement+0x54>
cmpl   $0x0,-0x14(%rbp)
jne    1187 <Tcl_ConvertCountedElement+0x77>
mov    -0x30(%rbp),%rax
movb   $0x7b,(%rax)
mov    -0x30(%rbp),%rax
movb   $0x7d,0x1(%rax)
mov    -0x30(%rbp),%rax
movb   $0x0,0x2(%rax)
movl   $0x2,-0x4(%rbp)
jmp    13ef <Tcl_ConvertCountedElement+0x2df>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x24(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1216 <Tcl_ConvertCountedElement+0x106>
mov    -0x24(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    1216 <Tcl_ConvertCountedElement+0x106>
mov    -0x30(%rbp),%rax
movb   $0x7b,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x38(%rbp),%rax
je     11fe <Tcl_ConvertCountedElement+0xee>
mov    -0x10(%rbp),%rax
mov    (%rax),%cl
mov    -0x30(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11c7 <Tcl_ConvertCountedElement+0xb7>
mov    -0x30(%rbp),%rax
movb   $0x7d,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13da <Tcl_ConvertCountedElement+0x2ca>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7b,%eax
jne    1256 <Tcl_ConvertCountedElement+0x146>
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
movb   $0x7b,0x1(%rax)
mov    -0x30(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x24(%rbp)
jmp    125b <Tcl_ConvertCountedElement+0x14b>
mov    -0x10(%rbp),%rax
cmp    -0x38(%rbp),%rax
je     13d5 <Tcl_ConvertCountedElement+0x2c5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
add    $0xfffffff7,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x74,%eax
ja     13ac <Tcl_ConvertCountedElement+0x29c>
mov    -0x40(%rbp),%rax
lea    0xd73(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13ac <Tcl_ConvertCountedElement+0x29c>
mov    -0x24(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     12d0 <Tcl_ConvertCountedElement+0x1c0>
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13ac <Tcl_ConvertCountedElement+0x29c>
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x66,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13c4 <Tcl_ConvertCountedElement+0x2b4>
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x6e,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13c4 <Tcl_ConvertCountedElement+0x2b4>
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x72,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13c4 <Tcl_ConvertCountedElement+0x2b4>
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x74,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13c4 <Tcl_ConvertCountedElement+0x2b4>
mov    -0x30(%rbp),%rax
movb   $0x5c,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x76,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13c4 <Tcl_ConvertCountedElement+0x2b4>
mov    -0x10(%rbp),%rax
mov    (%rax),%cl
mov    -0x30(%rbp),%rax
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    125b <Tcl_ConvertCountedElement+0x14b>
jmp    13da <Tcl_ConvertCountedElement+0x2ca>
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x30(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Tcl_ConvertCountedElement>:
push   %rbp
push   %r14
push   %rbx
mov    %ecx,%ebp
mov    %rdx,%r14
mov    %rdi,%rbx
test   %rdi,%rdi
je     1131 <Tcl_ConvertCountedElement+0x21>
cmp    $0xffffffff,%esi
jne    1131 <Tcl_ConvertCountedElement+0x21>
mov    %rbx,%rdi
call   1030 <strlen@plt>
mov    %rax,%rsi
test   %rbx,%rbx
je     11a0 <Tcl_ConvertCountedElement+0x90>
test   %esi,%esi
je     11a0 <Tcl_ConvertCountedElement+0x90>
movslq %esi,%r8
lea    (%rbx,%r8,1),%r10
mov    %ebp,%eax
and    $0x3,%eax
cmp    $0x2,%eax
jne    11b5 <Tcl_ConvertCountedElement+0xa5>
movb   $0x7b,(%r14)
lea    0x1(%r14),%rdx
cmp    $0x20,%esi
jb     131e <Tcl_ConvertCountedElement+0x20e>
cmp    %r10,%rdx
jae    1172 <Tcl_ConvertCountedElement+0x62>
lea    (%r8,%r14,1),%rax
add    $0x1,%rax
cmp    %rbx,%rax
ja     131e <Tcl_ConvertCountedElement+0x20e>
mov    %r8,%rax
and    $0xffffffffffffffe0,%rax
lea    -0x20(%rax),%rdi
mov    %rdi,%rsi
shr    $0x5,%rsi
add    $0x1,%rsi
mov    %esi,%r9d
and    $0x3,%r9d
cmp    $0x60,%rdi
jae    125b <Tcl_ConvertCountedElement+0x14b>
xor    %edi,%edi
jmp    12d1 <Tcl_ConvertCountedElement+0x1c1>
movw   $0x7d7b,(%r14)
movb   $0x0,0x2(%r14)
mov    $0x2,%eax
jmp    13c7 <Tcl_ConvertCountedElement+0x2b7>
cmpb   $0x7b,(%rbx)
jne    11d7 <Tcl_ConvertCountedElement+0xc7>
movw   $0x7b5c,(%r14)
lea    0x2(%r14),%rax
add    $0x1,%rbx
mov    $0x4,%ebp
cmp    %r10,%rbx
jne    11e3 <Tcl_ConvertCountedElement+0xd3>
jmp    13c1 <Tcl_ConvertCountedElement+0x2b1>
mov    %r14,%rax
cmp    %r10,%rbx
je     13c1 <Tcl_ConvertCountedElement+0x2b1>
lea    0xe16(%rip),%rdx
jmp    1211 <Tcl_ConvertCountedElement+0x101>
movw   $0x765c,(%rax)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x2,%rax
add    $0x1,%rbx
cmp    %r10,%rbx
je     13c1 <Tcl_ConvertCountedElement+0x2b1>
movsbl (%rbx),%esi
add    $0xfffffff7,%esi
cmp    $0x74,%esi
ja     122c <Tcl_ConvertCountedElement+0x11c>
movslq (%rdx,%rsi,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movb   $0x5c,(%rax)
add    $0x1,%rax
movzbl (%rbx),%ecx
mov    %cl,(%rax)
add    $0x1,%rax
jmp    1204 <Tcl_ConvertCountedElement+0xf4>
test   $0x4,%bpl
jne    1225 <Tcl_ConvertCountedElement+0x115>
jmp    122c <Tcl_ConvertCountedElement+0x11c>
movw   $0x745c,(%rax)
jmp    1200 <Tcl_ConvertCountedElement+0xf0>
movw   $0x6e5c,(%rax)
jmp    1200 <Tcl_ConvertCountedElement+0xf0>
movw   $0x665c,(%rax)
jmp    1200 <Tcl_ConvertCountedElement+0xf0>
movw   $0x725c,(%rax)
jmp    1200 <Tcl_ConvertCountedElement+0xf0>
and    $0xfffffffffffffffc,%rsi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups (%rbx,%rdi,1),%xmm0
movups 0x10(%rbx,%rdi,1),%xmm1
movups %xmm0,0x1(%r14,%rdi,1)
movups %xmm1,0x11(%r14,%rdi,1)
movups 0x20(%rbx,%rdi,1),%xmm0
movups 0x30(%rbx,%rdi,1),%xmm1
movups %xmm0,0x21(%r14,%rdi,1)
movups %xmm1,0x31(%r14,%rdi,1)
movups 0x40(%rbx,%rdi,1),%xmm0
movups 0x50(%rbx,%rdi,1),%xmm1
movups %xmm0,0x41(%r14,%rdi,1)
movups %xmm1,0x51(%r14,%rdi,1)
movups 0x60(%rbx,%rdi,1),%xmm0
movups 0x70(%rbx,%rdi,1),%xmm1
movups %xmm0,0x61(%r14,%rdi,1)
movups %xmm1,0x71(%r14,%rdi,1)
sub    $0xffffffffffffff80,%rdi
add    $0xfffffffffffffffc,%rsi
jne    1270 <Tcl_ConvertCountedElement+0x160>
test   %r9,%r9
je     130b <Tcl_ConvertCountedElement+0x1fb>
lea    (%rdi,%rbx,1),%rsi
add    $0x10,%rsi
add    %r14,%rdi
add    $0x11,%rdi
shl    $0x5,%r9
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
movups -0x10(%rsi,%rbp,1),%xmm0
movups (%rsi,%rbp,1),%xmm1
movups %xmm0,-0x10(%rdi,%rbp,1)
movups %xmm1,(%rdi,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%r9
jne    12f0 <Tcl_ConvertCountedElement+0x1e0>
add    %rax,%rdx
cmp    %r8,%rax
jne    131b <Tcl_ConvertCountedElement+0x20b>
add    %r14,%rax
jmp    13ba <Tcl_ConvertCountedElement+0x2aa>
add    %rax,%rbx
mov    %r10d,%eax
sub    %ebx,%eax
mov    %rbx,%rsi
not    %rsi
add    %r10,%rsi
and    $0x7,%rax
je     135f <Tcl_ConvertCountedElement+0x24f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rbx),%ecx
mov    %cl,(%rdx)
add    $0x1,%rbx
add    $0x1,%rdx
add    $0xffffffffffffffff,%rax
jne    1340 <Tcl_ConvertCountedElement+0x230>
lea    -0x1(%rdx),%rax
cmp    $0x7,%rsi
jae    1370 <Tcl_ConvertCountedElement+0x260>
jmp    13ba <Tcl_ConvertCountedElement+0x2aa>
cmp    $0x7,%rsi
jb     13ba <Tcl_ConvertCountedElement+0x2aa>
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rbx),%eax
mov    %al,(%rdx)
movzbl 0x1(%rbx),%eax
mov    %al,0x1(%rdx)
movzbl 0x2(%rbx),%eax
mov    %al,0x2(%rdx)
movzbl 0x3(%rbx),%eax
mov    %al,0x3(%rdx)
movzbl 0x4(%rbx),%eax
mov    %al,0x4(%rdx)
movzbl 0x5(%rbx),%eax
mov    %al,0x5(%rdx)
movzbl 0x6(%rbx),%eax
mov    %al,0x6(%rdx)
movzbl 0x7(%rbx),%eax
mov    %al,0x7(%rdx)
add    $0x8,%rdx
add    $0x8,%rbx
cmp    %r10,%rbx
jne    1370 <Tcl_ConvertCountedElement+0x260>
mov    %rdx,%rax
add    $0xffffffffffffffff,%rax
movb   $0x7d,(%rdx)
add    $0x2,%rax
movb   $0x0,(%rax)
sub    %r14d,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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