#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int wint_t;
typedef void *wchar_t;
typedef int u_int32_t;
typedef int u_char;

/* Variables and functions */
scalar_t__ iswcntrl(int);
int /*<<< orphan*/ iswgraph(int);
wchar_t *do_mbyte(wchar_t *dst, wint_t c, int flags, wint_t nextc,
                  int iswextra) {
  if (flags & 0x0002) {
    switch (c) {
    case L'\n':
      *dst++ = L'\\';
      *dst++ = L'n';
      return dst;
    case L'\r':
      *dst++ = L'\\';
      *dst++ = L'r';
      return dst;
    case L'\b':
      *dst++ = L'\\';
      *dst++ = L'b';
      return dst;
    case L'\a':
      *dst++ = L'\\';
      *dst++ = L'a';
      return dst;
    case L'\v':
      *dst++ = L'\\';
      *dst++ = L'v';
      return dst;
    case L'\t':
      *dst++ = L'\\';
      *dst++ = L't';
      return dst;
    case L'\f':
      *dst++ = L'\\';
      *dst++ = L'f';
      return dst;
    case L' ':
      *dst++ = L'\\';
      *dst++ = L's';
      return dst;
    case L'\0':
      *dst++ = L'\\';
      *dst++ = L'0';
      if ((((u_char)(nextc)) >= L'0' && ((u_char)(nextc)) <= L'7')) {
        *dst++ = L'0';
        *dst++ = L'0';
      }
      return dst;
    default:
      if (iswgraph(c)) {
        *dst++ = L'\\';
        *dst++ = (wchar_t)c;
        return dst;
      }
    }
  }
  if (iswextra || ((c & 0177) == L' ') || (flags & 0x0001)) {
    *dst++ = L'\\';
    *dst++ = (u_char)(((u_int32_t)(u_char)c >> 6) & 03) + L'0';
    *dst++ = (u_char)(((u_int32_t)(u_char)c >> 3) & 07) + L'0';
    *dst++ = (wchar_t)(c & 07) + L'0';
  } else {
    if ((flags & 0x0040) == 0) {
      *dst++ = L'\\';
    }
    if (c & 0200) {
      c &= 0177;
      *dst++ = L'M';
    }
    if (iswcntrl(c)) {
      *dst++ = L'^';
      if (c == 0177) {
        *dst++ = L'?';
      } else {
        *dst++ = (wchar_t)c + L'@';
      }
    } else {
      *dst++ = L'-';
      *dst++ = (wchar_t)c;
    }
  }
  return dst;
}


x86 assembly (clang, -O0):
<do_mbyte>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    -0x18(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1417 <do_mbyte+0x2f7>
mov    -0x14(%rbp),%eax
mov    %rax,-0x28(%rbp)
sub    $0x20,%rax
ja     13c2 <do_mbyte+0x2a2>
mov    -0x28(%rbp),%rax
lea    0xe9c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x6e,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x72,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x62,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x61,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x76,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x74,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x66,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x73,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x30,%ecx
mov    %rcx,(%rax)
cmpl   $0x30,-0x1c(%rbp)
jl     13b5 <do_mbyte+0x295>
cmpl   $0x37,-0x1c(%rbp)
jg     13b5 <do_mbyte+0x295>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x30,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x30,%ecx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
mov    -0x14(%rbp),%edi
call   1040 <iswgraph@plt>
cmp    $0x0,%eax
je     140d <do_mbyte+0x2ed>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
movslq -0x14(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    15bb <do_mbyte+0x49b>
jmp    1412 <do_mbyte+0x2f2>
jmp    1417 <do_mbyte+0x2f7>
cmpl   $0x0,-0x20(%rbp)
jne    143f <do_mbyte+0x31f>
mov    -0x14(%rbp),%eax
and    $0x7f,%eax
cmp    $0x20,%eax
je     143f <do_mbyte+0x31f>
mov    -0x18(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     14bc <do_mbyte+0x39c>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x14(%rbp),%eax
sar    $0x6,%eax
and    $0x3,%eax
add    $0x30,%eax
movslq %eax,%rcx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,(%rax)
mov    -0x14(%rbp),%eax
sar    $0x3,%eax
and    $0x7,%eax
add    $0x30,%eax
movslq %eax,%rcx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,(%rax)
mov    -0x14(%rbp),%eax
and    $0x7,%eax
movslq %eax,%rcx
add    $0x30,%rcx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,(%rax)
jmp    15b3 <do_mbyte+0x493>
mov    -0x18(%rbp),%eax
and    $0x40,%eax
cmp    $0x0,%eax
jne    14e2 <do_mbyte+0x3c2>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5c,%ecx
mov    %rcx,(%rax)
mov    -0x14(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     1513 <do_mbyte+0x3f3>
mov    -0x14(%rbp),%eax
and    $0x7f,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x4d,%ecx
mov    %rcx,(%rax)
mov    -0x14(%rbp),%edi
call   1030 <iswcntrl@plt>
cmp    $0x0,%rax
je     1581 <do_mbyte+0x461>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x5e,%ecx
mov    %rcx,(%rax)
cmpl   $0x7f,-0x14(%rbp)
jne    1562 <do_mbyte+0x442>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x3f,%ecx
mov    %rcx,(%rax)
jmp    157c <do_mbyte+0x45c>
movslq -0x14(%rbp),%rcx
add    $0x40,%rcx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,(%rax)
jmp    15ae <do_mbyte+0x48e>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x10(%rbp)
mov    $0x2d,%ecx
mov    %rcx,(%rax)
movslq -0x14(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,(%rax)
jmp    15b3 <do_mbyte+0x493>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<do_mbyte>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %r8d,%r15d
mov    %edx,%ebp
mov    %esi,%ebx
mov    %rdi,%r14
test   $0x2,%bpl
jne    1179 <do_mbyte+0x59>
test   %r15d,%r15d
je     11c8 <do_mbyte+0xa8>
movq   $0x5c,(%r14)
mov    %ebx,%eax
shr    $0x6,%eax
and    $0x3,%eax
or     $0x30,%eax
mov    %rax,0x8(%r14)
mov    %ebx,%eax
shr    $0x3,%eax
and    $0x7,%eax
or     $0x30,%eax
mov    %rax,0x10(%r14)
and    $0x7,%ebx
or     $0x30,%rbx
mov    %rbx,0x18(%r14)
add    $0x20,%r14
jmp    1302 <do_mbyte+0x1e2>
cmp    $0x20,%ebx
ja     122e <do_mbyte+0x10e>
mov    %ebx,%eax
lea    0xe75(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
movq   $0x5c,(%r14)
movq   $0x30,0x8(%r14)
and    $0xfffffff8,%ecx
cmp    $0x30,%ecx
jne    12fe <do_mbyte+0x1de>
movq   $0x30,0x10(%r14)
movq   $0x30,0x18(%r14)
add    $0x20,%r14
jmp    1302 <do_mbyte+0x1e2>
mov    %ebx,%r15d
and    $0x7f,%r15d
cmp    $0x20,%r15d
je     1140 <do_mbyte+0x20>
mov    %ebp,%eax
and    $0x1,%eax
jne    1140 <do_mbyte+0x20>
test   $0x40,%bpl
jne    11f5 <do_mbyte+0xd5>
movq   $0x5c,(%r14)
add    $0x8,%r14
test   $0x80,%bl
jne    12b8 <do_mbyte+0x198>
mov    %ebx,%r15d
jmp    12c3 <do_mbyte+0x1a3>
movq   $0x5c,(%r14)
movq   $0x62,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x5c,(%r14)
movq   $0x76,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
mov    %ebx,%edi
call   1040 <iswgraph@plt>
test   %eax,%eax
je     1137 <do_mbyte+0x17>
movq   $0x5c,(%r14)
movslq %ebx,%rax
jmp    12fa <do_mbyte+0x1da>
movq   $0x5c,(%r14)
movq   $0x61,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x5c,(%r14)
movq   $0x74,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x5c,(%r14)
movq   $0x6e,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x5c,(%r14)
movq   $0x66,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x5c,(%r14)
movq   $0x72,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x5c,(%r14)
movq   $0x73,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x4d,(%r14)
add    $0x8,%r14
mov    %r15d,%edi
call   1030 <iswcntrl@plt>
test   %rax,%rax
je     12e7 <do_mbyte+0x1c7>
movq   $0x5e,(%r14)
cmp    $0x7f,%r15d
jne    12f3 <do_mbyte+0x1d3>
movq   $0x3f,0x8(%r14)
jmp    12fe <do_mbyte+0x1de>
movq   $0x2d,(%r14)
movslq %r15d,%rax
jmp    12fa <do_mbyte+0x1da>
movslq %r15d,%rax
add    $0x40,%rax
mov    %rax,0x8(%r14)
add    $0x10,%r14
mov    %r14,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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