#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 /*<<< orphan*/ compare_tag(unsigned char const *, char *, int);
int custom_strlen(unsigned char const *);
int /*<<< orphan*/ custom_strncmp(char *, unsigned char const *, int);
int return_javascript_body_len(const unsigned char *src) {
  const unsigned char *rpos = src;
  int srclen;
  int junklen = 0;
  int count;
  unsigned char close_quote_char;
  int break_loop;
  srclen = custom_strlen(src);
  count = srclen;
  while (count) {
    switch (*rpos) {
    case '<':
      if (*(rpos + 1) == '/') {
        if (compare_tag(rpos + 2, "SCRIPT", 6) == 0) {
          return (junklen);
        }
      } else if (count >= 9) {
        if (!custom_strncmp("<![CDATA[", rpos, 9)) {
          junklen += 9;
          count -= 9;
          rpos += 9;
          while (count) {
            if (*rpos == ']') {
              if (!custom_strncmp("]]>", rpos, 3)) {
                junklen += 3;
                count -= 3;
                rpos += 3;
                break;
              }
            }
            junklen++;
            count--;
            rpos++;
          }
          break;
        }
      }
      junklen++;
      count--;
      rpos++;
      break;
    case '"':
    case '\'':
    case '[':
      switch (*rpos) {
      case '"':
      case '\'':
        close_quote_char = *rpos;
        break;
      case '[':
        close_quote_char = ']';
        break;
      }
      break_loop = 0;
      junklen++;
      count--;
      rpos++;
      while ((count) && (!break_loop)) {
        if (*rpos == '\\') {
          junklen++;
          count--;
          rpos++;
        } else if (*rpos == close_quote_char) {
          break_loop = 1;
        }
        if (count) {
          junklen++;
          count--;
          rpos++;
        }
      }
      break;
    case '\\':
      if (count > 1) {
        junklen += 2;
        rpos += 2;
        count -= 2;
      } else {
        junklen++;
        rpos++;
        count--;
      }
      break;
    case '/':
      if (*(rpos + 1) == '(') {
        break_loop = 0;
        junklen += 2;
        count -= 2;
        rpos += 2;
        while ((count) && (!break_loop)) {
          if (*rpos == ')')
            break_loop = 1;
          junklen++;
          count--;
          rpos++;
        }
      } else {
        junklen++;
        count--;
        rpos++;
      }
      break;
    default:
      junklen++;
      count--;
      rpos++;
    }
  }
  return (junklen);
}


x86 assembly (clang, -O0):
<return_javascript_body_len>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <custom_strlen@plt>
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     1528 <return_javascript_body_len+0x3f8>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
add    $0xffffffde,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x3a,%eax
ja     1505 <return_javascript_body_len+0x3d5>
mov    -0x38(%rbp),%rax
lea    0xe75(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x18(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    11d7 <return_javascript_body_len+0xa7>
mov    -0x18(%rbp),%rdi
add    $0x2,%rdi
lea    0xf38(%rip),%rsi
mov    $0x6,%edx
call   1050 <compare_tag@plt>
cmp    $0x0,%eax
jne    11d2 <return_javascript_body_len+0xa2>
mov    -0x20(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    152e <return_javascript_body_len+0x3fe>
jmp    12af <return_javascript_body_len+0x17f>
cmpl   $0x9,-0x24(%rbp)
jl     12aa <return_javascript_body_len+0x17a>
mov    -0x18(%rbp),%rsi
lea    0xf07(%rip),%rdi
mov    $0x9,%edx
call   1040 <custom_strncmp@plt>
cmp    $0x0,%eax
jne    12a5 <return_javascript_body_len+0x175>
mov    -0x20(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x9,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x9,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     12a0 <return_javascript_body_len+0x170>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5d,%eax
jne    127d <return_javascript_body_len+0x14d>
mov    -0x18(%rbp),%rsi
lea    0xebb(%rip),%rdi
mov    $0x3,%edx
call   1040 <custom_strncmp@plt>
cmp    $0x0,%eax
jne    1278 <return_javascript_body_len+0x148>
mov    -0x20(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x18(%rbp)
jmp    12a0 <return_javascript_body_len+0x170>
jmp    127d <return_javascript_body_len+0x14d>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    121d <return_javascript_body_len+0xed>
jmp    1523 <return_javascript_body_len+0x3f3>
jmp    12aa <return_javascript_body_len+0x17a>
jmp    12af <return_javascript_body_len+0x17f>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1523 <return_javascript_body_len+0x3f3>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
sub    $0x22,%eax
je     130c <return_javascript_body_len+0x1dc>
jmp    12ea <return_javascript_body_len+0x1ba>
mov    -0x3c(%rbp),%eax
sub    $0x27,%eax
je     130c <return_javascript_body_len+0x1dc>
jmp    12fb <return_javascript_body_len+0x1cb>
mov    -0x3c(%rbp),%eax
sub    $0x5b,%eax
je     131a <return_javascript_body_len+0x1ea>
jmp    131e <return_javascript_body_len+0x1ee>
mov    -0x18(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x25(%rbp)
jmp    131e <return_javascript_body_len+0x1ee>
movb   $0x5d,-0x25(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x24(%rbp)
mov    %al,-0x3d(%rbp)
je     135e <return_javascript_body_len+0x22e>
cmpl   $0x0,-0x2c(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0x3d(%rbp)
mov    -0x3d(%rbp),%al
test   $0x1,%al
jne    136e <return_javascript_body_len+0x23e>
jmp    13ed <return_javascript_body_len+0x2bd>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5c,%eax
jne    13a1 <return_javascript_body_len+0x271>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    13c0 <return_javascript_body_len+0x290>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
movzbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
jne    13bb <return_javascript_body_len+0x28b>
movl   $0x1,-0x2c(%rbp)
jmp    13c0 <return_javascript_body_len+0x290>
cmpl   $0x0,-0x24(%rbp)
je     13e8 <return_javascript_body_len+0x2b8>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1343 <return_javascript_body_len+0x213>
jmp    1523 <return_javascript_body_len+0x3f3>
cmpl   $0x1,-0x24(%rbp)
jle    141f <return_javascript_body_len+0x2ef>
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    143d <return_javascript_body_len+0x30d>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1523 <return_javascript_body_len+0x3f3>
mov    -0x18(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x28,%eax
jne    14e2 <return_javascript_body_len+0x3b2>
movl   $0x0,-0x2c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x24(%rbp)
mov    %al,-0x3e(%rbp)
je     1493 <return_javascript_body_len+0x363>
cmpl   $0x0,-0x2c(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0x3e(%rbp)
mov    -0x3e(%rbp),%al
test   $0x1,%al
jne    14a3 <return_javascript_body_len+0x373>
jmp    14dd <return_javascript_body_len+0x3ad>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x29,%eax
jne    14ba <return_javascript_body_len+0x38a>
movl   $0x1,-0x2c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1478 <return_javascript_body_len+0x348>
jmp    1500 <return_javascript_body_len+0x3d0>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1523 <return_javascript_body_len+0x3f3>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    115d <return_javascript_body_len+0x2d>
mov    -0x20(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<return_javascript_body_len>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbx
call   1030 <custom_strlen@plt>
test   %eax,%eax
je     1325 <return_javascript_body_len+0x1f5>
mov    %eax,%ebp
xor    %r12d,%r12d
lea    0xea9(%rip),%r15
lea    0xf8e(%rip),%r13
xor    %r14d,%r14d
jmp    1178 <return_javascript_body_len+0x48>
add    $0x1,%r14d
add    $0xffffffff,%ebp
add    $0x1,%rbx
xchg   %ax,%ax
test   %ebp,%ebp
je     1330 <return_javascript_body_len+0x200>
mov    (%rbx),%al
lea    -0x22(%rax),%ecx
cmp    $0x3a,%cl
ja     1163 <return_javascript_body_len+0x33>
movzbl %cl,%ecx
movslq (%r15,%rcx,4),%rcx
add    %r15,%rcx
jmp    *%rcx
cmpb   $0x28,0x1(%rbx)
jne    129c <return_javascript_body_len+0x16c>
add    $0x2,%r14d
cmp    $0x2,%ebp
je     1330 <return_javascript_body_len+0x200>
add    $0x2,%rbx
mov    $0x2,%eax
sub    %ebp,%eax
mov    %eax,%ebp
mov    %rbx,%rax
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebp,%ecx
add    $0x1,%r14d
lea    0x1(%rax),%rbx
lea    0x1(%rcx),%ebp
cmp    $0xffffffff,%ecx
je     11da <return_javascript_body_len+0xaa>
cmpb   $0x29,(%rax)
mov    %rbx,%rax
jne    11c0 <return_javascript_body_len+0x90>
neg    %ebp
jmp    1170 <return_javascript_body_len+0x40>
cmpb   $0x2f,0x1(%rbx)
jne    127f <return_javascript_body_len+0x14f>
lea    0x2(%rbx),%rdi
mov    %r13,%rsi
mov    $0x6,%edx
call   1050 <compare_tag@plt>
test   %eax,%eax
jne    129c <return_javascript_body_len+0x16c>
jmp    1330 <return_javascript_body_len+0x200>
mov    $0x5d,%al
add    $0x1,%r14d
add    $0xffffffff,%ebp
je     1330 <return_javascript_body_len+0x200>
add    $0x1,%rbx
nopl   0x0(%rax)
movzbl (%rbx),%edx
cmp    $0x5c,%dl
jne    1240 <return_javascript_body_len+0x110>
add    $0x1,%r14d
add    $0xffffffff,%ebp
add    $0x1,%rbx
xor    %ecx,%ecx
jmp    1247 <return_javascript_body_len+0x117>
nopw   0x0(%rax,%rax,1)
xor    %ecx,%ecx
cmp    %al,%dl
sete   %cl
xor    %edx,%edx
sub    $0x1,%ebp
cmovb  %r12d,%ebp
setae  %dl
add    %rdx,%rbx
add    %edx,%r14d
test   %ebp,%ebp
je     1170 <return_javascript_body_len+0x40>
test   %ecx,%ecx
je     1220 <return_javascript_body_len+0xf0>
jmp    1170 <return_javascript_body_len+0x40>
cmp    $0x2,%ebp
jl     12a6 <return_javascript_body_len+0x176>
add    $0x2,%r14d
add    $0x2,%rbx
add    $0xfffffffe,%ebp
jmp    1170 <return_javascript_body_len+0x40>
cmp    $0x9,%ebp
jl     129c <return_javascript_body_len+0x16c>
lea    0xe68(%rip),%rdi
mov    %rbx,%rsi
mov    $0x9,%edx
call   1040 <custom_strncmp@plt>
test   %eax,%eax
je     12b6 <return_javascript_body_len+0x186>
add    $0x1,%rbx
add    $0x1,%r14d
jmp    12ae <return_javascript_body_len+0x17e>
add    $0x1,%r14d
add    $0x1,%rbx
add    $0xffffffff,%ebp
jmp    1170 <return_javascript_body_len+0x40>
cmp    $0x9,%ebp
je     1342 <return_javascript_body_len+0x212>
mov    %ebp,%r15d
add    $0xfffffffffffffff7,%r15
xor    %r13d,%r13d
jmp    12d9 <return_javascript_body_len+0x1a9>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r13
cmp    %r13d,%r15d
je     132a <return_javascript_body_len+0x1fa>
cmpb   $0x5d,0x9(%rbx,%r13,1)
jne    12d0 <return_javascript_body_len+0x1a0>
lea    (%rbx,%r13,1),%rsi
add    $0x9,%rsi
lea    0xe0d(%rip),%rdi
mov    $0x3,%edx
call   1040 <custom_strncmp@plt>
test   %eax,%eax
jne    12d0 <return_javascript_body_len+0x1a0>
add    %r13d,%r14d
add    $0xc,%r14d
sub    %r13d,%ebp
add    $0xfffffff4,%ebp
add    %r13,%rbx
add    $0xc,%rbx
lea    0xce7(%rip),%r15
lea    0xdcc(%rip),%r13
jmp    1170 <return_javascript_body_len+0x40>
xor    %r14d,%r14d
jmp    1330 <return_javascript_body_len+0x200>
add    %r14d,%ebp
mov    %ebp,%r14d
mov    %r14d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0x9,%r14d
jmp    1330 <return_javascript_body_len+0x200>

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

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