int wdl_utf8_parsechar(const char *rd, int *cOut) {
  const unsigned char *p = (const unsigned char *)rd;
  const unsigned char b0 = *p;
  unsigned char b1, b2, b3;
  if (cOut)
    *cOut = b0;
  if (b0 < 0x80) {
    return 1;
  }
  if (((b1 = p[1]) & 0xC0) != 0x80)
    return 1;
  if (b0 < 0xE0) {
    if (!(b0 & 0x1E))
      return 1;
    if (cOut)
      *cOut = ((b0 & 0x1F) << 6) | (b1 & 0x3F);
    return 2;
  }
  if (((b2 = p[2]) & 0xC0) != 0x80)
    return 1;
  if (b0 < 0xF0) {
    if (!(b0 & 0xF) && !(b1 & 0x20))
      return 1;
    if (cOut)
      *cOut = ((b0 & 0x0F) << 12) | ((b1 & 0x3F) << 6) | (b2 & 0x3f);
    return 3;
  }
  if (((b3 = p[3]) & 0xC0) != 0x80)
    return 1;
  if (b0 < 0xF8) {
    if (!(b0 & 0x7) && !(b1 & 0x30))
      return 1;
    if (cOut)
      *cOut = ((b0 & 7) << 18) | ((b1 & 0x3F) << 12) | ((b2 & 0x3F) << 6) |
              (b3 & 0x3F);
    return 4;
  }
  if ((p[4] & 0xC0) != 0x80)
    return 1;
  if (b0 < 0xFC) {
    if (cOut)
      *cOut = '_';
    return 5;
  }
  if ((p[5] & 0xC0) != 0x80)
    return 1;
  if (cOut)
    *cOut = '_';
  return 6;
}


x86 assembly (clang, -O0):
<wdl_utf8_parsechar>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x21(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1132 <wdl_utf8_parsechar+0x32>
movzbl -0x21(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
movzbl -0x21(%rbp),%eax
cmp    $0x80,%eax
jge    114d <wdl_utf8_parsechar+0x4d>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
mov    -0x20(%rbp),%rax
mov    0x1(%rax),%al
mov    %al,-0x22(%rbp)
movzbl %al,%eax
and    $0xc0,%eax
cmp    $0x80,%eax
je     1176 <wdl_utf8_parsechar+0x76>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
movzbl -0x21(%rbp),%eax
cmp    $0xe0,%eax
jge    11d1 <wdl_utf8_parsechar+0xd1>
movzbl -0x21(%rbp),%eax
and    $0x1e,%eax
cmp    $0x0,%eax
jne    11a1 <wdl_utf8_parsechar+0xa1>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
cmpq   $0x0,-0x18(%rbp)
je     11c5 <wdl_utf8_parsechar+0xc5>
movzbl -0x21(%rbp),%ecx
and    $0x1f,%ecx
shl    $0x6,%ecx
movzbl -0x22(%rbp),%eax
and    $0x3f,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x2,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
mov    -0x20(%rbp),%rax
mov    0x2(%rax),%al
mov    %al,-0x23(%rbp)
movzbl %al,%eax
and    $0xc0,%eax
cmp    $0x80,%eax
je     11fa <wdl_utf8_parsechar+0xfa>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
movzbl -0x21(%rbp),%eax
cmp    $0xf0,%eax
jge    1271 <wdl_utf8_parsechar+0x171>
movzbl -0x21(%rbp),%eax
and    $0xf,%eax
cmp    $0x0,%eax
jne    1235 <wdl_utf8_parsechar+0x135>
movzbl -0x22(%rbp),%eax
and    $0x20,%eax
cmp    $0x0,%eax
jne    1235 <wdl_utf8_parsechar+0x135>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
cmpq   $0x0,-0x18(%rbp)
je     1265 <wdl_utf8_parsechar+0x165>
movzbl -0x21(%rbp),%ecx
and    $0xf,%ecx
shl    $0xc,%ecx
movzbl -0x22(%rbp),%eax
and    $0x3f,%eax
shl    $0x6,%eax
or     %eax,%ecx
movzbl -0x23(%rbp),%eax
and    $0x3f,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x3,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
mov    -0x20(%rbp),%rax
mov    0x3(%rax),%al
mov    %al,-0x24(%rbp)
movzbl %al,%eax
and    $0xc0,%eax
cmp    $0x80,%eax
je     129a <wdl_utf8_parsechar+0x19a>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
movzbl -0x21(%rbp),%eax
cmp    $0xf8,%eax
jge    131d <wdl_utf8_parsechar+0x21d>
movzbl -0x21(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
jne    12d5 <wdl_utf8_parsechar+0x1d5>
movzbl -0x22(%rbp),%eax
and    $0x30,%eax
cmp    $0x0,%eax
jne    12d5 <wdl_utf8_parsechar+0x1d5>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
cmpq   $0x0,-0x18(%rbp)
je     1311 <wdl_utf8_parsechar+0x211>
movzbl -0x21(%rbp),%ecx
and    $0x7,%ecx
shl    $0x12,%ecx
movzbl -0x22(%rbp),%eax
and    $0x3f,%eax
shl    $0xc,%eax
or     %eax,%ecx
movzbl -0x23(%rbp),%eax
and    $0x3f,%eax
shl    $0x6,%eax
or     %eax,%ecx
movzbl -0x24(%rbp),%eax
and    $0x3f,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x4,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
je     1341 <wdl_utf8_parsechar+0x241>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
movzbl -0x21(%rbp),%eax
cmp    $0xfc,%eax
jge    1371 <wdl_utf8_parsechar+0x271>
cmpq   $0x0,-0x18(%rbp)
je     1365 <wdl_utf8_parsechar+0x265>
mov    -0x18(%rbp),%rax
movl   $0x5f,(%rax)
movl   $0x5,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
mov    -0x20(%rbp),%rax
movzbl 0x5(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
je     1395 <wdl_utf8_parsechar+0x295>
movl   $0x1,-0x4(%rbp)
jmp    13b1 <wdl_utf8_parsechar+0x2b1>
cmpq   $0x0,-0x18(%rbp)
je     13aa <wdl_utf8_parsechar+0x2aa>
mov    -0x18(%rbp),%rax
movl   $0x5f,(%rax)
movl   $0x6,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<wdl_utf8_parsechar>:
movzbl (%rdi),%edx
test   %rsi,%rsi
je     110a <wdl_utf8_parsechar+0xa>
mov    %edx,(%rsi)
mov    $0x1,%eax
test   %dl,%dl
js     1114 <wdl_utf8_parsechar+0x14>
ret
movzbl 0x1(%rdi),%r10d
mov    %r10d,%ecx
and    $0xffffffc0,%ecx
cmp    $0x80,%ecx
jne    1113 <wdl_utf8_parsechar+0x13>
cmp    $0xdf,%dl
ja     115c <wdl_utf8_parsechar+0x5c>
xor    %ecx,%ecx
mov    %edx,%edi
and    $0x1e,%edi
sete   %cl
mov    $0x2,%eax
sub    %ecx,%eax
test   %rsi,%rsi
je     1113 <wdl_utf8_parsechar+0x13>
test   %edi,%edi
je     1113 <wdl_utf8_parsechar+0x13>
and    $0x1f,%edx
shl    $0x6,%edx
and    $0x3f,%r10d
or     %edx,%r10d
mov    $0x2,%eax
mov    %r10d,(%rsi)
ret
movzbl 0x2(%rdi),%r8d
mov    %r8d,%ecx
and    $0xffffffc0,%ecx
cmp    $0x80,%ecx
jne    1113 <wdl_utf8_parsechar+0x13>
cmp    $0xef,%dl
ja     11ba <wdl_utf8_parsechar+0xba>
and    $0xf,%edx
mov    %r10d,%eax
and    $0x20,%eax
xor    %ecx,%ecx
or     %edx,%eax
sete   %dil
setne  %cl
lea    (%rcx,%rcx,1),%eax
add    $0x1,%eax
test   %rsi,%rsi
je     1113 <wdl_utf8_parsechar+0x13>
test   %dil,%dil
jne    1113 <wdl_utf8_parsechar+0x13>
shl    $0xc,%edx
and    $0x3f,%r10d
shl    $0x6,%r10d
or     %edx,%r10d
and    $0x3f,%r8d
or     %r8d,%r10d
mov    $0x3,%eax
mov    %r10d,(%rsi)
ret
movzbl 0x3(%rdi),%r9d
mov    %r9d,%ecx
and    $0xffffffc0,%ecx
cmp    $0x80,%ecx
jne    1113 <wdl_utf8_parsechar+0x13>
cmp    $0xf7,%dl
ja     122e <wdl_utf8_parsechar+0x12e>
and    $0x7,%edx
mov    %r10d,%eax
and    $0x30,%eax
xor    %ecx,%ecx
or     %edx,%eax
sete   %dil
setne  %cl
lea    (%rcx,%rcx,2),%eax
add    $0x1,%eax
test   %rsi,%rsi
je     1113 <wdl_utf8_parsechar+0x13>
test   %dil,%dil
jne    1113 <wdl_utf8_parsechar+0x13>
shl    $0x12,%edx
and    $0x3f,%r10d
shl    $0xc,%r10d
or     %edx,%r10d
and    $0x3f,%r8d
shl    $0x6,%r8d
or     %r10d,%r8d
and    $0x3f,%r9d
or     %r8d,%r9d
mov    $0x4,%eax
mov    %r9d,%r10d
mov    %r10d,(%rsi)
ret
mov    0x4(%rdi),%cl
and    $0xc0,%cl
cmp    $0x80,%cl
jne    1113 <wdl_utf8_parsechar+0x13>
cmp    $0xfb,%dl
ja     125b <wdl_utf8_parsechar+0x15b>
mov    $0x5f,%r10d
mov    $0x5,%eax
test   %rsi,%rsi
jne    1158 <wdl_utf8_parsechar+0x58>
jmp    1113 <wdl_utf8_parsechar+0x13>
mov    0x5(%rdi),%cl
and    $0xc0,%cl
xor    %eax,%eax
cmp    $0x80,%cl
sete   %al
lea    (%rax,%rax,4),%eax
add    $0x1,%eax
test   %rsi,%rsi
je     1113 <wdl_utf8_parsechar+0x13>
cmp    $0x80,%cl
jne    1113 <wdl_utf8_parsechar+0x13>
mov    $0x6,%eax
mov    $0x5f,%r10d
mov    %r10d,(%rsi)
ret

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

LLVM IR (-O2):
define i32 @wdl_utf8_parsechar(i8* nocapture %0, i32* writeonly %1) {
%3 = load i8, i8* %0
%4 = icmp eq i32* %1, null
%5 = zext i8 %3 to i32
br i1 %4, label %7, label %6
6: ; preds = %2
store i32 %5, i32* %1
br label %7
7: ; preds = %2, %6
%8 = icmp sgt i8 %3, -1
br i1 %8, label %94, label %9
9: ; preds = %7
%10 = getelementptr inbounds i8, i8* %0, i64 1
%11 = load i8, i8* %10
%12 = zext i8 %11 to i32
%13 = and i32 %12, 192
%14 = icmp eq i32 %13, 128
br i1 %14, label %15, label %94
15: ; preds = %9
%16 = icmp ult i8 %3, -32
br i1 %16, label %17, label %27
17: ; preds = %15
%18 = and i32 %5, 30
%19 = icmp eq i32 %18, 0
%20 = or i1 %4, %19
%21 = select i1 %19, i32 1, i32 2
br i1 %20, label %94, label %22
22: ; preds = %17
%23 = shl nuw nsw i32 %5, 6
%24 = and i32 %23, 1984
%25 = and i32 %12, 63
%26 = or i32 %25, %24
br label %91
27: ; preds = %15
%28 = getelementptr inbounds i8, i8* %0, i64 2
%29 = load i8, i8* %28
%30 = zext i8 %29 to i32
%31 = and i32 %30, 192
%32 = icmp eq i32 %31, 128
br i1 %32, label %33, label %94
33: ; preds = %27
%34 = icmp ult i8 %3, -16
br i1 %34, label %35, label %50
35: ; preds = %33
%36 = and i32 %5, 15
%37 = icmp eq i32 %36, 0
%38 = and i32 %12, 32
%39 = icmp eq i32 %38, 0
%40 = select i1 %37, i1 %39, i1 false
%41 = or i1 %4, %40
%42 = select i1 %40, i32 1, i32 3
br i1 %41, label %94, label %43
43: ; preds = %35
%44 = shl nuw nsw i32 %36, 12
%45 = shl nuw nsw i32 %12, 6
%46 = and i32 %45, 4032
%47 = or i32 %46, %44
%48 = and i32 %30, 63
%49 = or i32 %48, %47
br label %91
50: ; preds = %33
%51 = getelementptr inbounds i8, i8* %0, i64 3
%52 = load i8, i8* %51
%53 = zext i8 %52 to i32
%54 = and i32 %53, 192
%55 = icmp eq i32 %54, 128
br i1 %55, label %56, label %94
56: ; preds = %50
%57 = icmp ult i8 %3, -8
br i1 %57, label %58, label %76
58: ; preds = %56
%59 = and i32 %5, 7
%60 = icmp eq i32 %59, 0
%61 = and i32 %12, 48
%62 = icmp eq i32 %61, 0
%63 = select i1 %60, i1 %62, i1 false
%64 = or i1 %4, %63
%65 = select i1 %63, i32 1, i32 4
br i1 %64, label %94, label %66
66: ; preds = %58
%67 = shl nuw nsw i32 %59, 18
%68 = shl nuw nsw i32 %12, 12
%69 = and i32 %68, 258048
%70 = or i32 %69, %67
%71 = shl nuw nsw i32 %30, 6
%72 = and i32 %71, 4032
%73 = or i32 %72, %70
%74 = and i32 %53, 63
%75 = or i32 %74, %73
br label %91
76: ; preds = %56
%77 = getelementptr inbounds i8, i8* %0, i64 4
%78 = load i8, i8* %77
%79 = and i8 %78, -64
%80 = icmp eq i8 %79, -128
br i1 %80, label %81, label %94
81: ; preds = %76
%82 = icmp ult i8 %3, -4
br i1 %82, label %83, label %84
83: ; preds = %81
br i1 %4, label %94, label %91
84: ; preds = %81
%85 = getelementptr inbounds i8, i8* %0, i64 5
%86 = load i8, i8* %85
%87 = and i8 %86, -64
%88 = icmp ne i8 %87, -128
%89 = or i1 %4, %88
%90 = select i1 %88, i32 1, i32 6
br i1 %89, label %94, label %91
91: ; preds = %84, %83, %22, %43, %66
%92 = phi i32 [ %75, %66 ], [ %49, %43 ], [ %26, %22 ], [ 95, %83 ], [ 95, %84 ]
%93 = phi i32 [ 4, %66 ], [ 3, %43 ], [ 2, %22 ], [ 5, %83 ], [ 6, %84 ]
store i32 %92, i32* %1
br label %94
94: ; preds = %91, %84, %58, %35, %17, %83, %76, %50, %27, %9, %7
%95 = phi i32 [ 1, %7 ], [ 1, %9 ], [ %21, %17 ], [ 1, %27 ], [ %42, %35 ], [ 1, %50 ], [ %65, %58 ], [ 1, %76 ], [ 5, %83 ], [ %90, %84 ], [ %93, %91 ]
ret i32 %95
}