char *apont_next_tok(string)
char *string;
{
  int i = 0;
  char c;
  c = string[i];
  while (c == ' ' || c == '\n' || c == '\r' || c == '\f' || c == '\b' ||
         c == '\t') {
    ++i;
    c = string[i];
  }
  while (c != '\0' && c != ' ' && c != '\n' && c != '\r' && c != '\f' &&
         c != '\b' && c != '\t' && i < 10) {
    ++i;
    c = string[i];
  }
  while (c == ' ' || c == '\n' || c == '\r' || c == '\f' || c == '\b' ||
         c == '\t') {
    ++i;
    c = string[i];
  }
  return (string + i);
}


x86 assembly (clang, -O0):
<apont_next_tok>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0xd(%rbp)
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0xe(%rbp)
je     1184 <apont_next_tok+0x84>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0xe(%rbp)
je     1184 <apont_next_tok+0x84>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0xe(%rbp)
je     1184 <apont_next_tok+0x84>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0xc,%ecx
mov    %al,-0xe(%rbp)
je     1184 <apont_next_tok+0x84>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0x8,%ecx
mov    %al,-0xe(%rbp)
je     1184 <apont_next_tok+0x84>
movsbl -0xd(%rbp),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0xe(%rbp)
mov    -0xe(%rbp),%al
test   $0x1,%al
jne    1194 <apont_next_tok+0x94>
jmp    11b0 <apont_next_tok+0xb0>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0xd(%rbp)
jmp    111d <apont_next_tok+0x1d>
jmp    11b5 <apont_next_tok+0xb5>
movsbl -0xd(%rbp),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0xf(%rbp)
je     123d <apont_next_tok+0x13d>
movsbl -0xd(%rbp),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0xf(%rbp)
je     123d <apont_next_tok+0x13d>
movsbl -0xd(%rbp),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0xf(%rbp)
je     123d <apont_next_tok+0x13d>
movsbl -0xd(%rbp),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0xf(%rbp)
je     123d <apont_next_tok+0x13d>
movsbl -0xd(%rbp),%ecx
xor    %eax,%eax
cmp    $0xc,%ecx
mov    %al,-0xf(%rbp)
je     123d <apont_next_tok+0x13d>
movsbl -0xd(%rbp),%ecx
xor    %eax,%eax
cmp    $0x8,%ecx
mov    %al,-0xf(%rbp)
je     123d <apont_next_tok+0x13d>
movsbl -0xd(%rbp),%ecx
xor    %eax,%eax
cmp    $0x9,%ecx
mov    %al,-0xf(%rbp)
je     123d <apont_next_tok+0x13d>
cmpl   $0xa,-0xc(%rbp)
setl   %al
mov    %al,-0xf(%rbp)
mov    -0xf(%rbp),%al
test   $0x1,%al
jne    124d <apont_next_tok+0x14d>
jmp    1269 <apont_next_tok+0x169>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0xd(%rbp)
jmp    11b5 <apont_next_tok+0xb5>
jmp    126e <apont_next_tok+0x16e>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x10(%rbp)
je     12d5 <apont_next_tok+0x1d5>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x10(%rbp)
je     12d5 <apont_next_tok+0x1d5>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0xd,%ecx
mov    %al,-0x10(%rbp)
je     12d5 <apont_next_tok+0x1d5>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0xc,%ecx
mov    %al,-0x10(%rbp)
je     12d5 <apont_next_tok+0x1d5>
movsbl -0xd(%rbp),%ecx
mov    $0x1,%al
cmp    $0x8,%ecx
mov    %al,-0x10(%rbp)
je     12d5 <apont_next_tok+0x1d5>
movsbl -0xd(%rbp),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x10(%rbp)
mov    -0x10(%rbp),%al
test   $0x1,%al
jne    12e5 <apont_next_tok+0x1e5>
jmp    1301 <apont_next_tok+0x201>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0xd(%rbp)
jmp    126e <apont_next_tok+0x16e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
add    %rcx,%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<apont_next_tok>:
mov    %rdi,%rax
xor    %esi,%esi
movabs $0x100003700,%rcx
nop
movzbl (%rax,%rsi,1),%edx
cmp    $0x20,%rdx
ja     1126 <apont_next_tok+0x26>
bt     %rdx,%rcx
jae    1126 <apont_next_tok+0x26>
add    $0x1,%rsi
jmp    1110 <apont_next_tok+0x10>
cmp    $0xa,%esi
jae    115e <apont_next_tok+0x5e>
movabs $0x100003701,%r8
jmp    1150 <apont_next_tok+0x50>
nopw   0x0(%rax,%rax,1)
mov    %esi,%esi
movzbl 0x1(%rax,%rsi,1),%edx
add    $0x1,%rsi
cmp    $0xa,%esi
jae    115e <apont_next_tok+0x5e>
cmp    $0x20,%dl
ja     1140 <apont_next_tok+0x40>
movzbl %dl,%edi
bt     %rdi,%r8
jae    1140 <apont_next_tok+0x40>
mov    %esi,%esi
cmp    $0x20,%dl
ja     1187 <apont_next_tok+0x87>
cs nopw 0x0(%rax,%rax,1)
nop
movzbl %dl,%edx
bt     %rdx,%rcx
jae    1187 <apont_next_tok+0x87>
movzbl 0x1(%rax,%rsi,1),%edx
add    $0x1,%rsi
cmp    $0x20,%dl
jbe    1170 <apont_next_tok+0x70>
mov    %esi,%ecx
add    %rcx,%rax
ret

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

LLVM IR (-O2):
define i8* @apont_next_tok(i8* %0) {
br label %2
2: ; preds = %10, %1
%3 = phi i64 [ %11, %10 ], [ 0, %1 ]
%4 = phi i8* [ %12, %10 ], [ %0, %1 ]
%5 = load i8, i8* %4
switch i8 %5, label %6 [
i8 32, label %10
i8 13, label %10
i8 12, label %10
i8 10, label %10
i8 9, label %10
i8 8, label %10
]
6: ; preds = %2
%7 = freeze i64 %3
%8 = trunc i64 %7 to i32
%9 = icmp ult i32 %8, 10
br i1 %9, label %13, label %18
10: ; preds = %2, %2, %2, %2, %2, %2
%11 = add nuw i64 %3, 1
%12 = getelementptr inbounds i8, i8* %0, i64 %11
br label %2
13: ; preds = %6, %22
%14 = phi i8 [ %26, %22 ], [ %5, %6 ]
%15 = phi i32 [ %27, %22 ], [ %8, %6 ]
switch i8 %14, label %22 [
i8 32, label %18
i8 13, label %18
i8 12, label %18
i8 10, label %18
i8 9, label %18
i8 8, label %18
i8 0, label %18
]
16: ; preds = %22
%17 = freeze i32 %23
br label %18
18: ; preds = %16, %13, %13, %13, %13, %13, %13, %13, %6
%19 = phi i32 [ %8, %6 ], [ %17, %16 ], [ %15, %13 ], [ %15, %13 ], [ %15, %13 ], [ %15, %13 ], [ %15, %13 ], [ %15, %13 ], [ %15, %13 ]
%20 = phi i8 [ %5, %6 ], [ %26, %16 ], [ %14, %13 ], [ %14, %13 ], [ %14, %13 ], [ %14, %13 ], [ %14, %13 ], [ %14, %13 ], [ %14, %13 ]
%21 = zext i32 %19 to i64
br label %29
22: ; preds = %13
%23 = add nuw nsw i32 %15, 1
%24 = zext i32 %23 to i64
%25 = getelementptr inbounds i8, i8* %0, i64 %24
%26 = load i8, i8* %25
%27 = freeze i32 %23
%28 = icmp ult i32 %27, 10
br i1 %28, label %13, label %16
29: ; preds = %18, %32
%30 = phi i64 [ %21, %18 ], [ %33, %32 ]
%31 = phi i8 [ %20, %18 ], [ %35, %32 ]
switch i8 %31, label %36 [
i8 32, label %32
i8 13, label %32
i8 12, label %32
i8 10, label %32
i8 9, label %32
i8 8, label %32
]
32: ; preds = %29, %29, %29, %29, %29, %29
%33 = add nuw i64 %30, 1
%34 = getelementptr inbounds i8, i8* %0, i64 %33
%35 = load i8, i8* %34
br label %29
36: ; preds = %29
%37 = and i64 %30, 4294967295
%38 = getelementptr inbounds i8, i8* %0, i64 %37
ret i8* %38
}