#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;

/* Variables and functions */
void **do_svis(void **, int, int, int, void *const *);
scalar_t__ iswspace(int);
int /*<<< orphan*/ *wcschr(char *, void *);
wchar_t *do_mvis(wchar_t *dst, wint_t c, int flags, wint_t nextc,
                 const wchar_t *extra) {
  if ((c != L'\n') &&
      ((iswspace(c) && (nextc == L'\r' || nextc == L'\n')) ||
       (!iswspace(c) && (c < 33 || (c > 60 && c < 62) || c > 126)) ||
       wcschr(L"#$@[\\]^`{|}~", (wchar_t)c) != NULL)) {
    *dst++ = L'=';
    *dst++ = (wchar_t)L"0123456789ABCDEF"[((unsigned int)c >> 4) & 0xf];
    *dst++ = (wchar_t)L"0123456789ABCDEF"[(unsigned int)c & 0xf];
  } else {
    dst = do_svis(dst, c, flags, nextc, extra);
  }
  return dst;
}


x86 assembly (clang, -O0):
<do_mvis>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
cmpl   $0xa,-0xc(%rbp)
je     123a <do_mvis+0x10a>
mov    -0xc(%rbp),%edi
call   1040 <iswspace@plt>
cmp    $0x0,%rax
je     1179 <do_mvis+0x49>
cmpl   $0xd,-0x14(%rbp)
je     11cd <do_mvis+0x9d>
cmpl   $0xa,-0x14(%rbp)
je     11cd <do_mvis+0x9d>
mov    -0xc(%rbp),%edi
call   1040 <iswspace@plt>
cmp    $0x0,%rax
jne    11b3 <do_mvis+0x83>
cmpl   $0x21,-0xc(%rbp)
jl     11cd <do_mvis+0x9d>
cmpl   $0x3c,-0xc(%rbp)
jle    11a9 <do_mvis+0x79>
cmpl   $0x3e,-0xc(%rbp)
jl     11cd <do_mvis+0x9d>
cmpl   $0x7e,-0xc(%rbp)
jg     11cd <do_mvis+0x9d>
movslq -0xc(%rbp),%rsi
lea    0xe42(%rip),%rdi
call   1050 <wcschr@plt>
cmp    $0x0,%rax
je     123a <do_mvis+0x10a>
mov    -0x8(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x8(%rbp)
mov    $0x3d,%ecx
mov    %rcx,(%rax)
mov    -0xc(%rbp),%eax
shr    $0x4,%eax
and    $0xf,%eax
mov    %eax,%eax
mov    %eax,%ecx
lea    0xe3c(%rip),%rax
movslq (%rax,%rcx,4),%rcx
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x8(%rbp)
mov    %rcx,(%rax)
mov    -0xc(%rbp),%eax
and    $0xf,%eax
mov    %eax,%eax
mov    %eax,%ecx
lea    0xe15(%rip),%rax
movslq (%rax,%rcx,4),%rcx
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x8,%rdx
mov    %rdx,-0x8(%rbp)
mov    %rcx,(%rax)
jmp    1254 <do_mvis+0x124>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0x20(%rbp),%r8
call   1030 <do_svis@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<do_mvis>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %r8,%r15
mov    %ecx,%ebp
mov    %edx,%r12d
mov    %esi,%ebx
mov    %rdi,%r14
cmp    $0xa,%esi
jne    1164 <do_mvis+0x34>
mov    %r14,%rdi
mov    %ebx,%esi
mov    %r12d,%edx
mov    %ebp,%ecx
mov    %r15,%r8
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <do_svis@plt>
mov    %ebx,%edi
call   1040 <iswspace@plt>
test   %rax,%rax
je     117a <do_mvis+0x4a>
cmp    $0xa,%ebp
je     11a1 <do_mvis+0x71>
cmp    $0xd,%ebp
je     11a1 <do_mvis+0x71>
mov    %ebx,%edi
call   1040 <iswspace@plt>
test   %rax,%rax
je     119c <do_mvis+0x6c>
movslq %ebx,%rsi
lea    0xe70(%rip),%rdi
call   1050 <wcschr@plt>
test   %rax,%rax
jne    11a1 <do_mvis+0x71>
jmp    114a <do_mvis+0x1a>
cmp    $0x21,%ebx
jge    11da <do_mvis+0xaa>
movq   $0x3d,(%r14)
mov    %ebx,%eax
shr    $0x4,%eax
and    $0xf,%eax
lea    0xe7d(%rip),%rcx
movslq (%rcx,%rax,4),%rax
mov    %rax,0x8(%r14)
and    $0xf,%ebx
movslq (%rcx,%rbx,4),%rax
mov    %rax,0x10(%r14)
add    $0x18,%r14
mov    %r14,%rax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x3d,%ebx
je     11a1 <do_mvis+0x71>
cmp    $0x7e,%ebx
jbe    1186 <do_mvis+0x56>
jmp    11a1 <do_mvis+0x71>

LLVM IR (-O0):
@.str = [13 x i32] [i32 35, i32 36, i32 64, i32 91, i32 92, i32 93, i32 94, i32 96, i32 123, i32 124, i32 125, i32 126, i32 0]
@.str.1 = [17 x i32] [i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 0]
define i8** @do_mvis(i8** %0, i32 %1, i32 %2, i32 %3, i8** %4) {
%6 = alloca i8**
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8**
store i8** %0, i8*** %6
store i32 %1, i32* %7
store i32 %2, i32* %8
store i32 %3, i32* %9
store i8** %4, i8*** %10
%11 = load i32, i32* %7
%12 = icmp ne i32 %11, 10
br i1 %12, label %13, label %67
13: ; preds = %5
%14 = load i32, i32* %7
%15 = call i64 @iswspace(i32 %14)
%16 = icmp ne i64 %15, 0
br i1 %16, label %17, label %23
17: ; preds = %13
%18 = load i32, i32* %9
%19 = icmp eq i32 %18, 13
br i1 %19, label %45, label %20
20: ; preds = %17
%21 = load i32, i32* %9
%22 = icmp eq i32 %21, 10
br i1 %22, label %45, label %23
23: ; preds = %20, %13
%24 = load i32, i32* %7
%25 = call i64 @iswspace(i32 %24)
%26 = icmp ne i64 %25, 0
br i1 %26, label %39, label %27
27: ; preds = %23
%28 = load i32, i32* %7
%29 = icmp slt i32 %28, 33
br i1 %29, label %45, label %30
30: ; preds = %27
%31 = load i32, i32* %7
%32 = icmp sgt i32 %31, 60
br i1 %32, label %33, label %36
33: ; preds = %30
%34 = load i32, i32* %7
%35 = icmp slt i32 %34, 62
br i1 %35, label %45, label %36
36: ; preds = %33, %30
%37 = load i32, i32* %7
%38 = icmp sgt i32 %37, 126
br i1 %38, label %45, label %39
39: ; preds = %36, %23
%40 = load i32, i32* %7
%41 = sext i32 %40 to i64
%42 = inttoptr i64 %41 to i8*
%43 = call i32* @wcschr(i8* bitcast ([13 x i32]* @.str to i8*), i8* %42)
%44 = icmp ne i32* %43, null
br i1 %44, label %45, label %67
45: ; preds = %39, %36, %33, %27, %20, %17
%46 = load i8**, i8*** %6
%47 = getelementptr inbounds i8*, i8** %46, i32 1
store i8** %47, i8*** %6
store i8* inttoptr (i64 61 to i8*), i8** %46
%48 = load i32, i32* %7
%49 = lshr i32 %48, 4
%50 = and i32 %49, 15
%51 = zext i32 %50 to i64
%52 = getelementptr inbounds [17 x i32], [17 x i32]* @.str.1, i64 0, i64 %51
%53 = load i32, i32* %52
%54 = sext i32 %53 to i64
%55 = inttoptr i64 %54 to i8*
%56 = load i8**, i8*** %6
%57 = getelementptr inbounds i8*, i8** %56, i32 1
store i8** %57, i8*** %6
store i8* %55, i8** %56
%58 = load i32, i32* %7
%59 = and i32 %58, 15
%60 = zext i32 %59 to i64
%61 = getelementptr inbounds [17 x i32], [17 x i32]* @.str.1, i64 0, i64 %60
%62 = load i32, i32* %61
%63 = sext i32 %62 to i64
%64 = inttoptr i64 %63 to i8*
%65 = load i8**, i8*** %6
%66 = getelementptr inbounds i8*, i8** %65, i32 1
store i8** %66, i8*** %6
store i8* %64, i8** %65
br label %74
67: ; preds = %39, %5
%68 = load i8**, i8*** %6
%69 = load i32, i32* %7
%70 = load i32, i32* %8
%71 = load i32, i32* %9
%72 = load i8**, i8*** %10
%73 = call i8** @do_svis(i8** %68, i32 %69, i32 %70, i32 %71, i8** %72)
store i8** %73, i8*** %6
br label %74
74: ; preds = %67, %45
%75 = load i8**, i8*** %6
ret i8** %75
}

LLVM IR (-O2):
@.str = [13 x i32] [i32 35, i32 36, i32 64, i32 91, i32 92, i32 93, i32 94, i32 96, i32 123, i32 124, i32 125, i32 126, i32 0]
@.str.1 = [17 x i32] [i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 0]
define i8** @do_mvis(i8** %0, i32 %1, i32 %2, i32 %3, i8** %4) {
%6 = icmp eq i32 %1, 10
br i1 %6, label %42, label %7
7: ; preds = %5
%8 = tail call i64 @iswspace(i32 %1)
%9 = icmp eq i64 %8, 0
br i1 %9, label %11, label %10
10: ; preds = %7
switch i32 %3, label %11 [
i32 13, label %25
i32 10, label %25
]
11: ; preds = %10, %7
%12 = tail call i64 @iswspace(i32 %1)
%13 = icmp eq i64 %12, 0
br i1 %13, label %14, label %20
14: ; preds = %11
%15 = icmp slt i32 %1, 33
br i1 %15, label %25, label %16
16: ; preds = %14
%17 = icmp eq i32 %1, 61
%18 = icmp ugt i32 %1, 126
%19 = or i1 %17, %18
br i1 %19, label %25, label %20
20: ; preds = %16, %11
%21 = sext i32 %1 to i64
%22 = inttoptr i64 %21 to i8*
%23 = tail call i32* @wcschr(i8* bitcast ([13 x i32]* @.str to i8*), i8* %22)
%24 = icmp eq i32* %23, null
br i1 %24, label %42, label %25
25: ; preds = %10, %10, %16, %20, %14
%26 = getelementptr inbounds i8*, i8** %0, i64 1
store i8* inttoptr (i64 61 to i8*), i8** %0
%27 = lshr i32 %1, 4
%28 = and i32 %27, 15
%29 = zext i32 %28 to i64
%30 = getelementptr inbounds [17 x i32], [17 x i32]* @.str.1, i64 0, i64 %29
%31 = load i32, i32* %30
%32 = sext i32 %31 to i64
%33 = inttoptr i64 %32 to i8*
%34 = getelementptr inbounds i8*, i8** %0, i64 2
store i8* %33, i8** %26
%35 = and i32 %1, 15
%36 = zext i32 %35 to i64
%37 = getelementptr inbounds [17 x i32], [17 x i32]* @.str.1, i64 0, i64 %36
%38 = load i32, i32* %37
%39 = sext i32 %38 to i64
%40 = inttoptr i64 %39 to i8*
%41 = getelementptr inbounds i8*, i8** %0, i64 3
store i8* %40, i8** %34
br label %44
42: ; preds = %20, %5
%43 = tail call i8** @do_svis(i8** %0, i32 %1, i32 %2, i32 %3, i8** %4)
br label %44
44: ; preds = %42, %25
%45 = phi i8** [ %41, %25 ], [ %43, %42 ]
ret i8** %45
}