char *TclWordEnd(start, lastChar, nested, semiPtr)
char *start;
char *lastChar;
int nested;
int *semiPtr;
{
  register char *p;
  int count;
  if (semiPtr != 0) {
    *semiPtr = 0;
  }
  for (p = start;; p++) {
    if (isspace(((unsigned char)(*p)))) {
      continue;
    }
    if ((p[0] == '\\') && (p[1] == '\n')) {
      if (p + 2 == lastChar) {
        return p + 2;
      }
      continue;
    }
    break;
  }
  if (*p == '"') {
    p = QuoteEnd(p + 1, lastChar, '"');
    if (p == lastChar) {
      return p;
    }
    p++;
  } else if (*p == '{') {
    int braces = 1;
    while (braces != 0) {
      p++;
      while (*p == '\\') {
        (void)Tcl_Backslash(p, &count);
        p += count;
      }
      if (*p == '}') {
        braces--;
      } else if (*p == '{') {
        braces++;
      } else if (p == lastChar) {
        return p;
      }
    }
    p++;
  }
  while (1) {
    if (*p == '[') {
      p = ScriptEnd(p + 1, lastChar, 1);
      if (p == lastChar) {
        return p;
      }
      p++;
    } else if (*p == '\\') {
      if (p[1] == '\n') {
        return p - 1;
      }
      (void)Tcl_Backslash(p, &count);
      p += count;
    } else if (*p == '$') {
      p = VarNameEnd(p, lastChar);
      if (p == lastChar) {
        return p;
      }
      p++;
    } else if (*p == ';') {
      if (semiPtr != 0) {
        *semiPtr = 1;
      }
      return p;
    } else if (isspace(((unsigned char)(*p)))) {
      return p - 1;
    } else if ((*p == ']') && nested) {
      return p - 1;
    } else if (p == lastChar) {
      if (nested) {
        return p;
      }
      return p - 1;
    } else {
      p++;
    }
  }
}


x86 assembly (clang, -O0):
<TclWordEnd>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %rcx,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     117c <TclWordEnd+0x2c>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1060 <isspace@plt>
cmp    $0x0,%eax
je     119e <TclWordEnd+0x4e>
jmp    11ec <TclWordEnd+0x9c>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    11e7 <TclWordEnd+0x97>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xa,%eax
jne    11e7 <TclWordEnd+0x97>
mov    -0x30(%rbp),%rax
add    $0x2,%rax
cmp    -0x18(%rbp),%rax
jne    11e2 <TclWordEnd+0x92>
mov    -0x30(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
jmp    11ec <TclWordEnd+0x9c>
jmp    11fd <TclWordEnd+0xad>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1184 <TclWordEnd+0x34>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    1257 <TclWordEnd+0x107>
mov    -0x30(%rbp),%rdi
add    $0x1,%rdi
mov    -0x18(%rbp),%rsi
mov    $0x22,%edx
mov    $0x0,%al
call   1070 <QuoteEnd@plt>
cltq
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    1246 <TclWordEnd+0xf6>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1330 <TclWordEnd+0x1e0>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7b,%eax
jne    132b <TclWordEnd+0x1db>
movl   $0x1,-0x38(%rbp)
cmpl   $0x0,-0x38(%rbp)
je     131f <TclWordEnd+0x1cf>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    12b9 <TclWordEnd+0x169>
mov    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
mov    $0x0,%al
call   1050 <Tcl_Backslash@plt>
mov    -0x34(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
jmp    1284 <TclWordEnd+0x134>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
jne    12d7 <TclWordEnd+0x187>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    131a <TclWordEnd+0x1ca>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7b,%eax
jne    12f5 <TclWordEnd+0x1a5>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1315 <TclWordEnd+0x1c5>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    1310 <TclWordEnd+0x1c0>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
jmp    1315 <TclWordEnd+0x1c5>
jmp    131a <TclWordEnd+0x1ca>
jmp    126e <TclWordEnd+0x11e>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1330 <TclWordEnd+0x1e0>
jmp    1335 <TclWordEnd+0x1e5>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
jne    138f <TclWordEnd+0x23f>
mov    -0x30(%rbp),%rdi
add    $0x1,%rdi
mov    -0x18(%rbp),%rsi
mov    $0x1,%edx
mov    $0x0,%al
call   1040 <ScriptEnd@plt>
cltq
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    137e <TclWordEnd+0x22e>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    151a <TclWordEnd+0x3ca>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    13e6 <TclWordEnd+0x296>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xa,%eax
jne    13c1 <TclWordEnd+0x271>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
mov    $0x0,%al
call   1050 <Tcl_Backslash@plt>
mov    -0x34(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
jmp    1515 <TclWordEnd+0x3c5>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    1437 <TclWordEnd+0x2e7>
mov    -0x30(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x0,%al
call   1030 <VarNameEnd@plt>
cltq
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    1426 <TclWordEnd+0x2d6>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1510 <TclWordEnd+0x3c0>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    1469 <TclWordEnd+0x319>
cmpq   $0x0,-0x28(%rbp)
je     145c <TclWordEnd+0x30c>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1060 <isspace@plt>
cmp    $0x0,%eax
je     148f <TclWordEnd+0x33f>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
jne    14ba <TclWordEnd+0x36a>
cmpl   $0x0,-0x1c(%rbp)
je     14ba <TclWordEnd+0x36a>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    14f0 <TclWordEnd+0x3a0>
cmpl   $0x0,-0x1c(%rbp)
je     14df <TclWordEnd+0x38f>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x8(%rbp)
jmp    151f <TclWordEnd+0x3cf>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1501 <TclWordEnd+0x3b1>
jmp    1506 <TclWordEnd+0x3b6>
jmp    150b <TclWordEnd+0x3bb>
jmp    1510 <TclWordEnd+0x3c0>
jmp    1515 <TclWordEnd+0x3c5>
jmp    151a <TclWordEnd+0x3ca>
jmp    1335 <TclWordEnd+0x1e5>
mov    -0x8(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<TclWordEnd>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rcx,%r15
mov    %edx,%r13d
mov    %rsi,%r14
mov    %rdi,%rbx
test   %rcx,%rcx
je     1180 <TclWordEnd+0x30>
movl   $0x0,(%r15)
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rbx
movzbl -0x1(%rbx),%ebp
movzbl %bpl,%edi
call   1060 <isspace@plt>
test   %eax,%eax
jne    1180 <TclWordEnd+0x30>
cmp    $0x5c,%bpl
jne    11ae <TclWordEnd+0x5e>
cmpb   $0xa,(%rbx)
jne    121a <TclWordEnd+0xca>
lea    0x1(%rbx),%rax
cmp    %r14,%rax
jne    1180 <TclWordEnd+0x30>
jmp    1338 <TclWordEnd+0x1e8>
cmp    $0x22,%bpl
je     1220 <TclWordEnd+0xd0>
cmp    $0x7b,%bpl
jne    121a <TclWordEnd+0xca>
add    $0xffffffffffffffff,%rbx
mov    $0x1,%r12d
lea    0x4(%rsp),%rbp
jmp    11d9 <TclWordEnd+0x89>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12d
test   %r12d,%r12d
je     123e <TclWordEnd+0xee>
add    $0x1,%rbx
nopl   (%rax)
movzbl (%rbx),%eax
cmp    $0x5c,%al
jne    1200 <TclWordEnd+0xb0>
mov    %rbx,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1050 <Tcl_Backslash@plt>
movslq 0x4(%rsp),%rax
add    %rax,%rbx
jmp    11e0 <TclWordEnd+0x90>
xchg   %ax,%ax
cmp    $0x7b,%al
je     11d0 <TclWordEnd+0x80>
cmp    $0x7d,%al
jne    1210 <TclWordEnd+0xc0>
add    $0xffffffff,%r12d
jmp    11d4 <TclWordEnd+0x84>
xchg   %ax,%ax
cmp    %r14,%rbx
jne    11d4 <TclWordEnd+0x84>
jmp    1338 <TclWordEnd+0x1e8>
add    $0xffffffffffffffff,%rbx
jmp    1242 <TclWordEnd+0xf2>
mov    %rbx,%rdi
mov    %r14,%rsi
mov    $0x22,%edx
xor    %eax,%eax
call   1070 <QuoteEnd@plt>
movslq %eax,%rbx
cmp    %r14,%rbx
je     1338 <TclWordEnd+0x1e8>
add    $0x1,%rbx
lea    0x4(%rsp),%r12
nopw   0x0(%rax,%rax,1)
movzbl (%rbx),%ebp
cmp    $0x5a,%bpl
jle    12a0 <TclWordEnd+0x150>
cmp    $0x5c,%bpl
je     12d0 <TclWordEnd+0x180>
cmp    $0x5b,%bpl
jne    12f6 <TclWordEnd+0x1a6>
add    $0x1,%rbx
mov    %rbx,%rdi
mov    %r14,%rsi
mov    $0x1,%edx
xor    %eax,%eax
call   1040 <ScriptEnd@plt>
movslq %eax,%rbx
cmp    %r14,%rbx
je     1338 <TclWordEnd+0x1e8>
add    $0x1,%rbx
jmp    1250 <TclWordEnd+0x100>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    $0x24,%bpl
jne    12f0 <TclWordEnd+0x1a0>
mov    %rbx,%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1030 <VarNameEnd@plt>
movslq %eax,%rbx
cmp    %r14,%rbx
je     1338 <TclWordEnd+0x1e8>
add    $0x1,%rbx
jmp    1250 <TclWordEnd+0x100>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmpb   $0xa,0x1(%rbx)
je     131c <TclWordEnd+0x1cc>
mov    %rbx,%rdi
mov    %r12,%rsi
xor    %eax,%eax
call   1050 <Tcl_Backslash@plt>
movslq 0x4(%rsp),%rax
add    %rax,%rbx
jmp    1250 <TclWordEnd+0x100>
cmp    $0x3b,%bpl
je     1322 <TclWordEnd+0x1d2>
movzbl %bpl,%edi
call   1060 <isspace@plt>
test   %eax,%eax
jne    131c <TclWordEnd+0x1cc>
test   %r13d,%r13d
je     130e <TclWordEnd+0x1be>
cmp    $0x5d,%bpl
je     131c <TclWordEnd+0x1cc>
cmp    %r14,%rbx
je     1330 <TclWordEnd+0x1e0>
add    $0x1,%rbx
jmp    1250 <TclWordEnd+0x100>
add    $0xffffffffffffffff,%rbx
jmp    133b <TclWordEnd+0x1eb>
test   %r15,%r15
je     133b <TclWordEnd+0x1eb>
movl   $0x1,(%r15)
jmp    133b <TclWordEnd+0x1eb>
cmp    $0x1,%r13d
sbb    $0x0,%r14
mov    %r14,%rbx
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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