int Caculate_len(int read[20000 + 1], int wt[20000 + 1], int B) {
  int i = 0, j, f1, f2, f3 = 0, f4 = 0, k = 0, l;
  int sum = 0;
  while (i < B) {
    j = i + 1;
    f1 = 0;
    f2 = 1;
    while (j < B && read[2 * i] == read[2 * j] &&
           read[2 * i + 1] == read[2 * j + 1]) {
      f2++;
      if (f2 >= 16) {
        f1++;
        f2 -= 16;
      }
      j++;
      if ((f1 * 16 + f2) >= 130) {
        break;
      }
    }
    if (f2 > 2 || f1 > 0) {
      if (f4 > 0 || f3 > 0) {
        f4--;
        if (f4 < 0) {
          f4 += 16;
          f3--;
        }
        wt[sum++] = f3;
        wt[sum++] = f4;
      }
      for (l = k; l < i; l++) {
        wt[sum++] = read[2 * l];
        wt[sum++] = read[2 * l + 1];
      }
      f2 -= 3;
      if (f2 < 0) {
        f2 += 16;
        f1--;
      }
      wt[sum++] = f1 + 8;
      wt[sum++] = f2;
      wt[sum++] = read[2 * i];
      wt[sum++] = read[2 * i + 1];
      i = j;
      f3 = 0;
      f4 = 0;
      k = i;
      continue;
    }
    f4++;
    if (f4 >= 16) {
      f3++;
      f4 -= 16;
    }
    if (f3 >= 8) {
      f4--;
      if (f4 < 0) {
        f4 += 16;
        f3--;
      }
      wt[sum++] = f3;
      wt[sum++] = f4;
      for (l = k; l <= i; l++) {
        wt[sum++] = read[2 * l];
        wt[sum++] = read[2 * l + 1];
      }
      i++;
      f3 = 0;
      f4 = 0;
      k = i;
      continue;
    }
    i++;
  }
  if (f4 > 0 || f3 > 0) {
    f4--;
    if (f4 < 0) {
      f4 += 16;
      f3--;
    }
    wt[sum++] = f3;
    wt[sum++] = f4;
  }
  for (l = k; l < i; l++) {
    wt[sum++] = read[2 * l];
    wt[sum++] = read[2 * l + 1];
  }
  return sum;
}


x86 assembly (clang, -O0):
<Caculate_len>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14e8 <Caculate_len+0x3e8>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x1c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x14(%rbp),%ecx
mov    %al,-0x39(%rbp)
jge    11bd <Caculate_len+0xbd>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x8(%rbp),%rdx
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
movslq %eax,%rsi
xor    %eax,%eax
cmp    (%rdx,%rsi,4),%ecx
mov    %al,-0x39(%rbp)
jne    11bd <Caculate_len+0xbd>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0x1c(%rbp),%edx
shl    $0x1,%edx
add    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
sete   %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    11cd <Caculate_len+0xcd>
jmp    1219 <Caculate_len+0x119>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x10,-0x24(%rbp)
jl     11f2 <Caculate_len+0xf2>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x10,%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x4,%eax
add    -0x24(%rbp),%eax
cmp    $0x82,%eax
jl     1214 <Caculate_len+0x114>
jmp    1219 <Caculate_len+0x119>
jmp    1155 <Caculate_len+0x55>
cmpl   $0x2,-0x24(%rbp)
jg     122d <Caculate_len+0x12d>
cmpl   $0x0,-0x20(%rbp)
jle    13c7 <Caculate_len+0x2c7>
cmpl   $0x0,-0x2c(%rbp)
jg     1241 <Caculate_len+0x141>
cmpl   $0x0,-0x28(%rbp)
jle    1296 <Caculate_len+0x196>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jge    1266 <Caculate_len+0x166>
mov    -0x2c(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1303 <Caculate_len+0x203>
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    129c <Caculate_len+0x19c>
mov    -0x24(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jge    1328 <Caculate_len+0x228>
mov    -0x24(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%edx
add    $0x8,%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x24(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    1132 <Caculate_len+0x32>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x10,-0x2c(%rbp)
jl     13ec <Caculate_len+0x2ec>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
sub    $0x10,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x8,-0x28(%rbp)
jl     14da <Caculate_len+0x3da>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jge    141b <Caculate_len+0x31b>
mov    -0x2c(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x18(%rbp),%eax
jg     14b8 <Caculate_len+0x3b8>
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1451 <Caculate_len+0x351>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    1132 <Caculate_len+0x32>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1132 <Caculate_len+0x32>
cmpl   $0x0,-0x2c(%rbp)
jg     14fc <Caculate_len+0x3fc>
cmpl   $0x0,-0x28(%rbp)
jle    1551 <Caculate_len+0x451>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jge    1521 <Caculate_len+0x421>
mov    -0x2c(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    15be <Caculate_len+0x4be>
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x38(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1557 <Caculate_len+0x457>
mov    -0x38(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<Caculate_len>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %edx,-0x40(%rsp)
movslq %edx,%rax
mov    %rax,-0x8(%rsp)
lea    0x10(%rsi),%rax
mov    %rax,-0x18(%rsp)
lea    0xc(%rsi),%rax
mov    %rax,-0x10(%rsp)
xor    %ebp,%ebp
xor    %ecx,%ecx
mov    %rsi,-0x60(%rsp)
mov    %rcx,-0x38(%rsp)
movslq %ebp,%rdx
mov    -0x40(%rsp),%eax
cmp    %eax,%edx
cmovg  %ebp,%eax
mov    %rax,-0x48(%rsp)
movslq %eax,%r14
lea    (%rdx,%rdx,1),%eax
mov    %rax,-0x20(%rsp)
lea    0x3(%rdx,%rdx,1),%r10d
mov    $0x1,%ecx
mov    %rbp,%rax
mov    %rbp,-0x58(%rsp)
mov    %rdx,-0x68(%rsp)
mov    %rdx,%rbx
xor    %r8d,%r8d
xor    %esi,%esi
mov    %r14,-0x28(%rsp)
cs nopw 0x0(%rax,%rax,1)
cmp    %r14,%rbx
je     15d0 <Caculate_len+0x4d0>
mov    %rbx,%rdx
mov    %ecx,%r11d
mov    %eax,-0x3c(%rsp)
lea    0x1(%rbx),%rax
mov    %rax,-0x50(%rsp)
movslq %eax,%rbx
lea    (%rdx,%rdx,1),%ecx
movslq %ecx,%r12
mov    %rdx,-0x30(%rsp)
lea    (%rdx,%rdx,1),%ecx
add    $0x1,%ecx
movslq %ecx,%r15
mov    $0x1,%ecx
xor    %ebp,%ebp
mov    %r10d,%r13d
nopl   (%rax)
cmp    -0x8(%rsp),%rbx
jge    1220 <Caculate_len+0x120>
mov    (%rdi,%r12,4),%r9d
lea    -0x1(%r13),%r14d
movslq %r14d,%rax
cmp    (%rdi,%rax,4),%r9d
jne    1226 <Caculate_len+0x126>
mov    (%rdi,%r15,4),%eax
movslq %r13d,%rdx
cmp    (%rdi,%rdx,4),%eax
jne    1226 <Caculate_len+0x126>
xor    %eax,%eax
xor    %edx,%edx
cmp    $0xf,%ecx
setl   %al
setge  %dl
add    %edx,%ebp
shl    $0x4,%eax
lea    (%rax,%rcx,1),%edx
add    %eax,%ecx
add    $0xfffffff1,%ecx
add    $0x1,%rbx
mov    %ebp,%eax
shl    $0x4,%eax
add    %edx,%eax
add    $0xfffffff1,%eax
add    $0x2,%r13d
cmp    $0x82,%eax
jl     11c0 <Caculate_len+0xc0>
jmp    1226 <Caculate_len+0x126>
nopl   0x0(%rax)
mov    -0x40(%rsp),%eax
mov    %eax,%ebx
cmp    $0x2,%ecx
jg     12f0 <Caculate_len+0x1f0>
test   %ebp,%ebp
jg     12f0 <Caculate_len+0x1f0>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    $0xf,%esi
setl   %al
setge  %cl
add    %ecx,%r8d
shl    $0x4,%eax
add    %eax,%esi
add    $0xfffffff1,%esi
add    $0x2,%r10d
lea    0x1(%r11),%ecx
mov    -0x3c(%rsp),%eax
add    $0x1,%eax
cmp    $0x8,%r8d
mov    -0x28(%rsp),%r14
mov    -0x50(%rsp),%rbx
jb     1180 <Caculate_len+0x80>
xor    %eax,%eax
test   %esi,%esi
setle  %al
sub    %eax,%r8d
shl    $0x4,%eax
add    %esi,%eax
add    $0xffffffff,%eax
mov    -0x38(%rsp),%r9
movslq %r9d,%rcx
mov    -0x60(%rsp),%rsi
mov    %r8d,(%rsi,%rcx,4)
mov    %eax,0x4(%rsi,%rcx,4)
add    $0x2,%ecx
mov    -0x30(%rsp),%rax
cmp    %eax,-0x58(%rsp)
mov    %ebx,%ebp
jg     1131 <Caculate_len+0x31>
movslq %ecx,%rax
add    $0x3,%r9d
lea    (%rsi,%rax,4),%rdx
mov    %r9d,%ecx
mov    -0x20(%rsp),%rbp
movslq %ebp,%rbp
mov    (%rdi,%rbp,4),%eax
mov    %eax,(%rdx)
lea    0x1(%rbp),%eax
cltq
mov    (%rdi,%rax,4),%eax
movslq %ecx,%rcx
mov    %eax,(%rsi,%rcx,4)
add    $0x2,%ebp
add    $0x2,%ecx
add    $0x8,%rdx
add    $0xffffffff,%r11d
jne    12c0 <Caculate_len+0x1c0>
add    $0xffffffff,%ecx
mov    %ebx,%ebp
jmp    1131 <Caculate_len+0x31>
test   %esi,%esi
jg     1305 <Caculate_len+0x205>
test   %r8d,%r8d
jne    1305 <Caculate_len+0x205>
mov    -0x60(%rsp),%rsi
mov    -0x38(%rsp),%r11
jmp    1330 <Caculate_len+0x230>
xor    %eax,%eax
test   %esi,%esi
setle  %al
sub    %eax,%r8d
shl    $0x4,%eax
add    %esi,%eax
add    $0xffffffff,%eax
mov    -0x38(%rsp),%r11
movslq %r11d,%rdx
mov    -0x60(%rsp),%rsi
mov    %r8d,(%rsi,%rdx,4)
add    $0x2,%r11d
mov    %eax,0x4(%rsi,%rdx,4)
mov    -0x68(%rsp),%r8
mov    -0x30(%rsp),%rax
cmp    %eax,-0x58(%rsp)
jge    14ca <Caculate_len+0x3ca>
movslq %r11d,%r11
cltq
mov    %rax,%r13
sub    %r8,%r13
cmp    $0x2,%r13
jb     1414 <Caculate_len+0x314>
not    %r8
mov    %rax,-0x50(%rsp)
lea    (%rax,%r8,1),%r10
mov    -0x58(%rsp),%rsi
lea    (%rsi,%rsi,1),%r9d
mov    %r10d,%eax
add    %eax,%eax
setb   %dl
lea    (%rax,%rsi,2),%esi
cmp    %r9d,%esi
jl     1405 <Caculate_len+0x305>
test   %dl,%dl
jne    1405 <Caculate_len+0x305>
shr    $0x20,%r10
jne    1405 <Caculate_len+0x305>
mov    -0x58(%rsp),%rsi
lea    (%rsi,%rsi,1),%r14d
add    $0x1,%r14d
lea    (%rax,%rsi,2),%eax
add    $0x1,%eax
cmp    %r14d,%eax
jl     1405 <Caculate_len+0x305>
test   %dl,%dl
jne    1405 <Caculate_len+0x305>
test   %r10,%r10
jne    1405 <Caculate_len+0x305>
mov    -0x30(%rsp),%rax
shl    $0x20,%rax
mov    -0x60(%rsp),%rdx
lea    (%rdx,%r11,4),%r10
sar    $0x1f,%rax
mov    %r11,%r14
mov    -0x68(%rsp),%rsi
lea    (%rsi,%rsi,1),%r11
movslq %r9d,%r9
lea    (%rax,%r9,1),%rsi
sub    %r11,%rsi
lea    (%rdi,%rsi,4),%rsi
cmp    %rsi,%r10
jae    1503 <Caculate_len+0x403>
mov    %rdx,%rsi
add    %r14,%rax
sub    %r11,%rax
lea    (%rdx,%rax,4),%rax
lea    (%rdi,%r9,4),%rdx
cmp    %rax,%rdx
jae    1503 <Caculate_len+0x403>
mov    %r14,%r11
jmp    140a <Caculate_len+0x30a>
mov    -0x60(%rsp),%rsi
mov    -0x68(%rsp),%r8
mov    -0x50(%rsp),%rax
mov    -0x30(%rsp),%rdx
sub    %r8d,%edx
lea    0x1(%r8),%r9
test   $0x1,%dl
je     144c <Caculate_len+0x34c>
lea    (%r8,%r8,1),%edx
movslq %edx,%rdx
mov    (%rdi,%rdx,4),%edx
mov    %edx,(%rsi,%r11,4)
lea    (%r8,%r8,1),%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    (%rdi,%rdx,4),%edx
mov    %edx,0x4(%rsi,%r11,4)
add    $0x2,%r11
mov    %r9,%r8
cmp    %r9,%rax
je     14ca <Caculate_len+0x3ca>
mov    %r8,%rax
and    $0x7fffffff,%r8d
add    %r8,%r8
movslq -0x3c(%rsp),%r10
sub    %rax,%r10
mov    -0x10(%rsp),%rax
lea    (%rax,%r11,4),%r9
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    (%r8,%rax,1),%rsi
movslq %esi,%rsi
mov    (%rdi,%rsi,4),%edx
mov    %edx,-0xc(%r9,%rax,4)
lea    0x1(%rsi),%edx
movslq %edx,%rdx
mov    (%rdi,%rdx,4),%edx
mov    %edx,-0x8(%r9,%rax,4)
lea    0x2(%rsi),%edx
movslq %edx,%rdx
mov    (%rdi,%rdx,4),%edx
mov    %edx,-0x4(%r9,%rax,4)
add    $0x3,%esi
movslq %esi,%rdx
mov    (%rdi,%rdx,4),%edx
mov    %edx,(%r9,%rax,4)
add    $0x4,%rax
add    $0xfffffffffffffffe,%r10
jne    1480 <Caculate_len+0x380>
add    %rax,%r11
mov    -0x60(%rsp),%rsi
xor    %eax,%eax
cmp    $0x3,%ecx
setl   %al
sub    %eax,%ebp
shl    $0x4,%eax
add    %ecx,%eax
add    $0xfffffffd,%eax
add    $0x8,%ebp
movslq %r11d,%rdx
mov    %ebp,(%rsi,%rdx,4)
mov    %eax,0x4(%rsi,%rdx,4)
mov    (%rdi,%r12,4),%eax
mov    %eax,0x8(%rsi,%rdx,4)
mov    (%rdi,%r15,4),%eax
lea    0x4(%rdx),%ecx
mov    %eax,0xc(%rsi,%rdx,4)
mov    %ebx,%ebp
jmp    1131 <Caculate_len+0x31>
mov    %r14,%r11
mov    %r13,%rax
and    $0xfffffffffffffffe,%rax
mov    %rax,-0x28(%rsp)
add    $0xfffffffffffffffe,%rax
mov    %rax,%r10
shr    %r10
add    $0x1,%r10
test   %rax,%rax
je     158a <Caculate_len+0x48a>
mov    -0x18(%rsp),%rax
lea    (%rax,%r11,4),%r14
movslq -0x3c(%rsp),%rsi
add    %r8,%rsi
add    $0x1,%rsi
and    $0xfffffffffffffffe,%rsi
add    $0xfffffffffffffffe,%rsi
shr    %rsi
add    $0x1,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %r9d,%r9d
mov    -0x68(%rsp),%r8
mov    -0x20(%rsp),%rax
nopw   0x0(%rax,%rax,1)
cltq
movups (%rdi,%rax,4),%xmm0
movups %xmm0,-0x10(%r14,%r9,8)
lea    0x4(%rax),%edx
movslq %edx,%rdx
movups (%rdi,%rdx,4),%xmm0
movups %xmm0,(%r14,%r9,8)
add    $0x4,%r9
add    $0x8,%eax
add    $0xfffffffffffffffe,%rsi
jne    1560 <Caculate_len+0x460>
jmp    1592 <Caculate_len+0x492>
xor    %r9d,%r9d
mov    -0x68(%rsp),%r8
test   $0x1,%r10b
mov    -0x60(%rsp),%rsi
je     15b6 <Caculate_len+0x4b6>
lea    (%r11,%r9,2),%rax
mov    -0x58(%rsp),%rdx
add    %r9d,%edx
add    %edx,%edx
movslq %edx,%rdx
movups (%rdi,%rdx,4),%xmm0
movups %xmm0,(%rsi,%rax,4)
mov    -0x28(%rsp),%rax
lea    (%r11,%rax,2),%r11
cmp    %rax,%r13
je     14ca <Caculate_len+0x3ca>
add    %rax,%r8
jmp    140f <Caculate_len+0x30f>
test   %esi,%esi
jg     15e5 <Caculate_len+0x4e5>
test   %r8d,%r8d
jne    15e5 <Caculate_len+0x4e5>
mov    -0x60(%rsp),%r10
mov    -0x38(%rsp),%rax
jmp    1611 <Caculate_len+0x511>
xor    %eax,%eax
test   %esi,%esi
setle  %al
sub    %eax,%r8d
shl    $0x4,%eax
lea    (%rax,%rsi,1),%edx
add    $0xffffffff,%edx
mov    -0x38(%rsp),%rax
movslq %eax,%rcx
mov    -0x60(%rsp),%r10
mov    %r8d,(%r10,%rcx,4)
add    $0x2,%eax
mov    %edx,0x4(%r10,%rcx,4)
mov    -0x68(%rsp),%r8
mov    -0x58(%rsp),%rcx
cmp    -0x40(%rsp),%ecx
jge    16f1 <Caculate_len+0x5f1>
cltq
mov    %r14,%r11
sub    %r8,%r11
cmp    $0x2,%r11
jae    16fc <Caculate_len+0x5fc>
mov    -0x48(%rsp),%rcx
sub    %r8d,%ecx
mov    %r8,%rdx
not    %rdx
test   $0x1,%cl
je     1672 <Caculate_len+0x572>
lea    (%r8,%r8,1),%ecx
movslq %ecx,%rcx
mov    (%rdi,%rcx,4),%ecx
mov    %ecx,(%r10,%rax,4)
lea    (%r8,%r8,1),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rdi,%rcx,4),%ecx
mov    %ecx,0x4(%r10,%rax,4)
add    $0x2,%rax
add    $0x1,%r8
add    %r14,%rdx
je     16f1 <Caculate_len+0x5f1>
mov    %r8,%rdx
and    $0x7fffffff,%r8d
add    %r8,%r8
mov    -0x40(%rsp),%ecx
mov    -0x58(%rsp),%rsi
cmp    %ecx,%esi
cmovg  %esi,%ecx
movslq %ecx,%rcx
sub    %rdx,%rcx
lea    (%r10,%rax,4),%rsi
add    $0xc,%rsi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    (%r8,%rdx,1),%rbp
movslq %ebp,%rbp
mov    (%rdi,%rbp,4),%ebx
mov    %ebx,-0xc(%rsi,%rdx,4)
lea    0x1(%rbp),%ebx
movslq %ebx,%rbx
mov    (%rdi,%rbx,4),%ebx
mov    %ebx,-0x8(%rsi,%rdx,4)
lea    0x2(%rbp),%ebx
movslq %ebx,%rbx
mov    (%rdi,%rbx,4),%ebx
mov    %ebx,-0x4(%rsi,%rdx,4)
add    $0x3,%ebp
movslq %ebp,%rbp
mov    (%rdi,%rbp,4),%ebp
mov    %ebp,(%rsi,%rdx,4)
add    $0x4,%rdx
add    $0xfffffffffffffffe,%rcx
jne    16b0 <Caculate_len+0x5b0>
add    %rdx,%rax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r8,%rdx
not    %rdx
add    %r14,%rdx
mov    -0x58(%rsp),%rbp
lea    0x0(%rbp,%rbp,1),%ecx
mov    %edx,%esi
add    %esi,%esi
setb   %bl
lea    (%rsi,%rbp,2),%ebp
cmp    %ecx,%ebp
jl     1637 <Caculate_len+0x537>
test   %bl,%bl
jne    1637 <Caculate_len+0x537>
shr    $0x20,%rdx
jne    1637 <Caculate_len+0x537>
mov    -0x58(%rsp),%rbp
lea    0x1(%rbp,%rbp,1),%r9d
lea    (%rsi,%rbp,2),%esi
add    $0x1,%esi
cmp    %r9d,%esi
jl     1637 <Caculate_len+0x537>
test   %bl,%bl
jne    1637 <Caculate_len+0x537>
test   %rdx,%rdx
jne    1637 <Caculate_len+0x537>
lea    (%r10,%rax,4),%rbp
lea    (%r8,%r8,1),%rdx
mov    -0x58(%rsp),%rsi
add    %esi,%esi
movslq %esi,%rsi
lea    (%rsi,%r14,2),%rbx
sub    %rdx,%rbx
lea    (%rdi,%rbx,4),%rbx
cmp    %rbx,%rbp
jae    1796 <Caculate_len+0x696>
lea    (%rax,%r14,2),%rbp
sub    %rdx,%rbp
lea    (%r10,%rbp,4),%rdx
lea    (%rdi,%rsi,4),%rsi
cmp    %rdx,%rsi
jb     1637 <Caculate_len+0x537>
mov    %r11,%r8
and    $0xfffffffffffffffe,%r8
lea    -0x2(%r8),%rdx
mov    %rdx,%r9
shr    %r9
add    $0x1,%r9
test   %rdx,%rdx
je     1830 <Caculate_len+0x730>
mov    %r9,%rsi
and    $0xfffffffffffffffe,%rsi
lea    (%r10,%rax,4),%rdx
add    $0x10,%rdx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
movslq %ecx,%rcx
movups (%rdi,%rcx,4),%xmm0
movups %xmm0,-0x10(%rdx,%rbp,8)
lea    0x4(%rcx),%ebx
movslq %ebx,%rbx
movups (%rdi,%rbx,4),%xmm0
movups %xmm0,(%rdx,%rbp,8)
add    $0x4,%rbp
add    $0x8,%ecx
add    $0xfffffffffffffffe,%rsi
jne    17d0 <Caculate_len+0x6d0>
test   $0x1,%r9b
je     1813 <Caculate_len+0x713>
lea    (%rax,%rbp,2),%rcx
add    -0x58(%rsp),%ebp
add    %ebp,%ebp
movslq %ebp,%rdx
movups (%rdi,%rdx,4),%xmm0
movups %xmm0,(%r10,%rcx,4)
lea    (%rax,%r8,2),%rax
cmp    %r8,%r11
je     16f1 <Caculate_len+0x5f1>
mov    -0x68(%rsp),%rcx
add    %r8,%rcx
mov    %rcx,%r8
jmp    1637 <Caculate_len+0x537>
xor    %ebp,%ebp
test   $0x1,%r9b
jne    17fd <Caculate_len+0x6fd>
jmp    1813 <Caculate_len+0x713>

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

LLVM IR (-O2):
define i32 @Caculate_len(i32* nocapture %0, i32* nocapture writeonly %1, i32 %2) {
%4 = sext i32 %2 to i64
br label %5
5: ; preds = %281, %3
%6 = phi i32 [ 0, %3 ], [ %282, %281 ]
%7 = phi i32 [ 0, %3 ], [ %283, %281 ]
%8 = sext i32 %6 to i64
%9 = call i32 @llvm.smax.i32(i32 %6, i32 %2)
%10 = sext i32 %9 to i64
br label %11
11: ; preds = %5, %284
%12 = phi i64 [ %8, %5 ], [ %20, %284 ]
%13 = phi i32 [ %6, %5 ], [ %16, %284 ]
%14 = phi i32 [ 0, %5 ], [ %287, %284 ]
%15 = phi i32 [ 0, %5 ], [ %289, %284 ]
%16 = add i32 %13, 1
%17 = icmp eq i64 %12, %10
br i1 %17, label %331, label %18
18: ; preds = %11
%19 = sext i32 %16 to i64
%20 = add nsw i64 %12, 1
%21 = trunc i64 %12 to i32
%22 = shl nsw i32 %21, 1
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i32, i32* %0, i64 %23
%25 = or i32 %22, 1
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i32, i32* %0, i64 %26
br label %28
28: ; preds = %48, %18
%29 = phi i64 [ %54, %48 ], [ %19, %18 ]
%30 = phi i32 [ %51, %48 ], [ 0, %18 ]
%31 = phi i32 [ %53, %48 ], [ 1, %18 ]
%32 = icmp slt i64 %29, %4
br i1 %32, label %33, label %64
33: ; preds = %28
%34 = trunc i64 %29 to i32
%35 = load i32, i32* %24
%36 = shl nsw i32 %34, 1
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i32, i32* %0, i64 %37
%39 = load i32, i32* %38
%40 = icmp eq i32 %35, %39
br i1 %40, label %41, label %58
41: ; preds = %33
%42 = load i32, i32* %27
%43 = or i32 %36, 1
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i32, i32* %0, i64 %44
%46 = load i32, i32* %45
%47 = icmp eq i32 %42, %46
br i1 %47, label %48, label %62
48: ; preds = %41
%49 = icmp sgt i32 %31, 14
%50 = zext i1 %49 to i32
%51 = add nuw nsw i32 %30, %50
%52 = select i1 %49, i32 -15, i32 1
%53 = add nsw i32 %52, %31
%54 = add nsw i64 %29, 1
%55 = shl nsw i32 %51, 4
%56 = add nsw i32 %55, %53
%57 = icmp sgt i32 %56, 129
br i1 %57, label %60, label %28
58: ; preds = %33
%59 = trunc i64 %29 to i32
br label %64
60: ; preds = %48
%61 = trunc i64 %54 to i32
br label %64
62: ; preds = %41
%63 = trunc i64 %29 to i32
br label %64
64: ; preds = %28, %62, %60, %58
%65 = phi i32 [ %59, %58 ], [ %61, %60 ], [ %63, %62 ], [ %2, %28 ]
%66 = phi i32 [ %30, %58 ], [ %51, %60 ], [ %30, %62 ], [ %30, %28 ]
%67 = phi i32 [ %31, %58 ], [ %53, %60 ], [ %31, %62 ], [ %31, %28 ]
%68 = icmp sgt i32 %67, 2
%69 = icmp sgt i32 %66, 0
%70 = select i1 %68, i1 true, i1 %69
br i1 %70, label %71, label %284
71: ; preds = %64
%72 = trunc i64 %12 to i32
%73 = icmp sgt i32 %15, 0
%74 = icmp ne i32 %14, 0
%75 = select i1 %73, i1 true, i1 %74
br i1 %75, label %76, label %88
76: ; preds = %71
%77 = icmp slt i32 %15, 1
%78 = sext i1 %77 to i32
%79 = add nsw i32 %14, %78
%80 = select i1 %77, i32 15, i32 -1
%81 = add nsw i32 %80, %15
%82 = add nsw i32 %7, 1
%83 = sext i32 %7 to i64
%84 = getelementptr inbounds i32, i32* %1, i64 %83
store i32 %79, i32* %84
%85 = add nsw i32 %7, 2
%86 = sext i32 %82 to i64
%87 = getelementptr inbounds i32, i32* %1, i64 %86
store i32 %81, i32* %87
br label %88
88: ; preds = %71, %76
%89 = phi i32 [ %85, %76 ], [ %7, %71 ]
%90 = icmp slt i32 %6, %72
br i1 %90, label %91, label %257
91: ; preds = %88
%92 = sext i32 %89 to i64
%93 = shl i64 %12, 32
%94 = ashr exact i64 %93, 32
%95 = sub nsw i64 %94, %8
%96 = icmp ult i64 %95, 2
br i1 %96, label %195, label %97
97: ; preds = %91
%98 = xor i64 %8, -1
%99 = add nsw i64 %94, %98
%100 = shl i32 %6, 1
%101 = trunc i64 %99 to i32
%102 = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %101, i32 2)
%103 = extractvalue { i32, i1 } %102, 0
%104 = extractvalue { i32, i1 } %102, 1
%105 = add i32 %100, %103
%106 = icmp slt i32 %105, %100
%107 = or i1 %106, %104
%108 = icmp ugt i64 %99, 4294967295
%109 = or i1 %107, %108
%110 = or i32 %100, 1
%111 = trunc i64 %99 to i32
%112 = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %111, i32 2)
%113 = extractvalue { i32, i1 } %112, 0
%114 = extractvalue { i32, i1 } %112, 1
%115 = add i32 %110, %113
%116 = icmp slt i32 %115, %110
%117 = or i1 %116, %114
%118 = icmp ugt i64 %99, 4294967295
%119 = or i1 %117, %118
%120 = or i1 %109, %119
br i1 %120, label %195, label %121
121: ; preds = %97
%122 = getelementptr i32, i32* %1, i64 %92
%123 = ashr exact i64 %93, 31
%124 = add nsw i64 %123, %92
%125 = shl nsw i64 %8, 1
%126 = sub nsw i64 %124, %125
%127 = getelementptr i32, i32* %1, i64 %126
%128 = shl i32 %6, 1
%129 = sext i32 %128 to i64
%130 = getelementptr i32, i32* %0, i64 %129
%131 = add nsw i64 %123, %129
%132 = sub nsw i64 %131, %125
%133 = getelementptr i32, i32* %0, i64 %132
%134 = icmp ult i32* %122, %133
%135 = icmp ult i32* %130, %127
%136 = and i1 %134, %135
br i1 %136, label %195, label %137
137: ; preds = %121
%138 = and i64 %95, -2
%139 = add nsw i64 %138, %8
%140 = shl nsw i64 %138, 1
%141 = add nsw i64 %140, %92
%142 = add nsw i64 %138, -2
%143 = lshr exact i64 %142, 1
%144 = add nuw i64 %143, 1
%145 = and i64 %144, 1
%146 = icmp eq i64 %142, 0
br i1 %146, label %178, label %147
147: ; preds = %137
%148 = and i64 %144, -2
br label %149
149: ; preds = %149, %147
%150 = phi i64 [ 0, %147 ], [ %175, %149 ]
%151 = phi i64 [ 0, %147 ], [ %176, %149 ]
%152 = shl i64 %150, 1
%153 = add i64 %152, %92
%154 = trunc i64 %150 to i32
%155 = add i32 %6, %154
%156 = shl nsw i32 %155, 1
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds i32, i32* %0, i64 %157
%159 = bitcast i32* %158 to <4 x i32>*
%160 = load <4 x i32>, <4 x i32>* %159
%161 = getelementptr inbounds i32, i32* %1, i64 %153
%162 = bitcast i32* %161 to <4 x i32>*
store <4 x i32> %160, <4 x i32>* %162
%163 = or i64 %150, 2
%164 = shl i64 %163, 1
%165 = add i64 %164, %92
%166 = trunc i64 %163 to i32
%167 = add i32 %6, %166
%168 = shl nsw i32 %167, 1
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i32, i32* %0, i64 %169
%171 = bitcast i32* %170 to <4 x i32>*
%172 = load <4 x i32>, <4 x i32>* %171
%173 = getelementptr inbounds i32, i32* %1, i64 %165
%174 = bitcast i32* %173 to <4 x i32>*
store <4 x i32> %172, <4 x i32>* %174
%175 = add nuw i64 %150, 4
%176 = add nuw i64 %151, 2
%177 = icmp eq i64 %176, %148
br i1 %177, label %178, label %149
178: ; preds = %149, %137
%179 = phi i64 [ 0, %137 ], [ %175, %149 ]
%180 = icmp eq i64 %145, 0
br i1 %180, label %193, label %181
181: ; preds = %178
%182 = shl i64 %179, 1
%183 = add i64 %182, %92
%184 = trunc i64 %179 to i32
%185 = add i32 %6, %184
%186 = shl nsw i32 %185, 1
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds i32, i32* %0, i64 %187
%189 = bitcast i32* %188 to <4 x i32>*
%190 = load <4 x i32>, <4 x i32>* %189
%191 = getelementptr inbounds i32, i32* %1, i64 %183
%192 = bitcast i32* %191 to <4 x i32>*
store <4 x i32> %190, <4 x i32>* %192
br label %193
193: ; preds = %178, %181
%194 = icmp eq i64 %95, %138
br i1 %194, label %254, label %195
195: ; preds = %121, %97, %91, %193
%196 = phi i64 [ %8, %121 ], [ %8, %97 ], [ %8, %91 ], [ %139, %193 ]
%197 = phi i64 [ %92, %121 ], [ %92, %97 ], [ %92, %91 ], [ %141, %193 ]
%198 = sub i64 %12, %196
%199 = add nsw i64 %196, 1
%200 = and i64 %198, 1
%201 = icmp eq i64 %200, 0
br i1 %201, label %217, label %202
202: ; preds = %195
%203 = trunc i64 %196 to i32
%204 = shl nsw i32 %203, 1
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds i32, i32* %0, i64 %205
%207 = load i32, i32* %206
%208 = add nsw i64 %197, 1
%209 = getelementptr inbounds i32, i32* %1, i64 %197
store i32 %207, i32* %209
%210 = or i32 %204, 1
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds i32, i32* %0, i64 %211
%213 = load i32, i32* %212
%214 = add nsw i64 %197, 2
%215 = getelementptr inbounds i32, i32* %1, i64 %208
store i32 %213, i32* %215
%216 = add nsw i64 %196, 1
br label %217
217: ; preds = %202, %195
%218 = phi i64 [ undef, %195 ], [ %214, %202 ]
%219 = phi i64 [ %196, %195 ], [ %216, %202 ]
%220 = phi i64 [ %197, %195 ], [ %214, %202 ]
%221 = icmp eq i64 %94, %199
br i1 %221, label %254, label %222
222: ; preds = %217, %222
%223 = phi i64 [ %252, %222 ], [ %219, %217 ]
%224 = phi i64 [ %250, %222 ], [ %220, %217 ]
%225 = trunc i64 %223 to i32
%226 = shl nsw i32 %225, 1
%227 = sext i32 %226 to i64
%228 = getelementptr inbounds i32, i32* %0, i64 %227
%229 = load i32, i32* %228
%230 = add nsw i64 %224, 1
%231 = getelementptr inbounds i32, i32* %1, i64 %224
store i32 %229, i32* %231
%232 = or i32 %226, 1
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i32, i32* %0, i64 %233
%235 = load i32, i32* %234
%236 = add nsw i64 %224, 2
%237 = getelementptr inbounds i32, i32* %1, i64 %230
store i32 %235, i32* %237
%238 = trunc i64 %223 to i32
%239 = shl i32 %238, 1
%240 = add i32 %239, 2
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds i32, i32* %0, i64 %241
%243 = load i32, i32* %242
%244 = add nsw i64 %224, 3
%245 = getelementptr inbounds i32, i32* %1, i64 %236
store i32 %243, i32* %245
%246 = or i32 %240, 1
%247 = sext i32 %246 to i64
%248 = getelementptr inbounds i32, i32* %0, i64 %247
%249 = load i32, i32* %248
%250 = add nsw i64 %224, 4
%251 = getelementptr inbounds i32, i32* %1, i64 %244
store i32 %249, i32* %251
%252 = add nsw i64 %223, 2
%253 = icmp eq i64 %252, %94
br i1 %253, label %254, label %222
254: ; preds = %217, %222, %193
%255 = phi i64 [ %141, %193 ], [ %218, %217 ], [ %250, %222 ]
%256 = trunc i64 %255 to i32
br label %257
257: ; preds = %254, %88
%258 = phi i32 [ %89, %88 ], [ %256, %254 ]
%259 = icmp slt i32 %67, 3
%260 = sext i1 %259 to i32
%261 = select i1 %259, i32 13, i32 -3
%262 = add nsw i32 %261, %67
%263 = add i32 %66, 8
%264 = add i32 %263, %260
%265 = add nsw i32 %258, 1
%266 = sext i32 %258 to i64
%267 = getelementptr inbounds i32, i32* %1, i64 %266
store i32 %264, i32* %267
%268 = add nsw i32 %258, 2
%269 = sext i32 %265 to i64
%270 = getelementptr inbounds i32, i32* %1, i64 %269
store i32 %262, i32* %270
%271 = load i32, i32* %24
%272 = add nsw i32 %258, 3
%273 = sext i32 %268 to i64
%274 = getelementptr inbounds i32, i32* %1, i64 %273
store i32 %271, i32* %274
%275 = load i32, i32* %27
%276 = add nsw i32 %258, 4
%277 = sext i32 %272 to i64
%278 = getelementptr inbounds i32, i32* %1, i64 %277
store i32 %275, i32* %278
br label %281
279: ; preds = %309
%280 = trunc i64 %327 to i32
br label %281
281: ; preds = %279, %291, %257
%282 = phi i32 [ %65, %257 ], [ %293, %291 ], [ %293, %279 ]
%283 = phi i32 [ %276, %257 ], [ %304, %291 ], [ %280, %279 ]
br label %5
284: ; preds = %64
%285 = icmp sgt i32 %15, 14
%286 = zext i1 %285 to i32
%287 = add nuw nsw i32 %14, %286
%288 = select i1 %285, i32 -15, i32 1
%289 = add nsw i32 %288, %15
%290 = icmp ugt i32 %287, 7
br i1 %290, label %291, label %11
291: ; preds = %284
%292 = trunc i64 %12 to i32
%293 = trunc i64 %20 to i32
%294 = icmp slt i32 %289, 1
%295 = sext i1 %294 to i32
%296 = add nsw i32 %287, %295
%297 = select i1 %294, i32 15, i32 -1
%298 = add nsw i32 %297, %289
%299 = add nsw i32 %7, 1
%300 = sext i32 %7 to i64
%301 = getelementptr inbounds i32, i32* %1, i64 %300
store i32 %296, i32* %301
%302 = sext i32 %299 to i64
%303 = getelementptr inbounds i32, i32* %1, i64 %302
store i32 %298, i32* %303
%304 = add i32 %7, 2
%305 = icmp sgt i32 %6, %292
br i1 %305, label %281, label %306
306: ; preds = %291
%307 = sext i32 %304 to i64
%308 = add i32 %292, 1
br label %309
309: ; preds = %306, %309
%310 = phi i64 [ %8, %306 ], [ %326, %309 ]
%311 = phi i64 [ %307, %306 ], [ %327, %309 ]
%312 = phi i32 [ %7, %306 ], [ %328, %309 ]
%313 = trunc i64 %310 to i32
%314 = shl nsw i32 %313, 1
%315 = sext i32 %314 to i64
%316 = getelementptr inbounds i32, i32* %0, i64 %315
%317 = load i32, i32* %316
%318 = add nsw i32 %312, 3
%319 = getelementptr inbounds i32, i32* %1, i64 %311
store i32 %317, i32* %319
%320 = or i32 %314, 1
%321 = sext i32 %320 to i64
%322 = getelementptr inbounds i32, i32* %0, i64 %321
%323 = load i32, i32* %322
%324 = sext i32 %318 to i64
%325 = getelementptr inbounds i32, i32* %1, i64 %324
store i32 %323, i32* %325
%326 = add nsw i64 %310, 1
%327 = add nsw i64 %311, 2
%328 = trunc i64 %311 to i32
%329 = trunc i64 %326 to i32
%330 = icmp eq i32 %308, %329
br i1 %330, label %279, label %309
331: ; preds = %11
%332 = icmp sgt i32 %15, 0
%333 = icmp ne i32 %14, 0
%334 = select i1 %332, i1 true, i1 %333
br i1 %334, label %335, label %347
335: ; preds = %331
%336 = icmp slt i32 %15, 1
%337 = sext i1 %336 to i32
%338 = add nsw i32 %14, %337
%339 = select i1 %336, i32 15, i32 -1
%340 = add nsw i32 %339, %15
%341 = add nsw i32 %7, 1
%342 = sext i32 %7 to i64
%343 = getelementptr inbounds i32, i32* %1, i64 %342
store i32 %338, i32* %343
%344 = add nsw i32 %7, 2
%345 = sext i32 %341 to i64
%346 = getelementptr inbounds i32, i32* %1, i64 %345
store i32 %340, i32* %346
br label %347
347: ; preds = %331, %335
%348 = phi i32 [ %344, %335 ], [ %7, %331 ]
%349 = icmp slt i32 %6, %2
br i1 %349, label %350, label %515
350: ; preds = %347
%351 = sext i32 %348 to i64
%352 = sub nsw i64 %10, %8
%353 = icmp ult i64 %352, 2
br i1 %353, label %452, label %354
354: ; preds = %350
%355 = xor i64 %8, -1
%356 = add nsw i64 %355, %10
%357 = shl i32 %6, 1
%358 = trunc i64 %356 to i32
%359 = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %358, i32 2)
%360 = extractvalue { i32, i1 } %359, 0
%361 = extractvalue { i32, i1 } %359, 1
%362 = add i32 %357, %360
%363 = icmp slt i32 %362, %357
%364 = or i1 %363, %361
%365 = icmp ugt i64 %356, 4294967295
%366 = or i1 %364, %365
%367 = or i32 %357, 1
%368 = trunc i64 %356 to i32
%369 = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %368, i32 2)
%370 = extractvalue { i32, i1 } %369, 0
%371 = extractvalue { i32, i1 } %369, 1
%372 = add i32 %367, %370
%373 = icmp slt i32 %372, %367
%374 = or i1 %373, %371
%375 = icmp ugt i64 %356, 4294967295
%376 = or i1 %374, %375
%377 = or i1 %366, %376
br i1 %377, label %452, label %378
378: ; preds = %354
%379 = getelementptr i32, i32* %1, i64 %351
%380 = shl nsw i64 %10, 1
%381 = add nsw i64 %380, %351
%382 = shl nsw i64 %8, 1
%383 = sub nsw i64 %381, %382
%384 = getelementptr i32, i32* %1, i64 %383
%385 = shl i32 %6, 1
%386 = sext i32 %385 to i64
%387 = getelementptr i32, i32* %0, i64 %386
%388 = add nsw i64 %380, %386
%389 = sub nsw i64 %388, %382
%390 = getelementptr i32, i32* %0, i64 %389
%391 = icmp ult i32* %379, %390
%392 = icmp ult i32* %387, %384
%393 = and i1 %391, %392
br i1 %393, label %452, label %394
394: ; preds = %378
%395 = and i64 %352, -2
%396 = add nsw i64 %395, %8
%397 = shl nsw i64 %395, 1
%398 = add nsw i64 %397, %351
%399 = add nsw i64 %395, -2
%400 = lshr exact i64 %399, 1
%401 = add nuw i64 %400, 1
%402 = and i64 %401, 1
%403 = icmp eq i64 %399, 0
br i1 %403, label %435, label %404
404: ; preds = %394
%405 = and i64 %401, -2
br label %406
406: ; preds = %406, %404
%407 = phi i64 [ 0, %404 ], [ %432, %406 ]
%408 = phi i64 [ 0, %404 ], [ %433, %406 ]
%409 = shl i64 %407, 1
%410 = add i64 %409, %351
%411 = trunc i64 %407 to i32
%412 = add i32 %6, %411
%413 = shl nsw i32 %412, 1
%414 = sext i32 %413 to i64
%415 = getelementptr inbounds i32, i32* %0, i64 %414
%416 = bitcast i32* %415 to <4 x i32>*
%417 = load <4 x i32>, <4 x i32>* %416
%418 = getelementptr inbounds i32, i32* %1, i64 %410
%419 = bitcast i32* %418 to <4 x i32>*
store <4 x i32> %417, <4 x i32>* %419
%420 = or i64 %407, 2
%421 = shl i64 %420, 1
%422 = add i64 %421, %351
%423 = trunc i64 %420 to i32
%424 = add i32 %6, %423
%425 = shl nsw i32 %424, 1
%426 = sext i32 %425 to i64
%427 = getelementptr inbounds i32, i32* %0, i64 %426
%428 = bitcast i32* %427 to <4 x i32>*
%429 = load <4 x i32>, <4 x i32>* %428
%430 = getelementptr inbounds i32, i32* %1, i64 %422
%431 = bitcast i32* %430 to <4 x i32>*
store <4 x i32> %429, <4 x i32>* %431
%432 = add nuw i64 %407, 4
%433 = add nuw i64 %408, 2
%434 = icmp eq i64 %433, %405
br i1 %434, label %435, label %406
435: ; preds = %406, %394
%436 = phi i64 [ 0, %394 ], [ %432, %406 ]
%437 = icmp eq i64 %402, 0
br i1 %437, label %450, label %438
438: ; preds = %435
%439 = shl i64 %436, 1
%440 = add i64 %439, %351
%441 = trunc i64 %436 to i32
%442 = add i32 %6, %441
%443 = shl nsw i32 %442, 1
%444 = sext i32 %443 to i64
%445 = getelementptr inbounds i32, i32* %0, i64 %444
%446 = bitcast i32* %445 to <4 x i32>*
%447 = load <4 x i32>, <4 x i32>* %446
%448 = getelementptr inbounds i32, i32* %1, i64 %440
%449 = bitcast i32* %448 to <4 x i32>*
store <4 x i32> %447, <4 x i32>* %449
br label %450
450: ; preds = %435, %438
%451 = icmp eq i64 %352, %395
br i1 %451, label %512, label %452
452: ; preds = %378, %354, %350, %450
%453 = phi i64 [ %8, %378 ], [ %8, %354 ], [ %8, %350 ], [ %396, %450 ]
%454 = phi i64 [ %351, %378 ], [ %351, %354 ], [ %351, %350 ], [ %398, %450 ]
%455 = sub nsw i64 %10, %453
%456 = xor i64 %453, -1
%457 = and i64 %455, 1
%458 = icmp eq i64 %457, 0
br i1 %458, label %474, label %459
459: ; preds = %452
%460 = trunc i64 %453 to i32
%461 = shl nsw i32 %460, 1
%462 = sext i32 %461 to i64
%463 = getelementptr inbounds i32, i32* %0, i64 %462
%464 = load i32, i32* %463
%465 = add nsw i64 %454, 1
%466 = getelementptr inbounds i32, i32* %1, i64 %454
store i32 %464, i32* %466
%467 = or i32 %461, 1
%468 = sext i32 %467 to i64
%469 = getelementptr inbounds i32, i32* %0, i64 %468
%470 = load i32, i32* %469
%471 = add nsw i64 %454, 2
%472 = getelementptr inbounds i32, i32* %1, i64 %465
store i32 %470, i32* %472
%473 = add nsw i64 %453, 1
br label %474
474: ; preds = %459, %452
%475 = phi i64 [ undef, %452 ], [ %471, %459 ]
%476 = phi i64 [ %453, %452 ], [ %473, %459 ]
%477 = phi i64 [ %454, %452 ], [ %471, %459 ]
%478 = sub nsw i64 0, %10
%479 = icmp eq i64 %456, %478
br i1 %479, label %512, label %480
480: ; preds = %474, %480
%481 = phi i64 [ %510, %480 ], [ %476, %474 ]
%482 = phi i64 [ %508, %480 ], [ %477, %474 ]
%483 = trunc i64 %481 to i32
%484 = shl nsw i32 %483, 1
%485 = sext i32 %484 to i64
%486 = getelementptr inbounds i32, i32* %0, i64 %485
%487 = load i32, i32* %486
%488 = add nsw i64 %482, 1
%489 = getelementptr inbounds i32, i32* %1, i64 %482
store i32 %487, i32* %489
%490 = or i32 %484, 1
%491 = sext i32 %490 to i64
%492 = getelementptr inbounds i32, i32* %0, i64 %491
%493 = load i32, i32* %492
%494 = add nsw i64 %482, 2
%495 = getelementptr inbounds i32, i32* %1, i64 %488
store i32 %493, i32* %495
%496 = trunc i64 %481 to i32
%497 = shl i32 %496, 1
%498 = add i32 %497, 2
%499 = sext i32 %498 to i64
%500 = getelementptr inbounds i32, i32* %0, i64 %499
%501 = load i32, i32* %500
%502 = add nsw i64 %482, 3
%503 = getelementptr inbounds i32, i32* %1, i64 %494
store i32 %501, i32* %503
%504 = or i32 %498, 1
%505 = sext i32 %504 to i64
%506 = getelementptr inbounds i32, i32* %0, i64 %505
%507 = load i32, i32* %506
%508 = add nsw i64 %482, 4
%509 = getelementptr inbounds i32, i32* %1, i64 %502
store i32 %507, i32* %509
%510 = add nsw i64 %481, 2
%511 = icmp eq i64 %510, %10
br i1 %511, label %512, label %480
512: ; preds = %474, %480, %450
%513 = phi i64 [ %398, %450 ], [ %475, %474 ], [ %508, %480 ]
%514 = trunc i64 %513 to i32
br label %515
515: ; preds = %512, %347
%516 = phi i32 [ %348, %347 ], [ %514, %512 ]
ret i32 %516
}