int tautString_TV1(double *y, double lambda, double *x, int n) {
  double mn, mx;
  double mnHeight, mxHeight;
  int mnBreak, mxBreak;
  int lastBreak;
  int i, j;
  const double minuslambda = -lambda;
  const double lambda2 = 2 * lambda;
  const double minuslambda2 = 2 * minuslambda;
  mnHeight = mxHeight = 0;
  mn = minuslambda + y[0];
  mx = lambda + y[0];
  lastBreak = -1;
  mnBreak = mxBreak = 0;
  i = 0;
  while (i < n) {
    while (i < n - 1) {
      mnHeight += mn - y[i];
      if (lambda < mnHeight) {
        i = mnBreak + 1;
        for (j = lastBreak + 1; j <= mnBreak; j++)
          x[j] = mn;
        lastBreak = mnBreak;
        mn = y[i];
        mx = lambda2 + y[i];
        mxHeight = lambda;
        mnHeight = minuslambda;
        mnBreak = mxBreak = i;
        i++;
        continue;
      }
      mxHeight += mx - y[i];
      if (minuslambda > mxHeight) {
        i = mxBreak + 1;
        for (j = lastBreak + 1; j <= mxBreak; j++)
          x[j] = mx;
        lastBreak = mxBreak;
        mx = y[i];
        mn = minuslambda2 + y[i];
        mxHeight = lambda;
        mnHeight = minuslambda;
        mnBreak = mxBreak = i;
        i++;
        continue;
      }
      if (mxHeight >= lambda) {
        mx += (lambda - mxHeight) / (i - lastBreak);
        mxHeight = lambda;
        mxBreak = i;
      }
      if (mnHeight <= minuslambda) {
        mn += (minuslambda - mnHeight) / (i - lastBreak);
        mnHeight = minuslambda;
        mnBreak = i;
      }
      i++;
    }
    mnHeight += mn - y[i];
    if ((mnHeight > 1e-10)) {
      i = mnBreak + 1;
      for (j = lastBreak + 1; j <= mnBreak; j++)
        x[j] = mn;
      lastBreak = mnBreak;
      mn = y[i];
      mx = lambda2 + y[i];
      mxHeight = mnHeight = minuslambda;
      mnBreak = mxBreak = i;
      continue;
    }
    mxHeight += mx - y[i];
    if ((mxHeight < -1e-10)) {
      i = mxBreak + 1;
      for (j = lastBreak + 1; j <= mxBreak; j++)
        x[j] = mx;
      lastBreak = mxBreak;
      mx = y[i];
      mn = minuslambda2 + y[i];
      mxHeight = mnHeight = lambda;
      mnBreak = mxBreak = i;
      continue;
    }
    if (mnHeight <= 0) {
      mn += (-mnHeight) / (i - lastBreak);
    }
    i++;
  }
  for (i = lastBreak + 1; i < n; i++)
    x[i] = mn;
  return 1;
}


x86 assembly (clang, -O0):
<tautString_TV1>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xec3(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xeb1(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x10(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0xffffffff,-0x4c(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    15b3 <tautString_TV1+0x4b3>
jmp    11ba <tautString_TV1+0xba>
mov    -0x50(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13ed <tautString_TV1+0x2ed>
movsd  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1293 <tautString_TV1+0x193>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     1239 <tautString_TV1+0x139>
movsd  -0x28(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    120d <tautString_TV1+0x10d>
mov    -0x44(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    %eax,-0x44(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    11ba <tautString_TV1+0xba>
movsd  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x60(%rbp),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    1357 <tautString_TV1+0x257>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x48(%rbp),%eax
jg     12fd <tautString_TV1+0x1fd>
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    12d1 <tautString_TV1+0x1d1>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    %eax,-0x44(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    11ba <tautString_TV1+0xba>
movsd  -0x40(%rbp),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     1399 <tautString_TV1+0x299>
movsd  -0x10(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x50(%rbp),%eax
sub    -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x48(%rbp)
movsd  -0x38(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     13df <tautString_TV1+0x2df>
movsd  -0x60(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
mov    -0x50(%rbp),%eax
sub    -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    11ba <tautString_TV1+0xba>
movsd  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xbf2(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    14aa <tautString_TV1+0x3aa>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     145e <tautString_TV1+0x35e>
movsd  -0x28(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1432 <tautString_TV1+0x332>
mov    -0x44(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    %eax,-0x44(%rbp)
jmp    11a9 <tautString_TV1+0xa9>
movsd  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xb42(%rip),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    1563 <tautString_TV1+0x463>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x48(%rbp),%eax
jg     1517 <tautString_TV1+0x417>
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    14eb <tautString_TV1+0x3eb>
mov    -0x48(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    %eax,-0x44(%rbp)
jmp    11a9 <tautString_TV1+0xa9>
xorps  %xmm0,%xmm0
ucomisd -0x38(%rbp),%xmm0
jb     15a5 <tautString_TV1+0x4a5>
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x50(%rbp),%eax
sub    -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    11a9 <tautString_TV1+0xa9>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    15e8 <tautString_TV1+0x4e8>
movsd  -0x28(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    15bc <tautString_TV1+0x4bc>
mov    $0x1,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<tautString_TV1>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movsd  (%rdi),%xmm2
movapd %xmm2,%xmm3
subsd  %xmm0,%xmm3
test   %edx,%edx
jle    1776 <tautString_TV1+0x676>
movapd 0xeda(%rip),%xmm5
xorpd  %xmm0,%xmm5
movapd %xmm0,%xmm12
addsd  %xmm0,%xmm12
movsd  0xed3(%rip),%xmm11
mulsd  %xmm0,%xmm11
addsd  %xmm0,%xmm2
lea    -0x1(%rdx),%r14d
lea    0x78(%rsi),%rax
mov    %rax,-0x10(%rsp)
lea    0x18(%rsi),%rax
mov    %rax,-0x8(%rsp)
mov    $0xffffffff,%r10d
xor    %eax,%eax
xorpd  %xmm8,%xmm8
movsd  0xea6(%rip),%xmm10
movsd  0xea5(%rip),%xmm9
xorpd  %xmm6,%xmm6
xor    %r11d,%r11d
xor    %r15d,%r15d
xorpd  %xmm1,%xmm1
jmp    11b7 <tautString_TV1+0xb7>
nopl   0x0(%rax,%rax,1)
movslq %r15d,%rax
movsd  (%rdi,%rax,8),%xmm3
movapd %xmm12,%xmm2
addsd  %xmm3,%xmm2
movapd %xmm5,%xmm1
mov    %r15d,%r11d
mov    %r15d,%eax
movapd %xmm5,%xmm6
cmp    %edx,%eax
jge    177c <tautString_TV1+0x67c>
movapd %xmm6,%xmm7
mov    %r10d,%r8d
mov    %r10d,%r12d
mov    %r15d,%r10d
mov    %r11d,%r13d
cmp    %r14d,%eax
jge    14e3 <tautString_TV1+0x3e3>
mov    %r8d,%r12d
cltq
movslq %r8d,%rcx
mov    %ecx,%ebp
neg    %ebp
mov    %r11d,%r13d
mov    %r15d,%r8d
jmp    11fd <tautString_TV1+0xfd>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rax
cmp    %r14,%rax
jge    14e0 <tautString_TV1+0x3e0>
movapd %xmm7,%xmm4
movsd  (%rdi,%rax,8),%xmm6
movapd %xmm3,%xmm7
subsd  %xmm6,%xmm7
addsd  %xmm4,%xmm7
ucomisd %xmm0,%xmm7
ja     1290 <tautString_TV1+0x190>
movapd %xmm2,%xmm4
subsd  %xmm6,%xmm4
addsd  %xmm4,%xmm1
ucomisd %xmm1,%xmm5
ja     12f0 <tautString_TV1+0x1f0>
ucomisd %xmm0,%xmm1
jb     1255 <tautString_TV1+0x155>
movapd %xmm0,%xmm4
subsd  %xmm1,%xmm4
lea    (%rax,%rbp,1),%ebx
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
divsd  %xmm1,%xmm4
addsd  %xmm4,%xmm2
movapd %xmm0,%xmm1
mov    %eax,%r13d
ucomisd %xmm7,%xmm5
jb     11f0 <tautString_TV1+0xf0>
movapd %xmm5,%xmm4
subsd  %xmm7,%xmm4
lea    (%rax,%rbp,1),%ebx
xorps  %xmm6,%xmm6
cvtsi2sd %ebx,%xmm6
divsd  %xmm6,%xmm4
addsd  %xmm4,%xmm3
mov    %eax,%r8d
movapd %xmm5,%xmm7
jmp    11f0 <tautString_TV1+0xf0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    0x1(%r8),%r11d
cmp    %r8d,%r12d
jge    13ef <tautString_TV1+0x2ef>
movslq %r8d,%rbx
mov    %rbx,%r12
sub    %rcx,%r12
cmp    $0x4,%r12
jb     13e0 <tautString_TV1+0x2e0>
mov    %r12,%r15
and    $0xfffffffffffffffc,%r15
movapd %xmm3,%xmm1
unpcklpd %xmm3,%xmm1
lea    -0x4(%r15),%rax
mov    %rax,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
mov    %ebp,%r13d
and    $0x3,%r13d
cmp    $0xc,%rax
jae    1346 <tautString_TV1+0x246>
xor    %eax,%eax
jmp    13a1 <tautString_TV1+0x2a1>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    0x1(%r13),%r11d
cmp    %r13d,%r12d
jge    149f <tautString_TV1+0x39f>
movslq %r13d,%r9
mov    %r9,%r12
sub    %rcx,%r12
cmp    $0x4,%r12
jb     1490 <tautString_TV1+0x390>
mov    %r12,%r15
and    $0xfffffffffffffffc,%r15
movapd %xmm2,%xmm1
unpcklpd %xmm2,%xmm1
lea    -0x4(%r15),%rax
mov    %rax,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
mov    %ebp,%r8d
and    $0x3,%r8d
cmp    $0xc,%rax
jae    1405 <tautString_TV1+0x305>
xor    %ebx,%ebx
jmp    1459 <tautString_TV1+0x359>
movabs $0x7ffffffffffffffc,%rax
ff ff 7f
and    %rax,%rbp
mov    -0x10(%rsp),%rax
lea    (%rax,%rcx,8),%r9
xor    %eax,%eax
xchg   %ax,%ax
movupd %xmm1,-0x70(%r9,%rax,8)
movupd %xmm1,-0x60(%r9,%rax,8)
movupd %xmm1,-0x50(%r9,%rax,8)
movupd %xmm1,-0x40(%r9,%rax,8)
movupd %xmm1,-0x30(%r9,%rax,8)
movupd %xmm1,-0x20(%r9,%rax,8)
movupd %xmm1,-0x10(%r9,%rax,8)
movupd %xmm1,(%r9,%rax,8)
add    $0x10,%rax
add    $0xfffffffffffffffc,%rbp
jne    1360 <tautString_TV1+0x260>
test   %r13,%r13
je     13d4 <tautString_TV1+0x2d4>
add    %rcx,%rax
mov    -0x8(%rsp),%rbp
lea    0x0(,%rax,8),%rax
add    %rbp,%rax
shl    $0x5,%r13
xor    %ebp,%ebp
nop
movupd %xmm1,-0x10(%rax,%rbp,1)
movupd %xmm1,(%rax,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%r13
jne    13c0 <tautString_TV1+0x2c0>
cmp    %r15,%r12
je     13ef <tautString_TV1+0x2ef>
add    %r15,%rcx
nopl   0x0(%rax)
movsd  %xmm3,0x8(%rsi,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rbx
jne    13e0 <tautString_TV1+0x2e0>
movslq %r11d,%rax
movsd  (%rdi,%rax,8),%xmm3
movapd %xmm12,%xmm2
addsd  %xmm3,%xmm2
jmp    14b3 <tautString_TV1+0x3b3>
movabs $0x7ffffffffffffffc,%rax
ff ff 7f
and    %rax,%rbp
mov    -0x10(%rsp),%rax
lea    (%rax,%rcx,8),%rax
xor    %ebx,%ebx
nopl   (%rax)
movupd %xmm1,-0x70(%rax,%rbx,8)
movupd %xmm1,-0x60(%rax,%rbx,8)
movupd %xmm1,-0x50(%rax,%rbx,8)
movupd %xmm1,-0x40(%rax,%rbx,8)
movupd %xmm1,-0x30(%rax,%rbx,8)
movupd %xmm1,-0x20(%rax,%rbx,8)
movupd %xmm1,-0x10(%rax,%rbx,8)
movupd %xmm1,(%rax,%rbx,8)
add    $0x10,%rbx
add    $0xfffffffffffffffc,%rbp
jne    1420 <tautString_TV1+0x320>
test   %r8,%r8
je     1484 <tautString_TV1+0x384>
add    %rcx,%rbx
mov    -0x8(%rsp),%rax
lea    (%rax,%rbx,8),%rax
shl    $0x5,%r8
xor    %ebx,%ebx
movupd %xmm1,-0x10(%rax,%rbx,1)
movupd %xmm1,(%rax,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r8
jne    1470 <tautString_TV1+0x370>
cmp    %r15,%r12
je     149f <tautString_TV1+0x39f>
add    %r15,%rcx
nopl   0x0(%rax)
movsd  %xmm2,0x8(%rsi,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%r9
jne    1490 <tautString_TV1+0x390>
movslq %r11d,%rax
movsd  (%rdi,%rax,8),%xmm2
movapd %xmm11,%xmm3
addsd  %xmm2,%xmm3
mov    %r13d,%r8d
lea    0x2(%r8),%eax
movapd %xmm5,%xmm7
mov    %r11d,%r15d
movapd %xmm0,%xmm1
cmp    %r14d,%eax
jl     11d0 <tautString_TV1+0xd0>
mov    %r8d,%r12d
movapd %xmm0,%xmm1
mov    %r11d,%r10d
mov    %r11d,%r13d
movapd %xmm5,%xmm7
jmp    14e3 <tautString_TV1+0x3e3>
xchg   %ax,%ax
mov    %r8d,%r10d
movslq %eax,%rcx
movsd  (%rdi,%rcx,8),%xmm4
movapd %xmm3,%xmm6
subsd  %xmm4,%xmm6
addsd  %xmm7,%xmm6
ucomisd %xmm10,%xmm6
jbe    1560 <tautString_TV1+0x460>
lea    0x1(%r10),%r15d
cmp    %r10d,%r12d
jge    1190 <tautString_TV1+0x90>
movslq %r12d,%rax
movslq %r10d,%r9
mov    %r9,%r12
sub    %rax,%r12
cmp    $0x4,%r12
jb     16a0 <tautString_TV1+0x5a0>
mov    %r12,%r11
and    $0xfffffffffffffffc,%r11
movapd %xmm3,%xmm1
unpcklpd %xmm3,%xmm1
lea    -0x4(%r11),%rcx
mov    %rcx,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
mov    %ebx,%r13d
and    $0x3,%r13d
cmp    $0xc,%rcx
jae    1600 <tautString_TV1+0x500>
xor    %ecx,%ecx
jmp    165a <tautString_TV1+0x55a>
nopw   0x0(%rax,%rax,1)
movapd %xmm2,%xmm7
subsd  %xmm4,%xmm7
addsd  %xmm7,%xmm1
ucomisd %xmm1,%xmm9
jbe    15d0 <tautString_TV1+0x4d0>
lea    0x1(%r13),%r15d
cmp    %r13d,%r12d
jge    174f <tautString_TV1+0x64f>
movslq %r12d,%rax
movslq %r13d,%r9
mov    %r9,%r8
sub    %rax,%r8
cmp    $0x4,%r8
jb     1740 <tautString_TV1+0x640>
mov    %r8,%r11
and    $0xfffffffffffffffc,%r11
movapd %xmm2,%xmm1
unpcklpd %xmm2,%xmm1
lea    -0x4(%r11),%rcx
mov    %rcx,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
mov    %ebx,%r12d
and    $0x3,%r12d
cmp    $0xc,%rcx
jae    16b4 <tautString_TV1+0x5b4>
xor    %ebp,%ebp
jmp    1709 <tautString_TV1+0x609>
nopl   0x0(%rax)
ucomisd %xmm6,%xmm8
jb     15ef <tautString_TV1+0x4ef>
mov    %eax,%ecx
sub    %r12d,%ecx
xorps  %xmm4,%xmm4
cvtsi2sd %ecx,%xmm4
movapd %xmm6,%xmm7
divsd  %xmm4,%xmm7
subsd  %xmm7,%xmm3
add    $0x1,%eax
mov    %r10d,%r15d
mov    %r13d,%r11d
mov    %r12d,%r10d
jmp    11af <tautString_TV1+0xaf>
movabs $0x7ffffffffffffffc,%rcx
ff ff 7f
and    %rcx,%rbx
mov    -0x10(%rsp),%rcx
lea    (%rcx,%rax,8),%rbp
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movupd %xmm1,-0x70(%rbp,%rcx,8)
movupd %xmm1,-0x60(%rbp,%rcx,8)
movupd %xmm1,-0x50(%rbp,%rcx,8)
movupd %xmm1,-0x40(%rbp,%rcx,8)
movupd %xmm1,-0x30(%rbp,%rcx,8)
movupd %xmm1,-0x20(%rbp,%rcx,8)
movupd %xmm1,-0x10(%rbp,%rcx,8)
movupd %xmm1,0x0(%rbp,%rcx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffc,%rbx
jne    1620 <tautString_TV1+0x520>
test   %r13,%r13
je     1694 <tautString_TV1+0x594>
add    %rax,%rcx
mov    -0x8(%rsp),%rbp
lea    0x0(,%rcx,8),%rcx
add    %rbp,%rcx
shl    $0x5,%r13
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movupd %xmm1,-0x10(%rcx,%rbx,1)
movupd %xmm1,(%rcx,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r13
jne    1680 <tautString_TV1+0x580>
cmp    %r11,%r12
je     1190 <tautString_TV1+0x90>
add    %r11,%rax
movsd  %xmm3,0x8(%rsi,%rax,8)
add    $0x1,%rax
cmp    %rax,%r9
jne    16a0 <tautString_TV1+0x5a0>
jmp    1190 <tautString_TV1+0x90>
movabs $0x7ffffffffffffffc,%rcx
ff ff 7f
and    %rcx,%rbx
mov    -0x10(%rsp),%rcx
lea    (%rcx,%rax,8),%rcx
xor    %ebp,%ebp
nopl   0x0(%rax)
movupd %xmm1,-0x70(%rcx,%rbp,8)
movupd %xmm1,-0x60(%rcx,%rbp,8)
movupd %xmm1,-0x50(%rcx,%rbp,8)
movupd %xmm1,-0x40(%rcx,%rbp,8)
movupd %xmm1,-0x30(%rcx,%rbp,8)
movupd %xmm1,-0x20(%rcx,%rbp,8)
movupd %xmm1,-0x10(%rcx,%rbp,8)
movupd %xmm1,(%rcx,%rbp,8)
add    $0x10,%rbp
add    $0xfffffffffffffffc,%rbx
jne    16d0 <tautString_TV1+0x5d0>
test   %r12,%r12
je     1734 <tautString_TV1+0x634>
add    %rax,%rbp
mov    -0x8(%rsp),%rcx
lea    (%rcx,%rbp,8),%rcx
shl    $0x5,%r12
xor    %ebx,%ebx
movupd %xmm1,-0x10(%rcx,%rbx,1)
movupd %xmm1,(%rcx,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r12
jne    1720 <tautString_TV1+0x620>
cmp    %r11,%r8
je     174f <tautString_TV1+0x64f>
add    %r11,%rax
nopl   0x0(%rax)
movsd  %xmm2,0x8(%rsi,%rax,8)
add    $0x1,%rax
cmp    %rax,%r9
jne    1740 <tautString_TV1+0x640>
movslq %r15d,%rax
movsd  (%rdi,%rax,8),%xmm2
movapd %xmm11,%xmm3
addsd  %xmm2,%xmm3
movapd %xmm0,%xmm1
mov    %r15d,%r11d
mov    %r13d,%r10d
mov    %r15d,%eax
movapd %xmm0,%xmm6
jmp    11af <tautString_TV1+0xaf>
mov    $0xffffffff,%r10d
lea    0x1(%r10),%eax
cmp    %edx,%eax
jge    185d <tautString_TV1+0x75d>
cltq
mov    %edx,%r9d
sub    %r10d,%r9d
add    $0xfffffffe,%r9d
cmp    $0x3,%r9d
jb     184c <tautString_TV1+0x74c>
add    $0x1,%r9
mov    %r9,%r8
and    $0xfffffffffffffffc,%r8
movapd %xmm3,%xmm0
unpcklpd %xmm3,%xmm0
lea    -0x4(%r8),%rcx
mov    %rcx,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
mov    %ebp,%ebx
and    $0x3,%ebx
cmp    $0xc,%rcx
jae    17cf <tautString_TV1+0x6cf>
xor    %ecx,%ecx
jmp    1819 <tautString_TV1+0x719>
and    $0xfffffffffffffffc,%rbp
lea    (%rsi,%rax,8),%rdi
add    $0x70,%rdi
xor    %ecx,%ecx
nopl   (%rax)
movupd %xmm0,-0x70(%rdi,%rcx,8)
movupd %xmm0,-0x60(%rdi,%rcx,8)
movupd %xmm0,-0x50(%rdi,%rcx,8)
movupd %xmm0,-0x40(%rdi,%rcx,8)
movupd %xmm0,-0x30(%rdi,%rcx,8)
movupd %xmm0,-0x20(%rdi,%rcx,8)
movupd %xmm0,-0x10(%rdi,%rcx,8)
movupd %xmm0,(%rdi,%rcx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffc,%rbp
jne    17e0 <tautString_TV1+0x6e0>
test   %rbx,%rbx
je     1844 <tautString_TV1+0x744>
add    %rax,%rcx
lea    (%rsi,%rcx,8),%rcx
add    $0x10,%rcx
shl    $0x5,%rbx
xor    %edi,%edi
nop
movupd %xmm0,-0x10(%rcx,%rdi,1)
movupd %xmm0,(%rcx,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rbx
jne    1830 <tautString_TV1+0x730>
cmp    %r8,%r9
je     185d <tautString_TV1+0x75d>
add    %r8,%rax
mov    %edx,%ecx
xchg   %ax,%ax
movsd  %xmm3,(%rsi,%rax,8)
add    $0x1,%rax
cmp    %eax,%ecx
jne    1850 <tautString_TV1+0x750>
mov    $0x1,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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