#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 */

/* Variables and functions */
char *malloc(int);
int /*<<< orphan*/ memset(char *, int /*<<< orphan*/, int);
int strlen(char *);
char *escapeChar(char *s) {
  int i, j = 0, val;
  char *ret = malloc(strlen(s) + 1);
  memset(ret, 0, strlen(s) + 1);
  for (i = 0; i < strlen(s); i++) {
    if (s[i] != '\\') {
      ret[j] = s[i];
      j++;
      continue;
    }
    switch (s[i + 1]) {
    case 'a':
      ret[j] = '\a';
      break;
    case 'b':
      ret[j] = '\b';
      break;
    case 'f':
      ret[j] = '\f';
      break;
    case 'n':
      ret[j] = '\n';
      break;
    case 'r':
      ret[j] = '\r';
      break;
    case 't':
      ret[j] = '\t';
      break;
    case 'v':
      ret[j] = '\v';
      break;
    case '\'':
      ret[j] = '\'';
      break;
    case '\"':
      ret[j] = '\"';
      break;
    case '\\':
      ret[j] = '\\';
      break;
    case '\?':
      ret[j] = '\?';
      break;
    case 'x':
      val = 0;
      if (s[i + 2] >= 48 && s[i + 2] <= 57) {
        val += 16 * (s[i + 2] - 48);
      } else {
        if (s[i + 2] < 96) {
          val += 16 * (s[i + 2] - 55);
        } else {
          val += 16 * (s[i + 2] - 87);
        }
      }
      if (s[i + 3] >= 48 && s[i + 3] <= 57) {
        val += (s[i + 3] - 48);
      } else {
        if (s[i + 3] < 96) {
          val += (s[i + 3] - 55);
        } else {
          val += (s[i + 3] - 87);
        }
      }
      ret[j] = val;
      i += 2;
      break;
    default:
      if (s[i + 1] >= 48 && s[i] <= 57) {
        ret[j] = (s[i + 1] - 48) * 4 + (s[i + 2] - 48) * 2 + (s[i + 3] - 48);
        i += 3;
      } else {
        continue;
      }
    }
    j++;
    i++;
  }
  return ret;
}


x86 assembly (clang, -O0):
<escapeChar>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%edi
add    $0x1,%edi
call   1050 <malloc@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x28(%rbp),%rdi
mov    %eax,%edx
add    $0x1,%edx
xor    %esi,%esi
call   1040 <memset@plt>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
cmp    %ecx,%eax
jge    1503 <escapeChar+0x3d3>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5c,%eax
je     11d7 <escapeChar+0xa7>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    14f5 <escapeChar+0x3c5>
mov    -0x8(%rbp),%rcx
movslq -0xc(%rbp),%rax
movsbl 0x1(%rax,%rcx,1),%eax
add    $0xffffffde,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x56,%eax
ja     1449 <escapeChar+0x319>
mov    -0x38(%rbp),%rax
lea    0xdff(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x7,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x8,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0xc,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0xa,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0xd,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x9,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0xb,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x27,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x22,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x5c,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x3f,(%rax,%rcx,1)
jmp    14e3 <escapeChar+0x3b3>
movl   $0x0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1322 <escapeChar+0x1f2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     1322 <escapeChar+0x1f2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
shl    $0x4,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1380 <escapeChar+0x250>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x60,%eax
jge    135e <escapeChar+0x22e>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x37,%eax
shl    $0x4,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    137b <escapeChar+0x24b>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x57,%eax
shl    $0x4,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1380 <escapeChar+0x250>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     13d3 <escapeChar+0x2a3>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     13d3 <escapeChar+0x2a3>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <escapeChar+0x2fb>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x60,%eax
jge    140c <escapeChar+0x2dc>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x37,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1426 <escapeChar+0x2f6>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x57,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <escapeChar+0x2fb>
mov    -0x14(%rbp),%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    14e3 <escapeChar+0x3b3>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     14d9 <escapeChar+0x3a9>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     14d9 <escapeChar+0x3a9>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
shl    $0x2,%eax
mov    -0x8(%rbp),%rcx
mov    -0xc(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x30,%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    -0xc(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0xc(%rbp)
jmp    14de <escapeChar+0x3ae>
jmp    14f5 <escapeChar+0x3c5>
jmp    14e3 <escapeChar+0x3b3>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1182 <escapeChar+0x52>
mov    -0x20(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<escapeChar>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdi,%r12
call   1030 <strlen@plt>
lea    0x1(%rax),%edi
call   1050 <malloc@plt>
mov    %rax,%r14
mov    %r12,%rdi
call   1030 <strlen@plt>
lea    0x1(%rax),%edx
xor    %ebp,%ebp
mov    %r14,%rdi
xor    %esi,%esi
call   1040 <memset@plt>
mov    %r12,%rdi
call   1030 <strlen@plt>
test   %eax,%eax
jle    129a <escapeChar+0x16a>
lea    0xe87(%rip),%r15
xor    %ebx,%ebx
jmp    119d <escapeChar+0x6d>
nopl   (%rax)
movslq %ebx,%rbx
mov    %al,(%r14,%rbx,1)
add    $0x1,%ebx
add    $0x1,%ebp
mov    %r12,%rdi
call   1030 <strlen@plt>
cmp    %eax,%ebp
jge    129a <escapeChar+0x16a>
movslq %ebp,%rcx
movzbl (%r12,%rcx,1),%eax
cmp    $0x5c,%al
jne    1180 <escapeChar+0x50>
movsbl 0x1(%r12,%rcx,1),%edx
add    $0xffffffde,%edx
cmp    $0x56,%edx
ja     118a <escapeChar+0x5a>
lea    0x1(%rcx),%rax
movslq (%r15,%rdx,4),%rdx
add    %r15,%rdx
jmp    *%rdx
movslq %ebx,%rcx
movb   $0x22,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0x3f,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0x8,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0xb,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0x27,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0x5c,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0x7,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0xc,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0xa,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0xd,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movslq %ebx,%rcx
movb   $0x9,(%r14,%rcx,1)
jmp    1290 <escapeChar+0x160>
movzbl 0x2(%rcx,%r12,1),%edx
movzbl 0x3(%rcx,%r12,1),%eax
lea    -0x30(%rdx),%ecx
shl    $0x4,%dl
lea    -0x70(%rdx),%esi
cmp    $0xa,%cl
movzbl %dl,%edx
movzbl %sil,%ecx
cmovb  %edx,%ecx
lea    -0x30(%rax),%edx
cmp    $0xa,%dl
jb     127a <escapeChar+0x14a>
cmp    $0x5f,%al
jg     1276 <escapeChar+0x146>
add    $0xc9,%al
jmp    1278 <escapeChar+0x148>
add    $0xa9,%al
mov    %eax,%edx
add    %dl,%cl
movslq %ebx,%rax
mov    %cl,(%r14,%rax,1)
add    $0x3,%ebp
mov    %ebp,%eax
nopl   0x0(%rax,%rax,1)
add    $0x1,%ebx
mov    %eax,%ebp
jmp    118a <escapeChar+0x5a>
mov    %r14,%rax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

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