unsigned int onecodepoint(unsigned char **sp) {
  unsigned int c = **sp;
  if (c <= 0x7F) {
  } else if ((c & 0xC0) == 0x80) {
  } else if ((c & 0xE0) == 0xC0) {
    if ((*((*sp) + 1) & 0xC0) == 0x80) {
      c = (c & 0x1F) << 6;
      c |= *(++(*sp)) & 0x3F;
    }
  } else if ((c & 0xF0) == 0xE0) {
    if ((*((*sp) + 1) & 0xC0) == 0x80) {
      c = (c & 0x1F) << 12;
      c |= (*(++(*sp)) & 0x3F) << 6;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= *(++(*sp)) & 0x3F;
    }
  } else if ((c & 0xF8) == 0xF0) {
    if ((*((*sp) + 1) & 0xC0) == 0x80) {
      c = (c & 0x1F) << 18;
      c |= (*(++(*sp)) & 0x3F) << 12;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= (*(++(*sp)) & 0x3F) << 6;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= *(++(*sp)) & 0x3F;
    }
  } else if ((c & 0xFC) == 0xF8) {
    if ((*((*sp) + 1) & 0xC0) == 0x80) {
      c = (c & 0x1F) << 24;
      c |= (*(++(*sp)) & 0x3F) << 18;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= (*(++(*sp)) & 0x3F) << 12;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= (*(++(*sp)) & 0x3F) << 6;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= *(++(*sp)) & 0x3F;
    }
  } else if ((c & 0xFE) == 0xFC) {
    if ((*((*sp) + 1) & 0xC0) == 0x80) {
      c = (c & 0x1F) << 30;
      c |= (*(++(*sp)) & 0x3F) << 24;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= (*(++(*sp)) & 0x3F) << 18;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= (*(++(*sp)) & 0x3F) << 12;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= (*(++(*sp)) & 0x3F) << 6;
      if ((*((*sp) + 1) & 0xC0) == 0x80)
        c |= *(++(*sp)) & 0x3F;
    }
  }
  return c;
}


x86 assembly (clang, -O0):
<onecodepoint>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x7f,-0xc(%rbp)
ja     1124 <onecodepoint+0x24>
jmp    1597 <onecodepoint+0x497>
mov    -0xc(%rbp),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    113c <onecodepoint+0x3c>
jmp    1592 <onecodepoint+0x492>
mov    -0xc(%rbp),%eax
and    $0xe0,%eax
cmp    $0xc0,%eax
jne    1199 <onecodepoint+0x99>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1194 <onecodepoint+0x94>
mov    -0xc(%rbp),%eax
and    $0x1f,%eax
shl    $0x6,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    158d <onecodepoint+0x48d>
mov    -0xc(%rbp),%eax
and    $0xf0,%eax
cmp    $0xe0,%eax
jne    1237 <onecodepoint+0x137>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1232 <onecodepoint+0x132>
mov    -0xc(%rbp),%eax
and    $0x1f,%eax
shl    $0xc,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0x6,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    122d <onecodepoint+0x12d>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1232 <onecodepoint+0x132>
jmp    1588 <onecodepoint+0x488>
mov    -0xc(%rbp),%eax
and    $0xf8,%eax
cmp    $0xf0,%eax
jne    1311 <onecodepoint+0x211>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    130c <onecodepoint+0x20c>
mov    -0xc(%rbp),%eax
and    $0x1f,%eax
shl    $0x12,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0xc,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    12ce <onecodepoint+0x1ce>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0x6,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1307 <onecodepoint+0x207>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    130c <onecodepoint+0x20c>
jmp    1583 <onecodepoint+0x483>
mov    -0xc(%rbp),%eax
and    $0xfc,%eax
cmp    $0xf8,%eax
jne    1427 <onecodepoint+0x327>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1422 <onecodepoint+0x322>
mov    -0xc(%rbp),%eax
and    $0x1f,%eax
shl    $0x18,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0x12,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    13a8 <onecodepoint+0x2a8>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0xc,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    13e4 <onecodepoint+0x2e4>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0x6,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    141d <onecodepoint+0x31d>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1422 <onecodepoint+0x322>
jmp    157e <onecodepoint+0x47e>
mov    -0xc(%rbp),%eax
and    $0xfe,%eax
cmp    $0xfc,%eax
jne    1579 <onecodepoint+0x479>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1574 <onecodepoint+0x474>
mov    -0xc(%rbp),%eax
and    $0x1f,%eax
shl    $0x1e,%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0x18,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    14be <onecodepoint+0x3be>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0x12,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    14fa <onecodepoint+0x3fa>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0xc,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1536 <onecodepoint+0x436>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
shl    $0x6,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    156f <onecodepoint+0x46f>
mov    -0x8(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
movzbl 0x1(%rax),%eax
and    $0x3f,%eax
or     -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    1574 <onecodepoint+0x474>
jmp    1579 <onecodepoint+0x479>
jmp    157e <onecodepoint+0x47e>
jmp    1583 <onecodepoint+0x483>
jmp    1588 <onecodepoint+0x488>
jmp    158d <onecodepoint+0x48d>
jmp    1592 <onecodepoint+0x492>
jmp    1597 <onecodepoint+0x497>
mov    -0xc(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<onecodepoint>:
mov    (%rdi),%rcx
movzbl (%rcx),%eax
test   %al,%al
jns    1333 <onecodepoint+0x233>
mov    %eax,%edx
and    $0xffffffc0,%edx
cmp    $0x80,%edx
je     1333 <onecodepoint+0x233>
mov    %eax,%edx
and    $0xffffffe0,%edx
cmp    $0xc0,%edx
jne    114a <onecodepoint+0x4a>
mov    0x1(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1333 <onecodepoint+0x233>
add    $0x1,%rcx
and    $0x1f,%eax
shl    $0x6,%eax
jmp    1328 <onecodepoint+0x228>
mov    %eax,%edx
and    $0xfffffff0,%edx
cmp    $0xe0,%edx
jne    1199 <onecodepoint+0x99>
mov    0x1(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1333 <onecodepoint+0x233>
lea    0x1(%rcx),%rdx
and    $0x1f,%eax
mov    %eax,%esi
shl    $0xc,%esi
mov    %rdx,(%rdi)
movzbl 0x1(%rcx),%eax
and    $0x3f,%eax
shl    $0x6,%eax
or     %esi,%eax
mov    0x2(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1333 <onecodepoint+0x233>
add    $0x2,%rcx
jmp    1328 <onecodepoint+0x228>
mov    %eax,%edx
and    $0xfffffff8,%edx
cmp    $0xf0,%edx
jne    1213 <onecodepoint+0x113>
mov    0x1(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1333 <onecodepoint+0x233>
lea    0x1(%rcx),%rdx
and    $0x1f,%eax
mov    %eax,%esi
shl    $0x12,%esi
mov    %rdx,(%rdi)
movzbl 0x1(%rcx),%eax
and    $0x3f,%eax
shl    $0xc,%eax
or     %esi,%eax
mov    0x2(%rcx),%dl
and    $0xc0,%dl
mov    $0x1,%esi
cmp    $0x80,%dl
jne    11f7 <onecodepoint+0xf7>
lea    0x2(%rcx),%rdx
mov    %rdx,(%rdi)
movzbl (%rdx),%edx
and    $0x3f,%edx
shl    $0x6,%edx
or     %edx,%eax
mov    $0x2,%esi
mov    0x1(%rcx,%rsi,1),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1333 <onecodepoint+0x233>
add    %rsi,%rcx
add    $0x1,%rcx
jmp    1328 <onecodepoint+0x228>
mov    %eax,%edx
and    $0xfffffffc,%edx
cmp    $0xf8,%edx
jne    1273 <onecodepoint+0x173>
mov    0x1(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1333 <onecodepoint+0x233>
lea    0x1(%rcx),%r8
and    $0x1f,%eax
mov    %eax,%esi
shl    $0x18,%esi
mov    %r8,(%rdi)
movzbl 0x1(%rcx),%eax
and    $0x3f,%eax
shl    $0x12,%eax
or     %esi,%eax
mov    0x2(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    126a <onecodepoint+0x16a>
add    $0x2,%rcx
mov    %rcx,(%rdi)
movzbl (%rcx),%edx
and    $0x3f,%edx
shl    $0xc,%edx
or     %edx,%eax
mov    %rcx,%r8
mov    0x1(%r8),%cl
jmp    12f4 <onecodepoint+0x1f4>
mov    %eax,%edx
and    $0xfffffffe,%edx
cmp    $0xfc,%edx
jne    1333 <onecodepoint+0x233>
mov    0x1(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1333 <onecodepoint+0x233>
lea    0x1(%rcx),%r8
mov    %eax,%esi
shl    $0x1e,%esi
mov    %r8,(%rdi)
movzbl 0x1(%rcx),%eax
and    $0x3f,%eax
shl    $0x18,%eax
or     %esi,%eax
mov    0x2(%rcx),%dl
and    $0xc0,%dl
cmp    $0x80,%dl
jne    12cb <onecodepoint+0x1cb>
add    $0x2,%rcx
mov    %rcx,(%rdi)
movzbl (%rcx),%edx
and    $0x3f,%edx
shl    $0x12,%edx
or     %edx,%eax
mov    %rcx,%r8
mov    0x1(%r8),%cl
mov    %ecx,%edx
and    $0xc0,%dl
cmp    $0x80,%dl
jne    12f4 <onecodepoint+0x1f4>
lea    0x1(%r8),%rdx
mov    %rdx,(%rdi)
movzbl 0x1(%r8),%ecx
and    $0x3f,%ecx
shl    $0xc,%ecx
or     %ecx,%eax
mov    0x2(%r8),%cl
mov    %rdx,%r8
mov    %ecx,%edx
and    $0xc0,%dl
cmp    $0x80,%dl
jne    1319 <onecodepoint+0x219>
lea    0x1(%r8),%rdx
mov    %rdx,(%rdi)
movzbl 0x1(%r8),%ecx
and    $0x3f,%ecx
shl    $0x6,%ecx
or     %ecx,%eax
mov    0x2(%r8),%cl
mov    %rdx,%r8
and    $0xc0,%cl
cmp    $0x80,%cl
jne    1333 <onecodepoint+0x233>
add    $0x1,%r8
mov    %r8,%rcx
mov    %rcx,(%rdi)
movzbl (%rcx),%ecx
and    $0x3f,%ecx
or     %ecx,%eax
ret

LLVM IR (-O0):
define i32 @onecodepoint(i8** %0) {
%2 = alloca i8**
%3 = alloca i32
store i8** %0, i8*** %2
%4 = load i8**, i8*** %2
%5 = load i8*, i8** %4
%6 = load i8, i8* %5
%7 = zext i8 %6 to i32
store i32 %7, i32* %3
%8 = load i32, i32* %3
%9 = icmp ule i32 %8, 127
br i1 %9, label %10, label %11
10: ; preds = %1
br label %327
11: ; preds = %1
%12 = load i32, i32* %3
%13 = and i32 %12, 192
%14 = icmp eq i32 %13, 128
br i1 %14, label %15, label %16
15: ; preds = %11
br label %326
16: ; preds = %11
%17 = load i32, i32* %3
%18 = and i32 %17, 224
%19 = icmp eq i32 %18, 192
br i1 %19, label %20, label %41
20: ; preds = %16
%21 = load i8**, i8*** %2
%22 = load i8*, i8** %21
%23 = getelementptr inbounds i8, i8* %22, i64 1
%24 = load i8, i8* %23
%25 = zext i8 %24 to i32
%26 = and i32 %25, 192
%27 = icmp eq i32 %26, 128
br i1 %27, label %28, label %40
28: ; preds = %20
%29 = load i32, i32* %3
%30 = and i32 %29, 31
%31 = shl i32 %30, 6
store i32 %31, i32* %3
%32 = load i8**, i8*** %2
%33 = load i8*, i8** %32
%34 = getelementptr inbounds i8, i8* %33, i32 1
store i8* %34, i8** %32
%35 = load i8, i8* %34
%36 = zext i8 %35 to i32
%37 = and i32 %36, 63
%38 = load i32, i32* %3
%39 = or i32 %38, %37
store i32 %39, i32* %3
br label %40
40: ; preds = %28, %20
br label %325
41: ; preds = %16
%42 = load i32, i32* %3
%43 = and i32 %42, 240
%44 = icmp eq i32 %43, 224
br i1 %44, label %45, label %84
45: ; preds = %41
%46 = load i8**, i8*** %2
%47 = load i8*, i8** %46
%48 = getelementptr inbounds i8, i8* %47, i64 1
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = and i32 %50, 192
%52 = icmp eq i32 %51, 128
br i1 %52, label %53, label %83
53: ; preds = %45
%54 = load i32, i32* %3
%55 = and i32 %54, 31
%56 = shl i32 %55, 12
store i32 %56, i32* %3
%57 = load i8**, i8*** %2
%58 = load i8*, i8** %57
%59 = getelementptr inbounds i8, i8* %58, i32 1
store i8* %59, i8** %57
%60 = load i8, i8* %59
%61 = zext i8 %60 to i32
%62 = and i32 %61, 63
%63 = shl i32 %62, 6
%64 = load i32, i32* %3
%65 = or i32 %64, %63
store i32 %65, i32* %3
%66 = load i8**, i8*** %2
%67 = load i8*, i8** %66
%68 = getelementptr inbounds i8, i8* %67, i64 1
%69 = load i8, i8* %68
%70 = zext i8 %69 to i32
%71 = and i32 %70, 192
%72 = icmp eq i32 %71, 128
br i1 %72, label %73, label %82
73: ; preds = %53
%74 = load i8**, i8*** %2
%75 = load i8*, i8** %74
%76 = getelementptr inbounds i8, i8* %75, i32 1
store i8* %76, i8** %74
%77 = load i8, i8* %76
%78 = zext i8 %77 to i32
%79 = and i32 %78, 63
%80 = load i32, i32* %3
%81 = or i32 %80, %79
store i32 %81, i32* %3
br label %82
82: ; preds = %73, %53
br label %83
83: ; preds = %82, %45
br label %324
84: ; preds = %41
%85 = load i32, i32* %3
%86 = and i32 %85, 248
%87 = icmp eq i32 %86, 240
br i1 %87, label %88, label %145
88: ; preds = %84
%89 = load i8**, i8*** %2
%90 = load i8*, i8** %89
%91 = getelementptr inbounds i8, i8* %90, i64 1
%92 = load i8, i8* %91
%93 = zext i8 %92 to i32
%94 = and i32 %93, 192
%95 = icmp eq i32 %94, 128
br i1 %95, label %96, label %144
96: ; preds = %88
%97 = load i32, i32* %3
%98 = and i32 %97, 31
%99 = shl i32 %98, 18
store i32 %99, i32* %3
%100 = load i8**, i8*** %2
%101 = load i8*, i8** %100
%102 = getelementptr inbounds i8, i8* %101, i32 1
store i8* %102, i8** %100
%103 = load i8, i8* %102
%104 = zext i8 %103 to i32
%105 = and i32 %104, 63
%106 = shl i32 %105, 12
%107 = load i32, i32* %3
%108 = or i32 %107, %106
store i32 %108, i32* %3
%109 = load i8**, i8*** %2
%110 = load i8*, i8** %109
%111 = getelementptr inbounds i8, i8* %110, i64 1
%112 = load i8, i8* %111
%113 = zext i8 %112 to i32
%114 = and i32 %113, 192
%115 = icmp eq i32 %114, 128
br i1 %115, label %116, label %126
116: ; preds = %96
%117 = load i8**, i8*** %2
%118 = load i8*, i8** %117
%119 = getelementptr inbounds i8, i8* %118, i32 1
store i8* %119, i8** %117
%120 = load i8, i8* %119
%121 = zext i8 %120 to i32
%122 = and i32 %121, 63
%123 = shl i32 %122, 6
%124 = load i32, i32* %3
%125 = or i32 %124, %123
store i32 %125, i32* %3
br label %126
126: ; preds = %116, %96
%127 = load i8**, i8*** %2
%128 = load i8*, i8** %127
%129 = getelementptr inbounds i8, i8* %128, i64 1
%130 = load i8, i8* %129
%131 = zext i8 %130 to i32
%132 = and i32 %131, 192
%133 = icmp eq i32 %132, 128
br i1 %133, label %134, label %143
134: ; preds = %126
%135 = load i8**, i8*** %2
%136 = load i8*, i8** %135
%137 = getelementptr inbounds i8, i8* %136, i32 1
store i8* %137, i8** %135
%138 = load i8, i8* %137
%139 = zext i8 %138 to i32
%140 = and i32 %139, 63
%141 = load i32, i32* %3
%142 = or i32 %141, %140
store i32 %142, i32* %3
br label %143
143: ; preds = %134, %126
br label %144
144: ; preds = %143, %88
br label %323
145: ; preds = %84
%146 = load i32, i32* %3
%147 = and i32 %146, 252
%148 = icmp eq i32 %147, 248
br i1 %148, label %149, label %224
149: ; preds = %145
%150 = load i8**, i8*** %2
%151 = load i8*, i8** %150
%152 = getelementptr inbounds i8, i8* %151, i64 1
%153 = load i8, i8* %152
%154 = zext i8 %153 to i32
%155 = and i32 %154, 192
%156 = icmp eq i32 %155, 128
br i1 %156, label %157, label %223
157: ; preds = %149
%158 = load i32, i32* %3
%159 = and i32 %158, 31
%160 = shl i32 %159, 24
store i32 %160, i32* %3
%161 = load i8**, i8*** %2
%162 = load i8*, i8** %161
%163 = getelementptr inbounds i8, i8* %162, i32 1
store i8* %163, i8** %161
%164 = load i8, i8* %163
%165 = zext i8 %164 to i32
%166 = and i32 %165, 63
%167 = shl i32 %166, 18
%168 = load i32, i32* %3
%169 = or i32 %168, %167
store i32 %169, i32* %3
%170 = load i8**, i8*** %2
%171 = load i8*, i8** %170
%172 = getelementptr inbounds i8, i8* %171, i64 1
%173 = load i8, i8* %172
%174 = zext i8 %173 to i32
%175 = and i32 %174, 192
%176 = icmp eq i32 %175, 128
br i1 %176, label %177, label %187
177: ; preds = %157
%178 = load i8**, i8*** %2
%179 = load i8*, i8** %178
%180 = getelementptr inbounds i8, i8* %179, i32 1
store i8* %180, i8** %178
%181 = load i8, i8* %180
%182 = zext i8 %181 to i32
%183 = and i32 %182, 63
%184 = shl i32 %183, 12
%185 = load i32, i32* %3
%186 = or i32 %185, %184
store i32 %186, i32* %3
br label %187
187: ; preds = %177, %157
%188 = load i8**, i8*** %2
%189 = load i8*, i8** %188
%190 = getelementptr inbounds i8, i8* %189, i64 1
%191 = load i8, i8* %190
%192 = zext i8 %191 to i32
%193 = and i32 %192, 192
%194 = icmp eq i32 %193, 128
br i1 %194, label %195, label %205
195: ; preds = %187
%196 = load i8**, i8*** %2
%197 = load i8*, i8** %196
%198 = getelementptr inbounds i8, i8* %197, i32 1
store i8* %198, i8** %196
%199 = load i8, i8* %198
%200 = zext i8 %199 to i32
%201 = and i32 %200, 63
%202 = shl i32 %201, 6
%203 = load i32, i32* %3
%204 = or i32 %203, %202
store i32 %204, i32* %3
br label %205
205: ; preds = %195, %187
%206 = load i8**, i8*** %2
%207 = load i8*, i8** %206
%208 = getelementptr inbounds i8, i8* %207, i64 1
%209 = load i8, i8* %208
%210 = zext i8 %209 to i32
%211 = and i32 %210, 192
%212 = icmp eq i32 %211, 128
br i1 %212, label %213, label %222
213: ; preds = %205
%214 = load i8**, i8*** %2
%215 = load i8*, i8** %214
%216 = getelementptr inbounds i8, i8* %215, i32 1
store i8* %216, i8** %214
%217 = load i8, i8* %216
%218 = zext i8 %217 to i32
%219 = and i32 %218, 63
%220 = load i32, i32* %3
%221 = or i32 %220, %219
store i32 %221, i32* %3
br label %222
222: ; preds = %213, %205
br label %223
223: ; preds = %222, %149
br label %322
224: ; preds = %145
%225 = load i32, i32* %3
%226 = and i32 %225, 254
%227 = icmp eq i32 %226, 252
br i1 %227, label %228, label %321
228: ; preds = %224
%229 = load i8**, i8*** %2
%230 = load i8*, i8** %229
%231 = getelementptr inbounds i8, i8* %230, i64 1
%232 = load i8, i8* %231
%233 = zext i8 %232 to i32
%234 = and i32 %233, 192
%235 = icmp eq i32 %234, 128
br i1 %235, label %236, label %320
236: ; preds = %228
%237 = load i32, i32* %3
%238 = and i32 %237, 31
%239 = shl i32 %238, 30
store i32 %239, i32* %3
%240 = load i8**, i8*** %2
%241 = load i8*, i8** %240
%242 = getelementptr inbounds i8, i8* %241, i32 1
store i8* %242, i8** %240
%243 = load i8, i8* %242
%244 = zext i8 %243 to i32
%245 = and i32 %244, 63
%246 = shl i32 %245, 24
%247 = load i32, i32* %3
%248 = or i32 %247, %246
store i32 %248, i32* %3
%249 = load i8**, i8*** %2
%250 = load i8*, i8** %249
%251 = getelementptr inbounds i8, i8* %250, i64 1
%252 = load i8, i8* %251
%253 = zext i8 %252 to i32
%254 = and i32 %253, 192
%255 = icmp eq i32 %254, 128
br i1 %255, label %256, label %266
256: ; preds = %236
%257 = load i8**, i8*** %2
%258 = load i8*, i8** %257
%259 = getelementptr inbounds i8, i8* %258, i32 1
store i8* %259, i8** %257
%260 = load i8, i8* %259
%261 = zext i8 %260 to i32
%262 = and i32 %261, 63
%263 = shl i32 %262, 18
%264 = load i32, i32* %3
%265 = or i32 %264, %263
store i32 %265, i32* %3
br label %266
266: ; preds = %256, %236
%267 = load i8**, i8*** %2
%268 = load i8*, i8** %267
%269 = getelementptr inbounds i8, i8* %268, i64 1
%270 = load i8, i8* %269
%271 = zext i8 %270 to i32
%272 = and i32 %271, 192
%273 = icmp eq i32 %272, 128
br i1 %273, label %274, label %284
274: ; preds = %266
%275 = load i8**, i8*** %2
%276 = load i8*, i8** %275
%277 = getelementptr inbounds i8, i8* %276, i32 1
store i8* %277, i8** %275
%278 = load i8, i8* %277
%279 = zext i8 %278 to i32
%280 = and i32 %279, 63
%281 = shl i32 %280, 12
%282 = load i32, i32* %3
%283 = or i32 %282, %281
store i32 %283, i32* %3
br label %284
284: ; preds = %274, %266
%285 = load i8**, i8*** %2
%286 = load i8*, i8** %285
%287 = getelementptr inbounds i8, i8* %286, i64 1
%288 = load i8, i8* %287
%289 = zext i8 %288 to i32
%290 = and i32 %289, 192
%291 = icmp eq i32 %290, 128
br i1 %291, label %292, label %302
292: ; preds = %284
%293 = load i8**, i8*** %2
%294 = load i8*, i8** %293
%295 = getelementptr inbounds i8, i8* %294, i32 1
store i8* %295, i8** %293
%296 = load i8, i8* %295
%297 = zext i8 %296 to i32
%298 = and i32 %297, 63
%299 = shl i32 %298, 6
%300 = load i32, i32* %3
%301 = or i32 %300, %299
store i32 %301, i32* %3
br label %302
302: ; preds = %292, %284
%303 = load i8**, i8*** %2
%304 = load i8*, i8** %303
%305 = getelementptr inbounds i8, i8* %304, i64 1
%306 = load i8, i8* %305
%307 = zext i8 %306 to i32
%308 = and i32 %307, 192
%309 = icmp eq i32 %308, 128
br i1 %309, label %310, label %319
310: ; preds = %302
%311 = load i8**, i8*** %2
%312 = load i8*, i8** %311
%313 = getelementptr inbounds i8, i8* %312, i32 1
store i8* %313, i8** %311
%314 = load i8, i8* %313
%315 = zext i8 %314 to i32
%316 = and i32 %315, 63
%317 = load i32, i32* %3
%318 = or i32 %317, %316
store i32 %318, i32* %3
br label %319
319: ; preds = %310, %302
br label %320
320: ; preds = %319, %228
br label %321
321: ; preds = %320, %224
br label %322
322: ; preds = %321, %223
br label %323
323: ; preds = %322, %144
br label %324
324: ; preds = %323, %83
br label %325
325: ; preds = %324, %40
br label %326
326: ; preds = %325, %15
br label %327
327: ; preds = %326, %10
%328 = load i32, i32* %3
ret i32 %328
}

LLVM IR (-O2):
define i32 @onecodepoint(i8** %0) {
%2 = load i8*, i8** %0
%3 = load i8, i8* %2
%4 = zext i8 %3 to i32
%5 = icmp sgt i8 %3, -1
%6 = and i32 %4, 192
%7 = icmp eq i32 %6, 128
%8 = select i1 %5, i1 true, i1 %7
br i1 %8, label %191, label %9
9: ; preds = %1
%10 = and i32 %4, 224
%11 = icmp eq i32 %10, 192
br i1 %11, label %12, label %20
12: ; preds = %9
%13 = getelementptr inbounds i8, i8* %2, i64 1
%14 = load i8, i8* %13
%15 = and i8 %14, -64
%16 = icmp eq i8 %15, -128
br i1 %16, label %17, label %191
17: ; preds = %12
%18 = shl nuw nsw i32 %4, 6
%19 = and i32 %18, 1984
br label %184
20: ; preds = %9
%21 = and i32 %4, 240
%22 = icmp eq i32 %21, 224
br i1 %22, label %23, label %40
23: ; preds = %20
%24 = getelementptr inbounds i8, i8* %2, i64 1
%25 = load i8, i8* %24
%26 = and i8 %25, -64
%27 = icmp eq i8 %26, -128
br i1 %27, label %28, label %191
28: ; preds = %23
%29 = shl nuw nsw i32 %4, 12
%30 = and i32 %29, 126976
store i8* %24, i8** %0
%31 = load i8, i8* %24
%32 = and i8 %31, 63
%33 = zext i8 %32 to i32
%34 = shl nuw nsw i32 %33, 6
%35 = or i32 %34, %30
%36 = getelementptr inbounds i8, i8* %2, i64 2
%37 = load i8, i8* %36
%38 = and i8 %37, -64
%39 = icmp eq i8 %38, -128
br i1 %39, label %184, label %191
40: ; preds = %20
%41 = and i32 %4, 248
%42 = icmp eq i32 %41, 240
br i1 %42, label %43, label %74
43: ; preds = %40
%44 = getelementptr inbounds i8, i8* %2, i64 1
%45 = load i8, i8* %44
%46 = and i8 %45, -64
%47 = icmp eq i8 %46, -128
br i1 %47, label %48, label %191
48: ; preds = %43
%49 = shl nuw nsw i32 %4, 18
%50 = and i32 %49, 8126464
store i8* %44, i8** %0
%51 = load i8, i8* %44
%52 = and i8 %51, 63
%53 = zext i8 %52 to i32
%54 = shl nuw nsw i32 %53, 12
%55 = or i32 %54, %50
%56 = getelementptr inbounds i8, i8* %2, i64 2
%57 = load i8, i8* %56
%58 = and i8 %57, -64
%59 = icmp eq i8 %58, -128
br i1 %59, label %60, label %66
60: ; preds = %48
store i8* %56, i8** %0
%61 = load i8, i8* %56
%62 = and i8 %61, 63
%63 = zext i8 %62 to i32
%64 = shl nuw nsw i32 %63, 6
%65 = or i32 %64, %55
br label %66
66: ; preds = %60, %48
%67 = phi i64 [ 2, %60 ], [ 1, %48 ]
%68 = phi i32 [ %65, %60 ], [ %55, %48 ]
%69 = getelementptr inbounds i8, i8* %2, i64 %67
%70 = getelementptr inbounds i8, i8* %69, i64 1
%71 = load i8, i8* %70
%72 = and i8 %71, -64
%73 = icmp eq i8 %72, -128
br i1 %73, label %184, label %191
74: ; preds = %40
%75 = and i32 %4, 252
%76 = icmp eq i32 %75, 248
br i1 %76, label %77, label %122
77: ; preds = %74
%78 = getelementptr inbounds i8, i8* %2, i64 1
%79 = load i8, i8* %78
%80 = and i8 %79, -64
%81 = icmp eq i8 %80, -128
br i1 %81, label %82, label %191
82: ; preds = %77
%83 = shl nuw i32 %4, 24
%84 = and i32 %83, 520093696
store i8* %78, i8** %0
%85 = load i8, i8* %78
%86 = and i8 %85, 63
%87 = zext i8 %86 to i32
%88 = shl nuw nsw i32 %87, 18
%89 = or i32 %88, %84
%90 = getelementptr inbounds i8, i8* %2, i64 2
%91 = load i8, i8* %90
%92 = and i8 %91, -64
%93 = icmp eq i8 %92, -128
br i1 %93, label %94, label %100
94: ; preds = %82
store i8* %90, i8** %0
%95 = load i8, i8* %90
%96 = and i8 %95, 63
%97 = zext i8 %96 to i32
%98 = shl nuw nsw i32 %97, 12
%99 = or i32 %98, %89
br label %100
100: ; preds = %94, %82
%101 = phi i8* [ %90, %94 ], [ %78, %82 ]
%102 = phi i32 [ %99, %94 ], [ %89, %82 ]
%103 = getelementptr inbounds i8, i8* %101, i64 1
%104 = load i8, i8* %103
%105 = and i8 %104, -64
%106 = icmp eq i8 %105, -128
br i1 %106, label %107, label %115
107: ; preds = %100
store i8* %103, i8** %0
%108 = load i8, i8* %103
%109 = and i8 %108, 63
%110 = zext i8 %109 to i32
%111 = shl nuw nsw i32 %110, 6
%112 = or i32 %111, %102
%113 = getelementptr inbounds i8, i8* %101, i64 2
%114 = load i8, i8* %113
br label %115
115: ; preds = %107, %100
%116 = phi i8 [ %114, %107 ], [ %104, %100 ]
%117 = phi i8* [ %103, %107 ], [ %101, %100 ]
%118 = phi i32 [ %112, %107 ], [ %102, %100 ]
%119 = getelementptr inbounds i8, i8* %117, i64 1
%120 = and i8 %116, -64
%121 = icmp eq i8 %120, -128
br i1 %121, label %184, label %191
122: ; preds = %74
%123 = and i32 %4, 254
%124 = icmp eq i32 %123, 252
br i1 %124, label %125, label %191
125: ; preds = %122
%126 = getelementptr inbounds i8, i8* %2, i64 1
%127 = load i8, i8* %126
%128 = and i8 %127, -64
%129 = icmp eq i8 %128, -128
br i1 %129, label %130, label %191
130: ; preds = %125
%131 = shl i32 %4, 30
store i8* %126, i8** %0
%132 = load i8, i8* %126
%133 = and i8 %132, 63
%134 = zext i8 %133 to i32
%135 = shl nuw nsw i32 %134, 24
%136 = or i32 %135, %131
%137 = getelementptr inbounds i8, i8* %2, i64 2
%138 = load i8, i8* %137
%139 = and i8 %138, -64
%140 = icmp eq i8 %139, -128
br i1 %140, label %141, label %147
141: ; preds = %130
store i8* %137, i8** %0
%142 = load i8, i8* %137
%143 = and i8 %142, 63
%144 = zext i8 %143 to i32
%145 = shl nuw nsw i32 %144, 18
%146 = or i32 %145, %136
br label %147
147: ; preds = %141, %130
%148 = phi i8* [ %137, %141 ], [ %126, %130 ]
%149 = phi i32 [ %146, %141 ], [ %136, %130 ]
%150 = getelementptr inbounds i8, i8* %148, i64 1
%151 = load i8, i8* %150
%152 = and i8 %151, -64
%153 = icmp eq i8 %152, -128
br i1 %153, label %154, label %162
154: ; preds = %147
store i8* %150, i8** %0
%155 = load i8, i8* %150
%156 = and i8 %155, 63
%157 = zext i8 %156 to i32
%158 = shl nuw nsw i32 %157, 12
%159 = or i32 %158, %149
%160 = getelementptr inbounds i8, i8* %148, i64 2
%161 = load i8, i8* %160
br label %162
162: ; preds = %154, %147
%163 = phi i8 [ %161, %154 ], [ %151, %147 ]
%164 = phi i8* [ %150, %154 ], [ %148, %147 ]
%165 = phi i32 [ %159, %154 ], [ %149, %147 ]
%166 = getelementptr inbounds i8, i8* %164, i64 1
%167 = and i8 %163, -64
%168 = icmp eq i8 %167, -128
br i1 %168, label %169, label %177
169: ; preds = %162
store i8* %166, i8** %0
%170 = load i8, i8* %166
%171 = and i8 %170, 63
%172 = zext i8 %171 to i32
%173 = shl nuw nsw i32 %172, 6
%174 = or i32 %173, %165
%175 = getelementptr inbounds i8, i8* %164, i64 2
%176 = load i8, i8* %175
br label %177
177: ; preds = %169, %162
%178 = phi i8 [ %176, %169 ], [ %163, %162 ]
%179 = phi i8* [ %166, %169 ], [ %164, %162 ]
%180 = phi i32 [ %174, %169 ], [ %165, %162 ]
%181 = getelementptr inbounds i8, i8* %179, i64 1
%182 = and i8 %178, -64
%183 = icmp eq i8 %182, -128
br i1 %183, label %184, label %191
184: ; preds = %177, %115, %66, %28, %17
%185 = phi i8* [ %13, %17 ], [ %36, %28 ], [ %70, %66 ], [ %119, %115 ], [ %181, %177 ]
%186 = phi i32 [ %19, %17 ], [ %35, %28 ], [ %68, %66 ], [ %118, %115 ], [ %180, %177 ]
store i8* %185, i8** %0
%187 = load i8, i8* %185
%188 = and i8 %187, 63
%189 = zext i8 %188 to i32
%190 = or i32 %186, %189
br label %191
191: ; preds = %184, %28, %23, %115, %77, %125, %177, %122, %43, %66, %12, %1
%192 = phi i32 [ %4, %1 ], [ %4, %12 ], [ %35, %28 ], [ %4, %23 ], [ %68, %66 ], [ %4, %43 ], [ %118, %115 ], [ %4, %77 ], [ %180, %177 ], [ %4, %125 ], [ %4, %122 ], [ %190, %184 ]
ret i32 %192
}