int string(char *input, int inputSize, int offset, char wide, char *string,
           int stringLen, char *isWide) {
  int len = 0;
  int retVal = 0;
  if (0 == input || 0 == inputSize || 0 == string || 0 == stringLen ||
      offset >= inputSize - 1 || 0 == isWide) {
  } else {
    if (((input[offset]) < 0x7F &&
         ((input[offset]) >= 0x20 ||
          (((input[offset])) == 0x09 || ((input[offset])) == 0x0A ||
           ((input[offset])) == 0x0D)))) {
      if (wide && '\0' == input[offset + 1]) {
        while (len < stringLen - 1 && offset < inputSize - 1 &&
               ((input[offset]) < 0x7F &&
                ((input[offset]) >= 0x20 ||
                 (((input[offset])) == 0x09 || ((input[offset])) == 0x0A ||
                  ((input[offset])) == 0x0D))) &&
               '\0' == input[offset + 1]) {
          if (((input[offset]) == 0x09 || (input[offset]) == 0x0A ||
               (input[offset]) == 0x0D)) {
            string[len] = '\\';
            string[len + 1] = ((input[offset]) == 0x0D
                                   ? 'r'
                                   : ((input[offset]) == 0x0A ? 'n' : 't'));
            len += 2;
          } else {
            string[len] = input[offset];
            len++;
          }
          retVal++;
          offset += 2;
        }
        *isWide = 1;
      } else if (!wide) {
        while (len < stringLen - 1 && offset < inputSize &&
               ((input[offset]) < 0x7F &&
                ((input[offset]) >= 0x20 ||
                 (((input[offset])) == 0x09 || ((input[offset])) == 0x0A ||
                  ((input[offset])) == 0x0D)))) {
          if (((input[offset]) == 0x09 || (input[offset]) == 0x0A ||
               (input[offset]) == 0x0D)) {
            string[len] = '\\';
            string[len + 1] = ((input[offset]) == 0x0D
                                   ? 'r'
                                   : ((input[offset]) == 0x0A ? 'n' : 't'));
            len += 2;
          } else {
            string[len] = input[offset];
            len++;
          }
          retVal++;
          offset++;
        }
        *isWide = 0;
      }
    }
  }
  return retVal++;
}


x86 assembly (clang, -O0):
<string>:
push   %rbp
mov    %rsp,%rbp
mov    %cl,%al
mov    0x10(%rbp),%rcx
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %al,-0x11(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
xor    %eax,%eax
cmp    -0x8(%rbp),%rax
je     1178 <string+0x78>
xor    %eax,%eax
cmp    -0xc(%rbp),%eax
je     1178 <string+0x78>
xor    %eax,%eax
cmp    -0x20(%rbp),%rax
je     1178 <string+0x78>
xor    %eax,%eax
cmp    -0x24(%rbp),%eax
je     1178 <string+0x78>
mov    -0x10(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1178 <string+0x78>
xor    %eax,%eax
cmp    0x10(%rbp),%rax
jne    117d <string+0x7d>
jmp    159e <string+0x49e>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7f,%eax
jge    1599 <string+0x499>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jge    11e6 <string+0xe6>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     11e6 <string+0xe6>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     11e6 <string+0xe6>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
jne    1599 <string+0x499>
movsbl -0x11(%rbp),%eax
cmp    $0x0,%eax
je     13ce <string+0x2ce>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jne    13ce <string+0x2ce>
jmp    1213 <string+0x113>
mov    -0x28(%rbp),%ecx
mov    -0x24(%rbp),%edx
sub    $0x1,%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2d(%rbp)
jge    12cd <string+0x1cd>
mov    -0x10(%rbp),%ecx
mov    -0xc(%rbp),%edx
sub    $0x1,%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2d(%rbp)
jge    12cd <string+0x1cd>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x7f,%ecx
mov    %al,-0x2d(%rbp)
jge    12cd <string+0x1cd>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jge    12b2 <string+0x1b2>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     12b2 <string+0x1b2>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     12b2 <string+0x1b2>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x2d(%rbp)
jne    12cd <string+0x1cd>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
sete   %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    12dd <string+0x1dd>
jmp    13c2 <string+0x2c2>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     131c <string+0x21c>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     131c <string+0x21c>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
jne    138c <string+0x28c>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
movb   $0x5c,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
jne    134a <string+0x24a>
mov    $0x72,%eax
mov    %eax,-0x34(%rbp)
jmp    1369 <string+0x269>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x74,%eax
mov    $0x6e,%ecx
cmp    $0xa,%edx
cmove  %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x28(%rbp)
jmp    13ab <string+0x2ab>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x10(%rbp)
jmp    1213 <string+0x113>
mov    0x10(%rbp),%rax
movb   $0x1,(%rax)
jmp    1594 <string+0x494>
cmpb   $0x0,-0x11(%rbp)
jne    158f <string+0x48f>
jmp    13dd <string+0x2dd>
mov    -0x28(%rbp),%ecx
mov    -0x24(%rbp),%edx
sub    $0x1,%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x35(%rbp)
jge    1493 <string+0x393>
mov    -0x10(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0x35(%rbp)
jge    1493 <string+0x393>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x7f,%ecx
mov    %al,-0x36(%rbp)
jge    148d <string+0x38d>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x37(%rbp)
jge    1487 <string+0x387>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x9,%ecx
mov    %al,-0x38(%rbp)
je     1481 <string+0x381>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0xa,%ecx
mov    %al,-0x38(%rbp)
je     1481 <string+0x381>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
sete   %al
mov    %al,-0x38(%rbp)
mov    -0x38(%rbp),%al
mov    %al,-0x37(%rbp)
mov    -0x37(%rbp),%al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    14a3 <string+0x3a3>
jmp    1588 <string+0x488>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     14e2 <string+0x3e2>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     14e2 <string+0x3e2>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
jne    1552 <string+0x452>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
movb   $0x5c,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
jne    1510 <string+0x410>
mov    $0x72,%eax
mov    %eax,-0x3c(%rbp)
jmp    152f <string+0x42f>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x74,%eax
mov    $0x6e,%ecx
cmp    $0xa,%edx
cmove  %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x28(%rbp)
jmp    1571 <string+0x471>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    13dd <string+0x2dd>
mov    0x10(%rbp),%rax
movb   $0x0,(%rax)
jmp    1594 <string+0x494>
jmp    1599 <string+0x499>
jmp    159e <string+0x49e>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x2c(%rbp)
pop    %rbp
ret

x86 assembly (clang, -O2):
<string>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
xor    %eax,%eax
test   %rdi,%rdi
je     1334 <string+0x234>
test   %esi,%esi
je     1334 <string+0x234>
test   %r8,%r8
je     1334 <string+0x234>
test   %r9d,%r9d
je     1334 <string+0x234>
lea    -0x1(%rsi),%ebp
cmp    %edx,%ebp
jle    1334 <string+0x234>
mov    0x38(%rsp),%r10
test   %r10,%r10
je     1334 <string+0x234>
movslq %edx,%r11
mov    (%rdi,%r11,1),%r13b
cmp    $0x7f,%r13b
je     1334 <string+0x234>
cmp    $0x1f,%r13b
jg     117c <string+0x7c>
cmp    $0xd,%r13b
ja     1334 <string+0x234>
movzbl %r13b,%r14d
mov    $0x2600,%ebx
bt     %r14,%rbx
jae    1334 <string+0x234>
test   %cl,%cl
je     1267 <string+0x167>
cmpb   $0x0,0x1(%r11,%rdi,1)
jne    1334 <string+0x234>
xor    %eax,%eax
mov    $0x1,%cl
cmp    $0x2,%r9d
jl     1331 <string+0x231>
cmp    $0x7f,%r13b
je     1331 <string+0x231>
add    $0xffffffff,%r9d
movslq %ebp,%r12
add    $0x2,%r11
xor    %esi,%esi
mov    $0x2600,%r14d
mov    $0x72,%r15d
xor    %eax,%eax
movzbl %r13b,%edx
cmp    $0x1f,%r13b
jg     11e1 <string+0xe1>
cmp    $0xd,%r13b
ja     1331 <string+0x231>
bt     %rdx,%r14
jae    1331 <string+0x231>
cmpb   $0x0,-0x1(%rdi,%r11,1)
jne    1331 <string+0x231>
mov    $0x1,%ebp
cmp    $0xd,%r13b
ja     1263 <string+0x163>
bt     %rdx,%r14
mov    %esi,%edx
jae    122d <string+0x12d>
mov    %esi,%edx
movb   $0x5c,(%r8,%rdx,1)
movzbl -0x2(%rdi,%r11,1),%edx
mov    $0x6e,%r13d
cmp    $0xa,%dl
je     121e <string+0x11e>
mov    $0x74,%r13d
cmp    $0xd,%dl
cmove  %r15d,%r13d
lea    0x1(%rsi),%edx
mov    $0x2,%ebp
movslq %edx,%rdx
mov    %r13b,(%r8,%rdx,1)
add    %ebp,%esi
add    $0x1,%eax
cmp    %r9d,%esi
jge    1331 <string+0x231>
cmp    %r12,%r11
jge    1331 <string+0x231>
movzbl (%rdi,%r11,1),%r13d
add    $0x2,%r11
cmp    $0x7f,%r13b
jne    11c3 <string+0xc3>
jmp    1331 <string+0x231>
mov    %esi,%edx
jmp    122d <string+0x12d>
xor    %ecx,%ecx
cmp    $0x2,%r9d
jl     132f <string+0x22f>
mov    $0x0,%eax
cmp    %esi,%edx
jge    1331 <string+0x231>
xor    %ecx,%ecx
mov    $0x0,%eax
cmp    $0x7f,%r13b
je     1331 <string+0x231>
add    $0xffffffff,%r9d
movslq %esi,%r12
lea    (%rdi,%r11,1),%rdx
add    $0x1,%rdx
add    $0x1,%r11
xor    %esi,%esi
mov    $0x2600,%r14d
mov    $0x72,%r15d
xor    %ebp,%ebp
mov    %rsi,%rax
cmp    $0x1f,%r13b
jle    12c6 <string+0x1c6>
mov    $0x1,%esi
mov    %ebp,%edi
jmp    1302 <string+0x202>
cmp    $0xd,%r13b
ja     132b <string+0x22b>
movzbl %r13b,%ecx
bt     %rcx,%r14
jae    132b <string+0x22b>
mov    %ebp,%ecx
movb   $0x5c,(%r8,%rcx,1)
movzbl -0x1(%rdx,%rax,1),%ecx
mov    $0x6e,%r13d
cmp    $0xa,%cl
je     12f3 <string+0x1f3>
mov    $0x74,%r13d
cmp    $0xd,%cl
cmove  %r15d,%r13d
lea    0x1(%rbp),%edi
mov    $0x2,%esi
movslq %edi,%rcx
mov    %r13b,(%r8,%rcx,1)
add    %esi,%ebp
cmp    %r9d,%ebp
jge    1328 <string+0x228>
lea    (%r11,%rax,1),%rcx
cmp    %r12,%rcx
jge    1328 <string+0x228>
movzbl (%rdx,%rax,1),%r13d
lea    0x1(%rax),%rsi
cmp    $0x7f,%r13b
jne    12b4 <string+0x1b4>
add    $0x1,%eax
xor    %ecx,%ecx
jmp    1331 <string+0x231>
xor    %eax,%eax
mov    %cl,(%r10)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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