#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 */
int escape(char *dest, const char *src, size_t n) {
  if (!dest || !src)
    return 1;
  size_t i1 = 0;
  size_t i2 = 0;
  for (i1 = 0, i2 = 0; i1 < n && src[i2] > '\0'; i2++) {
    switch (src[i2]) {
    case '\\':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = '\\';
      break;
    case '\'':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = '\'';
      break;
    case '\"':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = '\"';
      break;
    case '\a':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 'a';
      break;
    case '\b':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 'b';
      break;
    case '\e':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 'e';
      break;
    case '\f':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 'f';
      break;
    case '\n':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 'n';
      break;
    case '\r':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 'r';
      break;
    case '\t':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 't';
      break;
    case '\v':
      dest[i1++] = '\\';
      if (i1 < n)
        dest[i1++] = 'v';
      break;
    default:
      dest[i1++] = src[i2];
      break;
    }
  }
  dest[i1] = '\0';
  return 0;
}


x86 assembly (clang, -O0):
<escape>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     1126 <escape+0x26>
cmpq   $0x0,-0x18(%rbp)
jne    1132 <escape+0x32>
movl   $0x1,-0x4(%rbp)
jmp    14d1 <escape+0x3d1>
movq   $0x0,-0x28(%rbp)
movq   $0x0,-0x30(%rbp)
movq   $0x0,-0x28(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x20(%rbp),%rcx
mov    %al,-0x31(%rbp)
jae    117a <escape+0x7a>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
setg   %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    118a <escape+0x8a>
jmp    14be <escape+0x3be>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    $0xfffffff9,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x55,%eax
ja     1487 <escape+0x387>
mov    -0x40(%rbp),%rax
lea    0xe4d(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    11f8 <escape+0xf8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    1239 <escape+0x139>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x27,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    127a <escape+0x17a>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x22,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    12bb <escape+0x1bb>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x61,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    12fc <escape+0x1fc>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x62,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    133d <escape+0x23d>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x65,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    137e <escape+0x27e>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x66,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    13bf <escape+0x2bf>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x6e,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    1400 <escape+0x300>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x72,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    1441 <escape+0x341>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x74,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x5c,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    1482 <escape+0x382>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x76,(%rax,%rcx,1)
jmp    14a8 <escape+0x3a8>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x28(%rbp)
mov    %dl,(%rax,%rcx,1)
jmp    14ad <escape+0x3ad>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1152 <escape+0x52>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<escape>:
push   %rbx
mov    $0x1,%eax
test   %rdi,%rdi
je     1292 <escape+0x192>
test   %rsi,%rsi
je     1292 <escape+0x192>
xor    %eax,%eax
test   %rdx,%rdx
je     1285 <escape+0x185>
xor    %r10d,%r10d
lea    0xed3(%rip),%r8
jmp    1150 <escape+0x50>
nop
mov    $0x2,%r11d
add    %r11,%r10
mov    %bl,(%rdi,%r9,1)
mov    %r10,%r9
add    $0x1,%rsi
mov    %r9,%r10
cmp    %rdx,%r9
jae    128d <escape+0x18d>
movzbl (%rsi),%ebx
test   %bl,%bl
jle    128a <escape+0x18a>
mov    $0x1,%r11d
lea    -0x7(%rbx),%ecx
cmp    $0x55,%cl
ja     127d <escape+0x17d>
movzbl %cl,%ecx
movslq (%r8,%rcx,4),%rcx
add    %r8,%rcx
mov    %r10,%r9
jmp    *%rcx
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x61,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x62,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x74,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x6e,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x76,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x66,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x72,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x65,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x22,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x27,%bl
jmp    1130 <escape+0x30>
lea    0x1(%r10),%r9
movb   $0x5c,(%rdi,%r10,1)
cmp    %rdx,%r9
jae    1140 <escape+0x40>
mov    $0x5c,%bl
jmp    1130 <escape+0x30>
mov    %r10,%r9
jmp    1136 <escape+0x36>
xor    %r9d,%r9d
jmp    128d <escape+0x18d>
mov    %r10,%r9
movb   $0x0,(%rdi,%r9,1)
pop    %rbx
ret

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

LLVM IR (-O2):
define i32 @escape(i8* writeonly %0, i8* %1, i64 %2) {
%4 = icmp ne i8* %0, null
%5 = icmp ne i8* %1, null
%6 = and i1 %4, %5
br i1 %6, label %7, label %73
7: ; preds = %3
%8 = icmp eq i64 %2, 0
br i1 %8, label %70, label %9
9: ; preds = %7, %66
%10 = phi i64 [ %68, %66 ], [ 0, %7 ]
%11 = phi i64 [ %67, %66 ], [ 0, %7 ]
%12 = getelementptr inbounds i8, i8* %1, i64 %10
%13 = load i8, i8* %12
%14 = icmp sgt i8 %13, 0
br i1 %14, label %15, label %70
15: ; preds = %9
switch i8 %13, label %60 [
i8 92, label %16
i8 39, label %20
i8 34, label %24
i8 7, label %28
i8 8, label %32
i8 27, label %36
i8 12, label %40
i8 10, label %44
i8 13, label %48
i8 9, label %52
i8 11, label %56
]
16: ; preds = %15
%17 = add nuw i64 %11, 1
%18 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %18
%19 = icmp ult i64 %17, %2
br i1 %19, label %60, label %66
20: ; preds = %15
%21 = add nuw i64 %11, 1
%22 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %22
%23 = icmp ult i64 %21, %2
br i1 %23, label %60, label %66
24: ; preds = %15
%25 = add nuw i64 %11, 1
%26 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %26
%27 = icmp ult i64 %25, %2
br i1 %27, label %60, label %66
28: ; preds = %15
%29 = add nuw i64 %11, 1
%30 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %30
%31 = icmp ult i64 %29, %2
br i1 %31, label %60, label %66
32: ; preds = %15
%33 = add nuw i64 %11, 1
%34 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %34
%35 = icmp ult i64 %33, %2
br i1 %35, label %60, label %66
36: ; preds = %15
%37 = add nuw i64 %11, 1
%38 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %38
%39 = icmp ult i64 %37, %2
br i1 %39, label %60, label %66
40: ; preds = %15
%41 = add nuw i64 %11, 1
%42 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %42
%43 = icmp ult i64 %41, %2
br i1 %43, label %60, label %66
44: ; preds = %15
%45 = add nuw i64 %11, 1
%46 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %46
%47 = icmp ult i64 %45, %2
br i1 %47, label %60, label %66
48: ; preds = %15
%49 = add nuw i64 %11, 1
%50 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %50
%51 = icmp ult i64 %49, %2
br i1 %51, label %60, label %66
52: ; preds = %15
%53 = add nuw i64 %11, 1
%54 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %54
%55 = icmp ult i64 %53, %2
br i1 %55, label %60, label %66
56: ; preds = %15
%57 = add nuw i64 %11, 1
%58 = getelementptr inbounds i8, i8* %0, i64 %11
store i8 92, i8* %58
%59 = icmp ult i64 %57, %2
br i1 %59, label %60, label %66
60: ; preds = %15, %56, %52, %48, %44, %40, %36, %32, %28, %24, %20, %16
%61 = phi i64 [ 2, %16 ], [ 2, %20 ], [ 2, %24 ], [ 2, %28 ], [ 2, %32 ], [ 2, %36 ], [ 2, %40 ], [ 2, %44 ], [ 2, %48 ], [ 2, %52 ], [ 2, %56 ], [ 1, %15 ]
%62 = phi i64 [ %17, %16 ], [ %21, %20 ], [ %25, %24 ], [ %29, %28 ], [ %33, %32 ], [ %37, %36 ], [ %41, %40 ], [ %45, %44 ], [ %49, %48 ], [ %53, %52 ], [ %57, %56 ], [ %11, %15 ]
%63 = phi i8 [ 92, %16 ], [ 39, %20 ], [ 34, %24 ], [ 97, %28 ], [ 98, %32 ], [ 101, %36 ], [ 102, %40 ], [ 110, %44 ], [ 114, %48 ], [ 116, %52 ], [ 118, %56 ], [ %13, %15 ]
%64 = add nuw i64 %11, %61
%65 = getelementptr inbounds i8, i8* %0, i64 %62
store i8 %63, i8* %65
br label %66
66: ; preds = %60, %16, %20, %24, %28, %32, %36, %40, %44, %48, %52, %56
%67 = phi i64 [ %57, %56 ], [ %53, %52 ], [ %49, %48 ], [ %45, %44 ], [ %41, %40 ], [ %37, %36 ], [ %33, %32 ], [ %29, %28 ], [ %25, %24 ], [ %21, %20 ], [ %17, %16 ], [ %64, %60 ]
%68 = add i64 %10, 1
%69 = icmp ult i64 %67, %2
br i1 %69, label %9, label %70
70: ; preds = %9, %66, %7
%71 = phi i64 [ 0, %7 ], [ %67, %66 ], [ %11, %9 ]
%72 = getelementptr inbounds i8, i8* %0, i64 %71
store i8 0, i8* %72
br label %73
73: ; preds = %3, %70
%74 = phi i32 [ 0, %70 ], [ 1, %3 ]
ret i32 %74
}